gui.lua

 ---@meta Gui

 local gui = {}

 ---The base class of all ui related classes.
 ---@class Object
 gui.Object = {}

 ---The base class of all gui layout classes.
 ---@class Layout : Object
 gui.layout = {}

 ---The base class of all widget classes, an empty widget itself.
 ---@class Widget : Object
 ---@field visible boolean Whether the widget is visible or not.
 ---@field enabled boolean Whether the widget is enabled or not.
 gui.widget = {}

 ---@alias LayoutChild string|BaseAspect|Layout|Widget|function
 ---@alias LayoutChildren LayoutChild[]

 ---@class WidgetAttributeMapT<T>: { [WidgetAttribute]: T }

 ---@class (exact) BaseWidgetOptions
 ---@field size? integer[] Two integers, representing the width and height of the widget.
 ---@field windowFlags? WindowType[] The window flags of the widget.
 ---@field widgetAttributes? WidgetAttributeMapT<boolean> The widget attributes of the widget.
 ---@field autoFillBackground? boolean A boolean, representing whether the widget should automatically fill its background.
 ---@field sizePolicy? SizePolicy.Policy[] Two size policies of the widget, horizontal and vertical.
 gui.baseWidgetOptions = {}

 ---@class (exact) WidgetOptions : BaseWidgetOptions
 ---@field title? string The title of the widget, if applicable.
 ---@field onTextChanged? function The function to be called when the text of the widget changes, if applicable.
 ---@field onClicked? function The function to be called when the widget is clicked, if applicable.
 ---@field iconPath? FilePath The path to the icon of the widget, if applicable. Empty or not existent paths set null icon. (see [QIcon](https://doc.qt.io/qt-5/qicon.html#QIcon))
 ---@field text? string The text of the widget, if applicable.
 ---@field value? integer The value of the widget, if applicable.
 ---@field flat? boolean A boolean, representing whether the widget should be flat, if applicable.
 ---@field [1]? Layout The layout of the widget, if applicable.
 ---@field fixedSize? integer[] Two integers representing the width and height
 ---@field contentMargins? integer[] Four integers represending left, top, right and bottom margins.
 ---@field cursor? CursorShape The cursor shape for the widget.
 ---@field minimumWidth? integer The minimum width in pixels.
 ---@field minimumHeight? integer Minimum height of input
 gui.widgetOptions = {}

 ---@param options WidgetOptions
 ---@return Widget
 function gui.Widget(options) end

 ---Show the widget. (see [QWidget::show](https://doc.qt.io/qt-5/qwidget.html#show))
 function gui.widget:show() end

 ---Sets the top-level widget containing this widget to be the active window. (see [QWidget::activateWindow](https://doc.qt.io/qt-5/qwidget.html#activateWindow))
 function gui.widget:activateWindow() end

 ---Closes the widget. (see [QWidget::close](https://doc.qt.io/qt-5/qwidget.html#close))
 function gui.widget:close() end

 ---Column layout
 ---@class Column : Layout
 local column = {}

 ---@param children LayoutChildren
 ---@return Column
 function gui.Column(children) end

 ---A group box with a title.
 ---@class Group : Widget
 local group = {}

 ---@param options WidgetOptions
 ---@return Group
 function gui.Group(options) end

 ---Row layout.
 ---@class Row : Layout
 local row = {}

 ---@param children LayoutChildren
 ---@return Row
 function gui.Row(children) end

 ---Flow layout.
 ---@class Flow : Layout
 local flow = {}

 ---@param children LayoutChildren
 ---@return Flow
 function gui.Flow(children) end

 ---Grid layout.
 ---@class Grid : Layout
 local grid = {}

 ---@param children LayoutChildren
 ---@return Grid
 function gui.Grid(children) end

 ---Form layout.
 ---@class Form : Layout
 local form = {}

 ---@param children LayoutChildren
 ---@return Form
 function gui.Form(children) end

 ---A stack of multiple widgets.
 ---@class Stack : Widget
 local stack = {}

 ---A ScrollArea widget.
 ---@class ScrollArea : Widget

 ---@param options WidgetOptions
 ---@return ScrollArea
 function gui.ScrollArea(options) end

 ---@param options WidgetOptions
 ---@return Stack
 function gui.Stack(options) end

 ---A Tab widget.
 ---@class Tab : Widget
 local tab = {}

 ---@param name string
 ---@param layout Layout
 ---@return Tab
 function gui.Tab(name, layout) end

 ---@class (exact) TabOptions
 ---@field [1] string The name of the tab.
 ---@field [2] Layout The layout of the tab.
 gui.tabOptions = {}

 ---@param options TabOptions
 ---@return Tab tab The new tab.
 function gui.Tab(options) end

 ---A Multiline text edit.
 ---@class TextEdit : Widget
 local textEdit = {}

 ---@return string markdown Returns the content of the TextEdit as markdown
 function textEdit:markdown() end

 ---@param options WidgetOptions
 ---@return TextEdit
 function gui.TextEdit(options) end

 ---A Single line text edit
 ---@class LineEdit : Widget
 ---@field rightSideIconPath? FilePath A path to icon
 ---@field placeHolderText? string A placeholder text for intput
 ---@field completer? QCompleter A QCompleter object.
 ---@field onReturnPressed? function The function to be called when Enter is pressed
 ---@field onRightSideIconClicked? function The function to be called when right side icon is clicked
 ---@field text string Current text

 local lineEdit = {}

 ---@class PushButton : Widget
 local pushButton = {}

 ---@param options WidgetOptions
 ---@return PushButton
 function gui.PushButton(options) end

 ---@class Label : Widget
 ---@field text string Returns the content of the Label as string
 local label = {}

 ---@class (exact) LabelOptions : BaseWidgetOptions
 ---@param interactionFlags? TextInteractionFlag[]
 ---@param textFormat? TextFormat The text format enum
 ---@param wordWrap? boolean

 gui.labelOptions = {}

 ---@param options LabelOptions
 ---@return Label
 function gui.Label(options) end

 ---@class SpinBox : Widget
 local spinBox = {}

 ---@param options WidgetOptions
 ---@return SpinBox
 function gui.SpinBox(options) end

 ---@class Splitter : Widget
 local splitter = {}

 ---@alias Orientation "horizontal"|"vertical"

 ---@class (exact) SplitterOptions : BaseWidgetOptions
 ---@field orientation? Orientation The orientation of the splitter. (default: "vertical")
 ---@field childrenCollapsible? boolean A boolean, representing whether the children are collapsible. (default: true)
 ---@field stretchFactors? integer[] A list of integers, representing the stretch factors of the children. (default: {1, ...})
 ---@field size? integer[] Two integers, representing the width and height of the widget.
 ---@field [integer] Layout | Widget The splits.
 gui.splitterOptions = {}

 ---@param options SplitterOptions
 ---@return Splitter
 function gui.Splitter(options) end

 ---@class ToolBar : Widget
 local toolBar = {}

 ---@param options WidgetOptions
 ---@return ToolBar
 function gui.ToolBar(options) end

 ---@class ToolButton : Widget
 local toolButton = {}

 ---@param options WidgetOptions
 ---@return ToolButton
 function gui.ToolButton(options) end

 ---@class TabWidget : Widget
 local tabWidget = {}

 ---@param options Tab[]
 ---@return TabWidget
 function gui.TabWidget(options) end

 ---@param name string
 ---@param child WidgetOptions
 ---@return TabWidget
 function gui.TabWidget(name, child) end

 ---@class MarkdownBrowser : Widget
 ---@field markdown string The markdown content of the MarkdownBrowser. Can be set or retrieved.
 local markdownBrowser = {}

 ---@class (exact) MarkdownBrowserOptions : WidgetOptions
 ---@field enableCodeCopyButton? boolean Enable or disable the code copy button
 ---@field viewportMargins? integer[] Four integers representing left, top, right and bottom margins
 local markdownBrowserOptions = {}

 ---@param options MarkdownBrowserOptions
 ---@return MarkdownBrowser
 function gui.MarkdownBrowser(options) end

 ---@class Spinner : Widget
 ---@field running boolean Set spinner visible and display spinning animation
 ---@field decorated boolean Display spinner with custom styleSheet defined inside control (default true)
 local spinner = {}

 ---@class IconDisplay : Widget
 local IconDisplay = {}

 ---@class (exact) IconDisplayOptions : BaseWidgetOptions
 ---@param icon? Utils.Icon|FilePath|string The icon to display
 gui.iconDisplayOptions = {}

 ---@param options IconDisplayOptions
 ---@return IconDisplay
 function gui.IconDisplay(options) end

 ---A "Line break" in the gui.
 function gui.br() end

 ---A "Stretch" in the layout.
 function gui.st() end

 ---An empty grid cell in a grid layout.
 function gui.empty() end

 ---A horizontal line in the layout.
 function gui.hr() end

 ---Clears the margin of the layout.
 function gui.noMargin() end

 ---Sets the margin of the layout to the default value.
 function gui.normalMargin() end

 ---Sets the alignment of a Grid layout according to the Form layout rules.
 function gui.withFormAlignment() end

 ---Sets the stretch factor at position index to stretch.
 ---@param index integer The widget index.
 ---@param stretch integer The stretch factor.
 function gui.stretch(index, stretch) end

 --- Enum representing Text interaction flags
 ---@enum TextInteractionFlag
 gui.TextInteractionFlag {
     NoTextInteraction = 0,
     TextSelectableByMouse = 0,
     TextSelectableByKeyboard = 0,
     LinksAccessibleByMouse = 0,
     LinksAccessibleByKeyboard = 0,
     TextEditable = 0,

     TextEditorInteraction = TextSelectableByMouse | TextSelectableByKeyboard | TextEditable,
     TextBrowserInteraction = TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard
 }

 --- Enum representing text format types
 ---@enum TextFormat
 gui.TextFormat = {
     PlainText = 0,
     RichText = 0,
     AutoText = 0,
     MarkdownText = 0
 }

 --- Enum representing various window types.
 ---@enum WindowType
 gui.WindowType = {
     Widget = 0,
     Window = 0,
     Dialog = 0,
     Sheet = 0,
     Drawer = 0,
     Popup = 0,
     Tool = 0,
     ToolTip = 0,
     SplashScreen = 0,
     Desktop = 0,
     SubWindow = 0,
     ForeignWindow = 0,
     CoverWindow = 0,
     WindowType_Mask = 0,
     MSWindowsFixedSizeDialogHint = 0,
     MSWindowsOwnDC = 0,
     BypassWindowManagerHint = 0,
     X11BypassWindowManagerHint = 0,
     FramelessWindowHint = 0,
     WindowTitleHint = 0,
     WindowSystemMenuHint = 0,
     WindowMinimizeButtonHint = 0,
     WindowMaximizeButtonHint = 0,
     WindowMinMaxButtonsHint = 0,
     WindowContextHelpButtonHint = 0,
     WindowShadeButtonHint = 0,
     WindowStaysOnTopHint = 0,
     WindowTransparentForInput = 0,
     WindowOverridesSystemGestures = 0,
     WindowDoesNotAcceptFocus = 0,
     MaximizeUsingFullscreenGeometryHint = 0,
     CustomizeWindowHint = 0,
     WindowStaysOnBottomHint = 0,
     WindowCloseButtonHint = 0,
     MacWindowToolBarButtonHint = 0,
     BypassGraphicsProxyWidget = 0,
     NoDropShadowWindowHint = 0,
     WindowFullscreenButtonHint = 0,
 }

 ---@enum (key) WidgetAttribute
 gui.WidgetAttribute = {
     WA_Disabled = 0,
     WA_UnderMouse = 0,
     WA_MouseTracking = 0,
     WA_OpaquePaintEvent = 0,
     WA_StaticContents = 0,
     WA_LaidOut = 0,
     WA_PaintOnScreen = 0,
     WA_NoSystemBackground = 0,
     WA_UpdatesDisabled = 0,
     WA_Mapped = 0,
     WA_InputMethodEnabled = 0,
     WA_WState_Visible = 0,
     WA_WState_Hidden = 0,
     WA_ForceDisabled = 0,
     WA_KeyCompression = 0,
     WA_PendingMoveEvent = 0,
     WA_PendingResizeEvent = 0,
     WA_SetPalette = 0,
     WA_SetFont = 0,
     WA_SetCursor = 0,
     WA_NoChildEventsFromChildren = 0,
     WA_WindowModified = 0,
     WA_Resized = 0,
     WA_Moved = 0,
     WA_PendingUpdate = 0,
     WA_InvalidSize = 0,
     WA_CustomWhatsThis = 0,
     WA_LayoutOnEntireRect = 0,
     WA_OutsideWSRange = 0,
     WA_GrabbedShortcut = 0,
     WA_TransparentForMouseEvents = 0,
     WA_PaintUnclipped = 0,
     WA_SetWindowIcon = 0,
     WA_NoMouseReplay = 0,
     WA_DeleteOnClose = 0,
     WA_RightToLeft = 0,
     WA_SetLayoutDirection = 0,
     WA_NoChildEventsForParent = 0,
     WA_ForceUpdatesDisabled = 0,
     WA_WState_Created = 0,
     WA_WState_CompressKeys = 0,
     WA_WState_InPaintEvent = 0,
     WA_WState_Reparented = 0,
     WA_WState_ConfigPending = 0,
     WA_WState_Polished = 0,
     WA_WState_OwnSizePolicy = 0,
     WA_WState_ExplicitShowHide = 0,
     WA_ShowModal = 0,
     WA_MouseNoMask = 0,
     WA_NoMousePropagation = 0,
     WA_Hover = 0,
     WA_InputMethodTransparent = 0,
     WA_QuitOnClose = 0,
     WA_KeyboardFocusChange = 0,
     WA_AcceptDrops = 0,
     WA_DropSiteRegistered = 0,
     WA_WindowPropagation = 0,
     WA_NoX11EventCompression = 0,
     WA_TintedBackground = 0,
     WA_X11OpenGLOverlay = 0,
     WA_AlwaysShowToolTips = 0,
     WA_MacOpaqueSizeGrip = 0,
     WA_SetStyle = 0,
     WA_SetLocale = 0,
     WA_MacShowFocusRect = 0,
     WA_MacNormalSize = 0,
     WA_MacSmallSize = 0,
     WA_MacMiniSize = 0,
     WA_LayoutUsesWidgetRect = 0,
     WA_StyledBackground = 0,
     WA_CanHostQMdiSubWindowTitleBar = 0,
     WA_MacAlwaysShowToolWindow = 0,
     WA_StyleSheet = 0,
     WA_ShowWithoutActivating = 0,
     WA_X11BypassTransientForHint = 0,
     WA_NativeWindow = 0,
     WA_DontCreateNativeAncestors = 0,
     WA_DontShowOnScreen = 0,
     WA_X11NetWmWindowTypeDesktop = 0,
     WA_X11NetWmWindowTypeDock = 0,
     WA_X11NetWmWindowTypeToolBar = 0,
     WA_X11NetWmWindowTypeMenu = 0,
     WA_X11NetWmWindowTypeUtility = 0,
     WA_X11NetWmWindowTypeSplash = 0,
     WA_X11NetWmWindowTypeDialog = 0,
     WA_X11NetWmWindowTypeDropDownMenu = 0,
     WA_X11NetWmWindowTypePopupMenu = 0,
     WA_X11NetWmWindowTypeToolTip = 0,
     WA_X11NetWmWindowTypeNotification = 0,
     WA_X11NetWmWindowTypeCombo = 0,
     WA_X11NetWmWindowTypeDND = 0,
     WA_SetWindowModality = 0,
     WA_WState_WindowOpacitySet = 0,
     WA_TranslucentBackground = 0,
     WA_AcceptTouchEvents = 0,
     WA_WState_AcceptedTouchBeginEvent = 0,
     WA_TouchPadAcceptSingleTouchEvents = 0,
     WA_X11DoNotAcceptFocus = 0,
     WA_AlwaysStackOnTop = 0,
     WA_TabletTracking = 0,
     WA_ContentsMarginsRespectsSafeArea = 0,
     WA_StyleSheetTarget = 0
 }

 --- Enum representing cursor shape for the widget
 ---@enum CursorShape
 gui.CursorShape = {
     ArrowCursor = 0 = 0,
     UpArrowCursor = 0,
     CrossCursor = 0,
     WaitCursor = 0,
     IBeamCursor = 0,
     SizeVerCursor = 0,
     SizeHorCursor = 0,
     SizeBDiagCursor = 0,
     SizeFDiagCursor = 0,
     SizeAllCursor = 0,
     BlankCursor = 0,
     SplitVCursor = 0,
     SplitHCursor = 0,
     PointingHandCursor = 0,
     ForbiddenCursor = 0,
     WhatsThisCursor = 0,
     BusyCursor = 0,
     OpenHandCursor = 0,
     ClosedHandCursor = 0,
     DragCopyCursor = 0,
     DragMoveCursor = 0,
     DragLinkCursor = 0,
     LastCursor = DragLinkCursor,
     BitmapCursor = 0,
     CustomCursor = 0
 }

 gui.SizePolicy = {
     --- Enum representing size policy.
     ---@enum Policy
     Policy = {
         Fixed = 0,
         Minimum = 0,
         Maximum = 0,
         Preferred = 0,
         MinimumExpanding = 0,
         Expanding = 0,
         Ignored = 0
     }
 }

 ---@class Space : Layout
 gui.space = {}

 ---Adds a non-strecthable space with size size to the layout.
 ---@param size integer size in pixels of the space.
 ---@return Space
 function gui.Space(size) end

 ---@class Span : Layout
 gui.span = {}

 ---@class SpanOptions
 ---@field [1] integer The number of columns to span.
 ---@field [2] Layout The inner layout to span.

 ---@class SpanOptionsWithRow
 ---@field [1] integer The number of columns to span.
 ---@field [2] integer The number of rows to span.
 ---@field [3] Layout The inner layout.

 ---@param options SpanOptions|SpanOptionsWithRow
 ---@return Span
 function gui.Span(options) end

 ---@param col integer The number of columns to span.
 ---@param layout Layout The inner layout.
 ---@return Span
 function gui.Span(col, layout) end

 ---@param col integer The number of columns to span.
 ---@param row integer The number of rows to span.
 ---@param layout Layout The inner layout.
 ---@return Span
 function gui.Span(col, row, layout) end

 ---@class Stretch : Layout
 gui.stretch = {}

 ---Adds a stretchable space to the layout.
 ---@param factor integer The factor by which the space should stretch.
 function gui.Stretch(factor) end
 return gui