From e6d77ebb6ded310043c4920e63781c52a59922c4 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Mon, 1 Dec 2008 00:02:51 +0900 Subject: [PATCH] remember splitter state, possible fix for focus error --- ankiqt/ui/addcards.py | 4 +++- ankiqt/ui/cardlist.py | 7 ++++++- ankiqt/ui/facteditor.py | 12 +++++++++++- ankiqt/ui/utils.py | 9 +++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/ankiqt/ui/addcards.py b/ankiqt/ui/addcards.py index a121708ba..2d3acdf1d 100644 --- a/ankiqt/ui/addcards.py +++ b/ankiqt/ui/addcards.py @@ -9,7 +9,7 @@ import anki from anki.facts import Fact from anki.errors import * from anki.utils import stripHTML -from ankiqt.ui.utils import saveGeom, restoreGeom +from ankiqt.ui.utils import saveGeom, restoreGeom, saveSplitter, restoreSplitter from ankiqt import ui class AddCards(QDialog): @@ -27,6 +27,7 @@ class AddCards(QDialog): self.modelChanged(self.parent.deck.currentModel) self.addedItems = 0 restoreGeom(self, "add") + restoreSplitter(self.dialog.splitter, "add") self.show() ui.dialogs.open("AddCards", self) @@ -138,6 +139,7 @@ question or answer on all cards. Can't proceed."""), parent=self) self.parent.deck.rebuildCSS() self.parent.moveToState("auto") saveGeom(self, "add") + saveSplitter(self.dialog.splitter, "add") return True else: return False diff --git a/ankiqt/ui/cardlist.py b/ankiqt/ui/cardlist.py index 347c1760b..fd8883e25 100644 --- a/ankiqt/ui/cardlist.py +++ b/ankiqt/ui/cardlist.py @@ -12,7 +12,7 @@ from anki.cards import cardsTable, Card from anki.facts import factsTable, fieldsTable, Fact from anki.utils import fmtTimeSpan, parseTags, findTag, addTags, deleteTags, \ stripHTML, ids2str -from ankiqt.ui.utils import saveGeom, restoreGeom +from ankiqt.ui.utils import saveGeom, restoreGeom, saveSplitter, restoreSplitter from anki.errors import * from anki.db import * from anki.stats import CardStats @@ -211,6 +211,7 @@ class EditDeck(QMainWindow): self.drawTags() self.updateFilterLabel() restoreGeom(self, "editor") + restoreSplitter(self.dialog.splitter, "editor") self.show() self.updateSearch() @@ -391,12 +392,14 @@ class EditDeck(QMainWindow): def onClose(self): self.editor.saveFieldsNow() + self.editor.setFact(None) if not self.factValid: ui.utils.showInfo(_( "Some fields are missing or not unique."), parent=self, help="AddItems#AddError") return saveGeom(self, "editor") + saveSplitter(self.dialog.splitter, "editor") self.hide() if self.origModTime != self.deck.modified: self.parent.reset() @@ -547,6 +550,8 @@ where id in (%s)""" % ",".join([ self.updateSearch() def selectFacts(self): + self.editor.setFact(None) + return sm = self.dialog.tableView.selectionModel() cardIds = dict([(x, 1) for x in self.selectedFactsAsCards()]) for i, card in enumerate(self.model.cards): diff --git a/ankiqt/ui/facteditor.py b/ankiqt/ui/facteditor.py index c4ae7e2a4..70c8673d6 100644 --- a/ankiqt/ui/facteditor.py +++ b/ankiqt/ui/facteditor.py @@ -40,9 +40,14 @@ class FactEditor(object): self.changeTimer.stop() self.changeTimer = None if self.needToRedraw(): - self.drawFields(noFocus, check) + if self.fact: + self.drawFields(noFocus, check) + else: + self.widget.hide() + return else: self.loadFields(check) + self.widget.show() if not noFocus: # update focus to first field self.fields[self.fact.fields[0].name][1].setFocus() @@ -256,6 +261,8 @@ class FactEditor(object): self.fieldsScroll.setWidget(self.fieldsFrame) def needToRedraw(self): + if self.fact is None: + return True if len(self.fact.fields) != len(self.fields): return True for field in self.fact.fields: @@ -311,6 +318,9 @@ class FactEditor(object): self.deck.setUndoEnd(n) def onFocusLost(self, widget): + if self.fact is None: + # editor closed + return self.saveFields() field = self.widgets[widget] self.fact.onKeyPress(field, field.value) diff --git a/ankiqt/ui/utils.py b/ankiqt/ui/utils.py index af47e0c0b..e570d664a 100644 --- a/ankiqt/ui/utils.py +++ b/ankiqt/ui/utils.py @@ -149,6 +149,15 @@ def restoreGeom(widget, key): if ankiqt.mw.config.get(key): widget.restoreGeometry(ankiqt.mw.config[key]) +def saveSplitter(widget, key): + key += "Splitter" + ankiqt.mw.config[key] = widget.saveState() + +def restoreSplitter(widget, key): + key += "Splitter" + if ankiqt.mw.config.get(key): + widget.restoreState(ankiqt.mw.config[key]) + def mungeQA(deck, txt): txt = renderLatex(deck, txt) txt = stripSounds(txt)