From 96f7c4952ebebfe92e9358e27295cfb6ec7bf2fa Mon Sep 17 00:00:00 2001 From: Eugenio Parodi Date: Fri, 7 May 2021 22:14:51 +0100 Subject: [PATCH] Reworked color picker, Added pos/size features to the layout --- Makefile | 26 ++-- TermTk/TTkGui/theme.py | 6 +- TermTk/TTkLayouts/layout.py | 30 +++-- TermTk/TTkWidgets/TTkPickers/colorpicker.py | 119 +++++++++++------- .../TTkWidgets/TTkPickers/dateTimePicker.py | 24 ++++ TermTk/TTkWidgets/listwidget.py | 2 +- demo/showcase/colorpicker.py | 17 ++- docs/MDNotes/TODO.md | 1 + 8 files changed, 151 insertions(+), 74 deletions(-) create mode 100644 TermTk/TTkWidgets/TTkPickers/dateTimePicker.py diff --git a/Makefile b/Makefile index 22adda24..6c04f762 100644 --- a/Makefile +++ b/Makefile @@ -21,24 +21,24 @@ doc: .venv make -C docs/ html ; runGittk: .venv - . .venv/bin/activate + . .venv/bin/activate ; \ demo/gittk.py -f runDemo: .venv - . .venv/bin/activate + . .venv/bin/activate ; \ demo/demo.py -f build: .venv - . .venv/bin/activate - rm -rf dist - tools/prepareBuild.sh release + . .venv/bin/activate ; \ + rm -rf dist ; \ + tools/prepareBuild.sh release ; \ python3 -m build buildTest: .venv - . .venv/bin/activate - rm -rf dist - tools/prepareBuild.sh test - python3 -m build + . .venv/bin/activate ; \ + rm -rf dist ; \ + tools/prepareBuild.sh test ; \ + python3 -m build ; \ deployDoc: git checkout gh-pages @@ -50,14 +50,14 @@ deployDoc: git checkout main deployTest: .venv - . .venv/bin/activate + . .venv/bin/activate ; \ python3 -m twine upload --repository testpypi dist/* --verbose deploy: .venv - . .venv/bin/activate + . .venv/bin/activate ; \ python3 -m twine upload dist/* test: .venv - . .venv/bin/activate - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude .venv,build,tmp + . .venv/bin/activate ; \ + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude .venv,build,tmp ; \ pytest demo/demo.py diff --git a/TermTk/TTkGui/theme.py b/TermTk/TTkGui/theme.py index bbe04628..fe778604 100644 --- a/TermTk/TTkGui/theme.py +++ b/TermTk/TTkGui/theme.py @@ -75,7 +75,11 @@ class TTkTheme(): '└','─','╨','┘'), (), # TODO: Grid 4 (), # TODO: Grid 5 - (), # TODO: Grid 6 + ( # Grid 6 + '╓','─','┬','┐', + '║',' ','│','│', + '╟','─','┼','┤', + '╚','═','╧','╛'), (), # TODO: Grid 7 (), # TODO: Grid 8 ( # Grid 9 ╒═╤╕ diff --git a/TermTk/TTkLayouts/layout.py b/TermTk/TTkLayouts/layout.py index d7b64b6d..782b7ee6 100644 --- a/TermTk/TTkLayouts/layout.py +++ b/TermTk/TTkLayouts/layout.py @@ -43,6 +43,7 @@ class TTkLayoutItem: ''' __slots__ = ( '_x', '_y', '_z', '_w', '_h', + '_maxw', '_maxh', '_minw', '_minh', '_row','_col', '_rowspan', '_colspan', '_sMax', '_sMaxVal', @@ -50,7 +51,12 @@ class TTkLayoutItem: '_alignment', '_layoutItemType') def __init__(self, *args, **kwargs): - self._x, self._y = 0, 0 + self._x = kwargs.get('x', 0 ) + self._y = kwargs.get('y', 0 ) + self._x, self._y = kwargs.get('pos', (self._x, self._y)) + self._w = kwargs.get('width' , 0 ) + self._h = kwargs.get('height', 0 ) + self._w, self._h = kwargs.get('size', (self._w, self._h)) self._z = kwargs.get('z',0) self._row = kwargs.get('row', 0) self._col = kwargs.get('col', 0) @@ -58,21 +64,27 @@ class TTkLayoutItem: self._colspan = kwargs.get('colspan', 1) self._layoutItemType = kwargs.get('layoutItemType', TTkK.NONE) self._alignment = kwargs.get('alignment', TTkK.NONE) - self._w, self._h = 0, 0 self._sMax, self._sMin = False, False self._sMaxVal, self._sMinVal = 0, 0 + self._maxw = kwargs.get('maxWidth', 0x10000) + self._maxh = kwargs.get('maxHeight', 0x10000) + self._maxw, self._maxh = kwargs.get('maxSize', (self._maxw, self._maxh)) + self._minw = kwargs.get('minWidth', 0x00000) + self._minh = kwargs.get('minHeight', 0x00000) + self._minw, self._minh = kwargs.get('minSize', (self._minw, self._minh)) + def minimumSize(self): return self.minimumWidth(), self.minimumHeight() - def minDimension(self,o)-> int: return 0 - def minimumHeight(self) -> int: return 0 - def minimumWidth(self) -> int: return 0 + def minDimension(self,o)-> int: return self._minh if o == TTkK.HORIZONTAL else self._minw + def minimumHeight(self) -> int: return self._minh + def minimumWidth(self) -> int: return self._minw def maximumSize(self): return self.maximumWidth(), self.maximumHeight() - def maxDimension(self,o)-> int: return 0x1000 - def maximumHeight(self) -> int: return 0x10000 - def maximumWidth(self) -> int: return 0x10000 + def maxDimension(self,o)-> int: return self._maxh if o == TTkK.HORIZONTAL else self._maxw + def maximumHeight(self) -> int: return self._maxh + def maximumWidth(self) -> int: return self._maxw @staticmethod def _calcSpanValue(value, pos, curpos, span): @@ -132,7 +144,7 @@ class TTkLayout(TTkLayoutItem): ''' __slots__ = ('_items', '_zSortedItems', '_parent') def __init__(self, *args, **kwargs): - TTkLayoutItem.__init__(self, args, kwargs) + TTkLayoutItem.__init__(self, *args, **kwargs) self._items = [] self._zSortedItems = [] self._parent = None diff --git a/TermTk/TTkWidgets/TTkPickers/colorpicker.py b/TermTk/TTkWidgets/TTkPickers/colorpicker.py index ab4ba54f..8f5f8f89 100644 --- a/TermTk/TTkWidgets/TTkPickers/colorpicker.py +++ b/TermTk/TTkWidgets/TTkPickers/colorpicker.py @@ -37,6 +37,7 @@ from TermTk.TTkWidgets.frame import TTkFrame from TermTk.TTkWidgets.label import TTkLabel from TermTk.TTkWidgets.lineedit import TTkLineEdit from TermTk.TTkWidgets.spinbox import TTkSpinBox +from TermTk.TTkLayouts.layout import TTkLayout from TermTk.TTkLayouts.gridlayout import TTkGridLayout from TermTk.TTkTemplates.color import TColor @@ -245,11 +246,16 @@ class TTkColorDialogPicker(TTkWindow,TColor): self.setLayout(TTkGridLayout()) colorLayout = TTkGridLayout() # Right - leftLayout = TTkGridLayout() # Left + # leftLayout = TTkFrame(border=False, transparent=True, minSize=(25,20), maxWidth=25) # Left + leftLayout = TTkLayout(minSize=(25,20), maxWidth=25) # Left - paletteFrame = TTkFrame(border=True, layout=TTkGridLayout(), title="Basic colors") - customFrame = TTkFrame(border=True, layout=TTkGridLayout(), title="Custom colors") - controlFrame = TTkFrame(border=True, minSize=(26,7) ,title="Conrols") + #paletteLayout = TTkFrame(border=True, layout=TTkGridLayout(), title="Basic colors") + #customLayout = TTkFrame(border=True, layout=TTkGridLayout(), title="Custom colors") + #controlLayout = TTkFrame(border=True, minSize=(26,7) , title="Conrols") + + paletteLayout = TTkGridLayout(pos=(0,0), size=(24,9)) + customLayout = TTkGridLayout(pos=(0,10), size=(24,4)) + controlLayout = TTkLayout( pos=(0,15), size=(24,30)) # Color Layout Widgets self._colorCanvas = _TTkColorCanvas() @@ -259,19 +265,21 @@ class TTkColorDialogPicker(TTkWindow,TColor): self._hueCanvas.colorPicked.connect(self._colorCanvas.setHue) # Control - sc = _TTkShowColor(pos=(1,2), size=(5,4), parent=controlFrame, color=TTkColor.bg('#ffffff')) - TTkLabel(pos=(2,1), parent=controlFrame,text="rgb:") - TTkLabel(pos=(7,2), parent=controlFrame,text="HTML:") - leR = TTkSpinBox(pos=(7,1), size=(5,1), parent=controlFrame, value=255, minimum=0, maximum=255) - leG = TTkSpinBox(pos=(13,1), size=(5,1), parent=controlFrame, value=255, minimum=0, maximum=255) - leB = TTkSpinBox(pos=(19,1), size=(5,1), parent=controlFrame, value=255, minimum=0, maximum=255) + controlLayout.addWidget( sc := _TTkShowColor(pos=(1,2), size=(5,4), color=TTkColor.bg('#ffffff')) ) + controlLayout.addWidget( TTkLabel(pos=(2,1), text="rgb:") ) + controlLayout.addWidget( TTkLabel(pos=(7,2), text="HTML:") ) + controlLayout.addWidget( leR := TTkSpinBox(pos=(7,1), size=(5,1), value=255, minimum=0, maximum=255) ) + controlLayout.addWidget( leG := TTkSpinBox(pos=(13,1), size=(5,1), value=255, minimum=0, maximum=255) ) + controlLayout.addWidget( leB := TTkSpinBox(pos=(19,1), size=(5,1), value=255, minimum=0, maximum=255) ) - leHTML = TTkLineEdit(pos=(13,2), size=(8,1), parent=controlFrame, text="#FFFFFF") + controlLayout.addWidget( leHTML := TTkLineEdit(pos=(13,2), size=(8,1), text="#FFFFFF") ) - okButton = TTkButton(pos=(7,3), size=(6,3), text="OK", parent=controlFrame, border=True) - cancelButton = TTkButton(pos=(14,3), size=(10,3), text="CANCEL", parent=controlFrame, border=True) + controlLayout.addWidget( okButton := TTkButton(pos=(7,3), size=(6,3), text="OK", border=True) ) + controlLayout.addWidget( cancelButton := TTkButton(pos=(14,3), size=(10,3), text="CANCEL", border=True) ) - TTkLabel(pos=(3,20), parent=controlFrame,text="Seriously?") + controlLayout.addWidget( TTkLabel(pos=(3,20), text="Seriously?") ) + # TODO: Get Rid of groupMove + #controlLayout.groupMoveTo(1, 15) @pyTTkSlot() def _okPressed(): @@ -323,39 +331,34 @@ class TTkColorDialogPicker(TTkWindow,TColor): _controlSetColor(self.color) # Palette Layout Widgets - basicColorsLayout = TTkGridLayout() - basicColorsLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#ff0000'), border=True, maxSize=(8,3)),0,0) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#ff0000'), border=True, maxSize=(8,3)),0,0,1,2) b.colorClicked.connect(_controlSetColor) - basicColorsLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#ffff00'), border=True, maxSize=(8,3)),0,1) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#ffff00'), border=True, maxSize=(8,3)),0,2,1,2) b.colorClicked.connect(_controlSetColor) - basicColorsLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#00ff00'), border=True, maxSize=(8,3)),0,2) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#00ff00'), border=True, maxSize=(8,3)),0,4,1,2) b.colorClicked.connect(_controlSetColor) - basicColorsLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#00ffff'), border=True, maxSize=(8,3)),1,0) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#00ffff'), border=True, maxSize=(8,3)),1,0,1,2) b.colorClicked.connect(_controlSetColor) - basicColorsLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#0000ff'), border=True, maxSize=(8,3)),1,1) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#0000ff'), border=True, maxSize=(8,3)),1,2,1,2) b.colorClicked.connect(_controlSetColor) - basicColorsLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#ff00ff'), border=True, maxSize=(8,3)),1,2) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#ff00ff'), border=True, maxSize=(8,3)),1,4,1,2) b.colorClicked.connect(_controlSetColor) - shadesOfGreyLayout = TTkGridLayout() - shadesOfGreyLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#ffffff'), border=True, maxSize=(4,3)),2,0) + # Shades of Grey + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#ffffff'), border=True, maxSize=(4,3)),2,0) b.colorClicked.connect(_controlSetColor) - shadesOfGreyLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#dddddd'), border=True, maxSize=(4,3)),2,1) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#dddddd'), border=True, maxSize=(4,3)),2,1) b.colorClicked.connect(_controlSetColor) - shadesOfGreyLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#aaaaaa'), border=True, maxSize=(4,3)),2,2) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#aaaaaa'), border=True, maxSize=(4,3)),2,2) b.colorClicked.connect(_controlSetColor) - shadesOfGreyLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#666666'), border=True, maxSize=(4,3)),2,3) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#666666'), border=True, maxSize=(4,3)),2,3) b.colorClicked.connect(_controlSetColor) - shadesOfGreyLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#333333'), border=True, maxSize=(4,3)),2,4) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#333333'), border=True, maxSize=(4,3)),2,4) b.colorClicked.connect(_controlSetColor) - shadesOfGreyLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#000000'), border=True, maxSize=(4,3)),2,5) + paletteLayout.addWidget(b:=_TTkColorButton(color=TTkColor.bg('#000000'), border=True, maxSize=(4,3)),2,5) b.colorClicked.connect(_controlSetColor) - paletteFrame.layout().addItem(basicColorsLayout,0,0) - paletteFrame.layout().addItem(shadesOfGreyLayout,1,0) - # Custom frame - customButtonsLayout = TTkGridLayout() if TTkColorDialogPicker.customButtons is None: TTkColorDialogPicker.customButtons = ( _TTkColorButton(color=TTkColor.bg('#ffffff'), custom=True, border=True, maxSize=(3,3)) , @@ -368,25 +371,25 @@ class TTkColorDialogPicker(TTkWindow,TColor): _TTkColorButton(color=TTkColor.bg('#ffffff'), custom=True, border=True, maxSize=(3,3)) ) - customButtonsLayout.addWidget(b:=TTkColorDialogPicker.customButtons[0],0,0) + customLayout.addWidget(b:=TTkColorDialogPicker.customButtons[0],0,0) b.colorClicked.connect(_controlSetColor) - customButtonsLayout.addWidget(b:=TTkColorDialogPicker.customButtons[1],0,1) + customLayout.addWidget(b:=TTkColorDialogPicker.customButtons[1],0,1) b.colorClicked.connect(_controlSetColor) - customButtonsLayout.addWidget(b:=TTkColorDialogPicker.customButtons[2],0,2) + customLayout.addWidget(b:=TTkColorDialogPicker.customButtons[2],0,2) b.colorClicked.connect(_controlSetColor) - customButtonsLayout.addWidget(b:=TTkColorDialogPicker.customButtons[3],0,3) + customLayout.addWidget(b:=TTkColorDialogPicker.customButtons[3],0,3) b.colorClicked.connect(_controlSetColor) - customButtonsLayout.addWidget(b:=TTkColorDialogPicker.customButtons[4],0,4) + customLayout.addWidget(b:=TTkColorDialogPicker.customButtons[4],0,4) b.colorClicked.connect(_controlSetColor) - customButtonsLayout.addWidget(b:=TTkColorDialogPicker.customButtons[5],0,5) + customLayout.addWidget(b:=TTkColorDialogPicker.customButtons[5],0,5) b.colorClicked.connect(_controlSetColor) - customButtonsLayout.addWidget(b:=TTkColorDialogPicker.customButtons[6],0,6) + customLayout.addWidget(b:=TTkColorDialogPicker.customButtons[6],0,6) b.colorClicked.connect(_controlSetColor) - customButtonsLayout.addWidget(b:=TTkColorDialogPicker.customButtons[7],0,7) + customLayout.addWidget(b:=TTkColorDialogPicker.customButtons[7],0,7) b.colorClicked.connect(_controlSetColor) - customFrame.layout().addItem(customButtonsLayout,0,0) - customFrame.layout().addWidget(b:=TTkButton(border=False, text='Add to Custom Colors'),1,0) + customLayout.addWidget(b:=TTkButton(border=False, text='Add to Custom Colors'),1,0,1,8) + @pyTTkSlot() def _addCustomPressed(): btn = _TTkColorButton.lastClicked @@ -401,11 +404,33 @@ class TTkColorDialogPicker(TTkWindow,TColor): self._colorCanvas.colorPicked.connect(_controlSetRGBColor) self.layout().addItem(leftLayout ,0,0) - self.layout().addItem(colorLayout,0,1) + self.layout().addItem(colorLayout ,0,1) - leftLayout.addWidget(paletteFrame,0,0) - leftLayout.addWidget(customFrame ,1,0) - leftLayout.addWidget(controlFrame,2,0) + leftLayout.addItem(paletteLayout) + leftLayout.addItem(customLayout) + leftLayout.addItem(controlLayout) + # TODO: Get Rid of groupMove + leftLayout.groupMoveTo(1,3) + controlLayout.groupMoveTo(2, 18) + + + def paintEvent(self): + TTkWindow.paintEvent(self) + if self.hasFocus(): + color = TTkCfg.theme.windowBorderColorFocus + else: + color = TTkCfg.theme.windowBorderColor + self._canvas.drawGrid( + pos=(0,2),size=(26,self._height-2), + hlines=(10,15), vlines=(), + color=color, grid=6) + gg = TTkCfg.theme.grid[6] + self._canvas.drawChar(pos=(0,2), char=gg[0x08], color=color) + self._canvas.drawChar(pos=(25,2), char=gg[0x02], color=color) + self._canvas.drawChar(pos=(25,self._height-1), char=gg[0x0E], color=color) + self._canvas.drawBoxTitle(pos=(0,2) , size=(26,0), text=" Basic colors ", align=TTkK.CENTER_ALIGN, color=color, colorText=TTkCfg.theme.frameTitleColor) + self._canvas.drawBoxTitle(pos=(0,12), size=(26,0), text=" Custom colors ", align=TTkK.CENTER_ALIGN, color=color, colorText=TTkCfg.theme.frameTitleColor) + self._canvas.drawBoxTitle(pos=(0,17), size=(26,0), text=" Conrols ", align=TTkK.CENTER_ALIGN, color=color, colorText=TTkCfg.theme.frameTitleColor) class TTkColorButtonPicker(_TTkColorButton): __slots__ = ('_type') @@ -426,7 +451,7 @@ class TTkColorButtonPicker(_TTkColorButton): @pyTTkSlot() def _colorClicked(self): - colorPicker = TTkColorDialogPicker(pos = (3,3), size=(75,28), color=self._textColor, title="Test Color Picker", border=True) + colorPicker = TTkColorDialogPicker(pos = (3,3), size=(75,24), color=self._textColor, title="Test Color Picker", border=True) colorPicker.colorSelected.connect(self.colorSelected) TTkHelper.overlay(self, colorPicker, -1,-1) diff --git a/TermTk/TTkWidgets/TTkPickers/dateTimePicker.py b/TermTk/TTkWidgets/TTkPickers/dateTimePicker.py new file mode 100644 index 00000000..f6922bfc --- /dev/null +++ b/TermTk/TTkWidgets/TTkPickers/dateTimePicker.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +# MIT License +# +# Copyright (c) 2021 Eugenio Parodi +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + diff --git a/TermTk/TTkWidgets/listwidget.py b/TermTk/TTkWidgets/listwidget.py index ca471cce..4b2f2a38 100644 --- a/TermTk/TTkWidgets/listwidget.py +++ b/TermTk/TTkWidgets/listwidget.py @@ -160,7 +160,7 @@ class TTkListWidget(TTkAbstractScrollView): def viewDisplayedSize(self) -> (int, int): return self.size() - def addItem(self, item, ): + def addItem(self, item): if isinstance(item, str): label = TTkAbstractListItem(text=item, width=max(len(item),self.width())) label.listItemClicked.connect(self._labelSelectedHandler) diff --git a/demo/showcase/colorpicker.py b/demo/showcase/colorpicker.py index 91b7e7ae..7e47ef0d 100755 --- a/demo/showcase/colorpicker.py +++ b/demo/showcase/colorpicker.py @@ -22,7 +22,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import sys, os +import sys, os, argparse sys.path.append(os.path.join(sys.path[0],'../..')) import TermTk as ttk @@ -51,10 +51,21 @@ def demoColorPicker(root=None): return frame def main(): + parser = argparse.ArgumentParser() + parser.add_argument('-f', help='Full Screen', action='store_true') + args = parser.parse_args() + ttk.TTkLog.use_default_file_logging() + root = ttk.TTk() - win1 = ttk.TTkWindow(parent=root,pos = (0,0), size=(120,50), title="Test Color Picker", border=True, layout=ttk.TTkGridLayout()) - demoColorPicker(win1) + if args.f: + root.setLayout(ttk.TTkGridLayout()) + winColor1 = root + else: + winColor1 = ttk.TTkWindow(parent=root,pos = (0,0), size=(120,50), title="Test Color Picker", border=True, layout=ttk.TTkGridLayout()) + + demoColorPicker(winColor1) + root.mainloop() if __name__ == "__main__": diff --git a/docs/MDNotes/TODO.md b/docs/MDNotes/TODO.md index 78f6977d..7fba9f86 100644 --- a/docs/MDNotes/TODO.md +++ b/docs/MDNotes/TODO.md @@ -60,6 +60,7 @@ - [x] Add addLayout (adDItem) method - Nested layouts - [x] Add Grid Layout - [x] Add ColSpan / RowSpan +- [ ] Get rid of groupMoveTo ### AbstractScrollArea - [x] Implement something that mimic the QAbstactScrollArea