diff --git a/ttkDesigner/app/superobj/superwidget.py b/ttkDesigner/app/superobj/superwidget.py index f8d2afbd..3c93f576 100644 --- a/ttkDesigner/app/superobj/superwidget.py +++ b/ttkDesigner/app/superobj/superwidget.py @@ -28,8 +28,11 @@ import ttkDesigner.app.superobj as so from .superobj import SuperObject class SuperWidget(ttk.TTkWidget): - __slots__ = ('_wid', '_superLayout', '_superRootWidget', '_designer') + __slots__ = ('_wid', '_superLayout', '_superRootWidget', '_designer', + 'superMoved', 'superResized') def __init__(self, designer, wid, *args, **kwargs): + self.superMoved = ttk.pyTTkSignal(int,int) + self.superResized = ttk.pyTTkSignal(int,int) self._designer = designer self._wid = wid self._wid.move(*kwargs['pos']) @@ -194,7 +197,7 @@ class SuperWidget(ttk.TTkWidget): self._superRootWidget = True def pushSuperControlWidget(self): - if self._superRootWidget: return False + # if self._superRootWidget: return False scw = so.SuperControlWidget(self) ttk.TTkHelper.removeOverlay() ttk.TTkHelper.overlay(self, scw, -1,-1, forceBoundaries=False) @@ -229,11 +232,13 @@ class SuperWidget(ttk.TTkWidget): def move(self, x: int, y: int): self._wid.move(x,y) self.update() + self.superMoved.emit(x,y) return super().move(x, y) def resizeEvent(self, w, h): self._wid.resize(w,h) self._wid._canvas.updateSize() + self.superResized.emit(w,h) return super().resizeEvent(w, h) def paintEvent(self): diff --git a/ttkDesigner/app/windoweditor.py b/ttkDesigner/app/windoweditor.py index c4d49a0b..9475a06d 100644 --- a/ttkDesigner/app/windoweditor.py +++ b/ttkDesigner/app/windoweditor.py @@ -26,17 +26,21 @@ import TermTk as ttk class WindowEditorView(ttk.TTkAbstractScrollView): - __slots__ = ('_designer') + __slots__ = ('_designer', '_snapRootWidget') def __init__(self, designer, *args, **kwargs): self._designer = designer super().__init__(*args, **kwargs) self.viewChanged.connect(self._viewChangedHandler) - self._ttk = SuperWidget(wid=ttk.TTkWidget(name = 'TTk'), designer=self._designer, pos=(4,2), size=(self.width()-8,self.height()-4), superRootWidget=True) + self._ttk = SuperWidget(wid=ttk.TTkWidget(name = 'MainWidget'), designer=self._designer, pos=(4,2), size=(self.width()-8,self.height()-4), superRootWidget=True) + self._ttk.superResized.connect(self._superChanged) + self._ttk.superMoved.connect(self._superChanged) self.layout().addWidget(self._ttk) + self._snapRootWidget = True def importWidget(self, wid): if self._ttk: self.layout().removeWidget(self._ttk) + self._snapRootWidget = False self._ttk = SuperWidget.swFromWidget(wid=wid, designer=self._designer, pos=(4,2), size=(self.width()-8,self.height()-4)) self._ttk.makeRootWidget() self.layout().addWidget(self._ttk) @@ -54,8 +58,15 @@ class WindowEditorView(ttk.TTkAbstractScrollView): def dumpDict(self): return self._ttk.dumpDict() + @ttk.pyTTkSlot() + def _superChanged(self): + self._snapRootWidget = False + self.viewChanged.emit() + def resizeEvent(self, w, h): - self._ttk.resize(w-8,h-4) + if self._snapRootWidget: + self._ttk.resize(w-8,h-4) + self._snapRootWidget = True return super().resizeEvent(w, h) @ttk.pyTTkSlot() @@ -64,15 +75,16 @@ class WindowEditorView(ttk.TTkAbstractScrollView): self.layout().setOffset(-x,-y) def viewFullAreaSize(self): - _,_,w,h = self.layout().fullWidgetAreaGeometry() - return w+1, h+1 + x,y,w,h = self.layout().fullWidgetAreaGeometry() + return x+w, y+h def viewDisplayedSize(self): return self.size() def paintEvent(self): w,h = self.size() - self._canvas.fill(pos=(0,0),size=(w,h), char="╳", color=ttk.TTkColor.fg("#444400")+ttk.TTkColor.bg("#000044")) + # self._canvas.fill(pos=(0,0),size=(w,h), char="╳", color=ttk.TTkColor.fg("#444400")+ttk.TTkColor.bg("#000044")) + self._canvas.fill(pos=(0,0),size=(w,h), char="#", color=ttk.TTkColor.fg("#220044")+ttk.TTkColor.bg("#000022")) class WindowEditor(ttk.TTkAbstractScrollArea): __slots__ = ('getTTk', 'dumpDict', 'importWidget', 'importSuperWidget')