def __init__(self, parent): super().__init__(parent) # on macOS having this not a dialog causes the window to be placed # behind the options dialog. if not IS_MACOS: self.setWindowFlags(QtCore.Qt.Window) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.parent = parent self.ui = Ui_ScriptingDocumentationDialog() self.ui.setupUi(self) 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 __init__(self, parent): super().__init__(parent) self.setWindowFlags(QtCore.Qt.Window) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.parent = parent self.parent.scripting_documentation_shown = True self.setWindowFlags(QtCore.Qt.Window) self.ui = Ui_ScriptingDocumentationDialog() self.ui.setupUi(self) 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': 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, ) syntax_theme = theme.get_syntax_theme() html = DOCUMENTATION_HTML_TEMPLATE % { 'html': "<dl>%s</dl>" % funcdoc, 'script_function_fg': syntax_theme.func.name(), 'monospace_font': FONT_FAMILY_MONOSPACE, } self.ui.textBrowser.setHtml(html) self.ui.buttonBox.rejected.connect(self.close)
def __init__(self, parent, include_link=True, *args, **kwargs): """Custom widget to display the scripting documentation. Args: parent (QWidget): Parent screen to check layoutDirection() include_link (bool): Indicates whether the web link should be included """ super().__init__(*args, **kwargs) 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 parent.layoutDirection() == QtCore.Qt.LayoutDirection.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. if text_direction == 'rtl': html = html.replace('<code>', '<code>‎') link = '<a href="' + PICARD_URLS['doc_scripting'] + '">' + _('Open Scripting Documentation in your browser') + '</a>' self.verticalLayout = QtWidgets.QVBoxLayout(self) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("docs_verticalLayout") self.textBrowser = QtWidgets.QTextBrowser(self) self.textBrowser.setEnabled(True) self.textBrowser.setMinimumSize(QtCore.QSize(0, 0)) self.textBrowser.setObjectName("docs_textBrowser") self.textBrowser.setHtml(html) self.textBrowser.show() self.verticalLayout.addWidget(self.textBrowser) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setContentsMargins(-1, 0, -1, -1) self.horizontalLayout.setObjectName("docs_horizontalLayout") self.scripting_doc_link = QtWidgets.QLabel(self) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.scripting_doc_link.sizePolicy().hasHeightForWidth()) if include_link: self.scripting_doc_link.setSizePolicy(sizePolicy) self.scripting_doc_link.setMinimumSize(QtCore.QSize(0, 20)) self.scripting_doc_link.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) self.scripting_doc_link.setWordWrap(True) self.scripting_doc_link.setOpenExternalLinks(True) self.scripting_doc_link.setObjectName("docs_scripting_doc_link") self.scripting_doc_link.setText(link) self.scripting_doc_link.show() self.horizontalLayout.addWidget(self.scripting_doc_link) self.verticalLayout.addLayout(self.horizontalLayout)