Files
linuxcncAllWasm/lib/python/qtvcp/plugins/screenoptions_plugin.py
2026-08-20 06:17:39 +08:00

171 lines
5.9 KiB
Python

#!/usr/bin/env python3
from qtpy import QtCore, QtGui, QtWidgets
from qtpy.QtDesigner import QPyDesignerCustomWidgetPlugin, \
QPyDesignerTaskMenuExtension, QExtensionFactory, \
QDesignerFormWindowInterface
from qtvcp.widgets.screen_options import ScreenOptions
from qtvcp.widgets.qtvcp_icons import Icon
ICON = Icon()
####################################
# ScreenOptions
####################################
class LcncScreenOptionsPlugin(QPyDesignerCustomWidgetPlugin):
def __init__(self, parent=None):
super(LcncScreenOptionsPlugin, self).__init__(parent)
self.initialized = False
def initialize(self, formEditor):
if self.initialized:
return
manager = formEditor.extensionManager()
if manager:
self.factory = \
screenOptionsTaskMenuFactory(manager)
manager.registerExtensions(
self.factory,
"org.qt-project.Qt.Designer.TaskMenu")
self.initialized = True
def isInitialized(self):
return self.initialized
def createWidget(self, parent):
return ScreenOptions(parent)
def name(self):
return "ScreenOptions"
def group(self):
return "Linuxcnc - Controller"
def icon(self):
return QtGui.QIcon(QtGui.QPixmap(ICON.get_path('screenoptions')))
def toolTip(self):
return "ScreenOptions widget"
def whatsThis(self):
return ""
def isContainer(self):
return True
def domXml(self):
return '<widget class="ScreenOptions" name="screen_options" />\n'
def includeFile(self):
return "qtvcp.widgets.screen_options"
class screenOptionsDialog(QtWidgets.QDialog):
def __init__(self, widget, parent=None):
QtWidgets.QDialog.__init__(self, parent)
self.widget = widget
self.previewWidget = ScreenOptions()
self.previewWidget.notify_option = widget.notify_option
buttonBox = QtWidgets.QDialogButtonBox()
okButton = buttonBox.addButton(buttonBox.Ok)
cancelButton = \
buttonBox.addButton(buttonBox.Cancel)
okButton.clicked.connect(self.updateWidget)
cancelButton.clicked.connect(self.reject)
layout = QtWidgets.QGridLayout()
self.c_notify = QtWidgets.QCheckBox("Desktop Notify Errors")
self.c_notify.setChecked(widget.desktop_notify)
self.c_notify_max_msgs = QtWidgets.QSpinBox()
self.c_notify_max_msgs.setValue(widget.notify_max_messages)
self.c_notify_max_msgs.setRange(1, 10)
self.c_notify_max_msgs_label = QtWidgets.QLabel('Max Errors Shown')
self.c_errors = QtWidgets.QCheckBox("Catch Errors")
self.c_errors.setChecked(widget.catch_errors)
self.c_close = QtWidgets.QCheckBox("Catch close Event")
self.c_close.setChecked(widget.close_event)
self.c_play_sounds = QtWidgets.QCheckBox("Play Sounds")
self.c_play_sounds.setChecked(widget.play_sounds)
self.c_use_pref_file = QtWidgets.QCheckBox("Set up a Preference File")
self.c_use_pref_file.setChecked(widget.use_pref_file)
self.e_hal_base_name = QtWidgets.QLineEdit()
self.e_hal_base_name.setText(widget._halBaseName)
layout.addWidget(self.c_notify)
layout.addWidget(self.c_notify_max_msgs)
layout.addWidget(self.c_notify_max_msgs_label,1,1,1,1)
layout.addWidget(self.c_errors,2,0,1,1)
layout.addWidget(self.c_close,3,0,1,1)
layout.addWidget(self.c_play_sounds,4,0,1,1)
layout.addWidget(self.c_use_pref_file,5,0,1,1)
layout.addWidget(QtWidgets.QLabel('HAL Component Base Name:'),6,0,1,1)
layout.addWidget(self.e_hal_base_name,6,1,1,1)
layout.addWidget(buttonBox, 7, 0, 1, 2)
self.setLayout(layout)
self.setWindowTitle(self.tr("Set Options"))
def updateWidget(self):
formWindow = \
QDesignerFormWindowInterface.findFormWindow(
self.widget)
if formWindow:
formWindow.cursor().setProperty("notify_option",
self.c_notify.isChecked())
formWindow.cursor().setProperty("notify_max_messages",
self.c_notify_max_msgs.value())
formWindow.cursor().setProperty("catch_errors_option",
self.c_errors.isChecked())
formWindow.cursor().setProperty("catch_close_option",
self.c_close.isChecked())
formWindow.cursor().setProperty("play_sounds_option",
self.c_play_sounds.isChecked())
formWindow.cursor().setProperty("use_pref_file_option",
self.c_use_pref_file.isChecked())
formWindow.cursor().setProperty("halCompBaseName",
self.e_hal_base_name.text())
self.accept()
class screenOptionsMenuEntry(QPyDesignerTaskMenuExtension):
def __init__(self, widget, parent):
QPyDesignerTaskMenuExtension.__init__(self, parent)
self.widget = widget
self.editStateAction = QtWidgets.QAction(
self.tr("Set Options..."), self)
self.editStateAction.triggered.connect(self.updateLocation)
def preferredEditAction(self):
return self.editStateAction
def taskActions(self):
return [self.editStateAction]
def updateLocation(self):
dialog = screenOptionsDialog(self.widget)
dialog.exec()
class screenOptionsTaskMenuFactory(QExtensionFactory):
def __init__(self, parent=None):
QExtensionFactory.__init__(self, parent)
def createExtension(self, obj, iid, parent):
if iid != "org.qt-project.Qt.Designer.TaskMenu":
return None
if isinstance(obj, ScreenOptions):
return screenOptionsMenuEntry(obj, parent)
return None