mirror of
https://github.com/fergalmoran/picard.git
synced 2026-05-20 09:56:13 +00:00
Use custom widget for documentation display from scriping options page
This commit is contained in:
committed by
Philipp Wolfer
parent
8b2cbcd13f
commit
99f829493c
@@ -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>‎')
|
||||
self.ui.textBrowser.setHtml(html)
|
||||
self.ui.buttonBox.rejected.connect(self.close)
|
||||
|
||||
def closeEvent(self, event):
|
||||
|
||||
@@ -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"))
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user