diff --git a/aqt/browser.py b/aqt/browser.py index 5d963e6d4..6350495d9 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -1445,7 +1445,9 @@ class BrowserToolbar(Toolbar): right += borderImg("mark", "star16", mark) right += borderImg("pause", "pause16", pause) self.web.stdHtml(self._body % ( - ' '*20, #Browser ▾', + " "+ + "%s"%_("On Selected:"), + #' '*20, #Browser ▾', self._centerLinks(), right), self._css, focus=False) diff --git a/aqt/clayout.py b/aqt/clayout.py index 1bef7bce1..b207eb662 100644 --- a/aqt/clayout.py +++ b/aqt/clayout.py @@ -156,12 +156,14 @@ Please create a new card first.""")) def renderPreview(self): c = self.card styles = "\n.cloze { font-weight: bold; color: blue; }" - html = '%s' + html = '''%s +%s''' ti = self.maybeTextInput + base = getBase(self.mw.col) self.tab['pform'].front.setHtml( - html % (styles, ti(mungeQA(c.q(reload=True))))) + html % (base, styles, ti(mungeQA(c.q(reload=True))))) self.tab['pform'].back.setHtml( - html % (styles, ti(mungeQA(c.a()), 'a'))) + html % (base, styles, ti(mungeQA(c.a()), 'a'))) def maybeTextInput(self, txt, type='q'): if type == 'q': diff --git a/aqt/editor.py b/aqt/editor.py index 25318d515..4caf0f2be 100644 --- a/aqt/editor.py +++ b/aqt/editor.py @@ -269,8 +269,10 @@ class Editor(object): # align to right self.iconsBox.addItem(QSpacerItem(20,1, QSizePolicy.Expanding)) b = self._addButton + b("fields", self.onFields, "Ctrl+f", + shortcut(_("Layout (Ctrl+f)")), size=False, text=_("Fields")) b("layout", self.onCardLayout, "Ctrl+l", - shortcut(_("Layout (Ctrl+l)")), size=False, text=_("Layout...")) + shortcut(_("Layout (Ctrl+l)")), size=False, text=_("Layout")) b("text_bold", self.toggleBold, "Ctrl+b", _("Bold text (Ctrl+b)"), check=True) b("text_italic", self.toggleItalic, "Ctrl+i", _("Italic text (Ctrl+i)"), @@ -306,6 +308,11 @@ class Editor(object): def disableButtons(self): self.enableButtons(False) + def onFields(self): + from aqt.fields import FieldDialog + self.saveNow() + FieldDialog(self.mw, self.note, parent=self.widget) + def onCardLayout(self): from aqt.clayout import CardLayout self.saveNow() diff --git a/aqt/fields.py b/aqt/fields.py index 83e317353..7a19858f1 100644 --- a/aqt/fields.py +++ b/aqt/fields.py @@ -9,114 +9,78 @@ from aqt.utils import saveGeom, restoreGeom, getBase, mungeQA, \ saveSplitter, restoreSplitter, showInfo, askUser, getText, \ openHelp from anki.utils import isMac, isWin -import aqt.templates # raise Exception("Remember to disallow media&latex refs in edit.") # need to strip the field management code out of this -# - add sort field - -class CardLayout(QDialog): +class FieldDialog(QDialog): def __init__(self, mw, note, ord=0, parent=None): QDialog.__init__(self, parent or mw, Qt.Window) self.mw = aqt.mw self.parent = parent or mw self.note = note - self.ord = ord self.col = self.mw.col self.mm = self.mw.col.models self.model = note.model() - self.setupTabs() - v1 = QVBoxLayout() - v1.addWidget(self.tabs) - self.bbox = QDialogButtonBox(QDialogButtonBox.Close) - v1.addWidget(self.bbox) - self.setLayout(v1) - self.updateTabs() - self.exec_() - return - - def setupTabs(self): - self.tabs = QTabWidget() - self.tabs.setTabsClosable(True) - self.tabs.setUsesScrollButtons(True) - self.tabs.setMovable(True) - add = QPushButton("+") - add.setFixedWidth(30) - self.tabs.setCornerWidget(add) - - def updateTabs(self): - self.forms = [] - self.tabs.clear() - for t in self.model['tmpls']: - self.addTab(t) - - def addTab(self, t): - w = QWidget() - h = QHBoxLayout() - h.addStretch() - label = QLabel(_("Name:")) - h.addWidget(label) - edit = QLineEdit() - edit.setFixedWidth(200) - h.addWidget(edit) - h.addStretch() - v = QVBoxLayout() - v.addLayout(h) - l = QHBoxLayout() - l.setMargin(0) - l.setSpacing(3) - left = QWidget() - # template area - tform = aqt.forms.template.Ui_Form() - tform.setupUi(left) - l.addWidget(left, 5) - # preview area - right = QWidget() - pform = aqt.forms.preview.Ui_Form() - pform.setupUi(right) - l.addWidget(right, 5) - v.addLayout(l) - w.setLayout(v) - self.tabs.addTab(w, t['name']) - self.forms.append([tform, pform, edit]) - - def old(): - self.form = aqt.forms.clayout.Ui_Dialog() + self.form = aqt.forms.fields.Ui_Dialog() self.form.setupUi(self) - self.setWindowTitle(_("%s Layout") % self.model['name']) - self.plastiqueStyle = None - if isMac or isWin: - self.plastiqueStyle = QStyleFactory.create("plastique") - self.connect(self.form.buttonBox, SIGNAL("helpRequested()"), - self.onHelp) - self.setupCards() - self.setupFields() self.form.buttonBox.button(QDialogButtonBox.Help).setAutoDefault(False) self.form.buttonBox.button(QDialogButtonBox.Close).setAutoDefault(False) - restoreSplitter(self.form.splitter, "clayout") - restoreGeom(self, "CardLayout") - if not self.reload(first=True): - return + self.fillFields() + self.setupSignals() + self.form.fieldList.setCurrentRow(0) self.exec_() + ########################################################################## - def reload(self, first=False): - self.cards = self.col.previewCards(self.note, self.type) - if not self.cards: - self.accept() - if first: - showInfo(_("Please enter some text first.")) - else: - showInfo(_("The current note was deleted.")) - return - self.fillCardList() - self.fillFieldList() - self.fieldChanged() - self.readField() - return True + def fillFields(self): + self.form.fieldList.clear() + for f in self.model['flds']: + self.form.fieldList.addItem(f['name']) + + def setupSignals(self): + c = self.connect + s = SIGNAL + f = self.form + c(f.fieldList, s("currentRowChanged(int)"), self.onRowChange) + c(f.fieldAdd, s("clicked()"), self.onAdd) + c(f.fieldDelete, s("clicked()"), self.onDelete) + c(f.fieldUp, s("clicked()"), self.onUp) + c(f.fieldDown, s("clicked()"), self.onDown) + c(f.sortField, s("clicked()"), self.onSortField) + + def onRowChange(self, idx): + self.loadField(idx) + + def onAdd(self): + pass + + def onDelete(self): + pass + + def onUp(self): + pass + + def onDown(self): + pass + + def onSortField(self): + # don't allow user to disable; it makes no sense + self.form.sortField.setChecked(True) + self.model['sortf'] = self.form.fieldList.currentRow() + + def loadField(self, idx): + fld = self.model['flds'][idx] + f = self.form + f.fieldName.setText(fld['name']) + f.fontFamily.setCurrentFont(QFont(fld['font'])) + f.fontSize.setValue(fld['size']) + f.sticky.setChecked(fld['sticky']) + print self.model['sortf'] == fld['ord'] + f.sortField.setChecked(self.model['sortf'] == fld['ord']) + f.rtl.setChecked(fld['rtl']) # Cards & Preview ########################################################################## diff --git a/aqt/utils.py b/aqt/utils.py index a3a25e2ef..a14b27cf5 100644 --- a/aqt/utils.py +++ b/aqt/utils.py @@ -317,9 +317,9 @@ def applyStyles(widget): except (IOError, OSError): pass -def getBase(deck): +def getBase(col): base = None - mdir = deck.media.dir() + mdir = col.media.dir() if isWin: prefix = u"file:///" else: diff --git a/designer/browser.ui b/designer/browser.ui index 2c129f7e2..c7750f5da 100644 --- a/designer/browser.ui +++ b/designer/browser.ui @@ -226,13 +226,9 @@ Cards - - - - @@ -259,10 +255,6 @@ - - - - diff --git a/designer/fields.ui b/designer/fields.ui index 25dcb1064..695f33b9b 100644 --- a/designer/fields.ui +++ b/designer/fields.ui @@ -6,8 +6,8 @@ 0 0 - 372 - 340 + 403 + 352 @@ -131,7 +131,7 @@ - Font + Editing Font @@ -145,14 +145,7 @@ - - - - Options - - - - + Reverse text direction (RTL) @@ -169,13 +162,27 @@ - + Remember last input + + + + Options + + + + + + + Sort by this field in the browser + + +