Use custom widget for documentation display from scriping options page

This commit is contained in:
Bob Swift
2021-04-23 12:22:55 -06:00
committed by Philipp Wolfer
parent 8b2cbcd13f
commit 99f829493c
3 changed files with 16 additions and 131 deletions

View File

@@ -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 = '''
<!DOCTYPE html>
<html>
<head>
<style>
dt {
color: %(script_function_fg)s
}
dd {
/* Qt does not support margin-inline-start, use margin-left/margin-right instead */
margin-%(inline_start)s: 50px;
margin-bottom: 50px;
}
code {
font-family: %(monospace_font)s;
}
</style>
</head>
<body dir="%(dir)s">
%(html)s
</body>
</html>
'''
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 = _('<a href="%(picard-doc-scripting-url)s">Open Scripting'
' Documentation in your browser</a>') % args
self.ui.scripting_doc_link.setText(text)
def process_html(html, function):
if not html:
html = ''
template = '<dt>%s%s</dt><dd>%s</dd>'
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 % ("<code>$%s()</code>" % 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': "<dl>%s</dl>" % 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('<code>', '<code>&#8206;')
self.ui.textBrowser.setHtml(html)
self.ui.buttonBox.rejected.connect(self.close)
def closeEvent(self, event):

View File

@@ -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"))

View File

@@ -22,40 +22,11 @@
<property name="modal">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<widget class="QTextBrowser" name="textBrowser">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>1</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QVBoxLayout" name="documentation_layout"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="scripting_doc_link">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Open documentation in browser</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>