#ifndef _XPStandardWidgets_h_ #define _XPStandardWidgets_h_ /* * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ /*************************************************************************** * XPStandardWidgets ***************************************************************************/ /* * ## THEORY OF OPERATION * * The standard widgets are widgets built into the widgets library. While you * can gain access to the widget function that drives them, you generally use * them by calling XPCreateWidget and then listening for special messages, * etc. * * The standard widgets often send messages to themselves when the user * performs an event; these messages are sent up the widget hierarchy until * they are handled. So you can add a widget proc directly to a push button * (for example) to intercept the message when it is clicked, or you can put * one widget proc on a window for all of the push buttons in the window. Most * of these messages contain the original widget ID as a parameter so you can * know which widget is messaging no matter who it is sent to. * */ #include "XPWidgetDefs.h" #ifdef __cplusplus extern "C" { #endif /*************************************************************************** * MAIN WINDOW ***************************************************************************/ /* * The main window widget class provides a "window" as the user knows it. * These windows are draggable and can be selected. Use them to create * floating windows and non-modal dialogs. * */ #define xpWidgetClass_MainWindow 1 /* * Main Window Type Values * * These type values are used to control the appearance of a main window. * */ enum { /* The standard main window; pin stripes on XP7, metal frame on XP 6. */ xpMainWindowStyle_MainWindow = 0, /* A translucent dark gray window. */ xpMainWindowStyle_Translucent = 1, }; /* * Main Window Properties * */ enum { /* This property specifies the type of window. Set to one of the main window * * types above. */ xpProperty_MainWindowType = 1100, /* This property specifies whether the main window has close boxes in its * * corners. */ xpProperty_MainWindowHasCloseBoxes = 1200, }; /* * MainWindow Messages * */ enum { /* This message is sent when the close buttons for your window are pressed. */ xpMessage_CloseButtonPushed = 1200, }; /*************************************************************************** * SUB WINDOW ***************************************************************************/ /* * X-Plane dialogs are divided into separate areas; the sub window widgets * allow you to make these areas. Create one main window and place several * subwindows inside it. Then place your controls inside the subwindows. * */ #define xpWidgetClass_SubWindow 2 /* * SubWindow Type Values * * These values control the appearance of the subwindow. * */ enum { /* A panel that sits inside a main window. */ xpSubWindowStyle_SubWindow = 0, /* A screen that sits inside a panel for showing text information. */ xpSubWindowStyle_Screen = 2, /* A list view for scrolling lists. */ xpSubWindowStyle_ListView = 3, }; /* * SubWindow Properties * */ enum { /* This property specifies the type of window. Set to one of the subwindow * * types above. */ xpProperty_SubWindowType = 1200, }; /*************************************************************************** * BUTTON ***************************************************************************/ /* * The button class provides a number of different button styles and * behaviors, including push buttons, radio buttons, check boxes, etc. The * button label appears on or next to the button depending on the button's * appearance or type. * * The button's behavior is a separate property that dictates who it * highlights and what kinds of messages it sends. Since behavior and type are * different, you can do strange things like make check boxes that act as push * buttons or push buttons with radio button behavior. * * In X-Plane 6 there were no check box graphics. The result is the following * behavior: in X-Plane * 6 all check box and radio buttons are round (radio-button style) buttons; * in X-Plane 7 they are all square (check-box style) buttons. In a future * version of X-Plane, the xpButtonBehavior enums will provide the correct * graphic (check box or radio button) giving the expected result. * */ #define xpWidgetClass_Button 3 /* * Button Types * * These define the visual appearance of buttons but not how they respond to * the mouse. * */ enum { /* This is a standard push button, like an 'OK' or 'Cancel' button in a dialog* * box. */ xpPushButton = 0, /* A check box or radio button. Use this and the button behaviors below to * * get the desired behavior. */ xpRadioButton = 1, /* A window close box. */ xpWindowCloseBox = 3, /* A small down arrow. */ xpLittleDownArrow = 5, /* A small up arrow. */ xpLittleUpArrow = 6, }; /* * Button Behavior Values * * These define how the button responds to mouse clicks. * */ enum { /* Standard push button behavior. The button highlights while the mouse is * * clicked over it and unhighlights when the mouse is moved outside of it or * * released. If the mouse is released over the button, the * * xpMsg_PushButtonPressed message is sent. */ xpButtonBehaviorPushButton = 0, /* Check box behavior. The button immediately toggles its value when the mouse* * is clicked and sends out a xpMsg_ButtonStateChanged message. */ xpButtonBehaviorCheckBox = 1, /* Radio button behavior. The button immediately sets its state to one and * * sends out a xpMsg_ButtonStateChanged message if it was not already set to * * one. You must turn off other radio buttons in a group in your code. */ xpButtonBehaviorRadioButton = 2, }; /* * Button Properties * */ enum { /* This property sets the visual type of button. Use one of the button types * * above. */ xpProperty_ButtonType = 1300, /* This property sets the button's behavior. Use one of the button behaviors * * above. */ xpProperty_ButtonBehavior = 1301, /* This property tells whether a check box or radio button is "checked" or * * not. Not used for push buttons. */ xpProperty_ButtonState = 1302, }; /* * Button Messages * * These messages are sent by the button to itself and then up the widget * chain when the button is clicked. (You may intercept them by providing a * widget handler for the button itself or by providing a handler in a parent * widget.) * */ enum { /* This message is sent when the user completes a click and release in a * * button with push button behavior. Parameter one of the message is the * * widget ID of the button. This message is dispatched up the widget * * hierarchy. */ xpMsg_PushButtonPressed = 1300, /* This message is sent when a button is clicked that has radio button or * * check box behavior and its value changes. (Note that if the value changes * * by setting a property you do not receive this message!) Parameter one is * * the widget ID of the button, parameter 2 is the new state value, either * * zero or one. This message is dispatched up the widget hierarchy. */ xpMsg_ButtonStateChanged = 1301, }; /*************************************************************************** * TEXT FIELD ***************************************************************************/ /* * The text field widget provides an editable text field including mouse * selection and keyboard navigation. The contents of the text field are its * descriptor. (The descriptor changes as the user types.) * * The text field can have a number of types, that affect the visual layout of * the text field. The text field sends messages to itself so you may control * its behavior. * * If you need to filter keystrokes, add a new handler and intercept the key * press message. Since key presses are passed by pointer, you can modify the * keystroke and pass it through to the text field widget. * * WARNING: in X-Plane before 7.10 (including 6.70) null characters could * crash X-Plane. To prevent this, wrap this object with a filter function * (more instructions can be found on the SDK website). * */ #define xpWidgetClass_TextField 4 /* * Text Field Type Values * * These control the look of the text field. * */ enum { /* A field for text entry. */ xpTextEntryField = 0, /* A transparent text field. The user can type and the text is drawn, but no * * background is drawn. You can draw your own background by adding a widget * * handler and prehandling the draw message. */ xpTextTransparent = 3, /* A translucent edit field, dark gray. */ xpTextTranslucent = 4, }; /* * Text Field Properties * */ enum { /* This is the character position the selection starts at, zero based. If it * * is the same as the end insertion point, the insertion point is not a * * selection. */ xpProperty_EditFieldSelStart = 1400, /* This is the character position of the end of the selection. */ xpProperty_EditFieldSelEnd = 1401, /* This is the character position a drag was started at if the user is * * dragging to select text, or -1 if a drag is not in progress. */ xpProperty_EditFieldSelDragStart = 1402, /* This is the type of text field to display, from the above list. */ xpProperty_TextFieldType = 1403, /* Set this property to 1 to password protect the field. Characters will be * * drawn as *s even though the descriptor will contain plain-text. */ xpProperty_PasswordMode = 1404, /* The max number of characters you can enter, if limited. Zero means * * unlimited. */ xpProperty_MaxCharacters = 1405, /* The first visible character on the left. This effectively scrolls the text* * field. */ xpProperty_ScrollPosition = 1406, /* The font to draw the field's text with. (An XPLMFontID.) */ xpProperty_Font = 1407, /* This is the active side of the insert selection. (Internal) */ xpProperty_ActiveEditSide = 1408, }; /* * Text Field Messages * */ enum { /* The text field sends this message to itself when its text changes. It sends* * the message up the call chain; param1 is the text field's widget ID. */ xpMsg_TextFieldChanged = 1400, }; /*************************************************************************** * SCROLL BAR ***************************************************************************/ /* * A standard scroll bar or slider control. The scroll bar has a minimum, * maximum and current value that is updated when the user drags it. The * scroll bar sends continuous messages as it is dragged. * */ #define xpWidgetClass_ScrollBar 5 /* * Scroll Bar Type Values * * This defines how the scroll bar looks. * */ enum { /* A standard X-Plane scroll bar (with arrows on the ends). */ xpScrollBarTypeScrollBar = 0, /* A slider, no arrows. */ xpScrollBarTypeSlider = 1, }; /* * Scroll Bar Properties * */ enum { /* The current position of the thumb (in between the min and max, inclusive) */ xpProperty_ScrollBarSliderPosition = 1500, /* The value the scroll bar has when the thumb is in the lowest position. */ xpProperty_ScrollBarMin = 1501, /* The value the scroll bar has when the thumb is in the highest position. */ xpProperty_ScrollBarMax = 1502, /* How many units to move the scroll bar when clicking next to the thumb. The * * scroll bar always moves one unit when the arrows are clicked. */ xpProperty_ScrollBarPageAmount = 1503, /* The type of scrollbar from the enums above. */ xpProperty_ScrollBarType = 1504, /* Used internally. */ xpProperty_ScrollBarSlop = 1505, }; /* * Scroll Bar Messages * */ enum { /* The scroll bar sends this message when the slider position changes. It * * sends the message up the call chain; param1 is the scroll bar widget ID. */ xpMsg_ScrollBarSliderPositionChanged = 1500, }; /*************************************************************************** * CAPTION ***************************************************************************/ /* * A caption is a simple widget that shows its descriptor as a string, useful * for labeling parts of a window. It always shows its descriptor as its * string and is otherwise transparent. * */ #define xpWidgetClass_Caption 6 /* * Caption Properties * */ enum { /* This property specifies whether the caption is lit; use lit captions * * against screens. */ xpProperty_CaptionLit = 1600, }; /*************************************************************************** * GENERAL GRAPHICS ***************************************************************************/ /* * The general graphics widget can show one of many icons available from * X-Plane. * */ #define xpWidgetClass_GeneralGraphics 7 /* * General Graphics Types Values * * These define the icon for the general graphics. * */ enum { xpShip = 4, xpILSGlideScope = 5, xpMarkerLeft = 6, xp_Airport = 7, xpNDB = 8, xpVOR = 9, xpRadioTower = 10, xpAircraftCarrier = 11, xpFire = 12, xpMarkerRight = 13, xpCustomObject = 14, xpCoolingTower = 15, xpSmokeStack = 16, xpBuilding = 17, xpPowerLine = 18, xpVORWithCompassRose = 19, xpOilPlatform = 21, xpOilPlatformSmall = 22, xpWayPoint = 23, }; /* * General Graphics Properties * */ enum { /* This property controls the type of icon that is drawn. */ xpProperty_GeneralGraphicsType = 1700, }; /*************************************************************************** * PROGRESS INDICATOR ***************************************************************************/ /* * This widget implements a progress indicator as seen when X-Plane starts up. * */ #define xpWidgetClass_Progress 8 /* * Progress Indicator Properties * */ enum { /* This is the current value of the progress indicator. */ xpProperty_ProgressPosition = 1800, /* This is the minimum value, equivalent to 0% filled. */ xpProperty_ProgressMin = 1801, /* This is the maximum value, equivalent to 100% filled. */ xpProperty_ProgressMax = 1802, }; #ifdef __cplusplus } #endif #endif