Import LinuxCNC source tree

This commit is contained in:
Wang Dequan
2026-08-20 06:17:39 +08:00
commit 2c814634c3
9429 changed files with 10556013 additions and 0 deletions

View File

@@ -0,0 +1,285 @@
from qtpy.QtCore import Property, Signal, QSize, QObject, Qt
from qtpy.QtGui import QDoubleValidator, QIntValidator
from qtpy.QtWidgets import QWidget, QPushButton,QLineEdit, QHBoxLayout
import decimal
from decimal import Decimal
class LineEdit(QLineEdit):
clicked = Signal(bool)
def __init__(self, parent=None):
super().__init__(parent)
#self.clicked.connect(lambda :self.entryClicked())
def mousePressEvent(self,event):
self.clicked.emit(True)
class TouchSpinBox(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self._value = 0
self._multiplierIndex = 0
self.setMinimumSize(QSize(200, 25))
self.setMaximumSize(QSize(300, 50))
lay = QHBoxLayout()
lay.setContentsMargins(0,0,0,0)
lay.setSpacing(0)
self.setLayout(lay)
self.entry = LineEdit()
self.entry.setMaximumHeight(100)
self.entry.setMinimumWidth(100)
self.entry.clicked.connect(lambda :self.callDialog(self))
lay.addWidget(self.entry)
up = QPushButton('Up')
up.setMaximumHeight(100)
up.setMaximumWidth(40)
up.pressed.connect(lambda :self.updateValue(True))
lay.addWidget(up)
self.select = QPushButton(str('<-'))
self.select.setMaximumHeight(100)
self.select.setMaximumWidth(40)
self.select.pressed.connect(lambda :self.moveLeft())
lay.addWidget(self.select)
self.selectR = QPushButton(str('->'))
self.selectR.setMaximumHeight(100)
self.selectR.setMaximumWidth(40)
self.selectR.pressed.connect(lambda :self.moveRight())
lay.addWidget(self.selectR)
self.down = QPushButton('Dwn')
self.down.setMaximumHeight(100)
self.down.setMaximumWidth(40)
self.down.pressed.connect(lambda :self.updateValue(False))
lay.addWidget(self.down)
self.init_settings()
def init_settings(self):
self.entry.setText(str('00'))
self.validInt = QIntValidator(-99999, 99999)
self.entry.setValidator(self.validInt)
def updateValue(self, state):
mult = pow(10,self._multiplierIndex)
print('update mult:',mult)
decimal.getcontext().prec = 8
x = Decimal(self._value) + Decimal( mult)
print('Dec:',x)
if state:
self.setValue(Decimal(self._value) + Decimal( mult))
else:
self.setValue(Decimal(self._value) - Decimal( mult))
def moveLeft(self):
mult = self._multiplierIndex + 1
t = len(self.entry.text())
print('mult',mult, 't',t)
if t < 0:t=0
if mult >= t:
mult = 0
pwr = pow(10,mult)
print('pow',pwr)
self._multiplierIndex = mult
#self.select.setText(str(pow(10,mult)))
print('left',t-self._multiplierIndex-1,mult)
self.entry.setSelection (t-self._multiplierIndex-1,1)
def moveRight(self):
mult = self._multiplierIndex - 1
t = len(self.entry.text())
print('mult',mult, 't',t)
if t < 0:t=0
if mult < 0:
mult = t-1
pwr = pow(10,mult)
print('pow',pwr)
self._multiplierIndex = mult
#self.select.setText(str(pow(10,mult)))
print('right',t-self._multiplierIndex-1,mult)
self.entry.setSelection (t-self._multiplierIndex-1,1)
def text(self):
return self.entry.text()
def setText(self, text):
self.entry.setText(text)
self._value = int(text)
def value(self):
return int(self.entry.text())
def setValue(self, value):
self._value = int(value)
self.entry.setText(str(self._value))
# class patch or should we call a dialog from here too?
def callDialog(self,widget):
pass
class TouchDoubleSpinBox(TouchSpinBox):
def __init__(self, parent=None):
super(TouchDoubleSpinBox, self).__init__(parent)
def init_settings(self):
self._value = 10.001
self.validDouble = QDoubleValidator(-999.999, 999.999, 3)
self.entry.setText(str('10.001'))
self.entry.setValidator(self.validDouble)
self.entry.returnPressed.connect(lambda :self.entryUpdate())
def updateValue(self, state):
def convert(x):
return ['0','1','2','3','4','5','6','7','8','9','-',' ','end'][x]
def indexof(x):
return ['0','1','2','3','4','5','6','7','8','9','-',' ','end'].index(x)
if self.entry.text() == '':
self.entry.setText('0')
pos = self.getPosition(self._multiplierIndex)
x = self.entry.text()[pos]
print('update txt:',x,'pos',pos)
if state:
next = convert(indexof(x)+1)
if next in( '-',' ','end'):
if pos == 0:
if next != 'end':
pass
else:
next = 0
else:
next = 0
else:
next = convert(indexof(x)-1)
if next in( '-',' ','end'):
if pos == 0:
if next != 'end':
pass
else:
next = 0
else:
next = 0
self.entry.setText( self.replace_at_index(self.entry.text(),pos,str(next)))
self.entry.setSelection (pos,1)
def replace_at_index(self,text,index=0,replacement=''):
return '%s%s%s'%(text[:index],replacement,text[index+1:])
def getPosition(self, index):
t = len(self.entry.text())-1
print('T:',t,'Index:',index)
if t < 0:t=0
if index > t:
self.entry.setText('0'+ self.entry.text())
t = len(self.entry.text())-1
#index = 0
if self.entry.text()[t-index] in ('.',','):
index+=1
pos = t-index
self._multiplierIndex = index
return pos
def moveLeft(self):
index = self._multiplierIndex +1
t = len(self.entry.text())-1
print('T:',t,'Index:',index)
if t < 0:t=0
if index == -1:
if '.' in self.entry.text():
self.entry.setText(self.entry.text()+'0')
t = len(self.entry.text())-1
index = 0
else:
self.entry.setText(self.entry.text()+'.0')
t = len(self.entry.text())-1
index = 0
if self.entry.text()[t-index] in ('.',','):
index-=1
pos = t-index
self._multiplierIndex = index
try:
print('text;',self.entry.text()[pos])
except:
pass
#self.select.setText(str(pos))
self.entry.setSelection (pos,1)
def moveRight(self):
index = self._multiplierIndex -1
t = len(self.entry.text())-1
print('T:',t,'Index:',index)
if t < 0:t=0
if index == -1:
if '.' in self.entry.text():
self.entry.setText(self.entry.text()+'0')
t = len(self.entry.text())-1
index = 0
else:
self.entry.setText(self.entry.text()+'.0')
t = len(self.entry.text())-1
index = 0
if self.entry.text()[t-index] in ('.',','):
index-=1
pos = t-index
self._multiplierIndex = index
try:
print('text;',self.entry.text()[pos])
except:
pass
#self.select.setText(str(pos))
self.entry.setSelection (pos,1)
def moveLeft(self):
pos = self.getPosition(self._multiplierIndex +1)
try:
print('text;',self.entry.text()[pos])
except:
pass
#self.select.setText(str(pos))
self.entry.setSelection (pos,1)
def setValue(self, value):
self.entry.setText('{:4.3f}'.format(value))
def setText(self, text):
self.entry.setText('{:4.3f}'.format(float(text)))
def entryUpdate(self):
print('Update:',self.entry.text())
if self.entry.text() == '':
self.setValue(0)
# for direct testing
if __name__ == "__main__":
from qtpy.QtWidgets import *
from qtpy.QtCore import *
from qtpy.QtGui import *
import sys
app = QApplication(sys.argv)
w = TouchSpinBox()
w.show()
w = TouchDoubleSpinBox()
w.show()
sys.exit( app.exec() )