Browse Source

Improved spinbox and removed properties from scrollbar

pull/137/head
Eugenio Parodi 3 years ago
parent
commit
487aa3e6a7
  1. 2
      TermTk/TTkUiTools/properties/__init__.py
  2. 32
      TermTk/TTkUiTools/properties/scrollbar.py
  3. 24
      TermTk/TTkUiTools/properties/spinbox.py
  4. 1
      TermTk/TTkUiTools/uiproperties.py
  5. 127
      TermTk/TTkWidgets/scrollbar.py
  6. 24
      TermTk/TTkWidgets/spinbox.py
  7. 2
      ttkDesigner/app/propertyeditor.py
  8. 4
      ttkDesigner/app/signalsloteditor.py

2
TermTk/TTkUiTools/properties/__init__.py

@ -16,7 +16,7 @@ from .resizableframe import TTkResizableFrameProperties
# from .scrollarea import
from .scrollbar import TTkScrollBarProperties
# from .spacer import
# from .spinbox import
from .spinbox import TTkSpinBoxProperties
from .splitter import TTkSplitterProperties
# from .tabwidget import
from .texedit import TTkTextEditProperties

32
TermTk/TTkUiTools/properties/scrollbar.py

@ -37,5 +37,35 @@ TTkScrollBarProperties = {
'flags': {
'Horizontal' : TTkK.HORIZONTAL ,
'Vertical' : TTkK.VERTICAL } } },
},'signals' : {},'slots' : {}
'Value' : {
'init': {'name':'value', 'type':int } ,
'get': { 'cb':TTkScrollBar.value, 'type':int } ,
'set': { 'cb':TTkScrollBar.setValue, 'type':int } },
'Minimum' : {
'init': {'name':'minimum', 'type':int } ,
'get': { 'cb':TTkScrollBar.minimum, 'type':int } ,
'set': { 'cb':TTkScrollBar.setMinimum, 'type':int } },
'Maximum' : {
'init': {'name':'maximum', 'type':int } ,
'get': { 'cb':TTkScrollBar.maximum, 'type':int } ,
'set': { 'cb':TTkScrollBar.setMaximum, 'type':int } },
'Single Step' : {
'init': {'name':'singleStep', 'type':int } ,
'get': { 'cb':TTkScrollBar.singleStep, 'type':int } ,
'set': { 'cb':TTkScrollBar.setSingleStep, 'type':int } },
'Page Step' : {
'init': {'name':'pageStep', 'type':int } ,
'get': { 'cb':TTkScrollBar.pageStep, 'type':int } ,
'set': { 'cb':TTkScrollBar.setPageStep, 'type':int } },
},'signals' : {
'valueChanged(int)' : {'name' : 'valueChanged', 'type': int },
'rangeChanged(int,int)' : {'name' : 'rangeChanged', 'type':(int,int)},
'sliderMoved(int)' : {'name' : 'sliderMoved' , 'type': int },
},'slots' : {
'setValue(int)' : {'name' : 'setValue' , 'type': int },
'setSingleStep(int)' : {'name' : 'setSingleStep' , 'type': int },
'setPageStep(int)' : {'name' : 'setPageStep' , 'type': int },
'setRangeTo(int)' : {'name' : 'setRangeTo' , 'type': int },
'setRange(int,int)' : {'name' : 'setRange' , 'type':(int,int)},
}
}

24
TermTk/TTkUiTools/properties/spinbox.py

@ -22,3 +22,27 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
from TermTk.TTkWidgets.spinbox import TTkSpinBox
TTkSpinBoxProperties = {
'properties' : {
'Value' : {
'init': {'name':'value', 'type':int } ,
'get': { 'cb':TTkSpinBox.value, 'type':int } ,
'set': { 'cb':TTkSpinBox.setValue, 'type':int } },
'Minimum' : {
'init': {'name':'minimum', 'type':int } ,
'get': { 'cb':TTkSpinBox.minimum, 'type':int } ,
'set': { 'cb':TTkSpinBox.setMinimum, 'type':int } },
'Maximum' : {
'init': {'name':'maximum', 'type':int } ,
'get': { 'cb':TTkSpinBox.maximum, 'type':int } ,
'set': { 'cb':TTkSpinBox.setMaximum, 'type':int } },
},'signals' : {
'valueChanged(int)' : {'name' : 'valueChanged', 'type': int },
},'slots' : {
'setValue(int)' : {'name' : 'setValue' , 'type': int },
'setMinimum(int)' : {'name' : 'setMinimum' , 'type': int },
'setMaximum(int)' : {'name' : 'setMaximum' , 'type': int },
}
}

1
TermTk/TTkUiTools/uiproperties.py

@ -36,6 +36,7 @@ TTkUiProperties = {
TTkRadioButton.__name__: TTkRadioButtonProperties,
TTkResizableFrame.__name__: TTkResizableFrameProperties,
TTkScrollBar.__name__: TTkScrollBarProperties,
TTkSpinBox.__name__: TTkSpinBoxProperties,
TTkSplitter.__name__: TTkSplitterProperties,
TTkTextEdit.__name__: TTkTextEditProperties,
TTkWidget.__name__: TTkWidgetProperties,

127
TermTk/TTkWidgets/scrollbar.py

@ -35,7 +35,7 @@ class TTkScrollBar(TTkWidget):
__slots__ = (
'_orientation',
'_minimum', '_maximum',
'_singlestep', '_pagestep',
'_singleStep', '_pageStep',
'_value', '_color', '_focusColor',
'_draggable', '_mouseDelta',
# Those Vars are required to handle the mouseclick
@ -64,8 +64,8 @@ class TTkScrollBar(TTkWidget):
self.setMinimumSize(3,1)
self._minimum = kwargs.get('minimum' , 0 )
self._maximum = kwargs.get('maximum' , 99 )
self._singlestep = kwargs.get('singlestep' , 1 )
self._pagestep = kwargs.get('pagestep' , 10 )
self._singleStep = kwargs.get('singleStep' , 1 )
self._pageStep = kwargs.get('pageStep' , 10 )
self._value = kwargs.get('value' , 0 )
self._color = kwargs.get('color', TTkColor.RST )
self._focusColor = kwargs.get('focusColor', TTkColor.fg('#cccc00') )
@ -85,9 +85,9 @@ class TTkScrollBar(TTkWidget):
|------------------| size = widt or height
|----------------| size2 = widt or height - 2 (removed the ending arrows)
|------------| workingSize = max - min
|----------------| drawingSize = max - min + pagestep
a---b slider = [a=value-min, b=a+pagestep]
|---| pagestep, asciiStep (step size in ascii)
|----------------| drawingSize = max - min + pageStep
a---b slider = [a=value-min, b=a+pageStep]
|---| pageStep, asciiStep (step size in ascii)
'''
def paintEvent(self):
@ -97,16 +97,16 @@ class TTkScrollBar(TTkWidget):
size=self._width
if self.hasFocus():
color = self.focusColor
color = self._focusColor
else:
color = self.color
color = self._color
if self._maximum == self._minimum:
# Special case where no scroll is needed
aa=0
bb=size-2
else:
size2 = size-2
asciiStep = size2 * self._pagestep // (self._maximum - self._minimum + self._pagestep)
asciiStep = size2 * self._pageStep // (self._maximum - self._minimum + self._pageStep)
if asciiStep==0: asciiStep=1 # Force the slider to be at least one char wide
asciiDrawingSize = size2 - asciiStep
a = self._value - self._minimum
@ -122,10 +122,12 @@ class TTkScrollBar(TTkWidget):
def wheelEvent(self, evt):
if evt.evt == TTkK.WHEEL_Up:
self.value = self.value - self.pagestep
self._value -= self._pageStep
else:
self.value = self.value + self.pagestep
self.sliderMoved.emit(self.value)
self._value += self._pageStep
self._value = max(self._minimum,min(self._maximum,self._value))
self.sliderMoved.emit(self._value)
self.update()
return True
def mousePressEvent(self, evt):
@ -137,24 +139,21 @@ class TTkScrollBar(TTkWidget):
mouse = evt.x
if mouse == 0: # left/up arrow pressed
self.value = self.value - self.singlestep
self.update()
self._value = self._value - self._singleStep
elif mouse == size-1: # right/down arrow pressed
self.value = self.value + self.singlestep
self.update()
self._value = self._value + self._singleStep
elif self._screenPgDown[0] <= mouse < self._screenPgDown[1]:
self.value = self.value - self.pagestep
self.update()
self._value = self._value - self._pageStep
elif self._screenPgUp[0] <= mouse < self._screenPgUp[1]:
self.value = self.value + self.pagestep
self.update()
self._value = self._value + self._pageStep
elif self._screenScroller[0] <= mouse < self._screenScroller[1]:
self._mouseDelta = mouse-self._screenScroller[0]
self._draggable = True
self.update()
else:
return False
self.sliderMoved.emit(self.value)
self._value = max(self._minimum,min(self._maximum,self._value))
self.sliderMoved.emit(self._value)
self.update()
# TTkLog.debug(f"m={mouse}, md:{self._mouseDelta}, d:{self._screenPgDown},u:{self._screenPgUp},s:{self._screenScroller}")
return True
@ -173,9 +172,11 @@ class TTkScrollBar(TTkWidget):
asciiDrawingSize = size2 - asciiStep
a = aa * (self._maximum - self._minimum) // asciiDrawingSize
self.value = a + self._minimum
self.sliderMoved.emit(self.value)
self._value = a + self._minimum
self._value = max(self._minimum,min(self._maximum,self._value))
self.sliderMoved.emit(self._value)
self.update()
# TTkLog.debug(f"m={mouse}, md:{self._mouseDelta}, aa:{aa}")
return True
@ -186,10 +187,25 @@ class TTkScrollBar(TTkWidget):
def focusOutEvent(self):
self.update()
def singleStep(self):
'''singleStep'''
return self._singleStep
@pyTTkSlot(int)
def setSingleStep(self, v):
'''setSingleStep'''
self._singleStep = v
self.update()
def pageStep(self):
'''pageStep'''
return self._pageStep
@pyTTkSlot(int)
def setPageStep(self, pageStep):
'''setPageStep'''
self._pagestep = pageStep
self._pageStep = pageStep
self.update()
@pyTTkSlot(int)
def setRangeTo(self, max):
@ -202,19 +218,14 @@ class TTkScrollBar(TTkWidget):
if self._minimum == min and \
self._maximum == max :
return
self.minimum = min
self.maximum = max
self._minimum = min
self._maximum = max
self.rangeChanged.emit(min, max)
@pyTTkSlot(int)
def setValue(self, v):
'''setValue'''
self.value = v
def minimum(self):
return self._minimum
@property
def minimum(self): return self._minimum
@minimum.setter
def minimum(self, v):
def setMinimum(self, v):
if v == self._minimum:
return
if v > self._maximum:
@ -222,10 +233,10 @@ class TTkScrollBar(TTkWidget):
self._minimum = v
self.update()
@property
def maximum(self): return self._maximum
@maximum.setter
def maximum(self, v):
def maximum(self):
return self._maximum
def setMaximum(self, v):
if v == self._maximum:
return
if v < self._minimum:
@ -233,43 +244,29 @@ class TTkScrollBar(TTkWidget):
self._maximum = v
self.update()
@property
def singlestep(self): return self._singlestep
@singlestep.setter
def singlestep(self, v): self._singlestep = v; self.update()
@property
def pagestep(self): return self._pagestep
@pagestep.setter
def pagestep(self, v): self._pagestep = v; self.update()
@property
def value(self): return self._value
@value.setter
def value(self, v):
if self._value == v:
return
if v > self._maximum: v = self._maximum
if v < self._minimum: v = self._minimum
def value(self):
return self._value
@pyTTkSlot(int)
def setValue(self, v):
v = max(self._minimum,min(self._maximum,v))
if self._value == v: return
self._value = v
self.valueChanged.emit(v)
self.update()
@property
def color(self):
return self._color
@color.setter
def color(self, color):
if self.color != color:
def setColor(self, color):
if self._color != color:
self._color = color
self.update()
@property
def focusColor(self):
return self._focusColor
@focusColor.setter
def focusColor(self, color):
if self.focusColor != color:
def setFocusColor(self, color):
if self._focusColor != color:
self._focusColor = color
self.update()

24
TermTk/TTkWidgets/spinbox.py

@ -70,6 +70,30 @@ class TTkSpinBox(TTkWidget):
self._lineEdit.setText(str(self._value))
self.valueChanged.emit(value)
def minimum(self):
'''minimum'''
return self._minimum
@pyTTkSlot(int)
def setMinimum(self, minimum):
'''setMinimum'''
if self._minimum == minimum:
return
self._minimum = minimum
self.setValue(self._value)
def maximum(self):
'''maximum'''
return self._maximum
@pyTTkSlot(int)
def setMaximum(self, maximum):
'''setMaximum'''
if self._maximum == maximum:
return
self._maximum = maximum
self.setValue(self._value)
@pyTTkSlot(str)
def _textEdited(self, text):
self.setValue(int(str(text)))

2
ttkDesigner/app/propertyeditor.py

@ -165,7 +165,7 @@ class PropertyEditor(ttk.TTkGridLayout):
# Integer Fields
def _processInt(name, prop):
getval = prop['get']['cb'](domw)
value = ttk.TTkSpinBox(value=getval, height=1)
value = ttk.TTkSpinBox(value=getval, height=1, maximum=0x10000, minimum=-0x10000)
value.valueChanged.connect(_bound(prop['set']['cb'],domw,lambda v:v))
return ttk.TTkTreeWidgetItem([name,value])
# String Fields

4
ttkDesigner/app/signalsloteditor.py

@ -119,7 +119,7 @@ class _SignalSlotItem(ttk.TTkTreeWidgetItem):
curSlot = str(self._slot.currentText())
filter = None
for c in self._slotData:
if not curSlot in self._slotData[c]: continue
if not str(curSlot) in self._slotData[c]: continue
filter = self._slotData[c][curSlot]['type']
break
@ -151,7 +151,7 @@ class _SignalSlotItem(ttk.TTkTreeWidgetItem):
curSlot = self._slot.currentText()
filter = 'ALL'
for c in self._signalData:
if not curSignal in self._signalData[c]: continue
if not str(curSignal) in self._signalData[c]: continue
filter = self._signalData[c][curSignal]['type']
break

Loading…
Cancel
Save