From 6b2766c2f1fe23986f1ecc07589880e03fdbc999 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sun, 26 Feb 2012 03:12:21 +0900 Subject: [PATCH] update exporting dialog --- aqt/exporting.py | 75 ++++++++++++++------------------------ aqt/main.py | 7 +++- aqt/utils.py | 4 +- designer/exporting.ui | 85 ++++++++++++++++++++++++++----------------- designer/main.ui | 13 +++++++ 5 files changed, 100 insertions(+), 84 deletions(-) diff --git a/aqt/exporting.py b/aqt/exporting.py index dfa8648c6..d51ffc49c 100644 --- a/aqt/exporting.py +++ b/aqt/exporting.py @@ -2,74 +2,55 @@ # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * -import anki, aqt -from anki.exporting import exporters as exporters_ -from anki.utils import parseTags -from aqt import ui - -class PackagedAnkiExporter(object): - def __init__(self, *args): - pass - -def exporters(): - l = list(exporters_()) - l.insert(1, (_("Packaged Anki Deck (*.zip)"), - PackagedAnkiExporter)) - return l +import anki, aqt, aqt.tagedit +from aqt.utils import getSaveFile, tooltip +from anki.exporting import exporters class ExportDialog(QDialog): def __init__(self, parent): QDialog.__init__(self, parent, Qt.Window) self.parent = parent - self.deck = parent.deck - self.dialog = aqt.forms.exporting.Ui_ExportDialog() - self.dialog.setupUi(self) + self.col = parent.col + self.frm = aqt.forms.exporting.Ui_ExportDialog() + self.frm.setupUi(self) self.exporter = None self.setup() self.exec_() def setup(self): - self.dialog.format.insertItems(0, list(zip(*exporters())[0])) - self.connect(self.dialog.format, SIGNAL("activated(int)"), + self.frm.format.insertItems(0, list(zip(*exporters())[0])) + self.connect(self.frm.format, SIGNAL("activated(int)"), self.exporterChanged) self.exporterChanged(0) - # fragile - self.tags = ui.tagedit.TagEdit(self) - self.tags.setDeck(self.deck) - self.dialog.gridlayout.addWidget(self.tags,1,1) - self.setTabOrder(self.dialog.format, - self.tags) - self.setTabOrder(self.tags, - self.dialog.includeScheduling) + self.frm.deck.addItems([_("All Decks")] + sorted( + self.col.decks.allNames())) # save button b = QPushButton(_("Export...")) - self.dialog.buttonBox.addButton(b, QDialogButtonBox.AcceptRole) + self.frm.buttonBox.addButton(b, QDialogButtonBox.AcceptRole) def exporterChanged(self, idx): - self.exporter = exporters()[idx][1](self.deck) - if hasattr(self.exporter, "includeSchedulingInfo"): - self.dialog.includeScheduling.show() - else: - self.dialog.includeScheduling.hide() - if hasattr(self.exporter, "includeTags"): - self.dialog.includeTags.show() - else: - self.dialog.includeTags.hide() + self.exporter = exporters()[idx][1](self.col) + isAnki = hasattr(self.exporter, "includeSched") + self.frm.includeSched.setShown(isAnki) + self.frm.includeMedia.setShown(isAnki) + self.frm.includeTags.setShown(not isAnki) def accept(self): - if isinstance(self.exporter, PackagedAnkiExporter): - self.parent.onShare(unicode(self.tags.text())) - return QDialog.accept(self) - file = ui.utils.getSaveFile(self, _("Choose file to export to"), "export", - self.exporter.key, self.exporter.ext) + file = getSaveFile( + self, _("Choose file to export to"), "export", + self.exporter.key, self.exporter.ext) self.hide() + print file if file: - self.exporter.includeSchedulingInfo = ( - self.dialog.includeScheduling.isChecked()) + self.exporter.includeSched = ( + self.frm.includeSched.isChecked()) self.exporter.includeTags = ( - self.dialog.includeTags.isChecked()) - self.exporter.limitTags = parseTags(unicode(self.tags.text())) + self.frm.includeTags.isChecked()) + if not self.frm.deck.currentIndex(): + self.exporter.did = None + else: + self.exporter.did = self.frm.deck.currentIndex() - 1 self.exporter.exportInto(file) - self.parent.setStatus(_("%d exported.") % self.exporter.count) + tooltip(_("%d exported.") % self.exporter.count) QDialog.accept(self) diff --git a/aqt/main.py b/aqt/main.py index 5fc39d59e..72f8f1343 100755 --- a/aqt/main.py +++ b/aqt/main.py @@ -204,6 +204,7 @@ Are you sure?"""): # maybe sync (will load DB) self.onSync(auto=True) runHook("profileLoaded") + self.onExport() def unloadProfile(self, browser=True): if not self.pm.profile: @@ -717,7 +718,7 @@ Please choose a new deck name:""")) aqt.importing.ImportDialog(self) def onExport(self): - return showInfo("not yet implemented") + import aqt.exporting aqt.exporting.ExportDialog(self) # Language handling @@ -764,6 +765,8 @@ Please choose a new deck name:""")) s = SIGNAL("triggered()") #self.connect(m.actionDownloadSharedPlugin, s, self.onGetSharedPlugin) self.connect(m.actionSwitchProfile, s, self.unloadProfile) + self.connect(m.actionImport, s, self.onImport) + self.connect(m.actionExport, s, self.onExport) self.connect(m.actionExit, s, self, SLOT("close()")) self.connect(m.actionPreferences, s, self.onPrefs) self.connect(m.actionCstats, s, self.onCardStats) @@ -809,7 +812,7 @@ This can be because the \ clock is slow or fast, because the date is set incorrectly, or because \ the timezone or daylight savings information is incorrect. Please correct \ the problem and restart Anki.""") - self.onClose() + self.app.closeAllWindows() # Schema modifications ########################################################################## diff --git a/aqt/utils.py b/aqt/utils.py index b765efbd3..24d27db07 100644 --- a/aqt/utils.py +++ b/aqt/utils.py @@ -242,8 +242,8 @@ def getSaveFile(parent, title, dir, key, ext): "Ask the user for a file to save. Use DIR as config variable." dirkey = dir+"Directory" file = unicode(QFileDialog.getSaveFileName( - parent, title, aqt.mw.pm.profile.get(dirkey, ""), key, - None, QFileDialog.DontConfirmOverwrite)) + parent, title, aqt.mw.pm.base, key, + options=QFileDialog.DontConfirmOverwrite)) if file: # add extension if not file.lower().endswith(ext): diff --git a/designer/exporting.ui b/designer/exporting.ui index 24d01c440..022828616 100644 --- a/designer/exporting.ui +++ b/designer/exporting.ui @@ -1,57 +1,68 @@ - + + ExportDialog - - + + 0 0 295 - 154 + 202 - + Export - + - - - - + + + + 100 0 - - <b>Export format</b>: + + <b>Export format</b>: - - + + - - - - <b>Limit to tags</b>: + + + + <b>Limit to deck</b>: + + + - + - - + + Include scheduling information - - + + + Include media + + + + + + Include tags @@ -59,11 +70,11 @@ - - + + Qt::Vertical - + 20 40 @@ -72,17 +83,25 @@ - - + + Qt::Horizontal - + QDialogButtonBox::Cancel + + format + deck + includeSched + includeMedia + includeTags + buttonBox + @@ -91,11 +110,11 @@ ExportDialog accept() - + 248 254 - + 157 274 @@ -107,11 +126,11 @@ ExportDialog reject() - + 316 260 - + 286 274 diff --git a/designer/main.ui b/designer/main.ui index 5d7371647..90ae57845 100644 --- a/designer/main.ui +++ b/designer/main.ui @@ -70,6 +70,9 @@ + + + @@ -221,6 +224,16 @@ &Switch Profile... + + + &Export... + + + + + &Import... + +