// Copyright © SixtyFPS GmbH // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0 /// Basic information on a known component export struct ComponentItem { name: string, index: int, defined-at: string, pretty-location: string, is-user-defined: bool, is-currently-shown: bool, is-exported: bool, } /// A `category` with a lost of `ComponentItem`s that belong into it. /// /// Fiel url is either an empty string or a URL to some document export struct ComponentListItem { category: string, file_url: string, components: [ComponentItem] } /// Some `Diagnostics` as raised by the compiler export struct Diagnostics { level: string, message: string, url: string, line: int, column: int, } /// What kind of layout we are working with export enum LayoutKind { None, Horizontal, Vertical, Grid, } /// A rectangular region that is selected struct SelectionRectangle { x: length, y: length, width: length, height: length, } /// A `Selection` export struct Selection { geometry: SelectionRectangle, layout-data: LayoutKind, is-primary: bool, is-moveable: bool, is-resizable: bool, } /// A mark showing where an element will show up when dropped into the current location export struct DropMark { x1: length, y1: length, x2: length, y2: length, } /// A Range in a source export struct Range { start: int, end: int, } export enum PropertyValueKind { Boolean, Code, Color, Enum, Float, Integer, String, } /// Data about the property value for use in "simple" mode export struct PropertyValue { value-bool: bool, // Boolean is-translatable: bool, // String kind: PropertyValueKind, value-red: int, // Color value-green: int, // Color value-blue: int, // Color value-alpha: int, // Color value-float: float, // Float value-int: int, // Integer default-selection: int, // Enum value-string: string, // Enum, String visual-items: [string], // Enum tr-context: string, // String tr-plural: string, // String code: string, // ALWAYS, empty if property is not explicitly defined } /// Important Ranges in the property definition /// /// The URL and version is the same as in the Element it belongs to export struct PropertyDefinition { definition-range: Range, selection-range: Range, expression-range: Range, expression-value: string, } /// The Property Declaration export struct PropertyDeclaration { source-path: string, source-version: int, range: Range, } /// Information on one Property export struct PropertyInformation { name: string, type-name: string, declared-at: PropertyDeclaration, defined-at: PropertyDefinition, value: PropertyValue, } /// Information on one Property export struct PropertyGroup { group-name: string, properties: [PropertyInformation], } /// Information on an Element a Property belongs to export struct ElementInformation { id: string, type-name: string, source-uri: string, source-version: int, range: Range, properties: [PropertyGroup], } export global Api { // # Properties // ## General preview state: // experimental features are available in property experimental: false; // enable editing mode in property show-preview-ui: true; // Design-mode engaged! in-out property design-mode; // ## Component Data for ComponentList: // All the components in property <[ComponentListItem]> known-components; // The component currently viewed out property visible-component; // ## Diagnostics and other Status messages // Compiler diagnostics in property <[Diagnostics]> diagnostics; // status message text in property status-text; // ## Style: // All the known styles in property <[string]> known-styles; // The current style in-out property current-style; // ## Drawing Area // Borders around things in property <[Selection]> selections; in-out property drop-mark; // The actual preview in property preview-area; // set to true to resize in property resize-to-preferred-size: false; // ## Property Editor in property current-element; // # Callbacks // ## Style: callback style-changed(); // ## Component life-cycle: // Create a new componnet callback add-new-component(); // Add an existing component pure callback can-drop(/* component-index: */ int, /* x: */ length, /* y: */ length, /* on-drop-area: */ bool) -> bool; callback drop(/* component-index: */ int, /* x: */ length, /* y: */ length); callback rename-component(/* old-name: */ string, /* defined-at: */ string, /* new-name: */ string); callback selected-element-can-move-to(/* x: */ length, /* y: */ length, /* mouse-x: */ length, /* mouse-y: */ length) -> bool; callback selected-element-move(/* x: */ length, /* y: */ length, /* mouse-x: */ length, /* mouse-y: */ length); callback selected-element-resize(/* x: */ length, /* y: */ length, /* width: */ length, /* height: */ length); callback selected-element-delete(); // ## Element selection: callback select-at(/* x: */ length, /* y: */ length, /* enter-component: */ bool); callback select-behind(/* x: */ length, /* y: */ length, /* enter-component: */ bool, /* reverse: */ bool); callback reselect(); callback unselect(); // ## Change Editor: // Show a conponent in the editor callback show-component(/* name: */ string, /* url: */ string); // Show a position consisting of `line` and `column` in a `file` in the editor callback show-document(/* file: */ string, /* line: */ int, /* column: */ int); // Show a position consisting of `line` and `column` in a `file` in the editor callback show-document-offset-range(/* url: */ string, /* start_offset: */ int, /* end_offset: */ int); // ## Drawing Area // Preview some other component callback show-preview-for(/* name: */ string, /* url: */ string); // ## Property Editor pure callback test-code-binding(/* element-url: */ string, /* element-version: */ int, /* element-offset: */ int, /* property-name: */ string, /* property-value: */ string) -> bool; pure callback test-string-binding(/* element-url: */ string, /* element-version: */ int, /* element-offset: */ int, /* property-name: */ string, /* value: */ string) -> bool; callback set-code-binding(/* element-url: */ string, /* element-version: */ int, /* element-offset: */ int, /* property-name: */ string, /* property-value: */ string); callback set-bool-binding(/* element-url: */ string, /* element-version: */ int, /* element-offset: */ int, /* property-name: */ string, /* value: */ bool); callback set-enum-binding(/* element-url: */ string, /* element-version: */ int, /* element-offset: */ int, /* property-name: */ string, /* enum_type: */ string, /* enum_value: */ string); callback set-string-binding(/* element-url: */ string, /* element-version: */ int, /* element-offset: */ int, /* property-name: */ string, /* value: */ string); }