mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add a preview field to the wizard.
Vary the button according to whether the wizard created the template Don't show the template if wizard created
This commit is contained in:
parent
19261f15ee
commit
cc288ff4ca
@ -8,9 +8,10 @@ __docformat__ = 'restructuredtext en'
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
from PyQt4.Qt import (QLineEdit, QDialog, QGridLayout, QLabel, QCheckBox,
|
from PyQt4.Qt import (QLineEdit, QDialog, QGridLayout, QLabel, QCheckBox, QIcon,
|
||||||
QDialogButtonBox, QColor, QComboBox, QIcon)
|
QDialogButtonBox, QColor, QComboBox, QPushButton)
|
||||||
|
|
||||||
|
from calibre.ebooks.metadata.book.base import composite_formatter
|
||||||
from calibre.gui2.dialogs.template_dialog import TemplateDialog
|
from calibre.gui2.dialogs.template_dialog import TemplateDialog
|
||||||
from calibre.gui2.complete import MultiCompleteLineEdit
|
from calibre.gui2.complete import MultiCompleteLineEdit
|
||||||
from calibre.gui2 import error_dialog
|
from calibre.gui2 import error_dialog
|
||||||
@ -26,6 +27,7 @@ class TemplateLineEditor(QLineEdit):
|
|||||||
QLineEdit.__init__(self, parent)
|
QLineEdit.__init__(self, parent)
|
||||||
self.tags = None
|
self.tags = None
|
||||||
self.mi = None
|
self.mi = None
|
||||||
|
self.txt = None
|
||||||
|
|
||||||
def set_mi(self, mi):
|
def set_mi(self, mi):
|
||||||
self.mi = mi
|
self.mi = mi
|
||||||
@ -42,46 +44,82 @@ class TemplateLineEditor(QLineEdit):
|
|||||||
menu.exec_(event.globalPos())
|
menu.exec_(event.globalPos())
|
||||||
|
|
||||||
def open_editor(self):
|
def open_editor(self):
|
||||||
t = TemplateDialog(self, self.text(), self.mi)
|
if self.txt:
|
||||||
|
t = TemplateDialog(self, self.txt, self.mi)
|
||||||
|
else:
|
||||||
|
t = TemplateDialog(self, self.text(), self.mi)
|
||||||
t.setWindowTitle(_('Edit template'))
|
t.setWindowTitle(_('Edit template'))
|
||||||
if t.exec_():
|
if t.exec_():
|
||||||
self.setText(t.textbox.toPlainText())
|
self.setText(t.textbox.toPlainText())
|
||||||
|
self.txt = None
|
||||||
|
|
||||||
|
def show_wizard_button(self, txt):
|
||||||
|
if not txt or txt.startswith('program:\n#tag wizard'):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def setText(self, txt):
|
||||||
|
txt = unicode(txt)
|
||||||
|
if txt and txt.startswith('program:\n#tag wizard'):
|
||||||
|
self.txt = txt
|
||||||
|
self.setReadOnly(True)
|
||||||
|
QLineEdit.setText(self, '')
|
||||||
|
QLineEdit.setText(self, _('Template generated by the wizard'))
|
||||||
|
self.setStyleSheet('TemplateLineEditor { color: gray }')
|
||||||
|
else:
|
||||||
|
QLineEdit.setText(self, txt)
|
||||||
|
|
||||||
def tag_wizard(self):
|
def tag_wizard(self):
|
||||||
txt = unicode(self.text())
|
txt = unicode(self.text())
|
||||||
if txt and not txt.startswith('program:\n#tag wizard'):
|
if txt and not self.txt:
|
||||||
error_dialog(self, _('Invalid text'),
|
error_dialog(self, _('Invalid text'),
|
||||||
_('The text in the box was not generated by this wizard'),
|
_('The text in the box was not generated by this wizard'),
|
||||||
show=True, show_copy_button=False)
|
show=True, show_copy_button=False)
|
||||||
return
|
return
|
||||||
d = TagWizard(self, self.db, unicode(self.text()))
|
d = TagWizard(self, self.db, unicode(self.txt), self.mi)
|
||||||
if d.exec_():
|
if d.exec_():
|
||||||
self.setText(d.template)
|
self.setText(d.template)
|
||||||
|
|
||||||
|
def text(self):
|
||||||
|
if self.txt:
|
||||||
|
return self.txt
|
||||||
|
return QLineEdit.text(self)
|
||||||
|
|
||||||
class TagWizard(QDialog):
|
class TagWizard(QDialog):
|
||||||
|
|
||||||
def __init__(self, parent, db, txt):
|
def __init__(self, parent, db, txt, mi):
|
||||||
QDialog.__init__(self, parent)
|
QDialog.__init__(self, parent)
|
||||||
self.setWindowTitle(_('Coloring Wizard'))
|
self.setWindowTitle(_('Coloring Wizard'))
|
||||||
self.setWindowIcon(QIcon(I('wizard.png')))
|
self.setWindowIcon(QIcon(I('wizard.png')))
|
||||||
|
|
||||||
|
self.mi = mi
|
||||||
|
|
||||||
self.columns = []
|
self.columns = []
|
||||||
self.completion_values = defaultdict(dict)
|
self.completion_values = defaultdict(dict)
|
||||||
for k in db.all_field_keys():
|
for k in db.all_field_keys():
|
||||||
m = db.metadata_for_field(k)
|
m = db.metadata_for_field(k)
|
||||||
if m['datatype'] in ('text', 'enumeration', 'series'):
|
if m['datatype'] in ('text', 'enumeration', 'series') and \
|
||||||
|
m['is_category'] and k not in ('identifiers'):
|
||||||
self.columns.append(k)
|
self.columns.append(k)
|
||||||
if m['is_custom']:
|
if m['is_custom']:
|
||||||
# self.completion_values[k] = {}
|
|
||||||
self.completion_values[k]['v'] = db.all_custom(m['label'])
|
self.completion_values[k]['v'] = db.all_custom(m['label'])
|
||||||
elif k == 'tags':
|
elif k == 'tags':
|
||||||
# self.completion_values[k] = {}
|
|
||||||
self.completion_values[k]['v'] = db.all_tags()
|
self.completion_values[k]['v'] = db.all_tags()
|
||||||
|
elif k == 'formats':
|
||||||
|
self.completion_values[k]['v'] = db.all_formats()
|
||||||
else:
|
else:
|
||||||
f = getattr(db, 'all' + k, None)
|
if k in ('publisher'):
|
||||||
|
ck = k + 's'
|
||||||
|
else:
|
||||||
|
ck = k
|
||||||
|
f = getattr(db, 'all_' + ck, None)
|
||||||
if f:
|
if f:
|
||||||
self.completion_values[k] = {}
|
if k == 'authors':
|
||||||
self.completion_values[k]['v'] = [v[1] for v in f()]
|
self.completion_values[k]['v'] = [v[1].\
|
||||||
|
replace('|', ',') for v in f()]
|
||||||
|
else:
|
||||||
|
self.completion_values[k]['v'] = [v[1] for v in f()]
|
||||||
|
|
||||||
if k in self.completion_values:
|
if k in self.completion_values:
|
||||||
self.completion_values[k]['m'] = m['is_multiple']
|
self.completion_values[k]['m'] = m['is_multiple']
|
||||||
|
|
||||||
@ -188,12 +226,28 @@ class TagWizard(QDialog):
|
|||||||
pass
|
pass
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
|
w = QLabel(_('Preview'))
|
||||||
|
l.addWidget(w, 99, 0, 1, 1)
|
||||||
|
w = self.test_box = QLineEdit(self)
|
||||||
|
w.setReadOnly(True)
|
||||||
|
l.addWidget(w, 99, 1, 1, 1)
|
||||||
|
w = QPushButton(_('Test'))
|
||||||
|
l.addWidget(w, 99, 3, 1, 1)
|
||||||
|
w.clicked.connect(self.preview)
|
||||||
|
|
||||||
bb = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel, parent=self)
|
bb = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel, parent=self)
|
||||||
l.addWidget(bb, 100, 3, 1, 2)
|
l.addWidget(bb, 100, 3, 1, 2)
|
||||||
bb.accepted.connect(self.accepted)
|
bb.accepted.connect(self.accepted)
|
||||||
bb.rejected.connect(self.reject)
|
bb.rejected.connect(self.reject)
|
||||||
self.template = ''
|
self.template = ''
|
||||||
|
|
||||||
|
def preview(self):
|
||||||
|
if not self.generate_program():
|
||||||
|
return
|
||||||
|
t = composite_formatter.safe_format(self.template, self.mi,
|
||||||
|
_('EXCEPTION'), self.mi)
|
||||||
|
self.test_box.setText(t)
|
||||||
|
|
||||||
def column_changed(self, s, valbox=None):
|
def column_changed(self, s, valbox=None):
|
||||||
k = unicode(s)
|
k = unicode(s)
|
||||||
if k in self.completion_values:
|
if k in self.completion_values:
|
||||||
@ -206,7 +260,7 @@ class TagWizard(QDialog):
|
|||||||
valbox.update_items_cache([])
|
valbox.update_items_cache([])
|
||||||
valbox.set_separator(None)
|
valbox.set_separator(None)
|
||||||
|
|
||||||
def accepted(self):
|
def generate_program(self):
|
||||||
res = ("program:\n#tag wizard -- do not directly edit\n"
|
res = ("program:\n#tag wizard -- do not directly edit\n"
|
||||||
" first_non_empty(\n")
|
" first_non_empty(\n")
|
||||||
lines = []
|
lines = []
|
||||||
@ -270,4 +324,10 @@ class TagWizard(QDialog):
|
|||||||
if f and t and c:
|
if f and t and c:
|
||||||
res += '#' + t + ':|:' + c + ':|:' + f +':|:' + nfc + ':|:' + re + '\n'
|
res += '#' + t + ':|:' + c + ':|:' + f +':|:' + nfc + ':|:' + re + '\n'
|
||||||
self.template += res
|
self.template += res
|
||||||
self.accept()
|
return True
|
||||||
|
|
||||||
|
def accepted(self):
|
||||||
|
if self.generate_program():
|
||||||
|
self.accept()
|
||||||
|
else:
|
||||||
|
self.template = ''
|
||||||
|
@ -6,7 +6,7 @@ __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
from PyQt4.Qt import (QApplication, QFont, QFontInfo, QFontDialog,
|
from PyQt4.Qt import (QApplication, QFont, QFontInfo, QFontDialog,
|
||||||
QAbstractListModel, Qt, QColor)
|
QAbstractListModel, Qt, QColor, QIcon)
|
||||||
|
|
||||||
from calibre.gui2.preferences import ConfigWidgetBase, test_widget, CommaSeparatedList
|
from calibre.gui2.preferences import ConfigWidgetBase, test_widget, CommaSeparatedList
|
||||||
from calibre.gui2.preferences.look_feel_ui import Ui_Form
|
from calibre.gui2.preferences.look_feel_ui import Ui_Form
|
||||||
@ -215,11 +215,16 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
for i in range(1, self.column_color_count):
|
for i in range(1, self.column_color_count):
|
||||||
r('column_color_name_'+str(i), db.prefs, choices=choices)
|
r('column_color_name_'+str(i), db.prefs, choices=choices)
|
||||||
r('column_color_template_'+str(i), db.prefs)
|
r('column_color_template_'+str(i), db.prefs)
|
||||||
|
txt = db.prefs.get('column_color_template_'+str(i), None)
|
||||||
tpl = getattr(self, 'opt_column_color_template_'+str(i))
|
tpl = getattr(self, 'opt_column_color_template_'+str(i))
|
||||||
tpl.set_db(db)
|
tpl.set_db(db)
|
||||||
tpl.set_mi(mi)
|
tpl.set_mi(mi)
|
||||||
toolbutton = getattr(self, 'opt_column_color_wizard_'+str(i))
|
toolbutton = getattr(self, 'opt_column_color_wizard_'+str(i))
|
||||||
toolbutton.clicked.connect(tpl.tag_wizard)
|
if tpl.show_wizard_button(txt):
|
||||||
|
toolbutton.clicked.connect(tpl.tag_wizard)
|
||||||
|
else:
|
||||||
|
toolbutton.clicked.connect(tpl.open_editor)
|
||||||
|
toolbutton.setIcon(QIcon(I('edit_input.png')))
|
||||||
all_colors = [unicode(s) for s in list(QColor.colorNames())]
|
all_colors = [unicode(s) for s in list(QColor.colorNames())]
|
||||||
self.colors_box.setText(', '.join(all_colors))
|
self.colors_box.setText(', '.join(all_colors))
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user