From 9a3a1b084a5f8fc35f5b01c4c9fccbbe80b382d3 Mon Sep 17 00:00:00 2001 From: PwLDev <64767383+PwLDev@users.noreply.github.com> Date: Mon, 4 May 2026 11:38:58 -0700 Subject: [PATCH] new types and classes --- lib/index.ts | 7 + lib/milsko.ts | 14 ++ lib/structs.ts | 4 +- lib/types.ts | 208 ++++++++++++++++++++++++++++ lib/widget.ts | 268 +++++++++++++++++++++++++++++++++++++ lib/widgets/box.ts | 69 ++++++++++ lib/widgets/button.ts | 69 ++++++++++ lib/widgets/checkbox.ts | 21 +++ lib/widgets/combobox.ts | 33 +++++ lib/widgets/entry.ts | 33 +++++ lib/widgets/frame.ts | 33 +++++ lib/widgets/image.ts | 57 ++++++++ lib/widgets/index.ts | 19 +++ lib/widgets/label.ts | 81 +++++++++++ lib/widgets/listbox.ts | 45 +++++++ lib/widgets/menu.ts | 9 ++ lib/widgets/numberentry.ts | 21 +++ lib/widgets/progressbar.ts | 45 +++++++ lib/widgets/radiobox.ts | 21 +++ lib/widgets/scrollbar.ts | 81 +++++++++++ lib/widgets/submenu.ts | 21 +++ lib/widgets/subwindow.ts | 33 +++++ lib/widgets/treeview.ts | 33 +++++ lib/widgets/viewport.ts | 9 ++ lib/widgets/window.ts | 82 ++++++++++++ scripts/bindgen.js | 10 +- 26 files changed, 1324 insertions(+), 2 deletions(-) create mode 100644 lib/milsko.ts create mode 100644 lib/types.ts create mode 100644 lib/widget.ts create mode 100644 lib/widgets/box.ts create mode 100644 lib/widgets/button.ts create mode 100644 lib/widgets/checkbox.ts create mode 100644 lib/widgets/combobox.ts create mode 100644 lib/widgets/entry.ts create mode 100644 lib/widgets/frame.ts create mode 100644 lib/widgets/image.ts create mode 100644 lib/widgets/index.ts create mode 100644 lib/widgets/label.ts create mode 100644 lib/widgets/listbox.ts create mode 100644 lib/widgets/menu.ts create mode 100644 lib/widgets/numberentry.ts create mode 100644 lib/widgets/progressbar.ts create mode 100644 lib/widgets/radiobox.ts create mode 100644 lib/widgets/scrollbar.ts create mode 100644 lib/widgets/submenu.ts create mode 100644 lib/widgets/subwindow.ts create mode 100644 lib/widgets/treeview.ts create mode 100644 lib/widgets/viewport.ts create mode 100644 lib/widgets/window.ts diff --git a/lib/index.ts b/lib/index.ts index e69de29..198a472 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -0,0 +1,7 @@ +export * from "./constants"; +export * from "./enums"; +export * from "./structs"; +export * from "./types"; +export * from "./widgets"; + +export { BaseWidget, NativeClasses, Pixmap } from "./milsko"; diff --git a/lib/milsko.ts b/lib/milsko.ts new file mode 100644 index 0000000..a56b6f4 --- /dev/null +++ b/lib/milsko.ts @@ -0,0 +1,14 @@ +// @ts-ignore +import binding from "node-gyp-build"; +import { join } from "node:path"; +import { + BaseWidgetConstructor, + MwNativeClasses, + PixmapConstructor +} from "./types"; + +export const BaseWidget: BaseWidgetConstructor = binding.BaseWidget; +export const NativeClasses: MwNativeClasses = binding.Classes; +export const Pixmap: PixmapConstructor = binding.Pixmap; + +export default binding(join(__dirname, "..")); diff --git a/lib/structs.ts b/lib/structs.ts index 5affa0a..2cb09ea 100644 --- a/lib/structs.ts +++ b/lib/structs.ts @@ -23,7 +23,9 @@ export interface MwRGB { blue: number; } -export interface MwMouse {} +export interface MwMouse { + point: MwPoint; +} export interface MwVulkanConfig { apiVersion: number; diff --git a/lib/types.ts b/lib/types.ts new file mode 100644 index 0000000..1b84dd9 --- /dev/null +++ b/lib/types.ts @@ -0,0 +1,208 @@ +import { MwCLIPBOARD, MwCOORDINATE } from "./enums"; +import { MwPoint, MwRect } from "./structs"; + +export type MwClass = object & { __brand: "MwClass" }; + +/** + * `BaseWidget` represents the lowest level form of widgets before the native layer. + * This class contains the fundamental native methods shared by all widgets. + */ +export interface BaseWidget { + area: MwRect; + isPending: boolean; + parent: BaseWidget; + children: BaseWidget[]; + name: string; + cursorCoord: MwPoint; + screenSize: MwRect; + coordinateType: MwCOORDINATE; + nativeClass: MwClass; + + /** + * Sets new position and size to this widget + * @param area New rect + */ + setArea(area: MwRect): this; + + /** + * Moves this widget to an absolute position + * @param x X position + * @param y Y position + */ + move(x: number, y: number): this; + + /** + * Changes the size dimension of this widget + * @param width New width + * @param height New height + */ + resize(width: number, height: number): this; + + /** + * Runs a single step through the event loop + * @returns Wether the step was successful + */ + step(): boolean; + + /** + * Start the main loop on this widget + */ + loop(): this; + + /** + * Show/hide this widget + * @param toggle Wether the widget is shown + */ + show(toggle: boolean): this; + + /** + * Hides the cursor when being hovered over this widget + */ + hideCursor(): this; + + /** + * Grabs the pointer and pins it to the center of this widget + * @param toggle Wether the pointer is grabbed + */ + grabPointer(toggle: boolean): this; + + /** + * Focus this widget + */ + focus(): this; + + /** + * Adds this widget to the tick handler list + */ + addTickList(): this; + + /** + * Forces this widget to render + */ + forceRender(): this; + + /** + * Reparents this widget to a new parent + * @param widget New parent + */ + reparent(widget: BaseWidget): this; + + /** + * Adds another widget as child of this one + * @param widgets Widgets to add + */ + addChild(...widgets: BaseWidget[]): this; + + /** + * Destroys this widget + */ + destroy(): null; + + /** + * Queues this widget to get clipboard content. + * This is ignored in backends that aren't or X11/Wayland. + * @param type Clipboard type to get, if you are unsure just use `MwCLIPBOARD_MAIN` + */ + getClipboard(type: MwCLIPBOARD): undefined; + + /** + * Sets a value to an integer property by its key + * @param key Prefixed property key + * @param value Value to assign to property + */ + setInteger(key: string, value: number): this; + + /** + * Sets a value to a string property by its key + * @param key Prefixed property key + * @param value Value to assign to property + */ + setString(key: string, value: string): this; + + /** + * Sets the value of a void* property by its key. + * You most likely shouldn't use this unless you are extending BaseWidget + * @param key Prefixed property key + */ + setVoid(key: string, value: unknown): this; + + /** + * Gets the value of an integer property by its key + * @param key Prefixed property key + */ + getInteger(key: string): number; + + /** + * Gets the value of a string property by its key + * @param key Prefixed property key + */ + getString(key: string): string; + + /** + * Gets the value of a void* property by its key. + * You most likely shouldn't use this unless you are extending BaseWidget + * @param key Prefixed property key + */ + getVoid(key: string): unknown; +} + +export interface BaseWidgetConstructor { + new (cls: MwClass | null, options: WidgetOptions): BaseWidget; +} + +export interface MwNativeClasses { + Box: MwClass; + Button: MwClass; + CheckBox: MwClass; + Entry: MwClass; + Frame: MwClass; + Image: MwClass; + Label: MwClass; + ListBox: MwClass; + Menu: MwClass; + NumberEntry: MwClass; + ScrollBar: MwClass; + SubMenu: MwClass; + SubWindow: MwClass; + Viewport: MwClass; + Window: MwClass; + ProgressBar: MwClass; + RadioBox: MwClass; + ComboBox: MwClass; + TreeView: MwClass; +} + +export interface Pixmap { + size: MwRect; + + /** + * Get the raw data of this pixmap + */ + getRaw(): Buffer; + + /** + * Updates this pixmap using raw data + * @param data Image data to update + */ + reloadRaw(data: Buffer | ArrayBuffer): void; +} + +export interface PixmapOptions { + data?: Buffer; + width?: number; + height?: number; +} + +export interface PixmapConstructor { + new (cls: BaseWidget, options?: PixmapOptions): Pixmap; +} + +export interface WidgetOptions { + name?: string; + parent?: BaseWidget; + children?: BaseWidget[]; + x?: number; + y?: number; + width?: number; + height?: number; +} diff --git a/lib/widget.ts b/lib/widget.ts new file mode 100644 index 0000000..0257ec9 --- /dev/null +++ b/lib/widget.ts @@ -0,0 +1,268 @@ +import { BaseWidget } from "./milsko"; +import { Pixmap } from "./types"; + +export class Widget extends BaseWidget { + public setX(value: number): this { + return this.setInteger("Ix", value); + } + + get x(): number { + return this.getInteger("Ix"); + } + + set x(value: number) { + this.setInteger("Ix", value); + } + + public setY(value: number): this { + return this.setInteger("Iy", value); + } + + get y(): number { + return this.getInteger("Iy"); + } + + set y(value: number) { + this.setInteger("Iy", value); + } + + public setWidth(value: number): this { + return this.setInteger("Iwidth", value); + } + + get width(): number { + return this.getInteger("Iwidth"); + } + + set width(value: number) { + this.setInteger("Iwidth", value); + } + + public setHeight(value: number): this { + return this.setInteger("Iheight", value); + } + + get height(): number { + return this.getInteger("Iheight"); + } + + set height(value: number) { + this.setInteger("Iheight", value); + } + + public setModernLook(value: boolean): this { + return this.setInteger("ImodernLook", +value); + } + + get modernLook(): boolean { + return this.getInteger("ImodernLook") != 0; + } + + set modernLook(value: boolean) { + this.setInteger("ImodernLook", +value); + } + + public setBorderWidth(value: number): this { + return this.setInteger("IborderWidth", value); + } + + get borderWidth(): number { + return this.getInteger("IborderWidth"); + } + + set borderWidth(value: number) { + this.setInteger("IborderWidth", value); + } + + public setRatio(value: number): this { + return this.setInteger("Iratio", value); + } + + get ratio(): number { + return this.getInteger("Iratio"); + } + + set ratio(value: number) { + this.setInteger("Iratio", value); + } + + public setFixedSize(value: number): this { + return this.setInteger("IfixedSize", value); + } + + get fixedSize(): number { + return this.getInteger("IfixedSize"); + } + + set fixedSize(value: number) { + this.setInteger("IfixedSize", value); + } + + public setBitmapFont(value: boolean): this { + return this.setInteger("IbitmapFont", +value); + } + + get bitmapFont(): boolean { + return this.getInteger("IbitmapFont") != 0; + } + + set bitmapFont(value: boolean) { + this.setInteger("IbitmapFont", +value); + } + + public setForceInverted(value: boolean): this { + return this.setInteger("IforceInverted", +value); + } + + get forceInverted(): boolean { + return this.getInteger("IforceInverted") != 0; + } + + set forceInverted(value: boolean) { + this.setInteger("IforceInverted", +value); + } + + public setIsRounded(value: boolean): this { + return this.setInteger("IisRounded", +value); + } + + get isRounded(): boolean { + return this.getInteger("IisRounded") != 0; + } + + set isRounded(value: boolean) { + this.setInteger("IisRounded", +value); + } + + public setDarkTheme(value: boolean): this { + return this.setInteger("IdarkTheme", +value); + } + + get darkTheme(): boolean { + return this.getInteger("IdarkTheme") != 0; + } + + set darkTheme(value: boolean) { + this.setInteger("IdarkTheme", +value); + } + + public setUseMonospace(value: boolean): this { + return this.setInteger("IuseMonospace", +value); + } + + get useMonospace(): boolean { + return this.getInteger("IuseMonospace") != 0; + } + + set useMonospace(value: boolean) { + this.setInteger("IuseMonospace", +value); + } + + public setDarkThemeAutomatic(value: boolean): this { + return this.setInteger("IdarkThemeAutomatic", +value); + } + + get darkThemeAutomatic(): boolean { + return this.getInteger("IdarkThemeAutomatic") != 0; + } + + set darkThemeAutomatic(value: boolean) { + this.setInteger("IdarkThemeAutomatic", +value); + } + + public setWaitMS(value: number): this { + return this.setInteger("IwaitMS", value); + } + + get waitMS(): number { + return this.getInteger("IwaitMS"); + } + + set waitMS(value: number) { + this.setInteger("IwaitMS", value); + } + + public setBackground(value: string): this { + return this.setString("Sbackground", value); + } + + get background(): string { + return this.getString("Sbackground"); + } + + set background(value: string) { + this.setString("Sbackground", value); + } + + public setSubBackground(value: string): this { + return this.setString("SsubBackground", value); + } + + get subBackground(): string { + return this.getString("SsubBackground"); + } + + set subBackground(value: string) { + this.setString("SsubBackground", value); + } + + public setTitleBackground(value: string): this { + return this.setString("StitleBackground", value); + } + + get titleBackground(): string { + return this.getString("StitleBackground"); + } + + set titleBackground(value: string) { + this.setString("StitleBackground", value); + } + + public setForeground(value: string): this { + return this.setString("Sforeground", value); + } + + get foreground(): string { + return this.getString("Sforeground"); + } + + set foreground(value: string) { + this.setString("Sforeground", value); + } + + public setSubForeground(value: string): this { + return this.setString("SsubForeground", value); + } + + get subForeground(): string { + return this.getString("SsubForeground"); + } + + set subForeground(value: string) { + this.setString("SsubForeground", value); + } + + public setTitleForeground(value: string): this { + return this.setString("StitleForeground", value); + } + + get titleForeground(): string { + return this.getString("StitleForeground"); + } + + set titleForeground(value: string) { + this.setString("StitleForeground", value); + } + + public setBackgroundPixmap(value: Pixmap): this { + return this.setVoid("VbackgroundPixmap", value); + } + + get backgroundPixmap(): Pixmap { + return this.getVoid("VbackgroundPixmap") as Pixmap; + } + + set backgroundPixmap(value: Pixmap) { + this.setVoid("VbackgroundPixmap", value); + } +} diff --git a/lib/widgets/box.ts b/lib/widgets/box.ts new file mode 100644 index 0000000..f5afa67 --- /dev/null +++ b/lib/widgets/box.ts @@ -0,0 +1,69 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class Box extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.Box, options); + } + + public setOrientation(value: number): this { + return this.setInteger("Iorientation", value); + } + + get orientation(): number { + return this.getInteger("Iorientation"); + } + + set orientation(value: number) { + this.setInteger("Iorientation", value); + } + + public setMargin(value: number): this { + return this.setInteger("Imargin", value); + } + + get margin(): number { + return this.getInteger("Imargin"); + } + + set margin(value: number) { + this.setInteger("Imargin", value); + } + + public setPadding(value: number): this { + return this.setInteger("Ipadding", value); + } + + get padding(): number { + return this.getInteger("Ipadding"); + } + + set padding(value: number) { + this.setInteger("Ipadding", value); + } + + public setHasBorder(value: boolean): this { + return this.setInteger("IhasBorder", +value); + } + + get hasBorder(): boolean { + return this.getInteger("IhasBorder") != 0; + } + + set hasBorder(value: boolean) { + this.setInteger("IhasBorder", +value); + } + + public setInverted(value: boolean): this { + return this.setInteger("Iinverted", +value); + } + + get inverted(): boolean { + return this.getInteger("Iinverted") != 0; + } + + set inverted(value: boolean) { + this.setInteger("Iinverted", +value); + } +} diff --git a/lib/widgets/button.ts b/lib/widgets/button.ts new file mode 100644 index 0000000..8fbe2f6 --- /dev/null +++ b/lib/widgets/button.ts @@ -0,0 +1,69 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions, Pixmap } from "../types"; + +export class Button extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.Button, options); + } + + public setPixmap(value: Pixmap): this { + return this.setVoid("Vpixmap", value); + } + + get pixmap(): Pixmap { + return this.getVoid("Vpixmap") as Pixmap; + } + + set pixmap(value: Pixmap) { + this.setVoid("Vpixmap", value); + } + + public setText(value: string): this { + return this.setString("Stext", value); + } + + get text(): string { + return this.getString("Stext"); + } + + set text(value: string) { + this.setString("Stext", value); + } + + public setFlat(value: boolean): this { + return this.setInteger("Iflat", +value); + } + + get flat(): boolean { + return this.getInteger("Iflat") != 0; + } + + set flat(value: boolean) { + this.setInteger("Iflat", +value); + } + + public setPadding(value: number): this { + return this.setInteger("Ipadding", value); + } + + get padding(): number { + return this.getInteger("Ipadding"); + } + + set padding(value: number) { + this.setInteger("Ipadding", value); + } + + public setFillArea(value: number): this { + return this.setInteger("IfillArea", value); + } + + get fillArea(): number { + return this.getInteger("IfillArea"); + } + + set fillArea(value: number) { + this.setInteger("IfillArea", value); + } +} diff --git a/lib/widgets/checkbox.ts b/lib/widgets/checkbox.ts new file mode 100644 index 0000000..fc61f43 --- /dev/null +++ b/lib/widgets/checkbox.ts @@ -0,0 +1,21 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class CheckBox extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.CheckBox, options); + } + + public setChecked(value: boolean): this { + return this.setInteger("Ichecked", +value); + } + + get checked(): boolean { + return this.getInteger("Ichecked") != 0; + } + + set checked(value: boolean) { + this.setInteger("Ichecked", +value); + } +} diff --git a/lib/widgets/combobox.ts b/lib/widgets/combobox.ts new file mode 100644 index 0000000..754cc5d --- /dev/null +++ b/lib/widgets/combobox.ts @@ -0,0 +1,33 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class ComboBox extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.ComboBox, options); + } + + public setAreaShown(value: number): this { + return this.setInteger("IareaShown", value); + } + + get areaShown(): number { + return this.getInteger("IareaShown"); + } + + set areaShown(value: number) { + this.setInteger("IareaShown", value); + } + + public setValue(value: number): this { + return this.setInteger("Ivalue", value); + } + + get value(): number { + return this.getInteger("Ivalue"); + } + + set value(value: number) { + this.setInteger("Ivalue", value); + } +} diff --git a/lib/widgets/entry.ts b/lib/widgets/entry.ts new file mode 100644 index 0000000..099883b --- /dev/null +++ b/lib/widgets/entry.ts @@ -0,0 +1,33 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class Entry extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.Entry, options); + } + + public setText(value: string): this { + return this.setString("Stext", value); + } + + get text(): string { + return this.getString("Stext"); + } + + set text(value: string) { + this.setString("Stext", value); + } + + public setHideInput(value: boolean): this { + return this.setInteger("IhideInput", +value); + } + + get hideInput(): boolean { + return this.getInteger("IhideInput") != 0; + } + + set hideInput(value: boolean) { + this.setInteger("IhideInput", +value); + } +} diff --git a/lib/widgets/frame.ts b/lib/widgets/frame.ts new file mode 100644 index 0000000..18baa67 --- /dev/null +++ b/lib/widgets/frame.ts @@ -0,0 +1,33 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class Frame extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.Frame, options); + } + + public setHasBorder(value: boolean): this { + return this.setInteger("IhasBorder", +value); + } + + get hasBorder(): boolean { + return this.getInteger("IhasBorder") != 0; + } + + set hasBorder(value: boolean) { + this.setInteger("IhasBorder", +value); + } + + public setInverted(value: boolean): this { + return this.setInteger("Iinverted", +value); + } + + get inverted(): boolean { + return this.getInteger("Iinverted") != 0; + } + + set inverted(value: boolean) { + this.setInteger("Iinverted", +value); + } +} diff --git a/lib/widgets/image.ts b/lib/widgets/image.ts new file mode 100644 index 0000000..fb8ad31 --- /dev/null +++ b/lib/widgets/image.ts @@ -0,0 +1,57 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions, Pixmap } from "../types"; + +export class Image extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.Image, options); + } + + public setPixmap(value: Pixmap): this { + return this.setVoid("Vpixmap", value); + } + + get pixmap(): Pixmap { + return this.getVoid("Vpixmap") as Pixmap; + } + + set pixmap(value: Pixmap) { + this.setVoid("Vpixmap", value); + } + + public setHasBorder(value: boolean): this { + return this.setInteger("IhasBorder", +value); + } + + get hasBorder(): boolean { + return this.getInteger("IhasBorder") != 0; + } + + set hasBorder(value: boolean) { + this.setInteger("IhasBorder", +value); + } + + public setInverted(value: boolean): this { + return this.setInteger("Iinverted", +value); + } + + get inverted(): boolean { + return this.getInteger("Iinverted") != 0; + } + + set inverted(value: boolean) { + this.setInteger("Iinverted", +value); + } + + public setFillArea(value: number): this { + return this.setInteger("IfillArea", value); + } + + get fillArea(): number { + return this.getInteger("IfillArea"); + } + + set fillArea(value: number) { + this.setInteger("IfillArea", value); + } +} diff --git a/lib/widgets/index.ts b/lib/widgets/index.ts new file mode 100644 index 0000000..e844d7e --- /dev/null +++ b/lib/widgets/index.ts @@ -0,0 +1,19 @@ +export { Box } from "./box"; +export { Button } from "./button"; +export { CheckBox } from "./checkbox"; +export { Entry } from "./entry"; +export { Frame } from "./frame"; +export { Image } from "./image"; +export { Label } from "./label"; +export { ListBox } from "./listbox"; +export { Menu } from "./menu"; +export { NumberEntry } from "./numberentry"; +export { ScrollBar } from "./scrollbar"; +export { SubMenu } from "./submenu"; +export { Viewport } from "./viewport"; +export { Window } from "./window"; +export { ProgressBar } from "./progressbar"; +export { RadioBox } from "./radiobox"; +export { ComboBox } from "./combobox"; +export { TreeView } from "./treeview"; +export { SubWindow } from "./subwindow"; diff --git a/lib/widgets/label.ts b/lib/widgets/label.ts new file mode 100644 index 0000000..b5c423e --- /dev/null +++ b/lib/widgets/label.ts @@ -0,0 +1,81 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class Label extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.Label, options); + } + + public setText(value: string): this { + return this.setString("Stext", value); + } + + get text(): string { + return this.getString("Stext"); + } + + set text(value: string) { + this.setString("Stext", value); + } + + public setAlignment(value: number): this { + return this.setInteger("Ialignment", value); + } + + get alignment(): number { + return this.getInteger("Ialignment"); + } + + set alignment(value: number) { + this.setInteger("Ialignment", value); + } + + public setBold(value: boolean): this { + return this.setInteger("Ibold", +value); + } + + get bold(): boolean { + return this.getInteger("Ibold") != 0; + } + + set bold(value: boolean) { + this.setInteger("Ibold", +value); + } + + public setSevenSegment(value: boolean): this { + return this.setInteger("IsevenSegment", +value); + } + + get sevenSegment(): boolean { + return this.getInteger("IsevenSegment") != 0; + } + + set sevenSegment(value: boolean) { + this.setInteger("IsevenSegment", +value); + } + + public setLength(value: number): this { + return this.setInteger("Ilength", value); + } + + get length(): number { + return this.getInteger("Ilength"); + } + + set length(value: number) { + this.setInteger("Ilength", value); + } + + public setLeftPadding(value: number): this { + return this.setInteger("IleftPadding", value); + } + + get leftPadding(): number { + return this.getInteger("IleftPadding"); + } + + set leftPadding(value: number) { + this.setInteger("IleftPadding", value); + } +} diff --git a/lib/widgets/listbox.ts b/lib/widgets/listbox.ts new file mode 100644 index 0000000..f629b0f --- /dev/null +++ b/lib/widgets/listbox.ts @@ -0,0 +1,45 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class ListBox extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.ListBox, options); + } + + public setLeftPadding(value: number): this { + return this.setInteger("IleftPadding", value); + } + + get leftPadding(): number { + return this.getInteger("IleftPadding"); + } + + set leftPadding(value: number) { + this.setInteger("IleftPadding", value); + } + + public setHasHeading(value: boolean): this { + return this.setInteger("IhasHeading", +value); + } + + get hasHeading(): boolean { + return this.getInteger("IhasHeading") != 0; + } + + set hasHeading(value: boolean) { + this.setInteger("IhasHeading", +value); + } + + public setSingleClickSelectable(value: boolean): this { + return this.setInteger("IsingleClickSelectable", +value); + } + + get singleClickSelectable(): boolean { + return this.getInteger("IsingleClickSelectable") != 0; + } + + set singleClickSelectable(value: boolean) { + this.setInteger("IsingleClickSelectable", +value); + } +} diff --git a/lib/widgets/menu.ts b/lib/widgets/menu.ts new file mode 100644 index 0000000..20c58f8 --- /dev/null +++ b/lib/widgets/menu.ts @@ -0,0 +1,9 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class Menu extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.Menu, options); + } +} diff --git a/lib/widgets/numberentry.ts b/lib/widgets/numberentry.ts new file mode 100644 index 0000000..d268de9 --- /dev/null +++ b/lib/widgets/numberentry.ts @@ -0,0 +1,21 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class NumberEntry extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.NumberEntry, options); + } + + public setText(value: string): this { + return this.setString("Stext", value); + } + + get text(): string { + return this.getString("Stext"); + } + + set text(value: string) { + this.setString("Stext", value); + } +} diff --git a/lib/widgets/progressbar.ts b/lib/widgets/progressbar.ts new file mode 100644 index 0000000..f99ea4e --- /dev/null +++ b/lib/widgets/progressbar.ts @@ -0,0 +1,45 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class ProgressBar extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.ProgressBar, options); + } + + public setMinValue(value: number): this { + return this.setInteger("IminValue", value); + } + + get minValue(): number { + return this.getInteger("IminValue"); + } + + set minValue(value: number) { + this.setInteger("IminValue", value); + } + + public setMaxValue(value: number): this { + return this.setInteger("ImaxValue", value); + } + + get maxValue(): number { + return this.getInteger("ImaxValue"); + } + + set maxValue(value: number) { + this.setInteger("ImaxValue", value); + } + + public setValue(value: number): this { + return this.setInteger("Ivalue", value); + } + + get value(): number { + return this.getInteger("Ivalue"); + } + + set value(value: number) { + this.setInteger("Ivalue", value); + } +} diff --git a/lib/widgets/radiobox.ts b/lib/widgets/radiobox.ts new file mode 100644 index 0000000..be75a2d --- /dev/null +++ b/lib/widgets/radiobox.ts @@ -0,0 +1,21 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class RadioBox extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.RadioBox, options); + } + + public setChecked(value: boolean): this { + return this.setInteger("Ichecked", +value); + } + + get checked(): boolean { + return this.getInteger("Ichecked") != 0; + } + + set checked(value: boolean) { + this.setInteger("Ichecked", +value); + } +} diff --git a/lib/widgets/scrollbar.ts b/lib/widgets/scrollbar.ts new file mode 100644 index 0000000..94bc34b --- /dev/null +++ b/lib/widgets/scrollbar.ts @@ -0,0 +1,81 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class ScrollBar extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.ScrollBar, options); + } + + public setShowArrows(value: boolean): this { + return this.setInteger("IshowArrows", +value); + } + + get showArrows(): boolean { + return this.getInteger("IshowArrows") != 0; + } + + set showArrows(value: boolean) { + this.setInteger("IshowArrows", +value); + } + + public setAreaShown(value: number): this { + return this.setInteger("IareaShown", value); + } + + get areaShown(): number { + return this.getInteger("IareaShown"); + } + + set areaShown(value: number) { + this.setInteger("IareaShown", value); + } + + public setValue(value: number): this { + return this.setInteger("Ivalue", value); + } + + get value(): number { + return this.getInteger("Ivalue"); + } + + set value(value: number) { + this.setInteger("Ivalue", value); + } + + public setMinValue(value: number): this { + return this.setInteger("IminValue", value); + } + + get minValue(): number { + return this.getInteger("IminValue"); + } + + set minValue(value: number) { + this.setInteger("IminValue", value); + } + + public setMaxValue(value: number): this { + return this.setInteger("ImaxValue", value); + } + + get maxValue(): number { + return this.getInteger("ImaxValue"); + } + + set maxValue(value: number) { + this.setInteger("ImaxValue", value); + } + + public setOrientation(value: number): this { + return this.setInteger("Iorientation", value); + } + + get orientation(): number { + return this.getInteger("Iorientation"); + } + + set orientation(value: number) { + this.setInteger("Iorientation", value); + } +} diff --git a/lib/widgets/submenu.ts b/lib/widgets/submenu.ts new file mode 100644 index 0000000..ce8c796 --- /dev/null +++ b/lib/widgets/submenu.ts @@ -0,0 +1,21 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class SubMenu extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.SubMenu, options); + } + + public setLeftPadding(value: number): this { + return this.setInteger("IleftPadding", value); + } + + get leftPadding(): number { + return this.getInteger("IleftPadding"); + } + + set leftPadding(value: number) { + this.setInteger("IleftPadding", value); + } +} diff --git a/lib/widgets/subwindow.ts b/lib/widgets/subwindow.ts new file mode 100644 index 0000000..412d1f7 --- /dev/null +++ b/lib/widgets/subwindow.ts @@ -0,0 +1,33 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions, Pixmap } from "../types"; + +export class SubWindow extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.SubWindow, options); + } + + public setIconPixmap(value: Pixmap): this { + return this.setVoid("ViconPixmap", value); + } + + get iconPixmap(): Pixmap { + return this.getVoid("ViconPixmap") as Pixmap; + } + + set iconPixmap(value: Pixmap) { + this.setVoid("ViconPixmap", value); + } + + public setTitle(value: string): this { + return this.setString("Stitle", value); + } + + get title(): string { + return this.getString("Stitle"); + } + + set title(value: string) { + this.setString("Stitle", value); + } +} diff --git a/lib/widgets/treeview.ts b/lib/widgets/treeview.ts new file mode 100644 index 0000000..9a4ce57 --- /dev/null +++ b/lib/widgets/treeview.ts @@ -0,0 +1,33 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class TreeView extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.TreeView, options); + } + + public setLeftPadding(value: number): this { + return this.setInteger("IleftPadding", value); + } + + get leftPadding(): number { + return this.getInteger("IleftPadding"); + } + + set leftPadding(value: number) { + this.setInteger("IleftPadding", value); + } + + public setSingleClickSelectable(value: boolean): this { + return this.setInteger("IsingleClickSelectable", +value); + } + + get singleClickSelectable(): boolean { + return this.getInteger("IsingleClickSelectable") != 0; + } + + set singleClickSelectable(value: boolean) { + this.setInteger("IsingleClickSelectable", +value); + } +} diff --git a/lib/widgets/viewport.ts b/lib/widgets/viewport.ts new file mode 100644 index 0000000..214edf4 --- /dev/null +++ b/lib/widgets/viewport.ts @@ -0,0 +1,9 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { WidgetOptions } from "../types"; + +export class Viewport extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.Viewport, options); + } +} diff --git a/lib/widgets/window.ts b/lib/widgets/window.ts new file mode 100644 index 0000000..6da7f00 --- /dev/null +++ b/lib/widgets/window.ts @@ -0,0 +1,82 @@ +import { NativeClasses } from "../milsko"; +import { Widget } from "../widget"; +import { MwSizeHints } from "../structs"; +import { WidgetOptions, Pixmap } from "../types"; + +export class Window extends Widget { + constructor(options: WidgetOptions) { + super(NativeClasses.Window, options); + } + + public setTitle(value: string): this { + return this.setString("Stitle", value); + } + + get title(): string { + return this.getString("Stitle"); + } + + set title(value: string) { + this.setString("Stitle", value); + } + + public setMain(value: boolean): this { + return this.setInteger("Imain", +value); + } + + get main(): boolean { + return this.getInteger("Imain") != 0; + } + + set main(value: boolean) { + this.setInteger("Imain", +value); + } + + public setIconPixmap(value: Pixmap): this { + return this.setVoid("ViconPixmap", value); + } + + get iconPixmap(): Pixmap { + return this.getVoid("ViconPixmap") as Pixmap; + } + + set iconPixmap(value: Pixmap) { + this.setVoid("ViconPixmap", value); + } + + public setSizeHints(value: MwSizeHints): this { + return this.setVoid("VsizeHints", value); + } + + get sizeHints(): MwSizeHints { + return this.getVoid("VsizeHints") as MwSizeHints; + } + + set sizeHints(value: MwSizeHints) { + this.setVoid("VsizeHints", value); + } + + public setHasBorder(value: boolean): this { + return this.setInteger("IhasBorder", +value); + } + + get hasBorder(): boolean { + return this.getInteger("IhasBorder") != 0; + } + + set hasBorder(value: boolean) { + this.setInteger("IhasBorder", +value); + } + + public setInverted(value: boolean): this { + return this.setInteger("Iinverted", +value); + } + + get inverted(): boolean { + return this.getInteger("Iinverted") != 0; + } + + set inverted(value: boolean) { + this.setInteger("Iinverted", +value); + } +} diff --git a/scripts/bindgen.js b/scripts/bindgen.js index ca901b5..af0f391 100644 --- a/scripts/bindgen.js +++ b/scripts/bindgen.js @@ -12,6 +12,7 @@ const structsOut = createWriteStream("lib/structs.ts"); const enumsOut = createWriteStream("lib/enums.ts"); const constantsOut = createWriteStream("lib/constants.ts"); const widgetOut = createWriteStream("lib/widget.ts"); +const widgetsIndexOut = createWriteStream("lib/widgets/index.ts"); function toCamelCase(input) { const split = input.split("_"); @@ -250,7 +251,7 @@ function scanWidgets(root) { const lines = []; const widgetFile = createWriteStream( - join("lib/widgets/", toCamelCase(widgetName) + ".ts") + join("lib/widgets/", widgetName.toLowerCase() + ".ts") ); // scan properties @@ -310,8 +311,15 @@ function scanWidgets(root) { widgetFile.write(line); } + widgetsIndexOut.write( + "export { " + widgetName + " } from \"./" + + widgetName.toLowerCase() + "\"\n" + ); + widgetFile.close(); } + + widgetsIndexOut.close(); } function isArray(tagName) {