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