diff --git a/TermTk/TTkWidgets/TTkModelView/tablewidget.py b/TermTk/TTkWidgets/TTkModelView/tablewidget.py index abe2abdc..2b3bb3e5 100644 --- a/TermTk/TTkWidgets/TTkModelView/tablewidget.py +++ b/TermTk/TTkWidgets/TTkModelView/tablewidget.py @@ -403,9 +403,22 @@ class TTkTableWidget(TTkAbstractScrollView): vhs = self._vHeaderSize hhs = self._hHeaderSize - # Draw Cells sliceCol=list(zip([-1]+cp,cp)) sliceRow=list(zip([-1]+rp,rp)) + + def _drawCell(_col,_row,_xa,_xb,_ya,_yb,_color): + txt = self._tableModel.data(_row, _col) + if isinstance(txt,TTkString): pass + elif type(txt) == str: txt = TTkString(txt, _color) + else: txt = TTkString(f"{txt}", _color) + txt = txt.completeColor(_color) + for i,line in enumerate(txt.split('\n')): + y = i+_ya+1 + if y == _yb: break + canvas.drawTTkString(pos=(1+_xa,y), text=line, width=_xb-_xa-1, color=_color) + canvas.fill(pos=(1+_xa,y+1),size=(_xb-_xa-1,_yb-y),color=_color) + + # Draw Cells for row in range(rows): ya,yb = sliceRow[row] ya,yb = ya+hhs-oy, yb+hhs-oy @@ -416,18 +429,9 @@ class TTkTableWidget(TTkAbstractScrollView): xa,xb = xa+vhs-ox, xb+vhs-ox if xa>w : break if xb +# +# 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 timeit + + +def _processOut1(loop,a,b,c,d,e,f): + ret = loop + for x in range(a,b): + for y in range(c,d): + for z in range(e,f): + ret += x+y+z + return ret + +_internals = {'a':1,'b':1,'c':1,'d':1,'e':1,'f':1} +def _processOut2(loop): + a,b,c,d,e,f = _internals.values() + ret = loop + for x in range(a,b): + for y in range(c,d): + for z in range(e,f): + ret += x+y+z + return ret + +def test1(): + a,b,c,d,e,f = 1,3,1,3,1,3 + ret = 0 + for loop in range(100): + ret += loop + for x in range(a,b): + for y in range(c,d): + for z in range(e,f): + ret += x+y+z + return ret + +def test2(): + def _processIn(loop,a,b,c,d,e,f): + ret = loop + for x in range(a,b): + for y in range(c,d): + for z in range(e,f): + ret += x+y+z + return ret + a,b,c,d,e,f = 1,3,1,3,1,3 + ret = 0 + for loop in range(100): + ret += _processIn(loop,a,b,c,d,e,f) + return ret + +def test3(): + a,b,c,d,e,f = 1,3,1,3,1,3 + ret = 0 + for loop in range(100): + ret += _processOut1(loop,a,b,c,d,e,f) + return ret + +def test4(): + def _processIn(loop): + ret = loop + for x in range(a,b): + for y in range(c,d): + for z in range(e,f): + ret += x+y+z + return ret + a,b,c,d,e,f = 1,3,1,3,1,3 + ret = 0 + for loop in range(100): + ret += _processIn(loop) + return ret + +def test5(): return 1 + + +loop = 10000 + +a = {} + +iii = 1 +while (testName := f'test{iii}') and (testName in globals()): + result = timeit.timeit(f'{testName}(*a)', globals=globals(), number=loop) + # print(f"test{iii}) fps {loop / result :.3f} - s {result / loop:.10f} - {result / loop} {globals()[testName](*a)}") + print(f"test{iii:02}) | {result / loop:.10f} sec. | {loop / result : 15.3f} Fps ╞╡-> {globals()[testName](*a)}") + iii+=1