From f1ac6a84e71124a2a16edb4f5e61b2bb5bba00a2 Mon Sep 17 00:00:00 2001 From: Martin Vladic Date: Tue, 11 Mar 2025 15:34:13 +0100 Subject: [PATCH] #746 --- packages/project-editor/lvgl/to-lvgl-code.ts | 33 +++++++++++++++++-- packages/project-editor/lvgl/widgets/Base.tsx | 5 ++- .../project-editor/lvgl/widgets/Keyboard.tsx | 2 +- .../project-editor/lvgl/widgets/Label.tsx | 10 +++--- packages/project-editor/store/index.ts | 4 +++ .../ui-components/PropertyGrid/Property.tsx | 23 +++++++++++-- wasm/eez-framework | 2 +- 7 files changed, 66 insertions(+), 13 deletions(-) diff --git a/packages/project-editor/lvgl/to-lvgl-code.ts b/packages/project-editor/lvgl/to-lvgl-code.ts index fd163126..488ca9ea 100644 --- a/packages/project-editor/lvgl/to-lvgl-code.ts +++ b/packages/project-editor/lvgl/to-lvgl-code.ts @@ -155,7 +155,10 @@ export interface LVGLCode { lvglAddObjectFlowCallback(propertyName: string, filter: number): void; // - postExecute(callback: () => void): void; + postWidgetExecute(callback: () => void): void; + + // + postPageExecute(callback: () => void): void; } //////////////////////////////////////////////////////////////////////////////// @@ -180,6 +183,8 @@ export class SimulatorLVGLCode implements LVGLCode { allocated: number[] = []; + postWidgetExecuteCallbacks: (() => void)[] = []; + startWidget( widget: LVGLWidget, parentObj: number, @@ -191,6 +196,11 @@ export class SimulatorLVGLCode implements LVGLCode { } endWidget() { + for (const callback of this.postWidgetExecuteCallbacks) { + callback(); + } + this.postWidgetExecuteCallbacks = []; + this.callObjectFunction("lv_obj_update_layout"); for (const tempStr of this.allocated) { @@ -683,7 +693,7 @@ export class SimulatorLVGLCode implements LVGLCode { } } - postExecute(callback: () => void) { + postPageExecute(callback: () => void) { const widget = this.widget; const obj = this.obj; this.pageRuntime.addPostCreateCallback(() => { @@ -692,6 +702,10 @@ export class SimulatorLVGLCode implements LVGLCode { callback(); }); } + + postWidgetExecute(callback: () => void) { + this.postWidgetExecuteCallbacks.push(callback); + } } export class BuildLVGLCode implements LVGLCode { @@ -703,10 +717,19 @@ export class BuildLVGLCode implements LVGLCode { componentIndex: number; propertyIndex: number; + noGoodNameCallbacks: (() => void)[] = []; + startWidget(widget: LVGLWidget) { this.widget = widget; } + endWidget() { + for (const callback of this.noGoodNameCallbacks) { + callback(); + } + this.noGoodNameCallbacks = []; + } + get project() { return this.build.project; } @@ -1211,7 +1234,11 @@ export class BuildLVGLCode implements LVGLCode { // this function is only used for the simulator } - postExecute(callback: () => void) { + postPageExecute(callback: () => void) { this.build.postBuildAdd(callback); } + + postWidgetExecute(callback: () => void) { + this.noGoodNameCallbacks.push(callback); + } } diff --git a/packages/project-editor/lvgl/widgets/Base.tsx b/packages/project-editor/lvgl/widgets/Base.tsx index 67f8db00..9eb28f98 100644 --- a/packages/project-editor/lvgl/widgets/Base.tsx +++ b/packages/project-editor/lvgl/widgets/Base.tsx @@ -1852,6 +1852,8 @@ export class LVGLWidget extends Widget { this._yScroll2 = runtime.wasm._lvglGetScrollY(obj); } + runtime.toLVGLCode.endWidget(); + return obj; } @@ -1867,7 +1869,6 @@ export class LVGLWidget extends Widget { const code = runtime.toLVGLCode; code.startWidget(this, parentObj, customWidget); this.toLVGLCode(code); - code.endWidget(); return code.obj; } @@ -2211,6 +2212,8 @@ export class LVGLWidget extends Widget { } this.localStyles.lvglBuild(build); + build.toLVGLCode.endWidget(); + // children if (this.children.length > 0) { build.blockStart("{"); diff --git a/packages/project-editor/lvgl/widgets/Keyboard.tsx b/packages/project-editor/lvgl/widgets/Keyboard.tsx index ceb45254..492e1651 100644 --- a/packages/project-editor/lvgl/widgets/Keyboard.tsx +++ b/packages/project-editor/lvgl/widgets/Keyboard.tsx @@ -235,7 +235,7 @@ export class LVGLKeyboardWidget extends LVGLWidget { return; } - code.postExecute(() => { + code.postPageExecute(() => { let keyboardAccessor; let textareaAccessor; diff --git a/packages/project-editor/lvgl/widgets/Label.tsx b/packages/project-editor/lvgl/widgets/Label.tsx index 21c6ed52..bdcd848a 100644 --- a/packages/project-editor/lvgl/widgets/Label.tsx +++ b/packages/project-editor/lvgl/widgets/Label.tsx @@ -168,10 +168,12 @@ export class LVGLLabelWidget extends LVGLWidget { } // text - code.callObjectFunction( - "lv_label_set_text", - code.stringProperty(this.textType, this.text, this.previewValue) - ); + code.postWidgetExecute(() => { + code.callObjectFunction( + "lv_label_set_text", + code.stringProperty(this.textType, this.text, this.previewValue) + ); + }); if (this.textType == "expression") { code.addToTick("text", () => { const new_val = code.evalTextProperty( diff --git a/packages/project-editor/store/index.ts b/packages/project-editor/store/index.ts index d1ed7103..ce4af2e2 100644 --- a/packages/project-editor/store/index.ts +++ b/packages/project-editor/store/index.ts @@ -1512,6 +1512,10 @@ export class ProjectStore { }; async findProjectComponent() { + if (this.runtime && !this.runtime.isDebuggerActive) { + return; + } + const result = await showGenericDialog({ dialogDefinition: { title: "Find Project Component", diff --git a/packages/project-editor/ui-components/PropertyGrid/Property.tsx b/packages/project-editor/ui-components/PropertyGrid/Property.tsx index 741bdd96..c332a134 100644 --- a/packages/project-editor/ui-components/PropertyGrid/Property.tsx +++ b/packages/project-editor/ui-components/PropertyGrid/Property.tsx @@ -130,21 +130,38 @@ export const Property = observer( } } + _lastValue: any; + updateChangeDocumentObserver() { if (this.changeDocumentDisposer) { this.changeDocumentDisposer(); } this.changeDocumentDisposer = autorun(() => { + const lastValue = this._lastValue; + this._lastValue = this._value; + if (this._value != lastValue) { + return; + } + if (this.context.project) { const getPropertyValueResult = getPropertyValue( this.props.objects, this.props.propertyInfo ); + + const value = getPropertyValueResult + ? getPropertyValueResult.value + : undefined; + + if (typeof value == "number") { + if (value == filterNumber(this._value)) { + return; + } + } + runInAction(() => { - this._value = getPropertyValueResult - ? getPropertyValueResult.value - : undefined; + this._value = value; }); } }); diff --git a/wasm/eez-framework b/wasm/eez-framework index e660a47e..ae827d23 160000 --- a/wasm/eez-framework +++ b/wasm/eez-framework @@ -1 +1 @@ -Subproject commit e660a47e84fed3db2020e839e6868a3f10103161 +Subproject commit ae827d232eed52d1a9b7c269d7b5a686865daa0d