diff --git a/.gitignore b/.gitignore index 667b326a..2be2e3cf 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ tmp profiler.txt .vscode docs/html +experiments # C extensions *.so diff --git a/TermTk/TTkGui/theme.py b/TermTk/TTkGui/theme.py index 5a819d1c..3f74a5ae 100644 --- a/TermTk/TTkGui/theme.py +++ b/TermTk/TTkGui/theme.py @@ -157,19 +157,27 @@ class TTkTheme(): '''Default to :class:`buttonTextColor`''' checkboxBorderColor = buttonBorderColor '''Default to :class:`buttonBorderColor`''' + checkboxTextColor = TTkColor.RST + '''Default to :class:`~TermTk.TTkCore.color.TTkColor.RST`''' checkboxContentColorFocus = buttonTextColorFocus '''Default to :class:`buttonTextColorFocus`''' checkboxBorderColorFocus = buttonBorderColorFocus '''Default to :class:`buttonBorderColorFocus`''' + checkboxTextColorFocus = TTkColor.fg("#ffff88")+TTkColor.bg("#111111") + '''Default to **TTkColor.fg("#ffff88")+TTkColor.bg("#111111")**''' - radioButtonContentColor = buttonTextColor - '''Default to :class:`buttonTextColor`''' - radioButtonBorderColor = buttonBorderColor - '''Default to :class:`buttonBorderColor`''' - radioButtonContentColorFocus = buttonTextColorFocus - '''Default to :class:`buttonTextColorFocus`''' - radioButtonBorderColorFocus = buttonBorderColorFocus - '''Default to :class:`buttonBorderColorFocus`''' + radioButtonContentColor = checkboxContentColor + '''Default to :class:`checkboxContentColor`''' + radioButtonBorderColor = checkboxBorderColor + '''Default to :class:`checkboxBorderColor`''' + radioButtonTextColor = checkboxTextColor + '''Default to :class:`checkboxTextColor`''' + radioButtonContentColorFocus = checkboxContentColorFocus + '''Default to :class:`checkboxContentColorFocus`''' + radioButtonBorderColorFocus = checkboxBorderColorFocus + '''Default to :class:`checkboxBorderColorFocus`''' + radioButtonTextColorFocus = checkboxTextColorFocus + '''Default to :class:`checkboxTextColorFocus`''' tabColor = TTkColor.fg("#aaaaaa") '''Default to **TTkColor.fg("#aaaaaa")**''' diff --git a/TermTk/TTkWidgets/checkbox.py b/TermTk/TTkWidgets/checkbox.py index d6e38877..175c41d6 100644 --- a/TermTk/TTkWidgets/checkbox.py +++ b/TermTk/TTkWidgets/checkbox.py @@ -29,7 +29,7 @@ from TermTk.TTkCore.color import TTkColor from TermTk.TTkWidgets.widget import * class TTkCheckbox(TTkWidget): - __slots__ = ('_checked', 'clicked', 'stateChanged') + __slots__ = ('_checked', '_text', 'clicked', 'stateChanged', ) def __init__(self, *args, **kwargs): TTkWidget.__init__(self, *args, **kwargs) self._name = kwargs.get('name' , 'TTkCheckbox' ) @@ -37,7 +37,8 @@ class TTkCheckbox(TTkWidget): self.stateChanged = pyTTkSignal(int) self.clicked = pyTTkSignal(bool) self._checked = kwargs.get('checked', False ) - self.setMinimumSize(3, 1) + self._text = kwargs.get('text', '' ) + self.setMinimumSize(3 + len(self._text), 1) self.setMaximumHeight(1) self.setFocusPolicy(TTkK.ClickFocus + TTkK.TabFocus) @@ -54,16 +55,18 @@ class TTkCheckbox(TTkWidget): def paintEvent(self): if self.hasFocus(): borderColor = TTkCfg.theme.checkboxBorderColorFocus - color = TTkCfg.theme.checkboxContentColorFocus + textColor = TTkCfg.theme.checkboxTextColorFocus + xColor = TTkCfg.theme.checkboxContentColorFocus else: borderColor = TTkCfg.theme.checkboxBorderColor - color = TTkCfg.theme.checkboxContentColor + textColor = TTkCfg.theme.checkboxTextColor + xColor = TTkCfg.theme.checkboxContentColor + self._canvas.drawText(pos=(0,0), color=borderColor ,text="[ ]") + self._canvas.drawText(pos=(3,0), color=textColor ,text=self._text) if self._checked: - self._canvas.drawText(pos=(0,0), color=borderColor ,text="[ ]") - self._canvas.drawText(pos=(1,0), color=color ,text="X") + self._canvas.drawText(pos=(1,0), color=xColor ,text="X") else: - self._canvas.drawText(pos=(0,0), color=borderColor ,text="[ ]") - self._canvas.drawText(pos=(1,0), color=color ,text=" ") + self._canvas.drawText(pos=(1,0), color=xColor ,text=" ") def _pressEvent(self): self._checked = not self._checked diff --git a/TermTk/TTkWidgets/radiobutton.py b/TermTk/TTkWidgets/radiobutton.py index 5d4bb2c5..501567ce 100644 --- a/TermTk/TTkWidgets/radiobutton.py +++ b/TermTk/TTkWidgets/radiobutton.py @@ -30,7 +30,7 @@ from TermTk.TTkWidgets.widget import * class TTkRadioButton(TTkWidget): _radioLists = {} - __slots__ = ('_checked', 'clicked') + __slots__ = ('_checked', '_text', 'clicked') def __init__(self, *args, **kwargs): # Define Signals self.clicked = pyTTkSignal() @@ -38,7 +38,8 @@ class TTkRadioButton(TTkWidget): self._name = kwargs.get('name' , 'TTkRadioButton' ) # self.cehcked = pyTTkSignal() self._checked = kwargs.get('checked', False ) - self.setMinimumSize(3, 1) + 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: @@ -49,16 +50,18 @@ class TTkRadioButton(TTkWidget): def paintEvent(self): if self.hasFocus(): borderColor = TTkCfg.theme.radioButtonBorderColorFocus - color = TTkCfg.theme.radioButtonContentColorFocus + textColor = TTkCfg.theme.radioButtonTextColorFocus + xColor = TTkCfg.theme.radioButtonContentColorFocus else: borderColor = TTkCfg.theme.radioButtonBorderColor - color = TTkCfg.theme.radioButtonContentColor + textColor = TTkCfg.theme.radioButtonTextColor + xColor = TTkCfg.theme.radioButtonContentColor + self._canvas.drawText(pos=(0,0), color=borderColor ,text="( )") + self._canvas.drawText(pos=(3,0), color=textColor ,text=self._text) if self._checked: - self._canvas.drawText(pos=(0,0), color=borderColor ,text="( )") - self._canvas.drawText(pos=(1,0), color=color ,text="X") + self._canvas.drawText(pos=(1,0), color=xColor ,text="X") else: - self._canvas.drawText(pos=(0,0), color=borderColor ,text="( )") - self._canvas.drawText(pos=(1,0), color=color ,text=" ") + self._canvas.drawText(pos=(1,0), color=xColor ,text=" ") def _pressEvent(self): # Uncheck the radio already checked; diff --git a/TermTk/libbpytop/__init__.py b/TermTk/libbpytop/__init__.py index d05c06cd..090e0097 100644 --- a/TermTk/libbpytop/__init__.py +++ b/TermTk/libbpytop/__init__.py @@ -1,4 +1,17 @@ -from .input import * -from .term import * -from .colors import * -from .inputkey import * \ No newline at end of file +import platform + +if platform.system() == 'Linux': + from .input import * + from .term import * + from .colors import * + from .inputkey import * +elif platform.system() == 'Darwin': + from .input import * + from .term import * + from .colors import * + from .inputkey import * +elif platform.system() == 'Windows': + raise NotImplementedError('Windows OS not yet supported') +elif platform.system() == 'Emscripten': + raise NotImplementedError('Pyodide not yet supported') + diff --git a/demo/demo.py b/demo/demo.py index 156f856f..99752a52 100755 --- a/demo/demo.py +++ b/demo/demo.py @@ -57,7 +57,7 @@ def demoShowcase(root=None, border=True): leftFrame = ttk.TTkFrame(parent=splitter, layout=ttk.TTkGridLayout(), border=False) - themesFrame = ttk.TTkFrame(title="Theme", border=True, layout=ttk.TTkGridLayout(), maxHeight=5, minHeight=5) + themesFrame = ttk.TTkFrame(title="Theme", border=True, layout=ttk.TTkVBoxLayout(), maxHeight=5, minHeight=5) listMenu = ttk.TTkList(maxWidth=15, minWidth=10) leftFrame.layout().addWidget(themesFrame, 0, 0) @@ -66,12 +66,9 @@ def demoShowcase(root=None, border=True): mainFrame = ttk.TTkFrame(parent=splitter, layout=ttk.TTkGridLayout(), border=False) # Themes - themesFrame.layout().addWidget(r1 := ttk.TTkRadioButton(name="theme",maxWidth=3),0,0) - themesFrame.layout().addWidget(ttk.TTkLabel(text='ASCII') ,0,1) - themesFrame.layout().addWidget(r2 := ttk.TTkRadioButton(name="theme",maxWidth=3, checked=True),1,0) - themesFrame.layout().addWidget(ttk.TTkLabel(text='UTF-8') ,1,1) - themesFrame.layout().addWidget(r3 := ttk.TTkRadioButton(name="theme",maxWidth=3),2,0) - themesFrame.layout().addWidget(ttk.TTkLabel(text='Nerd') ,2,1) + themesFrame.layout().addWidget(r1 := ttk.TTkRadioButton(text="ASCII", name="theme")) + themesFrame.layout().addWidget(r2 := ttk.TTkRadioButton(text="UTF-8",name="theme", checked=True)) + themesFrame.layout().addWidget(r3 := ttk.TTkRadioButton(text="Nerd",name="theme")) r1.clicked.connect( lambda : ttk.TTkTheme.loadTheme(ttk.TTkTheme.ASCII)) r2.clicked.connect( lambda : ttk.TTkTheme.loadTheme(ttk.TTkTheme.UTF8 )) diff --git a/demo/showcase/formwidgets.py b/demo/showcase/formwidgets.py index a448dfc0..1eab7d3c 100755 --- a/demo/showcase/formwidgets.py +++ b/demo/showcase/formwidgets.py @@ -84,27 +84,27 @@ def demoFormWidgets(root=None): win_form1_grid_layout.addWidget(ttk.TTkSpinBox(value=-20, maximum=50, minimum=-50),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Checkbox'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkCheckbox(),row,2) + win_form1_grid_layout.addWidget(ttk.TTkCheckbox(text='CheckBox 1'),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Checkbox Checked'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkCheckbox(checked=True),row,2) + win_form1_grid_layout.addWidget(ttk.TTkCheckbox(text='CheckBox 2', checked=True),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Radio Button (Default)'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkRadioButton(),row,2) + win_form1_grid_layout.addWidget(ttk.TTkRadioButton(text='RadioButton 1'),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Radio Button (Default)'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkRadioButton(),row,2) + win_form1_grid_layout.addWidget(ttk.TTkRadioButton(text='RadioButton 2'),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Radio Button (Default)'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkRadioButton(),row,2) + win_form1_grid_layout.addWidget(ttk.TTkRadioButton(text='RadioButton 3'),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Radio Button (Name One) 1'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkRadioButton(name="Name One"),row,2) + win_form1_grid_layout.addWidget(ttk.TTkRadioButton(text='RadioButton A', name="Name One"),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Radio Button (Name One) 1'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkRadioButton(name="Name One"),row,2) + win_form1_grid_layout.addWidget(ttk.TTkRadioButton(text='RadioButton B', name="Name One"),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Radio Button (Name Two) 2'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkRadioButton(name="Name Two"),row,2) + win_form1_grid_layout.addWidget(ttk.TTkRadioButton(text='RadioButton x',name="Name Two"),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Radio Button (Name One) 1'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkRadioButton(name="Name One"),row,2) + win_form1_grid_layout.addWidget(ttk.TTkRadioButton(text='RadioButton C', name="Name One"),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkLabel(text='Radio Button (Name Two) 2'),row,0) - win_form1_grid_layout.addWidget(ttk.TTkRadioButton(name="Name Two"),row,2) + win_form1_grid_layout.addWidget(ttk.TTkRadioButton(text='RadioButton y',name="Name Two"),row,2) row += 1; win_form1_grid_layout.addWidget(ttk.TTkSpacer(),row,0) return frame