Skip to content

Commit 3c86e3d

Browse files
committed
1 parent 4f35420 commit 3c86e3d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+1138
-253
lines changed

.vscode/settings.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,10 @@
9595
"parser_private.h": "c",
9696
"lv_assert.h": "c",
9797
"lv_math.h": "c",
98-
"stdbool.h": "c"
98+
"stdbool.h": "c",
99+
"regex": "cpp",
100+
"bitset": "cpp",
101+
"shared_mutex": "cpp"
99102
},
100103
"typescript.tsdk": "node_modules\\typescript\\lib",
101104
"workbench.editor.enablePreview": false,

npm-module/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"author": "Envox <eez@envox.hr>",
44
"description": "EEZ Studio for building standalone dashboard applications",
55
"repository": "https://github.com/eez-open/studio",
6-
"version": "0.0.59",
6+
"version": "0.0.60",
77
"revision": "1",
88
"license": "GPL-3.0-only",
99
"files": ["packages", "libs", "resources"]

packages/eez-studio-types/index.d.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,14 @@ export interface WorkerToRenderMessage {
389389
lvglSetColorTheme?: {
390390
themeName: string;
391391
};
392+
393+
lvglCreateScreen?: {
394+
screenIndex: number;
395+
};
396+
397+
lvglDeleteScreen?: {
398+
screenIndex: number;
399+
};
392400
}
393401

394402
interface IField {
@@ -548,7 +556,7 @@ export interface IWasmFlowRuntime {
548556
} | undefined;
549557

550558
// eez framework API
551-
_init(wasmModuleId: number, debuggerMessageSubsciptionFilter: number, assets: number, assetsSize: number, displayWidth: number, displayHeight: number, darkTheme: boolean, timeZone: number): void;
559+
_init(wasmModuleId: number, debuggerMessageSubsciptionFilter: number, assets: number, assetsSize: number, displayWidth: number, displayHeight: number, darkTheme: boolean, timeZone: number, deleteOnScreenUnload: number): void;
552560
_mainLoop(): boolean;
553561
_getSyncedBuffer(): number;
554562
_onMouseWheelEvent(wheelDeltaY: number, pressed: number): void;
@@ -693,6 +701,8 @@ export interface IWasmFlowRuntime {
693701

694702
_lvglScreenLoad(page_index: number, obj: number): void;
695703
_lvglDeleteObject(obj: number): void;
704+
_lvglDeleteObjectIndex(index: number): void;
705+
_lvglDeletePageFlowState(index: number): void;
696706
_lvglObjAddFlag(obj: number, f: number): void;
697707
_lvglObjClearFlag(obj: number, f: number): void;
698708
_lvglObjHasFlag(obj: number, f: number): boolean;
@@ -801,6 +811,7 @@ export interface IWasmFlowRuntime {
801811
_lvglSetKeyboardGroup(groupObj: number): void;
802812
_lvglAddScreenLoadedEventHandler(screenObj: number): void;
803813
_lvglGroupAddObject(screenObj: number, groupObj: number, obj: number): void;
814+
_lvglGroupRemoveObjectsForScreen(screenObj: number): void;
804815

805816
_lvglObjInvalidate(obj: number);
806817
}

packages/eez-studio-ui/_stylesheets/project-editor.less

+20-8
Original file line numberDiff line numberDiff line change
@@ -3733,16 +3733,28 @@
37333733
border: 1px solid @borderColor;
37343734
border-bottom: none;
37353735
}
3736-
.EezStudio_ListContainer {
3737-
min-height: 50px;
3738-
max-height: 480px;
3736+
.EezStudio_NewLVGLActionDialog_Content {
3737+
display: flex;
3738+
flex-direction: row;
3739+
.EezStudio_ListContainer {
3740+
&:nth-child(1) {
3741+
flex: 2;
3742+
}
37393743

3740-
.EezStudio_List {
3741-
padding: 5px;
3744+
&:nth-child(2) {
3745+
flex: 3;
3746+
}
37423747

3743-
> div.EezStudio_Selected {
3744-
background-color: @selectionBackgroundColor;
3745-
color: @selectionColor;
3748+
min-height: 50px;
3749+
max-height: 480px;
3750+
3751+
.EezStudio_List {
3752+
padding: 5px;
3753+
3754+
> div.EezStudio_Selected {
3755+
background-color: @selectionBackgroundColor;
3756+
color: @selectionColor;
3757+
}
37463758
}
37473759
}
37483760
}

packages/project-editor/features/page/page.tsx

+46-3
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ import {
2828
propertyNotFoundMessage
2929
} from "project-editor/store";
3030
import {
31+
hasFlowSupport,
3132
isDashboardProject,
32-
isLVGLProject
33+
isLVGLProject,
34+
isNotLVGLProject
3335
} from "project-editor/project/project-type-traits";
3436
import {
3537
NamingConvention,
@@ -213,6 +215,9 @@ export class Page extends Flow {
213215
_lvglRuntime: LVGLPageRuntime | undefined;
214216
_lvglObj: number | undefined;
215217

218+
createAtStart: boolean;
219+
deleteOnScreenUnload: boolean;
220+
216221
get codeIdentifier() {
217222
const codeIdentifier = getName(
218223
"",
@@ -259,7 +264,9 @@ export class Page extends Flow {
259264
isUsedAsUserWidget: observable,
260265
dataContextOverrides: observable,
261266
_lvglRuntime: observable,
262-
_lvglObj: observable
267+
_lvglObj: observable,
268+
createAtStart: observable,
269+
deleteOnScreenUnload: observable
263270
});
264271
}
265272

@@ -391,8 +398,36 @@ export class Page extends Flow {
391398
propertyGridGroup: generalGroup,
392399
disabled: object =>
393400
isDashboardProject(object) || isLVGLProject(object)
401+
},
402+
{
403+
name: "createAtStart",
404+
type: PropertyType.Boolean,
405+
propertyGridGroup: generalGroup,
406+
checkboxStyleSwitch: true,
407+
disabled: (page: Page) =>
408+
isNotLVGLProject(page) ||
409+
page.isUsedAsUserWidget ||
410+
!ProjectEditor.getProject(page).settings.build
411+
.screensLifetimeSupport
412+
},
413+
{
414+
name: "deleteOnScreenUnload",
415+
displayName: "Delete on unload",
416+
type: PropertyType.Boolean,
417+
propertyGridGroup: generalGroup,
418+
checkboxStyleSwitch: true,
419+
disabled: (page: Page) =>
420+
isNotLVGLProject(page) ||
421+
!hasFlowSupport(page) ||
422+
page.isUsedAsUserWidget ||
423+
!ProjectEditor.getProject(page).settings.build
424+
.screensLifetimeSupport
394425
}
395426
],
427+
defaultValue: {
428+
createAtStart: true,
429+
deleteOnScreenUnload: false
430+
},
396431
icon: PAGES_ICON,
397432
label: (page: Page) => {
398433
return page.name;
@@ -514,6 +549,14 @@ export class Page extends Flow {
514549
];
515550
}
516551
}
552+
553+
if (jsObject.createAtStart == undefined) {
554+
jsObject.createAtStart = true;
555+
}
556+
557+
if (jsObject.deleteOnScreenUnload == undefined) {
558+
jsObject.deleteOnScreenUnload = false;
559+
}
517560
},
518561
isPropertyMenuSupported: true,
519562
newItem: async (parent: IEezObject) => {
@@ -1034,7 +1077,7 @@ export class Page extends Flow {
10341077
)
10351078
: runtime.wasm._lvglCreateScreen(
10361079
parentObj,
1037-
runtime.getWidgetIndex(this),
1080+
runtime.getCreateWidgetIndex(this),
10381081
this.left,
10391082
this.top,
10401083
this.width,
Binary file not shown.

packages/project-editor/flow/runtime/lvgl_runtime_v8.3.js

+24-19
Original file line numberDiff line numberDiff line change
@@ -969,25 +969,27 @@ function dbg(text) {
969969
// === Body ===
970970

971971
var ASM_CONSTS = {
972-
1034880: ($0) => { startToDebuggerMessage($0); },
973-
1034912: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
974-
1034987: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
975-
1035062: ($0) => { finishToDebuggerMessage($0); },
976-
1035095: ($0, $1) => { return getLvglScreenByName($0, UTF8ToString($1)); },
977-
1035149: ($0, $1) => { return getLvglObjectByName($0, UTF8ToString($1)); },
978-
1035203: ($0, $1) => { return getLvglGroupByName($0, UTF8ToString($1)); },
979-
1035256: ($0, $1) => { return getLvglStyleByName($0, UTF8ToString($1)); },
980-
1035309: ($0, $1) => { return getLvglImageByName($0, UTF8ToString($1)); },
981-
1035362: ($0, $1, $2) => { lvglObjAddStyle($0, $1, $2); },
982-
1035395: ($0, $1, $2) => { lvglObjRemoveStyle($0, $1, $2); },
983-
1035431: ($0, $1) => { lvglSetColorTheme($0, UTF8ToString($1)); },
984-
1035476: ($0, $1, $2, $3, $4, $5) => { return eez_mqtt_init($0, UTF8ToString($1), UTF8ToString($2), $3, UTF8ToString($4), UTF8ToString($5)); },
985-
1035582: ($0, $1) => { return eez_mqtt_deinit($0, $1); },
986-
1035618: ($0, $1) => { return eez_mqtt_connect($0, $1); },
987-
1035655: ($0, $1) => { return eez_mqtt_disconnect($0, $1); },
988-
1035695: ($0, $1, $2) => { return eez_mqtt_subscribe($0, $1, UTF8ToString($2)); },
989-
1035752: ($0, $1, $2) => { return eez_mqtt_unsubscribe($0, $1, UTF8ToString($2)); },
990-
1035811: ($0, $1, $2, $3) => { return eez_mqtt_publish($0, $1, UTF8ToString($2), UTF8ToString($3)); }
972+
1034944: ($0) => { startToDebuggerMessage($0); },
973+
1034976: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
974+
1035051: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
975+
1035126: ($0) => { finishToDebuggerMessage($0); },
976+
1035159: ($0, $1) => { lvglCreateScreen($0, $1); },
977+
1035189: ($0, $1) => { lvglDeleteScreen($0, $1); },
978+
1035219: ($0, $1) => { return getLvglScreenByName($0, UTF8ToString($1)); },
979+
1035273: ($0, $1) => { return getLvglObjectByName($0, UTF8ToString($1)); },
980+
1035327: ($0, $1) => { return getLvglGroupByName($0, UTF8ToString($1)); },
981+
1035380: ($0, $1) => { return getLvglStyleByName($0, UTF8ToString($1)); },
982+
1035433: ($0, $1) => { return getLvglImageByName($0, UTF8ToString($1)); },
983+
1035486: ($0, $1, $2) => { lvglObjAddStyle($0, $1, $2); },
984+
1035519: ($0, $1, $2) => { lvglObjRemoveStyle($0, $1, $2); },
985+
1035555: ($0, $1) => { lvglSetColorTheme($0, UTF8ToString($1)); },
986+
1035600: ($0, $1, $2, $3, $4, $5) => { return eez_mqtt_init($0, UTF8ToString($1), UTF8ToString($2), $3, UTF8ToString($4), UTF8ToString($5)); },
987+
1035706: ($0, $1) => { return eez_mqtt_deinit($0, $1); },
988+
1035742: ($0, $1) => { return eez_mqtt_connect($0, $1); },
989+
1035779: ($0, $1) => { return eez_mqtt_disconnect($0, $1); },
990+
1035819: ($0, $1, $2) => { return eez_mqtt_subscribe($0, $1, UTF8ToString($2)); },
991+
1035876: ($0, $1, $2) => { return eez_mqtt_unsubscribe($0, $1, UTF8ToString($2)); },
992+
1035935: ($0, $1, $2, $3) => { return eez_mqtt_publish($0, $1, UTF8ToString($2), UTF8ToString($3)); }
991993
};
992994

993995

@@ -4727,6 +4729,7 @@ var _setDebuggerMessageSubsciptionFilter = Module['_setDebuggerMessageSubsciptio
47274729
var _lvglCreateGroup = Module['_lvglCreateGroup'] = createExportWrapper('lvglCreateGroup');
47284730
var _lvglAddScreenLoadedEventHandler = Module['_lvglAddScreenLoadedEventHandler'] = createExportWrapper('lvglAddScreenLoadedEventHandler');
47294731
var _lvglGroupAddObject = Module['_lvglGroupAddObject'] = createExportWrapper('lvglGroupAddObject');
4732+
var _lvglGroupRemoveObjectsForScreen = Module['_lvglGroupRemoveObjectsForScreen'] = createExportWrapper('lvglGroupRemoveObjectsForScreen');
47304733
var _lvglCreateScreen = Module['_lvglCreateScreen'] = createExportWrapper('lvglCreateScreen');
47314734
var _lvglCreateContainer = Module['_lvglCreateContainer'] = createExportWrapper('lvglCreateContainer');
47324735
var _lvglCreateLabel = Module['_lvglCreateLabel'] = createExportWrapper('lvglCreateLabel');
@@ -4776,6 +4779,8 @@ var _lvglCreateTileView = Module['_lvglCreateTileView'] = createExportWrapper('l
47764779
var _lvglCreateWindow = Module['_lvglCreateWindow'] = createExportWrapper('lvglCreateWindow');
47774780
var _lvglScreenLoad = Module['_lvglScreenLoad'] = createExportWrapper('lvglScreenLoad');
47784781
var _lvglDeleteObject = Module['_lvglDeleteObject'] = createExportWrapper('lvglDeleteObject');
4782+
var _lvglDeleteObjectIndex = Module['_lvglDeleteObjectIndex'] = createExportWrapper('lvglDeleteObjectIndex');
4783+
var _lvglDeletePageFlowState = Module['_lvglDeletePageFlowState'] = createExportWrapper('lvglDeletePageFlowState');
47794784
var _lvglObjAddFlag = Module['_lvglObjAddFlag'] = createExportWrapper('lvglObjAddFlag');
47804785
var _lvglObjClearFlag = Module['_lvglObjClearFlag'] = createExportWrapper('lvglObjClearFlag');
47814786
var _lvglObjHasFlag = Module['_lvglObjHasFlag'] = createExportWrapper('lvglObjHasFlag');
Binary file not shown.

packages/project-editor/flow/runtime/lvgl_runtime_v9.0.js

+24-19
Original file line numberDiff line numberDiff line change
@@ -969,25 +969,27 @@ function dbg(text) {
969969
// === Body ===
970970

971971
var ASM_CONSTS = {
972-
1031824: ($0) => { startToDebuggerMessage($0); },
973-
1031856: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
974-
1031931: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
975-
1032006: ($0) => { finishToDebuggerMessage($0); },
976-
1032039: ($0, $1) => { return getLvglScreenByName($0, UTF8ToString($1)); },
977-
1032093: ($0, $1) => { return getLvglObjectByName($0, UTF8ToString($1)); },
978-
1032147: ($0, $1) => { return getLvglGroupByName($0, UTF8ToString($1)); },
979-
1032200: ($0, $1) => { return getLvglStyleByName($0, UTF8ToString($1)); },
980-
1032253: ($0, $1) => { return getLvglImageByName($0, UTF8ToString($1)); },
981-
1032306: ($0, $1, $2) => { lvglObjAddStyle($0, $1, $2); },
982-
1032339: ($0, $1, $2) => { lvglObjRemoveStyle($0, $1, $2); },
983-
1032375: ($0, $1) => { lvglSetColorTheme($0, UTF8ToString($1)); },
984-
1032420: ($0, $1, $2, $3, $4, $5) => { return eez_mqtt_init($0, UTF8ToString($1), UTF8ToString($2), $3, UTF8ToString($4), UTF8ToString($5)); },
985-
1032526: ($0, $1) => { return eez_mqtt_deinit($0, $1); },
986-
1032562: ($0, $1) => { return eez_mqtt_connect($0, $1); },
987-
1032599: ($0, $1) => { return eez_mqtt_disconnect($0, $1); },
988-
1032639: ($0, $1, $2) => { return eez_mqtt_subscribe($0, $1, UTF8ToString($2)); },
989-
1032696: ($0, $1, $2) => { return eez_mqtt_unsubscribe($0, $1, UTF8ToString($2)); },
990-
1032755: ($0, $1, $2, $3) => { return eez_mqtt_publish($0, $1, UTF8ToString($2), UTF8ToString($3)); }
972+
1031872: ($0) => { startToDebuggerMessage($0); },
973+
1031904: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
974+
1031979: ($0, $1, $2) => { writeDebuggerBuffer($0, new Uint8Array(Module.HEAPU8.buffer, $1, $2)); },
975+
1032054: ($0) => { finishToDebuggerMessage($0); },
976+
1032087: ($0, $1) => { lvglCreateScreen($0, $1); },
977+
1032117: ($0, $1) => { lvglDeleteScreen($0, $1); },
978+
1032147: ($0, $1) => { return getLvglScreenByName($0, UTF8ToString($1)); },
979+
1032201: ($0, $1) => { return getLvglObjectByName($0, UTF8ToString($1)); },
980+
1032255: ($0, $1) => { return getLvglGroupByName($0, UTF8ToString($1)); },
981+
1032308: ($0, $1) => { return getLvglStyleByName($0, UTF8ToString($1)); },
982+
1032361: ($0, $1) => { return getLvglImageByName($0, UTF8ToString($1)); },
983+
1032414: ($0, $1, $2) => { lvglObjAddStyle($0, $1, $2); },
984+
1032447: ($0, $1, $2) => { lvglObjRemoveStyle($0, $1, $2); },
985+
1032483: ($0, $1) => { lvglSetColorTheme($0, UTF8ToString($1)); },
986+
1032528: ($0, $1, $2, $3, $4, $5) => { return eez_mqtt_init($0, UTF8ToString($1), UTF8ToString($2), $3, UTF8ToString($4), UTF8ToString($5)); },
987+
1032634: ($0, $1) => { return eez_mqtt_deinit($0, $1); },
988+
1032670: ($0, $1) => { return eez_mqtt_connect($0, $1); },
989+
1032707: ($0, $1) => { return eez_mqtt_disconnect($0, $1); },
990+
1032747: ($0, $1, $2) => { return eez_mqtt_subscribe($0, $1, UTF8ToString($2)); },
991+
1032804: ($0, $1, $2) => { return eez_mqtt_unsubscribe($0, $1, UTF8ToString($2)); },
992+
1032863: ($0, $1, $2, $3) => { return eez_mqtt_publish($0, $1, UTF8ToString($2), UTF8ToString($3)); }
991993
};
992994

993995

@@ -4727,6 +4729,7 @@ var _setDebuggerMessageSubsciptionFilter = Module['_setDebuggerMessageSubsciptio
47274729
var _lvglCreateGroup = Module['_lvglCreateGroup'] = createExportWrapper('lvglCreateGroup');
47284730
var _lvglAddScreenLoadedEventHandler = Module['_lvglAddScreenLoadedEventHandler'] = createExportWrapper('lvglAddScreenLoadedEventHandler');
47294731
var _lvglGroupAddObject = Module['_lvglGroupAddObject'] = createExportWrapper('lvglGroupAddObject');
4732+
var _lvglGroupRemoveObjectsForScreen = Module['_lvglGroupRemoveObjectsForScreen'] = createExportWrapper('lvglGroupRemoveObjectsForScreen');
47304733
var _lvglCreateScreen = Module['_lvglCreateScreen'] = createExportWrapper('lvglCreateScreen');
47314734
var _lvglCreateContainer = Module['_lvglCreateContainer'] = createExportWrapper('lvglCreateContainer');
47324735
var _lvglCreateLabel = Module['_lvglCreateLabel'] = createExportWrapper('lvglCreateLabel');
@@ -4776,6 +4779,8 @@ var _lvglCreateTileView = Module['_lvglCreateTileView'] = createExportWrapper('l
47764779
var _lvglCreateWindow = Module['_lvglCreateWindow'] = createExportWrapper('lvglCreateWindow');
47774780
var _lvglScreenLoad = Module['_lvglScreenLoad'] = createExportWrapper('lvglScreenLoad');
47784781
var _lvglDeleteObject = Module['_lvglDeleteObject'] = createExportWrapper('lvglDeleteObject');
4782+
var _lvglDeleteObjectIndex = Module['_lvglDeleteObjectIndex'] = createExportWrapper('lvglDeleteObjectIndex');
4783+
var _lvglDeletePageFlowState = Module['_lvglDeletePageFlowState'] = createExportWrapper('lvglDeletePageFlowState');
47794784
var _lvglObjAddFlag = Module['_lvglObjAddFlag'] = createExportWrapper('lvglObjAddFlag');
47804785
var _lvglObjClearFlag = Module['_lvglObjClearFlag'] = createExportWrapper('lvglObjClearFlag');
47814786
var _lvglObjHasFlag = Module['_lvglObjHasFlag'] = createExportWrapper('lvglObjHasFlag');
Binary file not shown.

packages/project-editor/flow/runtime/wasm-runtime.tsx

+13
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,11 @@ export class WasmRuntime extends RemoteRuntime {
270270
this.displayWidth,
271271
this.displayHeight,
272272
this.projectStore.project.settings.general.darkTheme,
273+
this.projectStore.project.settings.build.screensLifetimeSupport
274+
? this.projectStore.lvglIdentifiers.userPages.map(
275+
page => page.deleteOnScreenUnload
276+
)
277+
: undefined,
273278
(className: string) => getClassByName(this.projectStore, className),
274279
(key: string) => {
275280
return this.projectStore.runtimeSettings.readSettings(key);
@@ -426,6 +431,14 @@ export class WasmRuntime extends RemoteRuntime {
426431
this.lgvlPageRuntime?.setColorTheme(
427432
workerToRenderMessage.lvglSetColorTheme.themeName
428433
);
434+
} else if (workerToRenderMessage.lvglCreateScreen) {
435+
this.lgvlPageRuntime?.lvglCreateScreen(
436+
workerToRenderMessage.lvglCreateScreen.screenIndex
437+
);
438+
} else if (workerToRenderMessage.lvglDeleteScreen) {
439+
this.lgvlPageRuntime?.lvglDeleteScreen(
440+
workerToRenderMessage.lvglDeleteScreen.screenIndex
441+
);
429442
}
430443
this.onWorkerMessageAsync(workerToRenderMessage);
431444
return undefined;

0 commit comments

Comments
 (0)