From d36fca5cc6cea076ac2adbc0fe30ea210b3873e9 Mon Sep 17 00:00:00 2001 From: paul Date: Wed, 26 Mar 2025 20:57:45 +0530 Subject: [PATCH] force renderTkinterLayout error if its not defined for elements with layout --- src/frameworks/tkinter/widgets/base.js | 27 ++++++++++++++++++---- src/frameworks/tkinter/widgets/frame.js | 6 ++--- src/frameworks/tkinter/widgets/toplevel.js | 2 +- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/frameworks/tkinter/widgets/base.js b/src/frameworks/tkinter/widgets/base.js index e16c08c..8b9cf5f 100644 --- a/src/frameworks/tkinter/widgets/base.js +++ b/src/frameworks/tkinter/widgets/base.js @@ -31,7 +31,26 @@ export class TkinterBase extends Widget { } } - this.renderTkinterLayout = this.renderTkinterLayout.bind(this) + this.renderTkinterLayout = this.renderTkinterLayout.bind(this) // this must be called if droppableTags is not set to null + + const originalRenderContent = this.renderContent.bind(this); + this.renderContent = () => { + this._calledRenderTkinterLayout = false + + const content = originalRenderContent() + + if ( + this.droppableTags !== null && + this.droppableTags !== undefined && + !this._calledRenderTkinterLayout + ) { + throw new Error( + `class ${this.constructor.name}: renderTkinterLayout() must be called inside renderContent() when droppableTags is not null` + ) + } + + return content + } } @@ -374,7 +393,6 @@ export class TkinterBase extends Widget { value: this.state.packAttrs.anchor, onChange: (value) => { this.setAttrValue("flexManager.anchor", value, () => { - console.log("set anchor: ", this.state.attrs.flexManager) // this.props.parentWidgetRef.current.forceRerender() }) this.updateState((prevState) => ({packAttrs: {...prevState.packAttrs, anchor: value}}), () => { @@ -652,6 +670,7 @@ export class TkinterBase extends Widget { * Helps with pack layout manager and grid manager */ renderTkinterLayout(){ + this._calledRenderTkinterLayout = true // NOTE: this is set so subclass are forced to call this method if droppable tags are not null const {layout, direction, gap} = this.getLayout() if (layout === Layouts.FLEX){ @@ -674,7 +693,7 @@ export class TkinterBase extends Widget { if (layout === Layouts.GRID){ - const {gridManager, flexManager, positioning, ...restAttrs} = this.state.attrs + const {positioning, ...restAttrs} = this.state.attrs const updates = { attrs: { @@ -1075,7 +1094,7 @@ export class TkinterWidgetBase extends TkinterBase{ // widgetInnerStyling: widgetStyle // }) - this.setAttrValue("padding.padX", value) + this.setAttrValue("padding.padY", value) } }, }, diff --git a/src/frameworks/tkinter/widgets/frame.js b/src/frameworks/tkinter/widgets/frame.js index 8d5a696..509b99b 100644 --- a/src/frameworks/tkinter/widgets/frame.js +++ b/src/frameworks/tkinter/widgets/frame.js @@ -69,7 +69,7 @@ class Frame extends TkinterBase{ // widgetInnerStyling: widgetStyle // }) - this.setAttrValue("padding.padX", value) + this.setAttrValue("padding.padY", value) } }, }, @@ -132,8 +132,6 @@ class Frame extends TkinterBase{ const {layout} = this.getParentLayout() - console.log("parent layout: ", layout) - const config = { bg: `"${bg}"` } @@ -174,7 +172,7 @@ class Frame extends TkinterBase{
- {this.props.children} + {this.renderTkinterLayout()} {/*This is required for pack layouts, so if your widget accepts child widgets, ensure to add this */}
) diff --git a/src/frameworks/tkinter/widgets/toplevel.js b/src/frameworks/tkinter/widgets/toplevel.js index 8e0d717..c091a6a 100644 --- a/src/frameworks/tkinter/widgets/toplevel.js +++ b/src/frameworks/tkinter/widgets/toplevel.js @@ -137,7 +137,7 @@ class TopLevel extends TkinterBase{
- {this.props.children} + {this.renderTkinterLayout()}
)