Skip to content

Commit

Permalink
Merge pull request #193 from ceccopierangiolieugenio/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
ceccopierangiolieugenio authored Oct 21, 2023
2 parents 4fa46e4 + fe85372 commit 9d9ae86
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 64 deletions.
8 changes: 4 additions & 4 deletions TermTk/TTkCore/TTkTerm/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from .inputkey import *
from .inputmouse import *
from .colors import *
# from .inputkey import *
# from .inputmouse import *
# from .colors import *
# from .input import *
from .term import *
from .input import *
33 changes: 0 additions & 33 deletions TermTk/TTkUiTools/properties/__init__.py
Original file line number Diff line number Diff line change
@@ -1,33 +0,0 @@
# from .about import
from .button import *
from .checkbox import *
from .combobox import *
from .container import *
from .frame import *
# from .graph import
# from .image import
from .label import *
from .lineedit import *
from .list_ import *
# from .listwidget import
# from .menubar import
from .menu import *
# from .progressbar import
from .radiobutton import *
from .resizableframe import *
# from .scrollarea import
from .scrollbar import *
# from .spacer import
from .spinbox import *
from .splitter import *
# from .tabwidget import
from .texedit import *
from .widget import *
from .window import *

# Pickers
from .colorpicker import *
from .filepicker import *

# Layouts
from .layout import *
37 changes: 35 additions & 2 deletions TermTk/TTkUiTools/uiproperties.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,40 @@

from TermTk.TTkLayouts import *
from TermTk.TTkWidgets import *
from .properties import *

# from .properties.about import
from .properties.button import *
from .properties.checkbox import *
from .properties.combobox import *
from .properties.container import *
from .properties.frame import *
# from .properties.graph import
# from .properties.image import
from .properties.label import *
from .properties.lineedit import *
from .properties.list_ import *
# from .properties.listwidget import
# from .properties.menubar import
from .properties.menu import *
# from .properties.progressbar import
from .properties.radiobutton import *
from .properties.resizableframe import *
# from .properties.scrollarea import
from .properties.scrollbar import *
# from .properties.spacer import
from .properties.spinbox import *
from .properties.splitter import *
# from .properties.tabwidget import
from .properties.texedit import *
from .properties.widget import *
from .properties.window import *

# Pickers
from .properties.colorpicker import *
from .properties.filepicker import *

# Layouts
from .properties.layout import *

TTkUiProperties = {
# Widgets
Expand All @@ -45,7 +78,7 @@
TTkTextEdit.__name__: TTkTextEditProperties,
TTkWidget.__name__: TTkWidgetProperties,
TTkWindow.__name__: TTkWindowProperties,
# Pickers
# Pickers
TTkColorButtonPicker.__name__ : TTkColorButtonPickerProperties,
TTkFileButtonPicker.__name__ : TTkFileButtonPickerProperties,
# Layouts
Expand Down
18 changes: 9 additions & 9 deletions TermTk/TTkWidgets/tabwidget.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,15 +359,15 @@ def setSideEnd(self, sideEnd):
self._leftScroller.setSideEnd(sideEnd&TTkK.LEFT)
self._updateTabs()

def addTab(self, label, data=None):
def addTab(self, label, data=None, closable=None):
'''addTab'''
return self.insertTab(len(self._tabButtons), label=label, data=data)
return self.insertTab(len(self._tabButtons), label=label, data=data, closable=closable)

def insertTab(self, index, label, data=None):
def insertTab(self, index, label, data=None, closable=None):
'''insertTab'''
if index <= self._currentIndex:
self._currentIndex += 1
button = TTkTabButton(parent=self, text=label, border=not self._small, closable=self._tabClosable, data=data)
button = TTkTabButton(parent=self, text=label, border=not self._small, closable=self._tabClosable if closable is None else closable, data=data)
self._tabButtons.insert(index,button)
button.clicked.connect(lambda :self.setCurrentIndex(self._tabButtons.index(button)))
button.clicked.connect(lambda :self.tabBarClicked.emit(self._tabButtons.index(button)))
Expand Down Expand Up @@ -668,7 +668,7 @@ def dropEvent(self, evt) -> bool:
if index <= newIndex:
newIndex -= 1
tw.removeTab(index)
self.insertTab(newIndex, widget, tb.text(), data)
self.insertTab(newIndex, widget, tb.text(), data, tb._closable)
self.setCurrentIndex(newIndex)
#self._tabChanged(newIndex)
elif tw != self:
Expand Down Expand Up @@ -699,19 +699,19 @@ def addMenu(self, text, position=TTkK.LEFT, data=None) -> TTkMenuBarButton:
self._tabBarTopLayout.update()
return button

def addTab(self, widget, label, data=None):
def addTab(self, widget, label, data=None, closable=None):
'''addTab'''
widget.hide()
self._tabWidgets.append(widget)
self.layout().addWidget(widget)
self._tabBar.addTab(label, data)
self._tabBar.addTab(label, data, closable)

def insertTab(self, index, widget, label, data=None):
def insertTab(self, index, widget, label, data=None, closable=None):
'''insertTab'''
widget.hide()
self._tabWidgets.insert(index, widget)
self.layout().addWidget(widget)
self._tabBar.insertTab(index, label, data)
self._tabBar.insertTab(index, label, data, closable)

@pyTTkSlot(int)
def removeTab(self, index):
Expand Down
34 changes: 22 additions & 12 deletions TermTk/TTkWidgets/texedit.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,17 @@ class _TTkTextEditViewLineNumber(TTkAbstractScrollView):
'separatorColor': TTkColor.fg("#888888")},
}

__slots__ = ('_textWrap')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setMaximumWidth(20)
__slots__ = ('_textWrap','_startingNumber')
def __init__(self, startingNumber=0, **kwargs):
self._startingNumber = startingNumber
self._textWrap = None
super().__init__(**kwargs)
self.setMaximumWidth(2)

def _wrapChanged(self):
dt = max(1,self._textWrap._lines[-1][0])
width = 2+floor(log10(dt))
off = self._startingNumber
width = 1+max(len(str(int(dt+off))),len(str(int(off))))
self.setMaximumWidth(width)
self.update()

Expand All @@ -80,6 +82,7 @@ def paintEvent(self, canvas):
if not self._textWrap: return
_, oy = self.getViewOffsets()
w, h = self.size()
off = self._startingNumber

style = self.currentStyle()
color = style['color']
Expand All @@ -91,11 +94,11 @@ def paintEvent(self, canvas):
if fr:
canvas.drawText(pos=(0,i), text='<', width=w, color=wrapColor)
else:
canvas.drawText(pos=(0,i), text=f"{dt}", width=w, color=color)
canvas.drawText(pos=(0,i), text=f"{dt+off}", width=w, color=color)
canvas.drawChar(pos=(w-1,i), char='β–Œ', color=separatorColor)
else:
for y in range(h):
canvas.drawText(pos=(0,y), text=f"{y+oy}", width=w, color=color)
canvas.drawText(pos=(0,y), text=f"{y+oy+off}", width=w, color=color)
canvas.drawChar(pos=(w-1,y), char='β–Œ', color=separatorColor)

class TTkTextEditView(TTkAbstractScrollView):
Expand Down Expand Up @@ -799,17 +802,17 @@ class TTkTextEdit(TTkAbstractScrollArea):
'undoAvilable', 'redoAvailable',
'textChanged'
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def __init__(self, textEditView=None, lineNumber=False, lineNumberStarting=0, **kwargs):
super().__init__(**kwargs)
if 'parent' in kwargs: kwargs.pop('parent')
self._textEditView = kwargs.get('textEditView', TTkTextEditView(*args, **kwargs))
self._textEditView = textEditView if textEditView else TTkTextEditView(**kwargs)
# self.setFocusPolicy(self._textEditView.focusPolicy())
# self._textEditView.setFocusPolicy(TTkK.ParentFocus)
self._lineNumber = kwargs.get('lineNumber', False)
self._lineNumber = lineNumber

textEditLayout = TTkAbstractScrollViewGridLayout()
textEditLayout.addWidget(self._textEditView,0,1)
self._lineNumberView = _TTkTextEditViewLineNumber(visible=self._lineNumber)
self._lineNumberView = _TTkTextEditViewLineNumber(visible=self._lineNumber, startingNumber=lineNumberStarting)
self._lineNumberView.setTextWrap(self._textEditView._textWrap)
textEditLayout.addWidget(self._lineNumberView,0,0)
self.setViewport(textEditLayout)
Expand Down Expand Up @@ -862,6 +865,13 @@ def setLineNumber(self, ln):
'''setLineNumber'''
self._lineNumberView.setVisible(ln)

def lineNumberStarting(self):
return self._lineNumberView._startingNumber

def setLineNumberStarting(self, starting):
self._lineNumberView._startingNumber = starting
self._lineNumberView._wrapChanged()

def setDocument(self, document):
'''setDocument'''
self._textEditView.setDocument(document)
Expand Down
9 changes: 6 additions & 3 deletions demo/showcase/textedit.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def demoTextEdit(root=None, document=None):
# If no document is passed a default one is created,
# In this showcase I want to be able to share the same
# document among 2 textEdit widgets
te = ttk.TTkTextEdit(document=document, lineNumber=True)
te = ttk.TTkTextEdit(document=document, lineNumber=True, lineNumberStarting=1)

te.setReadOnly(False)

Expand Down Expand Up @@ -127,7 +127,7 @@ def demoTextEdit(root=None, document=None):
# Empty columns/cells are 1 char wide due to "columnMinWidth=1" parameter in the GridLayout
# 1 3 8 11
# 0 2 4 5 6 7 9 10 12
# 0 [ ] FG [ ] BG [ ] LineNumber
# 0 [ ] FG [ ] BG [ ] LineNumber [ 0]Starting Number
# 1 β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” ╒═══╕╒═══╕╒═══╕╒═══╕ β”Œβ”€β”€β”€β”€β”€β”€β”β”Œβ”€β”€β”€β”€β”€β”€β”
# 2 β”‚ β”‚ β”‚ β”‚ β”‚ a β”‚β”‚ a β”‚β”‚ a β”‚β”‚ a β”‚ β”‚ UNDO β”‚β”‚ REDO β”‚
# 3 β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”˜β””β”€β”€β”€β”˜β””β”€β”€β”€β”˜β””β”€β”€β”€β”˜ β•˜β•β•β•β•β•β•β•›β””β”€β”€β”€β”€β”€β”€β”˜ ┕━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┙
Expand All @@ -140,6 +140,7 @@ def demoTextEdit(root=None, document=None):
fontLayout.addWidget(btn_bgColor := ttk.TTkColorButtonPicker(border=True, enabled=False, maxSize=(7 ,3)),1,2)

fontLayout.addWidget(cb_linenumber := ttk.TTkCheckbox(text=" LineNumber", checked=True),0,4,1,3)
fontLayout.addWidget(sb_linenumber := ttk.TTkSpinBox(value=1, maxWidth=5, maximum=10000, minimum=-10000, enabled=True),0,7,1,1)

# Char style buttons
fontLayout.addWidget(btn_bold := ttk.TTkButton(border=True, maxSize=(5,3), checkable=True, text=ttk.TTkString( 'a' , ttk.TTkColor.BOLD) ),1,4)
Expand Down Expand Up @@ -209,7 +210,9 @@ def _setStyle():
cb_fg.clicked.connect(lambda _: _setStyle())
cb_bg.clicked.connect(lambda _: _setStyle())

cb_linenumber.stateChanged.connect(lambda x: te.setLineNumber(x==ttk.TTkK.Checked))
cb_linenumber.toggled.connect(te.setLineNumber)
cb_linenumber.toggled.connect(sb_linenumber.setEnabled)
sb_linenumber.valueChanged.connect(te.setLineNumberStarting)

btn_fgColor.colorSelected.connect(lambda _: _setStyle())
btn_bgColor.colorSelected.connect(lambda _: _setStyle())
Expand Down
2 changes: 1 addition & 1 deletion tools/check.import.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ __check(){
-e "string.py:import unicodedata" \
-e "progressbar.py:import math" \
-e "uiloader.py:import json" \
-e "uiproperties.py:from .properties import *" \
-e "uiproperties.py:from .properties.* import" \
-e "util.py:import zlib, pickle, base64" \
-e "propertyanimation.py:from inspect import getfullargspec" \
-e "propertyanimation.py:from types import LambdaType" \
Expand Down

0 comments on commit 9d9ae86

Please sign in to comment.