From 99f829493cdc9e9db92e8a01dcf9bb3c70431db8 Mon Sep 17 00:00:00 2001 From: Bob Swift Date: Fri, 23 Apr 2021 12:22:55 -0600 Subject: [PATCH] Use custom widget for documentation display from scriping options page --- picard/ui/options/scripting.py | 78 +------------------ .../ui/ui_scripting_documentation_dialog.py | 32 ++------ ui/scripting_documentation_dialog.ui | 37 +-------- 3 files changed, 16 insertions(+), 131 deletions(-) diff --git a/picard/ui/options/scripting.py b/picard/ui/options/scripting.py index 290bf444f..6a55aaa58 100644 --- a/picard/ui/options/scripting.py +++ b/picard/ui/options/scripting.py @@ -35,16 +35,11 @@ from picard.config import ( Option, get_config, ) -from picard.const import PICARD_URLS from picard.const.sys import IS_MACOS -from picard.script import ( - ScriptParser, - script_function_documentation_all, -) +from picard.script import ScriptParser from picard.util import restore_method from picard.ui import ( - FONT_FAMILY_MONOSPACE, PicardDialog, SingletonDialog, ) @@ -54,11 +49,11 @@ from picard.ui.options import ( OptionsPage, register_options_page, ) -from picard.ui.theme import theme from picard.ui.ui_options_script import Ui_ScriptingOptionsPage from picard.ui.ui_scripting_documentation_dialog import ( Ui_ScriptingDocumentationDialog, ) +from picard.ui.widgets.scriptdocumentation import ScriptingDocumentationWidget from picard.ui.widgets.scriptlistwidget import ScriptListWidgetItem @@ -66,31 +61,6 @@ class ScriptCheckError(OptionsCheckError): pass -DOCUMENTATION_HTML_TEMPLATE = ''' - - - - - - - %(html)s - - -''' - - class ScriptingDocumentationDialog(PicardDialog, SingletonDialog): defaultsize = QtCore.QSize(570, 400) autorestore = False @@ -105,49 +75,9 @@ class ScriptingDocumentationDialog(PicardDialog, SingletonDialog): self.parent = parent self.ui = Ui_ScriptingDocumentationDialog() self.ui.setupUi(self) + doc_widget = ScriptingDocumentationWidget(self) + self.ui.documentation_layout.addWidget(doc_widget) self.restore_geometry() - args = { - "picard-doc-scripting-url": PICARD_URLS['doc_scripting'], - } - text = _('Open Scripting' - ' Documentation in your browser') % args - self.ui.scripting_doc_link.setText(text) - - def process_html(html, function): - if not html: - html = '' - template = '
%s%s
%s
' - if function.module is not None and function.module != 'picard.script.functions': - module = ' [' + function.module + ']' - else: - module = '' - try: - firstline, remaining = html.split("\n", 1) - return template % (firstline, module, remaining) - except ValueError: - return template % ("$%s()" % function.name, module, html) - - funcdoc = script_function_documentation_all( - fmt='html', - postprocessor=process_html, - ) - - if self.ui.textBrowser.layoutDirection() == QtCore.Qt.RightToLeft: - text_direction = 'rtl' - else: - text_direction = 'ltr' - - html = DOCUMENTATION_HTML_TEMPLATE % { - 'html': "
%s
" % funcdoc, - 'script_function_fg': theme.syntax_theme.func.name(), - 'monospace_font': FONT_FAMILY_MONOSPACE, - 'dir': text_direction, - 'inline_start': 'right' if text_direction == 'rtl' else 'left' - } - # Scripting code is always left-to-right. Qt does not support the dir - # attribute on inline tags, insert explicit left-right-marks instead. - html = html.replace('', '‎') - self.ui.textBrowser.setHtml(html) self.ui.buttonBox.rejected.connect(self.close) def closeEvent(self, event): diff --git a/picard/ui/ui_scripting_documentation_dialog.py b/picard/ui/ui_scripting_documentation_dialog.py index 2dec50eea..65408b1c1 100644 --- a/picard/ui/ui_scripting_documentation_dialog.py +++ b/picard/ui/ui_scripting_documentation_dialog.py @@ -3,8 +3,10 @@ # Automatically generated - don't edit. # Use `python setup.py build_ui` to update it. + from PyQt5 import QtCore, QtGui, QtWidgets + class Ui_ScriptingDocumentationDialog(object): def setupUi(self, ScriptingDocumentationDialog): ScriptingDocumentationDialog.setObjectName("ScriptingDocumentationDialog") @@ -15,32 +17,16 @@ class Ui_ScriptingDocumentationDialog(object): sizePolicy.setHeightForWidth(ScriptingDocumentationDialog.sizePolicy().hasHeightForWidth()) ScriptingDocumentationDialog.setSizePolicy(sizePolicy) ScriptingDocumentationDialog.setModal(False) - self.gridLayout = QtWidgets.QGridLayout(ScriptingDocumentationDialog) - self.gridLayout.setObjectName("gridLayout") - self.textBrowser = QtWidgets.QTextBrowser(ScriptingDocumentationDialog) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) - sizePolicy.setHorizontalStretch(1) - sizePolicy.setVerticalStretch(1) - sizePolicy.setHeightForWidth(self.textBrowser.sizePolicy().hasHeightForWidth()) - self.textBrowser.setSizePolicy(sizePolicy) - self.textBrowser.setOpenExternalLinks(True) - self.textBrowser.setObjectName("textBrowser") - self.gridLayout.addWidget(self.textBrowser, 0, 0, 1, 2) - self.scripting_doc_link = QtWidgets.QLabel(ScriptingDocumentationDialog) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.scripting_doc_link.sizePolicy().hasHeightForWidth()) - self.scripting_doc_link.setSizePolicy(sizePolicy) - self.scripting_doc_link.setWordWrap(True) - self.scripting_doc_link.setOpenExternalLinks(True) - self.scripting_doc_link.setObjectName("scripting_doc_link") - self.gridLayout.addWidget(self.scripting_doc_link, 1, 0, 1, 1) + self.verticalLayout = QtWidgets.QVBoxLayout(ScriptingDocumentationDialog) + self.verticalLayout.setObjectName("verticalLayout") + self.documentation_layout = QtWidgets.QVBoxLayout() + self.documentation_layout.setObjectName("documentation_layout") + self.verticalLayout.addLayout(self.documentation_layout) self.buttonBox = QtWidgets.QDialogButtonBox(ScriptingDocumentationDialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close) self.buttonBox.setObjectName("buttonBox") - self.gridLayout.addWidget(self.buttonBox, 1, 1, 1, 1) + self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(ScriptingDocumentationDialog) QtCore.QMetaObject.connectSlotsByName(ScriptingDocumentationDialog) @@ -48,5 +34,3 @@ class Ui_ScriptingDocumentationDialog(object): def retranslateUi(self, ScriptingDocumentationDialog): _translate = QtCore.QCoreApplication.translate ScriptingDocumentationDialog.setWindowTitle(_("Scripting Documentation")) - self.scripting_doc_link.setText(_("Open documentation in browser")) - diff --git a/ui/scripting_documentation_dialog.ui b/ui/scripting_documentation_dialog.ui index 8d85a016e..49cbab8ea 100644 --- a/ui/scripting_documentation_dialog.ui +++ b/ui/scripting_documentation_dialog.ui @@ -22,40 +22,11 @@ false - - - - - - 1 - 1 - - - - true - - + + + - - - - - 0 - 0 - - - - Open documentation in browser - - - true - - - true - - - - + Qt::Horizontal