Source code for qtpyvcp.widgets.input_widgets.mdientry_widget


from qtpy.QtCore import Qt, Slot, Property, QStringListModel
from qtpy.QtGui import QValidator
from qtpy.QtWidgets import QLineEdit, QListWidgetItem, QCompleter

from qtpyvcp.plugins import getPlugin
from qtpyvcp.utilities.info import Info
from qtpyvcp.actions.machine_actions import issue_mdi
from qtpyvcp.widgets.base_widgets.base_widget import CMDWidget

STATUS = getPlugin('status')
INFO = Info()


[docs]class Validator(QValidator):
[docs] def validate(self, string, pos): # eventually could do some actual validating here inputVal = string if not(inputVal.startswith(";") or inputVal.startswith("(")): inputVal = inputVal.upper(); return QValidator.Acceptable, inputVal, pos
[docs]class MDIEntry(QLineEdit, CMDWidget): """MDI Entry Input any valid g Code. Enter sends the g Code. """ def __init__(self, parent=None): super(MDIEntry, self).__init__(parent) self.mdi_rtnkey_behaviour_supressed = False self.mdi_history_size = 100 self.validator = Validator(self) self.setValidator(self.validator) # The completer is what creates the visual list mdi history # that can be selected from. This is useful when mdientry is used # stand alone but can get in the way when using this widget in # conjunction with mdihistory widget and a rich on-screen data # entry UI. So this designer exposed setting allows this to be enabled # or disabled as needed. self._completer_enabled = True self.returnPressed.connect(self.submit) @Property(int) def mdi_history_size(self): return self._mdi_history_size @mdi_history_size.setter def mdi_history_size(self, size): self._mdi_history_size = size @Property(bool) def completerEnabled(self): return self._completer_enabled @completerEnabled.setter def completerEnabled(self, flag): self._completer_enabled = flag @Slot() def submit(self): # Only support submit from Return Key if not suppressed # This is used to stop standalone behaviour by the MDIHistory widget. # MDIHisttory uses its handle to this widget to set # mdi_rtnkey_behaviour_supressed = True. # MDIHistory will now manage the MDILine submission process if not self.mdi_rtnkey_behaviour_supressed: cmd = str(self.text()).strip() issue_mdi(cmd) self.setText('') STATUS.mdi_history.setValue(cmd) @Slot(QListWidgetItem) def setMDIText(self, listItem): if listItem is not None: self.setText(listItem.text())
[docs] def keyPressEvent(self, event): if ( self._completer_enabled and ( event.key() == Qt.Key_Up or event.key() == Qt.Key_Down ) ): self.completer().complete() else: super(MDIEntry, self).keyPressEvent(event)
[docs] def focusInEvent(self, event): super(MDIEntry, self).focusInEvent(event) if self._completer_enabled: self.completer().complete()
def supress_rtn_key_behaviour(self): self.mdi_rtnkey_behaviour_supressed = True def enable_rtn_key_behaviour(self): self.mdi_rtnkey_behaviour_supressed = False
[docs] def initialize(self): history = STATUS.mdi_history.value if self._completer_enabled: completer = QCompleter() completer.setCaseSensitivity(Qt.CaseInsensitive) self.model = QStringListModel() completer.setModel(self.model) self.setCompleter(completer) self.model.setStringList(history) STATUS.mdi_history.notify(self.model.setStringList) STATUS.max_mdi_history_length = self.mdi_history_size
[docs] def terminate(self): pass