mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 22:12:21 -04:00
Add DeckLimitsDialog
This commit is contained in:
parent
0bda496218
commit
eb0e2a62d3
7 changed files with 255 additions and 44 deletions
|
@ -30,3 +30,4 @@ decks-study = Study
|
|||
decks-study-deck = Study Deck
|
||||
decks-filtered-deck-search-empty = No cards matched the provided search. Some cards may have been excluded because they are in a different filtered deck, or suspended.
|
||||
decks-unmovable-cards = Show any excluded cards
|
||||
decks-override-preset-limits = Override preset limits
|
||||
|
|
51
qt/aqt/deck_limits.py
Normal file
51
qt/aqt/deck_limits.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
# Copyright: Ankitects Pty Ltd and contributors
|
||||
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import aqt.forms
|
||||
import aqt.main
|
||||
from anki.decks import DeckDict
|
||||
from aqt.operations.deck import update_deck_dict
|
||||
from aqt.qt import *
|
||||
from aqt.utils import disable_help_button
|
||||
|
||||
|
||||
class DeckLimitsDialog(QDialog):
|
||||
def __init__(self, mw: aqt.main.AnkiQt, deck: DeckDict):
|
||||
super().__init__(parent=mw)
|
||||
self.mw = mw
|
||||
self.col = mw.col
|
||||
self.deck = deck
|
||||
self.frm = aqt.forms.deck_limits.Ui_Dialog()
|
||||
self.frm.setupUi(self)
|
||||
disable_help_button(self)
|
||||
self._setup()
|
||||
self.open()
|
||||
|
||||
def _setup(self) -> None:
|
||||
review_limit = self.deck["reviewLimit"]
|
||||
new_limit = self.deck["newLimit"]
|
||||
self.frm.review_limit.setValue(review_limit or 0)
|
||||
self.frm.new_limit.setValue(new_limit or 0)
|
||||
|
||||
enabled = None not in (review_limit, new_limit)
|
||||
self.frm.enable_override.setChecked(enabled)
|
||||
self.frm.review_limit.setEnabled(enabled)
|
||||
self.frm.new_limit.setEnabled(enabled)
|
||||
|
||||
qconnect(self.frm.enable_override.toggled, self._on_override_toggled)
|
||||
|
||||
def _on_override_toggled(self) -> None:
|
||||
enabled = self.frm.enable_override.isChecked()
|
||||
self.frm.review_limit.setEnabled(enabled)
|
||||
self.frm.new_limit.setEnabled(enabled)
|
||||
|
||||
def accept(self) -> None:
|
||||
if self.frm.enable_override.isChecked():
|
||||
self.deck["reviewLimit"] = self.frm.review_limit.value()
|
||||
self.deck["newLimit"] = self.frm.new_limit.value()
|
||||
else:
|
||||
self.deck["reviewLimit"] = self.deck["newLimit"] = None
|
||||
update_deck_dict(parent=self.mw, deck=self.deck).run_in_background()
|
||||
super().accept()
|
|
@ -10,8 +10,9 @@ from typing import Any
|
|||
import aqt
|
||||
import aqt.operations
|
||||
from anki.collection import OpChanges
|
||||
from anki.decks import DeckCollapseScope, DeckId, DeckTreeNode
|
||||
from anki.decks import DeckCollapseScope, DeckDict, DeckId, DeckTreeNode
|
||||
from aqt import AnkiQt, gui_hooks
|
||||
from aqt.deck_limits import DeckLimitsDialog
|
||||
from aqt.deckoptions import display_options_for_deck_id
|
||||
from aqt.operations import QueryOp
|
||||
from aqt.operations.deck import (
|
||||
|
@ -264,11 +265,15 @@ class DeckBrowser:
|
|||
##########################################################################
|
||||
|
||||
def _showOptions(self, did: str) -> None:
|
||||
deck = self.mw.col.decks.get(did)
|
||||
m = QMenu(self.mw)
|
||||
a = m.addAction(tr.actions_rename())
|
||||
qconnect(a.triggered, lambda b, did=did: self._rename(DeckId(int(did))))
|
||||
a = m.addAction(tr.actions_options())
|
||||
qconnect(a.triggered, lambda b, did=did: self._options(DeckId(int(did))))
|
||||
if not deck["dyn"]:
|
||||
a = m.addAction(tr.deck_config_daily_limits())
|
||||
qconnect(a.triggered, lambda _: self._limits(deck))
|
||||
a = m.addAction(tr.actions_export())
|
||||
qconnect(a.triggered, lambda b, did=did: self._export(DeckId(int(did))))
|
||||
a = m.addAction(tr.actions_delete())
|
||||
|
@ -296,6 +301,9 @@ class DeckBrowser:
|
|||
def _options(self, did: DeckId) -> None:
|
||||
display_options_for_deck_id(did)
|
||||
|
||||
def _limits(self, deck: DeckDict) -> None:
|
||||
DeckLimitsDialog(self.mw, deck)
|
||||
|
||||
def _collapse(self, did: DeckId) -> None:
|
||||
node = self.mw.col.decks.find_deck_in_tree(self._dueTree, did)
|
||||
if node:
|
||||
|
|
|
@ -1,43 +1,46 @@
|
|||
from . import about
|
||||
from . import addcards
|
||||
from . import addfield
|
||||
from . import addmodel
|
||||
from . import addonconf
|
||||
from . import addons
|
||||
from . import browser
|
||||
from . import browserdisp
|
||||
from . import browseropts
|
||||
from . import changemap
|
||||
from . import changemodel
|
||||
from . import clayout_top
|
||||
from . import customstudy
|
||||
from . import dconf
|
||||
from . import debug
|
||||
from . import filtered_deck
|
||||
from . import forget
|
||||
from . import editaddon
|
||||
from . import editcurrent
|
||||
from . import edithtml
|
||||
from . import emptycards
|
||||
from . import exporting
|
||||
from . import fields
|
||||
from . import fields_web
|
||||
from . import finddupes
|
||||
from . import findreplace
|
||||
from . import getaddons
|
||||
from . import importing
|
||||
from . import main
|
||||
from . import modelopts
|
||||
from . import models
|
||||
from . import preferences
|
||||
from . import preview
|
||||
from . import profiles
|
||||
from . import progress
|
||||
from . import reposition
|
||||
from . import setgroup
|
||||
from . import setlang
|
||||
from . import stats
|
||||
from . import studydeck
|
||||
from . import synclog
|
||||
from . import taglimit
|
||||
from . import template
|
||||
from . import (
|
||||
about,
|
||||
addcards,
|
||||
addfield,
|
||||
addmodel,
|
||||
addonconf,
|
||||
addons,
|
||||
browser,
|
||||
browserdisp,
|
||||
browseropts,
|
||||
changemap,
|
||||
changemodel,
|
||||
clayout_top,
|
||||
customstudy,
|
||||
dconf,
|
||||
debug,
|
||||
deck_limits,
|
||||
editaddon,
|
||||
editcurrent,
|
||||
edithtml,
|
||||
emptycards,
|
||||
exporting,
|
||||
fields,
|
||||
fields_web,
|
||||
filtered_deck,
|
||||
finddupes,
|
||||
findreplace,
|
||||
forget,
|
||||
getaddons,
|
||||
importing,
|
||||
main,
|
||||
modelopts,
|
||||
models,
|
||||
preferences,
|
||||
preview,
|
||||
profiles,
|
||||
progress,
|
||||
reposition,
|
||||
setgroup,
|
||||
setlang,
|
||||
stats,
|
||||
studydeck,
|
||||
synclog,
|
||||
taglimit,
|
||||
template,
|
||||
)
|
||||
|
|
6
qt/aqt/forms/deck_limits.py
Normal file
6
qt/aqt/forms/deck_limits.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
from aqt.qt import qtmajor
|
||||
|
||||
if qtmajor > 5:
|
||||
from .deck_limits_qt6 import *
|
||||
else:
|
||||
from .deck_limits_qt5 import * # type: ignore
|
141
qt/aqt/forms/deck_limits.ui
Normal file
141
qt/aqt/forms/deck_limits.ui
Normal file
|
@ -0,0 +1,141 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Dialog</class>
|
||||
<widget class="QDialog" name="Dialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>273</width>
|
||||
<height>134</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string notr="true">Anki</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="enable_override">
|
||||
<property name="text">
|
||||
<string>decks_override_preset_limits</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>scheduling_maximum_reviewsday</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="review_limit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>scheduling_new_cardsday</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="new_limit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frame">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
1
qt/aqt/forms/deck_limits_qt6.py
Normal file
1
qt/aqt/forms/deck_limits_qt6.py
Normal file
|
@ -0,0 +1 @@
|
|||
../../../.bazel/bin/qt/aqt/forms/deck_limits_qt6.py
|
Loading…
Reference in a new issue