diff --git a/SDK/CHeaders/Widgets/XPStandardWidgets.h b/SDK/CHeaders/Widgets/XPStandardWidgets.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/Widgets/XPUIGraphics.h b/SDK/CHeaders/Widgets/XPUIGraphics.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/Widgets/XPWidgetDefs.h b/SDK/CHeaders/Widgets/XPWidgetDefs.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/Widgets/XPWidgetUtils.h b/SDK/CHeaders/Widgets/XPWidgetUtils.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/Widgets/XPWidgets.h b/SDK/CHeaders/Widgets/XPWidgets.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/XPLM/XPLMCamera.h b/SDK/CHeaders/XPLM/XPLMCamera.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/XPLM/XPLMDataAccess.h b/SDK/CHeaders/XPLM/XPLMDataAccess.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/XPLM/XPLMDefs.h b/SDK/CHeaders/XPLM/XPLMDefs.h old mode 100755 new mode 100644 index a4a31a9e..ce2fa7c2 --- a/SDK/CHeaders/XPLM/XPLMDefs.h +++ b/SDK/CHeaders/XPLM/XPLMDefs.h @@ -154,8 +154,8 @@ typedef int XPLMPluginID; /* X-Plane itself */ #define XPLM_PLUGIN_XPLANE (0) -/* The current XPLM revision is 4.00 (400). */ -#define kXPLM_Version (400) +/* The current XPLM revision is 4.10 (410). */ +#define kXPLM_Version (410) /* * XPLMKeyFlags @@ -517,6 +517,53 @@ typedef struct { /* The size of the struct. */ char buffer[150]; } XPLMFixedString150_t; +#if defined(XPLM200) +/* + * XPLMCursorStatus + * + * XPLMCursorStatus describes how you would like X-Plane to manage the cursor. + * See XPLMHandleCursor_f for more info. + * + */ +enum { + /* X-Plane manages the cursor normally, plugin does not affect the cusrsor. */ + xplm_CursorDefault = 0, + + /* X-Plane hides the cursor. */ + xplm_CursorHidden = 1, + + /* X-Plane shows the cursor as the default arrow. */ + xplm_CursorArrow = 2, + + /* X-Plane shows the cursor but lets you select an OS cursor. */ + xplm_CursorCustom = 3, + + +}; +typedef int XPLMCursorStatus; +#endif /* XPLM200 */ +/* + * XPLMMouseStatus + * + * When the mouse is clicked, your mouse click routine is called + * repeatedly. It is first called with the mouse down message. It is + * then called zero or more times with the mouse-drag message, and finally + * it is called once with the mouse up message. All of these messages + * will be directed to the same window; you are guaranteed to not receive + * a drag or mouse-up event without first receiving the corresponding + * mouse-down. + * + */ +enum { + xplm_MouseDown = 1, + + xplm_MouseDrag = 2, + + xplm_MouseUp = 3, + + +}; +typedef int XPLMMouseStatus; #ifdef __cplusplus } #endif diff --git a/SDK/CHeaders/XPLM/XPLMDisplay.h b/SDK/CHeaders/XPLM/XPLMDisplay.h old mode 100755 new mode 100644 index 74bc9adc..e9107557 --- a/SDK/CHeaders/XPLM/XPLMDisplay.h +++ b/SDK/CHeaders/XPLM/XPLMDisplay.h @@ -284,13 +284,30 @@ XPLM_API int XPLMUnregisterDrawCallback( * AVIONICS API ***************************************************************************/ /* - * Drawing callbacks for before and after X-Plane draws the instrument screen - * can be registered for every cockpit device. If the user plane does not - * have the device installed, your callback will not be called! Use the - * return value to enable or disable X-Plane's drawing. By drawing into the - * framebuffer of the avionics device, your modifications will be visible - * regardless whether the device's screen is in a 3d cockpit or a popup - * window. + * The Avionics API allows you to customize the drawing and behaviour of the + * built-in cockpit devices (GNS, G1000, etc.), and create your own cockpit + * devices. For built-in devices, you can draw before and/or after X-Plane + * does, and optionally prevent X-Plane from drawing the screen at all. + * Customized built-in devices and custom devices are available in the 3D + * cockpit as well as in the form of pop-up/pop-out windows. + * + * The API also allows you to receive mouse interaction events for your device + * (click down, drag, and up, mouse wheel scroll, cursor) for both screen and + * bezel. While these always work when the device is popped-up in its window, + * you must add a `ATTR_manip_device` manipulator on top of your screen in + * order to receive mouse events from the 3D cockpit. + * + * You can also use the avionics API to control the state and location of + * cockpit devices' pop-up windows. + * + * When working with avionics devices, all co-ordinates you receive when + * drawing or dealing with click events are in texels. The x-axis grows right, + * the y-axis grows up. In bezel callbacks, the origin is at the bottom left + * corner of the bezel. In screen callbacks, the origin is at the bottom-left + * of the screen. X-Plane takes care of scaling your screen and bezel if the + * user pops out the device's window: you should always draw your screen and + * bezel as if they were at the size you specified when registering callbacks + * or creating a device. * */ @@ -364,11 +381,12 @@ typedef int XPLMDeviceID; /* * XPLMAvionicsCallback_f * - * This is the prototype for your drawing callback. You are passed in the - * device you are enhancing/replacing, and whether it is before or after - * X-Plane drawing. If you are before X-Plane, return 1 to let X-Plane draw or - * 0 to suppress X-Plane drawing. If you are after the phase the return value - * is ignored. + * This is the prototype for drawing callbacks for customized built-in device. + * You are passed in the device you are enhancing/replacing, and (if this is + * used for a built-in device that you are customizing) whether it is before + * or after X-Plane drawing. If you are before X-Plane, return 1 to let + * X-Plane draw or 0 to suppress X-Plane drawing. If you are called after + * X-Plane, the return value is ignored. * * Refcon is a unique value that you specify when registering the callback, * allowing you to slip a pointer to your own data to the callback. @@ -383,13 +401,86 @@ typedef int (* XPLMAvionicsCallback_f)( int inIsBefore, void * inRefcon); +#if defined(XPLM410) +/* + * XPLMAvionicsMouse_f + * + * Mouse click callback for clicks into your screen or (2D-popup) bezel, + * useful if the device you are making simulates a touch-screen the user can + * click in the 3d cockpit, or if your pop-up's bezel has buttons that the + * user can click. Return 1 to consume the event, or 0 to let X-Plane process + * it (for stock avionics devices). + * + */ +typedef int (* XPLMAvionicsMouse_f)( + int x, + int y, + XPLMMouseStatus inMouse, + void * inRefcon); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMAvionicsMouseWheel_f + * + * Mouse wheel callback for scroll actions into your screen or (2D-popup) + * bezel, useful if your bezel has knobs that can be turned using the mouse + * wheel, or if you want to simulate pinch-to-zoom on a touchscreen. Return 1 + * to consume the event, or 0 to let X-Plane process it (for stock avionics + * devices). The number of "clicks" indicates how far the wheel was turned + * since the last callback. The wheel is 0 for the vertical axis or 1 for the + * horizontal axis (for OS/mouse combinations that support this). + * + */ +typedef int (* XPLMAvionicsMouseWheel_f)( + int x, + int y, + int wheel, + int clicks, + void * inRefcon); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMAvionicsCursor_f + * + * Cursor callback that decides which cursor to show when the mouse is over + * your screen or (2D-popup) bezel. Return xplm_CursorDefault to let X-Plane + * use which cursor to show, or other values to force the cursor to a + * particular one (see XPLMCursorStatus). + * + */ +typedef XPLMCursorStatus (* XPLMAvionicsCursor_f)( + int x, + int y, + void * inRefcon); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMAvionicsKeyboard_f + * + * Key callback called when your device is popped up and you've requested to + * capture the keyboard. Return 1 to consume the event, or 0 to let X-Plane + * process it (for stock avionics devices). + * + */ +typedef int (* XPLMAvionicsKeyboard_f)( + char inKey, + XPLMKeyFlags inFlags, + char inVirtualKey, + void * inRefCon, + int losingFocus); +#endif /* XPLM410 */ + /* * XPLMAvionicsID * * This is an opaque identifier for an avionics display that you enhance or * replace. When you register your callbacks (via - * XPLMRegisterAvionicsCallbacksEx()), you will specify callbacks to handle - * drawing, and get back such a handle. + * XPLMRegisterAvionicsCallbacksEx()) or create a new device (via + * XPLMCreateAvionicsDevice()), you will specify drawing and mouse callbacks, + * and get back such a handle. * */ typedef void * XPLMAvionicsID; @@ -398,21 +489,66 @@ typedef void * XPLMAvionicsID; * XPLMCustomizeAvionics_t * * The XPLMCustomizeAvionics_t structure defines all of the parameters used to - * replace or enhance avionics for using XPLMRegisterAvionicsCallbacksEx(). - * The structure will be expanded in future SDK APIs to include more features. - * Always set the structSize member to the size of your struct in bytes! + * replace or enhance built-in simulator avionics devices using + * XPLMRegisterAvionicsCallbacksEx(). The structure will be expanded in future + * SDK APIs to include more features. Always set the structSize member to the + * size of your struct in bytes! * */ typedef struct { /* Used to inform XPLMRegisterAvionicsCallbacksEx() of the SDK version you * * compiled against; should always be set to sizeof(XPLMCustomizeAvionics_t) */ int structSize; - /* Which avionics device you want your drawing applied to. */ + /* The built-in avionics device to which you want your drawing applied. */ XPLMDeviceID deviceId; /* The draw callback to be called before X-Plane draws. */ XPLMAvionicsCallback_f drawCallbackBefore; /* The draw callback to be called after X-Plane has drawn. */ XPLMAvionicsCallback_f drawCallbackAfter; +#if defined(XPLM410) + /* The mouse click callback that is called when the user clicks onto the * + * device's bezel. */ + XPLMAvionicsMouse_f bezelClickCallback; +#endif /* XPLM410 */ +#if defined(XPLM410) + /* The mouse click callback that is called when the user clicks onto the * + * device's bezel. */ + XPLMAvionicsMouse_f bezelRightClickCallback; +#endif /* XPLM410 */ +#if defined(XPLM410) + /* The callback that is called when the users uses the scroll wheel over the * + * device's bezel. */ + XPLMAvionicsMouseWheel_f bezelScrollCallback; +#endif /* XPLM410 */ +#if defined(XPLM410) + /* The callback that lets you determine what cursor should be shown when the * + * mouse is over the device's bezel. */ + XPLMAvionicsCursor_f bezelCursorCallback; +#endif /* XPLM410 */ +#if defined(XPLM410) + /* The mouse click callback that is called when the user clicks onto the * + * device's screen. */ + XPLMAvionicsMouse_f screenTouchCallback; +#endif /* XPLM410 */ +#if defined(XPLM410) + /* The right mouse click callback that is called when the user clicks onto the* + * device's screen. */ + XPLMAvionicsMouse_f screenRightTouchCallback; +#endif /* XPLM410 */ +#if defined(XPLM410) + /* The callback that is called when the users uses the scroll wheel over the * + * device's screen. */ + XPLMAvionicsMouseWheel_f screenScrollCallback; +#endif /* XPLM410 */ +#if defined(XPLM410) + /* The callback that lets you determine what cursor should be shown when the * + * mouse is over the device's screen. */ + XPLMAvionicsCursor_f screenCursorCallback; +#endif /* XPLM410 */ +#if defined(XPLM410) + /* The key callback that is called when the user types in the device's popup. */ + XPLMAvionicsKeyboard_f keyboardCallback; +#endif /* XPLM410 */ /* A reference which will be passed into each of your draw callbacks. Use this* * to pass information to yourself as needed. */ void * refcon; @@ -421,27 +557,466 @@ typedef struct { /* * XPLMRegisterAvionicsCallbacksEx * - * This routine registers your callbacks for a device. This returns a handle. - * If the returned handle is NULL, there was a problem interpreting your - * input, most likely the struct size was wrong for your SDK version. If the - * returned handle is not NULL, your callbacks will be called according to - * schedule as long as your plugin is not deactivated, or unloaded, or your + * This routine registers your callbacks for a built-in device. This returns a + * handle. If the returned handle is NULL, there was a problem interpreting + * your input, most likely the struct size was wrong for your SDK version. If + * the returned handle is not NULL, your callbacks will be called according to + * schedule as long as your plugin is not deactivated, or unloaded, or you * call XPLMUnregisterAvionicsCallbacks(). + * + * Note that you cannot register new callbacks for a device that is not a + * built-in one (for example a device that you have created, or a device + * another plugin has created). * */ XPLM_API XPLMAvionicsID XPLMRegisterAvionicsCallbacksEx( XPLMCustomizeAvionics_t * inParams); +/* + * XPLMGetAvionicsHandle + * + * This routine registers no callbacks for a built-in cockpit device, but + * returns a handle which allows you to interact with it using the Avionics + * Device API. Use this if you do not wish to intercept drawing, clicks and + * touchscreen calls to a device, but want to interact with its popup + * programmatically. This is equivalent to calling + * XPLMRegisterAvionicsCallbackEx() with NULL for all callbacks. + * + */ +XPLM_API XPLMAvionicsID XPLMGetAvionicsHandle( + XPLMDeviceID inDeviceID); + /* * XPLMUnregisterAvionicsCallbacks * - * This routine unregisters your callbacks for a device. They will no longer - * be called. + * This routine unregisters your callbacks for a built-in device. You should + * only call this for handles you acquired from + * XPLMRegisterAvionicsCallbacksEx(). They will no longer be called. * */ XPLM_API void XPLMUnregisterAvionicsCallbacks( XPLMAvionicsID inAvionicsId); +#if defined(XPLM410) +/* + * XPLMAvionicsScreenCallback_f + * + * This is the prototype for drawing callbacks for custom devices' screens. + * Refcon is a unique value that you specify when creating the device, + * allowing you to slip a pointer to your own data to the callback. + * + * Upon entry the OpenGL context will be correctly set up for you and OpenGL + * will be in panel coordinates for 2d drawing. The OpenGL state (texturing, + * etc.) will be unknown. X-Plane does not clear your screen for you between + * calls - this means you can re-use portions to save drawing, but otherwise + * you must call glClear() to erase the screen's contents. + * + */ +typedef void (* XPLMAvionicsScreenCallback_f)( + void * inRefcon); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMAvionicsBezelCallback_f + * + * This is the prototype for drawing callbacks for custom devices' bezel. You + * are passed in the red, green, and blue values you can optinally use for + * tinting your bezel accoring to ambiant light. + * + * Refcon is a unique value that you specify when creating the device, + * allowing you to slip a pointer to your own data to the callback. + * + * Upon entry the OpenGL context will be correctly set up for you and OpenGL + * will be in panel coordinates for 2d drawing. The OpenGL state (texturing, + * etc.) will be unknown. + * + */ +typedef void (* XPLMAvionicsBezelCallback_f)( + float inAmbiantR, + float inAmbiantG, + float inAmbiantB, + void * inRefcon); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMAvionicsBrightness_f + * + * This is the prototype for screen brightness callbacks for custom devices. + * If you provide a callback, you can return the ratio of the screen's maximum + * brightness that the simulator should use when displaying the screen in the + * 3D cockpit. + * + * inRheoValue is the current ratio value (between 0 and 1) of the instrument + * brightness rheostat to which the device is bound. + * + * inAmbientBrightness is the value (between 0 and 1) that the callback should + * return for the screen to be at a usable brightness based on ambient light + * (if your device has a photo cell and automatically adjusts its brightness, + * you can return this and your screen will be at the optimal brightness to be + * readable, but not blind the pilot). + * + * inBusVoltsRatio is the ratio of the nominal voltage currently present on + * the bus to which the device is bound, or -1 if the device is not bound to + * the current aircraft. + * + * Refcon is a unique value that you specify when creating the device, + * allowing you to slip a pointer to your own data to the callback. + * + */ +typedef float (* XPLMAvionicsBrightness_f)( + float inRheoValue, + float inAmbiantBrightness, + float inBusVoltsRatio, + void * inRefcon); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMCreateAvionics_t + * + * The XPLMCreateAvionics_t structure defines all of the parameters used to + * generate your own glass cockpit device by using XPLMCreateAvionicsEx(). The + * structure will be expanded in future SDK APIs to include more features. + * Always set the structSize member to the size of your struct in bytes! + * + */ +typedef struct { + /* Used to inform XPLMCreateAvionicsEx() of the SDK version you compiled * + * against; should always be set to sizeof(XPLMCreateAvionics_t) */ + int structSize; + /* Width of the device's screen in pixels. */ + int screenWidth; + /* Height of the device's screen in pixels. */ + int screenHeight; + /* Width of the bezel around your device's screen for 2D pop-ups. */ + int bezelWidth; + /* Height of the bezel around your device's screen for 2D pop-ups. */ + int bezelHeight; + /* The screen's lateral offset into the bezel for 2D pop-ups. */ + int screenOffsetX; + /* The screen's vertical offset into the bezel for 2D pop-ups. */ + int screenOffsetY; + /* If set to true (1), X-Plane won't call your plugin to re-render the * + * device's screen every frame. Instead, you should tell X-Plane you want to * + * refresh your screen with XPLMAvionicsNeedsDrawing(), and X-Plane will call * + * you before rendering the next simulator frame. */ + int drawOnDemand; + /* The draw callback you will use to draw the 2D-popup bezel. This is called * + * only when the popup window is visible, and X-Plane is about to draw the * + * bezel in it. */ + XPLMAvionicsBezelCallback_f bezelDrawCallback; + /* The draw callback you will be using to draw into the device's screen * + * framebuffer. */ + XPLMAvionicsScreenCallback_f drawCallback; + /* The mouse click callback that is called when the user clicks onto your * + * bezel. */ + XPLMAvionicsMouse_f bezelClickCallback; + /* The mouse click callback that is called when the user clicks onto your * + * bezel. */ + XPLMAvionicsMouse_f bezelRightClickCallback; + /* The callback that is called when the users uses the scroll wheel over your * + * avionics' bezel. */ + XPLMAvionicsMouseWheel_f bezelScrollCallback; + /* The callback that lets you determine what cursor should be shown when the * + * mouse is over your device's bezel. */ + XPLMAvionicsCursor_f bezelCursorCallback; + /* The mouse click callback that is called when the user clicks onto your * + * screen. */ + XPLMAvionicsMouse_f screenTouchCallback; + /* The right mouse click callback that is called when the user clicks onto * + * your screen. */ + XPLMAvionicsMouse_f screenRightTouchCallback; + /* The callback that is called when the users uses the scroll wheel over your * + * avionics' screen. */ + XPLMAvionicsMouseWheel_f screenScrollCallback; + /* The callback that lets you determine what cursor should be shown when the * + * mouse is over your device's screen. */ + XPLMAvionicsCursor_f screenCursorCallback; + /* The key callback that is called when the user types in your popup. */ + XPLMAvionicsKeyboard_f keyboardCallback; + /* The callback that is called to determine the absolute brightness of the * + * device's screen. Set to NULL to use X-Plane's default behaviour. */ + XPLMAvionicsBrightness_f brightnessCallback; + /* A null-terminated string of maximum 64 characters to uniquely identify your* + * cockpit device. This must be unique (you cannot re-use an ID that X-Plane * + * or another plugin provides), and it must not contain spaces. This is the * + * string the OBJ file must reference when marking polygons with * + * ATTR_cockpit_device. The string is copied when you call * + * XPLMCreateAvionicsEx, so you don't need to hold this string in memory after* + * the call. */ + char * deviceID; + /* A null-terminated string to give a user-readable name to your device, which* + * can be presented in UI dialogs. */ + char * deviceName; + /* A reference which will be passed into your draw and mouse callbacks. Use * + * this to pass information to yourself as needed. */ + void * refcon; +} XPLMCreateAvionics_t; +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMCreateAvionicsEx + * + * Creates a new cockpit device to be used in the 3D cockpit. You can call + * this at any time: if an aircraft referencing your device is loaded before + * your plugin, the simulator will make sure to retroactively map your display + * into it. + * + * When you are done with the device, and at least before your + * plugin is unloaded, you should destroy the device using + * XPLMDestroyAvionics(). + * + */ +XPLM_API XPLMAvionicsID XPLMCreateAvionicsEx( + XPLMCreateAvionics_t * inParams); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMDestroyAvionics + * + * Destroys the cockpit device and deallocates its screen's memory. You should + * only ever call this for devices that you created using + * XPLMCreateAvionicsEx(), not X-Plane' built-ine devices you have customised. + * + */ +XPLM_API void XPLMDestroyAvionics( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMIsAvionicsBound + * + * Returns true (1) if the cockpit device with the given handle is used by the + * current aircraft. + * + */ +XPLM_API int XPLMIsAvionicsBound( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetAvionicsBrightnessRheo + * + * Sets the brightness setting's value, between 0 and 1, for the screen of the + * cockpit device with the given handle. + * + * If the device is bound to the current aircraft, this is a shortcut to + * setting the brightness rheostat value using the + * `sim/cockpit2/switches/instrument_brightness_ratio[]` dataref; this sets + * the slot in the `instrument_brightness_ratio` array to which the device is + * bound. + * + * If the device is not currently bound, the device keeps track of its own + * screen brightness rheostat, allowing you to control the brightness even + * though it isn't connected to the `instrument_brightness_ratio` dataref. + * + */ +XPLM_API void XPLMSetAvionicsBrightnessRheo( + XPLMAvionicsID inHandle, + float brightness); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMGetAvionicsBrightnessRheo + * + * Returns the brightness setting value, between 0 and 1, for the screen of + * the cockpit device with the given handle. + * + * If the device is bound to the current aircraft, this is a shortcut + * to getting the brightness rheostat value from the + * `sim/cockpit2/electrical/instrument_brightness_ratio` dataref; this + * gets the slot in the `instrument_brightness_ratio` array to which + * the device is bound. + * + * If the device is not currently bound, this returns the device's own + * brightness rheostat value. + * + */ +XPLM_API float XPLMGetAvionicsBrightnessRheo( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMGetAvionicsBusVoltsRatio + * + * Returns the ratio of the nominal voltage (1.0 means full nominal voltage) + * of the electrical bus to which the given avionics device is bound, or -1 if + * the device is not bound to the current aircraft. + * + */ +XPLM_API float XPLMGetAvionicsBusVoltsRatio( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMIsCursorOverAvionics + * + * Returns true (1) if the mouse is currently over the screen of cockpit + * device with the given handle. If they are not NULL, the optional x and y + * arguments are filled with the co-ordinates of the mouse cursor in device + * co-ordinates. + * + */ +XPLM_API int XPLMIsCursorOverAvionics( + XPLMAvionicsID inHandle, + int * outX, /* Can be NULL */ + int * outY); /* Can be NULL */ +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMAvionicsNeedsDrawing + * + * Tells X-Plane that your device's screen needs to be re-drawn. If your + * device is marked for on-demand drawing, X-Plane will call your screen + * drawing callback before drawing the next simulator frame. If your device is + * already drawn every frame, this has no effect. + * + */ +XPLM_API void XPLMAvionicsNeedsDrawing( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetAvionicsPopupVisible + * + * Shows or hides the popup window for a cockpit device. + * + */ +XPLM_API void XPLMSetAvionicsPopupVisible( + XPLMAvionicsID inHandle, + int inVisible); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMIsAvionicsPopupVisible + * + * Returns true (1) if the popup window for a cockpit device is visible. + * + */ +XPLM_API int XPLMIsAvionicsPopupVisible( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMPopOutAvionics + * + * Pops out the window for a cockpit device. + * + */ +XPLM_API void XPLMPopOutAvionics( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMIsAvionicsPoppedOut + * + * Returns true (1) if the popup window for a cockpit device is popped out. + * + */ +XPLM_API int XPLMIsAvionicsPoppedOut( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMTakeAvionicsKeyboardFocus + * + * This routine gives keyboard focus to the popup window of a custom cockpit + * device, if it is visible. + * + */ +XPLM_API void XPLMTakeAvionicsKeyboardFocus( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMHasAvionicsKeyboardFocus + * + * Returns true (1) if the popup window for a cockpit device has keyboard + * focus. + * + */ +XPLM_API int XPLMHasAvionicsKeyboardFocus( + XPLMAvionicsID inHandle); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMGetAvionicsGeometry + * + * Returns the bounds of a cockpit device's popup window in the X-Plane + * coordinate system. + * + */ +XPLM_API void XPLMGetAvionicsGeometry( + XPLMAvionicsID inHandle, + int * outLeft, /* Can be NULL */ + int * outTop, /* Can be NULL */ + int * outRight, /* Can be NULL */ + int * outBottom); /* Can be NULL */ +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetAvionicsGeometry + * + * Sets the size and position of a cockpit device's popup window in the + * X-Plane coordinate system. + * + */ +XPLM_API void XPLMSetAvionicsGeometry( + XPLMAvionicsID inHandle, + int inLeft, + int inTop, + int inRight, + int inBottom); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMGetAvionicsGeometryOS + * + * Returns the bounds of a cockpit device's popped-out window. + * + */ +XPLM_API void XPLMGetAvionicsGeometryOS( + XPLMAvionicsID inHandle, + int * outLeft, /* Can be NULL */ + int * outTop, /* Can be NULL */ + int * outRight, /* Can be NULL */ + int * outBottom); /* Can be NULL */ +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetAvionicsGeometryOS + * + * Sets the size and position of a cockpit device's popped-out window. + * + */ +XPLM_API void XPLMSetAvionicsGeometryOS( + XPLMAvionicsID inHandle, + int inLeft, + int inTop, + int inRight, + int inBottom); +#endif /* XPLM410 */ + #endif /* XPLM400 */ /*************************************************************************** * WINDOW API @@ -542,28 +1117,6 @@ typedef void (* XPLMHandleKey_f)( void * inRefcon, int losingFocus); -/* - * XPLMMouseStatus - * - * When the mouse is clicked, your mouse click routine is called repeatedly. - * It is first called with the mouse down message. It is then called zero or - * more times with the mouse-drag message, and finally it is called once with - * the mouse up message. All of these messages will be directed to the same - * window; you are guaranteed to not receive a drag or mouse-up event without - * first receiving the corresponding mouse-down. - * - */ -enum { - xplm_MouseDown = 1, - - xplm_MouseDrag = 2, - - xplm_MouseUp = 3, - - -}; -typedef int XPLMMouseStatus; - /* * XPLMHandleMouseClick_f * @@ -596,32 +1149,6 @@ typedef int (* XPLMHandleMouseClick_f)( XPLMMouseStatus inMouse, void * inRefcon); -#if defined(XPLM200) -/* - * XPLMCursorStatus - * - * XPLMCursorStatus describes how you would like X-Plane to manage the cursor. - * See XPLMHandleCursor_f for more info. - * - */ -enum { - /* X-Plane manages the cursor normally, plugin does not affect the cusrsor. */ - xplm_CursorDefault = 0, - - /* X-Plane hides the cursor. */ - xplm_CursorHidden = 1, - - /* X-Plane shows the cursor as the default arrow. */ - xplm_CursorArrow = 2, - - /* X-Plane shows the cursor but lets you select an OS cursor. */ - xplm_CursorCustom = 3, - - -}; -typedef int XPLMCursorStatus; -#endif /* XPLM200 */ - #if defined(XPLM200) /* * XPLMHandleCursor_f diff --git a/SDK/CHeaders/XPLM/XPLMGraphics.h b/SDK/CHeaders/XPLM/XPLMGraphics.h old mode 100755 new mode 100644 index 0130d9db..f05cb1c9 --- a/SDK/CHeaders/XPLM/XPLMGraphics.h +++ b/SDK/CHeaders/XPLM/XPLMGraphics.h @@ -373,7 +373,7 @@ XPLM_API void XPLMDrawString( float * inColorRGB, int inXOffset, int inYOffset, - char * inChar, + const char * inChar, int * inWordWrapWidth, /* Can be NULL */ XPLMFontID inFontID); diff --git a/SDK/CHeaders/XPLM/XPLMMenus.h b/SDK/CHeaders/XPLM/XPLMMenus.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/XPLM/XPLMNavigation.h b/SDK/CHeaders/XPLM/XPLMNavigation.h old mode 100755 new mode 100644 index ec5f45dd..584e7471 --- a/SDK/CHeaders/XPLM/XPLMNavigation.h +++ b/SDK/CHeaders/XPLM/XPLMNavigation.h @@ -72,6 +72,8 @@ enum { xplm_Nav_LatLon = 2048, + xplm_Nav_TACAN = 4096, + }; typedef int XPLMNavType; @@ -162,7 +164,7 @@ XPLM_API XPLMNavRef XPLMFindLastNavAidOfType( * This routine provides a simple way to do a number of useful searches: * * Find the nearest navaid on this frequency. * * Find the nearest airport. - * * Find the VOR whose ID is "KBOS". + * * Find the VOR whose ID is "BOS". * * Find the nearest airport whose name contains "Chicago". * */ @@ -257,7 +259,8 @@ XPLM_API void XPLMSetDisplayedFMSEntry( /* * XPLMSetDestinationFMSEntry * - * This routine changes which entry the FMS is flying the aircraft toward. + * This routine changes which entry the FMS is flying the aircraft toward. The + * track is from the n-1'th point to the n'th point. * */ XPLM_API void XPLMSetDestinationFMSEntry( @@ -330,6 +333,244 @@ XPLM_API void XPLMSetFMSEntryLatLon( XPLM_API void XPLMClearFMSEntry( int inIndex); +#if defined(XPLM410) +/* + * XPLMNavFlightPlan + * + * These enumerations defines the flightplan you are accesing using the + * FMSFlightPlan functions. An airplane can have up to two navigation + * devices (GPS or FMS) and each device can have two flightplans. A GPS + * has an enroute and an approach flightplan. An FMS has an active and a + * temporary flightplan. If you are trying to access a flightplan that + * doesn't exist in your aircraft, e.g. asking a GPS for a temp + * flightplan, FMSFlighPlan functions have no effect and will return no + * information. + * + */ +enum { + xplm_Fpl_Pilot_Primary = 0, + + xplm_Fpl_CoPilot_Primary = 1, + + xplm_Fpl_Pilot_Approach = 2, + + xplm_Fpl_CoPilot_Approach = 3, + + xplm_Fpl_Pilot_Temporary = 4, + + xplm_Fpl_CoPilot_Temporary = 5, + + +}; +typedef int XPLMNavFlightPlan; +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMCountFMSFlightPlanEntries + * + * This routine returns the number of entries in the FMS. + * + */ +XPLM_API int XPLMCountFMSFlightPlanEntries( + XPLMNavFlightPlan inFlightPlan); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMGetDisplayedFMSFlightPlanEntry + * + * This routine returns the index of the entry the pilot is viewing. + * + */ +XPLM_API int XPLMGetDisplayedFMSFlightPlanEntry( + XPLMNavFlightPlan inFlightPlan); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMGetDestinationFMSFlightPlanEntry + * + * This routine returns the index of the entry the FMS is flying to. + * + */ +XPLM_API int XPLMGetDestinationFMSFlightPlanEntry( + XPLMNavFlightPlan inFlightPlan); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetDisplayedFMSFlightPlanEntry + * + * This routine changes which entry the FMS is showing to the index specified. + * + */ +XPLM_API void XPLMSetDisplayedFMSFlightPlanEntry( + XPLMNavFlightPlan inFlightPlan, + int inIndex); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetDestinationFMSFlightPlanEntry + * + * This routine changes which entry the FMS is flying the aircraft toward. The + * track is from the n-1'th point to the n'th point. + * + */ +XPLM_API void XPLMSetDestinationFMSFlightPlanEntry( + XPLMNavFlightPlan inFlightPlan, + int inIndex); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetDirectToFMSFlightPlanEntry + * + * This routine changes which entry the FMS is flying the aircraft toward. The + * track is from the current position of the aircraft directly to the n'th + * point, ignoring the point before it. + * + */ +XPLM_API void XPLMSetDirectToFMSFlightPlanEntry( + XPLMNavFlightPlan inFlightPlan, + int inIndex); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMGetFMSFlightPlanEntryInfo + * + * This routine returns information about a given FMS entry. If the entry is + * an airport or navaid, a reference to a nav entry can be returned allowing + * you to find additional information (such as a frequency, ILS heading, name, + * etc.). Note that this reference can be XPLM_NAV_NOT_FOUND until the + * information has been looked up asynchronously, so after flightplan changes, + * it might take up to a second for this field to become populated. The other + * information is available immediately. For a lat/lon entry, the lat/lon is + * returned by this routine but the navaid cannot be looked up (and the + * reference will be XPLM_NAV_NOT_FOUND). FMS name entry buffers should be at + * least 256 chars in length. + * + * WARNING: Due to a bug in X-Plane prior to 11.31, the navaid reference will + * not be set to XPLM_NAV_NOT_FOUND while no data is available, and instead + * just remain the value of the variable that you passed the pointer to. + * Therefore, always initialize the variable to XPLM_NAV_NOT_FOUND before + * passing the pointer to this function. + * + */ +XPLM_API void XPLMGetFMSFlightPlanEntryInfo( + XPLMNavFlightPlan inFlightPlan, + int inIndex, + XPLMNavType * outType, /* Can be NULL */ + char * outID, /* Can be NULL */ + XPLMNavRef * outRef, /* Can be NULL */ + int * outAltitude, /* Can be NULL */ + float * outLat, /* Can be NULL */ + float * outLon); /* Can be NULL */ +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetFMSFlightPlanEntryInfo + * + * This routine changes an entry in the FMS to have the destination navaid + * passed in and the altitude specified. Use this only for airports, fixes, + * and radio-beacon navaids. Currently of radio beacons, the FMS can only + * support VORs and NDBs. Use the routines below to clear or fly to a lat/lon. + * + */ +XPLM_API void XPLMSetFMSFlightPlanEntryInfo( + XPLMNavFlightPlan inFlightPlan, + int inIndex, + XPLMNavRef inRef, + int inAltitude); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetFMSFlightPlanEntryLatLon + * + * This routine changes the entry in the FMS to a lat/lon entry with the given + * coordinates. + * + */ +XPLM_API void XPLMSetFMSFlightPlanEntryLatLon( + XPLMNavFlightPlan inFlightPlan, + int inIndex, + float inLat, + float inLon, + int inAltitude); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSetFMSFlightPlanEntryLatLonWithId + * + * This routine changes the entry in the FMS to a lat/lon entry with the given + * coordinates. You can specify the display ID of the waypoint. + * + */ +XPLM_API void XPLMSetFMSFlightPlanEntryLatLonWithId( + XPLMNavFlightPlan inFlightPlan, + int inIndex, + float inLat, + float inLon, + int inAltitude, + const char* inId, + unsigned int inIdLength); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMClearFMSFlightPlanEntry + * + * This routine clears the given entry, potentially shortening the flight + * plan. + * + */ +XPLM_API void XPLMClearFMSFlightPlanEntry( + XPLMNavFlightPlan inFlightPlan, + int inIndex); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMLoadFMSFlightPlan + * + * Loads an X-Plane 11 and later formatted flightplan from the buffer into the + * FMS or GPS, including instrument procedures. Use device index 0 for the + * pilot-side and device index 1 for the co-pilot side unit. + * + */ +XPLM_API void XPLMLoadFMSFlightPlan( + int inDevice, + const char * inBuffer, + unsigned int inBufferLen); +#endif /* XPLM410 */ + +#if defined(XPLM410) +/* + * XPLMSaveFMSFlightPlan + * + * Saves an X-Plane 11 formatted flightplan from the FMS or GPS into a char + * buffer that you provide. Use device index 0 for the pilot-side and device + * index 1 for the co-pilot side unit. Provide the length of the buffer you + * allocated. X-Plane will write a null-terminated string if the full flight + * plan fits into the buffer. If your buffer is too small, X-Plane will write + * inBufferLen characters, and the resulting buffer is not null-terminated. + * The return value is the number of characters (including null terminator) + * that X-Plane needed to write the flightplan. If this number is larger than + * the buffer you provided, the flightplan in the buffer will be incomplete + * and the buffer not null-terminated. + * + */ +XPLM_API unsigned int XPLMSaveFMSFlightPlan( + int inDevice, + char * inBuffer, + unsigned int inBufferLen); +#endif /* XPLM410 */ + /*************************************************************************** * GPS RECEIVER ***************************************************************************/ diff --git a/SDK/CHeaders/XPLM/XPLMPlanes.h b/SDK/CHeaders/XPLM/XPLMPlanes.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/XPLM/XPLMPlugin.h b/SDK/CHeaders/XPLM/XPLMPlugin.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/XPLM/XPLMProcessing.h b/SDK/CHeaders/XPLM/XPLMProcessing.h old mode 100755 new mode 100644 diff --git a/SDK/CHeaders/XPLM/XPLMUtilities.h b/SDK/CHeaders/XPLM/XPLMUtilities.h old mode 100755 new mode 100644 index 694ed0b7..d2fbf93c --- a/SDK/CHeaders/XPLM/XPLMUtilities.h +++ b/SDK/CHeaders/XPLM/XPLMUtilities.h @@ -318,6 +318,10 @@ enum { xplm_Language_Chinese = 10, #endif /* XPLM300 */ +#if defined(XPLM400) + xplm_Language_Ukrainian = 11, + +#endif /* XPLM400 */ }; typedef int XPLMLanguageCode; diff --git a/SDK/CHeaders/XPLM/XPLMWeather.h b/SDK/CHeaders/XPLM/XPLMWeather.h index 9d4134a9..3f1f50f7 100644 --- a/SDK/CHeaders/XPLM/XPLMWeather.h +++ b/SDK/CHeaders/XPLM/XPLMWeather.h @@ -21,7 +21,6 @@ extern "C" { #endif -#if defined(XPLM400) /*************************************************************************** * WEATHER ACCESS ***************************************************************************/ @@ -105,26 +104,32 @@ typedef struct { XPLMWeatherInfoClouds_t cloud_layers[3]; } XPLMWeatherInfo_t; +#if defined(XPLM400) /* * XPLMGetMETARForAirport * - * Get the last known METAR report for an airport by ICAO code. Note that the - * actual weather at that airport may have evolved significantly since the + * Get the last-downloaded METAR report for an airport by ICAO code. Note that + * the actual weather at that airport may have evolved significantly since the * last downloaded METAR. outMETAR must point to a char buffer of at least 150 - * characters. This call is not intended to be used per-frame. + * characters. This call is not intended to be used per-frame. This call does + * not return the current weather at the airport, and returns an empty string + * if the system is not in real-weather mode. * */ XPLM_API void XPLMGetMETARForAirport( const char * airport_id, XPLMFixedString150_t * outMETAR); +#endif /* XPLM400 */ +#if defined(XPLM400) /* * XPLMGetWeatherAtLocation * * Get the current weather conditions at a given location. Note that this does * not work world-wide, only within the surrounding region. Return 1 if - * detailed weather was found, 0 if not. This call is not intended to be used - * per-frame. + * detailed weather (i.e. an airport-specific METAR) was found, 0 if not. In + * both cases, the structure will contain the best data available. This call + * is not intended to be used per-frame. * */ XPLM_API int XPLMGetWeatherAtLocation( @@ -132,8 +137,8 @@ XPLM_API int XPLMGetWeatherAtLocation( double longitude, double altitude_m, XPLMWeatherInfo_t * out_info); - #endif /* XPLM400 */ + #ifdef __cplusplus } #endif diff --git a/SDK/Delphi/Widgets/XPStandardWidgets.pas b/SDK/Delphi/Widgets/XPStandardWidgets.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/Widgets/XPUIGraphics.pas b/SDK/Delphi/Widgets/XPUIGraphics.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/Widgets/XPWidgetDefs.pas b/SDK/Delphi/Widgets/XPWidgetDefs.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/Widgets/XPWidgetUtils.pas b/SDK/Delphi/Widgets/XPWidgetUtils.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/Widgets/XPWidgets.pas b/SDK/Delphi/Widgets/XPWidgets.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/XPLM/XPLMCamera.pas b/SDK/Delphi/XPLM/XPLMCamera.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/XPLM/XPLMDataAccess.pas b/SDK/Delphi/XPLM/XPLMDataAccess.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/XPLM/XPLMDefs.pas b/SDK/Delphi/XPLM/XPLMDefs.pas old mode 100755 new mode 100644 index ff652013..c2273bc3 --- a/SDK/Delphi/XPLM/XPLMDefs.pas +++ b/SDK/Delphi/XPLM/XPLMDefs.pas @@ -81,8 +81,8 @@ { X-Plane itself } XPLM_PLUGIN_XPLANE = (0); - { The current XPLM revision is 4.00 (400). } - kXPLM_Version = (400); + { The current XPLM revision is 4.10 (410). } + kXPLM_Version = (410); { XPLMKeyFlags @@ -444,6 +444,51 @@ buffer[150] : XPLMChar; END; PXPLMFixedString150_t = ^XPLMFixedString150_t; +{$IFDEF XPLM200} + { + XPLMCursorStatus + + XPLMCursorStatus describes how you would like X-Plane to manage the cursor. + See XPLMHandleCursor_f for more info. + } +TYPE + XPLMCursorStatus = ( + { X-Plane manages the cursor normally, plugin does not affect the cusrsor. } + xplm_CursorDefault = 0 + + { X-Plane hides the cursor. } + ,xplm_CursorHidden = 1 + + { X-Plane shows the cursor as the default arrow. } + ,xplm_CursorArrow = 2 + + { X-Plane shows the cursor but lets you select an OS cursor. } + ,xplm_CursorCustom = 3 + + ); + PXPLMCursorStatus = ^XPLMCursorStatus; +{$ENDIF XPLM200} + { + XPLMMouseStatus + + When the mouse is clicked, your mouse click routine is called + repeatedly. It is first called with the mouse down message. It is + then called zero or more times with the mouse-drag message, and finally + it is called once with the mouse up message. All of these messages + will be directed to the same window; you are guaranteed to not receive + a drag or mouse-up event without first receiving the corresponding + mouse-down. + } +TYPE + XPLMMouseStatus = ( + xplm_MouseDown = 1 + + ,xplm_MouseDrag = 2 + + ,xplm_MouseUp = 3 + + ); + PXPLMMouseStatus = ^XPLMMouseStatus; IMPLEMENTATION diff --git a/SDK/Delphi/XPLM/XPLMDisplay.pas b/SDK/Delphi/XPLM/XPLMDisplay.pas old mode 100755 new mode 100644 index 704bc8a6..7629f96e --- a/SDK/Delphi/XPLM/XPLMDisplay.pas +++ b/SDK/Delphi/XPLM/XPLMDisplay.pas @@ -272,13 +272,30 @@ * AVIONICS API ___________________________________________________________________________} { - Drawing callbacks for before and after X-Plane draws the instrument screen - can be registered for every cockpit device. If the user plane does not - have the device installed, your callback will not be called! Use the - return value to enable or disable X-Plane's drawing. By drawing into the - framebuffer of the avionics device, your modifications will be visible - regardless whether the device's screen is in a 3d cockpit or a popup - window. + The Avionics API allows you to customize the drawing and behaviour of the + built-in cockpit devices (GNS, G1000, etc.), and create your own cockpit + devices. For built-in devices, you can draw before and/or after X-Plane + does, and optionally prevent X-Plane from drawing the screen at all. + Customized built-in devices and custom devices are available in the 3D + cockpit as well as in the form of pop-up/pop-out windows. + + The API also allows you to receive mouse interaction events for your device + (click down, drag, and up, mouse wheel scroll, cursor) for both screen and + bezel. While these always work when the device is popped-up in its window, + you must add a `ATTR_manip_device` manipulator on top of your screen in + order to receive mouse events from the 3D cockpit. + + You can also use the avionics API to control the state and location of + cockpit devices' pop-up windows. + + When working with avionics devices, all co-ordinates you receive when + drawing or dealing with click events are in texels. The x-axis grows right, + the y-axis grows up. In bezel callbacks, the origin is at the bottom left + corner of the bezel. In screen callbacks, the origin is at the bottom-left + of the screen. X-Plane takes care of scaling your screen and bezel if the + user pops out the device's window: you should always draw your screen and + bezel as if they were at the size you specified when registering callbacks + or creating a device. } @@ -350,11 +367,12 @@ { XPLMAvionicsCallback_f - This is the prototype for your drawing callback. You are passed in the - device you are enhancing/replacing, and whether it is before or after - X-Plane drawing. If you are before X-Plane, return 1 to let X-Plane draw or - 0 to suppress X-Plane drawing. If you are after the phase the return value - is ignored. + This is the prototype for drawing callbacks for customized built-in device. + You are passed in the device you are enhancing/replacing, and (if this is + used for a built-in device that you are customizing) whether it is before + or after X-Plane drawing. If you are before X-Plane, return 1 to let + X-Plane draw or 0 to suppress X-Plane drawing. If you are called after + X-Plane, the return value is ignored. Refcon is a unique value that you specify when registering the callback, allowing you to slip a pointer to your own data to the callback. @@ -368,13 +386,84 @@ inIsBefore : Integer; inRefcon : pointer) : Integer; cdecl; +{$IFDEF XPLM410} + { + XPLMAvionicsMouse_f + + Mouse click callback for clicks into your screen or (2D-popup) bezel, + useful if the device you are making simulates a touch-screen the user can + click in the 3d cockpit, or if your pop-up's bezel has buttons that the + user can click. Return 1 to consume the event, or 0 to let X-Plane process + it (for stock avionics devices). + } +TYPE + XPLMAvionicsMouse_f = FUNCTION( + x : Integer; + y : Integer; + inMouse : XPLMMouseStatus; + inRefcon : pointer) : Integer; cdecl; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMAvionicsMouseWheel_f + + Mouse wheel callback for scroll actions into your screen or (2D-popup) + bezel, useful if your bezel has knobs that can be turned using the mouse + wheel, or if you want to simulate pinch-to-zoom on a touchscreen. Return 1 + to consume the event, or 0 to let X-Plane process it (for stock avionics + devices). The number of "clicks" indicates how far the wheel was turned + since the last callback. The wheel is 0 for the vertical axis or 1 for the + horizontal axis (for OS/mouse combinations that support this). + } + XPLMAvionicsMouseWheel_f = FUNCTION( + x : Integer; + y : Integer; + wheel : Integer; + clicks : Integer; + inRefcon : pointer) : Integer; cdecl; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMAvionicsCursor_f + + Cursor callback that decides which cursor to show when the mouse is over + your screen or (2D-popup) bezel. Return xplm_CursorDefault to let X-Plane + use which cursor to show, or other values to force the cursor to a + particular one (see XPLMCursorStatus). + } + XPLMAvionicsCursor_f = FUNCTION( + x : Integer; + y : Integer; + inRefcon : pointer) : XPLMCursorStatus; cdecl; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMAvionicsKeyboard_f + + Key callback called when your device is popped up and you've requested to + capture the keyboard. Return 1 to consume the event, or 0 to let X-Plane + process it (for stock avionics devices). + } + XPLMAvionicsKeyboard_f = FUNCTION( + inKey : XPLMChar; + inFlags : XPLMKeyFlags; + inVirtualKey : XPLMChar; + inRefCon : pointer; + losingFocus : Integer) : Integer; cdecl; +{$ENDIF XPLM410} + +TYPE { XPLMAvionicsID This is an opaque identifier for an avionics display that you enhance or replace. When you register your callbacks (via - XPLMRegisterAvionicsCallbacksEx()), you will specify callbacks to handle - drawing, and get back such a handle. + XPLMRegisterAvionicsCallbacksEx()) or create a new device (via + XPLMCreateAvionicsDevice()), you will specify drawing and mouse callbacks, + and get back such a handle. } XPLMAvionicsID = pointer; PXPLMAvionicsID = ^XPLMAvionicsID; @@ -383,20 +472,65 @@ XPLMCustomizeAvionics_t The XPLMCustomizeAvionics_t structure defines all of the parameters used to - replace or enhance avionics for using XPLMRegisterAvionicsCallbacksEx(). - The structure will be expanded in future SDK APIs to include more features. - Always set the structSize member to the size of your struct in bytes! + replace or enhance built-in simulator avionics devices using + XPLMRegisterAvionicsCallbacksEx(). The structure will be expanded in future + SDK APIs to include more features. Always set the structSize member to the + size of your struct in bytes! } XPLMCustomizeAvionics_t = RECORD { Used to inform XPLMRegisterAvionicsCallbacksEx() of the SDK version you } { compiled against; should always be set to sizeof(XPLMCustomizeAvionics_t) } structSize : Integer; - { Which avionics device you want your drawing applied to. } + { The built-in avionics device to which you want your drawing applied. } deviceId : XPLMDeviceID; { The draw callback to be called before X-Plane draws. } drawCallbackBefore : XPLMAvionicsCallback_f; { The draw callback to be called after X-Plane has drawn. } drawCallbackAfter : XPLMAvionicsCallback_f; +{$IFDEF XPLM410} + { The mouse click callback that is called when the user clicks onto the } + { device's bezel. } + bezelClickCallback : XPLMAvionicsMouse_f; +{$ENDIF XPLM410} +{$IFDEF XPLM410} + { The mouse click callback that is called when the user clicks onto the } + { device's bezel. } + bezelRightClickCallback : XPLMAvionicsMouse_f; +{$ENDIF XPLM410} +{$IFDEF XPLM410} + { The callback that is called when the users uses the scroll wheel over the } + { device's bezel. } + bezelScrollCallback : XPLMAvionicsMouseWheel_f; +{$ENDIF XPLM410} +{$IFDEF XPLM410} + { The callback that lets you determine what cursor should be shown when the } + { mouse is over the device's bezel. } + bezelCursorCallback : XPLMAvionicsCursor_f; +{$ENDIF XPLM410} +{$IFDEF XPLM410} + { The mouse click callback that is called when the user clicks onto the } + { device's screen. } + screenTouchCallback : XPLMAvionicsMouse_f; +{$ENDIF XPLM410} +{$IFDEF XPLM410} + { The right mouse click callback that is called when the user clicks onto the} + { device's screen. } + screenRightTouchCallback : XPLMAvionicsMouse_f; +{$ENDIF XPLM410} +{$IFDEF XPLM410} + { The callback that is called when the users uses the scroll wheel over the } + { device's screen. } + screenScrollCallback : XPLMAvionicsMouseWheel_f; +{$ENDIF XPLM410} +{$IFDEF XPLM410} + { The callback that lets you determine what cursor should be shown when the } + { mouse is over the device's screen. } + screenCursorCallback : XPLMAvionicsCursor_f; +{$ENDIF XPLM410} +{$IFDEF XPLM410} + { The key callback that is called when the user types in the device's popup. } + keyboardCallback : XPLMAvionicsKeyboard_f; +{$ENDIF XPLM410} { A reference which will be passed into each of your draw callbacks. Use this} { to pass information to yourself as needed. } refcon : pointer; @@ -406,27 +540,464 @@ { XPLMRegisterAvionicsCallbacksEx - This routine registers your callbacks for a device. This returns a handle. - If the returned handle is NULL, there was a problem interpreting your - input, most likely the struct size was wrong for your SDK version. If the - returned handle is not NULL, your callbacks will be called according to - schedule as long as your plugin is not deactivated, or unloaded, or your + This routine registers your callbacks for a built-in device. This returns a + handle. If the returned handle is NULL, there was a problem interpreting + your input, most likely the struct size was wrong for your SDK version. If + the returned handle is not NULL, your callbacks will be called according to + schedule as long as your plugin is not deactivated, or unloaded, or you call XPLMUnregisterAvionicsCallbacks(). + + Note that you cannot register new callbacks for a device that is not a + built-in one (for example a device that you have created, or a device + another plugin has created). } FUNCTION XPLMRegisterAvionicsCallbacksEx( inParams : PXPLMCustomizeAvionics_t) : XPLMAvionicsID; cdecl; external XPLM_DLL; + { + XPLMGetAvionicsHandle + + This routine registers no callbacks for a built-in cockpit device, but + returns a handle which allows you to interact with it using the Avionics + Device API. Use this if you do not wish to intercept drawing, clicks and + touchscreen calls to a device, but want to interact with its popup + programmatically. This is equivalent to calling + XPLMRegisterAvionicsCallbackEx() with NULL for all callbacks. + } + FUNCTION XPLMGetAvionicsHandle( + inDeviceID : XPLMDeviceID) : XPLMAvionicsID; + cdecl; external XPLM_DLL; + { XPLMUnregisterAvionicsCallbacks - This routine unregisters your callbacks for a device. They will no longer - be called. + This routine unregisters your callbacks for a built-in device. You should + only call this for handles you acquired from + XPLMRegisterAvionicsCallbacksEx(). They will no longer be called. } PROCEDURE XPLMUnregisterAvionicsCallbacks( inAvionicsId : XPLMAvionicsID); cdecl; external XPLM_DLL; +{$IFDEF XPLM410} + { + XPLMAvionicsScreenCallback_f + + This is the prototype for drawing callbacks for custom devices' screens. + Refcon is a unique value that you specify when creating the device, + allowing you to slip a pointer to your own data to the callback. + + Upon entry the OpenGL context will be correctly set up for you and OpenGL + will be in panel coordinates for 2d drawing. The OpenGL state (texturing, + etc.) will be unknown. X-Plane does not clear your screen for you between + calls - this means you can re-use portions to save drawing, but otherwise + you must call glClear() to erase the screen's contents. + } +TYPE + XPLMAvionicsScreenCallback_f = PROCEDURE( + inRefcon : pointer); cdecl; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMAvionicsBezelCallback_f + + This is the prototype for drawing callbacks for custom devices' bezel. You + are passed in the red, green, and blue values you can optinally use for + tinting your bezel accoring to ambiant light. + + Refcon is a unique value that you specify when creating the device, + allowing you to slip a pointer to your own data to the callback. + + Upon entry the OpenGL context will be correctly set up for you and OpenGL + will be in panel coordinates for 2d drawing. The OpenGL state (texturing, + etc.) will be unknown. + } + XPLMAvionicsBezelCallback_f = PROCEDURE( + inAmbiantR : Single; + inAmbiantG : Single; + inAmbiantB : Single; + inRefcon : pointer); cdecl; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMAvionicsBrightness_f + + This is the prototype for screen brightness callbacks for custom devices. + If you provide a callback, you can return the ratio of the screen's maximum + brightness that the simulator should use when displaying the screen in the + 3D cockpit. + + inRheoValue is the current ratio value (between 0 and 1) of the instrument + brightness rheostat to which the device is bound. + + inAmbientBrightness is the value (between 0 and 1) that the callback should + return for the screen to be at a usable brightness based on ambient light + (if your device has a photo cell and automatically adjusts its brightness, + you can return this and your screen will be at the optimal brightness to be + readable, but not blind the pilot). + + inBusVoltsRatio is the ratio of the nominal voltage currently present on + the bus to which the device is bound, or -1 if the device is not bound to + the current aircraft. + + Refcon is a unique value that you specify when creating the device, + allowing you to slip a pointer to your own data to the callback. + } + XPLMAvionicsBrightness_f = FUNCTION( + inRheoValue : Single; + inAmbiantBrightness : Single; + inBusVoltsRatio : Single; + inRefcon : pointer) : Single; cdecl; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMCreateAvionics_t + + The XPLMCreateAvionics_t structure defines all of the parameters used to + generate your own glass cockpit device by using XPLMCreateAvionicsEx(). The + structure will be expanded in future SDK APIs to include more features. + Always set the structSize member to the size of your struct in bytes! + } + XPLMCreateAvionics_t = RECORD + { Used to inform XPLMCreateAvionicsEx() of the SDK version you compiled } + { against; should always be set to sizeof(XPLMCreateAvionics_t) } + structSize : Integer; + { Width of the device's screen in pixels. } + screenWidth : Integer; + { Height of the device's screen in pixels. } + screenHeight : Integer; + { Width of the bezel around your device's screen for 2D pop-ups. } + bezelWidth : Integer; + { Height of the bezel around your device's screen for 2D pop-ups. } + bezelHeight : Integer; + { The screen's lateral offset into the bezel for 2D pop-ups. } + screenOffsetX : Integer; + { The screen's vertical offset into the bezel for 2D pop-ups. } + screenOffsetY : Integer; + { If set to true (1), X-Plane won't call your plugin to re-render the } + { device's screen every frame. Instead, you should tell X-Plane you want to } + { refresh your screen with XPLMAvionicsNeedsDrawing(), and X-Plane will call } + { you before rendering the next simulator frame. } + drawOnDemand : Integer; + { The draw callback you will use to draw the 2D-popup bezel. This is called } + { only when the popup window is visible, and X-Plane is about to draw the } + { bezel in it. } + bezelDrawCallback : XPLMAvionicsBezelCallback_f; + { The draw callback you will be using to draw into the device's screen } + { framebuffer. } + drawCallback : XPLMAvionicsScreenCallback_f; + { The mouse click callback that is called when the user clicks onto your } + { bezel. } + bezelClickCallback : XPLMAvionicsMouse_f; + { The mouse click callback that is called when the user clicks onto your } + { bezel. } + bezelRightClickCallback : XPLMAvionicsMouse_f; + { The callback that is called when the users uses the scroll wheel over your } + { avionics' bezel. } + bezelScrollCallback : XPLMAvionicsMouseWheel_f; + { The callback that lets you determine what cursor should be shown when the } + { mouse is over your device's bezel. } + bezelCursorCallback : XPLMAvionicsCursor_f; + { The mouse click callback that is called when the user clicks onto your } + { screen. } + screenTouchCallback : XPLMAvionicsMouse_f; + { The right mouse click callback that is called when the user clicks onto } + { your screen. } + screenRightTouchCallback : XPLMAvionicsMouse_f; + { The callback that is called when the users uses the scroll wheel over your } + { avionics' screen. } + screenScrollCallback : XPLMAvionicsMouseWheel_f; + { The callback that lets you determine what cursor should be shown when the } + { mouse is over your device's screen. } + screenCursorCallback : XPLMAvionicsCursor_f; + { The key callback that is called when the user types in your popup. } + keyboardCallback : XPLMAvionicsKeyboard_f; + { The callback that is called to determine the absolute brightness of the } + { device's screen. Set to NULL to use X-Plane's default behaviour. } + brightnessCallback : XPLMAvionicsBrightness_f; + { A null-terminated string of maximum 64 characters to uniquely identify your} + { cockpit device. This must be unique (you cannot re-use an ID that X-Plane } + { or another plugin provides), and it must not contain spaces. This is the } + { string the OBJ file must reference when marking polygons with } + { ATTR_cockpit_device. The string is copied when you call } + { XPLMCreateAvionicsEx, so you don't need to hold this string in memory after} + { the call. } + deviceID : XPLMString; + { A null-terminated string to give a user-readable name to your device, which} + { can be presented in UI dialogs. } + deviceName : XPLMString; + { A reference which will be passed into your draw and mouse callbacks. Use } + { this to pass information to yourself as needed. } + refcon : pointer; + END; + PXPLMCreateAvionics_t = ^XPLMCreateAvionics_t; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMCreateAvionicsEx + + Creates a new cockpit device to be used in the 3D cockpit. You can call + this at any time: if an aircraft referencing your device is loaded before + your plugin, the simulator will make sure to retroactively map your display + into it. + + When you are done with the device, and at least before your + plugin is unloaded, you should destroy the device using + XPLMDestroyAvionics(). + } + FUNCTION XPLMCreateAvionicsEx( + inParams : PXPLMCreateAvionics_t) : XPLMAvionicsID; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMDestroyAvionics + + Destroys the cockpit device and deallocates its screen's memory. You should + only ever call this for devices that you created using + XPLMCreateAvionicsEx(), not X-Plane' built-ine devices you have customised. + } + PROCEDURE XPLMDestroyAvionics( + inHandle : XPLMAvionicsID); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMIsAvionicsBound + + Returns true (1) if the cockpit device with the given handle is used by the + current aircraft. + } + FUNCTION XPLMIsAvionicsBound( + inHandle : XPLMAvionicsID) : Integer; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetAvionicsBrightnessRheo + + Sets the brightness setting's value, between 0 and 1, for the screen of the + cockpit device with the given handle. + + If the device is bound to the current aircraft, this is a shortcut to + setting the brightness rheostat value using the + `sim/cockpit2/switches/instrument_brightness_ratio[]` dataref; this sets + the slot in the `instrument_brightness_ratio` array to which the device is + bound. + + If the device is not currently bound, the device keeps track of its own + screen brightness rheostat, allowing you to control the brightness even + though it isn't connected to the `instrument_brightness_ratio` dataref. + } + PROCEDURE XPLMSetAvionicsBrightnessRheo( + inHandle : XPLMAvionicsID; + brightness : Single); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMGetAvionicsBrightnessRheo + + Returns the brightness setting value, between 0 and 1, for the screen of + the cockpit device with the given handle. + + If the device is bound to the current aircraft, this is a shortcut + to getting the brightness rheostat value from the + `sim/cockpit2/electrical/instrument_brightness_ratio` dataref; this + gets the slot in the `instrument_brightness_ratio` array to which + the device is bound. + + If the device is not currently bound, this returns the device's own + brightness rheostat value. + } + FUNCTION XPLMGetAvionicsBrightnessRheo( + inHandle : XPLMAvionicsID) : Single; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMGetAvionicsBusVoltsRatio + + Returns the ratio of the nominal voltage (1.0 means full nominal voltage) + of the electrical bus to which the given avionics device is bound, or -1 if + the device is not bound to the current aircraft. + } + FUNCTION XPLMGetAvionicsBusVoltsRatio( + inHandle : XPLMAvionicsID) : Single; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMIsCursorOverAvionics + + Returns true (1) if the mouse is currently over the screen of cockpit + device with the given handle. If they are not NULL, the optional x and y + arguments are filled with the co-ordinates of the mouse cursor in device + co-ordinates. + } + FUNCTION XPLMIsCursorOverAvionics( + inHandle : XPLMAvionicsID; + outX : PInteger; { Can be nil } + outY : PInteger) : Integer; { Can be nil } + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMAvionicsNeedsDrawing + + Tells X-Plane that your device's screen needs to be re-drawn. If your + device is marked for on-demand drawing, X-Plane will call your screen + drawing callback before drawing the next simulator frame. If your device is + already drawn every frame, this has no effect. + } + PROCEDURE XPLMAvionicsNeedsDrawing( + inHandle : XPLMAvionicsID); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetAvionicsPopupVisible + + Shows or hides the popup window for a cockpit device. + } + PROCEDURE XPLMSetAvionicsPopupVisible( + inHandle : XPLMAvionicsID; + inVisible : Integer); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMIsAvionicsPopupVisible + + Returns true (1) if the popup window for a cockpit device is visible. + } + FUNCTION XPLMIsAvionicsPopupVisible( + inHandle : XPLMAvionicsID) : Integer; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMPopOutAvionics + + Pops out the window for a cockpit device. + } + PROCEDURE XPLMPopOutAvionics( + inHandle : XPLMAvionicsID); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMIsAvionicsPoppedOut + + Returns true (1) if the popup window for a cockpit device is popped out. + } + FUNCTION XPLMIsAvionicsPoppedOut( + inHandle : XPLMAvionicsID) : Integer; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMTakeAvionicsKeyboardFocus + + This routine gives keyboard focus to the popup window of a custom cockpit + device, if it is visible. + } + PROCEDURE XPLMTakeAvionicsKeyboardFocus( + inHandle : XPLMAvionicsID); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMHasAvionicsKeyboardFocus + + Returns true (1) if the popup window for a cockpit device has keyboard + focus. + } + FUNCTION XPLMHasAvionicsKeyboardFocus( + inHandle : XPLMAvionicsID) : Integer; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMGetAvionicsGeometry + + Returns the bounds of a cockpit device's popup window in the X-Plane + coordinate system. + } + PROCEDURE XPLMGetAvionicsGeometry( + inHandle : XPLMAvionicsID; + outLeft : PInteger; { Can be nil } + outTop : PInteger; { Can be nil } + outRight : PInteger; { Can be nil } + outBottom : PInteger); { Can be nil } + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetAvionicsGeometry + + Sets the size and position of a cockpit device's popup window in the + X-Plane coordinate system. + } + PROCEDURE XPLMSetAvionicsGeometry( + inHandle : XPLMAvionicsID; + inLeft : Integer; + inTop : Integer; + inRight : Integer; + inBottom : Integer); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMGetAvionicsGeometryOS + + Returns the bounds of a cockpit device's popped-out window. + } + PROCEDURE XPLMGetAvionicsGeometryOS( + inHandle : XPLMAvionicsID; + outLeft : PInteger; { Can be nil } + outTop : PInteger; { Can be nil } + outRight : PInteger; { Can be nil } + outBottom : PInteger); { Can be nil } + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetAvionicsGeometryOS + + Sets the size and position of a cockpit device's popped-out window. + } + PROCEDURE XPLMSetAvionicsGeometryOS( + inHandle : XPLMAvionicsID; + inLeft : Integer; + inTop : Integer; + inRight : Integer; + inBottom : Integer); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + {$ENDIF XPLM400} {___________________________________________________________________________ * WINDOW API @@ -525,26 +1096,6 @@ inRefcon : pointer; losingFocus : Integer); cdecl; - { - XPLMMouseStatus - - When the mouse is clicked, your mouse click routine is called repeatedly. - It is first called with the mouse down message. It is then called zero or - more times with the mouse-drag message, and finally it is called once with - the mouse up message. All of these messages will be directed to the same - window; you are guaranteed to not receive a drag or mouse-up event without - first receiving the corresponding mouse-down. - } - XPLMMouseStatus = ( - xplm_MouseDown = 1 - - ,xplm_MouseDrag = 2 - - ,xplm_MouseUp = 3 - - ); - PXPLMMouseStatus = ^XPLMMouseStatus; - { XPLMHandleMouseClick_f @@ -576,31 +1127,6 @@ inMouse : XPLMMouseStatus; inRefcon : pointer) : Integer; cdecl; -{$IFDEF XPLM200} - { - XPLMCursorStatus - - XPLMCursorStatus describes how you would like X-Plane to manage the cursor. - See XPLMHandleCursor_f for more info. - } -TYPE - XPLMCursorStatus = ( - { X-Plane manages the cursor normally, plugin does not affect the cusrsor. } - xplm_CursorDefault = 0 - - { X-Plane hides the cursor. } - ,xplm_CursorHidden = 1 - - { X-Plane shows the cursor as the default arrow. } - ,xplm_CursorArrow = 2 - - { X-Plane shows the cursor but lets you select an OS cursor. } - ,xplm_CursorCustom = 3 - - ); - PXPLMCursorStatus = ^XPLMCursorStatus; -{$ENDIF XPLM200} - {$IFDEF XPLM200} { XPLMHandleCursor_f @@ -631,6 +1157,7 @@ left of the global desktop space. In both cases, x increases as you move right, and y increases as you move up. } +TYPE XPLMHandleCursor_f = FUNCTION( inWindowID : XPLMWindowID; x : Integer; diff --git a/SDK/Delphi/XPLM/XPLMGraphics.pas b/SDK/Delphi/XPLM/XPLMGraphics.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/XPLM/XPLMMenus.pas b/SDK/Delphi/XPLM/XPLMMenus.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/XPLM/XPLMNavigation.pas b/SDK/Delphi/XPLM/XPLMNavigation.pas old mode 100755 new mode 100644 index 8b989848..7de39da6 --- a/SDK/Delphi/XPLM/XPLMNavigation.pas +++ b/SDK/Delphi/XPLM/XPLMNavigation.pas @@ -63,6 +63,8 @@ ,xplm_Nav_LatLon = 2048 + ,xplm_Nav_TACAN = 4096 + ); PXPLMNavType = ^XPLMNavType; @@ -153,7 +155,7 @@ This routine provides a simple way to do a number of useful searches: * Find the nearest navaid on this frequency. * Find the nearest airport. - * Find the VOR whose ID is "KBOS". + * Find the VOR whose ID is "BOS". * Find the nearest airport whose name contains "Chicago". } FUNCTION XPLMFindNavAid( @@ -247,7 +249,8 @@ { XPLMSetDestinationFMSEntry - This routine changes which entry the FMS is flying the aircraft toward. + This routine changes which entry the FMS is flying the aircraft toward. The + track is from the n-1'th point to the n'th point. } PROCEDURE XPLMSetDestinationFMSEntry( inIndex : Integer); @@ -320,6 +323,243 @@ inIndex : Integer); cdecl; external XPLM_DLL; +{$IFDEF XPLM410} + { + XPLMNavFlightPlan + + These enumerations defines the flightplan you are accesing using the + FMSFlightPlan functions. An airplane can have up to two navigation + devices (GPS or FMS) and each device can have two flightplans. A GPS + has an enroute and an approach flightplan. An FMS has an active and a + temporary flightplan. If you are trying to access a flightplan that + doesn't exist in your aircraft, e.g. asking a GPS for a temp + flightplan, FMSFlighPlan functions have no effect and will return no + information. + } +TYPE + XPLMNavFlightPlan = ( + xplm_Fpl_Pilot_Primary = 0 + + ,xplm_Fpl_CoPilot_Primary = 1 + + ,xplm_Fpl_Pilot_Approach = 2 + + ,xplm_Fpl_CoPilot_Approach = 3 + + ,xplm_Fpl_Pilot_Temporary = 4 + + ,xplm_Fpl_CoPilot_Temporary = 5 + + ); + PXPLMNavFlightPlan = ^XPLMNavFlightPlan; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMCountFMSFlightPlanEntries + + This routine returns the number of entries in the FMS. + } + FUNCTION XPLMCountFMSFlightPlanEntries( + inFlightPlan : XPLMNavFlightPlan) : Integer; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMGetDisplayedFMSFlightPlanEntry + + This routine returns the index of the entry the pilot is viewing. + } + FUNCTION XPLMGetDisplayedFMSFlightPlanEntry( + inFlightPlan : XPLMNavFlightPlan) : Integer; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMGetDestinationFMSFlightPlanEntry + + This routine returns the index of the entry the FMS is flying to. + } + FUNCTION XPLMGetDestinationFMSFlightPlanEntry( + inFlightPlan : XPLMNavFlightPlan) : Integer; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetDisplayedFMSFlightPlanEntry + + This routine changes which entry the FMS is showing to the index specified. + } + PROCEDURE XPLMSetDisplayedFMSFlightPlanEntry( + inFlightPlan : XPLMNavFlightPlan; + inIndex : Integer); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetDestinationFMSFlightPlanEntry + + This routine changes which entry the FMS is flying the aircraft toward. The + track is from the n-1'th point to the n'th point. + } + PROCEDURE XPLMSetDestinationFMSFlightPlanEntry( + inFlightPlan : XPLMNavFlightPlan; + inIndex : Integer); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetDirectToFMSFlightPlanEntry + + This routine changes which entry the FMS is flying the aircraft toward. The + track is from the current position of the aircraft directly to the n'th + point, ignoring the point before it. + } + PROCEDURE XPLMSetDirectToFMSFlightPlanEntry( + inFlightPlan : XPLMNavFlightPlan; + inIndex : Integer); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMGetFMSFlightPlanEntryInfo + + This routine returns information about a given FMS entry. If the entry is + an airport or navaid, a reference to a nav entry can be returned allowing + you to find additional information (such as a frequency, ILS heading, name, + etc.). Note that this reference can be XPLM_NAV_NOT_FOUND until the + information has been looked up asynchronously, so after flightplan changes, + it might take up to a second for this field to become populated. The other + information is available immediately. For a lat/lon entry, the lat/lon is + returned by this routine but the navaid cannot be looked up (and the + reference will be XPLM_NAV_NOT_FOUND). FMS name entry buffers should be at + least 256 chars in length. + + WARNING: Due to a bug in X-Plane prior to 11.31, the navaid reference will + not be set to XPLM_NAV_NOT_FOUND while no data is available, and instead + just remain the value of the variable that you passed the pointer to. + Therefore, always initialize the variable to XPLM_NAV_NOT_FOUND before + passing the pointer to this function. + } + PROCEDURE XPLMGetFMSFlightPlanEntryInfo( + inFlightPlan : XPLMNavFlightPlan; + inIndex : Integer; + outType : PXPLMNavType; { Can be nil } + outID : XPLMString; { Can be nil } + outRef : PXPLMNavRef; { Can be nil } + outAltitude : PInteger; { Can be nil } + outLat : PSingle; { Can be nil } + outLon : PSingle); { Can be nil } + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetFMSFlightPlanEntryInfo + + This routine changes an entry in the FMS to have the destination navaid + passed in and the altitude specified. Use this only for airports, fixes, + and radio-beacon navaids. Currently of radio beacons, the FMS can only + support VORs and NDBs. Use the routines below to clear or fly to a lat/lon. + } + PROCEDURE XPLMSetFMSFlightPlanEntryInfo( + inFlightPlan : XPLMNavFlightPlan; + inIndex : Integer; + inRef : XPLMNavRef; + inAltitude : Integer); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetFMSFlightPlanEntryLatLon + + This routine changes the entry in the FMS to a lat/lon entry with the given + coordinates. + } + PROCEDURE XPLMSetFMSFlightPlanEntryLatLon( + inFlightPlan : XPLMNavFlightPlan; + inIndex : Integer; + inLat : Single; + inLon : Single; + inAltitude : Integer); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSetFMSFlightPlanEntryLatLonWithId + + This routine changes the entry in the FMS to a lat/lon entry with the given + coordinates. You can specify the display ID of the waypoint. + } + PROCEDURE XPLMSetFMSFlightPlanEntryLatLonWithId( + inFlightPlan : XPLMNavFlightPlan; + inIndex : Integer; + inLat : Single; + inLon : Single; + inAltitude : Integer; + inId : XPLMString; + inIdLength : unsigned int); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMClearFMSFlightPlanEntry + + This routine clears the given entry, potentially shortening the flight + plan. + } + PROCEDURE XPLMClearFMSFlightPlanEntry( + inFlightPlan : XPLMNavFlightPlan; + inIndex : Integer); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMLoadFMSFlightPlan + + Loads an X-Plane 11 and later formatted flightplan from the buffer into the + FMS or GPS, including instrument procedures. Use device index 0 for the + pilot-side and device index 1 for the co-pilot side unit. + } + PROCEDURE XPLMLoadFMSFlightPlan( + inDevice : Integer; + inBuffer : XPLMString; + inBufferLen : unsigned int); + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + +{$IFDEF XPLM410} + { + XPLMSaveFMSFlightPlan + + Saves an X-Plane 11 formatted flightplan from the FMS or GPS into a char + buffer that you provide. Use device index 0 for the pilot-side and device + index 1 for the co-pilot side unit. Provide the length of the buffer you + allocated. X-Plane will write a null-terminated string if the full flight + plan fits into the buffer. If your buffer is too small, X-Plane will write + inBufferLen characters, and the resulting buffer is not null-terminated. + The return value is the number of characters (including null terminator) + that X-Plane needed to write the flightplan. If this number is larger than + the buffer you provided, the flightplan in the buffer will be incomplete + and the buffer not null-terminated. + } + FUNCTION XPLMSaveFMSFlightPlan( + inDevice : Integer; + inBuffer : XPLMString; + inBufferLen : unsigned int) : unsigned int; + cdecl; external XPLM_DLL; +{$ENDIF XPLM410} + {___________________________________________________________________________ * GPS RECEIVER ___________________________________________________________________________} diff --git a/SDK/Delphi/XPLM/XPLMPlanes.pas b/SDK/Delphi/XPLM/XPLMPlanes.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/XPLM/XPLMPlugin.pas b/SDK/Delphi/XPLM/XPLMPlugin.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/XPLM/XPLMProcessing.pas b/SDK/Delphi/XPLM/XPLMProcessing.pas old mode 100755 new mode 100644 diff --git a/SDK/Delphi/XPLM/XPLMUtilities.pas b/SDK/Delphi/XPLM/XPLMUtilities.pas old mode 100755 new mode 100644 index 5493d894..cd5a499c --- a/SDK/Delphi/XPLM/XPLMUtilities.pas +++ b/SDK/Delphi/XPLM/XPLMUtilities.pas @@ -306,6 +306,10 @@ ,xplm_Language_Chinese = 10 {$ENDIF XPLM300} +{$IFDEF XPLM400} + ,xplm_Language_Ukrainian = 11 +{$ENDIF XPLM400} + ); PXPLMLanguageCode = ^XPLMLanguageCode; diff --git a/SDK/Delphi/XPLM/XPLMWeather.pas b/SDK/Delphi/XPLM/XPLMWeather.pas index f277c2ce..05b761d8 100644 --- a/SDK/Delphi/XPLM/XPLMWeather.pas +++ b/SDK/Delphi/XPLM/XPLMWeather.pas @@ -12,7 +12,6 @@ USES XPLMDefs; {$A4} -{$IFDEF XPLM400} {___________________________________________________________________________ * WEATHER ACCESS ___________________________________________________________________________} @@ -97,26 +96,32 @@ END; PXPLMWeatherInfo_t = ^XPLMWeatherInfo_t; +{$IFDEF XPLM400} { XPLMGetMETARForAirport - Get the last known METAR report for an airport by ICAO code. Note that the - actual weather at that airport may have evolved significantly since the + Get the last-downloaded METAR report for an airport by ICAO code. Note that + the actual weather at that airport may have evolved significantly since the last downloaded METAR. outMETAR must point to a char buffer of at least 150 - characters. This call is not intended to be used per-frame. + characters. This call is not intended to be used per-frame. This call does + not return the current weather at the airport, and returns an empty string + if the system is not in real-weather mode. } PROCEDURE XPLMGetMETARForAirport( airport_id : XPLMString; outMETAR : PXPLMFixedString150_t); cdecl; external XPLM_DLL; +{$ENDIF XPLM400} +{$IFDEF XPLM400} { XPLMGetWeatherAtLocation Get the current weather conditions at a given location. Note that this does not work world-wide, only within the surrounding region. Return 1 if - detailed weather was found, 0 if not. This call is not intended to be used - per-frame. + detailed weather (i.e. an airport-specific METAR) was found, 0 if not. In + both cases, the structure will contain the best data available. This call + is not intended to be used per-frame. } FUNCTION XPLMGetWeatherAtLocation( latitude : Real; @@ -124,9 +129,9 @@ altitude_m : Real; out_info : PXPLMWeatherInfo_t) : Integer; cdecl; external XPLM_DLL; - {$ENDIF XPLM400} + IMPLEMENTATION END. diff --git a/SDK/Libraries/Lin/XPLM_64.so b/SDK/Libraries/Lin/XPLM_64.so new file mode 100755 index 00000000..03bdf672 Binary files /dev/null and b/SDK/Libraries/Lin/XPLM_64.so differ diff --git a/SDK/Libraries/Lin/XPWidgets_64.so b/SDK/Libraries/Lin/XPWidgets_64.so new file mode 100755 index 00000000..2cb8d76d Binary files /dev/null and b/SDK/Libraries/Lin/XPWidgets_64.so differ diff --git a/SDK/Libraries/Mac/XPLM.framework/Resources b/SDK/Libraries/Mac/XPLM.framework/Resources new file mode 120000 index 00000000..953ee36f --- /dev/null +++ b/SDK/Libraries/Mac/XPLM.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/SDK/Libraries/Mac/XPLM.framework/Versions/C/Resources/Info.plist b/SDK/Libraries/Mac/XPLM.framework/Versions/C/Resources/Info.plist new file mode 100644 index 00000000..53b56107 --- /dev/null +++ b/SDK/Libraries/Mac/XPLM.framework/Versions/C/Resources/Info.plist @@ -0,0 +1,42 @@ + + + + + BuildMachineOSBuild + 22C65 + CFBundleDevelopmentRegion + English + CFBundleExecutable + XPLM + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CSResourcesFileMapped + + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 14C18 + DTPlatformName + macosx + DTPlatformVersion + 13.1 + DTSDKBuild + 22C55 + DTSDKName + macosx13.1 + DTXcode + 1420 + DTXcodeBuild + 14C18 + LSMinimumSystemVersion + 10.15 + + diff --git a/SDK/Libraries/Mac/XPLM.framework/Versions/C/XPLM b/SDK/Libraries/Mac/XPLM.framework/Versions/C/XPLM new file mode 100755 index 00000000..1354d145 Binary files /dev/null and b/SDK/Libraries/Mac/XPLM.framework/Versions/C/XPLM differ diff --git a/SDK/Libraries/Mac/XPLM.framework/Versions/C/_CodeSignature/CodeResources b/SDK/Libraries/Mac/XPLM.framework/Versions/C/_CodeSignature/CodeResources new file mode 100644 index 00000000..1e37a64b --- /dev/null +++ b/SDK/Libraries/Mac/XPLM.framework/Versions/C/_CodeSignature/CodeResources @@ -0,0 +1,128 @@ + + + + + files + + Resources/Info.plist + + voAQ/IDgQqHZqcOEgtUnY+ZQ4Vo= + + + files2 + + Resources/Info.plist + + hash2 + + cbolIMR2jzM1jeru8QBpXnyfepv6PMzWJfroq2E2Coo= + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/SDK/Libraries/Mac/XPLM.framework/Versions/Current b/SDK/Libraries/Mac/XPLM.framework/Versions/Current new file mode 120000 index 00000000..96d80cd6 --- /dev/null +++ b/SDK/Libraries/Mac/XPLM.framework/Versions/Current @@ -0,0 +1 @@ +C \ No newline at end of file diff --git a/SDK/Libraries/Mac/XPLM.framework/XPLM b/SDK/Libraries/Mac/XPLM.framework/XPLM deleted file mode 100755 index b0d529be..00000000 Binary files a/SDK/Libraries/Mac/XPLM.framework/XPLM and /dev/null differ diff --git a/SDK/Libraries/Mac/XPLM.framework/XPLM b/SDK/Libraries/Mac/XPLM.framework/XPLM new file mode 120000 index 00000000..ae3cf6ce --- /dev/null +++ b/SDK/Libraries/Mac/XPLM.framework/XPLM @@ -0,0 +1 @@ +Versions/Current/XPLM \ No newline at end of file diff --git a/SDK/Libraries/Mac/XPWidgets.framework/Resources b/SDK/Libraries/Mac/XPWidgets.framework/Resources new file mode 120000 index 00000000..953ee36f --- /dev/null +++ b/SDK/Libraries/Mac/XPWidgets.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/Resources/Info.plist b/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/Resources/Info.plist new file mode 100644 index 00000000..60487ddc --- /dev/null +++ b/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/Resources/Info.plist @@ -0,0 +1,42 @@ + + + + + BuildMachineOSBuild + 22C65 + CFBundleDevelopmentRegion + English + CFBundleExecutable + XPWidgets + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CSResourcesFileMapped + + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 14C18 + DTPlatformName + macosx + DTPlatformVersion + 13.1 + DTSDKBuild + 22C55 + DTSDKName + macosx13.1 + DTXcode + 1420 + DTXcodeBuild + 14C18 + LSMinimumSystemVersion + 10.15 + + diff --git a/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/XPWidgets b/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/XPWidgets new file mode 100755 index 00000000..3a73c48e Binary files /dev/null and b/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/XPWidgets differ diff --git a/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/_CodeSignature/CodeResources b/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/_CodeSignature/CodeResources new file mode 100644 index 00000000..cf0809dc --- /dev/null +++ b/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/_CodeSignature/CodeResources @@ -0,0 +1,128 @@ + + + + + files + + Resources/Info.plist + + SngFRYyYZvFDvj7WlMImI0nWjNQ= + + + files2 + + Resources/Info.plist + + hash2 + + cyPpU9uTChX7rFyoW42moNimK/DK8zmtQ8Wih5q0fz4= + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/SDK/Libraries/Mac/XPWidgets.framework/Versions/Current b/SDK/Libraries/Mac/XPWidgets.framework/Versions/Current new file mode 120000 index 00000000..96d80cd6 --- /dev/null +++ b/SDK/Libraries/Mac/XPWidgets.framework/Versions/Current @@ -0,0 +1 @@ +C \ No newline at end of file diff --git a/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets b/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets deleted file mode 100755 index 13f77d3b..00000000 Binary files a/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets and /dev/null differ diff --git a/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets b/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets new file mode 120000 index 00000000..61477f4b --- /dev/null +++ b/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets @@ -0,0 +1 @@ +Versions/Current/XPWidgets \ No newline at end of file diff --git a/SDK/Libraries/Win/XPLM_64.lib b/SDK/Libraries/Win/XPLM_64.lib index d5555997..090ed417 100644 Binary files a/SDK/Libraries/Win/XPLM_64.lib and b/SDK/Libraries/Win/XPLM_64.lib differ