diff --git a/aqt/browser.py b/aqt/browser.py index 19582ebed..2f9ef39be 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -237,9 +237,14 @@ class DataModel(QAbstractTableModel): return self.browser.mw.col.decks.name(c.did) def question(self, c): - return self.formatQA(c.q()) + return self.formatQA(c.q(browser=True)) def answer(self, c): + if c.template().get('bafmt'): + # they have provided a template, use it verbatim + c.q(browser=True) + return self.formatQA(c.a()) + # need to strip question from answer q = self.question(c) a = self.formatQA(c.a()) if a.startswith(q): diff --git a/aqt/clayout.py b/aqt/clayout.py index 640231c3c..fc91e9125 100644 --- a/aqt/clayout.py +++ b/aqt/clayout.py @@ -145,19 +145,10 @@ Please create a new card type first.""")) flip.setAutoDefault(False) l.addWidget(flip) c(flip, SIGNAL("clicked()"), self.onFlip) - rename = QPushButton(_("Rename...")) - rename.setAutoDefault(False) - l.addWidget(rename) - c(rename, SIGNAL("clicked()"), self.onRename) - if self.model['type'] != MODEL_CLOZE: - repos = QPushButton(_("Reposition...")) - repos.setAutoDefault(False) - l.addWidget(repos) - c(repos, SIGNAL("clicked()"), self.onReorder) - self.deckButton = tgt = QPushButton(_("Deck...")) - tgt.setAutoDefault(False) - l.addWidget(tgt) - c(tgt, SIGNAL("clicked()"), self.onTargetDeck) + more = QPushButton(_("More") + u" ▾") + more.setAutoDefault(False) + l.addWidget(more) + c(more, SIGNAL("clicked()"), lambda: self.onMore(more)) l.addStretch() close = QPushButton(_("Close")) close.setAutoDefault(False) @@ -186,11 +177,6 @@ Please create a new card type first.""")) self.tab['tform'].front.setPlainText(t['qfmt']) self.tab['tform'].css.setPlainText(self.model['css']) self.tab['tform'].back.setPlainText(t['afmt']) - if self.model['type'] != MODEL_CLOZE: - if t['did']: - self.deckButton.setText(_("Specific Deck...")) - else: - self.deckButton.setText(_("Default Deck...")) self.redrawing = False def saveCard(self): @@ -305,6 +291,44 @@ adjust the template manually to switch the question and answer.""")) m.group(1).strip()) return True + def onMore(self, button): + m = QMenu(self) + a = m.addAction(_("Rename")) + a.connect(a, SIGNAL("triggered()"), + self.onRename) + if self.model['type'] != MODEL_CLOZE: + a = m.addAction(_("Reposition")) + a.connect(a, SIGNAL("triggered()"), + self.onReorder) + t = self.card.template() + if t['did']: + s = _(" (on)") + else: + s = _(" (off)") + a = m.addAction(_("Deck Override") + s) + a.connect(a, SIGNAL("triggered()"), + self.onTargetDeck) + a = m.addAction(_("Column Templates")) + a.connect(a, SIGNAL("triggered()"), + self.onBrowserDisplay) + m.exec_(button.mapToGlobal(QPoint(0,0))) + + def onBrowserDisplay(self): + d = QDialog() + f = aqt.forms.browserdisp.Ui_Dialog() + f.setupUi(d) + t = self.card.template() + f.qfmt.setText(t.get('bqfmt', "")) + f.afmt.setText(t.get('bafmt', "")) + d.connect(f.buttonBox, SIGNAL("accepted()"), + lambda: self.onBrowserDisplayOk(f)) + d.exec_() + + def onBrowserDisplayOk(self, f): + t = self.card.template() + t['bqfmt'] = f.qfmt.text().strip() + t['bafmt'] = f.afmt.text().strip() + def onTargetDeck(self): from aqt.tagedit import TagEdit t = self.card.template() diff --git a/designer/browserdisp.ui b/designer/browserdisp.ui new file mode 100644 index 000000000..dcd720f2d --- /dev/null +++ b/designer/browserdisp.ui @@ -0,0 +1,102 @@ + + + Dialog + + + + 0 + 0 + 412 + 204 + + + + Column Templates + + + + + + Template for front column in browser: + + + + + + + + + + Template for back column in browser + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + qfmt + afmt + buttonBox + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +