Пример #1
0
    def __init__(
        self,
        mw: AnkiQt,
        deck_id: DeckId = DeckId(0),
        search: str | None = None,
        search_2: str | None = None,
    ) -> None:
        """If 'deck_id' is non-zero, load and modify its settings.
        Otherwise, build a new deck and derive settings from the current deck.

        If search or search_2 are provided, they will be used as the default
        search text.
        """

        QDialog.__init__(self, mw)
        self.mw = mw
        mw.garbage_collect_on_dialog_finish(self)
        self.col = self.mw.col
        self._desired_search_1 = search
        self._desired_search_2 = search_2

        self._initial_dialog_setup()

        # set on successful query
        self.deck: FilteredDeckForUpdate

        QueryOp(
            parent=self.mw,
            op=lambda col: col.sched.get_or_create_filtered_deck(deck_id=
                                                                 deck_id),
            success=self.load_deck_and_show,
        ).failure(self.on_fetch_error).run_in_background()
Пример #2
0
 def __init__(self, parent: QWidget, mw: AnkiQt,
              on_close: Callable[[], None]) -> None:
     super().__init__(None, Qt.WindowType.Window)
     mw.garbage_collect_on_dialog_finish(self)
     self._open = True
     self._parent = parent
     self._close_callback = on_close
     self.mw = mw
     disable_help_button(self)
     setWindowIcon(self)
Пример #3
0
 def __init__(self, parent: QWidget, mw: AnkiQt,
              on_close: Callable[[], None]) -> None:
     super().__init__(None, Qt.Window)
     mw.garbage_collect_on_dialog_finish(self)
     self._open = True
     self._parent = parent
     self._close_callback = on_close
     self.mw = mw
     icon = QIcon()
     icon.addPixmap(QPixmap(":/icons/anki.png"), QIcon.Normal, QIcon.Off)
     disable_help_button(self)
     self.setWindowIcon(icon)
Пример #4
0
    def __init__(
        self,
        mw: AnkiQt,
        nt: NotetypeDict,
        parent: Optional[QWidget] = None,
        open_at: int = 0,
    ) -> None:
        QDialog.__init__(self, parent or mw)
        mw.garbage_collect_on_dialog_finish(self)
        self.mw = mw
        self.col = self.mw.col
        self.mm = self.mw.col.models
        self.model = nt
        self.mm._remove_from_cache(self.model["id"])
        self.change_tracker = ChangeTracker(self.mw)

        self.setWindowTitle(
            without_unicode_isolation(
                tr.fields_fields_for(val=self.model["name"])))

        if os.getenv("ANKI_EXPERIMENTAL_FIELDS_WEB"):
            form = aqt.forms.fields_web.Ui_Dialog()
            form.setupUi(self)

            self.webview = form.webview
            self.webview.set_title("fields")

            self.show()
            self.refresh()
            self.webview.set_bridge_command(self._on_bridge_cmd, self)
            self.activateWindow()
            return

        self.form = aqt.forms.fields.Ui_Dialog()
        self.form.setupUi(self)
        self.webview = None

        disable_help_button(self)
        self.form.buttonBox.button(
            QDialogButtonBox.StandardButton.Help).setAutoDefault(False)
        self.form.buttonBox.button(
            QDialogButtonBox.StandardButton.Cancel).setAutoDefault(False)
        self.form.buttonBox.button(
            QDialogButtonBox.StandardButton.Save).setAutoDefault(False)
        self.currentIdx: Optional[int] = None
        self.fillFields()
        self.setupSignals()
        self.form.fieldList.setDragDropMode(
            QAbstractItemView.DragDropMode.InternalMove)
        self.form.fieldList.dropEvent = self.onDrop  # type: ignore[assignment]
        self.form.fieldList.setCurrentRow(open_at)
        self.exec()
Пример #5
0
 def __init__(
     self,
     mw: AnkiQt,
     note: Note,
     ord: int = 0,
     parent: Optional[QWidget] = None,
     fill_empty: bool = False,
 ) -> None:
     QDialog.__init__(self, parent or mw, Qt.Window)
     mw.garbage_collect_on_dialog_finish(self)
     self.mw = aqt.mw
     self.note = note
     self.ord = ord
     self.col = self.mw.col.weakref()
     self.mm = self.mw.col.models
     self.model = note.model()
     self.templates = self.model["tmpls"]
     self.fill_empty_action_toggled = fill_empty
     self.night_mode_is_enabled = self.mw.pm.night_mode()
     self.mobile_emulation_enabled = False
     self.have_autoplayed = False
     self.mm._remove_from_cache(self.model["id"])
     self.mw.checkpoint(tr.card_templates_card_types())
     self.change_tracker = ChangeTracker(self.mw)
     self.setupTopArea()
     self.setupMainArea()
     self.setupButtons()
     self.setupShortcuts()
     self.setWindowTitle(
         without_unicode_isolation(
             tr.card_templates_card_types_for(val=self.model["name"])
         )
     )
     disable_help_button(self)
     v1 = QVBoxLayout()
     v1.addWidget(self.topArea)
     v1.addWidget(self.mainArea)
     v1.addLayout(self.buttons)
     v1.setContentsMargins(12, 12, 12, 12)
     self.setLayout(v1)
     gui_hooks.card_layout_will_show(self)
     self.redraw_everything()
     restoreGeom(self, "CardLayout")
     restoreSplitter(self.mainArea, "CardLayoutMainArea")
     self.setWindowModality(Qt.ApplicationModal)
     self.show()
     # take the focus away from the first input area when starting up,
     # as users tend to accidentally type into the template
     self.setFocus()
Пример #6
0
 def __init__(self, mw: AnkiQt) -> None:
     QDialog.__init__(self, None, Qt.Window)
     mw.garbage_collect_on_dialog_finish(self)
     self.mw = mw
     self.form = aqt.forms.addcards.Ui_Dialog()
     self.form.setupUi(self)
     self.setWindowTitle(tr(TR.ACTIONS_ADD))
     disable_help_button(self)
     self.setMinimumHeight(300)
     self.setMinimumWidth(400)
     self.setup_choosers()
     self.setupEditor()
     self.setupButtons()
     self._load_new_note()
     self.history: List[NoteID] = []
     self._last_added_note: Optional[Note] = None
     restoreGeom(self, "add")
     addCloseShortcut(self)
     gui_hooks.add_cards_did_init(self)
     self.show()
Пример #7
0
 def __init__(self, mw: AnkiQt) -> None:
     QDialog.__init__(self, None, Qt.Window)
     mw.garbage_collect_on_dialog_finish(self)
     self.mw = mw
     self.col = mw.col
     form = aqt.forms.addcards.Ui_Dialog()
     form.setupUi(self)
     self.form = form
     self.setWindowTitle(tr.actions_add())
     disable_help_button(self)
     self.setMinimumHeight(300)
     self.setMinimumWidth(400)
     self.setup_choosers()
     self.setupEditor()
     self.setupButtons()
     self._load_new_note()
     self.history: list[NoteId] = []
     self._last_added_note: Optional[Note] = None
     gui_hooks.operation_did_execute.append(self.on_operation_did_execute)
     restoreGeom(self, "add")
     addCloseShortcut(self)
     gui_hooks.add_cards_did_init(self)
     self.show()
Пример #8
0
 def __init__(
     self,
     mw: aqt.AnkiQt,
     names: Callable[[], list[str]] | None = None,
     accept: str | None = None,
     title: str | None = None,
     help: HelpPageArgument = HelpPage.KEYBOARD_SHORTCUTS,
     current: str | None = None,
     cancel: bool = True,
     parent: QWidget | None = None,
     dyn: bool = False,
     buttons: list[str | QPushButton] | None = None,
     geomKey: str = "default",
     callback: Callable[[StudyDeck], None] | None = None,
 ) -> None:
     super().__init__(parent)
     if not parent:
         mw.garbage_collect_on_dialog_finish(self)
     self.mw = mw
     self.form = aqt.forms.studydeck.Ui_Dialog()
     self.form.setupUi(self)
     self.form.filter.installEventFilter(self)
     gui_hooks.state_did_reset.append(self.onReset)
     self.geomKey = f"studyDeck-{geomKey}"
     restoreGeom(self, self.geomKey)
     disable_help_button(self)
     if not cancel:
         self.form.buttonBox.removeButton(
             self.form.buttonBox.button(
                 QDialogButtonBox.StandardButton.Cancel))
     if buttons is not None:
         for button_or_label in buttons:
             self.form.buttonBox.addButton(
                 button_or_label, QDialogButtonBox.ButtonRole.ActionRole)
     else:
         b = QPushButton(tr.actions_add())
         b.setShortcut(QKeySequence("Ctrl+N"))
         b.setToolTip(shortcut(tr.decks_add_new_deck_ctrlandn()))
         self.form.buttonBox.addButton(
             b, QDialogButtonBox.ButtonRole.ActionRole)
         qconnect(b.clicked, self.onAddDeck)
     if title:
         self.setWindowTitle(title)
     if not names:
         names_ = [
             d.name for d in self.mw.col.decks.all_names_and_ids(
                 include_filtered=dyn, skip_empty_default=True)
         ]
         self.nameFunc = None
         self.origNames = names_
     else:
         self.nameFunc = names
         self.origNames = names()
     self.name: str | None = None
     self.form.buttonBox.addButton(accept or tr.decks_study(),
                                   QDialogButtonBox.ButtonRole.AcceptRole)
     self.setModal(True)
     qconnect(self.form.buttonBox.helpRequested, lambda: openHelp(help))
     qconnect(self.form.filter.textEdited, self.redraw)
     qconnect(self.form.list.itemDoubleClicked, self.accept)
     qconnect(self.finished, self.on_finished)
     self.show()
     # redraw after show so position at center correct
     self.redraw("", current)
     self.callback = callback
     if callback:
         self.show()
     else:
         self.exec()