Add DeckLimitsDialog

This commit is contained in:
RumovZ 2022-07-08 23:16:17 +02:00
parent 0bda496218
commit eb0e2a62d3
7 changed files with 255 additions and 44 deletions

View file

@ -30,3 +30,4 @@ decks-study = Study
decks-study-deck = Study Deck 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-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-unmovable-cards = Show any excluded cards
decks-override-preset-limits = Override preset limits

51
qt/aqt/deck_limits.py Normal file
View 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()

View file

@ -10,8 +10,9 @@ from typing import Any
import aqt import aqt
import aqt.operations import aqt.operations
from anki.collection import OpChanges 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 import AnkiQt, gui_hooks
from aqt.deck_limits import DeckLimitsDialog
from aqt.deckoptions import display_options_for_deck_id from aqt.deckoptions import display_options_for_deck_id
from aqt.operations import QueryOp from aqt.operations import QueryOp
from aqt.operations.deck import ( from aqt.operations.deck import (
@ -264,11 +265,15 @@ class DeckBrowser:
########################################################################## ##########################################################################
def _showOptions(self, did: str) -> None: def _showOptions(self, did: str) -> None:
deck = self.mw.col.decks.get(did)
m = QMenu(self.mw) m = QMenu(self.mw)
a = m.addAction(tr.actions_rename()) a = m.addAction(tr.actions_rename())
qconnect(a.triggered, lambda b, did=did: self._rename(DeckId(int(did)))) qconnect(a.triggered, lambda b, did=did: self._rename(DeckId(int(did))))
a = m.addAction(tr.actions_options()) a = m.addAction(tr.actions_options())
qconnect(a.triggered, lambda b, did=did: self._options(DeckId(int(did)))) 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()) a = m.addAction(tr.actions_export())
qconnect(a.triggered, lambda b, did=did: self._export(DeckId(int(did)))) qconnect(a.triggered, lambda b, did=did: self._export(DeckId(int(did))))
a = m.addAction(tr.actions_delete()) a = m.addAction(tr.actions_delete())
@ -296,6 +301,9 @@ class DeckBrowser:
def _options(self, did: DeckId) -> None: def _options(self, did: DeckId) -> None:
display_options_for_deck_id(did) display_options_for_deck_id(did)
def _limits(self, deck: DeckDict) -> None:
DeckLimitsDialog(self.mw, deck)
def _collapse(self, did: DeckId) -> None: def _collapse(self, did: DeckId) -> None:
node = self.mw.col.decks.find_deck_in_tree(self._dueTree, did) node = self.mw.col.decks.find_deck_in_tree(self._dueTree, did)
if node: if node:

View file

@ -1,43 +1,46 @@
from . import about from . import (
from . import addcards about,
from . import addfield addcards,
from . import addmodel addfield,
from . import addonconf addmodel,
from . import addons addonconf,
from . import browser addons,
from . import browserdisp browser,
from . import browseropts browserdisp,
from . import changemap browseropts,
from . import changemodel changemap,
from . import clayout_top changemodel,
from . import customstudy clayout_top,
from . import dconf customstudy,
from . import debug dconf,
from . import filtered_deck debug,
from . import forget deck_limits,
from . import editaddon editaddon,
from . import editcurrent editcurrent,
from . import edithtml edithtml,
from . import emptycards emptycards,
from . import exporting exporting,
from . import fields fields,
from . import fields_web fields_web,
from . import finddupes filtered_deck,
from . import findreplace finddupes,
from . import getaddons findreplace,
from . import importing forget,
from . import main getaddons,
from . import modelopts importing,
from . import models main,
from . import preferences modelopts,
from . import preview models,
from . import profiles preferences,
from . import progress preview,
from . import reposition profiles,
from . import setgroup progress,
from . import setlang reposition,
from . import stats setgroup,
from . import studydeck setlang,
from . import synclog stats,
from . import taglimit studydeck,
from . import template synclog,
taglimit,
template,
)

View 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
View 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>

View file

@ -0,0 +1 @@
../../../.bazel/bin/qt/aqt/forms/deck_limits_qt6.py