diff --git a/src/calibre/gui2/dialogs/template_dialog.py b/src/calibre/gui2/dialogs/template_dialog.py
index 60d4025ef9..62accdc842 100644
--- a/src/calibre/gui2/dialogs/template_dialog.py
+++ b/src/calibre/gui2/dialogs/template_dialog.py
@@ -3,8 +3,11 @@ __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en'
__license__ = 'GPL v3'
+import json
+
from PyQt4.Qt import Qt, QDialog, QDialogButtonBox
from calibre.gui2.dialogs.template_dialog_ui import Ui_TemplateDialog
+from calibre.utils.formatter_functions import formatter_functions
class TemplateDialog(QDialog, Ui_TemplateDialog):
@@ -17,9 +20,44 @@ class TemplateDialog(QDialog, Ui_TemplateDialog):
self.setWindowFlags(self.windowFlags()&(~Qt.WindowContextHelpButtonHint))
self.setWindowIcon(icon)
+ self.textbox.setTabStopWidth(10)
+ self.source_code.setTabStopWidth(10)
+ self.documentation.setReadOnly(True)
+ self.source_code.setReadOnly(True)
+
if text is not None:
self.textbox.setPlainText(text)
- self.textbox.setTabStopWidth(50)
self.buttonBox.button(QDialogButtonBox.Ok).setText(_('&OK'))
self.buttonBox.button(QDialogButtonBox.Cancel).setText(_('&Cancel'))
+ try:
+ with open(P('template-functions.json'), 'rb') as f:
+ self.builtin_source_dict = json.load(f, encoding='utf-8')
+ except:
+ self.builtin_source_dict = {}
+
+ self.funcs = formatter_functions.get_functions()
+ self.builtins = formatter_functions.get_builtins()
+
+ func_names = sorted(self.funcs)
+ self.function.clear()
+ self.function.addItem('')
+ self.function.addItems(func_names)
+ self.function.setCurrentIndex(0)
+ self.function.currentIndexChanged[str].connect(self.function_changed)
+
+ print self.textbox.tabStopWidth()
+ print self.source_code.tabStopWidth()
+
+ def function_changed(self, toWhat):
+ name = unicode(toWhat)
+ self.source_code.clear()
+ self.documentation.clear()
+ if name in self.funcs:
+ self.documentation.setPlainText(self.funcs[name].doc)
+ if name in self.builtins:
+ if name in self.builtin_source_dict:
+ self.source_code.setPlainText(self.builtin_source_dict[name])
+ else:
+ self.source_code.setPlainText(self.funcs[name].program_text)
+
diff --git a/src/calibre/gui2/dialogs/template_dialog.ui b/src/calibre/gui2/dialogs/template_dialog.ui
index a30d6ef273..e1980a8397 100644
--- a/src/calibre/gui2/dialogs/template_dialog.ui
+++ b/src/calibre/gui2/dialogs/template_dialog.ui
@@ -6,8 +6,8 @@
0
0
- 500
- 235
+ 588
+ 546
@@ -19,21 +19,68 @@
Edit Comments
-
- -
-
-
- -
-
-
- Qt::Horizontal
-
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
-
-
-
-
+
+ -
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+ -
+
+
-
+
+
+ Function name:
+
+
+
+ -
+
+
+ -
+
+
+ Documentation:
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+
+
+
+ -
+
+
+ Python code:
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+
+
+
+ -
+
+
+
+ 16777215
+ 75
+
+
+
+
+ -
+
+
+
+
+