mirror of
https://github.com/ankitects/anki.git
synced 2025-11-08 21:57:12 -05:00
move main clayout area out of tab widget
it was wasteful to use separate webviews for each tab; still to come is avoiding setHtml() for each edit, and either moving to a tab bar or combo box
This commit is contained in:
parent
c74cbf6108
commit
2c54139d3c
1 changed files with 39 additions and 40 deletions
|
|
@ -38,10 +38,12 @@ class CardLayout(QDialog):
|
||||||
note[name] = "(%s)" % name
|
note[name] = "(%s)" % name
|
||||||
note.flush()
|
note.flush()
|
||||||
self.setupTabs()
|
self.setupTabs()
|
||||||
|
self.setupMainArea()
|
||||||
self.setupButtons()
|
self.setupButtons()
|
||||||
self.setWindowTitle(_("Card Types for %s") % self.model['name'])
|
self.setWindowTitle(_("Card Types for %s") % self.model['name'])
|
||||||
v1 = QVBoxLayout()
|
v1 = QVBoxLayout()
|
||||||
v1.addWidget(self.tabs)
|
v1.addWidget(self.tabs)
|
||||||
|
v1.addWidget(self.mainArea)
|
||||||
v1.addLayout(self.buttons)
|
v1.addLayout(self.buttons)
|
||||||
self.setLayout(v1)
|
self.setLayout(v1)
|
||||||
self.redraw()
|
self.redraw()
|
||||||
|
|
@ -52,7 +54,7 @@ class CardLayout(QDialog):
|
||||||
def redraw(self):
|
def redraw(self):
|
||||||
self.cards = self.col.previewCards(self.note, 2)
|
self.cards = self.col.previewCards(self.note, 2)
|
||||||
self.redrawing = True
|
self.redrawing = True
|
||||||
self.updateTabs()
|
self.updateMainArea()
|
||||||
self.redrawing = False
|
self.redrawing = False
|
||||||
idx = self.ord
|
idx = self.ord
|
||||||
if idx >= len(self.cards):
|
if idx >= len(self.cards):
|
||||||
|
|
@ -73,20 +75,14 @@ class CardLayout(QDialog):
|
||||||
self.tabs.currentChanged.connect(self.onCardSelected)
|
self.tabs.currentChanged.connect(self.onCardSelected)
|
||||||
self.tabs.tabCloseRequested.connect(self.onRemoveTab)
|
self.tabs.tabCloseRequested.connect(self.onRemoveTab)
|
||||||
|
|
||||||
def updateTabs(self):
|
def setupMainArea(self):
|
||||||
self.forms = []
|
w = self.mainArea = QWidget()
|
||||||
self.tabs.clear()
|
|
||||||
for t in self.model['tmpls']:
|
|
||||||
self.addTab(t)
|
|
||||||
|
|
||||||
def addTab(self, t):
|
|
||||||
w = QWidget()
|
|
||||||
l = QHBoxLayout()
|
l = QHBoxLayout()
|
||||||
l.setContentsMargins(0,0,0,0)
|
l.setContentsMargins(0,0,0,0)
|
||||||
l.setSpacing(3)
|
l.setSpacing(3)
|
||||||
left = QWidget()
|
left = QWidget()
|
||||||
# template area
|
# template area
|
||||||
tform = aqt.forms.template.Ui_Form()
|
tform = self.tform = aqt.forms.template.Ui_Form()
|
||||||
tform.setupUi(left)
|
tform.setupUi(left)
|
||||||
tform.label1.setText(" →")
|
tform.label1.setText(" →")
|
||||||
tform.label2.setText(" →")
|
tform.label2.setText(" →")
|
||||||
|
|
@ -97,35 +93,39 @@ class CardLayout(QDialog):
|
||||||
tform.tlayout1.setContentsMargins(0, 11, 0, 0)
|
tform.tlayout1.setContentsMargins(0, 11, 0, 0)
|
||||||
tform.tlayout2.setContentsMargins(0, 11, 0, 0)
|
tform.tlayout2.setContentsMargins(0, 11, 0, 0)
|
||||||
tform.tlayout3.setContentsMargins(0, 11, 0, 0)
|
tform.tlayout3.setContentsMargins(0, 11, 0, 0)
|
||||||
if len(self.cards) > 1:
|
tform.groupBox_3.setTitle(_(
|
||||||
tform.groupBox_3.setTitle(_(
|
"Styling (shared between cards)"))
|
||||||
"Styling (shared between cards)"))
|
|
||||||
tform.front.textChanged.connect(self.saveCard)
|
tform.front.textChanged.connect(self.saveCard)
|
||||||
tform.css.textChanged.connect(self.saveCard)
|
tform.css.textChanged.connect(self.saveCard)
|
||||||
tform.back.textChanged.connect(self.saveCard)
|
tform.back.textChanged.connect(self.saveCard)
|
||||||
l.addWidget(left, 5)
|
l.addWidget(left, 5)
|
||||||
# preview area
|
# preview area
|
||||||
right = QWidget()
|
right = QWidget()
|
||||||
pform = aqt.forms.preview.Ui_Form()
|
pform = self.pform = aqt.forms.preview.Ui_Form()
|
||||||
pform.setupUi(right)
|
pform.setupUi(right)
|
||||||
if self.style().objectName() == "gtk+":
|
if self.style().objectName() == "gtk+":
|
||||||
# gtk+ requires margins in inner layout
|
# gtk+ requires margins in inner layout
|
||||||
pform.frontPrevBox.setContentsMargins(0, 11, 0, 0)
|
pform.frontPrevBox.setContentsMargins(0, 11, 0, 0)
|
||||||
pform.backPrevBox.setContentsMargins(0, 11, 0, 0)
|
pform.backPrevBox.setContentsMargins(0, 11, 0, 0)
|
||||||
# for cloze notes, show that it's one of n cards
|
# for cloze notes, show that it's one of n cards
|
||||||
if self.model['type'] == MODEL_CLOZE:
|
|
||||||
cnt = len(self.mm.availOrds(
|
|
||||||
self.model, joinFields(self.note.fields)))
|
|
||||||
for g in pform.groupBox, pform.groupBox_2:
|
|
||||||
g.setTitle(g.title() + _(" (1 of %d)") % max(cnt, 1))
|
|
||||||
pform.frontWeb = AnkiWebView()
|
pform.frontWeb = AnkiWebView()
|
||||||
pform.frontPrevBox.addWidget(pform.frontWeb)
|
pform.frontPrevBox.addWidget(pform.frontWeb)
|
||||||
pform.backWeb = AnkiWebView()
|
pform.backWeb = AnkiWebView()
|
||||||
pform.backPrevBox.addWidget(pform.backWeb)
|
pform.backPrevBox.addWidget(pform.backWeb)
|
||||||
l.addWidget(right, 5)
|
l.addWidget(right, 5)
|
||||||
w.setLayout(l)
|
w.setLayout(l)
|
||||||
self.forms.append({'tform': tform, 'pform': pform})
|
|
||||||
self.tabs.addTab(w, t['name'])
|
def updateMainArea(self):
|
||||||
|
self.tabs.clear()
|
||||||
|
for t in self.model['tmpls']:
|
||||||
|
# dummy widget for now
|
||||||
|
self.tabs.addTab(QWidget(), t['name'])
|
||||||
|
|
||||||
|
if self.model['type'] == MODEL_CLOZE:
|
||||||
|
cnt = len(self.mm.availOrds(
|
||||||
|
self.model, joinFields(self.note.fields)))
|
||||||
|
for g in self.pform.groupBox, self.pform.groupBox_2:
|
||||||
|
g.setTitle(g.title() + _(" (1 of %d)") % max(cnt, 1))
|
||||||
|
|
||||||
def onRemoveTab(self, idx):
|
def onRemoveTab(self, idx):
|
||||||
if len(self.model['tmpls']) < 2:
|
if len(self.model['tmpls']) < 2:
|
||||||
|
|
@ -186,7 +186,6 @@ Please create a new card type first."""))
|
||||||
return
|
return
|
||||||
self.card = self.cards[idx]
|
self.card = self.cards[idx]
|
||||||
self.ord = idx
|
self.ord = idx
|
||||||
self.tab = self.forms[idx]
|
|
||||||
self.tabs.setCurrentIndex(idx)
|
self.tabs.setCurrentIndex(idx)
|
||||||
self.playedAudio = {}
|
self.playedAudio = {}
|
||||||
self.readCard()
|
self.readCard()
|
||||||
|
|
@ -195,25 +194,25 @@ Please create a new card type first."""))
|
||||||
def readCard(self):
|
def readCard(self):
|
||||||
t = self.card.template()
|
t = self.card.template()
|
||||||
self.redrawing = True
|
self.redrawing = True
|
||||||
self.tab['tform'].front.setPlainText(t['qfmt'])
|
self.tform.front.setPlainText(t['qfmt'])
|
||||||
self.tab['tform'].css.setPlainText(self.model['css'])
|
self.tform.css.setPlainText(self.model['css'])
|
||||||
self.tab['tform'].back.setPlainText(t['afmt'])
|
self.tform.back.setPlainText(t['afmt'])
|
||||||
self.tab['tform'].front.setAcceptRichText(False)
|
self.tform.front.setAcceptRichText(False)
|
||||||
self.tab['tform'].css.setAcceptRichText(False)
|
self.tform.css.setAcceptRichText(False)
|
||||||
self.tab['tform'].back.setAcceptRichText(False)
|
self.tform.back.setAcceptRichText(False)
|
||||||
self.tab['tform'].front.setTabStopWidth(30)
|
self.tform.front.setTabStopWidth(30)
|
||||||
self.tab['tform'].css.setTabStopWidth(30)
|
self.tform.css.setTabStopWidth(30)
|
||||||
self.tab['tform'].back.setTabStopWidth(30)
|
self.tform.back.setTabStopWidth(30)
|
||||||
self.redrawing = False
|
self.redrawing = False
|
||||||
|
|
||||||
def saveCard(self):
|
def saveCard(self):
|
||||||
if self.redrawing:
|
if self.redrawing:
|
||||||
return
|
return
|
||||||
text = self.tab['tform'].front.toPlainText()
|
text = self.tform.front.toPlainText()
|
||||||
self.card.template()['qfmt'] = text
|
self.card.template()['qfmt'] = text
|
||||||
text = self.tab['tform'].css.toPlainText()
|
text = self.tform.css.toPlainText()
|
||||||
self.card.model()['css'] = text
|
self.card.model()['css'] = text
|
||||||
text = self.tab['tform'].back.toPlainText()
|
text = self.tform.back.toPlainText()
|
||||||
self.card.template()['afmt'] = text
|
self.card.template()['afmt'] = text
|
||||||
self.renderPreview()
|
self.renderPreview()
|
||||||
|
|
||||||
|
|
@ -227,13 +226,13 @@ Please create a new card type first."""))
|
||||||
jsinc = ["jquery.js","browsersel.js",
|
jsinc = ["jquery.js","browsersel.js",
|
||||||
"mathjax/conf.js", "mathjax/MathJax.js",
|
"mathjax/conf.js", "mathjax/MathJax.js",
|
||||||
"mathjax/queue-typeset.js"]
|
"mathjax/queue-typeset.js"]
|
||||||
self.tab['pform'].frontWeb.stdHtml(
|
self.pform.frontWeb.stdHtml(
|
||||||
ti(mungeQA(self.mw.col, c.q(reload=True)))+
|
ti(mungeQA(self.mw.col, c.q(reload=True)))+
|
||||||
self.tab['pform'].frontWeb.bundledCSS("reviewer.css"),
|
self.pform.frontWeb.bundledCSS("reviewer.css"),
|
||||||
bodyClass="card card%d" % (c.ord+1), head=base, js=jsinc),
|
bodyClass="card card%d" % (c.ord+1), head=base, js=jsinc),
|
||||||
self.tab['pform'].backWeb.stdHtml(
|
self.pform.backWeb.stdHtml(
|
||||||
ti(mungeQA(self.mw.col, c.a()), type='a')+
|
ti(mungeQA(self.mw.col, c.a()), type='a')+
|
||||||
self.tab['pform'].backWeb.bundledCSS("reviewer.css"),
|
self.pform.backWeb.bundledCSS("reviewer.css"),
|
||||||
bodyClass="card card%d" % (c.ord+1), head=base, js=jsinc),
|
bodyClass="card card%d" % (c.ord+1), head=base, js=jsinc),
|
||||||
clearAudioQueue()
|
clearAudioQueue()
|
||||||
if c.id not in self.playedAudio:
|
if c.id not in self.playedAudio:
|
||||||
|
|
@ -420,9 +419,9 @@ Enter deck to place new %s cards in, or leave blank:""") %
|
||||||
if not diag.exec_():
|
if not diag.exec_():
|
||||||
return
|
return
|
||||||
if form.radioQ.isChecked():
|
if form.radioQ.isChecked():
|
||||||
obj = self.tab['tform'].front
|
obj = self.tform.front
|
||||||
else:
|
else:
|
||||||
obj = self.tab['tform'].back
|
obj = self.tform.back
|
||||||
self._addField(obj,
|
self._addField(obj,
|
||||||
fields[form.fields.currentIndex()],
|
fields[form.fields.currentIndex()],
|
||||||
form.font.currentFont().family(),
|
form.font.currentFont().family(),
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue