Skip to content

Commit 56ac854

Browse files
committed
eez-gui-lite project type
1 parent 1794ccd commit 56ac854

Some content is hidden

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

73 files changed

+9861
-460
lines changed

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

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,132 @@ export interface IWasmFlowRuntime {
740740
_lvglCreateAnim(setDelay: boolean, delay: number, setRepeatDelay: boolean, repeatDelay: number, setRepeatCount: boolean, repeatCount: number): number;
741741

742742
_eez_flow_init_themes(themeNames: number, numThemes: number, changeColorTheme: number, themeColors: number, numColorsPerTheme: number);
743+
744+
// EEZ-GUI Lite
745+
746+
_initEezGuiLite(displayWidth: number, displayHeight: number): void;
747+
748+
// EEZ-GUI Lite — colors, fonts, styles
749+
_setColors(colorsPtr: number, numColors: number): void;
750+
_setFonts(fontsPtr: number, numFonts: number): void;
751+
_setStyles(stylesPtr: number, numStyles: number): void;
752+
753+
// EEZ-GUI Lite — widget allocation
754+
_allocTextWidget(): number;
755+
_allocButtonWidget(): number;
756+
_allocRectangleWidget(): number;
757+
_allocSwitchWidget(): number;
758+
_allocSelectWidget(): number;
759+
_allocContainerWidget(): number;
760+
_freeWidget(widgetPtr: number): void;
761+
762+
// EEZ-GUI Lite — widget field setters
763+
_setWidgetFlags(widgetPtr: number, flags: number): void;
764+
_setWidgetGeometry(widgetPtr: number, x: number, y: number, w: number, h: number): void;
765+
_setWidgetStyle(widgetPtr: number, style: number): void;
766+
_setWidgetVisible(widgetPtr: number, isVisible: number): void;
767+
_setTextWidgetText(widgetPtr: number, textProp: number): void;
768+
_setButtonWidgetText(widgetPtr: number, textProp: number): void;
769+
_setSwitchWidgetChecked(widgetPtr: number, isCheckedProp: number): void;
770+
771+
// EEZ-GUI Lite — page rendering
772+
_startPage(pageDataPtr: number, style: number): void;
773+
_endPage(): void;
774+
_renderTextWidget(widgetPtr: number): void;
775+
_renderButtonWidget(widgetPtr: number): void;
776+
_renderRectangleWidget(widgetPtr: number): void;
777+
_renderSwitchWidget(widgetPtr: number): void;
778+
_renderSelectBegin(widgetPtr: number): void;
779+
_renderSelectEnd(widgetPtr: number): void;
780+
_renderContainerBegin(widgetPtr: number): void;
781+
_renderContainerEnd(widgetPtr: number): void;
782+
783+
// EEZ-GUI Lite — input and refresh
784+
_pointerInput(x: number, y: number, pressed: boolean): void;
785+
_requestRefresh(): void;
786+
787+
// EEZ-GUI Lite — struct sizes and offsets
788+
_sizeofStyle(): number;
789+
_sizeofColor(): number;
790+
_sizeofFontData(): number;
791+
_sizeofGlyphData(): number;
792+
_sizeofGlyphsGroup(): number;
793+
_sizeofTextWidget(): number;
794+
_sizeofButtonWidget(): number;
795+
_sizeofRectangleWidget(): number;
796+
_sizeofSwitchWidget(): number;
797+
_sizeofSelectWidget(): number;
798+
_sizeofContainerWidget(): number;
799+
800+
// EEZ-GUI Lite — style struct offsets
801+
_offsetofStyleFlags(): number;
802+
_offsetofStyleBgColor(): number;
803+
_offsetofStyleColor(): number;
804+
_offsetofStyleActiveBgColor(): number;
805+
_offsetofStyleActiveColor(): number;
806+
_offsetofStyleBorderSizeTop(): number;
807+
_offsetofStyleBorderSizeRight(): number;
808+
_offsetofStyleBorderSizeBottom(): number;
809+
_offsetofStyleBorderSizeLeft(): number;
810+
_offsetofStyleBorderColor(): number;
811+
_offsetofStyleFont(): number;
812+
_offsetofStylePaddingTop(): number;
813+
_offsetofStylePaddingRight(): number;
814+
_offsetofStylePaddingBottom(): number;
815+
_offsetofStylePaddingLeft(): number;
816+
817+
// EEZ-GUI Lite — glyph_data_t offsets
818+
_offsetofGlyphDx(): number;
819+
_offsetofGlyphW(): number;
820+
_offsetofGlyphH(): number;
821+
_offsetofGlyphX(): number;
822+
_offsetofGlyphY(): number;
823+
_offsetofGlyphPixelsIndex(): number;
824+
825+
// EEZ-GUI Lite — glyphs_group_t offsets
826+
_offsetofGroupEncoding(): number;
827+
_offsetofGroupGlyphIndex(): number;
828+
_offsetofGroupLength(): number;
829+
830+
// EEZ-GUI Lite — font_data_t offsets
831+
_offsetofFontAscent(): number;
832+
_offsetofFontDescent(): number;
833+
_offsetofFontEncodingStart(): number;
834+
_offsetofFontEncodingEnd(): number;
835+
_offsetofFontGroups(): number;
836+
_offsetofFontGlyphs(): number;
837+
_offsetofFontPixels(): number;
838+
839+
// EEZ-GUI Lite — widget struct offsets
840+
_offsetofWidgetFlags(): number;
841+
_offsetofWidgetX(): number;
842+
_offsetofWidgetY(): number;
843+
_offsetofWidgetW(): number;
844+
_offsetofWidgetH(): number;
845+
_offsetofWidgetStyle(): number;
846+
_offsetofWidgetVisible(): number;
847+
_offsetofTextWidgetText(): number;
848+
_offsetofButtonWidgetText(): number;
849+
_offsetofSwitchWidgetChecked(): number;
850+
851+
// EEZ-GUI Lite — constants
852+
_getWidgetFlagClickable(): number;
853+
_getStyleFlagHorzAlignLeft(): number;
854+
_getStyleFlagHorzAlignRight(): number;
855+
_getStyleFlagHorzAlignCenter(): number;
856+
_getStyleFlagVertAlignTop(): number;
857+
_getStyleFlagVertAlignBottom(): number;
858+
_getStyleFlagVertAlignCenter(): number;
859+
_getStyleFlagBlink(): number;
860+
861+
// EEZ-GUI Lite — color helper
862+
_makeColor(r: number, g: number, b: number): number;
863+
864+
// EEZ-GUI Lite — JS callback registration (set on Module object)
865+
_jsGetStrProp?: (prop: number) => number;
866+
_jsGetBoolProp?: (prop: number) => number;
867+
_jsGetIntProp?: (prop: number) => number;
868+
_jsOnEvent?: (widgetPtr: number, eventType: number) => void;
743869
}
744870

745871
export interface IDashboardComponentContext {

packages/eez-studio-ui/_stylesheets/app.less

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,16 +1395,39 @@ button.EezStudio_Action {
13951395
color: @textColor;
13961396
}
13971397

1398+
.flexlayout__tabset_tabbar_inner_tab_container {
1399+
position: relative !important;
1400+
width: 100% !important;
1401+
}
1402+
1403+
.flexlayout__tab_button {
1404+
min-width: 0;
1405+
flex-shrink: 1;
1406+
overflow: hidden;
1407+
}
1408+
13981409
.flexlayout__tab_button_content {
13991410
font-family: var(--bs-font-sans-serif) !important;
14001411
font-size: 14px !important;
1412+
display: block !important;
1413+
overflow: hidden;
1414+
1415+
white-space: nowrap;
1416+
}
1417+
1418+
.flexlayout__tab_button_overflow {
1419+
display: none !important;
14011420
}
14021421

14031422
.flexlayout__tab_button_leading .EezStudio_Icon {
14041423
color: @textColor;
14051424
opacity: 0.9;
14061425
}
14071426

1427+
.flexlayout__tab_toolbar {
1428+
padding: 0;
1429+
}
1430+
14081431
////////////////////////////////////////////////////////////////////////////////
14091432

14101433
.EezStudio_CenteredLoader {

packages/main/window.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ ipcMain.on("reload", (event: any) => {
230230
const window = findWindowByWebContents(event.sender);
231231
if (window) {
232232
window.browserWindow.webContents.reload();
233-
window.browserWindow.webContents.clearHistory();
233+
window.browserWindow.webContents.navigationHistory.clear();
234234
}
235235
});
236236

packages/project-editor/build/assets.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ import { ProjectEditor } from "project-editor/project-editor-interface";
9191
import type { AssetsMap } from "eez-studio-types";
9292
import { isDashboardProject } from "project-editor/project/project-type-traits";
9393
import type { LVGLStyle } from "project-editor/lvgl/style";
94+
import { BuildEezGuiLite } from "project-editor/eez-gui-lite/build";
9495

9596
export { DummyDataBuffer, DataBuffer } from "project-editor/build/data-buffer";
9697

@@ -1870,6 +1871,17 @@ export async function buildAssets(
18701871

18711872
result.EEZ_FLOW_IS_USING_CRYPTO_SHA256 = assets.isUsingCrypyoSha256;
18721873

1874+
// build eez-gui-lite source code
1875+
if (sectionNames!.indexOf("EEZ_GUI_LITE_DECL") !== -1 || sectionNames!.indexOf("EEZ_GUI_LITE_DEF") !== -1) {
1876+
const buildEezGuiLite = new BuildEezGuiLite(assets);
1877+
if (sectionNames!.indexOf("EEZ_GUI_LITE_DECL") !== -1) {
1878+
result.EEZ_GUI_LITE_DECL = buildEezGuiLite.buildDecl();
1879+
}
1880+
if (sectionNames!.indexOf("EEZ_GUI_LITE_DEF") !== -1) {
1881+
result.EEZ_GUI_LITE_DEF = buildEezGuiLite.BuildDef();
1882+
}
1883+
}
1884+
18731885
return Object.assign(
18741886
result,
18751887
await buildVariables(assets, sectionNames),

packages/project-editor/build/build.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import { buildAssets } from "project-editor/build/assets";
3737
import { buildScpi } from "project-editor/build/scpi";
3838
import { generateSourceCodeForEezFramework } from "project-editor/lvgl/build";
3939
import { cleanupSourceFile } from "project-editor/build/cleanup-c-source-files";
40+
import { generateSourceCodeForEezGuiLite } from "project-editor/eez-gui-lite/build";
4041

4142
////////////////////////////////////////////////////////////////////////////////
4243

@@ -605,6 +606,14 @@ export async function build(
605606
);
606607
}
607608

609+
if (project.projectTypeTraits.isEezGuiLite) {
610+
await generateSourceCodeForEezGuiLite(
611+
project,
612+
destinationFolderPath || ""
613+
);
614+
}
615+
616+
608617
// Disable tracking after file generation
609618
disableBuildTracking();
610619
} else {

packages/project-editor/core/object.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ export const enum ProjectType {
9191
APPLET = "applet",
9292
DASHBOARD = "dashboard",
9393
LVGL = "lvgl",
94-
IEXT = "iext"
94+
IEXT = "iext",
95+
EEZ_GUI_LITE = "eez-gui-lite"
9596
}
9697

9798
////////////////////////////////////////////////////////////////////////////////

packages/project-editor/core/objectAdapter.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ import {
5656
isObjectReferencable,
5757
canContain,
5858
getProjectEditorDataFromClipboard,
59-
getAncestorOfType,
6059
getAddItemName
6160
} from "project-editor/store";
6261

@@ -766,9 +765,8 @@ export class TreeObjectAdapter {
766765
// Add Widget
767766
if (
768767
editable &&
769-
getAncestorOfType(
770-
selectedObject || parentObject,
771-
ProjectEditor.FlowClass.classInfo
768+
ProjectEditor.getFlow(
769+
selectedObject || parentObject
772770
) &&
773771
getKey(parentObject) != "localVariables" &&
774772
getKey(parentObject) != "actions" &&

packages/project-editor/core/search.ts

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ import {
4242
SCPI_PART_QUERY_WITH_ASSIGNMENT
4343
} from "eez-studio-shared/scpi-parser";
4444

45-
import type { Component } from "project-editor/flow/component";
46-
4745
import {
4846
ValueType,
4947
variableTypeProperty
@@ -371,10 +369,7 @@ export function* searchForObjectDependencies(
371369
valueObject
372370
};
373371

374-
const component = getAncestorOfType<Component>(
375-
valueObject,
376-
ProjectEditor.ComponentClass.classInfo
377-
);
372+
const component = ProjectEditor.getComponent(valueObject);
378373
let expressions;
379374

380375
if (flowProperty && flowProperty == "template-literal") {
@@ -491,7 +486,7 @@ export function* searchForReference(
491486
object instanceof ProjectEditor.VariableClass ||
492487
object instanceof ProjectEditor.UserPropertyClass
493488
) {
494-
let flow = getAncestorOfType(object, ProjectEditor.FlowClass.classInfo);
489+
let flow = ProjectEditor.getFlow(object);
495490
if (flow) {
496491
identifierType = "local-variable";
497492
root = flow;
@@ -515,16 +510,10 @@ export function* searchForReference(
515510
enumType = `enum:${parentEnum!.name}`;
516511
} else if (object instanceof ProjectEditor.CustomInputClass) {
517512
identifierType = "input";
518-
root = getAncestorOfType(
519-
object,
520-
ProjectEditor.ComponentClass.classInfo
521-
)!;
513+
root = ProjectEditor.getComponent(object);
522514
} else if (object instanceof ProjectEditor.CustomOutputClass) {
523515
identifierType = "output";
524-
root = getAncestorOfType(
525-
object,
526-
ProjectEditor.ComponentClass.classInfo
527-
)!;
516+
root = ProjectEditor.getComponent(object);
528517
} else if (object instanceof ProjectEditor.ImportDirectiveClass) {
529518
identifierType = "imported-project";
530519
}

packages/project-editor/core/util.tsx

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { dialog, getCurrentWindow } from "@electron/remote";
22
import React from "react";
3-
import { URL } from "url";
43

54
import { IDialogOptions, showDialog } from "eez-studio-ui/dialog";
65
import {
@@ -124,14 +123,9 @@ export function onAfterPaste(
124123
export const SCRAPBOOK_ITEM_FILE_PREFIX = "scrapbook://";
125124

126125
export function isValidUrl(s: string) {
127-
try {
128-
if (s.startsWith(SCRAPBOOK_ITEM_FILE_PREFIX)) {
129-
return true;
130-
}
131-
132-
const url = new URL(s);
133-
return url.protocol === "http:" || url.protocol === "https:";
134-
} catch (err) {
135-
return false;
126+
if (s.startsWith(SCRAPBOOK_ITEM_FILE_PREFIX)) {
127+
return true;
136128
}
129+
130+
return /^https?:\/\/.+/.test(s);
137131
}

0 commit comments

Comments
 (0)