diff --git a/README.md b/README.md index 83fd785e..b942c325 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,9 @@ cprofilev -f profiler.txt [pyroscope](https://pyroscope.io/) can be used as well for profiling ## Related Projects +- honourable mention + - [bpytop](https://github.com/aristocratos/bpytop) - Linux/OSX/FreeBSD resource monitor
+ This was the base inspiration for my core library - Python - [urwid](https://github.com/urwid/urwid) - Console user interface library for Python @@ -87,6 +90,8 @@ cprofilev -f profiler.txt - [Textual](https://github.com/Textualize/textual) - TUI (Text User Interface) framework for Python inspired by modern web development - [Rich](https://github.com/Textualize/rich) - Python library for rich text and beautiful formatting in the terminal - [PyCuT](https://github.com/ceccopierangiolieugenio/pyCuT) - terminal graphic library loosely based on QT api (my previous failed attempt) + - Non Python + - [Turbo Vision](http://tvision.sourceforge.net) - [ncurses](https://en.wikipedia.org/wiki/Ncurses) - [tui.el](https://github.com/ebpa/tui.el) - An experimental text-based UI framework for Emacs modeled after React \ No newline at end of file diff --git a/TermTk/TTkCore/string.py b/TermTk/TTkCore/string.py index 263ee35d..7010092c 100644 --- a/TermTk/TTkCore/string.py +++ b/TermTk/TTkCore/string.py @@ -185,7 +185,19 @@ class TTkString(): ret._colors = self._colors[fr:to] return ret + def split(self, separator ): + ret = [] + pos = 0 + if len(separator)==1: + for i,c in enumerate(self._text): + if c == separator: + ret.append(self.substring(pos,i)) + pos = i+1 + else: + raise NotImplementedError("Not yet implemented separators bigger than one char") + ret.append(self.substring(pos,len(self))) + return ret def getData(self): return (self._text,self._colors) diff --git a/demo/demo.py b/demo/demo.py index 99752a52..e6ebec86 100755 --- a/demo/demo.py +++ b/demo/demo.py @@ -88,6 +88,12 @@ def demoShowcase(root=None, border=True): tabLayouts.addTab(demoLayoutNested()," Nested Layout Test ") tabLayouts.addTab(demoLayoutSpan(), " Layout Span Test ") tabLayouts.addTab(demoSplitter(), " Splitter Test ") + tabLayoutsSources = [ + 'showcase/layout_basic.py', + 'showcase/layout_nested.py', + 'showcase/layout_span.py', + 'showcase/splitter.py' ] + tabLayouts.addMenu("Sources", ttk.TTkK.RIGHT).menuButtonClicked.connect(lambda x : ttk.TTkLog.debug(f"Placeholder for the Sources - {tabLayoutsSources[tabLayouts.currentIndex()]}")) listMenu.addItem(f"MenuBar") tabMenuBar = ttk.TTkTabWidget(parent=mainFrame, border=False, visible=False) diff --git a/tests/test.draw.005.py b/tests/test.draw.005.py new file mode 100755 index 00000000..5d74b614 --- /dev/null +++ b/tests/test.draw.005.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 + +# MIT License +# +# Copyright (c) 2022 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. + +import sys, os +import logging +import time + +sys.path.append(os.path.join(sys.path[0],'..')) +from TermTk import TTkLog +from TermTk.TTkCore import TTkColor +from TermTk.TTkCore import TTkHelper +from TermTk.TTkCore import TTkString +from TermTk.TTkCore import TTkTerm + + +TTkLog.use_default_file_logging() + +TTkTerm.init(mouse=False) +TTkLog.info("Starting") + +color1 = TTkColor.fg("#88ffff") +color2 = TTkColor.bg("#005555") +color3 = TTkColor.UNDERLINE + TTkColor.fg("#00ff00" ) + TTkColor.bg("#555500") +color4 = TTkColor.RST +color5 = TTkColor.bg("#555500")+TTkColor.STRIKETROUGH + +base = TTkString() + color1 + "Tes;tXYZ" + color2 + "012345;ABCDEF;XYZ" + color3 + "0123;456" + color4 + ";pyTermTk" + +TTkTerm.push( + TTkTerm.Cursor.moveTo(2,4) + + base.toAansi() ) +time.sleep(0.5) + +for s in base.split(';'): + TTkTerm.push( + TTkTerm.Cursor.moveDown(1) + TTkTerm.Cursor.moveLeft(5) + + s.toAansi() ) + time.sleep(0.5) + +time.sleep(5) + +TTkLog.info("Ending") + +TTkTerm.exit() \ No newline at end of file