From 3855183213dff718e82c6feb8468745c7184de9e Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 14 Apr 2011 03:52:32 +0900 Subject: [PATCH] find & replace --- aqt/browser.py | 55 ++++++++++++------------ aqt/editor.py | 4 +- designer/browser.ui | 3 ++ designer/findreplace.ui | 94 +++++++++++++++++++++++------------------ 4 files changed, 84 insertions(+), 72 deletions(-) diff --git a/aqt/browser.py b/aqt/browser.py index 6a13ff32b..c39cdf2e8 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -116,6 +116,7 @@ class DeckModel(QAbstractTableModel): def beginReset(self): self.browser.editor.saveNow() + self.browser.editor.setFact(None, hide=False) self.browser.mw.progress.start() self.saveSelection() self.beginResetModel() @@ -740,6 +741,7 @@ where id in %s""" % ids2str(sf)) ChangeModel(self, fids) def cram(self): + return showInfo("not yet implemented") self.close() self.mw.onCram(self.selectedCards()) @@ -822,6 +824,7 @@ where id in %s""" % ids2str(sf)) ###################################################################### def reschedule(self): + return showInfo("not yet implemented") n = _("Reschedule") d = QDialog(self) frm = aqt.forms.reschedule.Ui_Dialog() @@ -911,52 +914,46 @@ where id in %s""" % ids2str(sf)) sf = self.selectedFacts() if not sf: return - mods = self.deck.db.column0(""" -select distinct modelId from facts -where id in %s""" % ids2str(sf)) - if not len(mods) == 1: - ui.utils.showInfo( - _("Can only operate on one model at a time."), - parent=self) - return + import anki.find + fields = sorted(anki.find.fieldNames(self.deck, downcase=False)) d = QDialog(self) frm = aqt.forms.findreplace.Ui_Dialog() frm.setupUi(d) - fields = sorted(self.card.fact.model.fieldModels, key=attrgetter("name")) - frm.field.addItems(QStringList( - [_("All Fields")] + [f.name for f in fields])) + frm.field.addItems(QStringList([_("All Fields")] + fields)) self.connect(frm.buttonBox, SIGNAL("helpRequested()"), self.onFindReplaceHelp) if not d.exec_(): return - n = _("Find and Replace") - self.deck.startProgress(2) - self.deck.updateProgress(_("Replacing...")) - self.deck.setUndoStart(n) - self.deck.updateProgress() - changed = None + if frm.field.currentIndex() == 0: + field = None + else: + field = fields[frm.field.currentIndex()-1] + self.mw.checkpoint(_("Find and Replace")) + self.mw.progress.start() + self.model.beginReset() try: - if frm.field.currentIndex() == 0: - field = None - else: - field = fields[frm.field.currentIndex()-1].id changed = self.deck.findReplace(sf, unicode(frm.find.text()), unicode(frm.replace.text()), frm.re.isChecked(), - field) + field, + frm.ignoreCase.isChecked()) except sre_constants.error: ui.utils.showInfo(_("Invalid regular expression."), parent=self) - self.deck.setUndoEnd(n) - self.deck.finishProgress() - self.mw.reset() - self.onSearch() - if changed is not None: - ui.utils.showInfo(ngettext("%(a)d of %(b)d fact updated", "%(a)d of %(b)d facts updated", len(sf)) % { + return + else: + self.onSearch() + self.resetDeck() + finally: + self.model.endReset() + self.mw.progress.finish() + showInfo(ngettext( + "%(a)d of %(b)d fact updated", + "%(a)d of %(b)d facts updated", len(sf)) % { 'a': changed, 'b': len(sf), - }, parent=self) + }) def onFindReplaceHelp(self): aqt.openHelp("Browser#FindReplace") diff --git a/aqt/editor.py b/aqt/editor.py index 459232326..edf8a4180 100644 --- a/aqt/editor.py +++ b/aqt/editor.py @@ -350,7 +350,7 @@ class Editor(object): if self.fact: self.loadFact() - def setFact(self, fact): + def setFact(self, fact, hide=True): "Make FACT the current fact." self.fact = fact # change timer @@ -359,7 +359,7 @@ class Editor(object): loadCB=self._loadFinished) self.updateTagsAndGroup() self.updateKeyboard() - else: + elif hide: self.widget.hide() def loadFact(self, field=0): diff --git a/designer/browser.ui b/designer/browser.ui index 5213ed4dc..962cc4ba7 100644 --- a/designer/browser.ui +++ b/designer/browser.ui @@ -457,6 +457,9 @@ Find and Re&place... + + Ctrl+Alt+F + diff --git a/designer/findreplace.ui b/designer/findreplace.ui index d27b9d7cf..4b94cf51f 100644 --- a/designer/findreplace.ui +++ b/designer/findreplace.ui @@ -1,65 +1,76 @@ - + + Dialog - - + + 0 0 - 322 - 159 + 367 + 209 - + Find and Replace - + - - - - - <b>Find</b>: + + + + + <b>Find</b>: - - + + - - - - <b>Replace With</b>: + + + + <b>Replace With</b>: - - + + - - - + + + + <b>In</b>: + + + + + + + + + Treat input as regular expression - - - - <b>In</b>: + + + + Ignore case + + + true - - - - - + + Qt::Vertical - + 20 40 @@ -68,11 +79,11 @@ - - + + Qt::Horizontal - + QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok @@ -81,8 +92,9 @@ find - field replace + field + ignoreCase re buttonBox @@ -94,11 +106,11 @@ Dialog accept() - + 256 154 - + 157 274 @@ -110,11 +122,11 @@ Dialog reject() - + 290 154 - + 286 274