Source code for qtpyvcp.widgets.input_widgets.jog_increment
# Copyright (c) 2018 Kurt Jacobson
# <kurtcjacobson@gmail.com>
#
# This file is part of QtPyVCP.
#
# QtPyVCP is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# QtPyVCP is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with QtPyVCP. If not, see <http://www.gnu.org/licenses/>.
import os
from qtpy.QtGui import QColor
from qtpy.QtCore import Qt, Slot, Property
from qtpy.QtWidgets import QWidget, QBoxLayout, QSizePolicy
from qtpyvcp.utilities.info import Info
from qtpyvcp.actions.machine_actions import jog
from qtpyvcp.plugins import getPlugin
from qtpyvcp.utilities.settings import getSetting, setSetting
from qtpyvcp.widgets.button_widgets.led_button import LEDButton
STATUS = getPlugin('status')
INFO = Info()
[docs]class JogIncrementWidget(QWidget):
def __init__(self, parent=None, standalone=False):
super(JogIncrementWidget, self).__init__(parent)
self._container = hBox = QBoxLayout(QBoxLayout.LeftToRight, self)
hBox.setContentsMargins(0, 0, 0, 0)
self._ledDiameter = 15
self._ledColor = QColor('green')
self._alignment = Qt.AlignTop | Qt.AlignRight
# This prevents doing unneeded initialization
# when QtDesginer loads the plugin.
if parent is None and not standalone:
return
enable_default = True
increments = INFO.getIncrements()
for increment in increments:
button = LEDButton()
button.setCheckable(True)
button.setAutoExclusive(True)
button.setFocusPolicy(Qt.NoFocus)
button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
button.setMinimumSize(50, 42)
if increment != 0:
raw_increment = increment.strip()
# print('[', raw_increment, ']')
button.setText(raw_increment)
button.clicked.connect(self.setJogIncrement)
if enable_default:
enable_default = False
button.setDefault(True)
button.setChecked(True)
hBox.addWidget(button)
self.placeLed()
def setJogIncrement(self):
setSetting('machine.jog.increment', self.sender().text())
def layoutWidgets(self, layout):
return (layout.itemAt(i) for i in range(layout.count()))
def placeLed(self):
for w in self.layoutWidgets(self._container):
w.widget().setLedDiameter(self._ledDiameter)
w.widget().setLedColor(self._ledColor)
w.widget().setAlignment(self._alignment)
def getLedDiameter(self):
return self._ledDiameter
@Slot(int)
def setLedDiameter(self, value):
self._ledDiameter = value
self.placeLed()
def getLedColor(self):
return self._ledColor
@Slot(QColor)
def setLedColor(self, value):
self._ledColor = value
self.placeLed()
def getAlignment(self):
return self._alignment
@Slot(Qt.Alignment)
def setAlignment(self, value):
self._alignment = Qt.Alignment(value)
self.placeLed()
def getOrientation(self):
if self._container.direction() == QBoxLayout.LeftToRight:
return Qt.Horizontal
else:
return Qt.Vertical
@Slot(Qt.Orientation)
def setOrientation(self, value):
if value == Qt.Horizontal:
self._container.setDirection(QBoxLayout.LeftToRight)
else:
self._container.setDirection(QBoxLayout.TopToBottom)
self.adjustSize()
def getLayoutSpacing(self):
return self._container.spacing()
@Slot(int)
def setLayoutSpacing(self, value):
self._container.setSpacing(value)
diameter = Property(int, getLedDiameter, setLedDiameter)
color = Property(QColor, getLedColor, setLedColor)
alignment = Property(Qt.Alignment, getAlignment, setAlignment)
orientation = Property(Qt.Orientation, getOrientation, setOrientation)
layoutSpacing = Property(int, getLayoutSpacing, setLayoutSpacing)
if __name__ == "__main__":
import sys
from qtpy.QtWidgets import QApplication
app = QApplication(sys.argv)
w = JogIncrementWidget(standalone=True)
w.show()
sys.exit(app.exec_())