Esempio n. 1
0
 def __init__(self, *args, **kwargs):
     self._labels = []
     self._labelsPos = []
     self._currentIndex = -1
     self._lastIndex = -1
     self._offset = -1
     self._tabMovable = False
     self._tabClosable = False
     self._leftScroller = False
     self._rightScroller = False
     self._sideBorder = TTkK.LEFT | TTkK.RIGHT
     self._tabColor = TTkCfg.theme.tabColor
     self._tabBorderColor = TTkCfg.theme.tabBorderColor
     self._tabSelectColor = TTkCfg.theme.tabSelectColor
     self._tabOffsetColor = TTkCfg.theme.tabOffsetColor
     self._tabColorFocus = TTkCfg.theme.tabColorFocus
     self._tabBorderColorFocus = TTkCfg.theme.tabBorderColorFocus
     self._tabSelectColorFocus = TTkCfg.theme.tabSelectColorFocus
     self._tabOffsetColorFocus = TTkCfg.theme.tabOffsetColorFocus
     # Signals
     self.currentChanged = pyTTkSignal(int)
     self.tabBarClicked = pyTTkSignal(int)
     TTkWidget.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name', '_TTkTabs')
     self.setFocusPolicy(TTkK.ClickFocus + TTkK.TabFocus)
Esempio n. 2
0
    def __init__(self, *args, **kwargs):
        TTkWidget.__init__(self, *args, **kwargs)
        self._name = kwargs.get('name', 'TTkScrollBar')
        # Define Signals
        self.valueChanged = pyTTkSignal(int)  #  Value
        self.rangeChanged = pyTTkSignal(int, int)  # Min, Max
        self.sliderMoved = pyTTkSignal(int)  # Value

        self._orientation = kwargs.get('orientation', TTkK.VERTICAL)
        if self._orientation == TTkK.VERTICAL:
            self.setMaximumWidth(1)
            self.setMinimumSize(1, 3)
        else:
            self.setMaximumHeight(1)
            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._value = kwargs.get('value', 0)
        self._color = kwargs.get('color', TTkColor.RST)
        self._focusColor = kwargs.get('focusColor', TTkColor.fg('#cccc00'))
        self._screenPgDown = (0, 0)
        self._screenPgUp = (0, 0)
        self._screenScroller = (0, 0)
        self._draggable = False
        self._mouseDelta = 0
        self.setFocusPolicy(TTkK.ClickFocus)
Esempio n. 3
0
    def __init__(self, *args, **kwargs):
        # Signals
        self.viewMovedTo = pyTTkSignal(int, int) # x, y
        self.viewSizeChanged = pyTTkSignal(int, int) # w, h
        self.viewChanged = pyTTkSignal()
        super().__init__(self, *args, **kwargs)
        self._name = kwargs.get('name' , 'TTkAbstractScrollView')

        self._viewOffsetX = 0
        self._viewOffsetY = 0
Esempio n. 4
0
 def __init__(self, *args, **kwargs):
     TTkWidget.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name', 'TTkCheckbox')
     # Define Signals
     self.stateChanged = pyTTkSignal(int)
     self.clicked = pyTTkSignal(bool)
     self._checked = kwargs.get('checked', False)
     self._text = kwargs.get('text', '')
     self.setMinimumSize(3 + len(self._text), 1)
     self.setMaximumHeight(1)
     self.setFocusPolicy(TTkK.ClickFocus + TTkK.TabFocus)
Esempio n. 5
0
    def __init__(self, *args, **kwargs):
        # Signals
        self.pathPicked = pyTTkSignal(str)
        self.filePicked = pyTTkSignal(str)
        self.filesPicked = pyTTkSignal(list)
        self.folderPicked = pyTTkSignal(str)

        TTkWindow.__init__(self, *args, **kwargs)
        self._name = kwargs.get('name', 'TTkFileDialogPicker')

        self._recentPathId = -1
        self._recentPath = []

        self._path = kwargs.get('path', '.')
        self._filter = '*'
        self._filters = kwargs.get('filter', 'All Files (*)')
        self._caption = kwargs.get('caption', 'File Dialog')
        self._fileMode = kwargs.get('fileMode', TTkK.FileMode.AnyFile)

        self.setTitle(self._caption)
        self.setLayout(TTkGridLayout())

        # Top (absPath)
        topLayout = TTkGridLayout()
        self.layout().addItem(topLayout, 0, 0)

        self._lookPath = TTkComboBox(textAlign=TTkK.LEFT_ALIGN)
        self._btnPrev = TTkButton(text="<", maxWidth=3, enabled=False)
        self._btnNext = TTkButton(text=">", maxWidth=3, enabled=False)
        self._btnUp = TTkButton(text="^", maxWidth=3, enabled=True)
        self._btnPrev.clicked.connect(self._openPrev)
        self._btnNext.clicked.connect(self._openNext)
        self._btnUp.clicked.connect(self._openUp)

        topLayout.addWidget(TTkLabel(text="Look in:", maxWidth=14), 0, 0)
        topLayout.addWidget(self._lookPath, 0, 1)
        topLayout.addWidget(self._btnPrev, 0, 2)
        topLayout.addWidget(self._btnNext, 0, 3)
        topLayout.addWidget(self._btnUp, 0, 4)

        # Bottom (File Name, Controls)
        self._fileName = TTkLineEdit()
        self._fileType = TTkComboBox(textAlign=TTkK.LEFT_ALIGN)
        self._btnOpen = TTkButton(text="Open", maxWidth=8, enabled=False)
        self._btnCancel = TTkButton(text="Cancel", maxWidth=8)

        for f in self._filters.split(';;'):
            if m := re.match(".*\(.*\)", f):
                self._fileType.addItem(f)
Esempio n. 6
0
    def __init__(self, filename, window, numWindows):
        # Signals
        self.indexUpdated = pyTTkSignal(float)
        self.indexed = pyTTkSignal()

        self._window = window
        self._numW = numWindows
        self._filename = filename
        self._indexes = [0]
        self._indexesMutex = threading.Lock()
        self._width = 0
        self._buffer = [None] * self._numW
        self._pages = [None]
        self._fd = open(self._filename, 'r')
        threading.Thread(target=self.createIndex).start()
Esempio n. 7
0
    def __init__(self, *args, **kwargs):

        TTkWidget.__init__(self, *args, **kwargs)
        self._name = kwargs.get('name', 'TTkButton')
        # Define Signals
        self.clicked = pyTTkSignal()

        self._text = kwargs.get('text', "")
        self._border = kwargs.get('border', False)
        self._borderColor = kwargs.get('borderColor',
                                       TTkCfg.theme.buttonBorderColor)
        self._textColor = kwargs.get('color', TTkCfg.theme.buttonTextColor)
        self._borderColorClicked = TTkCfg.theme.buttonBorderColorClicked
        self._textColorClicked = TTkCfg.theme.buttonTextColorClicked
        self._borderColorFocus = TTkCfg.theme.buttonBorderColorFocus
        self._textColorFocus = TTkCfg.theme.buttonTextColorFocus
        self._borderColorDisabled = TTkCfg.theme.buttonBorderColorDisabled
        self._textColorDisabled = TTkCfg.theme.buttonTextColorDisabled

        self._pressed = False
        self._keyPressed = False
        if self._border:
            self.setMinimumSize(2 + len(self._text), 3)
        else:
            self.setMinimumSize(len(self._text) + 2, 1)
            self.setMaximumHeight(1)
        self.setFocusPolicy(TTkK.ClickFocus + TTkK.TabFocus)
Esempio n. 8
0
 def __init__(self, *args, **kwargs):
     # Default Class Specific Values
     self._selectionMode = kwargs.get("selectionMode", TTkK.SingleSelection)
     self._selectedItems = []
     self._items = []
     self._highlighted = None
     self._color = TTkCfg.theme.listColor
     self._selectedColor = TTkCfg.theme.listColorSelected
     # Signals
     self.itemClicked = pyTTkSignal(TTkWidget)
     self.textClicked = pyTTkSignal(str)
     # Init Super
     TTkAbstractScrollView.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name', 'TTkListWidget')
     self.viewChanged.connect(self._viewChangedHandler)
     self.setFocusPolicy(TTkK.ClickFocus + TTkK.TabFocus)
Esempio n. 9
0
 def __init__(self, *args, **kwargs):
     # signals
     self.colorPicked = pyTTkSignal(int)
     self._selected = (-1, -1)
     TTkWidget.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name', 'TTkColorPicker')
     self._hue = 0xff0000
     self.setFocusPolicy(TTkK.ClickFocus)
Esempio n. 10
0
 def __init__(self, *args, **kwargs):
     self.colorClicked = pyTTkSignal(TTkColor)
     TTkButton.__init__(self, *args, **kwargs)
     TColor.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name', '_TTkColorButton')
     self._custom = kwargs.get('custom', False)
     self.clicked.connect(self._clicked)
     self._textColorFocus = self._textColor
Esempio n. 11
0
 def __init__(self, *args, **kwargs):
     # Signals
     self.refreshData = pyTTkSignal(TTkFancyTreeWidgetItem)
     self._data = args[0]
     self._children = []
     self._childIndicatorPolicy = kwargs.get(
         'childIndicatorPolicy', TTkK.DontShowIndicatorWhenChildless)
     self._expand = False
     self._parent = kwargs.get("parent", None)
Esempio n. 12
0
 def __init__(self, *args, **kwargs):
     # Signals
     self.colorSelected = pyTTkSignal(TTkColor)
     _TTkColorButton.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name', 'TTkColorButtonPicker')
     self._custom = False
     self.clicked.connect(self._colorClicked)
     self._type = self._textColor.colorType()
     hexColor = self._textColor.getHex(self._type)
     self.setColor(TTkColor.bg(hexColor))
Esempio n. 13
0
 def __init__(self, *args, **kwargs):
     TData.__init__(self, *args, **kwargs)
     TTkLabel.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name', 'TTkAbstractListItem')
     # Define Signals
     self.listItemClicked = pyTTkSignal(TTkAbstractListItem)
     self._selected = False
     self._pressed = False
     self._highlighted = False
     self.setFocusPolicy(TTkK.ClickFocus)
Esempio n. 14
0
    def __init__(self):
        # Define Signals
        self.timeout = pyTTkSignal()

        self._timerEvent = threading.Event()
        self._quit = threading.Event()
        self._stopTime = 0
        self._delay = 0
        self._delayLock = threading.Lock()
        threading.Thread.__init__(self)
        TTkTimer._timers.append(self)
        threading.Thread.start(self)
Esempio n. 15
0
    def __init__(self, *args, **kwargs):
        #Signals
        self.focusChanged = pyTTkSignal(bool)

        self._name = kwargs.get('name', 'TTkWidget')
        self._parent = kwargs.get('parent', None)

        self._pendingMouseRelease = False

        self._x = kwargs.get('x', 0)
        self._y = kwargs.get('y', 0)
        self._x, self._y = kwargs.get('pos', (self._x, self._y))
        self._width = kwargs.get('width', 0)
        self._height = kwargs.get('height', 0)
        self._width, self._height = kwargs.get('size',
                                               (self._width, self._height))

        padding = kwargs.get('padding', 0)
        self._padt = kwargs.get('paddingTop', padding)
        self._padb = kwargs.get('paddingBottom', padding)
        self._padl = kwargs.get('paddingLeft', padding)
        self._padr = kwargs.get('paddingRight', padding)

        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))

        self._visible = kwargs.get('visible', True)
        self._enabled = kwargs.get('enabled', True)

        self._focus = False
        self._focus_policy = TTkK.NoFocus

        self._widgetItem = TTkWidgetItem(widget=self)

        self._layout = TTkLayout()  # root layout
        self._layout.setParent(self)
        self._layout.addItem(kwargs.get('layout', TTkLayout()))  # main layout

        self._canvas = TTkCanvas(widget=self,
                                 width=self._width,
                                 height=self._height)

        if self._parent is not None:
            self._parent.addWidget(self)
            self._parent.update(repaint=True, updateLayout=True)

        self.update(repaint=True, updateLayout=True)
Esempio n. 16
0
    def __init__(self, *args, **kwargs):
        # signals
        self.colorPicked = pyTTkSignal(int)

        TTkWidget.__init__(self, *args, **kwargs)
        self._name = kwargs.get('name', '_TTkHueCanvas')

        self.setMaximumHeight(1)
        self.setMinimumSize(6, 1)
        self._hueList = []
        self._selected = -1
        self.setFocusPolicy(TTkK.ClickFocus)
Esempio n. 17
0
    def __init__(self, *args, **kwargs):
        # Signals
        self.itemActivated = pyTTkSignal(TTkTreeWidgetItem, int)
        self.itemChanged = pyTTkSignal(TTkTreeWidgetItem, int)
        self.itemClicked = pyTTkSignal(TTkTreeWidgetItem, int)
        self.itemDoubleClicked = pyTTkSignal(TTkTreeWidgetItem, int)
        self.itemExpanded = pyTTkSignal(TTkTreeWidgetItem)
        self.itemCollapsed = pyTTkSignal(TTkTreeWidgetItem)

        super().__init__(self, *args, **kwargs)
        self._name = kwargs.get('name', 'TTkTreeView')
        self._selected = None
        self._selectedId = None
        self._separatorSelected = None
        self._header = kwargs.get('header', [])
        self._columnsPos = []
        self._cache = []
        self._sortColumn = -1
        self._sortOrder = TTkK.AscendingOrder
        self._headerColor = kwargs.get('headerColor',
                                       TTkCfg.theme.treeHeaderColor)
        self._selectedColor = kwargs.get('selectedColor',
                                         TTkCfg.theme.treeSelectedColor)
        self._lineColor = kwargs.get('lineColor', TTkCfg.theme.treeLineColor)
        self.setMinimumHeight(1)
        self.setFocusPolicy(TTkK.ClickFocus)
        self._rootItem = None
        self.clear()
Esempio n. 18
0
 def __init__(self, *args, **kwargs):
     # Define Signals
     self.clicked = pyTTkSignal()
     TTkWidget.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name', 'TTkRadioButton')
     # self.cehcked = pyTTkSignal()
     self._checked = kwargs.get('checked', False)
     self._text = kwargs.get('text', '')
     self.setMinimumSize(3 + len(self._text), 1)
     self.setMaximumHeight(1)
     self.setFocusPolicy(TTkK.ClickFocus + TTkK.TabFocus)
     if self._name not in TTkRadioButton._radioLists:
         TTkRadioButton._radioLists[self._name] = [self]
     else:
         TTkRadioButton._radioLists[self._name].append(self)
Esempio n. 19
0
 def __init__(self, *args, **kwargs):
     # Signals
     self.valueChanged=pyTTkSignal(int)
     TTkWidget.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name' , 'TTkSpinBox' )
     self._value = kwargs.get("value",0)
     self._maximum = kwargs.get("maximum",99)
     self._minimum = kwargs.get("minimum",0)
     self.setLayout(TTkGridLayout())
     self.setPadding(0,0,0,2)
     self.setMinimumSize(4,1)
     self._mouseDelta = 0
     self._valueDelta = 0
     self._draggable = False
     self._lineEdit = TTkLineEdit(parent=self, text=str(self._value), inputType=TTkK.Input_Number)
     self._lineEdit.keyEvent = self.keyEvent
     self.setFocusPolicy(TTkK.ClickFocus)
     self._lineEdit.textEdited.connect(self._textEdited)
Esempio n. 20
0
 def __init__(self, *args, **kwargs):
     TTkAbstractListItem.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name', 'TTkMenuButton')
     # signals
     self.menuButtonClicked = pyTTkSignal(TTkButton)
     self._color = kwargs.get('color', TTkCfg.theme.menuButtonColor)
     self._border = kwargs.get('border', TTkCfg.theme.menuButtonColor)
     self._borderColor = kwargs.get('borderColor',
                                    TTkCfg.theme.menuButtonBorderColor)
     self._menuOffset = kwargs.get('menuOffset', (-1, 0))
     self._shortcut = []
     self._menu = []
     while self.text.find('&') != -1:
         index = self.text.find('&')
         shortcut = self.text[index + 1]
         TTkHelper.addShortcut(self, shortcut)
         self._shortcut.append(index)
         self.text = self.text[:index] + self.text[index + 1:]
     txtlen = len(self.text)
     self.resize(txtlen, 1)
     self.setMinimumSize(txtlen + 2, 1)
     self.setMaximumSize(txtlen + 2, 1)
     self.listItemClicked.connect(self.menuButtonEvent)
Esempio n. 21
0
    def __init__(self, *args, **kwargs):
        super().__init__(self, *args, **kwargs)
        #Signals
        self._clicked = pyTTkSignal(bool, _TTkDisplayedTreeItem,
                                    TTkFancyTreeWidgetItem)

        self._name = kwargs.get('name', '_TTkDisplayedTreeItem')
        self._depth = kwargs.get('depth', 0)
        self._text = kwargs.get('text', "")
        self._id = kwargs.get('id', 0)
        self._treeWidgetItem = kwargs.get('treeWidgetItem', None)
        self._isLeaf = self._treeWidgetItem.childIndicatorPolicy(
        ) == TTkK.DontShowIndicator
        self._isLeaf |= self._treeWidgetItem.childIndicatorPolicy(
        ) == TTkK.DontShowIndicatorWhenChildless and not self._treeWidgetItem.children(
        )
        if self._isLeaf:
            self._control = None
        else:
            self._control = _TTkDisplayedTreeItemControl(
                parent=self, checked=self._treeWidgetItem.expand())
            self._control.setGeometry(self._depth, 0, 1, 1)
            self._control.clicked.connect(self._controlClicked)
Esempio n. 22
0
 def __init__(self, *args, **kwargs):
     # Signals
     self.fileClicked         = pyTTkSignal(TTkFileTreeWidgetItem)
     self.folderClicked       = pyTTkSignal(TTkFileTreeWidgetItem)
     self.fileDoubleClicked   = pyTTkSignal(TTkFileTreeWidgetItem)
     self.folderDoubleClicked = pyTTkSignal(TTkFileTreeWidgetItem)
     self.fileActivated       = pyTTkSignal(TTkFileTreeWidgetItem)
     self.folderActivated     = pyTTkSignal(TTkFileTreeWidgetItem)
     TTkTreeWidget.__init__(self, *args, **kwargs)
     self._name = kwargs.get('name' , 'TTkFileTreeWidget' )
     self._path   = kwargs.get('path','.')
     self._filter = '*'
     self.setHeaderLabels(["Name", "Size", "Type", "Date Modified"])
     self.openPath(self._path)
     self.itemExpanded.connect(self._folderExpanded)
     self.itemCollapsed.connect(self._folderCollapsed)
     self.itemExpanded.connect(self._updateChildren)
     self.itemActivated.connect(self._activated)
Esempio n. 23
0
 def __init__(self, *args, **kwargs):
     self.dataChanged = pyTTkSignal()
Esempio n. 24
0
    def __init__(self, *args, **kwargs):
        # Signals
        self.colorSelected = pyTTkSignal(TTkColor)
        TTkWindow.__init__(self, *args, **kwargs)
        TColor.__init__(self, *args, **kwargs)
        self._name = kwargs.get('name', 'TTkColorPicker')
        self.setLayout(TTkGridLayout())

        colorLayout = TTkGridLayout()  # Right
        leftLayout = TTkLayout(minSize=(25, 20), maxWidth=25)  # Left

        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()
        self._hueCanvas = _TTkHueCanvas()
        colorLayout.addWidget(self._colorCanvas, 0, 0)
        colorLayout.addWidget(self._hueCanvas, 1, 0)
        self._hueCanvas.colorPicked.connect(self._colorCanvas.setHue)

        # Control
        controlLayout.addWidget(sc := _TTkShowColor(
            pos=(1, 1), size=(4, 4), color=TTkColor.bg('#ffffff')))
        controlLayout.addWidget(TTkLabel(pos=(1, 0), text="rgb:"))
        controlLayout.addWidget(TTkLabel(pos=(6, 1), text="HTML:"))
        controlLayout.addWidget(leR := TTkSpinBox(
            pos=(7, 0), size=(5, 1), value=255, minimum=0, maximum=255))
        controlLayout.addWidget(leG := TTkSpinBox(
            pos=(12, 0), size=(5, 1), value=255, minimum=0, maximum=255))
        controlLayout.addWidget(leB := TTkSpinBox(
            pos=(18, 0), size=(5, 1), value=255, minimum=0, maximum=255))

        controlLayout.addWidget(
            leHTML := TTkLineEdit(pos=(12, 1), size=(8, 1), text="#FFFFFF"))

        controlLayout.addWidget(okButton := TTkButton(
            pos=(6, 2), size=(6, 3), text="OK", border=True))
        controlLayout.addWidget(cancelButton := TTkButton(
            pos=(13, 2), size=(10, 3), text="CANCEL", border=True))

        controlLayout.addWidget(TTkLabel(pos=(3, 20), text="Seriously?"))

        @pyTTkSlot()
        def _okPressed():
            self.color = sc.color
            self.colorSelected.emit(self.color)
            self.close()

        okButton.clicked.connect(_okPressed)

        @pyTTkSlot()
        def _cancelPressed():
            self.colorSelected.emit(self.color)
            self.close()

        cancelButton.clicked.connect(_cancelPressed)

        @pyTTkSlot(int)
        def _controlSetRGBColor(color):
            sc.setRGBColor(color)
            leR.setValue((color & 0xff0000) >> 16)
            leG.setValue((color & 0x00ff00) >> 8)
            leB.setValue((color & 0x0000ff) >> 0)
            leHTML.setText("#{:06X}".format(color))

        @pyTTkSlot(TTkColor)
        def _controlSetColor(color):
            r, g, b = color.bgToRGB()
            numColor = r << 16 | g << 8 | b
            _controlSetRGBColor(numColor)

        @pyTTkSlot()
        def _leHTMLChanged():
            text = leHTML.text()
            if re.match('#[a-f0-9]{6}', text.lower()):
                _controlSetRGBColor(int(text[1:], 16))

        leHTML.returnPressed.connect(_leHTMLChanged)

        @pyTTkSlot(int)
        def _leRGBChanged(value):
            r = leR.value()
            g = leG.value()
            b = leB.value()
            if r & (~0xff) or r & (~0xff) or r & (~0xff): return
            _controlSetRGBColor(r << 16 | g << 8 | b)

        leR.valueChanged.connect(_leRGBChanged)
        leG.valueChanged.connect(_leRGBChanged)
        leB.valueChanged.connect(_leRGBChanged)

        _controlSetColor(self.color)

        # Palette Layout Widgets
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#ff0000'),
                                 border=True,
                                 maxSize=(8, 3)), 0, 0, 1, 2)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#ffff00'),
                                 border=True,
                                 maxSize=(8, 3)), 0, 2, 1, 2)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#00ff00'),
                                 border=True,
                                 maxSize=(8, 3)), 0, 4, 1, 2)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#00ffff'),
                                 border=True,
                                 maxSize=(8, 3)), 1, 0, 1, 2)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#0000ff'),
                                 border=True,
                                 maxSize=(8, 3)), 1, 2, 1, 2)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#ff00ff'),
                                 border=True,
                                 maxSize=(8, 3)), 1, 4, 1, 2)
        b.colorClicked.connect(_controlSetColor)

        # Shades of Grey
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#ffffff'),
                                 border=True,
                                 maxSize=(4, 3)), 2, 0)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#dddddd'),
                                 border=True,
                                 maxSize=(4, 3)), 2, 1)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#aaaaaa'),
                                 border=True,
                                 maxSize=(4, 3)), 2, 2)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#666666'),
                                 border=True,
                                 maxSize=(4, 3)), 2, 3)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#333333'),
                                 border=True,
                                 maxSize=(4, 3)), 2, 4)
        b.colorClicked.connect(_controlSetColor)
        paletteLayout.addWidget(
            b := _TTkColorButton(color=TTkColor.bg('#000000'),
                                 border=True,
                                 maxSize=(4, 3)), 2, 5)
        b.colorClicked.connect(_controlSetColor)

        # Custom frame
        if TTkColorDialogPicker.customButtons is None:
            TTkColorDialogPicker.customButtons = (
                _TTkColorButton(color=TTkColor.bg('#ffffff'),
                                custom=True,
                                border=True,
                                maxSize=(3, 3)),
                _TTkColorButton(color=TTkColor.bg('#ffffff'),
                                custom=True,
                                border=True,
                                maxSize=(3, 3)),
                _TTkColorButton(color=TTkColor.bg('#ffffff'),
                                custom=True,
                                border=True,
                                maxSize=(3, 3)),
                _TTkColorButton(color=TTkColor.bg('#ffffff'),
                                custom=True,
                                border=True,
                                maxSize=(3, 3)),
                _TTkColorButton(color=TTkColor.bg('#ffffff'),
                                custom=True,
                                border=True,
                                maxSize=(3, 3)),
                _TTkColorButton(color=TTkColor.bg('#ffffff'),
                                custom=True,
                                border=True,
                                maxSize=(3, 3)),
                _TTkColorButton(color=TTkColor.bg('#ffffff'),
                                custom=True,
                                border=True,
                                maxSize=(3, 3)),
                _TTkColorButton(color=TTkColor.bg('#ffffff'),
                                custom=True,
                                border=True,
                                maxSize=(3, 3)))

        customLayout.addWidget(b := TTkColorDialogPicker.customButtons[0], 0,
                               0)
        b.colorClicked.connect(_controlSetColor)
        customLayout.addWidget(b := TTkColorDialogPicker.customButtons[1], 0,
                               1)
        b.colorClicked.connect(_controlSetColor)
        customLayout.addWidget(b := TTkColorDialogPicker.customButtons[2], 0,
                               2)
        b.colorClicked.connect(_controlSetColor)
        customLayout.addWidget(b := TTkColorDialogPicker.customButtons[3], 0,
                               3)
        b.colorClicked.connect(_controlSetColor)
        customLayout.addWidget(b := TTkColorDialogPicker.customButtons[4], 0,
                               4)
        b.colorClicked.connect(_controlSetColor)
        customLayout.addWidget(b := TTkColorDialogPicker.customButtons[5], 0,
                               5)
        b.colorClicked.connect(_controlSetColor)
        customLayout.addWidget(b := TTkColorDialogPicker.customButtons[6], 0,
                               6)
        b.colorClicked.connect(_controlSetColor)
        customLayout.addWidget(b := TTkColorDialogPicker.customButtons[7], 0,
                               7)
        b.colorClicked.connect(_controlSetColor)

        customLayout.addWidget(
            b := TTkButton(border=False, text='Add to Custom Colors'), 1, 0, 1,
            8)

        @pyTTkSlot()
        def _addCustomPressed():
            btn = _TTkColorButton.lastClicked
            TTkLog.debug(f"{btn}")
            if btn is not None and \
               btn.isCustom():
                TTkLog.debug(f"2 {btn}")
                btn.setColor(sc.color)

        b.clicked.connect(_addCustomPressed)

        # Events
        self._colorCanvas.colorPicked.connect(_controlSetRGBColor)

        self.layout().addItem(leftLayout, 0, 0)
        self.layout().addItem(colorLayout, 0, 1)

        leftLayout.addItem(paletteLayout)
        leftLayout.addItem(customLayout)
        leftLayout.addItem(controlLayout)