mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
Merge branch 'master' of https://github.com/cbhaley/calibre
This commit is contained in:
commit
dcca74027b
@ -168,6 +168,8 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
self.db.prefs['user_template_functions'] = []
|
self.db.prefs['user_template_functions'] = []
|
||||||
raise AbortInitialize()
|
raise AbortInitialize()
|
||||||
|
|
||||||
|
self.show_only_user_defined.setChecked(True)
|
||||||
|
self.show_only_user_defined.stateChanged.connect(self.show_only_user_defined_changed)
|
||||||
self.build_function_names_box()
|
self.build_function_names_box()
|
||||||
self.function_name.currentIndexChanged.connect(self.function_index_changed)
|
self.function_name.currentIndexChanged.connect(self.function_index_changed)
|
||||||
self.function_name.editTextChanged.connect(self.function_name_edited)
|
self.function_name.editTextChanged.connect(self.function_name_edited)
|
||||||
@ -222,6 +224,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
|
|
||||||
# Python function tab
|
# Python function tab
|
||||||
|
|
||||||
|
def show_only_user_defined_changed(self, state):
|
||||||
|
self.build_function_names_box()
|
||||||
|
|
||||||
def enable_replace_button(self):
|
def enable_replace_button(self):
|
||||||
self.replace_button.setEnabled(self.delete_button.isEnabled())
|
self.replace_button.setEnabled(self.delete_button.isEnabled())
|
||||||
|
|
||||||
@ -233,23 +238,35 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
self.create_button.setEnabled(False)
|
self.create_button.setEnabled(False)
|
||||||
self.delete_button.setEnabled(False)
|
self.delete_button.setEnabled(False)
|
||||||
|
|
||||||
|
def function_type_string(self, name):
|
||||||
|
if name in self.builtins:
|
||||||
|
return ' -- ' + _('Built-in function')
|
||||||
|
else:
|
||||||
|
return ' -- ' + _('User function')
|
||||||
|
|
||||||
def build_function_names_box(self, scroll_to=''):
|
def build_function_names_box(self, scroll_to=''):
|
||||||
self.function_name.blockSignals(True)
|
self.function_name.blockSignals(True)
|
||||||
|
if self.show_only_user_defined.isChecked():
|
||||||
|
func_names = sorted([k for k in self.funcs if k not in self.builtins])
|
||||||
|
else:
|
||||||
func_names = sorted(self.funcs)
|
func_names = sorted(self.funcs)
|
||||||
self.function_name.clear()
|
self.function_name.clear()
|
||||||
self.function_name.addItem('')
|
self.function_name.addItem('')
|
||||||
self.function_name.addItems(func_names)
|
scroll_to_index = 0
|
||||||
|
for idx,n in enumerate(func_names):
|
||||||
|
self.function_name.addItem(n + self.function_type_string(n))
|
||||||
|
self.function_name.setItemData(idx+1, n)
|
||||||
|
if scroll_to and n == scroll_to:
|
||||||
|
scroll_to_index = idx+1
|
||||||
self.function_name.setCurrentIndex(0)
|
self.function_name.setCurrentIndex(0)
|
||||||
self.function_name.blockSignals(False)
|
self.function_name.blockSignals(False)
|
||||||
if scroll_to:
|
if scroll_to_index:
|
||||||
idx = self.function_name.findText(scroll_to)
|
self.function_name.setCurrentIndex(scroll_to_index)
|
||||||
if idx >= 0:
|
|
||||||
self.function_name.setCurrentIndex(idx)
|
|
||||||
if scroll_to not in self.builtins:
|
if scroll_to not in self.builtins:
|
||||||
self.delete_button.setEnabled(True)
|
self.delete_button.setEnabled(True)
|
||||||
|
|
||||||
def delete_button_clicked(self):
|
def delete_button_clicked(self):
|
||||||
name = str(self.function_name.currentText())
|
name = str(self.function_name.itemData(self.function_name.currentIndex()))
|
||||||
if name in self.builtins:
|
if name in self.builtins:
|
||||||
error_dialog(self.gui, _('Template functions'),
|
error_dialog(self.gui, _('Template functions'),
|
||||||
_('You cannot delete a built-in function'), show=True)
|
_('You cannot delete a built-in function'), show=True)
|
||||||
@ -267,6 +284,11 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
def create_button_clicked(self, use_name=None):
|
def create_button_clicked(self, use_name=None):
|
||||||
self.changed_signal.emit()
|
self.changed_signal.emit()
|
||||||
name = use_name if use_name else str(self.function_name.currentText())
|
name = use_name if use_name else str(self.function_name.currentText())
|
||||||
|
name = name.split(' -- ')[0]
|
||||||
|
if not name:
|
||||||
|
error_dialog(self.gui, _('Template functions'),
|
||||||
|
_('Name cannot be empty'), show=True)
|
||||||
|
return
|
||||||
if name in self.funcs:
|
if name in self.funcs:
|
||||||
error_dialog(self.gui, _('Template functions'),
|
error_dialog(self.gui, _('Template functions'),
|
||||||
_('Name %s already used')%(name,), show=True)
|
_('Name %s already used')%(name,), show=True)
|
||||||
@ -299,14 +321,20 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
det_msg=traceback.format_exc())
|
det_msg=traceback.format_exc())
|
||||||
|
|
||||||
def function_name_edited(self, txt):
|
def function_name_edited(self, txt):
|
||||||
|
txt = txt.split(' -- ')[0]
|
||||||
|
if txt not in self.funcs:
|
||||||
|
self.function_name.blockSignals(True)
|
||||||
|
self.function_name.setEditText(txt)
|
||||||
|
self.function_name.blockSignals(False)
|
||||||
self.documentation.setReadOnly(False)
|
self.documentation.setReadOnly(False)
|
||||||
self.argument_count.setReadOnly(False)
|
self.argument_count.setReadOnly(False)
|
||||||
self.create_button.setEnabled(True)
|
self.create_button.setEnabled(True)
|
||||||
self.replace_button.setEnabled(False)
|
self.replace_button.setEnabled(False)
|
||||||
|
self.delete_button.setEnabled(False)
|
||||||
self.program.setReadOnly(False)
|
self.program.setReadOnly(False)
|
||||||
|
|
||||||
def function_index_changed(self, idx):
|
def function_index_changed(self, idx):
|
||||||
txt = self.function_name.currentText()
|
txt = self.function_name.itemData(idx)
|
||||||
self.create_button.setEnabled(False)
|
self.create_button.setEnabled(False)
|
||||||
if not txt:
|
if not txt:
|
||||||
self.argument_count.clear()
|
self.argument_count.clear()
|
||||||
@ -335,7 +363,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
self.replace_button.setEnabled(False)
|
self.replace_button.setEnabled(False)
|
||||||
|
|
||||||
def replace_button_clicked(self):
|
def replace_button_clicked(self):
|
||||||
name = str(self.function_name.currentText())
|
name = str(self.function_name.itemData(self.function_name.currentIndex()))
|
||||||
self.delete_button_clicked()
|
self.delete_button_clicked()
|
||||||
self.create_button_clicked(use_name=name)
|
self.create_button_clicked(use_name=name)
|
||||||
|
|
||||||
|
@ -125,6 +125,19 @@
|
|||||||
<item row="0" column="1" colspan="2" rowspan="2">
|
<item row="0" column="1" colspan="2" rowspan="2">
|
||||||
<widget class="QTextBrowser" name="textBrowser"/>
|
<widget class="QTextBrowser" name="textBrowser"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QCheckBox" name="show_only_user_defined">
|
||||||
|
<property name="text">
|
||||||
|
<string>Show &only user defined template functions</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><p>If checked the 'Function' box will show only user defined
|
||||||
|
template functions. If unchecked the box will show both system and user defined
|
||||||
|
functions. Unchecking can be useful for copying source of a system function to create
|
||||||
|
a new related user defined function.</p></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@ -145,7 +158,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string/>
|
<string/>
|
||||||
@ -158,7 +171,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="4" column="1">
|
||||||
<widget class="QSpinBox" name="argument_count">
|
<widget class="QSpinBox" name="argument_count">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Set this to -1 if the function takes a variable number of arguments</string>
|
<string>Set this to -1 if the function takes a variable number of arguments</string>
|
||||||
@ -168,10 +181,10 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="1">
|
<item row="5" column="1">
|
||||||
<widget class="QTextEdit" name="documentation"/>
|
<widget class="QTextEdit" name="documentation"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>D&ocumentation:</string>
|
<string>D&ocumentation:</string>
|
||||||
@ -184,7 +197,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="1">
|
<item row="6" column="1">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="clear_button">
|
<widget class="QPushButton" name="clear_button">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user