diff --git a/.github/actions/build-lin/action.yml b/.github/actions/build-lin/action.yml index 2e29b61..877f7a5 100644 --- a/.github/actions/build-lin/action.yml +++ b/.github/actions/build-lin/action.yml @@ -19,6 +19,9 @@ outputs: xpl-file-name: description: Path to the resulting xpl file value: ${{ steps.return.outputs.xpl-file-name }} + pdb-file-name: + description: Path to the resulting .debug.zip file (debug symbol info) + value: ${{ steps.return.outputs.pdb-file-name }} runs: using: "composite" @@ -53,9 +56,23 @@ runs: echo Expected target build not found: "$TARGET_XPL" exit 1 fi + - name: Extract symbol info + shell: bash + env: + TARGET_XPL: ${{ inputs.baseDir }}build-lin/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl + TARGET_DBG: ${{ inputs.baseDir }}build-lin/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl.debug + TARGET_PDB: ${{ inputs.baseDir }}build-lin/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl.debug.zip + run: | + objcopy --only-keep-debug "$TARGET_XPL" "$TARGET_DBG" + strip --strip-debug --strip-unneeded "$TARGET_XPL" + objcopy --add-gnu-debuglink="$TARGET_DBG" "$TARGET_XPL" + zip -9 "$TARGET_PDB" "$TARGET_DBG" - name: Return Value id: return shell: bash env: TARGET_XPL: ${{ inputs.baseDir }}build-lin/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl - run: echo "::set-output name=xpl-file-name::$(echo $TARGET_XPL)" + TARGET_PDB: ${{ inputs.baseDir }}build-lin/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl.debug.zip + run: | + echo "xpl-file-name=$(echo $TARGET_XPL)" >> $GITHUB_OUTPUT + echo "pdb-file-name=$(echo $TARGET_PDB)" >> $GITHUB_OUTPUT diff --git a/.github/actions/build-mac/action.yml b/.github/actions/build-mac/action.yml index 7931264..743bf2b 100644 --- a/.github/actions/build-mac/action.yml +++ b/.github/actions/build-mac/action.yml @@ -19,6 +19,9 @@ outputs: xpl-file-name: description: Path to the resulting xpl file value: ${{ steps.return.outputs.xpl-file-name }} + pdb-file-name: + description: Path to the resulting .dSYM.zip file (debug symbol info) + value: ${{ steps.return.outputs.pdb-file-name }} runs: using: "composite" @@ -52,9 +55,23 @@ runs: echo Expected target build not found: "$TARGET_XPL" exit 1 fi + - name: Extract symbol info + shell: bash + env: + TARGET_XPL: ${{ inputs.baseDir }}build-mac/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl + TARGET_DSYM: ${{ inputs.baseDir }}build-mac/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl.dSYM + TARGET_PDB: ${{ inputs.baseDir }}build-mac/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl.dSYM.zip + run: | + dsymutil "$TARGET_XPL" + zip -9r "$TARGET_PDB" "$TARGET_DSYM" + rm -rf "$TARGET_DSYM" + strip -S "$TARGET_XPL" - name: Return Value id: return shell: bash env: TARGET_XPL: ${{ inputs.baseDir }}build-mac/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl - run: echo "::set-output name=xpl-file-name::$(echo $TARGET_XPL)" + TARGET_PDB: ${{ inputs.baseDir }}build-mac/${{ inputs.archFolder }}/${{ inputs.pluginName }}.xpl.dSYM.zip + run: | + echo "xpl-file-name=$(echo $TARGET_XPL)" >> $GITHUB_OUTPUT + echo "pdb-file-name=$(echo $TARGET_PDB)" >> $GITHUB_OUTPUT diff --git a/.github/actions/build-win/action.yml b/.github/actions/build-win/action.yml index 1692ae6..9b273c5 100644 --- a/.github/actions/build-win/action.yml +++ b/.github/actions/build-win/action.yml @@ -45,5 +45,5 @@ runs: TARGET_XPL: ${{ inputs.baseDir }}build-win/${{ inputs.pluginName }}.xpl TARGET_PDB: ${{ inputs.baseDir }}build-win/${{ inputs.pluginName }}.pdb run: | - echo "::set-output name=xpl-file-name::$(echo $TARGET_XPL)" - echo "::set-output name=pdb-file-name::$(echo $TARGET_PDB)" + echo "xpl-file-name=$(echo $TARGET_XPL)" >> $GITHUB_OUTPUT + echo "pdb-file-name=$(echo $TARGET_PDB)" >> $GITHUB_OUTPUT diff --git a/.github/actions/sign-notarize/README.md b/.github/actions/sign-notarize/README.md index c35605d..0bf799f 100644 --- a/.github/actions/sign-notarize/README.md +++ b/.github/actions/sign-notarize/README.md @@ -7,12 +7,12 @@ It waits for Apple's answer to notarization, which can take a couple of minutes! Parameter|Requied|Default|Description ---------|-------|-------|------------ -`bundleId`|yes||Plugin's bundle id, something like 'Author.plugin.NameOfPlugin `xplFileName`|yes||Path to just built xpl plugin `certificate`|yes||Base64 encoded .p12 certificate file `certPwd`|yes||Password of the .p12 certificate file -`notarizeUser`|yes||Username/EMail for notarization -`notarizeAppPwd`|yes||App-specific password for notarization +`notarizeUser`|yes||Apple ID for notarization service (parameter `--apple-id` to `notarytool`) +`notarizeTeam`|yes||Team ID for notarization service (parameter `--team-id` to `notarytool`) +`notarizeAppPwd`|yes||[App-specific password](https://support.apple.com/en-gb/HT204397) for notarization service (parameter `--password` to `notarytool`) ## What it does diff --git a/.github/actions/sign-notarize/action.yml b/.github/actions/sign-notarize/action.yml index cced8da..e7fd4e6 100644 --- a/.github/actions/sign-notarize/action.yml +++ b/.github/actions/sign-notarize/action.yml @@ -2,10 +2,7 @@ name: Sign/Notarize MacOS plugin description: Signs, then notarizes the plugin author: TwinFan -inputs: - bundleId: - description: "Plugin's bundle id, something like 'Author.plugin.NameOfPlugin" - required: true +inputs: xplFileName: description: "Path to just built xpl plugin" required: true @@ -16,7 +13,10 @@ inputs: description: "Password of the .p12 certificate file" required: true notarizeUser: - description: "Username/EMail for notarization" + description: "Apple-ID for notarization" + required: true + notarizeTeam: + description: "Team-ID for notarization" required: true notarizeAppPwd: description: "App-specific password for notarization" @@ -30,4 +30,4 @@ runs: run: | echo ${{ inputs.certificate }} | base64 --decode > certificate.p12 chmod a+x ${{ github.action_path }}/sign-notarize - ${{ github.action_path }}/sign-notarize "${{ inputs.xplFileName }}" "${{ inputs.bundleId }}" certificate.p12 "${{ inputs.certPwd }}" "${{ inputs.notarizeUser }}" "${{ inputs.notarizeAppPwd }}" + ${{ github.action_path }}/sign-notarize "${{ inputs.xplFileName }}" certificate.p12 "${{ inputs.certPwd }}" "${{ inputs.notarizeUser }}" "${{ inputs.notarizeTeam }}" "${{ inputs.notarizeAppPwd }}" diff --git a/.github/actions/sign-notarize/sign-notarize b/.github/actions/sign-notarize/sign-notarize index 6b148ac..5979369 100755 --- a/.github/actions/sign-notarize/sign-notarize +++ b/.github/actions/sign-notarize/sign-notarize @@ -3,11 +3,11 @@ # # Parameters # 1. Path to file to sign, then notarize -# 2. Bundle id to use during notarization -# 3. Signing ID file like 'certificate.p12' -# 4. Password for above p12 file -# 5. Username for notarization -# 6. App-specific password for notarization +# 2. Signing ID file like 'certificate.p12' +# 3. Password for above p12 file +# 4. Apple ID for notarization (parameter --apple-id to notarytool) +# 5. Team ID for notarization (parmeter --team-id to notarytool) +# 6. App-specific password for notarization (parameter --password to notarytool) set -eu @@ -18,33 +18,6 @@ function cleanup { security delete-keychain build.keychain } -# --- Function to check for notarization results - -check_notarization() { - local REQUID=$1 - local USERNAME=$2 - local USERPWD=$3 - local STATUS="in progress" - while [ "$STATUS" == "in progress" ] - do - echo "Wait 30s for results..." - sleep 30 - STATUS=`xcrun altool --notarization-info "$REQUID" -u "$USERNAME" -p "$USERPWD" | egrep -o '(in progress|success|invalid)'` - done - - case $STATUS in - success) echo ">>> SUCCESS <<<" - return 0 - ;; - invalid) echo "%%% INVALID %%%" - return 1 - ;; - *) echo "Unknown status $STATUS" - return 1 - ;; - esac -} - # ================================================================== # Read parameters @@ -55,10 +28,10 @@ then fi PATH_TO_FILE=$1 -BUNDLE_ID=$2 -SIGN_ID_FILE=$3 -SIGN_ID_PWD=$4 -NOTAR_USER=$5 +SIGN_ID_FILE=$2 +SIGN_ID_PWD=$3 +NOTAR_USER=$4 +NOTAR_TEAM=$5 NOTAR_PWD=$6 # --- Sign @@ -91,17 +64,9 @@ echo . # Can only send zip archives to notarization zip -v "$PATH_TO_FILE.zip" "$PATH_TO_FILE" -REQUID=`xcrun altool --notarize-app --primary-bundle-id "$BUNDLE_ID" --username "$NOTAR_USER" --password "$NOTAR_PWD" --file "$PATH_TO_FILE.zip" | egrep -o '([a-z0-9]+-){4}[a-z0-9]+'` +xcrun notarytool submit --wait --apple-id "$NOTAR_USER" --password "$NOTAR_PWD" --team-id "$NOTAR_TEAM" "$PATH_TO_FILE.zip" rm "$PATH_TO_FILE.zip" -# --- Check notarization results --- - -echo . -echo "--- Check notarization results ---" -echo . - -check_notarization "$REQUID" "$NOTAR_USER" "$NOTAR_PWD" - # Note: No stapling possible to .xpl files echo . diff --git a/.github/actions/upload-plugin/action.yml b/.github/actions/upload-plugin/action.yml index 6d74b1e..788b5e9 100644 --- a/.github/actions/upload-plugin/action.yml +++ b/.github/actions/upload-plugin/action.yml @@ -28,8 +28,8 @@ runs: mv "${{ inputs.pdbFileName }}" "deploy-${{ inputs.pluginName }}/${{ inputs.pluginName }}/${{ inputs.archFolder }}" fi - name: Upload plugin - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: - name: ${{ inputs.pluginName }} + name: ${{ inputs.pluginName }}-${{ env.platform }} path: deploy-${{ inputs.pluginName }}/* # this way the top folder in the artifacts is "MyPlugin" if-no-files-found: error diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4185ec5..4f927cd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,16 +10,17 @@ on: env: PRJ_BASE: Example/ # The base directory from which we build everything PRJ_NAME: LTAPIExample # The plugin's name, expected to be the .xpl file's name and used as the plugin folder name - PRJ_BUNDLEID: TwinFan.plugin.LTAPIExample jobs: ##################################### # Linux with GCC build-lin: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 + env: + platform: lin steps: - name: Checkout Code - uses: actions/checkout@v2 # must checkout before we can use our own actions + uses: actions/checkout@v4 # must checkout before we can use our own actions - name: Build uses: ./.github/actions/build-lin id: build @@ -32,14 +33,17 @@ jobs: pluginName: ${{ env.PRJ_NAME }} archFolder: lin_x64 xplFileName: "${{ steps.build.outputs.xpl-file-name }}" + pdbFileName: "${{ steps.build.outputs.pdb-file-name }}" ##################################### # MacOS with CMake/clang and sign/notarize in self-written script build-mac: - runs-on: macos-latest + runs-on: macos-14 + env: + platform: mac steps: - name: Checkout Code - uses: actions/checkout@v2 # must checkout before we can use our own actions + uses: actions/checkout@v4 # must checkout before we can use our own actions - name: Build uses: ./.github/actions/build-mac id: build @@ -53,19 +57,19 @@ jobs: shell: bash run: | if [ "$MACOS_CERTIFICATE" == "" ]; then - echo ::set-output name=secretspresent:: + echo "secretspresent=" >> $GITHUB_OUTPUT else - echo ::set-output name=secretspresent::true + echo "secretspresent=true" >> $GITHUB_OUTPUT fi - name: Codesign and Notarization if: ${{ steps.checksecrets.outputs.secretspresent }} uses: ./.github/actions/sign-notarize with: - bundleId: ${{ env.PRJ_BUNDLEID }} xplFileName: ${{ steps.build.outputs.xpl-file-name }} certificate: ${{ secrets.MACOS_CERTIFICATE }} certPwd: ${{ secrets.MACOS_CERT_PWD }} notarizeUser: ${{ secrets.NOTARIZATION_USERNAME }} + notarizeTeam: ${{ secrets.NOTARIZATION_TEAM }} notarizeAppPwd: ${{ secrets.NOTARIZATION_PASSWORD }} - name: Upload uses: ./.github/actions/upload-plugin @@ -73,6 +77,7 @@ jobs: pluginName: ${{ env.PRJ_NAME }} archFolder: mac_x64 xplFileName: ${{ steps.build.outputs.xpl-file-name }} + pdbFileName: "${{ steps.build.outputs.pdb-file-name }}" ##################################### # Windows with MS Visual Studio @@ -80,7 +85,7 @@ jobs: runs-on: windows-2022 steps: - name: Checkout Code - uses: actions/checkout@v2 # must checkout before we can use our own actions + uses: actions/checkout@v4 # must checkout before we can use our own actions - name: Build uses: ./.github/actions/build-win id: build diff --git a/Example/CMakeLists.txt b/Example/CMakeLists.txt index 16da097..bd7fc26 100644 --- a/Example/CMakeLists.txt +++ b/Example/CMakeLists.txt @@ -1,15 +1,33 @@ # LT_API build script. # -cmake_minimum_required(VERSION 3.9) -project(LT_API VERSION 1.0.0 DESCRIPTION "LiveTraffic API Example Plugin") +cmake_minimum_required(VERSION 3.16) + +# Mac: Need to tell early on that we want a cross platform build +if(DEFINED ENV{platform}) + message ("-- Platform is $ENV{platform}") + if($ENV{platform} STREQUAL "mac-x86") + message (" Building cross-platform for mac/x86_64") + set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Archs to build") + elseif($ENV{platform} STREQUAL "mac-arm") + message (" Building cross-platform for mac/arm64") + set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Archs to build") + elseif($ENV{platform} STREQUAL "mac") + message (" Building cross-platform for both mac/x86_64 and mac/arm64") + set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Archs to build") + endif() +else() + # No 'platform' defined could mean running from command line, assume we build universal image in one go via XCode + set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Archs to build") +endif() -# By default, use optimized release configuration. -if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "") - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE) -endif () +set(CMAKE_BUILD_TYPE RelWithDebInfo) -set(CMAKE_CXX_STANDARD 11) +project(LT_API VERSION 1.3.0 DESCRIPTION "LiveTraffic API Example Plugin") + +set(CMAKE_CXX_STANDARD 17) +set_property(GLOBAL PROPERTY CXX_STANDARD_REQUIRED 17) +set_property(GLOBAL PROPERTY CXX_STANDARD 17) # Set include directories used by our code and dependencies. include_directories("${CMAKE_CURRENT_SOURCE_DIR}/..") @@ -68,13 +86,9 @@ else() if(MSVC) # Use highest optimization level in Release builds add_compile_options(/GL) - elseif(APPLE) - add_compile_options(-O3 -fPIC) - elseif (UNIX OR MINGW) - # Use position-independent code and highest optimization level (FPS!). + else() + # Use position-independent code and highest optimization level add_compile_options(-O3 -fPIC) - # Strip symbols during linking - add_link_options(-s) endif() endif() diff --git a/Example/LTAPI.xcodeproj/project.pbxproj b/Example/LTAPI.xcodeproj/project.pbxproj index e1f7942..ca1530b 100755 --- a/Example/LTAPI.xcodeproj/project.pbxproj +++ b/Example/LTAPI.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -102,7 +102,8 @@ D607B16109A5563100699BC3 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1340; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1620; }; buildConfigurationList = D607B16209A5563100699BC3 /* Build configuration list for PBXProject "LTAPI" */; compatibilityVersion = "Xcode 3.2"; @@ -152,18 +153,21 @@ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DSTROOT = "$(XPLANE11_ROOT)/Resources/plugins/$(TARGETNAME)"; DYLIB_COMPATIBILITY_VERSION = ""; DYLIB_CURRENT_VERSION = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; EXECUTABLE_EXTENSION = xpl; FRAMEWORK_SEARCH_PATHS = "$(XPSDK_ROOT)/Libraries/Mac"; GCC_C_LANGUAGE_STANDARD = c11; @@ -194,7 +198,7 @@ "$(HEADER_SEARCH_PATHS)", ); MACH_O_TYPE = mh_bundle; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.15; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "$(OTHER_LDFLAGS)", @@ -212,7 +216,7 @@ PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = macosx; SYMROOT = "build-mac"; - XPLANE11_ROOT = "$(USER_APPS_DIR)/X-Plane/Release"; + XPLANE11_ROOT = "$(USER_APPS_DIR)/X-Plane/12"; XPSDK_ROOT = Lib/SDK; }; name = Debug; @@ -234,15 +238,18 @@ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + DEAD_CODE_STRIPPING = YES; DSTROOT = "$(XPLANE11_ROOT)/Resources/plugins/$(TARGETNAME)"; DYLIB_COMPATIBILITY_VERSION = ""; DYLIB_CURRENT_VERSION = ""; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; EXECUTABLE_EXTENSION = xpl; FRAMEWORK_SEARCH_PATHS = "$(XPSDK_ROOT)/Libraries/Mac"; GCC_C_LANGUAGE_STANDARD = c11; @@ -273,7 +280,7 @@ "$(HEADER_SEARCH_PATHS)", ); MACH_O_TYPE = mh_bundle; - MACOSX_DEPLOYMENT_TARGET = 10.10; + MACOSX_DEPLOYMENT_TARGET = 10.15; OTHER_LDFLAGS = ( "$(OTHER_LDFLAGS)", "-Wl,-exported_symbol", @@ -290,7 +297,7 @@ PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = macosx; SYMROOT = "build-mac"; - XPLANE11_ROOT = "$(USER_APPS_DIR)/X-Plane/Release"; + XPLANE11_ROOT = "$(USER_APPS_DIR)/X-Plane/12"; XPSDK_ROOT = Lib/SDK; }; name = Release; @@ -300,13 +307,13 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ENABLE_OBJC_WEAK = YES; + DEAD_CODE_STRIPPING = YES; DEPLOYMENT_LOCATION = YES; INSTALL_PATH = mac_x64; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Lib/SDK/Libraries/Mac/XPLM.framework", ); - VALID_ARCHS = x86_64; }; name = Debug; }; @@ -315,13 +322,13 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ENABLE_OBJC_WEAK = YES; + DEAD_CODE_STRIPPING = YES; DEPLOYMENT_LOCATION = YES; INSTALL_PATH = mac_x64; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Lib/SDK/Libraries/Mac/XPLM.framework", ); - VALID_ARCHS = x86_64; }; name = Release; }; diff --git a/Example/LTAPI.xcodeproj/xcshareddata/xcschemes/LTAPIExample.xcscheme b/Example/LTAPI.xcodeproj/xcshareddata/xcschemes/LTAPIExample.xcscheme new file mode 100644 index 0000000..6439f2c --- /dev/null +++ b/Example/LTAPI.xcodeproj/xcshareddata/xcschemes/LTAPIExample.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/LTAPIExample.cpp b/Example/LTAPIExample.cpp index e81e403..526706c 100755 --- a/Example/LTAPIExample.cpp +++ b/Example/LTAPIExample.cpp @@ -12,7 +12,7 @@ /// But you can also define all up to XPLM301, if you want. /// @see https://twinfan.github.io/LTAPI/ /// @author Birger Hoppe -/// @copyright (c) 2019-2020 Birger Hoppe +/// @copyright (c) 2019-2025 Birger Hoppe /// @copyright Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), /// to deal in the Software without restriction, including without limitation @@ -316,7 +316,7 @@ class EnhAircraft : public LTAPIAircraft static EnhAircraft* lnTaken[MAX_LN]; // we move the ability to output a line into this class - void DrawOutput(int x, int y, int r, int b); + void DrawOutput(int x, int y, int r, int b) const; // this creates a new EnhAircraft object static LTAPIAircraft* CreateNewObject() { return new EnhAircraft(); } }; @@ -341,7 +341,7 @@ EnhAircraft::~EnhAircraft() bool EnhAircraft::updateAircraft(const LTAPIBulkData& __bulk, size_t __inSize) { - // first we call the LTAPI do fetch (updated) data for the a/c + // first we call the LTAPI to fetch (updated) data for the a/c if (!LTAPIAircraft::updateAircraft(__bulk,__inSize)) return false; @@ -412,7 +412,7 @@ DRAW_C(w,buf,xplmFont_Proportional) snprintf(buf,sizeof(buf),"%*.*f",dig,dec,n); \ DRAW_C(w,buf,xplmFont_Basic) -void EnhAircraft::DrawOutput(int x, int y, int r, int) +void EnhAircraft::DrawOutput(int x, int y, int r, int) const { char buf[500]; if (dispStatus == ED_SHOWN || dispStatus == ED_NONE) @@ -448,7 +448,8 @@ void EnhAircraft::DrawOutput(int x, int y, int r, int) } else { DRAW_T(20, "", xplmFont_Proportional); } - DRAW_T(20, isOnCamera() ? "X" : "", xplmFont_Proportional); + DRAW_T(25, isVisible() ? "X" : "", xplmFont_Proportional); + DRAW_T(25, isOnCamera() ? "X" : "", xplmFont_Proportional); DRAW_S(180, getCslModel()); DRAW_S(150, getTrackedBy()); DRAW_S(200, getCatDescr()); @@ -538,7 +539,8 @@ void draw_header (int x, int y, int r) DRAW_T(80, "Phase", xplmFont_Proportional); DRAW_T(60, "key", xplmFont_Proportional); DRAW_T(20, "#", xplmFont_Proportional); - DRAW_T(20, "cam", xplmFont_Proportional); + DRAW_T(25, "vis", xplmFont_Proportional); + DRAW_T(25, "cam", xplmFont_Proportional); DRAW_T(180, "CSL Model", xplmFont_Proportional); DRAW_T(150, "tracked by", xplmFont_Proportional); DRAW_T(200, "Category", xplmFont_Proportional); @@ -577,7 +579,7 @@ void draw_list_enhanced(XPLMWindowID in_window_id, void * /*in_refcon*/) return; // We now cycle the 20 line items that our enhanced object keeps track of - for (EnhAircraft* pEnh: EnhAircraft::lnTaken) + for (const EnhAircraft* pEnh: EnhAircraft::lnTaken) { // output that aircraft's info if (pEnh) @@ -594,13 +596,24 @@ void draw_list_enhanced(XPLMWindowID in_window_id, void * /*in_refcon*/) // Makes a nice title to the enhanced window void SetEnhWndTitle(EnhAircraft* pAcOnCam) { + char szVersion[20]; char szTitle[150]; + + // Proper semantic versioning was introduced with LT v3.0.0 only + const int ver = LTAPIConnect::getLTVerNr(); + if (ver > 10000) + snprintf(szVersion, sizeof(szVersion), "%d.%d.%d", + ver / 10000, (ver % 10000) / 100, ver % 100); + else + snprintf(szVersion, sizeof(szVersion), "%.2f", + float(LTAPIConnect::getLTVerNr()) / 100.0f); + if (!pAcOnCam) { - snprintf(szTitle, sizeof(szTitle), "LTAPI Example: Enhanced List - LiveTraffic v%.2f %d", - float(LTAPIConnect::getLTVerNr()) / 100.0f, LTAPIConnect::getLTVerDate()); + snprintf(szTitle, sizeof(szTitle), "LTAPI Example: Enhanced List - LiveTraffic v%s %d", + szVersion, LTAPIConnect::getLTVerDate()); } else { - snprintf(szTitle, sizeof(szTitle), "LTAPI Example: Enhanced List - LiveTraffic v%.2f %d viewing %s", - float(LTAPIConnect::getLTVerNr()) / 100.0f, LTAPIConnect::getLTVerDate(), + snprintf(szTitle, sizeof(szTitle), "LTAPI Example: Enhanced List - LiveTraffic v%s %d viewing %s", + szVersion, LTAPIConnect::getLTVerDate(), pAcOnCam->getDescription().c_str()); } XPLMSetWindowTitle(g_winEnhanced, szTitle); diff --git a/Example/Lib/SDK/CHeaders/Widgets/XPStandardWidgets.h b/Example/Lib/SDK/CHeaders/Widgets/XPStandardWidgets.h old mode 100755 new mode 100644 index 42d4987..1903e87 --- a/Example/Lib/SDK/CHeaders/Widgets/XPStandardWidgets.h +++ b/Example/Lib/SDK/CHeaders/Widgets/XPStandardWidgets.h @@ -2,8 +2,8 @@ #define _XPStandardWidgets_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -18,13 +18,13 @@ * them by calling XPCreateWidget and then listening for special messages, * etc. * - * The standard widgets often send mesages to themselves when the user + * The standard widgets often send messages to themselves when the user * performs an event; these messages are sent up the widget hierarchy until * they are handled. So you can add a widget proc directly to a push button * (for example) to intercept the message when it is clicked, or you can put * one widget proc on a window for all of the push buttons in the window. Most * of these messages contain the original widget ID as a parameter so you can - * know which widget is messaging no matter who it is sent to. + * know which widget is messaging no matter who it is sent to. * */ @@ -39,8 +39,8 @@ extern "C" { ***************************************************************************/ /* * The main window widget class provides a "window" as the user knows it. - * These windows are dragable and can be selected. Use them to create floating - * windows and non-modal dialogs. + * These windows are draggable and can be selected. Use them to create + * floating windows and non-modal dialogs. * */ @@ -50,41 +50,41 @@ extern "C" { /* * Main Window Type Values * - * These type values are used to control the appearance of a main window. + * These type values are used to control the appearance of a main window. * */ enum { - /* The standard main window; pin stripes on XP7, metal frame on XP 6. */ + /* The standard main window; pin stripes on XP7, metal frame on XP 6. */ xpMainWindowStyle_MainWindow = 0, - /* A translucent dark gray window, like the one ATC messages appear in. */ + /* A translucent dark gray window. */ xpMainWindowStyle_Translucent = 1, }; /* - * Main Window Properties + * Main Window Properties * */ enum { - /* This property specifies the type of window. Set to one of the main window * - * types above. */ + /* This property specifies the type of window. Set to one of the main window * + * types above. */ xpProperty_MainWindowType = 1100, - /* This property specifies whether the main window has close boxes in its * - * corners. */ + /* This property specifies whether the main window has close boxes in its * + * corners. */ xpProperty_MainWindowHasCloseBoxes = 1200, }; /* - * MainWindow Messages + * MainWindow Messages * */ enum { - /* This message is sent when the close buttons are pressed for your window. */ + /* This message is sent when the close buttons for your window are pressed. */ xpMessage_CloseButtonPushed = 1200, @@ -96,7 +96,7 @@ enum { /* * X-Plane dialogs are divided into separate areas; the sub window widgets * allow you to make these areas. Create one main window and place several - * subwindows inside it. Then place your controls inside the subwindows. + * subwindows inside it. Then place your controls inside the subwindows. * */ @@ -106,29 +106,29 @@ enum { /* * SubWindow Type Values * - * These values control the appearance of the subwindow. + * These values control the appearance of the subwindow. * */ enum { - /* A panel that sits inside a main window. */ + /* A panel that sits inside a main window. */ xpSubWindowStyle_SubWindow = 0, - /* A screen that sits inside a panel for showing text information. */ + /* A screen that sits inside a panel for showing text information. */ xpSubWindowStyle_Screen = 2, - /* A list view for scrolling lists. */ + /* A list view for scrolling lists. */ xpSubWindowStyle_ListView = 3, }; /* - * SubWindow Properties + * SubWindow Properties * */ enum { - /* This property specifies the type of window. Set to one of the subwindow * - * types above. */ + /* This property specifies the type of window. Set to one of the subwindow * + * types above. */ xpProperty_SubWindowType = 1200, @@ -141,19 +141,19 @@ enum { * The button class provides a number of different button styles and * behaviors, including push buttons, radio buttons, check boxes, etc. The * button label appears on or next to the button depending on the button's - * appearance, or type. + * appearance or type. * - * The button's behavior is a separate property that dictates who it hilights - * and what kinds of messages it sends. Since behavior and type are different, - * you can do strange things like make check boxes that act as push buttons or - * push buttons with radio button behavior. + * The button's behavior is a separate property that dictates who it + * highlights and what kinds of messages it sends. Since behavior and type are + * different, you can do strange things like make check boxes that act as push + * buttons or push buttons with radio button behavior. * * In X-Plane 6 there were no check box graphics. The result is the following * behavior: in X-Plane * 6 all check box and radio buttons are round (radio-button style) buttons; * in X-Plane 7 they are all square (check-box style) buttons. In a future * version of X-Plane, the xpButtonBehavior enums will provide the correct - * graphic (check box or radio button) giving the expected result. + * graphic (check box or radio button) giving the expected result. * */ @@ -164,25 +164,25 @@ enum { * Button Types * * These define the visual appearance of buttons but not how they respond to - * the mouse. + * the mouse. * */ enum { - /* This is a standard push button, like an 'OK' or 'Cancel' button in a dialog* - * box. */ + /* This is a standard push button, like an 'OK' or 'Cancel' button in a dialog* + * box. */ xpPushButton = 0, - /* A check box or radio button. Use this and the button behaviors below to * - * get the desired behavior. */ + /* A check box or radio button. Use this and the button behaviors below to * + * get the desired behavior. */ xpRadioButton = 1, - /* A window close box. */ + /* A window close box. */ xpWindowCloseBox = 3, - /* A small down arrow. */ + /* A small down arrow. */ xpLittleDownArrow = 5, - /* A small up arrow. */ + /* A small up arrow. */ xpLittleUpArrow = 6, @@ -191,43 +191,43 @@ enum { /* * Button Behavior Values * - * These define how the button responds to mouse clicks. + * These define how the button responds to mouse clicks. * */ enum { - /* Standard push button behavior. The button hilites while the mouse is * - * clicked over it and unhilites when the mouse is moved outside of it or * - * released. If the mouse is released over the button, the * - * xpMsg_PushButtonPressed message is sent. */ + /* Standard push button behavior. The button highlights while the mouse is * + * clicked over it and unhighlights when the mouse is moved outside of it or * + * released. If the mouse is released over the button, the * + * xpMsg_PushButtonPressed message is sent. */ xpButtonBehaviorPushButton = 0, - /* Check box behavior. The button immediately toggles its value when the mouse* - * is clicked and sends out a xpMsg_ButtonStateChanged message. */ + /* Check box behavior. The button immediately toggles its value when the mouse* + * is clicked and sends out a xpMsg_ButtonStateChanged message. */ xpButtonBehaviorCheckBox = 1, - /* Radio button behavior. The button immediately sets its state to one and * - * sends out a xpMsg_ButtonStateChanged message if it was not already set to * - * one. You must turn off other radio buttons in a group in your code. */ + /* Radio button behavior. The button immediately sets its state to one and * + * sends out a xpMsg_ButtonStateChanged message if it was not already set to * + * one. You must turn off other radio buttons in a group in your code. */ xpButtonBehaviorRadioButton = 2, }; /* - * Button Properties + * Button Properties * */ enum { - /* This property sets the visual type of button. Use one of the button types * - * above. */ + /* This property sets the visual type of button. Use one of the button types * + * above. */ xpProperty_ButtonType = 1300, - /* This property sets the button's behavior. Use one of the button behaviors * - * above. */ + /* This property sets the button's behavior. Use one of the button behaviors * + * above. */ xpProperty_ButtonBehavior = 1301, - /* This property tells whether a check box or radio button is "checked" or * - * not. Not used for push buttons. */ + /* This property tells whether a check box or radio button is "checked" or * + * not. Not used for push buttons. */ xpProperty_ButtonState = 1302, @@ -239,21 +239,21 @@ enum { * These messages are sent by the button to itself and then up the widget * chain when the button is clicked. (You may intercept them by providing a * widget handler for the button itself or by providing a handler in a parent - * widget.) + * widget.) * */ enum { - /* This message is sent when the user completes a click and release in a * - * button with push button behavior. Parameter one of the message is the * - * widget ID of the button. This message is dispatched up the widget * - * hierarchy. */ + /* This message is sent when the user completes a click and release in a * + * button with push button behavior. Parameter one of the message is the * + * widget ID of the button. This message is dispatched up the widget * + * hierarchy. */ xpMsg_PushButtonPressed = 1300, - /* This message is sent when a button is clicked that has radio button or * - * check box behavior and its value changes. (Note that if the value changes * - * by setting a property you do not receive this message!) Parameter one is * - * the widget ID of the button, parameter 2 is the new state value, either * - * zero or one. This message is dispatched up the widget hierarchy. */ + /* This message is sent when a button is clicked that has radio button or * + * check box behavior and its value changes. (Note that if the value changes * + * by setting a property you do not receive this message!) Parameter one is * + * the widget ID of the button, parameter 2 is the new state value, either * + * zero or one. This message is dispatched up the widget hierarchy. */ xpMsg_ButtonStateChanged = 1301, @@ -267,7 +267,7 @@ enum { * selection and keyboard navigation. The contents of the text field are its * descriptor. (The descriptor changes as the user types.) * - * The text field can have a number of types, that effect the visual layout of + * The text field can have a number of types, that affect the visual layout of * the text field. The text field sends messages to itself so you may control * its behavior. * @@ -277,7 +277,7 @@ enum { * * WARNING: in X-Plane before 7.10 (including 6.70) null characters could * crash X-Plane. To prevent this, wrap this object with a filter function - * (more instructions can be found on the SDK website). + * (more instructions can be found on the SDK website). * */ @@ -287,72 +287,72 @@ enum { /* * Text Field Type Values * - * These control the look of the text field. + * These control the look of the text field. * */ enum { - /* A field for text entry. */ + /* A field for text entry. */ xpTextEntryField = 0, - /* A transparent text field. The user can type and the text is drawn, but no * - * background is drawn. You can draw your own background by adding a widget * - * handler and prehandling the draw message. */ + /* A transparent text field. The user can type and the text is drawn, but no * + * background is drawn. You can draw your own background by adding a widget * + * handler and prehandling the draw message. */ xpTextTransparent = 3, - /* A translucent edit field, dark gray. */ + /* A translucent edit field, dark gray. */ xpTextTranslucent = 4, }; /* - * Text Field Properties + * Text Field Properties * */ enum { - /* This is the character position the selection starts at, zero based. If it * - * is the same as the end insertion point, the insertion point is not a * - * selection. */ + /* This is the character position the selection starts at, zero based. If it * + * is the same as the end insertion point, the insertion point is not a * + * selection. */ xpProperty_EditFieldSelStart = 1400, - /* This is the character position of the end of the selection. */ + /* This is the character position of the end of the selection. */ xpProperty_EditFieldSelEnd = 1401, - /* This is the character position a drag was started at if the user is * - * dragging to select text, or -1 if a drag is not in progress. */ + /* This is the character position a drag was started at if the user is * + * dragging to select text, or -1 if a drag is not in progress. */ xpProperty_EditFieldSelDragStart = 1402, - /* This is the type of text field to display, from the above list. */ + /* This is the type of text field to display, from the above list. */ xpProperty_TextFieldType = 1403, - /* Set this property to 1 to password protect the field. Characters will be * - * drawn as *s even though the descriptor will contain plain-text. */ + /* Set this property to 1 to password protect the field. Characters will be * + * drawn as *s even though the descriptor will contain plain-text. */ xpProperty_PasswordMode = 1404, - /* The max number of characters you can enter, if limited. Zero means * - * unlimited. */ + /* The max number of characters you can enter, if limited. Zero means * + * unlimited. */ xpProperty_MaxCharacters = 1405, - /* The first visible character on the left. This effectively scrolls the text* - * field. */ + /* The first visible character on the left. This effectively scrolls the text* + * field. */ xpProperty_ScrollPosition = 1406, - /* The font to draw the field's text with. (An XPLMFontID.) */ + /* The font to draw the field's text with. (An XPLMFontID.) */ xpProperty_Font = 1407, - /* This is the active side of the insert selection. (Internal) */ + /* This is the active side of the insert selection. (Internal) */ xpProperty_ActiveEditSide = 1408, }; /* - * Text Field Messages + * Text Field Messages * */ enum { - /* The text field sends this message to itself when its text changes. It sends* - * the message up the call chain; param1 is the text field's widget ID. */ + /* The text field sends this message to itself when its text changes. It sends* + * the message up the call chain; param1 is the text field's widget ID. */ xpMsg_TextFieldChanged = 1400, @@ -364,7 +364,7 @@ enum { /* * A standard scroll bar or slider control. The scroll bar has a minimum, * maximum and current value that is updated when the user drags it. The - * scroll bar sends continuous messages as it is dragged. + * scroll bar sends continuous messages as it is dragged. * */ @@ -374,53 +374,53 @@ enum { /* * Scroll Bar Type Values * - * This defines how the scroll bar looks. + * This defines how the scroll bar looks. * */ enum { - /* A standard X-Plane scroll bar (with arrows on the ends). */ + /* A standard X-Plane scroll bar (with arrows on the ends). */ xpScrollBarTypeScrollBar = 0, - /* A slider, no arrows. */ + /* A slider, no arrows. */ xpScrollBarTypeSlider = 1, }; /* - * Scroll Bar Properties + * Scroll Bar Properties * */ enum { - /* The current position of the thumb (in between the min and max, inclusive) */ + /* The current position of the thumb (in between the min and max, inclusive) */ xpProperty_ScrollBarSliderPosition = 1500, - /* The value the scroll bar has when the thumb is in the lowest position. */ + /* The value the scroll bar has when the thumb is in the lowest position. */ xpProperty_ScrollBarMin = 1501, - /* The value the scroll bar has when the thumb is in the highest position. */ + /* The value the scroll bar has when the thumb is in the highest position. */ xpProperty_ScrollBarMax = 1502, - /* How many units to move the scroll bar when clicking next to the thumb. The * - * scroll bar always moves one unit when the arrows are clicked. */ + /* How many units to move the scroll bar when clicking next to the thumb. The * + * scroll bar always moves one unit when the arrows are clicked. */ xpProperty_ScrollBarPageAmount = 1503, - /* The type of scrollbar from the enums above. */ + /* The type of scrollbar from the enums above. */ xpProperty_ScrollBarType = 1504, - /* Used internally. */ + /* Used internally. */ xpProperty_ScrollBarSlop = 1505, }; /* - * Scroll Bar Messages + * Scroll Bar Messages * */ enum { - /* The scroll bar sends this message when the slider position changes. It * - * sends the message up the call chain; param1 is the Scroll Bar widget ID. */ + /* The scroll bar sends this message when the slider position changes. It * + * sends the message up the call chain; param1 is the scroll bar widget ID. */ xpMsg_ScrollBarSliderPositionChanged = 1500, @@ -432,7 +432,7 @@ enum { /* * A caption is a simple widget that shows its descriptor as a string, useful * for labeling parts of a window. It always shows its descriptor as its - * string and is otherwise transparent. + * string and is otherwise transparent. * */ @@ -440,12 +440,12 @@ enum { #define xpWidgetClass_Caption 6 /* - * Caption Properties + * Caption Properties * */ enum { - /* This property specifies whether the caption is lit; use lit captions * - * against screens. */ + /* This property specifies whether the caption is lit; use lit captions * + * against screens. */ xpProperty_CaptionLit = 1600, @@ -456,7 +456,7 @@ enum { ***************************************************************************/ /* * The general graphics widget can show one of many icons available from - * X-Plane. + * X-Plane. * */ @@ -466,7 +466,7 @@ enum { /* * General Graphics Types Values * - * These define the icon for the general graphics. + * These define the icon for the general graphics. * */ enum { @@ -512,11 +512,11 @@ enum { }; /* - * General Graphics Properties + * General Graphics Properties * */ enum { - /* This property controls the type of icon that is drawn. */ + /* This property controls the type of icon that is drawn. */ xpProperty_GeneralGraphicsType = 1700, @@ -533,17 +533,17 @@ enum { #define xpWidgetClass_Progress 8 /* - * Progress Indicator Properties + * Progress Indicator Properties * */ enum { - /* This is the current value of the progress indicator. */ + /* This is the current value of the progress indicator. */ xpProperty_ProgressPosition = 1800, - /* This is the minimum value, equivalent to 0% filled. */ + /* This is the minimum value, equivalent to 0% filled. */ xpProperty_ProgressMin = 1801, - /* This is the maximum value, equivalent to 100% filled. */ + /* This is the maximum value, equivalent to 100% filled. */ xpProperty_ProgressMax = 1802, diff --git a/Example/Lib/SDK/CHeaders/Widgets/XPUIGraphics.h b/Example/Lib/SDK/CHeaders/Widgets/XPUIGraphics.h old mode 100755 new mode 100644 index b70e0f6..83ed302 --- a/Example/Lib/SDK/CHeaders/Widgets/XPUIGraphics.h +++ b/Example/Lib/SDK/CHeaders/Widgets/XPUIGraphics.h @@ -2,8 +2,8 @@ #define _XPUIGraphics_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -27,9 +27,9 @@ extern "C" { * There are a few built-in window styles in X-Plane that you can use. * * Note that X-Plane 6 does not offer real shadow-compositing; you must make - * sure to put a window on top of another window of the right style to the - * shadows work, etc. This applies to elements with insets and shadows. The - * rules are: + * sure to put a window on top of another window of the right style to make + * the shadows work, etc. This applies to elements with insets and shadows. + * The rules are: * * Sub windows must go on top of main windows, and screens and list views on * top of subwindows. Only help and main windows can be over the main screen. @@ -39,23 +39,23 @@ extern "C" { * Some windows are scaled by stretching, some by repeating. The drawing * routines know which scaling method to use. The list view cannot be rescaled * in X-Plane 6 because it has both a repeating pattern and a gradient in one - * element. All other elements can be rescaled. + * element. All other elements can be rescaled. * */ enum { - /* An LCD screen that shows help. */ + /* An LCD screen that shows help. */ xpWindow_Help = 0, - /* A dialog box window. */ + /* A dialog box window. */ xpWindow_MainWindow = 1, - /* A panel or frame within a dialog box window. */ + /* A panel or frame within a dialog box window. */ xpWindow_SubWindow = 2, - /* An LCD screen within a panel to hold text displays. */ + /* An LCD screen within a panel to hold text displays. */ xpWindow_Screen = 4, - /* A list view within a panel for scrolling file names, etc. */ + /* A list view within a panel for scrolling file names, etc. */ xpWindow_ListView = 5, @@ -68,27 +68,27 @@ typedef int XPWindowStyle; * This routine draws a window of the given dimensions at the given offset on * the virtual screen in a given style. The window is automatically scaled as * appropriate using a bitmap scaling technique (scaling or repeating) as - * appropriate to the style. + * appropriate to the style. * */ WIDGET_API void XPDrawWindow( - int inX1, - int inY1, - int inX2, - int inY2, - XPWindowStyle inStyle); + int inX1, + int inY1, + int inX2, + int inY2, + XPWindowStyle inStyle); /* * XPGetWindowDefaultDimensions * * This routine returns the default dimensions for a window. Output is either - * a minimum or fixed value depending on whether the window is scalable. + * a minimum or fixed value depending on whether the window is scalable. * */ WIDGET_API void XPGetWindowDefaultDimensions( - XPWindowStyle inStyle, - int * outWidth, /* Can be NULL */ - int * outHeight); /* Can be NULL */ + XPWindowStyle inStyle, + int * outWidth, /* Can be NULL */ + int * outHeight); /* Can be NULL */ /* * XPElementStyle @@ -101,116 +101,116 @@ WIDGET_API void XPGetWindowDefaultDimensions( * In X-Plane 6 some elements must be drawn over metal. Some are scalable and * some are not. Any element can be drawn anywhere in X-Plane 7. * - * Scalable Axis Required Background + * Scalable Axis Required Background * */ enum { - /* x metal */ + /* x metal */ xpElement_TextField = 6, - /* none metal */ + /* none metal */ xpElement_CheckBox = 9, - /* none metal */ + /* none metal */ xpElement_CheckBoxLit = 10, - /* none window header */ + /* none window header */ xpElement_WindowCloseBox = 14, - /* none window header */ + /* none window header */ xpElement_WindowCloseBoxPressed = 15, - /* x metal */ + /* x metal */ xpElement_PushButton = 16, - /* x metal */ + /* x metal */ xpElement_PushButtonLit = 17, - /* none any */ + /* none any */ xpElement_OilPlatform = 24, - /* none any */ + /* none any */ xpElement_OilPlatformSmall = 25, - /* none any */ + /* none any */ xpElement_Ship = 26, - /* none any */ + /* none any */ xpElement_ILSGlideScope = 27, - /* none any */ + /* none any */ xpElement_MarkerLeft = 28, - /* none any */ + /* none any */ xpElement_Airport = 29, - /* none any */ + /* none any */ xpElement_Waypoint = 30, - /* none any */ + /* none any */ xpElement_NDB = 31, - /* none any */ + /* none any */ xpElement_VOR = 32, - /* none any */ + /* none any */ xpElement_RadioTower = 33, - /* none any */ + /* none any */ xpElement_AircraftCarrier = 34, - /* none any */ + /* none any */ xpElement_Fire = 35, - /* none any */ + /* none any */ xpElement_MarkerRight = 36, - /* none any */ + /* none any */ xpElement_CustomObject = 37, - /* none any */ + /* none any */ xpElement_CoolingTower = 38, - /* none any */ + /* none any */ xpElement_SmokeStack = 39, - /* none any */ + /* none any */ xpElement_Building = 40, - /* none any */ + /* none any */ xpElement_PowerLine = 41, - /* none metal */ + /* none metal */ xpElement_CopyButtons = 45, - /* none metal */ + /* none metal */ xpElement_CopyButtonsWithEditingGrid = 46, - /* x, y metal */ + /* x, y metal */ xpElement_EditingGrid = 47, - /* THIS CAN PROBABLY BE REMOVED */ + /* THIS CAN PROBABLY BE REMOVED */ xpElement_ScrollBar = 48, - /* none any */ + /* none any */ xpElement_VORWithCompassRose = 49, - /* none metal */ + /* none metal */ xpElement_Zoomer = 51, - /* x, y metal */ + /* x, y metal */ xpElement_TextFieldMiddle = 52, - /* none metal */ + /* none metal */ xpElement_LittleDownArrow = 53, - /* none metal */ + /* none metal */ xpElement_LittleUpArrow = 54, - /* none metal */ + /* none metal */ xpElement_WindowDragBar = 61, - /* none metal */ + /* none metal */ xpElement_WindowDragBarSmooth = 62, @@ -221,34 +221,33 @@ typedef int XPElementStyle; * XPDrawElement * * XPDrawElement draws a given element at an offset on the virtual screen in - * set dimensions. - * *Even* if the element is not scalable, it will be scaled if the width and - * height do not match the preferred dimensions; it'll just look ugly. Pass - * inLit to see the lit version of the element; if the element cannot be lit - * this is ignored. + * set dimensions. Even if the element is not scalable, it will be scaled if + * the width and height do not match the preferred dimensions; it'll just look + * ugly. Pass inLit to see the lit version of the element; if the element + * cannot be lit this is ignored. * */ WIDGET_API void XPDrawElement( - int inX1, - int inY1, - int inX2, - int inY2, - XPElementStyle inStyle, - int inLit); + int inX1, + int inY1, + int inX2, + int inY2, + XPElementStyle inStyle, + int inLit); /* * XPGetElementDefaultDimensions * * This routine returns the recommended or minimum dimensions of a given UI * element. outCanBeLit tells whether the element has both a lit and unlit - * state. Pass `NULL` to not receive any of these parameters. + * state. Pass NULL to not receive any of these parameters. * */ WIDGET_API void XPGetElementDefaultDimensions( - XPElementStyle inStyle, - int * outWidth, /* Can be NULL */ - int * outHeight, /* Can be NULL */ - int * outCanBeLit); /* Can be NULL */ + XPElementStyle inStyle, + int * outWidth, /* Can be NULL */ + int * outHeight, /* Can be NULL */ + int * outCanBeLit); /* Can be NULL */ /* * XPTrackStyle @@ -263,17 +262,17 @@ WIDGET_API void XPGetElementDefaultDimensions( * - ScrollBar: this is a standard scroll bar with arrows and a thumb to drag. * - Slider: this is a simple track with a ball in the middle that can be * slid. - * - Progress: this is a progress indicator showing how a long task is going. + * - Progress: this is a progress indicator showing how a long task is going. * */ enum { - /* not over metal can be lit can be rotated */ + /* not over metal can be lit can be rotated */ xpTrack_ScrollBar = 0, - /* over metal can be lit can be rotated */ + /* over metal can be lit can be rotated */ xpTrack_Slider = 1, - /* over metal cannot be lit cannot be rotated */ + /* over metal cannot be lit cannot be rotated */ xpTrack_Progress = 2, @@ -287,32 +286,32 @@ typedef int XPTrackStyle; * track picks the optimal orientation for these dimensions. Pass in the * track's minimum current and maximum values; the indicator will be * positioned appropriately. You can also specify whether the track is lit or - * not. + * not. * */ WIDGET_API void XPDrawTrack( - int inX1, - int inY1, - int inX2, - int inY2, - int inMin, - int inMax, - int inValue, - XPTrackStyle inTrackStyle, - int inLit); + int inX1, + int inY1, + int inX2, + int inY2, + int inMin, + int inMax, + int inValue, + XPTrackStyle inTrackStyle, + int inLit); /* * XPGetTrackDefaultDimensions * * This routine returns a track's default smaller dimension; all tracks are * scalable in the larger dimension. It also returns whether a track can be - * lit. + * lit. * */ WIDGET_API void XPGetTrackDefaultDimensions( - XPTrackStyle inStyle, - int * outWidth, - int * outCanBeLit); + XPTrackStyle inStyle, + int * outWidth, + int * outCanBeLit); /* * XPGetTrackMetrics @@ -328,24 +327,24 @@ WIDGET_API void XPGetTrackDefaultDimensions( * Besides orientation, you get five dimensions for the five parts of a * scrollbar, which are the down button, down area (area before the thumb), * the thumb, and the up area and button. For horizontal scrollers, the left - * button decreases; for vertical scrollers, the top button decreases. + * button decreases; for vertical scrollers, the top button decreases. * */ WIDGET_API void XPGetTrackMetrics( - int inX1, - int inY1, - int inX2, - int inY2, - int inMin, - int inMax, - int inValue, - XPTrackStyle inTrackStyle, - int * outIsVertical, - int * outDownBtnSize, - int * outDownPageSize, - int * outThumbSize, - int * outUpPageSize, - int * outUpBtnSize); + int inX1, + int inY1, + int inX2, + int inY2, + int inMin, + int inMax, + int inValue, + XPTrackStyle inTrackStyle, + int * outIsVertical, + int * outDownBtnSize, + int * outDownPageSize, + int * outThumbSize, + int * outUpPageSize, + int * outUpBtnSize); #ifdef __cplusplus } diff --git a/Example/Lib/SDK/CHeaders/Widgets/XPWidgetDefs.h b/Example/Lib/SDK/CHeaders/Widgets/XPWidgetDefs.h old mode 100755 new mode 100644 index c1b2341..a4fc1ba --- a/Example/Lib/SDK/CHeaders/Widgets/XPWidgetDefs.h +++ b/Example/Lib/SDK/CHeaders/Widgets/XPWidgetDefs.h @@ -2,8 +2,8 @@ #define _XPWidgetDefs_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -57,7 +57,7 @@ extern "C" { * text entry field, etc. * * Use the widget API to create widgets of various classes. You can nest them - * into trees of widgets to create complex user interfaces. + * into trees of widgets to create complex user interfaces. * */ @@ -68,7 +68,7 @@ extern "C" { * A Widget ID is an opaque unique non-zero handle identifying your widget. * Use 0 to specify "no widget". This type is defined as wide enough to hold a * pointer. You receive a widget ID when you create a new widget and then use - * that widget ID to further refer to the widget. + * that widget ID to further refer to the widget. * */ typedef void * XPWidgetID; @@ -84,41 +84,41 @@ typedef void * XPWidgetID; * widget; it then stays there for the life of the widget. * * Some property IDs are predefined by the widget package; you can make up - * your own property IDs as well. + * your own property IDs as well. * */ enum { - /* A window's refcon is an opaque value used by client code to find other data* - * based on it. */ + /* A window's refcon is an opaque value used by client code to find other data* + * based on it. */ xpProperty_Refcon = 0, - /* These properties are used by the utlities to implement dragging. */ + /* These properties are used by the utilities to implement dragging. */ xpProperty_Dragging = 1, xpProperty_DragXOff = 2, xpProperty_DragYOff = 3, - /* Is the widget hilited? (For widgets that support this kind of thing.) */ + /* Is the widget highlighted? (For widgets that support this kind of thing.) */ xpProperty_Hilited = 4, - /* Is there a C++ object attached to this widget? */ + /* Is there a C++ object attached to this widget? */ xpProperty_Object = 5, - /* If this property is 1, the widget package will use OpenGL to restrict * - * drawing to the Wiget's exposed rectangle. */ + /* If this property is 1, the widget package will use OpenGL to restrict * + * drawing to the Widget's exposed rectangle. */ xpProperty_Clip = 6, - /* Is this widget enabled (for those that have a disabled state too)? */ + /* Is this widget enabled (for those that have a disabled state too)? */ xpProperty_Enabled = 7, - /* NOTE: Property IDs 1 - 999 are reserved for the widgets library. * - * * - * NOTE: Property IDs 1000 - 9999 are allocated to the standard widget classes* - * provided with the library. * - * * - * Properties 1000 - 1099 are for widget class 0, 1100 - 1199 for widget class* - * 1, etc. */ + /* NOTE: Property IDs 1 - 999 are reserved for the widgets library. * + * * + * NOTE: Property IDs 1000 - 9999 are allocated to the standard widget classes* + * provided with the library. * + * * + * Properties 1000 - 1099 are for widget class 0, 1100 - 1199 for widget class* + * 1, etc. */ xpProperty_UserStart = 10000, @@ -129,16 +129,16 @@ typedef int XPWidgetPropertyID; * XPMouseState_t * * When the mouse is clicked or dragged, a pointer to this structure is passed - * to your widget function. + * to your widget function. * */ typedef struct { int x; int y; - /* Mouse Button number, left = 0 (right button not yet supported. */ + /* Mouse button number, left = 0 (right button not yet supported. */ int button; #if defined(XPLM200) - /* Scroll wheel delta (button in this case would be the wheel axis number). */ + /* Scroll wheel delta (button in this case would be the wheel axis number). */ int delta; #endif /* XPLM200 */ } XPMouseState_t; @@ -147,16 +147,16 @@ typedef struct { * XPKeyState_t * * When a key is pressed, a pointer to this struct is passed to your widget - * function. + * function. * */ typedef struct { - /* The ASCII key that was pressed. WARNING: this may be 0 for some non-ASCII * - * key sequences. */ + /* The ASCII key that was pressed. WARNING: this may be 0 for some non-ASCII * + * key sequences. */ char key; - /* The flags. Make sure to check this if you only want key-downs! */ + /* The flags. Make sure to check this if you only want key-downs! */ XPLMKeyFlags flags; - /* The virtual key code for the key */ + /* The virtual key code for the key */ char vkey; } XPKeyState_t; @@ -164,12 +164,12 @@ typedef struct { * XPWidgetGeometryChange_t * * This structure contains the deltas for your widget's geometry when it - * changes. + * changes. * */ typedef struct { int dx; - /* +Y = the widget moved up */ + /* +Y = the widget moved up */ int dy; int dwidth; int dheight; @@ -179,28 +179,28 @@ typedef struct { * XPDispatchMode * * The dispatching modes describe how the widgets library sends out messages. - * Currently there are three modes: + * Currently there are three modes: * */ enum { - /* The message will only be sent to the target widget. */ + /* The message will only be sent to the target widget. */ xpMode_Direct = 0, - /* The message is sent to the target widget, then up the chain of parents * - * until the message is handled or a parentless widget is reached. */ + /* The message is sent to the target widget, then up the chain of parents * + * until the message is handled or a parentless widget is reached. */ xpMode_UpChain = 1, - /* The message is sent to the target widget and then all of its children * - * recursively depth-first. */ + /* The message is sent to the target widget and then all of its children * + * recursively depth-first. */ xpMode_Recursive = 2, - /* The message is snet just to the target, but goes to every callback, even if* - * it is handled. */ + /* The message is sent just to the target, but goes to every callback, even if* + * it is handled. */ xpMode_DirectAllCallbacks = 3, - /* The message is only sent to the very first handler even if it is not * - * accepted. (This is really only useful for some internal widget library * - * functions.) */ + /* The message is only sent to the very first handler even if it is not * + * accepted. (This is really only useful for some internal widget library * + * functions.) */ xpMode_Once = 4, @@ -212,7 +212,7 @@ typedef int XPDispatchMode; * * Widget classes define predefined widget types. A widget class basically * specifies from a library the widget function to be used for the widget. - * Most widgets can be made right from classes. + * Most widgets can be made right from classes. * */ typedef int XPWidgetClass; @@ -229,215 +229,215 @@ typedef int XPWidgetClass; * XPWidgetMessage * * Widgets receive 32-bit messages indicating what action is to be taken or - * notifications of events. The list of messages may be expanded. + * notifications of events. The list of messages may be expanded. * */ enum { - /* No message, should not be sent. */ + /* No message, should not be sent. */ xpMsg_None = 0, - /* The create message is sent once per widget that is created with your widget* - * function and once for any widget that has your widget function attached. * - * * - * Dispatching: Direct * - * * - * Param 1: 1 if you are being added as a subclass, 0 if the widget is first * - * being created. */ + /* The create message is sent once per widget that is created with your widget* + * function and once for any widget that has your widget function attached. * + * * + * Dispatching: Direct * + * * + * Param 1: 1 if you are being added as a subclass, 0 if the widget is first * + * being created. */ xpMsg_Create = 1, - /* The destroy message is sent once for each message that is destroyed that * - * has your widget function. * - * * - * Dispatching: Direct for all * - * * - * Param 1: 1 if being deleted by a recursive delete to the parent, 0 for * - * explicit deletion. */ + /* The destroy message is sent once for each message that is destroyed that * + * has your widget function. * + * * + * Dispatching: Direct for all * + * * + * Param 1: 1 if being deleted by a recursive delete to the parent, 0 for * + * explicit deletion. */ xpMsg_Destroy = 2, - /* The paint message is sent to your widget to draw itself. The paint message * - * is the bare-bones message; in response you must draw yourself, draw your * - * children, set up clipping and culling, check for visibility, etc. If you * - * don't want to do all of this, ignore the paint message and a draw message * - * (see below) will be sent to you. * - * * - * Dispatching: Direct */ + /* The paint message is sent to your widget to draw itself. The paint message * + * is the bare-bones message; in response you must draw yourself, draw your * + * children, set up clipping and culling, check for visibility, etc. If you * + * don't want to do all of this, ignore the paint message and a draw message * + * (see below) will be sent to you. * + * * + * Dispatching: Direct */ xpMsg_Paint = 3, - /* The draw message is sent to your widget when it is time to draw yourself. * - * OpenGL will be set up to draw in 2-d global screen coordinates, but you * - * should use the XPLM to set up OpenGL state. * - * * - * Dispatching: Direct */ + /* The draw message is sent to your widget when it is time to draw yourself. * + * OpenGL will be set up to draw in 2-d global screen coordinates, but you * + * should use the XPLM to set up OpenGL state. * + * * + * Dispatching: Direct */ xpMsg_Draw = 4, - /* The key press message is sent once per key that is pressed. The first * - * parameter is the type of key code (integer or char) and the second is the * - * code itself. By handling this event, you consume the key stroke. * - * * - * Handling this message 'consumes' the keystroke; not handling it passes it * - * to your parent widget. * - * * - * Dispatching: Up Chain * - * * - * Param 1: A pointer to an XPKeyState_t structure with the keystroke. */ + /* The key press message is sent once per key that is pressed. The first * + * parameter is the type of key code (integer or char) and the second is the * + * code itself. By handling this event, you consume the key stroke. * + * * + * Handling this message 'consumes' the keystroke; not handling it passes it * + * to your parent widget. * + * * + * Dispatching: Up Chain * + * * + * Param 1: A pointer to an XPKeyState_t structure with the keystroke. */ xpMsg_KeyPress = 5, - /* Keyboard focus is being given to you. By handling this message you accept * - * keyboard focus. The first parameter will be one if a child of yours gave up* - * focus to you, 0 if someone set focus on you explicitly. * - * * - * Handling this message accepts focus; not handling refuses focus. * - * * - * Dispatching: direct * - * * - * Param 1: 1 if you are gaining focus because your child is giving it up, 0 * - * if someone is explicitly giving you focus. */ + /* Keyboard focus is being given to you. By handling this message you accept * + * keyboard focus. The first parameter will be one if a child of yours gave up* + * focus to you, 0 if someone set focus on you explicitly. * + * * + * Handling this message accepts focus; not handling refuses focus. * + * * + * Dispatching: direct * + * * + * Param 1: 1 if you are gaining focus because your child is giving it up, 0 * + * if someone is explicitly giving you focus. */ xpMsg_KeyTakeFocus = 6, - /* Keyboard focus is being taken away from you. The first parameter will be * - * one if you are losing focus because another widget is taking it, or 0 if * - * someone called the API to make you lose focus explicitly. * - * * - * Dispatching: Direct * - * * - * Param 1: 1 if focus is being taken by another widget, 0 if code requested * - * to remove focus. */ + /* Keyboard focus is being taken away from you. The first parameter will be 1 * + * if you are losing focus because another widget is taking it, or 0 if * + * someone called the API to make you lose focus explicitly. * + * * + * Dispatching: Direct * + * * + * Param 1: 1 if focus is being taken by another widget, 0 if code requested * + * to remove focus. */ xpMsg_KeyLoseFocus = 7, - /* You receive one mousedown event per click with a mouse-state structure * - * pointed to by parameter 1, by accepting this you eat the click, otherwise * - * your parent gets it. You will not receive drag and mouse up messages if you* - * do not accept the down message. * - * * - * Handling this message consumes the mouse click, not handling it passes it * - * to the next widget. You can act 'transparent' as a window by never handling* - * moues clicks to certain areas. * - * * - * Dispatching: Up chain NOTE: Technically this is direct dispatched, but the * - * widgets library will shop it to each widget until one consumes the click, * - * making it effectively "up chain". * - * * - * Param 1: A pointer to an XPMouseState_t containing the mouse status. */ + /* You receive one mousedown event per click with a mouse-state structure * + * pointed to by parameter 1. By accepting this you eat the click, otherwise * + * your parent gets it. You will not receive drag and mouse up messages if you* + * do not accept the down message. * + * * + * Handling this message consumes the mouse click, not handling it passes it * + * to the next widget. You can act 'transparent' as a window by never handling* + * moues clicks to certain areas. * + * * + * Dispatching: Up chain NOTE: Technically this is direct dispatched, but the * + * widgets library will ship it to each widget until one consumes the click, * + * making it effectively "up chain". * + * * + * Param 1: A pointer to an XPMouseState_t containing the mouse status. */ xpMsg_MouseDown = 8, - /* You receive a series of mouse drag messages (typically one per frame in the* - * sim) as the mouse is moved once you have accepted a mouse down message. * - * Parameter one points to a mouse-state structure describing the mouse * - * location. You will continue to receive these until the mouse button is * - * released. You may receive multiple mouse state messages with the same mouse* - * position. You will receive mouse drag events even if the mouse is dragged * - * out of your current or original bounds at the time of the mouse down. * - * * - * Dispatching: Direct * - * * - * Param 1: A pointer to an XPMouseState_t containing the mouse status. */ + /* You receive a series of mouse drag messages (typically one per frame in the* + * sim) as the mouse is moved once you have accepted a mouse down message. * + * Parameter one points to a mouse-state structure describing the mouse * + * location. You will continue to receive these until the mouse button is * + * released. You may receive multiple mouse state messages with the same mouse* + * position. You will receive mouse drag events even if the mouse is dragged * + * out of your current or original bounds at the time of the mouse down. * + * * + * Dispatching: Direct * + * * + * Param 1: A pointer to an XPMouseState_t containing the mouse status. */ xpMsg_MouseDrag = 9, - /* The mouseup event is sent once when the mouse button is released after a * - * drag or click. You only receive this message if you accept the mouseDown * - * message. Parameter one points to a mouse state structure. * - * * - * Dispatching: Direct * - * * - * Param 1: A pointer to an XPMouseState_t containing the mouse status. */ + /* The mouseup event is sent once when the mouse button is released after a * + * drag or click. You only receive this message if you accept the mouseDown * + * message. Parameter one points to a mouse state structure. * + * * + * Dispatching: Direct * + * * + * Param 1: A pointer to an XPMouseState_t containing the mouse status. */ xpMsg_MouseUp = 10, - /* Your geometry or a child's geometry is being changed. * - * * - * Dispatching: Up chain * - * * - * Param 1: The widget ID of the original reshaped target. * - * * - * Param 2: A pointer to a XPWidgetGeometryChange_t struct describing the * - * change. */ + /* Your geometry or a child's geometry is being changed. * + * * + * Dispatching: Up chain * + * * + * Param 1: The widget ID of the original reshaped target. * + * * + * Param 2: A pointer to a XPWidgetGeometryChange_t struct describing the * + * change. */ xpMsg_Reshape = 11, - /* Your exposed area has changed. * - * * - * Dispatching: Direct */ + /* Your exposed area has changed. * + * * + * Dispatching: Direct */ xpMsg_ExposedChanged = 12, - /* A child has been added to you. The child's ID is passed in parameter one. * - * * - * Dispatching: Direct * - * * - * Param 1: The Widget ID of the child being added. */ + /* A child has been added to you. The child's ID is passed in parameter one. * + * * + * Dispatching: Direct * + * * + * Param 1: The Widget ID of the child being added. */ xpMsg_AcceptChild = 13, - /* A child has been removed from to you. The child's ID is passed in parameter* - * one. * - * * - * Dispatching: Direct * - * * - * Param 1: The Widget ID of the child being removed. */ + /* A child has been removed from you. The child's ID is passed in parameter * + * one. * + * * + * Dispatching: Direct * + * * + * Param 1: The Widget ID of the child being removed. */ xpMsg_LoseChild = 14, - /* You now have a new parent, or have no parent. The parent's ID is passed in,* - * or 0 for no parent. * - * * - * Dispatching: Direct * - * * - * Param 1: The Widget ID of your parent */ + /* You now have a new parent, or have no parent. The parent's ID is passed in,* + * or 0 for no parent. * + * * + * Dispatching: Direct * + * * + * Param 1: The Widget ID of your parent */ xpMsg_AcceptParent = 15, - /* You or a child has been shown. Note that this does not include you being * - * shown because your parent was shown, you were put in a new parent, your * - * root was shown, etc. * - * * - * Dispatching: Up chain * - * * - * Param 1: The widget ID of the shown widget. */ + /* You or a child has been shown. Note that this does not include you being * + * shown because your parent was shown, you were put in a new parent, your * + * root was shown, etc. * + * * + * Dispatching: Up chain * + * * + * Param 1: The widget ID of the shown widget. */ xpMsg_Shown = 16, - /* You have been hidden. See limitations above. * - * * - * Dispatching: Up chain * - * * - * Param 1: The widget ID of the hidden widget. */ + /* You have been hidden. See limitations above. * + * * + * Dispatching: Up chain * + * * + * Param 1: The widget ID of the hidden widget. */ xpMsg_Hidden = 17, - /* Your descriptor has changed. * - * * - * Dispatching: Direct */ + /* Your descriptor has changed. * + * * + * Dispatching: Direct */ xpMsg_DescriptorChanged = 18, - /* A property has changed. Param 1 contains the property ID. * - * * - * Dispatching: Direct * - * * - * Param 1: The Property ID being changed. * - * * - * Param 2: The new property value */ + /* A property has changed. Param 1 contains the property ID. * + * * + * Dispatching: Direct * + * * + * Param 1: The Property ID being changed. * + * * + * Param 2: The new property value */ xpMsg_PropertyChanged = 19, #if defined(XPLM200) - /* The mouse wheel has moved. * - * * - * Return 1 to consume the mouse wheel move, or 0 to pass the message to a * - * parent. Dispatching: Up chain * - * * - * Param 1: A pointer to an XPMouseState_t containing the mouse status. */ + /* The mouse wheel has moved. * + * * + * Return 1 to consume the mouse wheel move, or 0 to pass the message to a * + * parent. Dispatching: Up chain * + * * + * Param 1: A pointer to an XPMouseState_t containing the mouse status. */ xpMsg_MouseWheel = 20, #endif /* XPLM200 */ #if defined(XPLM200) - /* The cursor is over your widget. If you consume this message, change the * - * XPLMCursorStatus value to indicate the desired result, with the same rules * - * as in XPLMDisplay.h. * - * * - * Return 1 to consume this message, 0 to pass it on. * - * * - * Dispatching: Up chain Param 1: A pointer to an XPMouseState_t struct * - * containing the mouse status. * - * * - * Param 2: A pointer to a XPLMCursorStatus - set this to the cursor result * - * you desire. */ + /* The cursor is over your widget. If you consume this message, change the * + * XPLMCursorStatus value to indicate the desired result, with the same rules * + * as in XPLMDisplay.h. * + * * + * Return 1 to consume this message, 0 to pass it on. * + * * + * Dispatching: Up chain Param 1: A pointer to an XPMouseState_t struct * + * containing the mouse status. * + * * + * Param 2: A pointer to a XPLMCursorStatus - set this to the cursor result * + * you desire. */ xpMsg_CursorAdjust = 21, #endif /* XPLM200 */ - /* NOTE: Message IDs 1000 - 9999 are allocated to the standard widget classes * - * provided with the library with 1000 - 1099 for widget class 0, 1100 - 1199 * - * for widget class 1, etc. Message IDs 10,000 and beyond are for plugin use. */ + /* NOTE: Message IDs 1000 - 9999 are allocated to the standard widget classes * + * provided with the library with 1000 - 1099 for widget class 0, 1100 - 1199 * + * for widget class 1, etc. Message IDs 10,000 and beyond are for plugin use. */ xpMsg_UserStart = 10000, @@ -453,17 +453,17 @@ typedef int XPWidgetMessage; * * This function defines your custom widget's behavior. It will be called by * the widgets library to send messages to your widget. The message and widget - * ID are passed in, as well as two ptr-width signed parameters whose meaning - * varies with the message. Return 1 to indicate that you have processed the - * message, 0 to indicate that you have not. For any message that is not - * understood, return 0. + * ID are passed in, as well as two pointer-width signed parameters whose + * meaning varies with the message. Return 1 to indicate that you have + * processed the message, 0 to indicate that you have not. For any message + * that is not understood, return 0. * */ typedef int (* XPWidgetFunc_t)( - XPWidgetMessage inMessage, - XPWidgetID inWidget, - intptr_t inParam1, - intptr_t inParam2); + XPWidgetMessage inMessage, + XPWidgetID inWidget, + intptr_t inParam1, + intptr_t inParam2); #ifdef __cplusplus } diff --git a/Example/Lib/SDK/CHeaders/Widgets/XPWidgetUtils.h b/Example/Lib/SDK/CHeaders/Widgets/XPWidgetUtils.h old mode 100755 new mode 100644 index ff757f7..60e4b95 --- a/Example/Lib/SDK/CHeaders/Widgets/XPWidgetUtils.h +++ b/Example/Lib/SDK/CHeaders/Widgets/XPWidgetUtils.h @@ -2,8 +2,8 @@ #define _XPWidgetUtils_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -25,12 +25,13 @@ * behavior. Remember that the last function you add has highest priority. * You can use this to change or augment the behavior of an existing * finished widget. + * * 2. You can call a widget function from inside your own widget function. * This allows you to include useful behaviors in custom-built widgets. A * number of the standard widgets get their behavior from this library. To * do this, call the behavior function from your function first. If it * returns 1, that means it handled the event and you don't need to; simply - * return 1. + * return 1. * */ @@ -72,7 +73,7 @@ extern "C" { /* * XPWidgetCreate_t * - * This structure contains all of the parameters needed to create a wiget. It + * This structure contains all of the parameters needed to create a widget. It * is used with XPUCreateWidgets to create widgets in bulk from an array. All * parameters correspond to those of XPCreateWidget except for the container * index. @@ -84,7 +85,7 @@ extern "C" { * * If the container index is NO_PARENT, the parent widget is specified as * NULL. If the container index is PARAM_PARENT, the widget passed into - * XPUCreateWidgets is used. + * XPUCreateWidgets is used. * */ typedef struct { @@ -94,9 +95,9 @@ typedef struct { int bottom; int visible; const char * descriptor; - /* Whether ethis widget is a root wiget */ + /* Whether this widget is a root widget */ int isRoot; - /* The index of the widget to contain within, or a constant */ + /* The index of the widget to be contained within, or a constant */ int containerIndex; XPWidgetClass widgetClass; } XPWidgetCreate_t; @@ -121,26 +122,26 @@ typedef struct { * * You can also pass in a widget ID that will be used when the widget's parent * is listed as PARAM_PARENT; this allows you to embed widgets created with - * XPUCreateWidgets in a widget created previously. + * XPUCreateWidgets in a widget created previously. * */ WIDGET_API void XPUCreateWidgets( - const XPWidgetCreate_t * inWidgetDefs, - int inCount, - XPWidgetID inParamParent, - XPWidgetID * ioWidgets); + const XPWidgetCreate_t * inWidgetDefs, + int inCount, + XPWidgetID inParamParent, + XPWidgetID * ioWidgets); /* * XPUMoveWidgetBy * - * Simply moves a widget by an amount, +x = right, +y=up, without resizing the - * widget. + * Simply moves a widget by an amount, +x = right, +y = up, without resizing + * the widget. * */ WIDGET_API void XPUMoveWidgetBy( - XPWidgetID inWidget, - int inDeltaX, - int inDeltaY); + XPWidgetID inWidget, + int inDeltaX, + int inDeltaY); /*************************************************************************** * LAYOUT MANAGERS @@ -148,7 +149,7 @@ WIDGET_API void XPUMoveWidgetBy( /* * The layout managers are widget behavior functions for handling where * widgets move. Layout managers can be called from a widget function or - * attached to a widget later. + * attached to a widget later. * */ @@ -158,14 +159,14 @@ WIDGET_API void XPUMoveWidgetBy( * * This function causes the widget to maintain its children in fixed position * relative to itself as it is resized. Use this on the top level 'window' - * widget for your window. + * widget for your window. * */ WIDGET_API int XPUFixedLayout( - XPWidgetMessage inMessage, - XPWidgetID inWidget, - intptr_t inParam1, - intptr_t inParam2); + XPWidgetMessage inMessage, + XPWidgetID inWidget, + intptr_t inParam1, + intptr_t inParam2); /*************************************************************************** * WIDGET PROC BEHAVIORS @@ -173,7 +174,7 @@ WIDGET_API int XPUFixedLayout( /* * These widget behavior functions add other useful behaviors to widgets. * These functions cannot be attached to a widget; they must be called from - * your widget function. + * your widget function. * */ @@ -183,47 +184,47 @@ WIDGET_API int XPUFixedLayout( * * This causes the widget to bring its window to the foreground if it is not * already. inEatClick specifies whether clicks in the background should be - * consumed by bringin the window to the foreground. + * consumed by bringing the window to the foreground. * */ WIDGET_API int XPUSelectIfNeeded( - XPWidgetMessage inMessage, - XPWidgetID inWidget, - intptr_t inParam1, - intptr_t inParam2, - int inEatClick); + XPWidgetMessage inMessage, + XPWidgetID inWidget, + intptr_t inParam1, + intptr_t inParam2, + int inEatClick); /* * XPUDefocusKeyboard * - * This causes a click in the widget to send keyboard focus back to X-Plane. - * This stops editing of any text fields, etc. + * This causes the widget to send keyboard focus back to X-Plane. This stops + * editing of any text fields, etc. * */ WIDGET_API int XPUDefocusKeyboard( - XPWidgetMessage inMessage, - XPWidgetID inWidget, - intptr_t inParam1, - intptr_t inParam2, - int inEatClick); + XPWidgetMessage inMessage, + XPWidgetID inWidget, + intptr_t inParam1, + intptr_t inParam2, + int inEatClick); /* * XPUDragWidget * * XPUDragWidget drags the widget in response to mouse clicks. Pass in not * only the event, but the global coordinates of the drag region, which might - * be a sub-region of your widget (for example, a title bar). + * be a sub-region of your widget (for example, a title bar). * */ WIDGET_API int XPUDragWidget( - XPWidgetMessage inMessage, - XPWidgetID inWidget, - intptr_t inParam1, - intptr_t inParam2, - int inLeft, - int inTop, - int inRight, - int inBottom); + XPWidgetMessage inMessage, + XPWidgetID inWidget, + intptr_t inParam1, + intptr_t inParam2, + int inLeft, + int inTop, + int inRight, + int inBottom); #ifdef __cplusplus } diff --git a/Example/Lib/SDK/CHeaders/Widgets/XPWidgets.h b/Example/Lib/SDK/CHeaders/Widgets/XPWidgets.h old mode 100755 new mode 100644 index f4423e2..f09885a --- a/Example/Lib/SDK/CHeaders/Widgets/XPWidgets.h +++ b/Example/Lib/SDK/CHeaders/Widgets/XPWidgets.h @@ -2,8 +2,8 @@ #define _XPWidgets_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -30,7 +30,8 @@ * - A text string descriptor, whose meaning varies from widget to widget. * - An arbitrary set of 32 bit integral properties defined by 32-bit integral * keys. This is how specific widgets store specific data. - * - A list of widget callbacks proc that implements the widgets behaviors. + * - A list of widget callback procedures that implements the widgets + * behaviors. * * The Widgets library sends messages to widgets to request specific behaviors * or notify the widget of things. @@ -61,7 +62,7 @@ * widget needs it or not. * - Any widget may be a 'root' widget, causing it to be drawn; there is no * relationship between widget class and rootness. Root widgets are - * imlemented as XPLMDisply windows. + * implemented as XPLMDisplay windows. * */ @@ -94,10 +95,10 @@ extern "C" { * descriptor. * - inIsRoot is 1 if this is going to be a root widget, 0 if it will not be. * - inContainer is the ID of this widget's container. It must be 0 for a root - * widget. for a non-root widget, pass the widget ID of the widget to place + * widget. For a non-root widget, pass the widget ID of the widget to place * this widget within. If this widget is not going to start inside another - * widget, pass 0; this new widget will then just be floating off in space - * (and will not be drawn until it is placed in a widget. + * widget, pass 0; this new widget will be created but will not be drawn + * until it is placed inside another widget. * - inClass is the class of the widget to draw. Use one of the predefined * class-IDs to create a standard widget. * @@ -105,19 +106,19 @@ extern "C" { * etc.) if it is placed within a widget that will be called. Root widgets are * always called. So it is possible to have whole chains of widgets that are * simply not called. You can preconstruct widget trees and then place them - * into root widgets later to activate them if you wish. + * into root widgets later to activate them if you wish. * */ WIDGET_API XPWidgetID XPCreateWidget( - int inLeft, - int inTop, - int inRight, - int inBottom, - int inVisible, - const char * inDescriptor, - int inIsRoot, - XPWidgetID inContainer, - XPWidgetClass inClass); + int inLeft, + int inTop, + int inRight, + int inBottom, + int inVisible, + const char * inDescriptor, + int inIsRoot, + XPWidgetID inContainer, + XPWidgetClass inClass); /* * XPCreateCustomWidget @@ -126,19 +127,19 @@ WIDGET_API XPWidgetID XPCreateWidget( * a class ID, you pass your widget callback function pointer defining the * widget. Use this function to define a custom widget. All parameters are the * same as XPCreateWidget, except that the widget class has been replaced with - * the widget function. + * the widget function. * */ WIDGET_API XPWidgetID XPCreateCustomWidget( - int inLeft, - int inTop, - int inRight, - int inBottom, - int inVisible, - const char * inDescriptor, - int inIsRoot, - XPWidgetID inContainer, - XPWidgetFunc_t inCallback); + int inLeft, + int inTop, + int inRight, + int inBottom, + int inVisible, + const char * inDescriptor, + int inIsRoot, + XPWidgetID inContainer, + XPWidgetFunc_t inCallback); /* * XPDestroyWidget @@ -148,12 +149,12 @@ WIDGET_API XPWidgetID XPCreateCustomWidget( * then this widget will be destroyed. (Furthermore, the widget's children * will be destroyed with the inDestroyChildren flag set to 1, so the * destruction will recurse down the widget tree.) If you pass 0 for this - * flag, the child widgets will simply end up with their parent set to 0. + * flag, direct child widgets will simply end up with their parent set to 0. * */ WIDGET_API void XPDestroyWidget( - XPWidgetID inWidget, - int inDestroyChildren); + XPWidgetID inWidget, + int inDestroyChildren); /* * XPSendMessageToWidget @@ -169,15 +170,15 @@ WIDGET_API void XPDestroyWidget( * * For each widget that receives the message (see the dispatching modes), each * widget function from the most recently installed to the oldest one receives - * the message in order until it is handled. + * the message in order until it is handled. * */ WIDGET_API int XPSendMessageToWidget( - XPWidgetID inWidget, - XPWidgetMessage inMessage, - XPDispatchMode inMode, - intptr_t inParam1, - intptr_t inParam2); + XPWidgetID inWidget, + XPWidgetMessage inMessage, + XPDispatchMode inMode, + intptr_t inParam1, + intptr_t inParam2); /*************************************************************************** * WIDGET POSITIONING AND VISIBILITY @@ -198,136 +199,136 @@ WIDGET_API int XPSendMessageToWidget( * NOTE: this routine does not reposition the sub widget in global * coordinates. If the container has layout management code, it will * reposition the subwidget for you, otherwise you must do it with - * SetWidgetGeometry. + * SetWidgetGeometry. * */ WIDGET_API void XPPlaceWidgetWithin( - XPWidgetID inSubWidget, - XPWidgetID inContainer); + XPWidgetID inSubWidget, + XPWidgetID inContainer); /* * XPCountChildWidgets * - * This routine returns the number of widgets another widget contains. + * This routine returns the number of widgets another widget contains. * */ WIDGET_API int XPCountChildWidgets( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPGetNthChildWidget * * This routine returns the widget ID of a child widget by index. Indexes are - * 0 based, from 0 to one minus the number of widgets in the parent, - * inclusive. If the index is invalid, 0 is returned. + * 0 based, from 0 to the number of widgets in the parentone minus one, + * inclusive. If the index is invalid, 0 is returned. * */ WIDGET_API XPWidgetID XPGetNthChildWidget( - XPWidgetID inWidget, - int inIndex); + XPWidgetID inWidget, + int inIndex); /* * XPGetParentWidget * * Returns the parent of a widget, or 0 if the widget has no parent. Root - * widgets never have parents and therefore always return 0. + * widgets never have parents and therefore always return 0. * */ WIDGET_API XPWidgetID XPGetParentWidget( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPShowWidget * * This routine makes a widget visible if it is not already. Note that if a * widget is not in a rooted widget hierarchy or one of its parents is not - * visible, it will still not be visible to the user. + * visible, it will still not be visible to the user. * */ WIDGET_API void XPShowWidget( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPHideWidget * * Makes a widget invisible. See XPShowWidget for considerations of when a - * widget might not be visible despite its own visibility state. + * widget might not be visible despite its own visibility state. * */ WIDGET_API void XPHideWidget( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPIsWidgetVisible * * This returns 1 if a widget is visible, 0 if it is not. Note that this * routine takes into consideration whether a parent is invisible. Use this - * routine to tell if the user can see the widget. + * routine to tell if the user can see the widget. * */ WIDGET_API int XPIsWidgetVisible( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPFindRootWidget * * Returns the Widget ID of the root widget that contains the passed in widget - * or NULL if the passed in widget is not in a rooted hierarchy. + * or NULL if the passed in widget is not in a rooted hierarchy. * */ WIDGET_API XPWidgetID XPFindRootWidget( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPBringRootWidgetToFront * - * This routine makes the specified widget be in the front most widget + * This routine makes the specified widget be in the frontmost widget * hierarchy. If this widget is a root widget, its widget hierarchy comes to * front, otherwise the widget's root is brought to the front. If this widget * is not in an active widget hiearchy (e.g. there is no root widget at the - * top of the tree), this routine does nothing. + * top of the tree), this routine does nothing. * */ WIDGET_API void XPBringRootWidgetToFront( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPIsWidgetInFront * - * This routine returns true if this widget's hierarchy is the front most + * This routine returns true if this widget's hierarchy is the frontmost * hierarchy. It returns false if the widget's hierarchy is not in front, or - * if the widget is not in a rooted hierarchy. + * if the widget is not in a rooted hierarchy. * */ WIDGET_API int XPIsWidgetInFront( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPGetWidgetGeometry * * This routine returns the bounding box of a widget in global coordinates. - * Pass NULL for any parameter you are not interested in. + * Pass NULL for any parameter you are not interested in. * */ WIDGET_API void XPGetWidgetGeometry( - XPWidgetID inWidget, - int * outLeft, /* Can be NULL */ - int * outTop, /* Can be NULL */ - int * outRight, /* Can be NULL */ - int * outBottom); /* Can be NULL */ + XPWidgetID inWidget, + int * outLeft, /* Can be NULL */ + int * outTop, /* Can be NULL */ + int * outRight, /* Can be NULL */ + int * outBottom); /* Can be NULL */ /* * XPSetWidgetGeometry * - * This function changes the bounding box of a widget. + * This function changes the bounding box of a widget. * */ WIDGET_API void XPSetWidgetGeometry( - XPWidgetID inWidget, - int inLeft, - int inTop, - int inRight, - int inBottom); + XPWidgetID inWidget, + int inLeft, + int inTop, + int inRight, + int inBottom); /* * XPGetWidgetForLocation @@ -344,34 +345,34 @@ WIDGET_API void XPSetWidgetGeometry( * NOTE: if a widget's geometry extends outside its parents geometry, it will * not be returned by this call for mouse locations outside the parent * geometry. The parent geometry limits the child's eligibility for mouse - * location. + * location. * */ WIDGET_API XPWidgetID XPGetWidgetForLocation( - XPWidgetID inContainer, - int inXOffset, - int inYOffset, - int inRecursive, - int inVisibleOnly); + XPWidgetID inContainer, + int inXOffset, + int inYOffset, + int inRecursive, + int inVisibleOnly); /* * XPGetWidgetExposedGeometry * * This routine returns the bounds of the area of a widget that is completely * within its parent widgets. Since a widget's bounding box can be outside its - * parent, part of its area will not be elligible for mouse clicks and should + * parent, part of its area will not be eligible for mouse clicks and should * not draw. Use XPGetWidgetGeometry to find out what area defines your * widget's shape, but use this routine to find out what area to actually draw * into. Note that the widget library does not use OpenGL clipping to keep - * frame rates up, although you could use it internally. + * frame rates up, although you could use it internally. * */ WIDGET_API void XPGetWidgetExposedGeometry( - XPWidgetID inWidgetID, - int * outLeft, /* Can be NULL */ - int * outTop, /* Can be NULL */ - int * outRight, /* Can be NULL */ - int * outBottom); /* Can be NULL */ + XPWidgetID inWidgetID, + int * outLeft, /* Can be NULL */ + int * outTop, /* Can be NULL */ + int * outRight, /* Can be NULL */ + int * outBottom); /* Can be NULL */ /*************************************************************************** * ACCESSING WIDGET DATA @@ -386,12 +387,12 @@ WIDGET_API void XPGetWidgetExposedGeometry( * descriptor is the text being edited. In other words, the usage for the text * varies from widget to widget, but this API provides a universal and * convenient way to get at it. While not all UI widgets need their - * descriptor, many do. + * descriptor, many do. * */ WIDGET_API void XPSetWidgetDescriptor( - XPWidgetID inWidget, - const char * inDescriptor); + XPWidgetID inWidget, + const char * inDescriptor); /* * XPGetWidgetDescriptor @@ -402,13 +403,13 @@ WIDGET_API void XPSetWidgetDescriptor( * descriptor; if you pass NULL for outDescriptor, you can get the * descriptor's length without getting its text. If the length of the * descriptor exceeds your buffer length, the buffer will not be null - * terminated (this routine has 'strncpy' semantics). + * terminated (this routine has 'strncpy' semantics). * */ WIDGET_API int XPGetWidgetDescriptor( - XPWidgetID inWidget, - char * outDescriptor, - int inMaxDescLength); + XPWidgetID inWidget, + char * outDescriptor, + int inMaxDescLength); /* * XPGetWidgetUnderlyingWindow @@ -418,23 +419,23 @@ WIDGET_API int XPGetWidgetDescriptor( * XPLMEnableFeature("XPLM_USE_NATIVE_WIDGET_WINDOWS", 1), you can use the * returned window ID for display APIs like XPLMSetWindowPositioningMode(), * allowing you to pop the widget window out into a real OS window, or move it - * into VR. + * into VR. * */ WIDGET_API XPLMWindowID XPGetWidgetUnderlyingWindow( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPSetWidgetProperty * * This function sets a widget's property. Properties are arbitrary values - * associated by a widget by ID. + * associated by a widget by ID. * */ WIDGET_API void XPSetWidgetProperty( - XPWidgetID inWidget, - XPWidgetPropertyID inProperty, - intptr_t inValue); + XPWidgetID inWidget, + XPWidgetPropertyID inProperty, + intptr_t inValue); /* * XPGetWidgetProperty @@ -443,13 +444,13 @@ WIDGET_API void XPSetWidgetProperty( * is not defined. If you need to know whether the property is defined, pass a * pointer to an int for inExists; the existence of that property will be * returned in the int. Pass NULL for inExists if you do not need this - * information. + * information. * */ WIDGET_API intptr_t XPGetWidgetProperty( - XPWidgetID inWidget, - XPWidgetPropertyID inProperty, - int * inExists); /* Can be NULL */ + XPWidgetID inWidget, + XPWidgetPropertyID inProperty, + int * inExists); /* Can be NULL */ /*************************************************************************** * KEYBOARD MANAGEMENT @@ -469,29 +470,29 @@ WIDGET_API intptr_t XPGetWidgetProperty( * for X-Plane. * * Keyboard focus is not changed if the new widget will not accept it. For - * setting to X-Plane, keyboard focus is always accepted. + * setting to X-Plane, keyboard focus is always accepted. * */ WIDGET_API XPWidgetID XPSetKeyboardFocus( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPLoseKeyboardFocus * * This causes the specified widget to lose focus; focus is passed to its * parent, or the next parent that will accept it. This routine does nothing - * if this widget does not have focus. + * if this widget does not have focus. * */ WIDGET_API void XPLoseKeyboardFocus( - XPWidgetID inWidget); + XPWidgetID inWidget); /* * XPGetWidgetWithFocus * * This routine returns the widget that has keyboard focus, or 0 if X-Plane * has keyboard focus or some other plugin window that does not have widgets - * has focus. + * has focus. * */ WIDGET_API XPWidgetID XPGetWidgetWithFocus(void); @@ -514,22 +515,22 @@ WIDGET_API XPWidgetID XPGetWidgetWithFocus(void); * * This provides a way to 'subclass' an existing widget. By providing a second * hook that only handles certain widget messages, you can customize or extend - * widget behavior. + * widget behavior. * */ WIDGET_API void XPAddWidgetCallback( - XPWidgetID inWidget, - XPWidgetFunc_t inNewCallback); + XPWidgetID inWidget, + XPWidgetFunc_t inNewCallback); /* * XPGetWidgetClassFunc * * Given a widget class, this function returns the callbacks that power that - * widget class. + * widget class. * */ WIDGET_API XPWidgetFunc_t XPGetWidgetClassFunc( - XPWidgetClass inWidgetClass); + XPWidgetClass inWidgetClass); #ifdef __cplusplus } diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMCamera.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMCamera.h old mode 100755 new mode 100644 index db930ef..8b88d28 --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMCamera.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMCamera.h @@ -2,8 +2,8 @@ #define _XPLMCamera_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -30,7 +30,7 @@ * looking along for roll. * * You control the camera either either until the user selects a new view or - * permanently (the later being similar to how UDP camera control works). You + * permanently (the latter being similar to how UDP camera control works). You * control the camera by registering a callback per frame from which you * calculate the new camera positions. This guarantees smooth camera motion. * @@ -41,7 +41,7 @@ * not needed; simply update the datarefs for the pilot's head position. * * For custom exterior cameras, set the camera's mode to an external view - * first to get correct sound and 2-d panel behavior. + * first to get correct sound and 2-d panel behavior. * */ @@ -59,15 +59,15 @@ extern "C" { * XPLMCameraControlDuration * * This enumeration states how long you want to retain control of the camera. - * You can retain it indefinitely or until the user selects a new view. + * You can retain it indefinitely or until the user selects a new view. * */ enum { - /* Control the camera until the user picks a new view. */ + /* Control the camera until the user picks a new view. */ xplm_ControlCameraUntilViewChanges = 1, - /* Control the camera until your plugin is disabled or another plugin forcably* - * takes control. */ + /* Control the camera until your plugin is disabled or another plugin forcibly* + * takes control. */ xplm_ControlCameraForever = 2, @@ -78,11 +78,11 @@ typedef int XPLMCameraControlDuration; * XPLMCameraPosition_t * * This structure contains a full specification of the camera. X, Y, and Z are - * the camera's position in OpenGL coordiantes; pitch, roll, and yaw are + * the camera's position in OpenGL coordinates; pitch, roll, and yaw are * rotations from a camera facing flat north in degrees. Positive pitch means * nose up, positive roll means roll right, and positive yaw means yaw right, * all in degrees. Zoom is a zoom factor, with 1.0 meaning normal zoom and 2.0 - * magnifying by 2x (objects appear larger). + * magnifying by 2x (objects appear larger). * */ typedef struct { @@ -99,33 +99,33 @@ typedef struct { * XPLMCameraControl_f * * You use an XPLMCameraControl function to provide continuous control over - * the camera. You are passed in a structure in which to put the new camera + * the camera. You are passed a structure in which to put the new camera * position; modify it and return 1 to reposition the camera. Return 0 to * surrender control of the camera; camera control will be handled by X-Plane * on this draw loop. The contents of the structure as you are called are * undefined. * * If X-Plane is taking camera control away from you, this function will be - * called with inIsLosingControl set to 1 and ioCameraPosition NULL. + * called with inIsLosingControl set to 1 and ioCameraPosition NULL. * */ typedef int (* XPLMCameraControl_f)( - XPLMCameraPosition_t * outCameraPosition, /* Can be NULL */ - int inIsLosingControl, - void * inRefcon); + XPLMCameraPosition_t * outCameraPosition, /* Can be NULL */ + int inIsLosingControl, + void * inRefcon); /* * XPLMControlCamera * * This function repositions the camera on the next drawing cycle. You must * pass a non-null control function. Specify in inHowLong how long you'd like - * control (indefinitely or until a new view mode is set by the user). + * control (indefinitely or until a new view mode is set by the user). * */ XPLM_API void XPLMControlCamera( - XPLMCameraControlDuration inHowLong, - XPLMCameraControl_f inControlFunc, - void * inRefcon); + XPLMCameraControlDuration inHowLong, + XPLMCameraControl_f inControlFunc, + void * inRefcon); /* * XPLMDontControlCamera @@ -135,7 +135,7 @@ XPLM_API void XPLMControlCamera( * X-Plane will control the camera on the next cycle. * * For maximum compatibility you should not use this routine unless you are in - * posession of the camera. + * posession of the camera. * */ XPLM_API void XPLMDontControlCamera(void); @@ -145,7 +145,7 @@ XPLM_API void XPLMDontControlCamera(void); * * This routine returns 1 if the camera is being controlled, zero if it is * not. If it is and you pass in a pointer to a camera control duration, the - * current control duration will be returned. + * current control duration will be returned. * */ XPLM_API int XPLMIsCameraBeingControlled( @@ -154,11 +154,11 @@ XPLM_API int XPLMIsCameraBeingControlled( /* * XPLMReadCameraPosition * - * This function reads the current camera position. + * This function reads the current camera position. * */ XPLM_API void XPLMReadCameraPosition( - XPLMCameraPosition_t * outCameraPosition); + XPLMCameraPosition_t * outCameraPosition); #ifdef __cplusplus } diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMDataAccess.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMDataAccess.h old mode 100755 new mode 100644 index d8d1418..22c28ee --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMDataAccess.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMDataAccess.h @@ -2,8 +2,8 @@ #define _XPLMDataAccess_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -27,7 +27,7 @@ * -------------- * * Data references are identified by verbose, permanent string names; by - * convention these names use path separates to form a hierarchy of datarefs, + * convention these names use path separators to form a hierarchy of datarefs, * e.g. (sim/cockpit/radios/nav1_freq_hz). The actual opaque numeric value of * the data reference, as returned by the XPLM API, is implementation defined * and changes each time X-Plane is launched; therefore you need to look up @@ -39,22 +39,23 @@ * Reading and writing data references is relatively fast (the cost is * equivalent to two function calls through function pointers). * - * X-Plane publishes over 4000 datarefs; a complete list may be found in the - * reference section of the SDK online documentation (from the SDK home page, - * choose Documentation). + * X-Plane publishes many thousands of datarefs; a complete list may be found + * in the reference section of the SDK online documentation (from the SDK home + * page, choose Documentation) and the Resources/plugins/DataRefs.txt file. * * Dataref Types * ------------- * * A note on typing: you must know the correct data type to read and write. * APIs are provided for reading and writing data in a number of ways. You can - * also double check the data type for a data ref. Automatic type conversion - * is not done for you. + * also double check the data type for a dataref. Automatic type conversion is + * not done for you. * * Dataref types are a set, e.g. a dataref can be more than one type. When * this happens, you can choose which API you want to use to read. For - * example, it is not uncommon for a dataref to be of type float and double. - * This means you can use either XPLMGetDatad or XPLMGetDataf to read it. + * example, it is not uncommon for a dataref to be available both as float and + * double. This means you can use either XPLMGetDatad or XPLMGetDataf to read + * it. * * Creating New Datarefs * --------------------- @@ -69,15 +70,33 @@ * A note for plugins sharing data with other plugins: the load order of * plugins is not guaranteed. To make sure that every plugin publishing data * has published their data references before other plugins try to subscribe, - * publish your data references in your start routine but resolve them the - * first time your 'enable' routine is called, or the first time they are - * needed in code. + * publish your data references in your start routine but resolve others' + * datarefs the first time your 'enable' routine is called, or the first time + * they are needed in code. * * When a plugin that created a dataref is unloaded, it becomes "orphaned". * The dataref handle continues to be usable, but the dataref is not writable, * and reading it will always return 0 (or 0 items for arrays). If the plugin * is reloaded and re-registers the dataref, the handle becomes un-orphaned - * and works again. + * and works again. + * + * Introspection: Finding All Datarefs + * ----------------------------------- + * + * In the XPLM400 API, it is possible for a plugin to iterate the entire set + * of datarefs. This functionality is meant only for "tool" add-ons, like + * dataref browsers; normally all add-ons should find the dataref they want + * by name. + * + * Because datarefs are never destroyed during a run of the simulator (they + * are orphaned when their providing plugin goes away until a new one + * re-registers the dataref), the set of datarefs for a given run of X-Plane + * can be enumerated by index. A plugin that wants to find all new datarefs + * can use XPLMCountDataRefs to find the number of datarefs and iterate only + * the ones with higher index numbers than the last iteration. + * + * Plugins can also receive notifications when datarefs are registered; see + * the XPLMPlugin feature-enable API for more details. * */ @@ -92,7 +111,7 @@ extern "C" { ***************************************************************************/ /* * These routines allow you to access data from within X-Plane and sometimes - * modify it. + * modify it. * */ @@ -100,10 +119,10 @@ extern "C" { /* * XPLMDataRef * - * A data ref is an opaque handle to data provided by the simulator or another + * A dataref is an opaque handle to data provided by the simulator or another * plugin. It uniquely identifies one variable (or array of variables) over * the lifetime of your plugin. You never hard code these values; you always - * get them from XPLMFindDataRef. + * get them from XPLMFindDataRef. * */ typedef void * XPLMDataRef; @@ -118,66 +137,128 @@ typedef void * XPLMDataRef; * * Data types each take a bit field; it is legal to have a single dataref be * more than one type of data. Whe this happens, you can pick any matching - * get/set API. + * get/set API. * */ enum { - /* Data of a type the current XPLM doesn't do. */ + /* Data of a type the current XPLM doesn't do. */ xplmType_Unknown = 0, - /* A single 4-byte integer, native endian. */ + /* A single 4-byte integer, native endian. */ xplmType_Int = 1, - /* A single 4-byte float, native endian. */ + /* A single 4-byte float, native endian. */ xplmType_Float = 2, - /* A single 8-byte double, native endian. */ + /* A single 8-byte double, native endian. */ xplmType_Double = 4, - /* An array of 4-byte floats, native endian. */ + /* An array of 4-byte floats, native endian. */ xplmType_FloatArray = 8, - /* An array of 4-byte integers, native endian. */ + /* An array of 4-byte integers, native endian. */ xplmType_IntArray = 16, - /* A variable block of data. */ + /* A variable block of data. */ xplmType_Data = 32, }; typedef int XPLMDataTypeID; +#if defined(XPLM400) +/* + * XPLMCountDataRefs + * + * Returns the total number of datarefs that have been registered in X-Plane. + * + */ +XPLM_API int XPLMCountDataRefs(void); +#endif /* XPLM400 */ + +#if defined(XPLM400) +/* + * XPLMGetDataRefsByIndex + * + * Given an offset and count, this function will return an array of + * XPLMDataRefs in that range. The offset/count idiom is useful for things + * like pagination. + * + */ +XPLM_API void XPLMGetDataRefsByIndex( + int offset, + int count, + XPLMDataRef * outDataRefs); +#endif /* XPLM400 */ + +#if defined(XPLM400) +/* + * XPLMDataRefInfo_t + * + * The XPLMDataRefInfo_t structure contains all of the information about a + * single data ref. The structure can 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 XPLMGetDatarefInfo() of the SDK version you compiled * + * against; should always be set to sizeof(XPLMDataRefInfo_t) */ + int structSize; + /* The full name/path of the data ref */ + const char * name; + XPLMDataTypeID type; + /* TRUE if the data ref permits writing to it. FALSE if it's read-only. */ + int writable; + /* The handle to the plugin that registered this dataref. */ + XPLMPluginID owner; +} XPLMDataRefInfo_t; +#endif /* XPLM400 */ + +#if defined(XPLM400) +/* + * XPLMGetDataRefInfo + * + * Give a data ref, this routine returns a populated struct containing the + * available information about the dataref. + * + */ +XPLM_API void XPLMGetDataRefInfo( + XPLMDataRef inDataRef, + XPLMDataRefInfo_t * outInfo); +#endif /* XPLM400 */ + /* * XPLMFindDataRef * - * Given a c-style string that names the data ref, this routine looks up the + * Given a C-style string that names the dataref, this routine looks up the * actual opaque XPLMDataRef that you use to read and write the data. The * string names for datarefs are published on the X-Plane SDK web site. * - * This function returns NULL if the data ref cannot be found. + * This function returns NULL if the dataref cannot be found. * * NOTE: this function is relatively expensive; save the XPLMDataRef this - * function returns for future use. Do not look up your data ref by string - * every time you need to read or write it. + * function returns for future use. Do not look up your dataref by string + * every time you need to read or write it. * */ XPLM_API XPLMDataRef XPLMFindDataRef( - const char * inDataRefName); + const char * inDataRefName); /* * XPLMCanWriteDataRef * - * Given a data ref, this routine returns true if you can successfully set the + * Given a dataref, this routine returns true if you can successfully set the * data, false otherwise. Some datarefs are read-only. * * NOTE: even if a dataref is marked writable, it may not act writable. This * can happen for datarefs that X-Plane writes to on every frame of * simulation. In some cases, the dataref is writable but you have to set a - * separate "override" dataref to 1 to stop X-Plane from writing it. + * separate "override" dataref to 1 to stop X-Plane from writing it. * */ XPLM_API int XPLMCanWriteDataRef( - XPLMDataRef inDataRef); + XPLMDataRef inDataRef); /* * XPLMIsDataRefGood @@ -190,23 +271,23 @@ XPLM_API int XPLMCanWriteDataRef( * complete plugin reload (in which case your plugin is reloaded anyway). * Orphaned datarefs can be safely read and return 0. Therefore you never need * to call XPLMIsDataRefGood to 'check' the safety of a dataref. - * (XPLMIsDatarefGood performs some slow checking of the handle validity, so - * it has a perormance cost.) + * (XPLMIsDataRefGood performs some slow checking of the handle validity, so + * it has a perormance cost.) * */ XPLM_API int XPLMIsDataRefGood( - XPLMDataRef inDataRef); + XPLMDataRef inDataRef); /* * XPLMGetDataRefTypes * - * This routine returns the types of the data ref for accessor use. If a data - * ref is available in multiple data types, the bit-wise OR of these types - * will be returned. + * This routine returns the types of the dataref for accessor use. If a + * dataref is available in multiple data types, the bit-wise OR of these types + * will be returned. * */ XPLM_API XPLMDataTypeID XPLMGetDataRefTypes( - XPLMDataRef inDataRef); + XPLMDataRef inDataRef); /*************************************************************************** * DATA ACCESSORS @@ -215,10 +296,10 @@ XPLM_API XPLMDataTypeID XPLMGetDataRefTypes( * These routines read and write the data references. For each supported data * type there is a reader and a writer. * - * If the data ref is orphaned or the plugin that provides it is disabled or + * If the dataref is orphaned, the plugin that provides it is disabled or * there is a type mismatch, the functions that read data will return 0 as a * default value or not modify the passed in memory. The plugins that write - * data will not write under these circumstances or if the data ref is + * data will not write under these circumstances or if the dataref is * read-only. * * NOTE: to keep the overhead of reading datarefs low, these routines do not @@ -227,7 +308,8 @@ XPLM_API XPLMDataTypeID XPLMGetDataRefTypes( * * For array-style datarefs, you specify the number of items to read/write and * the offset into the array; the actual number of items read or written is - * returned. This may be less to prevent an array-out-of-bounds error. + * returned. This may be less the number requested to prevent an + * array-out-of-bounds error. * */ @@ -235,70 +317,70 @@ XPLM_API XPLMDataTypeID XPLMGetDataRefTypes( /* * XPLMGetDatai * - * Read an integer data ref and return its value. The return value is the - * dataref value or 0 if the dataref is NULL or the plugin is disabled. + * Read an integer dataref and return its value. The return value is the + * dataref value or 0 if the dataref is NULL or the plugin is disabled. * */ XPLM_API int XPLMGetDatai( - XPLMDataRef inDataRef); + XPLMDataRef inDataRef); /* * XPLMSetDatai * - * Write a new value to an integer data ref. This routine is a no-op if the + * Write a new value to an integer dataref. This routine is a no-op if the * plugin publishing the dataref is disabled, the dataref is NULL, or the - * dataref is not writable. + * dataref is not writable. * */ XPLM_API void XPLMSetDatai( - XPLMDataRef inDataRef, - int inValue); + XPLMDataRef inDataRef, + int inValue); /* * XPLMGetDataf * * Read a single precision floating point dataref and return its value. The * return value is the dataref value or 0.0 if the dataref is NULL or the - * plugin is disabled. + * plugin is disabled. * */ XPLM_API float XPLMGetDataf( - XPLMDataRef inDataRef); + XPLMDataRef inDataRef); /* * XPLMSetDataf * - * Write a new value to a single precision floating point data ref. This + * Write a new value to a single precision floating point dataref. This * routine is a no-op if the plugin publishing the dataref is disabled, the - * dataref is NULL, or the dataref is not writable. + * dataref is NULL, or the dataref is not writable. * */ XPLM_API void XPLMSetDataf( - XPLMDataRef inDataRef, - float inValue); + XPLMDataRef inDataRef, + float inValue); /* * XPLMGetDatad * * Read a double precision floating point dataref and return its value. The * return value is the dataref value or 0.0 if the dataref is NULL or the - * plugin is disabled. + * plugin is disabled. * */ XPLM_API double XPLMGetDatad( - XPLMDataRef inDataRef); + XPLMDataRef inDataRef); /* * XPLMSetDatad * - * Write a new value to a double precision floating point data ref. This + * Write a new value to a double precision floating point dataref. This * routine is a no-op if the plugin publishing the dataref is disabled, the - * dataref is NULL, or the dataref is not writable. + * dataref is NULL, or the dataref is not writable. * */ XPLM_API void XPLMSetDatad( - XPLMDataRef inDataRef, - double inValue); + XPLMDataRef inDataRef, + double inValue); /* * XPLMGetDatavi @@ -314,40 +396,40 @@ XPLM_API void XPLMSetDatad( * Note: the semantics of array datarefs are entirely implemented by the * plugin (or X-Plane) that provides the dataref, not the SDK itself; the * above description is how these datarefs are intended to work, but a rogue - * plugin may have different behavior. + * plugin may have different behavior. * */ XPLM_API int XPLMGetDatavi( - XPLMDataRef inDataRef, - int * outValues, /* Can be NULL */ - int inOffset, - int inMax); + XPLMDataRef inDataRef, + int * outValues, /* Can be NULL */ + int inOffset, + int inMax); /* * XPLMSetDatavi * * Write part or all of an integer array dataref. The values passed by * inValues are written into the dataref starting at inOffset. Up to inCount - * values are written; however if the values would write "off the end" of the + * values are written; however if the values would write past the end of the * dataref array, then fewer values are written. * * Note: the semantics of array datarefs are entirely implemented by the * plugin (or X-Plane) that provides the dataref, not the SDK itself; the * above description is how these datarefs are intended to work, but a rogue - * plugin may have different behavior. + * plugin may have different behavior. * */ XPLM_API void XPLMSetDatavi( - XPLMDataRef inDataRef, - int * inValues, - int inoffset, - int inCount); + XPLMDataRef inDataRef, + int * inValues, + int inoffset, + int inCount); /* * XPLMGetDatavf * * Read a part of a single precision floating point array dataref. If you pass - * NULL for outVaules, the routine will return the size of the array, ignoring + * NULL for outValues, the routine will return the size of the array, ignoring * inOffset and inMax. * * If outValues is not NULL, then up to inMax values are copied from the @@ -358,14 +440,14 @@ XPLM_API void XPLMSetDatavi( * Note: the semantics of array datarefs are entirely implemented by the * plugin (or X-Plane) that provides the dataref, not the SDK itself; the * above description is how these datarefs are intended to work, but a rogue - * plugin may have different behavior. + * plugin may have different behavior. * */ XPLM_API int XPLMGetDatavf( - XPLMDataRef inDataRef, - float * outValues, /* Can be NULL */ - int inOffset, - int inMax); + XPLMDataRef inDataRef, + float * outValues, /* Can be NULL */ + int inOffset, + int inMax); /* * XPLMSetDatavf @@ -373,24 +455,24 @@ XPLM_API int XPLMGetDatavf( * Write part or all of a single precision floating point array dataref. The * values passed by inValues are written into the dataref starting at * inOffset. Up to inCount values are written; however if the values would - * write "off the end" of the dataref array, then fewer values are written. + * write past the end of the dataref array, then fewer values are written. * * Note: the semantics of array datarefs are entirely implemented by the * plugin (or X-Plane) that provides the dataref, not the SDK itself; the * above description is how these datarefs are intended to work, but a rogue - * plugin may have different behavior. + * plugin may have different behavior. * */ XPLM_API void XPLMSetDatavf( - XPLMDataRef inDataRef, - float * inValues, - int inoffset, - int inCount); + XPLMDataRef inDataRef, + float * inValues, + int inoffset, + int inCount); /* * XPLMGetDatab * - * Read a part of a byte array dataref. If you pass NULL for outVaules, the + * Read a part of a byte array dataref. If you pass NULL for outValues, the * routine will return the size of the array, ignoring inOffset and inMax. * * If outValues is not NULL, then up to inMax values are copied from the @@ -401,14 +483,14 @@ XPLM_API void XPLMSetDatavf( * Note: the semantics of array datarefs are entirely implemented by the * plugin (or X-Plane) that provides the dataref, not the SDK itself; the * above description is how these datarefs are intended to work, but a rogue - * plugin may have different behavior. + * plugin may have different behavior. * */ XPLM_API int XPLMGetDatab( - XPLMDataRef inDataRef, - void * outValue, /* Can be NULL */ - int inOffset, - int inMaxBytes); + XPLMDataRef inDataRef, + void * outValue, /* Can be NULL */ + int inOffset, + int inMaxBytes); /* * XPLMSetDatab @@ -421,14 +503,14 @@ XPLM_API int XPLMGetDatab( * Note: the semantics of array datarefs are entirely implemented by the * plugin (or X-Plane) that provides the dataref, not the SDK itself; the * above description is how these datarefs are intended to work, but a rogue - * plugin may have different behavior. + * plugin may have different behavior. * */ XPLM_API void XPLMSetDatab( - XPLMDataRef inDataRef, - void * inValue, - int inOffset, - int inLength); + XPLMDataRef inDataRef, + void * inValue, + int inOffset, + int inLength); /*************************************************************************** * PUBLISHING YOUR PLUGIN'S DATA @@ -448,7 +530,7 @@ XPLM_API void XPLMSetDatab( * Important: you must pick a prefix for your datarefs other than "sim/" - * this prefix is reserved for X-Plane. The X-Plane SDK website contains a * registry where authors can select a unique first word for dataref names, to - * prevent dataref collisions between plugins. + * prevent dataref collisions between plugins. * */ @@ -463,113 +545,113 @@ XPLM_API void XPLMSetDatab( * pointer you pass in your register routine; you can use it to locate plugin * variables, etc. * - * The semantics of your callbacks are the same as the dataref accessor above + * The semantics of your callbacks are the same as the dataref accessors above * - basically routines like XPLMGetDatai are just pass-throughs from a caller * to your plugin. Be particularly mindful in implementing array dataref * read-write accessors; you are responsible for avoiding overruns, supporting - * offset read/writes, and handling a read with a NULL buffer. + * offset read/writes, and handling a read with a NULL buffer. * */ typedef int (* XPLMGetDatai_f)( - void * inRefcon); + void * inRefcon); /* - * XPLMSetDatai_f + * XPLMSetDatai_f * */ typedef void (* XPLMSetDatai_f)( - void * inRefcon, - int inValue); + void * inRefcon, + int inValue); /* - * XPLMGetDataf_f + * XPLMGetDataf_f * */ typedef float (* XPLMGetDataf_f)( - void * inRefcon); + void * inRefcon); /* - * XPLMSetDataf_f + * XPLMSetDataf_f * */ typedef void (* XPLMSetDataf_f)( - void * inRefcon, - float inValue); + void * inRefcon, + float inValue); /* - * XPLMGetDatad_f + * XPLMGetDatad_f * */ typedef double (* XPLMGetDatad_f)( - void * inRefcon); + void * inRefcon); /* - * XPLMSetDatad_f + * XPLMSetDatad_f * */ typedef void (* XPLMSetDatad_f)( - void * inRefcon, - double inValue); + void * inRefcon, + double inValue); /* - * XPLMGetDatavi_f + * XPLMGetDatavi_f * */ typedef int (* XPLMGetDatavi_f)( - void * inRefcon, - int * outValues, /* Can be NULL */ - int inOffset, - int inMax); + void * inRefcon, + int * outValues, /* Can be NULL */ + int inOffset, + int inMax); /* - * XPLMSetDatavi_f + * XPLMSetDatavi_f * */ typedef void (* XPLMSetDatavi_f)( - void * inRefcon, - int * inValues, - int inOffset, - int inCount); + void * inRefcon, + int * inValues, + int inOffset, + int inCount); /* - * XPLMGetDatavf_f + * XPLMGetDatavf_f * */ typedef int (* XPLMGetDatavf_f)( - void * inRefcon, - float * outValues, /* Can be NULL */ - int inOffset, - int inMax); + void * inRefcon, + float * outValues, /* Can be NULL */ + int inOffset, + int inMax); /* - * XPLMSetDatavf_f + * XPLMSetDatavf_f * */ typedef void (* XPLMSetDatavf_f)( - void * inRefcon, - float * inValues, - int inOffset, - int inCount); + void * inRefcon, + float * inValues, + int inOffset, + int inCount); /* - * XPLMGetDatab_f + * XPLMGetDatab_f * */ typedef int (* XPLMGetDatab_f)( - void * inRefcon, - void * outValue, /* Can be NULL */ - int inOffset, - int inMaxLength); + void * inRefcon, + void * outValue, /* Can be NULL */ + int inOffset, + int inMaxLength); /* - * XPLMSetDatab_f + * XPLMSetDatab_f * */ typedef void (* XPLMSetDatab_f)( - void * inRefcon, - void * inValue, - int inOffset, - int inLength); + void * inRefcon, + void * inValue, + int inOffset, + int inLength); /* * XPLMRegisterDataAccessor @@ -581,40 +663,40 @@ typedef void (* XPLMSetDatab_f)( * necessary. Pass NULL for data types you do not support or write accessors * if you are read-only. * - * You are returned a data ref for the new item of data created. You can use - * this data ref to unregister your data later or read or write from it. + * You are returned a dataref for the new item of data created. You can use + * this dataref to unregister your data later or read or write from it. * */ XPLM_API XPLMDataRef XPLMRegisterDataAccessor( - const char * inDataName, - XPLMDataTypeID inDataType, - int inIsWritable, - XPLMGetDatai_f inReadInt, - XPLMSetDatai_f inWriteInt, - XPLMGetDataf_f inReadFloat, - XPLMSetDataf_f inWriteFloat, - XPLMGetDatad_f inReadDouble, - XPLMSetDatad_f inWriteDouble, - XPLMGetDatavi_f inReadIntArray, - XPLMSetDatavi_f inWriteIntArray, - XPLMGetDatavf_f inReadFloatArray, - XPLMSetDatavf_f inWriteFloatArray, - XPLMGetDatab_f inReadData, - XPLMSetDatab_f inWriteData, - void * inReadRefcon, - void * inWriteRefcon); + const char * inDataName, + XPLMDataTypeID inDataType, + int inIsWritable, + XPLMGetDatai_f inReadInt, + XPLMSetDatai_f inWriteInt, + XPLMGetDataf_f inReadFloat, + XPLMSetDataf_f inWriteFloat, + XPLMGetDatad_f inReadDouble, + XPLMSetDatad_f inWriteDouble, + XPLMGetDatavi_f inReadIntArray, + XPLMSetDatavi_f inWriteIntArray, + XPLMGetDatavf_f inReadFloatArray, + XPLMSetDatavf_f inWriteFloatArray, + XPLMGetDatab_f inReadData, + XPLMSetDatab_f inWriteData, + void * inReadRefcon, + void * inWriteRefcon); /* * XPLMUnregisterDataAccessor * * Use this routine to unregister any data accessors you may have registered. - * You unregister a data ref by the XPLMDataRef you get back from - * registration. Once you unregister a data ref, your function pointer will - * not be called anymore. + * You unregister a dataref by the XPLMDataRef you get back from registration. + * Once you unregister a dataref, your function pointer will not be called + * anymore. * */ XPLM_API void XPLMUnregisterDataAccessor( - XPLMDataRef inDataRef); + XPLMDataRef inDataRef); /*************************************************************************** * SHARING DATA BETWEEN MULTIPLE PLUGINS @@ -622,8 +704,8 @@ XPLM_API void XPLMUnregisterDataAccessor( /* * The data reference registration APIs from the previous section allow a * plugin to publish data in a one-owner manner; the plugin that publishes the - * data reference owns the real memory that the data ref uses. This is - * satisfactory for most cases, but there are also cases where plugnis need to + * data reference owns the real memory that the dataref uses. This is + * satisfactory for most cases, but there are also cases where plugins need to * share actual data. * * With a shared data reference, no one plugin owns the actual memory for the @@ -651,7 +733,7 @@ XPLM_API void XPLMUnregisterDataAccessor( * Shared data references solve two problems: if you need to have a data * reference used by several plugins but do not know which plugins will be * installed, or if all plugins sharing data need to be notified when that - * data is changed, use shared data references. + * data is changed, use shared data references. * */ @@ -662,17 +744,17 @@ XPLM_API void XPLMUnregisterDataAccessor( * An XPLMDataChanged_f is a callback that the XPLM calls whenever any other * plug-in modifies shared data. A refcon you provide is passed back to help * identify which data is being changed. In response, you may want to call one - * of the XPLMGetDataxxx routines to find the new value of the data. + * of the XPLMGetDataxxx routines to find the new value of the data. * */ typedef void (* XPLMDataChanged_f)( - void * inRefcon); + void * inRefcon); /* * XPLMShareData * * This routine connects a plug-in to shared data, creating the shared data if - * necessary. inDataName is a standard path for the data ref, and inDataType + * necessary. inDataName is a standard path for the dataref, and inDataType * specifies the type. This function will create the data if it does not * exist. If the data already exists but the type does not match, an error is * returned, so it is important that plug-in authors collaborate to establish @@ -685,14 +767,14 @@ typedef void (* XPLMDataChanged_f)( * the plug-in does not use global variables. * * A one is returned for successfully creating or finding the shared data; a - * zero if the data already exists but is of the wrong type. + * zero if the data already exists but is of the wrong type. * */ XPLM_API int XPLMShareData( - const char * inDataName, - XPLMDataTypeID inDataType, - XPLMDataChanged_f inNotificationFunc, - void * inNotificationRefcon); + const char * inDataName, + XPLMDataTypeID inDataType, + XPLMDataChanged_f inNotificationFunc, + void * inNotificationRefcon); /* * XPLMUnshareData @@ -700,14 +782,14 @@ XPLM_API int XPLMShareData( * This routine removes your notification function for shared data. Call it * when done with the data to stop receiving change notifications. Arguments * must match XPLMShareData. The actual memory will not necessarily be freed, - * since other plug-ins could be using it. + * since other plug-ins could be using it. * */ XPLM_API int XPLMUnshareData( - const char * inDataName, - XPLMDataTypeID inDataType, - XPLMDataChanged_f inNotificationFunc, - void * inNotificationRefcon); + const char * inDataName, + XPLMDataTypeID inDataType, + XPLMDataChanged_f inNotificationFunc, + void * inNotificationRefcon); #ifdef __cplusplus } diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMDefs.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMDefs.h old mode 100755 new mode 100644 index bb1fe2f..7ad9b89 --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMDefs.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMDefs.h @@ -2,8 +2,8 @@ #define _XPLMDefs_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -14,11 +14,12 @@ * This file is contains the cross-platform and basic definitions for the * X-Plane SDK. * - * The preprocessor macros APL and IBM must be defined to specify the - * compilation target; define APL to 1 and IBM 0 to compile on Macintosh and - * APL to 0 and IBM to 1 for Windows. You must specify these macro definitions - * before including XPLMDefs.h or any other XPLM headers. You can do this - * using the -D command line option or a preprocessor header. + * The preprocessor macros APL, LIN and IBM must be defined to specify the + * compilation target; define APL to 1 to compile on Mac, IBM to 1 to compile + * on Windows and LIN to 1 to compile on Linux. Only one compilation target + * may be used at a time. You must specify these macro definitions before + * including XPLMDefs.h or any other XPLM headers. You can do this using the + * -D command line option or a preprocessor header. * */ @@ -29,9 +30,8 @@ extern "C" { #if IBM #include -#else -#include #endif +#include /*************************************************************************** * DLL Definitions ***************************************************************************/ @@ -42,7 +42,7 @@ extern "C" { * You can prefix your five required callbacks with the PLUGIN_API macro to * declare them as exported C functions. The XPLM_API macro identifies * functions that are provided to you via the plugin SDK. (Link against - * XPLM.lib to use these functions.) + * XPLM.lib to use these functions.) * */ @@ -125,7 +125,7 @@ extern "C" { * GLOBAL DEFINITIONS ***************************************************************************/ /* - * These definitions are used in all parts of the SDK. + * These definitions are used in all parts of the SDK. * */ @@ -141,9 +141,9 @@ extern "C" { * reloading of plugins that are part of the user's aircraft. * * For persistent identification of plug-ins, use XPLMFindPluginBySignature in - * XPLMUtiltiies.h + * XPLMUtiltiies.h . * - * -1 indicates no plug-in. + * -1 indicates no plug-in. * */ typedef int XPLMPluginID; @@ -154,8 +154,8 @@ typedef int XPLMPluginID; /* X-Plane itself */ #define XPLM_PLUGIN_XPLANE (0) -/* The current XPLM revision is 3.03 (303). */ -#define kXPLM_Version (303) +/* The current XPLM revision is 4.1.1 (411). */ +#define kXPLM_Version (411) /* * XPLMKeyFlags @@ -163,31 +163,31 @@ typedef int XPLMPluginID; * These bitfields define modifier keys in a platform independent way. When a * key is pressed, a series of messages are sent to your plugin. The down * flag is set in the first of these messages, and the up flag in the last. - * While the key is held down, messages are sent with neither to indicate that - * the key is being held down as a repeated character. + * While the key is held down, messages are sent with neither flag set to + * indicate that the key is being held down as a repeated character. * * The control flag is mapped to the control flag on Macintosh and PC. * Generally X-Plane uses the control key and not the command key on * Macintosh, providing a consistent interface across platforms that does not * necessarily match the Macintosh user interface guidelines. There is not * yet a way for plugins to access the Macintosh control keys without using - * #ifdefed code. + * #ifdefed code. * */ enum { - /* The shift key is down */ + /* The shift key is down */ xplm_ShiftFlag = 1, - /* The option or alt key is down */ + /* The option or alt key is down */ xplm_OptionAltFlag = 2, - /* The control key is down* */ + /* The control key is down */ xplm_ControlFlag = 4, - /* The key is being pressed down */ + /* The key is being pressed down */ xplm_DownFlag = 8, - /* The key is being released */ + /* The key is being released */ xplm_UpFlag = 16, @@ -207,7 +207,7 @@ typedef int XPLMKeyFlags; * ASCII key codes take into account modifier keys; shift keys will affect * capitals and punctuation; control key combinations may have no vaild ASCII * and produce NULL. To detect control-key combinations, use virtual key - * codes, not ASCII keys. + * codes, not ASCII keys. * */ @@ -276,7 +276,7 @@ typedef int XPLMKeyFlags; * with users' abilities to use the native X-Plane key bindings. * 2. Some keys that do not exist on both Mac and PC keyboards are removed. * 3. Do not assume that the values of these keystrokes are interchangeable - * with MS v-keys. + * with MS v-keys. * */ @@ -507,6 +507,63 @@ typedef int XPLMKeyFlags; #define XPLM_VK_NUMPAD_EQ 0xBD +/* + * XPLMFixedString150_t + * + * A container for a fixed-size string buffer of 150 characters. + * + */ +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/Example/Lib/SDK/CHeaders/XPLM/XPLMDisplay.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMDisplay.h old mode 100755 new mode 100644 index 48c7a70..ba88487 --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMDisplay.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMDisplay.h @@ -2,8 +2,8 @@ #define _XPLMDisplay_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -51,10 +51,19 @@ * In contrast to direct drawing, window drawing provides a higher level * functionality. With window drawing, you create a 2-D window that takes up a * portion of the screen. Window drawing is always two dimensional. Window - * drawing is front-to-back controlled; you can specify that you want your - * window to be brought on top, and other plug-ins may put their window on top - * of you. Window drawing also allows you to sign up for key presses and - * receive mouse clicks. + * drawing is depth controlled; you can specify that you want your window to + * be brought on top, and other plug-ins may put their window on top of you. + * Window drawing also allows you to sign up for key presses and receive mouse + * clicks. + * + * Drawing into the screen of an avionics device, like a GPS or a Primary + * Flight Display, is a way to extend or replace X-Plane's avionics. Most + * screens can be displayed both in a 3d cockpit or + * 2d panel, and also in separate popup windows. By installing drawing + * callbacks for a certain avionics device, you can change or extend the + * appearance of that device regardless whether it's installed in a 3d + * cockpit or used in a separate display for home cockpits because you leave + * the window managing to X-Plane. * * There are three ways to get keystrokes: * @@ -75,7 +84,7 @@ * Hot keys can be remapped by other plug-ins. As a plug-in, you don't * have to worry about what your hot key ends up mapped to; other plug-ins * may provide a UI for remapping keystrokes. So hotkeys allow a user to - * resolve conflicts and customize keystrokes. + * resolve conflicts and customize keystrokes. * */ @@ -100,7 +109,7 @@ extern "C" { * Note that all APIs in this section are deprecated, and will likely be * removed during the X-Plane 11 run as part of the transition to * Vulkan/Metal/etc. See the XPLMInstance API for future-proof drawing of 3-D - * objects. + * objects. * */ @@ -128,80 +137,80 @@ extern "C" { * **WARNING**: As X-Plane's scenery evolves, some drawing phases may cease to * exist and new ones may be invented. If you need a particularly specific * use of these codes, consult Austin and/or be prepared to revise your code - * as X-Plane evolves. + * as X-Plane evolves. * */ enum { #if defined(XPLM_DEPRECATED) - /* Deprecated as of XPLM302. This is the earliest point at which you can draw * - * in 3-d. */ + /* Deprecated as of XPLM302. This is the earliest point at which you can draw * + * in 3-d. */ xplm_Phase_FirstScene = 0, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated as of XPLM302. Drawing of land and water. */ + /* Deprecated as of XPLM302. Drawing of land and water. */ xplm_Phase_Terrain = 5, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated as of XPLM302. Drawing runways and other airport detail. */ + /* Deprecated as of XPLM302. Drawing runways and other airport detail. */ xplm_Phase_Airports = 10, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated as of XPLM302. Drawing roads, trails, trains, etc. */ + /* Deprecated as of XPLM302. Drawing roads, trails, trains, etc. */ xplm_Phase_Vectors = 15, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated as of XPLM302. 3-d objects (houses, smokestacks, etc. */ + /* Deprecated as of XPLM302. 3-d objects (houses, smokestacks, etc. */ xplm_Phase_Objects = 20, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated as of XPLM302. External views of airplanes, both yours and the * - * AI aircraft. */ + /* Deprecated as of XPLM302. External views of airplanes, both yours and the * + * AI aircraft. */ xplm_Phase_Airplanes = 25, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated as of XPLM302. This is the last point at which you can draw in * - * 3-d. */ + /* Deprecated as of XPLM302. This is the last point at which you can draw in * + * 3-d. */ xplm_Phase_LastScene = 30, #endif /* XPLM_DEPRECATED */ #if defined(XPLM302) - /* A chance to do modern 3D drawing. */ + /* A chance to do modern 3D drawing. */ xplm_Phase_Modern3D = 31, #endif /* XPLM302 */ - /* This is the first phase where you can draw in 2-d. */ + /* This is the first phase where you can draw in 2-d. */ xplm_Phase_FirstCockpit = 35, - /* The non-moving parts of the aircraft panel. */ + /* The non-moving parts of the aircraft panel. */ xplm_Phase_Panel = 40, - /* The moving parts of the aircraft panel. */ + /* The moving parts of the aircraft panel. */ xplm_Phase_Gauges = 45, - /* Floating windows from plugins. */ + /* Floating windows from plugins. */ xplm_Phase_Window = 50, - /* The last chance to draw in 2d. */ + /* The last chance to draw in 2d. */ xplm_Phase_LastCockpit = 55, #if defined(XPLM200) - /* Removed as of XPLM300; Use the full-blown XPLMMap API instead. */ + /* Removed as of XPLM300; Use the full-blown XPLMMap API instead. */ xplm_Phase_LocalMap3D = 100, #endif /* XPLM200 */ #if defined(XPLM200) - /* Removed as of XPLM300; Use the full-blown XPLMMap API instead. */ + /* Removed as of XPLM300; Use the full-blown XPLMMap API instead. */ xplm_Phase_LocalMap2D = 101, #endif /* XPLM200 */ #if defined(XPLM200) - /* Removed as of XPLM300; Use the full-blown XPLMMap API instead. */ + /* Removed as of XPLM300; Use the full-blown XPLMMap API instead. */ xplm_Phase_LocalMapProfile = 102, #endif /* XPLM200 */ @@ -222,13 +231,13 @@ typedef int XPLMDrawingPhase; * * Upon entry the OpenGL context will be correctly set up for you and OpenGL * will be in 'local' coordinates for 3d drawing and panel coordinates for 2d - * drawing. The OpenGL state (texturing, etc.) will be unknown. + * drawing. The OpenGL state (texturing, etc.) will be unknown. * */ typedef int (* XPLMDrawCallback_f)( - XPLMDrawingPhase inPhase, - int inIsBefore, - void * inRefcon); + XPLMDrawingPhase inPhase, + int inIsBefore, + void * inRefcon); /* * XPLMRegisterDrawCallback @@ -242,14 +251,14 @@ typedef int (* XPLMDrawCallback_f)( * * Note that this function will likely be removed during the X-Plane 11 run as * part of the transition to Vulkan/Metal/etc. See the XPLMInstance API for - * future-proof drawing of 3-D objects. + * future-proof drawing of 3-D objects. * */ XPLM_API int XPLMRegisterDrawCallback( - XPLMDrawCallback_f inCallback, - XPLMDrawingPhase inPhase, - int inWantsBefore, - void * inRefcon); + XPLMDrawCallback_f inCallback, + XPLMDrawingPhase inPhase, + int inWantsBefore, + void * inRefcon); /* * XPLMUnregisterDrawCallback @@ -261,15 +270,760 @@ XPLM_API int XPLMRegisterDrawCallback( * * Note that this function will likely be removed during the X-Plane 11 run as * part of the transition to Vulkan/Metal/etc. See the XPLMInstance API for - * future-proof drawing of 3-D objects. + * future-proof drawing of 3-D objects. * */ XPLM_API int XPLMUnregisterDrawCallback( - XPLMDrawCallback_f inCallback, - XPLMDrawingPhase inPhase, - int inWantsBefore, - void * inRefcon); + XPLMDrawCallback_f inCallback, + XPLMDrawingPhase inPhase, + int inWantsBefore, + void * inRefcon); +#if defined(XPLM400) +/*************************************************************************** + * AVIONICS API + ***************************************************************************/ +/* + * 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. + * + */ + + +/* + * XPLMDeviceID + * + * This constant indicates the device we want to override or enhance. We can + * get a callback before or after each item. + * + */ +enum { + /* GNS430, pilot side. */ + xplm_device_GNS430_1 = 0, + + /* GNS430, copilot side. */ + xplm_device_GNS430_2 = 1, + + /* GNS530, pilot side. */ + xplm_device_GNS530_1 = 2, + + /* GNS530, copilot side. */ + xplm_device_GNS530_2 = 3, + + /* generic airliner CDU, pilot side. */ + xplm_device_CDU739_1 = 4, + + /* generic airliner CDU, copilot side. */ + xplm_device_CDU739_2 = 5, + + /* G1000 Primary Flight Display, pilot side. */ + xplm_device_G1000_PFD_1 = 6, + + /* G1000 Multifunction Display. */ + xplm_device_G1000_MFD = 7, + + /* G1000 Primary Flight Display, copilot side. */ + xplm_device_G1000_PFD_2 = 8, + + /* Primus CDU, pilot side. */ + xplm_device_CDU815_1 = 9, + + /* Primus CDU, copilot side. */ + xplm_device_CDU815_2 = 10, + + /* Primus Primary Flight Display, pilot side. */ + xplm_device_Primus_PFD_1 = 11, + + /* Primus Primary Flight Display, copilot side. */ + xplm_device_Primus_PFD_2 = 12, + + /* Primus Multifunction Display, pilot side. */ + xplm_device_Primus_MFD_1 = 13, + + /* Primus Multifunction Display, copilot side. */ + xplm_device_Primus_MFD_2 = 14, + + /* Primus Multifunction Display, central. */ + xplm_device_Primus_MFD_3 = 15, + + /* Primus Radio Management Unit, pilot side. */ + xplm_device_Primus_RMU_1 = 16, + + /* Primus Radio Management Unit, copilot side. */ + xplm_device_Primus_RMU_2 = 17, + + /* Airbus MCDU, pilot side. */ + xplm_device_MCDU_1 = 18, + + /* Airbus MCDU, copilot side. */ + xplm_device_MCDU_2 = 19, + + +}; +typedef int XPLMDeviceID; + +/* + * XPLMAvionicsCallback_f + * + * 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. + * + * 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 int (* XPLMAvionicsCallback_f)( + XPLMDeviceID inDeviceID, + 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()) or create a new device (via + * XPLMCreateAvionicsDevice()), you will specify drawing and mouse callbacks, + * and get back such a handle. + * + */ +typedef void * XPLMAvionicsID; + +/* + * XPLMCustomizeAvionics_t + * + * The XPLMCustomizeAvionics_t structure defines all of the parameters used to + * 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; + /* 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; +} XPLMCustomizeAvionics_t; + +/* + * XPLMRegisterAvionicsCallbacksEx + * + * 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 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/switches/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 ***************************************************************************/ @@ -305,7 +1059,7 @@ XPLM_API int XPLMUnregisterDrawCallback( * window, they have their origin in the lower left of the entire global * desktop space, and the lower left of the main X-Plane window is not * guaranteed to be (0, 0). In both cases, x increases as you move left, and y - * increases as you move up. + * increases as you move up. * */ @@ -316,7 +1070,7 @@ XPLM_API int XPLMUnregisterDrawCallback( * This is an opaque identifier for a window. You use it to control your * window. When you create a window (via either XPLMCreateWindow() or * XPLMCreateWindowEx()), you will specify callbacks to handle drawing, mouse - * interaction, etc. + * interaction, etc. * */ typedef void * XPLMWindowID; @@ -332,56 +1086,42 @@ typedef void * XPLMWindowID; * * **Note**: Because you are drawing your window over a background, you can * make a translucent window easily by simply not filling in your entire - * window's bounds. + * window's bounds. * */ typedef void (* XPLMDrawWindow_f)( - XPLMWindowID inWindowID, - void * inRefcon); + XPLMWindowID inWindowID, + void * inRefcon); /* * XPLMHandleKey_f * * This function is called when a key is pressed or keyboard focus is taken * away from your window. If losingFocus is 1, you are losing the keyboard - * focus, otherwise a key was pressed and inKey contains its character. You - * are also passed your window and a refcon. + * focus, otherwise a key was pressed and inKey contains its character. + * + * The window ID passed in will be your window for key presses, or the other + * window taking focus when losing focus. Note that in the modern plugin + * system, often focus is taken by the window manager itself; for this resaon, + * the window ID may be zero when losing focus, and you should not write code + * that depends onit. + * + * The refcon passed in will be the one from registration, for both key + * presses and losing focus. * * Warning: this API declares virtual keys as a signed character; however the * VKEY #define macros in XPLMDefs.h define the vkeys using unsigned values * (that is 0x80 instead of -0x80). So you may need to cast the incoming vkey - * to an unsigned char to get correct comparisons in C. + * to an unsigned char to get correct comparisons in C. * */ typedef void (* XPLMHandleKey_f)( - XPLMWindowID inWindowID, - char inKey, - XPLMKeyFlags inFlags, - char inVirtualKey, - 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; + XPLMWindowID inWindowID, + char inKey, + XPLMKeyFlags inFlags, + char inVirtualKey, + void * inRefcon, + int losingFocus); /* * XPLMHandleMouseClick_f @@ -405,41 +1145,15 @@ typedef int XPLMMouseStatus; * will get pixels. Legacy windows have their origin in the lower left of the * main X-Plane window, while modern windows have their origin in the lower * left of the global desktop space. In both cases, x increases as you move - * right, and y increases as you move up. + * right, and y increases as you move up. * */ typedef int (* XPLMHandleMouseClick_f)( - XPLMWindowID inWindowID, - int x, - int y, - 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 */ + XPLMWindowID inWindowID, + int x, + int y, + XPLMMouseStatus inMouse, + void * inRefcon); #if defined(XPLM200) /* @@ -469,14 +1183,14 @@ typedef int XPLMCursorStatus; * will get pixels. Legacy windows have their origin in the lower left of the * main X-Plane window, while modern windows have their origin in the lower * left of the global desktop space. In both cases, x increases as you move - * right, and y increases as you move up. + * right, and y increases as you move up. * */ typedef XPLMCursorStatus (* XPLMHandleCursor_f)( - XPLMWindowID inWindowID, - int x, - int y, - void * inRefcon); + XPLMWindowID inWindowID, + int x, + int y, + void * inRefcon); #endif /* XPLM200 */ #if defined(XPLM200) @@ -497,16 +1211,16 @@ typedef XPLMCursorStatus (* XPLMHandleCursor_f)( * will get pixels. Legacy windows have their origin in the lower left of the * main X-Plane window, while modern windows have their origin in the lower * left of the global desktop space. In both cases, x increases as you move - * right, and y increases as you move up. + * right, and y increases as you move up. * */ typedef int (* XPLMHandleMouseWheel_f)( - XPLMWindowID inWindowID, - int x, - int y, - int wheel, - int clicks, - void * inRefcon); + XPLMWindowID inWindowID, + int x, + int y, + int wheel, + int clicks, + void * inRefcon); #endif /* XPLM200 */ #if defined(XPLM300) @@ -525,23 +1239,23 @@ typedef int (* XPLMHandleMouseWheel_f)( * layering only applies to windows created with new X-Plane 11 GUI features. * (Windows created using the older XPLMCreateWindow(), or windows compiled * against a pre-XPLM300 version of the SDK will simply be placed in the - * flight overlay window layer.) + * flight overlay window layer.) * */ enum { - /* The lowest layer, used for HUD-like displays while flying. */ + /* The lowest layer, used for HUD-like displays while flying. */ xplm_WindowLayerFlightOverlay = 0, - /* Windows that "float" over the sim, like the X-Plane 11 map does. If you are* - * not sure which layer to create your window in, choose floating. */ + /* Windows that "float" over the sim, like the X-Plane 11 map does. If you are* + * not sure which layer to create your window in, choose floating. */ xplm_WindowLayerFloatingWindows = 1, - /* An interruptive modal that covers the sim with a transparent black overlay * - * to draw the user's focus to the alert */ + /* An interruptive modal that covers the sim with a transparent black overlay * + * to draw the user's focus to the alert */ xplm_WindowLayerModal = 2, - /* "Growl"-style notifications that are visible in a corner of the screen, * - * even over modals */ + /* "Growl"-style notifications that are visible in a corner of the screen, * + * even over modals */ xplm_WindowLayerGrowlNotifications = 3, @@ -558,28 +1272,28 @@ typedef int XPLMWindowLayer; * handlers. * * Your window's decoration can only be specified when you create the window - * (in the XPLMCreateWindow_t you pass to XPLMCreateWindowEx()). + * (in the XPLMCreateWindow_t you pass to XPLMCreateWindowEx()). * */ enum { - /* X-Plane will draw no decoration for your window, and apply no automatic * - * click handlers. The window will not stop click from passing through its * - * bounds. This is suitable for "windows" which request, say, the full screen * - * bounds, then only draw in a small portion of the available area. */ + /* X-Plane will draw no decoration for your window, and apply no automatic * + * click handlers. The window will not stop click from passing through its * + * bounds. This is suitable for "windows" which request, say, the full screen * + * bounds, then only draw in a small portion of the available area. */ xplm_WindowDecorationNone = 0, - /* The default decoration for "native" windows, like the map. Provides a solid* - * background, as well as click handlers for resizing and dragging the window.*/ + /* The default decoration for "native" windows, like the map. Provides a solid* + * background, as well as click handlers for resizing and dragging the window.*/ xplm_WindowDecorationRoundRectangle = 1, - /* X-Plane will draw no decoration for your window, nor will it provide resize* - * handlers for your window edges, but it will stop clicks from passing * - * through your windows bounds. */ + /* X-Plane will draw no decoration for your window, nor will it provide resize* + * handlers for your window edges, but it will stop clicks from passing * + * through your windows bounds. */ xplm_WindowDecorationSelfDecorated = 2, - /* Like self-decorated, but with resizing; X-Plane will draw no decoration for* - * your window, but it will stop clicks from passing through your windows * - * bounds, and provide automatic mouse handlers for resizing. */ + /* Like self-decorated, but with resizing; X-Plane will draw no decoration for* + * your window, but it will stop clicks from passing through your windows * + * bounds, and provide automatic mouse handlers for resizing. */ xplm_WindowDecorationSelfDecoratedResizable = 3, @@ -617,43 +1331,43 @@ typedef int XPLMWindowDecoration; * * If you ask to be decorated as a floating window, you'll get the blue window * control bar and blue backing that you see in X-Plane 11's normal "floating" - * windows (like the map). + * windows (like the map). * */ typedef struct { - /* Used to inform XPLMCreateWindowEx() of the SDK version you compiled * - * against; should always be set to sizeof(XPLMCreateWindow_t) */ + /* Used to inform XPLMCreateWindowEx() of the SDK version you compiled * + * against; should always be set to sizeof(XPLMCreateWindow_t) */ int structSize; - /* Left bound, in global desktop boxels */ + /* Left bound, in global desktop boxels */ int left; - /* Top bound, in global desktop boxels */ + /* Top bound, in global desktop boxels */ int top; - /* Right bound, in global desktop boxels */ + /* Right bound, in global desktop boxels */ int right; - /* Bottom bound, in global desktop boxels */ + /* Bottom bound, in global desktop boxels */ int bottom; int visible; XPLMDrawWindow_f drawWindowFunc; - /* A callback to handle the user left-clicking within your window (or NULL to * - * ignore left clicks) */ + /* A callback to handle the user left-clicking within your window (or NULL to * + * ignore left clicks) */ XPLMHandleMouseClick_f handleMouseClickFunc; XPLMHandleKey_f handleKeyFunc; XPLMHandleCursor_f handleCursorFunc; XPLMHandleMouseWheel_f handleMouseWheelFunc; - /* A reference which will be passed into each of your window callbacks. Use * - * this to pass information to yourself as needed. */ + /* A reference which will be passed into each of your window callbacks. Use * + * this to pass information to yourself as needed. */ void * refcon; #if defined(XPLM301) - /* Specifies the type of X-Plane 11-style "wrapper" you want around your * - * window, if any */ + /* Specifies the type of X-Plane 11-style "wrapper" you want around your * + * window, if any */ XPLMWindowDecoration decorateAsFloatingWindow; #endif /* XPLM301 */ #if defined(XPLM300) XPLMWindowLayer layer; #endif /* XPLM300 */ #if defined(XPLM300) - /* A callback to handle the user right-clicking within your window (or NULL to* - * ignore right clicks) */ + /* A callback to handle the user right-clicking within your window (or NULL to* + * ignore right clicks) */ XPLMHandleMouseClick_f handleRightClickFunc; #endif /* XPLM300 */ } XPLMCreateWindow_t; @@ -668,11 +1382,11 @@ typedef struct { * the structSize of the structure to the size of the actual structure you * used. Also, you must provide functions for every callback---you may not * leave them null! (If you do not support the cursor or mouse wheel, use - * functions that return the default values.) + * functions that return the default values.) * */ XPLM_API XPLMWindowID XPLMCreateWindowEx( - XPLMCreateWindow_t * inParams); + XPLMCreateWindow_t * inParams); #endif /* XPLM200 */ /* @@ -694,42 +1408,42 @@ XPLM_API XPLMWindowID XPLMCreateWindowEx( * * NOTE: Legacy windows do not have "frames"; you are responsible for drawing * the background and frame of the window. Higher level libraries have - * routines which make this easy. + * routines which make this easy. * */ XPLM_API XPLMWindowID XPLMCreateWindow( - int inLeft, - int inTop, - int inRight, - int inBottom, - int inIsVisible, - XPLMDrawWindow_f inDrawCallback, - XPLMHandleKey_f inKeyCallback, - XPLMHandleMouseClick_f inMouseCallback, - void * inRefcon); + int inLeft, + int inTop, + int inRight, + int inBottom, + int inIsVisible, + XPLMDrawWindow_f inDrawCallback, + XPLMHandleKey_f inKeyCallback, + XPLMHandleMouseClick_f inMouseCallback, + void * inRefcon); /* * XPLMDestroyWindow * * This routine destroys a window. The window's callbacks are not called * after this call. Keyboard focus is removed from the window before - * destroying it. + * destroying it. * */ XPLM_API void XPLMDestroyWindow( - XPLMWindowID inWindowID); + XPLMWindowID inWindowID); /* * XPLMGetScreenSize * * This routine returns the size of the main X-Plane OpenGL window in pixels. * This number can be used to get a rough idea of the amount of detail the - * user will be able to see when drawing in 3-d. + * user will be able to see when drawing in 3-d. * */ XPLM_API void XPLMGetScreenSize( - int * outWidth, /* Can be NULL */ - int * outHeight); /* Can be NULL */ + int * outWidth, /* Can be NULL */ + int * outHeight); /* Can be NULL */ #if defined(XPLM300) /* @@ -762,14 +1476,14 @@ XPLM_API void XPLMGetScreenSize( * * Note that popped-out windows (windows drawn in their own operating system * windows, rather than "floating" within X-Plane) are not included in these - * bounds. + * bounds. * */ XPLM_API void XPLMGetScreenBoundsGlobal( - int * outLeft, /* Can be NULL */ - int * outTop, /* Can be NULL */ - int * outRight, /* Can be NULL */ - int * outBottom); /* Can be NULL */ + int * outLeft, /* Can be NULL */ + int * outTop, /* Can be NULL */ + int * outRight, /* Can be NULL */ + int * outBottom); /* Can be NULL */ #endif /* XPLM300 */ #if defined(XPLM300) @@ -779,16 +1493,16 @@ XPLM_API void XPLMGetScreenBoundsGlobal( * This function is informed of the global bounds (in boxels) of a particular * monitor within the X-Plane global desktop space. Note that X-Plane must be * running in full screen on a monitor in order for that monitor to be passed - * to you in this callback. + * to you in this callback. * */ typedef void (* XPLMReceiveMonitorBoundsGlobal_f)( - int inMonitorIndex, - int inLeftBx, - int inTopBx, - int inRightBx, - int inBottomBx, - void * inRefcon); + int inMonitorIndex, + int inLeftBx, + int inTopBx, + int inRightBx, + int inBottomBx, + void * inRefcon); #endif /* XPLM300 */ #if defined(XPLM300) @@ -813,12 +1527,12 @@ typedef void (* XPLMReceiveMonitorBoundsGlobal_f)( * XPLMGetAllMonitorBoundsOS(), but the coordinates are different (since the * X-Plane global desktop may not match the operating system's global desktop, * and one X-Plane boxel may be larger than one pixel due to 150% or 200% - * scaling). + * scaling). * */ XPLM_API void XPLMGetAllMonitorBoundsGlobal( - XPLMReceiveMonitorBoundsGlobal_f inMonitorBoundsCallback, - void * inRefcon); + XPLMReceiveMonitorBoundsGlobal_f inMonitorBoundsCallback, + void * inRefcon); #endif /* XPLM300 */ #if defined(XPLM300) @@ -829,16 +1543,16 @@ XPLM_API void XPLMGetAllMonitorBoundsGlobal( * monitor within the operating system's global desktop space. Note that a * monitor index being passed to you here does not indicate that X-Plane is * running in full screen on this monitor, or even that any X-Plane windows - * exist on this monitor. + * exist on this monitor. * */ typedef void (* XPLMReceiveMonitorBoundsOS_f)( - int inMonitorIndex, - int inLeftPx, - int inTopPx, - int inRightPx, - int inBottomPx, - void * inRefcon); + int inMonitorIndex, + int inLeftPx, + int inTopPx, + int inRightPx, + int inBottomPx, + void * inRefcon); #endif /* XPLM300 */ #if defined(XPLM300) @@ -853,12 +1567,12 @@ typedef void (* XPLMReceiveMonitorBoundsOS_f)( * Note that this function's monitor indices match those provided by * XPLMGetAllMonitorBoundsGlobal(), but the coordinates are different (since * the X-Plane global desktop may not match the operating system's global - * desktop, and one X-Plane boxel may be larger than one pixel). + * desktop, and one X-Plane boxel may be larger than one pixel). * */ XPLM_API void XPLMGetAllMonitorBoundsOS( - XPLMReceiveMonitorBoundsOS_f inMonitorBoundsCallback, - void * inRefcon); + XPLMReceiveMonitorBoundsOS_f inMonitorBoundsCallback, + void * inRefcon); #endif /* XPLM300 */ /* @@ -878,12 +1592,12 @@ XPLM_API void XPLMGetAllMonitorBoundsOS( * * Note that unlike XPLMGetMouseLocationGlobal(), if the mouse goes outside * the user's main monitor (for instance, to a pop out window or a secondary - * monitor), this function will not reflect it. + * monitor), this function will not reflect it. * */ XPLM_API void XPLMGetMouseLocation( - int * outX, /* Can be NULL */ - int * outY); /* Can be NULL */ + int * outX, /* Can be NULL */ + int * outY); /* Can be NULL */ #if defined(XPLM300) /* @@ -900,12 +1614,12 @@ XPLM_API void XPLMGetMouseLocation( * This is the mouse location function to use with modern windows (i.e., those * created by XPLMCreateWindowEx()). * - * Pass NULL to not receive info about either parameter. + * Pass NULL to not receive info about either parameter. * */ XPLM_API void XPLMGetMouseLocationGlobal( - int * outX, /* Can be NULL */ - int * outY); /* Can be NULL */ + int * outX, /* Can be NULL */ + int * outY); /* Can be NULL */ #endif /* XPLM300 */ /* @@ -923,15 +1637,15 @@ XPLM_API void XPLMGetMouseLocationGlobal( * against the XPLM300 SDK and created using XPLMCreateWindowEx()), the units * are global desktop boxels. * - * Pass NULL to not receive any paramter. + * Pass NULL to not receive any paramter. * */ XPLM_API void XPLMGetWindowGeometry( - XPLMWindowID inWindowID, - int * outLeft, /* Can be NULL */ - int * outTop, /* Can be NULL */ - int * outRight, /* Can be NULL */ - int * outBottom); /* Can be NULL */ + XPLMWindowID inWindowID, + int * outLeft, /* Can be NULL */ + int * outTop, /* Can be NULL */ + int * outRight, /* Can be NULL */ + int * outBottom); /* Can be NULL */ /* * XPLMSetWindowGeometry @@ -946,15 +1660,15 @@ XPLM_API void XPLMGetWindowGeometry( * are drawn within the X-Plane simulation windows, rather than being "popped * out" into their own first-class operating system windows). To set the * position of windows whose positioning mode is xplm_WindowPopOut, you'll - * need to instead use XPLMSetWindowGeometryOS(). + * need to instead use XPLMSetWindowGeometryOS(). * */ XPLM_API void XPLMSetWindowGeometry( - XPLMWindowID inWindowID, - int inLeft, - int inTop, - int inRight, - int inBottom); + XPLMWindowID inWindowID, + int inLeft, + int inTop, + int inRight, + int inBottom); #if defined(XPLM300) /* @@ -962,15 +1676,15 @@ XPLM_API void XPLMSetWindowGeometry( * * This routine returns the position and size of a "popped out" window (i.e., * a window whose positioning mode is xplm_WindowPopOut), in operating system - * pixels. Pass NULL to not receive any parameter. + * pixels. Pass NULL to not receive any parameter. * */ XPLM_API void XPLMGetWindowGeometryOS( - XPLMWindowID inWindowID, - int * outLeft, /* Can be NULL */ - int * outTop, /* Can be NULL */ - int * outRight, /* Can be NULL */ - int * outBottom); /* Can be NULL */ + XPLMWindowID inWindowID, + int * outLeft, /* Can be NULL */ + int * outTop, /* Can be NULL */ + int * outRight, /* Can be NULL */ + int * outBottom); /* Can be NULL */ #endif /* XPLM300 */ #if defined(XPLM300) @@ -984,15 +1698,15 @@ XPLM_API void XPLMGetWindowGeometryOS( * * Note that you are responsible for ensuring both that your window is popped * out (using XPLMWindowIsPoppedOut()) and that a monitor really exists at the - * OS coordinates you provide (using XPLMGetAllMonitorBoundsOS()). + * OS coordinates you provide (using XPLMGetAllMonitorBoundsOS()). * */ XPLM_API void XPLMSetWindowGeometryOS( - XPLMWindowID inWindowID, - int inLeft, - int inTop, - int inRight, - int inBottom); + XPLMWindowID inWindowID, + int inLeft, + int inTop, + int inRight, + int inBottom); #endif /* XPLM300 */ #if defined(XPLM301) @@ -1001,13 +1715,13 @@ XPLM_API void XPLMSetWindowGeometryOS( * * Returns the width and height, in boxels, of a window in VR. Note that you * are responsible for ensuring your window is in VR (using - * XPLMWindowIsInVR()). + * XPLMWindowIsInVR()). * */ XPLM_API void XPLMGetWindowGeometryVR( - XPLMWindowID inWindowID, - int * outWidthBoxels, /* Can be NULL */ - int * outHeightBoxels); /* Can be NULL */ + XPLMWindowID inWindowID, + int * outWidthBoxels, /* Can be NULL */ + int * outHeightBoxels); /* Can be NULL */ #endif /* XPLM301 */ #if defined(XPLM301) @@ -1018,33 +1732,33 @@ XPLM_API void XPLMGetWindowGeometryVR( * is, a window whose positioning mode is xplm_WindowVR). * * Note that you are responsible for ensuring your window is in VR (using - * XPLMWindowIsInVR()). + * XPLMWindowIsInVR()). * */ XPLM_API void XPLMSetWindowGeometryVR( - XPLMWindowID inWindowID, - int widthBoxels, - int heightBoxels); + XPLMWindowID inWindowID, + int widthBoxels, + int heightBoxels); #endif /* XPLM301 */ /* * XPLMGetWindowIsVisible * - * Returns true (1) if the specified window is visible. + * Returns true (1) if the specified window is visible. * */ XPLM_API int XPLMGetWindowIsVisible( - XPLMWindowID inWindowID); + XPLMWindowID inWindowID); /* * XPLMSetWindowIsVisible * - * This routine shows or hides a window. + * This routine shows or hides a window. * */ XPLM_API void XPLMSetWindowIsVisible( - XPLMWindowID inWindowID, - int inIsVisible); + XPLMWindowID inWindowID, + int inIsVisible); #if defined(XPLM300) /* @@ -1056,11 +1770,11 @@ XPLM_API void XPLMSetWindowIsVisible( * * Only applies to modern windows. (Windows created using the deprecated * XPLMCreateWindow(), or windows compiled against a pre-XPLM300 version of - * the SDK cannot be popped out.) + * the SDK cannot be popped out.) * */ XPLM_API int XPLMWindowIsPoppedOut( - XPLMWindowID inWindowID); + XPLMWindowID inWindowID); #endif /* XPLM300 */ #if defined(XPLM301) @@ -1073,11 +1787,11 @@ XPLM_API int XPLMWindowIsPoppedOut( * * Only applies to modern windows. (Windows created using the deprecated * XPLMCreateWindow(), or windows compiled against a pre-XPLM301 version of - * the SDK cannot be moved to VR.) + * the SDK cannot be moved to VR.) * */ XPLM_API int XPLMWindowIsInVR( - XPLMWindowID inWindowID); + XPLMWindowID inWindowID); #endif /* XPLM301 */ #if defined(XPLM300) @@ -1101,15 +1815,15 @@ XPLM_API int XPLMWindowIsInVR( * * Only applies to modern windows. (Windows created using the deprecated * XPLMCreateWindow(), or windows compiled against a pre-XPLM300 version of - * the SDK will simply get the default gravity.) + * the SDK will simply get the default gravity.) * */ XPLM_API void XPLMSetWindowGravity( - XPLMWindowID inWindowID, - float inLeftGravity, - float inTopGravity, - float inRightGravity, - float inBottomGravity); + XPLMWindowID inWindowID, + float inLeftGravity, + float inTopGravity, + float inRightGravity, + float inBottomGravity); #endif /* XPLM300 */ #if defined(XPLM300) @@ -1123,15 +1837,15 @@ XPLM_API void XPLMSetWindowGravity( * * Only applies to modern windows. (Windows created using the deprecated * XPLMCreateWindow(), or windows compiled against a pre-XPLM300 version of - * the SDK will have no minimum or maximum size.) + * the SDK will have no minimum or maximum size.) * */ XPLM_API void XPLMSetWindowResizingLimits( - XPLMWindowID inWindowID, - int inMinWidthBoxels, - int inMinHeightBoxels, - int inMaxWidthBoxels, - int inMaxHeightBoxels); + XPLMWindowID inWindowID, + int inMinWidthBoxels, + int inMinHeightBoxels, + int inMaxWidthBoxels, + int inMaxHeightBoxels); #endif /* XPLM300 */ #if defined(XPLM300) @@ -1146,32 +1860,32 @@ XPLM_API void XPLMSetWindowResizingLimits( * created using XPLMCreateWindowEx() and compiled against the XPLM300 SDK). * Windows created using the deprecated XPLMCreateWindow(), or windows * compiled against a pre-XPLM300 version of the SDK will simply get the - * "free" positioning mode. + * "free" positioning mode. * */ enum { - /* The default positioning mode. Set the window geometry and its future * - * position will be determined by its window gravity, resizing limits, and * - * user interactions. */ + /* The default positioning mode. Set the window geometry and its future * + * position will be determined by its window gravity, resizing limits, and * + * user interactions. */ xplm_WindowPositionFree = 0, - /* Keep the window centered on the monitor you specify */ + /* Keep the window centered on the monitor you specify */ xplm_WindowCenterOnMonitor = 1, - /* Keep the window full screen on the monitor you specify */ + /* Keep the window full screen on the monitor you specify */ xplm_WindowFullScreenOnMonitor = 2, - /* Like gui_window_full_screen_on_monitor, but stretches over *all* monitors * - * and popout windows. This is an obscure one... unless you have a very good * - * reason to need it, you probably don't! */ + /* Like gui_window_full_screen_on_monitor, but stretches over *all* monitors * + * and popout windows. This is an obscure one... unless you have a very good * + * reason to need it, you probably don't! */ xplm_WindowFullScreenOnAllMonitors = 3, - /* A first-class window in the operating system, completely separate from the * - * X-Plane window(s) */ + /* A first-class window in the operating system, completely separate from the * + * X-Plane window(s) */ xplm_WindowPopOut = 4, #if defined(XPLM301) - /* A floating window visible on the VR headset */ + /* A floating window visible on the VR headset */ xplm_WindowVR = 5, #endif /* XPLM301 */ @@ -1195,13 +1909,13 @@ typedef int XPLMWindowPositioningMode; * * Only applies to modern windows. (Windows created using the deprecated * XPLMCreateWindow(), or windows compiled against a pre-XPLM300 version of - * the SDK will always use xplm_WindowPositionFree.) + * the SDK will always use xplm_WindowPositionFree.) * */ XPLM_API void XPLMSetWindowPositioningMode( - XPLMWindowID inWindowID, - XPLMWindowPositioningMode inPositioningMode, - int inMonitorIndex); + XPLMWindowID inWindowID, + XPLMWindowPositioningMode inPositioningMode, + int inMonitorIndex); #endif /* XPLM300 */ #if defined(XPLM300) @@ -1211,34 +1925,34 @@ XPLM_API void XPLMSetWindowPositioningMode( * Sets the name for a window. This only applies to windows that opted-in to * styling as an X-Plane 11 floating window (i.e., with styling mode * xplm_WindowDecorationRoundRectangle) when they were created using - * XPLMCreateWindowEx(). + * XPLMCreateWindowEx(). * */ XPLM_API void XPLMSetWindowTitle( - XPLMWindowID inWindowID, - const char * inWindowTitle); + XPLMWindowID inWindowID, + const char * inWindowTitle); #endif /* XPLM300 */ /* * XPLMGetWindowRefCon * * Returns a window's reference constant, the unique value you can use for - * your own purposes. + * your own purposes. * */ XPLM_API void * XPLMGetWindowRefCon( - XPLMWindowID inWindowID); + XPLMWindowID inWindowID); /* * XPLMSetWindowRefCon * * Sets a window's reference constant. Use this to pass data to yourself in - * the callbacks. + * the callbacks. * */ XPLM_API void XPLMSetWindowRefCon( - XPLMWindowID inWindowID, - void * inRefcon); + XPLMWindowID inWindowID, + void * inRefcon); /* * XPLMTakeKeyboardFocus @@ -1246,22 +1960,22 @@ XPLM_API void XPLMSetWindowRefCon( * This routine gives a specific window keyboard focus. Keystrokes will be * sent to that window. Pass a window ID of 0 to remove keyboard focus from * any plugin-created windows and instead pass keyboard strokes directly to - * X-Plane. + * X-Plane. * */ XPLM_API void XPLMTakeKeyboardFocus( - XPLMWindowID inWindow); + XPLMWindowID inWindow); /* * XPLMHasKeyboardFocus * * Returns true (1) if the indicated window has keyboard focus. Pass a window * ID of 0 to see if no plugin window has focus, and all keystrokes will go - * directly to X-Plane. + * directly to X-Plane. * */ XPLM_API int XPLMHasKeyboardFocus( - XPLMWindowID inWindow); + XPLMWindowID inWindow); /* * XPLMBringWindowToFront @@ -1277,11 +1991,11 @@ XPLM_API int XPLMHasKeyboardFocus( * xplm_WindowLayerModal) above you, you would still not be the true frontmost * window after calling this. (After all, the window layers are strictly * ordered, and no window in a lower layer can ever be above any window in a - * higher one.) + * higher one.) * */ XPLM_API void XPLMBringWindowToFront( - XPLMWindowID inWindow); + XPLMWindowID inWindow); /* * XPLMIsWindowInFront @@ -1299,18 +2013,18 @@ XPLM_API void XPLMBringWindowToFront( * xplm_WindowLayerFlightOverlay, while modern-style windows default to * xplm_WindowLayerFloatingWindows. This means it's perfectly consistent to * have two different plugin-created windows (one legacy, one modern) *both* - * be in the front (of their different layers!) at the same time. + * be in the front (of their different layers!) at the same time. * */ XPLM_API int XPLMIsWindowInFront( - XPLMWindowID inWindow); + XPLMWindowID inWindow); /*************************************************************************** * KEY SNIFFERS ***************************************************************************/ /* * Low-level keyboard handlers. Allows for intercepting keystrokes outside the - * normal rules of the user interface. + * normal rules of the user interface. * */ @@ -1334,14 +2048,14 @@ XPLM_API int XPLMIsWindowInFront( * Warning: this API declares virtual keys as a signed character; however the * VKEY #define macros in XPLMDefs.h define the vkeys using unsigned values * (that is 0x80 instead of -0x80). So you may need to cast the incoming vkey - * to an unsigned char to get correct comparisons in C. + * to an unsigned char to get correct comparisons in C. * */ typedef int (* XPLMKeySniffer_f)( - char inChar, - XPLMKeyFlags inFlags, - char inVirtualKey, - void * inRefcon); + char inChar, + XPLMKeyFlags inFlags, + char inVirtualKey, + void * inRefcon); /* * XPLMRegisterKeySniffer @@ -1352,26 +2066,26 @@ typedef int (* XPLMKeySniffer_f)( * after the window system. When the window system consumes a key, it is * because the user has "focused" a window. Consuming the key or taking * action based on the key will produce very weird results. Returns - * 1 if successful. + * 1 if successful. * */ XPLM_API int XPLMRegisterKeySniffer( - XPLMKeySniffer_f inCallback, - int inBeforeWindows, - void * inRefcon); + XPLMKeySniffer_f inCallback, + int inBeforeWindows, + void * inRefcon); /* * XPLMUnregisterKeySniffer * * This routine unregisters a key sniffer. You must unregister a key sniffer * for every time you register one with the exact same signature. Returns 1 - * if successful. + * if successful. * */ XPLM_API int XPLMUnregisterKeySniffer( - XPLMKeySniffer_f inCallback, - int inBeforeWindows, - void * inRefcon); + XPLMKeySniffer_f inCallback, + int inBeforeWindows, + void * inRefcon); /*************************************************************************** * HOT KEYS @@ -1379,7 +2093,7 @@ XPLM_API int XPLMUnregisterKeySniffer( /* * Keystrokes that can be managed by others. These are lower-level than window * keyboard handlers (i.e., callbacks you attach to your XPLMCreateWindow_t), - * but higher level than key sniffers. + * but higher level than key sniffers. * */ @@ -1387,16 +2101,16 @@ XPLM_API int XPLMUnregisterKeySniffer( /* * XPLMHotKey_f * - * Your hot key callback simply takes a pointer of your choosing. + * Your hot key callback simply takes a pointer of your choosing. * */ typedef void (* XPLMHotKey_f)( - void * inRefcon); + void * inRefcon); /* * XPLMHotKeyID * - * An opaque ID used to identify a hot key. + * An opaque ID used to identify a hot key. * */ typedef void * XPLMHotKeyID; @@ -1409,29 +2123,29 @@ typedef void * XPLMHotKeyID; * other plug-ins can describe the plug-in to the user for remapping) and a * callback function and opaque pointer to pass in). A new hot key ID is * returned. During execution, the actual key associated with your hot key - * may change, but you are insulated from this. + * may change, but you are insulated from this. * */ XPLM_API XPLMHotKeyID XPLMRegisterHotKey( - char inVirtualKey, - XPLMKeyFlags inFlags, - const char * inDescription, - XPLMHotKey_f inCallback, - void * inRefcon); + char inVirtualKey, + XPLMKeyFlags inFlags, + const char * inDescription, + XPLMHotKey_f inCallback, + void * inRefcon); /* * XPLMUnregisterHotKey * - * Unregisters a hot key. You can only unregister your own hot keys. + * Unregisters a hot key. You can only unregister your own hot keys. * */ XPLM_API void XPLMUnregisterHotKey( - XPLMHotKeyID inHotKey); + XPLMHotKeyID inHotKey); /* * XPLMCountHotKeys * - * Returns the number of current hot keys. + * Returns the number of current hot keys. * */ XPLM_API int XPLMCountHotKeys(void); @@ -1439,36 +2153,36 @@ XPLM_API int XPLMCountHotKeys(void); /* * XPLMGetNthHotKey * - * Returns a hot key by index, for iteration on all hot keys. + * Returns a hot key by index, for iteration on all hot keys. * */ XPLM_API XPLMHotKeyID XPLMGetNthHotKey( - int inIndex); + int inIndex); /* * XPLMGetHotKeyInfo * * Returns information about the hot key. Return NULL for any parameter you - * don't want info about. The description should be at least 512 chars long. + * don't want info about. The description should be at least 512 chars long. * */ XPLM_API void XPLMGetHotKeyInfo( - XPLMHotKeyID inHotKey, - char * outVirtualKey, /* Can be NULL */ - XPLMKeyFlags * outFlags, /* Can be NULL */ - char * outDescription, /* Can be NULL */ - XPLMPluginID * outPlugin); /* Can be NULL */ + XPLMHotKeyID inHotKey, + char * outVirtualKey, /* Can be NULL */ + XPLMKeyFlags * outFlags, /* Can be NULL */ + char * outDescription, /* Can be NULL */ + XPLMPluginID * outPlugin); /* Can be NULL */ /* * XPLMSetHotKeyCombination * - * Remaps a hot key's keystrokes. You may remap another plugin's keystrokes. + * Remaps a hot key's keystrokes. You may remap another plugin's keystrokes. * */ XPLM_API void XPLMSetHotKeyCombination( - XPLMHotKeyID inHotKey, - char inVirtualKey, - XPLMKeyFlags inFlags); + XPLMHotKeyID inHotKey, + char inVirtualKey, + XPLMKeyFlags inFlags); #ifdef __cplusplus } diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMGraphics.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMGraphics.h old mode 100755 new mode 100644 index d7aef52..f05cb1c --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMGraphics.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMGraphics.h @@ -2,8 +2,8 @@ #define _XPLMGraphics_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -17,14 +17,14 @@ * as latitude, longitude and elevation. This coordinate system never changes * but is not very precise. * - * OpenGL (or 'local') coordinates are cartesian and shift with the plane. + * OpenGL (or 'local') coordinates are cartesian and move with the aircraft. * They offer more precision and are used for 3-d OpenGL drawing. The X axis * is aligned east-west with positive X meaning east. The Y axis is aligned - * straight up and down at the point 0,0,0 (but since the earth is round it is + * straight up and down at the point 0,0,0 (but since the Earth is round it is * not truly straight up and down at other points). The Z axis is aligned - * north-south at 0, 0, 0 with positive Z pointing south (but since the earth + * north-south at 0, 0, 0 with positive Z pointing south (but since the Earth * is round it isn't exactly north-south as you move east or west of 0, 0, 0). - * One unit is one meter and the point 0,0,0 is on the surface of the earth at + * One unit is one meter and the point 0,0,0 is on the surface of the Earth at * sea level for some latitude and longitude picked by the sim such that the * user's aircraft is reasonably nearby. * @@ -38,7 +38,7 @@ * not attempt to do this conversion yourself; the precise 'roundness' of * X-Plane's physics model may not match your own, and (to make things * weirder) the user can potentially customize the physics of the current - * planet. + * planet. * */ @@ -52,7 +52,7 @@ extern "C" { * X-PLANE GRAPHICS ***************************************************************************/ /* - * These routines allow you to use OpenGL with X-Plane. + * These routines allow you to use OpenGL with X-Plane. * */ @@ -65,20 +65,20 @@ extern "C" { * * *Warning*: do not use these enums. The only remaining use they have is to * access the legacy compatibility v10 UI texture; if you need this, get it - * via the Widgets library. + * via the Widgets library. * */ enum { - /* The bitmap that contains window outlines, button outlines, fonts, etc. */ + /* The bitmap that contains window outlines, button outlines, fonts, etc. */ xplm_Tex_GeneralInterface = 0, #if defined(XPLM_DEPRECATED) - /* The exterior paint for the user's aircraft (daytime). */ + /* The exterior paint for the user's aircraft (daytime). */ xplm_Tex_AircraftPaint = 1, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* The exterior light map for the user's aircraft. */ + /* The exterior light map for the user's aircraft. */ xplm_Tex_AircraftLiteMap = 2, #endif /* XPLM_DEPRECATED */ @@ -110,7 +110,7 @@ typedef int XPLMTextureID; * - inEnableDepthTesting - enables per pixel depth testing, as in * glEnable(GL_DEPTH_TEST); * - inEnableDepthWriting - enables writing back of depth information to the - * depth bufffer, as in glDepthMask(GL_TRUE); + * depth buffer, as in glDepthMask(GL_TRUE); * * The purpose of this function is to change OpenGL state while keeping * X-Plane aware of the state changes; this keeps X-Plane from getting @@ -127,21 +127,21 @@ typedef int XPLMTextureID; * code) may change X-Plane's state. Always set state before drawing after * unknown code has executed. * - * *Deprecation Warnings*: X-Plane's lighting and fog environemnt is + * *Deprecation Warnings*: X-Plane's lighting and fog environment is * significantly more complex than the fixed function pipeline can express; * do not assume that lighting and fog state is a good approximation for 3-d * drawing. Prefer to use XPLMInstancing to draw objects. All calls to - * XPLMSetGraphicsState should have no fog or lighting. + * XPLMSetGraphicsState should have no fog or lighting. * */ XPLM_API void XPLMSetGraphicsState( - int inEnableFog, - int inNumberTexUnits, - int inEnableLighting, - int inEnableAlphaTesting, - int inEnableAlphaBlending, - int inEnableDepthTesting, - int inEnableDepthWriting); + int inEnableFog, + int inNumberTexUnits, + int inEnableLighting, + int inEnableAlphaTesting, + int inEnableAlphaBlending, + int inEnableDepthTesting, + int inEnableDepthWriting); /* * XPLMBindTexture2d @@ -152,30 +152,30 @@ XPLM_API void XPLMSetGraphicsState( * example, consider several plug-ins running in series; if they all use the * 'general interface' bitmap to do UI, calling this function will skip the * rebinding of the general interface texture on all but the first plug-in, - * which can provide better frame rate son some graphics cards. + * which can provide better frame rates on some graphics cards. * * inTextureID is the ID of the texture object to bind; inTextureUnit is a * zero-based texture unit (e.g. 0 for the first one), up to a maximum of 4 * units. (This number may increase in future versions of X-Plane.) * - * Use this routine instead of glBindTexture(GL_TEXTURE_2D, ....); + * Use this routine instead of glBindTexture(GL_TEXTURE_2D, ....); * */ XPLM_API void XPLMBindTexture2d( - int inTextureNum, - int inTextureUnit); + int inTextureNum, + int inTextureUnit); /* * XPLMGenerateTextureNumbers * * Use this routine instead of glGenTextures to generate new texture object * IDs. This routine historically ensured that plugins don't use texure IDs - * that X-Plane is reserving for its own use. + * that X-Plane is reserving for its own use. * */ XPLM_API void XPLMGenerateTextureNumbers( - int * outTextureIDs, - int inCount); + int * outTextureIDs, + int inCount); #if defined(XPLM_DEPRECATED) /* @@ -183,11 +183,11 @@ XPLM_API void XPLMGenerateTextureNumbers( * * XPLMGetTexture returns the OpenGL texture ID of an X-Plane texture based on * a generic identifying code. For example, you can get the texture for - * X-Plane's UI bitmaps. + * X-Plane's UI bitmaps. * */ XPLM_API int XPLMGetTexture( - XPLMTextureID inTexture); + XPLMTextureID inTexture); #endif /* XPLM_DEPRECATED */ /* @@ -196,16 +196,16 @@ XPLM_API int XPLMGetTexture( * This routine translates coordinates from latitude, longitude, and altitude * to local scene coordinates. Latitude and longitude are in decimal degrees, * and altitude is in meters MSL (mean sea level). The XYZ coordinates are in - * meters in the local OpenGL coordinate system. + * meters in the local OpenGL coordinate system. * */ XPLM_API void XPLMWorldToLocal( - double inLatitude, - double inLongitude, - double inAltitude, - double * outX, - double * outY, - double * outZ); + double inLatitude, + double inLongitude, + double inAltitude, + double * outX, + double * outY, + double * outZ); /* * XPLMLocalToWorld @@ -216,30 +216,30 @@ XPLM_API void XPLMWorldToLocal( * meters in the local OpenGL coordinate system. * * NOTE: world coordinates are less precise than local coordinates; you should - * try to avoid round tripping from local to world and back. + * try to avoid round tripping from local to world and back. * */ XPLM_API void XPLMLocalToWorld( - double inX, - double inY, - double inZ, - double * outLatitude, - double * outLongitude, - double * outAltitude); + double inX, + double inY, + double inZ, + double * outLatitude, + double * outLongitude, + double * outAltitude); /* * XPLMDrawTranslucentDarkBox * * This routine draws a translucent dark box, partially obscuring parts of the * screen but making text easy to read. This is the same graphics primitive - * used by X-Plane to show text files and ATC info. + * used by X-Plane to show text files. * */ XPLM_API void XPLMDrawTranslucentDarkBox( - int inLeft, - int inTop, - int inRight, - int inBottom); + int inLeft, + int inTop, + int inRight, + int inBottom); /*************************************************************************** * X-PLANE TEXT @@ -257,100 +257,100 @@ XPLM_API void XPLMDrawTranslucentDarkBox( * Note: X-Plane 7 supports proportional-spaced fonts. Since no measuring * routine is available yet, the SDK will normally draw using a fixed-width * font. You can use a dataref to enable proportional font drawing on XP7 if - * you want to. + * you want to. * */ enum { - /* Mono-spaced font for user interface. Available in all versions of the SDK.*/ + /* Mono-spaced font for user interface. Available in all versions of the SDK.*/ xplmFont_Basic = 0, #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_Menus = 1, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_Metal = 2, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_Led = 3, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_LedWide = 4, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_PanelHUD = 5, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_PanelEFIS = 6, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_PanelGPS = 7, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_RadiosGA = 8, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_RadiosBC = 9, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_RadiosHM = 10, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_RadiosGANarrow = 11, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_RadiosBCNarrow = 12, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_RadiosHMNarrow = 13, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_Timer = 14, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_FullRound = 15, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_SmallRound = 16, #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) - /* Deprecated, do not use. */ + /* Deprecated, do not use. */ xplmFont_Menus_Localized = 17, #endif /* XPLM_DEPRECATED */ #if defined(XPLM200) - /* Proportional UI font. */ + /* Proportional UI font. */ xplmFont_Proportional = 18, #endif /* XPLM200 */ @@ -361,21 +361,21 @@ typedef int XPLMFontID; /* * XPLMDrawString * - * This routine draws a NULL termianted string in a given font. Pass in the + * This routine draws a NULL terminated string in a given font. Pass in the * lower left pixel that the character is to be drawn onto. Also pass the * character and font ID. This function returns the x offset plus the width of * all drawn characters. The color to draw in is specified as a pointer to an * array of three floating point colors, representing RGB intensities from 0.0 - * to 1.0. + * to 1.0. * */ XPLM_API void XPLMDrawString( - float * inColorRGB, - int inXOffset, - int inYOffset, - char * inChar, - int * inWordWrapWidth, /* Can be NULL */ - XPLMFontID inFontID); + float * inColorRGB, + int inXOffset, + int inYOffset, + const char * inChar, + int * inWordWrapWidth, /* Can be NULL */ + XPLMFontID inFontID); /* * XPLMDrawNumber @@ -385,18 +385,18 @@ XPLM_API void XPLMDrawString( * position, a floating point value, and formatting info. Specify how many * integer and how many decimal digits to show and whether to show a sign, as * well as a character set. This routine returns the xOffset plus width of the - * string drawn. + * string drawn. * */ XPLM_API void XPLMDrawNumber( - float * inColorRGB, - int inXOffset, - int inYOffset, - double inValue, - int inDigits, - int inDecimals, - int inShowSign, - XPLMFontID inFontID); + float * inColorRGB, + int inXOffset, + int inYOffset, + double inValue, + int inDigits, + int inDecimals, + int inShowSign, + XPLMFontID inFontID); /* * XPLMGetFontDimensions @@ -404,14 +404,14 @@ XPLM_API void XPLMDrawNumber( * This routine returns the width and height of a character in a given font. * It also tells you if the font only supports numeric digits. Pass NULL if * you don't need a given field. Note that for a proportional font the width - * will be an arbitrary, hopefully average width. + * will be an arbitrary, hopefully average width. * */ XPLM_API void XPLMGetFontDimensions( - XPLMFontID inFontID, - int * outCharWidth, /* Can be NULL */ - int * outCharHeight, /* Can be NULL */ - int * outDigitsOnly); /* Can be NULL */ + XPLMFontID inFontID, + int * outCharWidth, /* Can be NULL */ + int * outCharHeight, /* Can be NULL */ + int * outDigitsOnly); /* Can be NULL */ #if defined(XPLM200) /* @@ -421,13 +421,13 @@ XPLM_API void XPLMGetFontDimensions( * The string is passed as a pointer plus length (and does not need to be null * terminated); this is used to allow for measuring substrings. The return * value is floating point; it is possible that future font drawing may allow - * for fractional pixels. + * for fractional pixels. * */ XPLM_API float XPLMMeasureString( - XPLMFontID inFontID, - const char * inChar, - int inNumChars); + XPLMFontID inFontID, + const char * inChar, + int inNumChars); #endif /* XPLM200 */ #ifdef __cplusplus diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMInstance.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMInstance.h index d2a8f2c..f2460fb 100644 --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMInstance.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMInstance.h @@ -2,8 +2,8 @@ #define _XPLMInstance_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -17,11 +17,11 @@ * drawing, then move or manipulate it later (as needed). * * This provides one tremendous benefit: it keeps all dataref operations for - * your object in one place. Because datarefs are main thread only, allowing - * dataref access anywhere is a serious performance bottleneck for the - * simulator---the whole simulator has to pause and wait for each dataref - * access. This performance penalty will only grow worse as X-Plane moves - * toward an ever more heavily multithreaded engine. + * your object in one place. Because datarefs access may be done from the main + * thread only, allowing dataref access anywhere is a serious performance + * bottleneck for the simulator - the whole simulator has to pause and wait + * for each dataref access. This performance penalty will only grow worse as + * X-Plane moves toward an ever more heavily multithreaded engine. * * The instancing API allows X-Plane to isolate all dataref manipulations for * all plugin object drawing to one place, potentially providing huge @@ -30,12 +30,12 @@ * Here's how it works: * * When an instance is created, it provides a list of all datarefs you want to - * manipulate in for the OBJ in the future. This list of datarefs replaces the + * manipulate for the OBJ in the future. This list of datarefs replaces the * ad-hoc collections of dataref objects previously used by art assets. Then, * per-frame, you can manipulate the instance by passing in a "block" of * packed floats representing the current values of the datarefs for your * instance. (Note that the ordering of this set of packed floats must exactly - * match the ordering of the datarefs when you created your instance.) + * match the ordering of the datarefs when you created your instance.) * */ @@ -50,7 +50,7 @@ extern "C" { * Instance Creation and Destruction ***************************************************************************/ /* - * Registers and unregisters instances. + * Registers and unregisters instances. * */ @@ -58,7 +58,7 @@ extern "C" { /* * XPLMInstanceRef * - * An opaque handle to an instance. + * An opaque handle to an instance. * */ typedef void * XPLMInstanceRef; @@ -77,15 +77,15 @@ typedef void * XPLMInstanceRef; * before the object is loaded. This is true even if their data will be * provided via the instance dataref list. * - * * The instance dataref array must be a valid ptr to an array of at least - * one item that is null terminated. That is, if you do not want any - * datarefs, you must passa ptr to an array with a null item. You cannot - * pass null for this. + * * The instance dataref array must be a valid pointer to a null-terminated + * array. That is, if you do not want any datarefs, you must pass a pointer + * to a one-element array containing a null item. You cannot pass null for + * the array itself. * */ XPLM_API XPLMInstanceRef XPLMCreateInstance( - XPLMObjectRef obj, - const char ** datarefs); + XPLMObjectRef obj, + const char ** datarefs); /* * XPLMDestroyInstance @@ -95,11 +95,11 @@ XPLM_API XPLMInstanceRef XPLMCreateInstance( * * Tip: you can release your OBJ ref after you call XPLMCreateInstance as long * as you never use it again; the instance will maintain its own reference to - * the OBJ and the object OBJ be deallocated when the instance is destroyed. + * the OBJ and the object OBJ be deallocated when the instance is destroyed. * */ XPLM_API void XPLMDestroyInstance( - XPLMInstanceRef instance); + XPLMInstanceRef instance); /*************************************************************************** * Instance Manipulation @@ -111,23 +111,23 @@ XPLM_API void XPLMDestroyInstance( * Updates both the position of the instance and all datarefs you registered * for it. Call this from a flight loop callback or UI callback. * - * __DO NOT__ call XPLMInstanceSetPosition from a drawing callback; the whole + * __DO_NOT__ call XPLMInstanceSetPosition from a drawing callback; the whole * point of instancing is that you do not need any drawing callbacks. Setting * instance data from a drawing callback may have undefined consequences, and * the drawing callback hurts FPS unnecessarily. * * The memory pointed to by the data pointer must be large enough to hold one - * float for every data ref you have registered, and must contain valid + * float for every dataref you have registered, and must contain valid * floating point data. * * BUG: before X-Plane 11.50, if you have no dataref registered, you must - * still pass a valid pointer for data and not null. + * still pass a valid pointer for data and not null. * */ XPLM_API void XPLMInstanceSetPosition( - XPLMInstanceRef instance, - const XPLMDrawInfo_t * new_position, - const float * data); + XPLMInstanceRef instance, + const XPLMDrawInfo_t * new_position, + const float * data); #ifdef __cplusplus } diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMMap.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMMap.h index 18c055a..de77144 100644 --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMMap.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMMap.h @@ -2,8 +2,8 @@ #define _XPLMMap_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -17,7 +17,7 @@ * * As of X-Plane 11, map drawing happens in three stages: * - * 1. backgrounds and "fill," + * 1. backgrounds and "fill", * 2. icons, and * 3. labels. * @@ -56,7 +56,7 @@ * In addition to mapping normal latitude/longitude locations into map * coordinates, the projection APIs also let you know the current heading for * north. (Since X-Plane 11 maps can rotate to match the heading of the user's - * aircraft, it's not safe to assume that north is at zero degrees rotation.) + * aircraft, it's not safe to assume that north is at zero degrees rotation.) * */ @@ -75,7 +75,7 @@ extern "C" { * any or all of these callbacks. They allow you to insert your own OpenGL * drawing, text labels, and icons into the X-Plane map at the appropriate * places, allowing your layer to behave as similarly to X-Plane's built-in - * layers as possible. + * layers as possible. * */ @@ -93,7 +93,7 @@ typedef void * XPLMMapLayerID; * XPLMMapProjectionID * * This is an opaque handle for a map projection. Pass it to the projection - * APIs to translate between map coordinates and latitude/longitudes. + * APIs to translate between map coordinates and latitude/longitudes. * */ typedef void * XPLMMapProjectionID; @@ -106,7 +106,7 @@ typedef void * XPLMMapProjectionID; * a different visual representation for the same elements (for instance, the * visual style of the terrain layer changes drastically between the VFR and * IFR layers), or certain layers may be disabled entirely in some map types - * (e.g., localizers are only visible in the IFR low-enroute style). + * (e.g., localizers are only visible in the IFR low-enroute style). * */ enum { @@ -132,17 +132,17 @@ typedef int XPLMMapStyle; * X-Plane icons and labels, but above the built-in "fill" layers (layers * providing major details, like terrain and water). Note, however, that the * relative ordering between the drawing callbacks of different plugins is not - * guaranteed. + * guaranteed. * */ typedef void (* XPLMMapDrawingCallback_f)( - XPLMMapLayerID inLayer, - const float * inMapBoundsLeftTopRightBottom, - float zoomRatio, - float mapUnitsPerUserInterfaceUnit, - XPLMMapStyle mapStyle, - XPLMMapProjectionID projection, - void * inRefcon); + XPLMMapLayerID inLayer, + const float * inMapBoundsLeftTopRightBottom, + float zoomRatio, + float mapUnitsPerUserInterfaceUnit, + XPLMMapStyle mapStyle, + XPLMMapProjectionID projection, + void * inRefcon); /* * XPLMMapIconDrawingCallback_f @@ -158,17 +158,17 @@ typedef void (* XPLMMapDrawingCallback_f)( * built-in X-Plane map icons of the same layer type ("fill" or "markings," as * determined by the XPLMMapLayerType in your XPLMCreateMapLayer_t). Note, * however, that the relative ordering between the drawing callbacks of - * different plugins is not guaranteed. + * different plugins is not guaranteed. * */ typedef void (* XPLMMapIconDrawingCallback_f)( - XPLMMapLayerID inLayer, - const float * inMapBoundsLeftTopRightBottom, - float zoomRatio, - float mapUnitsPerUserInterfaceUnit, - XPLMMapStyle mapStyle, - XPLMMapProjectionID projection, - void * inRefcon); + XPLMMapLayerID inLayer, + const float * inMapBoundsLeftTopRightBottom, + float zoomRatio, + float mapUnitsPerUserInterfaceUnit, + XPLMMapStyle mapStyle, + XPLMMapProjectionID projection, + void * inRefcon); /* * XPLMMapLabelDrawingCallback_f @@ -184,17 +184,17 @@ typedef void (* XPLMMapIconDrawingCallback_f)( * built-in map icons and labels of the same layer type ("fill" or "markings," * as determined by the XPLMMapLayerType in your XPLMCreateMapLayer_t). Note, * however, that the relative ordering between the drawing callbacks of - * different plugins is not guaranteed. + * different plugins is not guaranteed. * */ typedef void (* XPLMMapLabelDrawingCallback_f)( - XPLMMapLayerID inLayer, - const float * inMapBoundsLeftTopRightBottom, - float zoomRatio, - float mapUnitsPerUserInterfaceUnit, - XPLMMapStyle mapStyle, - XPLMMapProjectionID projection, - void * inRefcon); + XPLMMapLayerID inLayer, + const float * inMapBoundsLeftTopRightBottom, + float zoomRatio, + float mapUnitsPerUserInterfaceUnit, + XPLMMapStyle mapStyle, + XPLMMapProjectionID projection, + void * inRefcon); #endif /* XPLM300 */ #if defined(XPLM300) @@ -205,7 +205,7 @@ typedef void (* XPLMMapLabelDrawingCallback_f)( * These are various "bookkeeping" callbacks that your map layer can receive * (if you provide the callback in your XPLMCreateMapLayer_t). They allow you * to manage the lifecycle of your layer, as well as cache any - * computationally-intensive preparation you might need for drawing. + * computationally-intensive preparation you might need for drawing. * */ @@ -229,26 +229,26 @@ typedef void (* XPLMMapLabelDrawingCallback_f)( * prepare cache calls, nor will any draw call give you bounds outside these * total map bounds. So, if you cache the projected map coordinates of all the * items you might want to draw in the total map area, you can be guaranteed - * that no draw call will be asked to do any new work. + * that no draw call will be asked to do any new work. * */ typedef void (* XPLMMapPrepareCacheCallback_f)( - XPLMMapLayerID inLayer, - const float * inTotalMapBoundsLeftTopRightBottom, - XPLMMapProjectionID projection, - void * inRefcon); + XPLMMapLayerID inLayer, + const float * inTotalMapBoundsLeftTopRightBottom, + XPLMMapProjectionID projection, + void * inRefcon); /* * XPLMMapWillBeDeletedCallback_f * * Called just before your map layer gets deleted. Because SDK-created map * layers have the same lifetime as the X-Plane map that contains them, if the - * map gets unloaded from memory, your layer will too. + * map gets unloaded from memory, your layer will too. * */ typedef void (* XPLMMapWillBeDeletedCallback_f)( - XPLMMapLayerID inLayer, - void * inRefcon); + XPLMMapLayerID inLayer, + void * inRefcon); #endif /* XPLM300 */ #if defined(XPLM300) @@ -265,7 +265,7 @@ typedef void (* XPLMMapWillBeDeletedCallback_f)( * Your layer's lifetime will be determined by the lifetime of the map it is * created in. If the map is destroyed (on the X-Plane side), your layer will * be too, and you'll receive a callback to your - * XPLMMapWillBeDeletedCallback_f. + * XPLMMapWillBeDeletedCallback_f. * */ @@ -274,17 +274,17 @@ typedef void (* XPLMMapWillBeDeletedCallback_f)( * XPLMMapLayerType * * Indicates the type of map layer you are creating. Fill layers will always - * be drawn beneath markings layers. + * be drawn beneath markings layers. * */ enum { - /* A layer that draws "fill" graphics, like weather patterns, terrain, etc. * - * Fill layers frequently cover a large portion of the visible map area. */ + /* A layer that draws "fill" graphics, like weather patterns, terrain, etc. * + * Fill layers frequently cover a large portion of the visible map area. */ xplm_MapLayer_Fill = 0, - /* A layer that provides markings for particular map features, like NAVAIDs, * - * airports, etc. Even dense markings layers cover a small portion of the * - * total map area. */ + /* A layer that provides markings for particular map features, like NAVAIDs, * + * airports, etc. Even dense markings layers cover a small portion of the * + * total map area. */ xplm_MapLayer_Markings = 1, @@ -309,45 +309,45 @@ typedef int XPLMMapLayerType; * * Each layer must be associated with exactly one map instance in X-Plane. * That map, and that map alone, will call your callbacks. Likewise, when that - * map is deleted, your layer will be as well. + * map is deleted, your layer will be as well. * */ typedef struct { - /* Used to inform XPLMCreateMapLayer() of the SDK version you compiled * - * against; should always be set to sizeof(XPLMCreateMapLayer_t) */ + /* Used to inform XPLMCreateMapLayer() of the SDK version you compiled * + * against; should always be set to sizeof(XPLMCreateMapLayer_t) */ int structSize; - /* Globally unique string identifying the map you want this layer to appear * - * in. As of XPLM300, this is limited to one of XPLM_MAP_USER_INTERFACE or * - * XPLM_MAP_IOS */ + /* Globally unique string identifying the map you want this layer to appear * + * in. As of XPLM300, this is limited to one of XPLM_MAP_USER_INTERFACE or * + * XPLM_MAP_IOS */ const char * mapToCreateLayerIn; - /* The type of layer you are creating, used to determine draw order (all * - * plugin-created markings layers are drawn above all plugin-created fill * - * layers) */ + /* The type of layer you are creating, used to determine draw order (all * + * plugin-created markings layers are drawn above all plugin-created fill * + * layers) */ XPLMMapLayerType layerType; - /* Optional callback to inform you this layer is being deleted (due to its * - * owning map being destroyed) */ + /* Optional callback to inform you this layer is being deleted (due to its * + * owning map being destroyed) */ XPLMMapWillBeDeletedCallback_f willBeDeletedCallback; - /* Optional callback you want to use to prepare your draw cache when the map * - * bounds change (set to NULL if you don't want this callback) */ + /* Optional callback you want to use to prepare your draw cache when the map * + * bounds change (set to NULL if you don't want this callback) */ XPLMMapPrepareCacheCallback_f prepCacheCallback; - /* Optional callback you want to use for arbitrary OpenGL drawing, which goes * - * beneath all icons in the map's layering system (set to NULL if you don't * - * want this callback) */ + /* Optional callback you want to use for arbitrary OpenGL drawing, which goes * + * beneath all icons in the map's layering system (set to NULL if you don't * + * want this callback) */ XPLMMapDrawingCallback_f drawCallback; - /* Optional callback you want to use for drawing icons, which go above all * - * built-in X-Plane icons (except the aircraft) in the map's layering system * - * (set to NULL if you don't want this callback) */ + /* Optional callback you want to use for drawing icons, which go above all * + * built-in X-Plane icons (except the aircraft) in the map's layering system * + * (set to NULL if you don't want this callback) */ XPLMMapIconDrawingCallback_f iconCallback; - /* Optional callback you want to use for drawing map labels, which go above * - * all built-in X-Plane icons and labels (except those of aircraft) in the * - * map's layering system (set to NULL if you don't want this callback) */ + /* Optional callback you want to use for drawing map labels, which go above * + * all built-in X-Plane icons and labels (except those of aircraft) in the * + * map's layering system (set to NULL if you don't want this callback) */ XPLMMapLabelDrawingCallback_f labelCallback; - /* True if you want a checkbox to be created in the map UI to toggle this * - * layer on and off; false if the layer should simply always be enabled */ + /* True if you want a checkbox to be created in the map UI to toggle this * + * layer on and off; false if the layer should simply always be enabled */ int showUiToggle; - /* Short label to use for this layer in the user interface */ + /* Short label to use for this layer in the user interface */ const char * layerName; - /* A reference to arbitrary data that will be passed to your callbacks */ + /* A reference to arbitrary data that will be passed to your callbacks */ void * refcon; } XPLMCreateMapLayer_t; @@ -355,7 +355,7 @@ typedef struct { * XPLMCreateMapLayer * * This routine creates a new map layer. You pass in an XPLMCreateMapLayer_t - * structure with all of the fields set in. You must set the structSize of + * structure with all of the fields defined. You must set the structSize of * the structure to the size of the actual structure you used. * * Returns NULL if the layer creation failed. This happens most frequently @@ -363,22 +363,22 @@ typedef struct { * XPLMCreateMapLayer_t::mapToCreateLayerIn field doesn't exist (that is, if * XPLMMapExists() returns 0 for the specified map). You can use * XPLMRegisterMapCreationHook() to get a notification each time a new map is - * opened in X-Plane, at which time you can create layers in it. + * opened in X-Plane, at which time you can create layers in it. * */ XPLM_API XPLMMapLayerID XPLMCreateMapLayer( - XPLMCreateMapLayer_t * inParams); + XPLMCreateMapLayer_t * inParams); /* * XPLMDestroyMapLayer * * Destroys a map layer you created (calling your * XPLMMapWillBeDeletedCallback_f if applicable). Returns true if a deletion - * took place. + * took place. * */ XPLM_API int XPLMDestroyMapLayer( - XPLMMapLayerID inLayer); + XPLMMapLayerID inLayer); /* * XPLMMapCreatedCallback_f @@ -387,12 +387,12 @@ XPLM_API int XPLMDestroyMapLayer( * X-Plane. This is the best time to add a custom map layer using * XPLMCreateMapLayer(). * - * No OpenGL drawing is permitted within this callback. + * No OpenGL drawing is permitted within this callback. * */ typedef void (* XPLMMapCreatedCallback_f)( - const char * mapIdentifier, - void * refcon); + const char * mapIdentifier, + void * refcon); /* * XPLMRegisterMapCreationHook @@ -402,23 +402,23 @@ typedef void (* XPLMMapCreatedCallback_f)( * map layer using XPLMCreateMapLayer(). * * Note that you will not be notified about any maps that already exist---you - * can use XPLMMapExists() to check for maps that were created previously. + * can use XPLMMapExists() to check for maps that were created previously. * */ XPLM_API void XPLMRegisterMapCreationHook( - XPLMMapCreatedCallback_f callback, - void * refcon); + XPLMMapCreatedCallback_f callback, + void * refcon); /* * XPLMMapExists * * Returns 1 if the map with the specified identifier already exists in * X-Plane. In that case, you can safely call XPLMCreateMapLayer() specifying - * that your layer should be added to that map. + * that your layer should be added to that map. * */ XPLM_API int XPLMMapExists( - const char * mapIdentifier); + const char * mapIdentifier); #endif /* XPLM300 */ #if defined(XPLM300) @@ -437,7 +437,7 @@ XPLM_API int XPLMMapExists( * xplm_MapLayer_Fill get drawn beneath all xplm_MapLayer_Markings layers. * Likewise, all OpenGL drawing (performed in your layer's * XPLMMapDrawingCallback_f) will appear beneath any icons and labels you - * draw. + * draw. * */ @@ -450,14 +450,14 @@ XPLM_API int XPLMMapExists( * rotated such that "up" matches the user's aircraft, but you may want to * draw a text label such that it is always rotated zero degrees relative to * the user's perspective. In that case, you would have it draw with UI - * orientation. + * orientation. * */ enum { - /* Orient such that a 0 degree rotation matches the map's north */ + /* Orient such that a 0 degree rotation matches the map's north */ xplm_MapOrientation_Map = 0, - /* Orient such that a 0 degree rotation is "up" relative to the user interface*/ + /* Orient such that a 0 degree rotation is "up" relative to the user interface*/ xplm_MapOrientation_UI = 1, @@ -484,7 +484,7 @@ typedef int XPLMMapOrientation; * PNGs. * * The UV coordinates used here treat the texture you load as being comprised - * of a number of identically sized "cells." You specify the width and height + * of a number of identically sized "cells". You specify the width and height * in cells (ds and dt, respectively), as well as the coordinates within the * cell grid for the sub-image you'd like to draw. * @@ -494,21 +494,21 @@ typedef int XPLMMapOrientation; * * This function is only valid from within an XPLMIconDrawingCallback_t (but * you can request an arbitrary number of icons to be drawn from within your - * callback). + * callback). * */ XPLM_API void XPLMDrawMapIconFromSheet( - XPLMMapLayerID layer, - const char * inPngPath, - int s, - int t, - int ds, - int dt, - float mapX, - float mapY, - XPLMMapOrientation orientation, - float rotationDegrees, - float mapWidth); + XPLMMapLayerID layer, + const char * inPngPath, + int s, + int t, + int ds, + int dt, + float mapX, + float mapY, + XPLMMapOrientation orientation, + float rotationDegrees, + float mapWidth); /* * XPLMDrawMapLabel @@ -516,16 +516,16 @@ XPLM_API void XPLMDrawMapIconFromSheet( * Enables plugin-created map layers to draw text labels using X-Plane's * built-in labeling functionality. Only valid from within an * XPLMMapLabelDrawingCallback_f (but you can request an arbitrary number of - * text labels to be drawn from within your callback). + * text labels to be drawn from within your callback). * */ XPLM_API void XPLMDrawMapLabel( - XPLMMapLayerID layer, - const char * inText, - float mapX, - float mapY, - XPLMMapOrientation orientation, - float rotationDegrees); + XPLMMapLayerID layer, + const char * inText, + float mapX, + float mapY, + XPLMMapOrientation orientation, + float rotationDegrees); #endif /* XPLM300 */ #if defined(XPLM300) @@ -544,7 +544,7 @@ XPLM_API void XPLMDrawMapLabel( * * Finally, the map projection can give you the current rotation of the map. * Since X-Plane 11 maps can rotate to match the heading of the aircraft, the - * map's rotation can potentially change every frame. + * map's rotation can potentially change every frame. * */ @@ -557,15 +557,15 @@ XPLM_API void XPLMDrawMapLabel( * * Only valid from within a map layer callback (one of * XPLMMapPrepareCacheCallback_f, XPLMMapDrawingCallback_f, - * XPLMMapIconDrawingCallback_f, or XPLMMapLabelDrawingCallback_f.) + * XPLMMapIconDrawingCallback_f, or XPLMMapLabelDrawingCallback_f.) * */ XPLM_API void XPLMMapProject( - XPLMMapProjectionID projection, - double latitude, - double longitude, - float * outX, - float * outY); + XPLMMapProjectionID projection, + double latitude, + double longitude, + float * outX, + float * outY); /* * XPLMMapUnproject @@ -575,15 +575,15 @@ XPLM_API void XPLMMapProject( * * Only valid from within a map layer callback (one of * XPLMMapPrepareCacheCallback_f, XPLMMapDrawingCallback_f, - * XPLMMapIconDrawingCallback_f, or XPLMMapLabelDrawingCallback_f.) + * XPLMMapIconDrawingCallback_f, or XPLMMapLabelDrawingCallback_f.) * */ XPLM_API void XPLMMapUnproject( - XPLMMapProjectionID projection, - float mapX, - float mapY, - double * outLatitude, - double * outLongitude); + XPLMMapProjectionID projection, + float mapX, + float mapY, + double * outLatitude, + double * outLongitude); /* * XPLMMapScaleMeter @@ -593,35 +593,32 @@ XPLM_API void XPLMMapUnproject( * * Only valid from within a map layer callback (one of * XPLMMapPrepareCacheCallback_f, XPLMMapDrawingCallback_f, - * XPLMMapIconDrawingCallback_f, or XPLMMapLabelDrawingCallback_f.) + * XPLMMapIconDrawingCallback_f, or XPLMMapLabelDrawingCallback_f.) * */ XPLM_API float XPLMMapScaleMeter( - XPLMMapProjectionID projection, - float mapX, - float mapY); + XPLMMapProjectionID projection, + float mapX, + float mapY); /* * XPLMMapGetNorthHeading * - * Returns the heading (in degrees clockwise from "up") that corresponds to - * north at a given point on the map. In other words, if your runway has a - * true heading of 360, you would use "north" as the Cartesian angle at which - * to draw the runway on the map. (You would add the result of - * XPLMMapGetNorthHeading() to your true heading to get the map angle.) - * - * This is necessary becuase X-Plane's map can be rotated to match your - * aircraft's orientation; north is not always "up." + * Returns the heading (in degrees clockwise) from the positive Y axis in the + * cartesian mapping coordinate system to true north at the point passed in. + * You can use it as a clockwise rotational offset to align icons and other + * 2-d drawing with true north on the map, compensating for rotations in the + * map due to projection. * * Only valid from within a map layer callback (one of * XPLMMapPrepareCacheCallback_f, XPLMMapDrawingCallback_f, - * XPLMMapIconDrawingCallback_f, or XPLMMapLabelDrawingCallback_f.) + * XPLMMapIconDrawingCallback_f, or XPLMMapLabelDrawingCallback_f.) * */ XPLM_API float XPLMMapGetNorthHeading( - XPLMMapProjectionID projection, - float mapX, - float mapY); + XPLMMapProjectionID projection, + float mapX, + float mapY); #endif /* XPLM300 */ #ifdef __cplusplus diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMMenus.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMMenus.h old mode 100755 new mode 100644 index f5802ab..2c8fcd0 --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMMenus.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMMenus.h @@ -2,8 +2,8 @@ #define _XPLMMenus_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -15,7 +15,7 @@ * creating a menu and then creating items. Menus are referred to by an * opaque ID. Items are referred to by (zero-based) index number. * - * Menus are "sandboxed" between plugins---no plugin can access the menus of + * Menus are "sandboxed" between plugins - no plugin can access the menus of * any other plugin. Furthermore, all menu indices are relative to your * plugin's menus only; if your plugin creates two sub-menus in the Plugins * menu at different times, it doesn't matter how many other plugins also @@ -36,7 +36,7 @@ * Menu text in X-Plane is UTF8; X-Plane's character set covers latin, greek * and cyrillic characters, Katakana, as well as some Japanese symbols. Some * APIs have a inDeprecatedAndIgnored parameter that used to select a - * character set; since X-Plane 9 all localization is done via UTF-8 only. + * character set; since X-Plane 9 all localization is done via UTF-8 only. * */ @@ -55,18 +55,18 @@ extern "C" { * XPLMMenuCheck * * These enumerations define the various 'check' states for an X-Plane menu. - * 'checking' in X-Plane actually appears as a light which may or may not be - * lit. So there are three possible states. + * 'Checking' in X-Plane actually appears as a light which may or may not be + * lit. So there are three possible states. * */ enum { - /* there is no symbol to the left of the menu item. */ + /* There is no symbol to the left of the menu item. */ xplm_Menu_NoCheck = 0, - /* the menu has a mark next to it that is unmarked (not lit). */ + /* The menu has a mark next to it that is unmarked (not lit). */ xplm_Menu_Unchecked = 1, - /* the menu has a mark next to it that is checked (lit). */ + /* The menu has a mark next to it that is checked (lit). */ xplm_Menu_Checked = 2, @@ -76,7 +76,7 @@ typedef int XPLMMenuCheck; /* * XPLMMenuID * - * This is a unique ID for each menu you create. + * This is a unique ID for each menu you create. * */ typedef void * XPLMMenuID; @@ -86,18 +86,18 @@ typedef void * XPLMMenuID; * * A menu handler function takes two reference pointers, one for the menu * (specified when the menu was created) and one for the item (specified when - * the item was created). + * the item was created). * */ typedef void (* XPLMMenuHandler_f)( - void * inMenuRef, - void * inItemRef); + void * inMenuRef, + void * inItemRef); /* * XPLMFindPluginsMenu * * This function returns the ID of the plug-ins menu, which is created for you - * at startup. + * at startup. * */ XPLM_API XPLMMenuID XPLMFindPluginsMenu(void); @@ -115,7 +115,7 @@ XPLM_API XPLMMenuID XPLMFindPluginsMenu(void); * * Only plugins loaded with the user's current aircraft are allowed to access * the aircraft menu. For all other plugins, this will return NULL, and any - * attempts to add menu items to it will fail. + * attempts to add menu items to it will fail. * */ XPLM_API XPLMMenuID XPLMFindAircraftMenu(void); @@ -133,25 +133,25 @@ XPLM_API XPLMMenuID XPLMFindAircraftMenu(void); * contains submenus). * * Important: you must pass a valid, non-empty menu title even if the menu is - * a submenu where the title is not visible. + * a submenu where the title is not visible. * */ XPLM_API XPLMMenuID XPLMCreateMenu( - const char * inName, - XPLMMenuID inParentMenu, - int inParentItem, - XPLMMenuHandler_f inHandler, - void * inMenuRef); + const char * inName, + XPLMMenuID inParentMenu, + int inParentItem, + XPLMMenuHandler_f inHandler, + void * inMenuRef); /* * XPLMDestroyMenu * * This function destroys a menu that you have created. Use this to remove a - * submenu if necessary. (Normally this function will not be necessary.) + * submenu if necessary. (Normally this function will not be necessary.) * */ XPLM_API void XPLMDestroyMenu( - XPLMMenuID inMenuID); + XPLMMenuID inMenuID); /* * XPLMClearAllMenuItems @@ -161,7 +161,7 @@ XPLM_API void XPLMDestroyMenu( * */ XPLM_API void XPLMClearAllMenuItems( - XPLMMenuID inMenuID); + XPLMMenuID inMenuID); /* * XPLMAppendMenuItem @@ -179,14 +179,14 @@ XPLM_API void XPLMClearAllMenuItems( * Plugins in the intervening time: your sub-menus will be given menu indices * 0 and 1. (The SDK does some work in the back-end to filter out menus that * are irrelevant to your plugin in order to deliver this consistency for each - * plugin.) + * plugin.) * */ XPLM_API int XPLMAppendMenuItem( - XPLMMenuID inMenu, - const char * inItemName, - void * inItemRef, - int inDeprecatedAndIgnored); + XPLMMenuID inMenu, + const char * inItemName, + void * inItemRef, + int inDeprecatedAndIgnored); #if defined(XPLM300) /* @@ -202,13 +202,13 @@ XPLM_API int XPLMAppendMenuItem( * menu argument). * * Like XPLMAppendMenuItem(), all menu indices are relative to your plugin's - * menus only. + * menus only. * */ XPLM_API int XPLMAppendMenuItemWithCommand( - XPLMMenuID inMenu, - const char * inItemName, - XPLMCommandRef inCommandToExecute); + XPLMMenuID inMenu, + const char * inItemName, + XPLMCommandRef inCommandToExecute); #endif /* XPLM300 */ /* @@ -217,70 +217,70 @@ XPLM_API int XPLMAppendMenuItemWithCommand( * This routine adds a separator to the end of a menu. * * Returns a negative index if the append failed (due to an invalid parent - * menu argument). + * menu argument). * */ XPLM_API void XPLMAppendMenuSeparator( - XPLMMenuID inMenu); + XPLMMenuID inMenu); /* * XPLMSetMenuItemName * * This routine changes the name of an existing menu item. Pass in the menu - * ID and the index of the menu item. + * ID and the index of the menu item. * */ XPLM_API void XPLMSetMenuItemName( - XPLMMenuID inMenu, - int inIndex, - const char * inItemName, - int inDeprecatedAndIgnored); + XPLMMenuID inMenu, + int inIndex, + const char * inItemName, + int inDeprecatedAndIgnored); /* * XPLMCheckMenuItem * - * Set whether a menu item is checked. Pass in the menu ID and item index. + * Set whether a menu item is checked. Pass in the menu ID and item index. * */ XPLM_API void XPLMCheckMenuItem( - XPLMMenuID inMenu, - int index, - XPLMMenuCheck inCheck); + XPLMMenuID inMenu, + int index, + XPLMMenuCheck inCheck); /* * XPLMCheckMenuItemState * * This routine returns whether a menu item is checked or not. A menu item's - * check mark may be on or off, or a menu may not have an icon at all. + * check mark may be on or off, or a menu may not have an icon at all. * */ XPLM_API void XPLMCheckMenuItemState( - XPLMMenuID inMenu, - int index, - XPLMMenuCheck * outCheck); + XPLMMenuID inMenu, + int index, + XPLMMenuCheck * outCheck); /* * XPLMEnableMenuItem * - * Sets whether this menu item is enabled. Items start out enabled. + * Sets whether this menu item is enabled. Items start out enabled. * */ XPLM_API void XPLMEnableMenuItem( - XPLMMenuID inMenu, - int index, - int enabled); + XPLMMenuID inMenu, + int index, + int enabled); #if defined(XPLM210) /* * XPLMRemoveMenuItem * * Removes one item from a menu. Note that all menu items below are moved up - * one; your plugin must track the change in index numbers. + * one; your plugin must track the change in index numbers. * */ XPLM_API void XPLMRemoveMenuItem( - XPLMMenuID inMenu, - int inIndex); + XPLMMenuID inMenu, + int inIndex); #endif /* XPLM210 */ #ifdef __cplusplus diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMNavigation.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMNavigation.h old mode 100755 new mode 100644 index 716caf0..c26ed3b --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMNavigation.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMNavigation.h @@ -2,8 +2,8 @@ #define _XPLMNavigation_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -18,7 +18,7 @@ * * You can also use this API to program the FMS. You must use the navigation * APIs to find the nav-aids you want to program into the FMS, since the FMS - * is powered internally by X-Plane's navigation database. + * is powered internally by X-Plane's navigation database. * */ @@ -42,7 +42,7 @@ extern "C" { * NOTE: xplm_Nav_LatLon is a specific lat-lon coordinate entered into the * FMS. It will not exist in the database, and cannot be programmed into the * FMS. Querying the FMS for navaids will return it. Use - * XPLMSetFMSEntryLatLon to set a lat/lon waypoint. + * XPLMSetFMSEntryLatLon to set a lat/lon waypoint. * */ enum { @@ -72,6 +72,8 @@ enum { xplm_Nav_LatLon = 2048, + xplm_Nav_TACAN = 4096, + }; typedef int XPLMNavType; @@ -87,7 +89,7 @@ typedef int XPLMNavType; * Use XPLMNavRef to refer to a nav-aid. * * XPLM_NAV_NOT_FOUND is returned by functions that return an XPLMNavRef when - * the iterator must be invalid. + * the iterator must be invalid. * */ typedef int XPLMNavRef; @@ -99,7 +101,7 @@ typedef int XPLMNavRef; * * This returns the very first navaid in the database. Use this to traverse * the entire database. Returns XPLM_NAV_NOT_FOUND if the nav database is - * empty. + * empty. * */ XPLM_API XPLMNavRef XPLMGetFirstNavAid(void); @@ -107,44 +109,44 @@ XPLM_API XPLMNavRef XPLMGetFirstNavAid(void); /* * XPLMGetNextNavAid * - * Given a valid nav aid ref, this routine returns the next navaid. It - * returns XPLM_NAV_NOT_FOUND if the nav aid passed in was invalid or if the - * navaid passed in was the last one in the database. Use this routine to - * iterate across all like-typed navaids or the entire database. + * Given a valid navaid ref, this routine returns the next navaid. It returns + * XPLM_NAV_NOT_FOUND if the navaid passed in was invalid or if the navaid + * passed in was the last one in the database. Use this routine to iterate + * across all like-typed navaids or the entire database. * */ XPLM_API XPLMNavRef XPLMGetNextNavAid( - XPLMNavRef inNavAidRef); + XPLMNavRef inNavAidRef); /* * XPLMFindFirstNavAidOfType * * This routine returns the ref of the first navaid of the given type in the * database or XPLM_NAV_NOT_FOUND if there are no navaids of that type in the - * database. You must pass exactly one nav aid type to this routine. + * database. You must pass exactly one navaid type to this routine. * */ XPLM_API XPLMNavRef XPLMFindFirstNavAidOfType( - XPLMNavType inType); + XPLMNavType inType); /* * XPLMFindLastNavAidOfType * * This routine returns the ref of the last navaid of the given type in the * database or XPLM_NAV_NOT_FOUND if there are no navaids of that type in the - * database. You must pass exactly one nav aid type to this routine. + * database. You must pass exactly one navaid type to this routine. * */ XPLM_API XPLMNavRef XPLMFindLastNavAidOfType( - XPLMNavType inType); + XPLMNavType inType); /* * XPLMFindNavAid * * This routine provides a number of searching capabilities for the nav - * database. XPLMFindNavAid will search through every nav aid whose type is - * within inType (multiple types may be added together) and return any - * nav-aids found based on the following rules: + * database. XPLMFindNavAid will search through every navaid whose type is + * within inType (multiple types may be added together) and return any navaids + * found based on the following rules: * * * If inLat and inLon are not NULL, the navaid nearest to that lat/lon will * be returned, otherwise the last navaid found will be returned. @@ -162,17 +164,17 @@ 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 nearest airport whose name contains "Chicago". + * * Find the VOR whose ID is "BOS". + * * Find the nearest airport whose name contains "Chicago". * */ XPLM_API XPLMNavRef XPLMFindNavAid( - const char * inNameFragment, /* Can be NULL */ - const char * inIDFragment, /* Can be NULL */ - float * inLat, /* Can be NULL */ - float * inLon, /* Can be NULL */ - int * inFrequency, /* Can be NULL */ - XPLMNavType inType); + const char * inNameFragment, /* Can be NULL */ + const char * inIDFragment, /* Can be NULL */ + float * inLat, /* Can be NULL */ + float * inLon, /* Can be NULL */ + int * inFrequency, /* Can be NULL */ + XPLMNavType inType); /* * XPLMGetNavAidInfo @@ -191,32 +193,32 @@ XPLM_API XPLMNavRef XPLMFindNavAid( * The outReg parameter tells if the navaid is within the local "region" of * loaded DSFs. (This information may not be particularly useful to plugins.) * The parameter is a single byte value 1 for true or 0 for false, not a C - * string. + * string. * */ XPLM_API void XPLMGetNavAidInfo( - XPLMNavRef inRef, - XPLMNavType * outType, /* Can be NULL */ - float * outLatitude, /* Can be NULL */ - float * outLongitude, /* Can be NULL */ - float * outHeight, /* Can be NULL */ - int * outFrequency, /* Can be NULL */ - float * outHeading, /* Can be NULL */ - char * outID, /* Can be NULL */ - char * outName, /* Can be NULL */ - char * outReg); /* Can be NULL */ + XPLMNavRef inRef, + XPLMNavType * outType, /* Can be NULL */ + float * outLatitude, /* Can be NULL */ + float * outLongitude, /* Can be NULL */ + float * outHeight, /* Can be NULL */ + int * outFrequency, /* Can be NULL */ + float * outHeading, /* Can be NULL */ + char * outID, /* Can be NULL */ + char * outName, /* Can be NULL */ + char * outReg); /* Can be NULL */ /*************************************************************************** * FLIGHT MANAGEMENT COMPUTER ***************************************************************************/ /* * Note: the FMS works based on an array of entries. Indices into the array - * are zero-based. Each entry is a nav-aid plus an altitude. The FMS tracks + * are zero-based. Each entry is a navaid plus an altitude. The FMS tracks * the currently displayed entry and the entry that it is flying to. * * The FMS must be programmed with contiguous entries, so clearing an entry at * the end shortens the effective flight plan. There is a max of 100 - * waypoints in the flight plan. + * waypoints in the flight plan. * */ @@ -224,7 +226,7 @@ XPLM_API void XPLMGetNavAidInfo( /* * XPLMCountFMSEntries * - * This routine returns the number of entries in the FMS. + * This routine returns the number of entries in the FMS. * */ XPLM_API int XPLMCountFMSEntries(void); @@ -232,7 +234,7 @@ XPLM_API int XPLMCountFMSEntries(void); /* * XPLMGetDisplayedFMSEntry * - * This routine returns the index of the entry the pilot is viewing. + * This routine returns the index of the entry the pilot is viewing. * */ XPLM_API int XPLMGetDisplayedFMSEntry(void); @@ -240,7 +242,7 @@ XPLM_API int XPLMGetDisplayedFMSEntry(void); /* * XPLMGetDestinationFMSEntry * - * This routine returns the index of the entry the FMS is flying to. + * This routine returns the index of the entry the FMS is flying to. * */ XPLM_API int XPLMGetDestinationFMSEntry(void); @@ -252,16 +254,17 @@ XPLM_API int XPLMGetDestinationFMSEntry(void); * */ XPLM_API void XPLMSetDisplayedFMSEntry( - int inIndex); + int inIndex); /* * 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( - int inIndex); + int inIndex); /* * XPLMGetFMSEntryInfo @@ -281,17 +284,17 @@ XPLM_API void XPLMSetDestinationFMSEntry( * 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. + * passing the pointer to this function. * */ XPLM_API void XPLMGetFMSEntryInfo( - 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 */ + 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 */ /* * XPLMSetFMSEntryInfo @@ -303,38 +306,277 @@ XPLM_API void XPLMGetFMSEntryInfo( * */ XPLM_API void XPLMSetFMSEntryInfo( - int inIndex, - XPLMNavRef inRef, - int inAltitude); + int inIndex, + XPLMNavRef inRef, + int inAltitude); /* * XPLMSetFMSEntryLatLon * * This routine changes the entry in the FMS to a lat/lon entry with the given - * coordinates. + * coordinates. * */ XPLM_API void XPLMSetFMSEntryLatLon( - int inIndex, - float inLat, - float inLon, - int inAltitude); + int inIndex, + float inLat, + float inLon, + int inAltitude); /* * XPLMClearFMSEntry * * This routine clears the given entry, potentially shortening the flight - * plan. + * plan. * */ XPLM_API void XPLMClearFMSEntry( - int inIndex); + 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, NDBs and TACANs. 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 ***************************************************************************/ /* - * These APIs let you read data from the GPS unit. + * These APIs let you read data from the GPS unit. * */ @@ -342,7 +584,7 @@ XPLM_API void XPLMClearFMSEntry( * XPLMGetGPSDestinationType * * This routine returns the type of the currently selected GPS destination, - * one of fix, airport, VOR or NDB. + * one of fix, airport, VOR or NDB. * */ XPLM_API XPLMNavType XPLMGetGPSDestinationType(void); @@ -350,7 +592,7 @@ XPLM_API XPLMNavType XPLMGetGPSDestinationType(void); /* * XPLMGetGPSDestination * - * This routine returns the current GPS destination. + * This routine returns the current GPS destination. * */ XPLM_API XPLMNavRef XPLMGetGPSDestination(void); diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMPlanes.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMPlanes.h old mode 100755 new mode 100644 index 486302d..bd5b84d --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMPlanes.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMPlanes.h @@ -2,8 +2,8 @@ #define _XPLMPlanes_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -16,7 +16,7 @@ * * *Note*: unlike almost all other APIs in the SDK, aircraft paths are _full_ * file system paths for historical reasons. You'll need to prefix all - * relative paths with the X-Plane path as accessed via XPLMGetSystemPath. + * relative paths with the X-Plane path as accessed via XPLMGetSystemPath. * */ @@ -35,20 +35,20 @@ extern "C" { * * This routine changes the user's aircraft. Note that this will reinitialize * the user to be on the nearest airport's first runway. Pass in a full path - * (hard drive and everything including the .acf extension) to the .acf file. + * (hard drive and everything including the .acf extension) to the .acf file. * */ XPLM_API void XPLMSetUsersAircraft( - const char * inAircraftPath); + const char * inAircraftPath); /* * XPLMPlaceUserAtAirport * * This routine places the user at a given airport. Specify the airport by - * its X-Plane airport ID (e.g. 'KBOS'). + * its X-Plane airport ID (e.g. 'KBOS'). * */ XPLM_API void XPLMPlaceUserAtAirport( - const char * inAirportCode); + const char * inAirportCode); #if defined(XPLM300) /* * XPLMPlaceUserAtLocation @@ -59,15 +59,15 @@ XPLM_API void XPLMPlaceUserAtAirport( * As with in-air starts initiated from the X-Plane user interface, the * aircraft will always start with its engines running, regardless of the * user's preferences (i.e., regardless of what the dataref - * `sim/operation/prefs/startup_running` says). + * `sim/operation/prefs/startup_running` says). * */ XPLM_API void XPLMPlaceUserAtLocation( - double latitudeDegrees, - double longitudeDegrees, - float elevationMetersMSL, - float headingDegreesTrue, - float speedMetersPerSecond); + double latitudeDegrees, + double longitudeDegrees, + float elevationMetersMSL, + float headingDegreesTrue, + float speedMetersPerSecond); #endif /* XPLM300 */ /*************************************************************************** * GLOBAL AIRCRAFT ACCESS @@ -89,32 +89,32 @@ XPLM_API void XPLMPlaceUserAtLocation( * calculates what the actual controls look like based on the .acf file for * that airplane. Note for the yoke inputs, this is what the pilot of the * plane has commanded (post artificial stability system if there were one) - * and affects aelerons, rudder, etc. It is not necessarily related to the - * actual position of the plane! + * and affects ailerons, rudder, etc. It is not necessarily related to the + * actual position of the plane's surfaces! * */ typedef struct { - /* The size of the draw state struct. */ + /* The size of the draw state struct. */ int structSize; - /* A ratio from [0..1] describing how far the landing gear is extended. */ + /* A ratio from [0..1] describing how far the landing gear is extended. */ float gearPosition; - /* Ratio of flap deployment, 0 = up, 1 = full deploy. */ + /* Ratio of flap deployment, 0 = up, 1 = full deploy. */ float flapRatio; - /* Ratio of spoiler deployment, 0 = none, 1 = full deploy. */ + /* Ratio of spoiler deployment, 0 = none, 1 = full deploy. */ float spoilerRatio; - /* Ratio of speed brake deployment, 0 = none, 1 = full deploy. */ + /* Ratio of speed brake deployment, 0 = none, 1 = full deploy. */ float speedBrakeRatio; - /* Ratio of slat deployment, 0 = none, 1 = full deploy. */ + /* Ratio of slat deployment, 0 = none, 1 = full deploy. */ float slatRatio; - /* Wing sweep ratio, 0 = forward, 1 = swept. */ + /* Wing sweep ratio, 0 = forward, 1 = swept. */ float wingSweep; - /* Thrust power, 0 = none, 1 = full fwd, -1 = full reverse. */ + /* Thrust power, 0 = none, 1 = full fwd, -1 = full reverse. */ float thrust; - /* Total pitch input for this plane. */ + /* Total pitch input for this plane. */ float yokePitch; - /* Total Heading input for this plane. */ + /* Total Heading input for this plane. */ float yokeHeading; - /* Total Roll input for this plane. */ + /* Total Roll input for this plane. */ float yokeRoll; } XPLMPlaneDrawState_t; #endif /* XPLM_DEPRECATED */ @@ -125,32 +125,32 @@ typedef struct { * as well as the number of aircraft that are currently active. These numbers * count the user's aircraft. It can also return the plugin that is currently * controlling aircraft. In X-Plane 7, this routine reflects the number of - * aircraft the user has enabled in the rendering options window. + * aircraft the user has enabled in the rendering options window. * */ XPLM_API void XPLMCountAircraft( - int * outTotalAircraft, - int * outActiveAircraft, - XPLMPluginID * outController); + int * outTotalAircraft, + int * outActiveAircraft, + XPLMPluginID * outController); /* * XPLMGetNthAircraftModel * * This function returns the aircraft model for the Nth aircraft. Indices are * zero based, with zero being the user's aircraft. The file name should be * at least 256 chars in length; the path should be at least 512 chars in - * length. + * length. * */ XPLM_API void XPLMGetNthAircraftModel( - int inIndex, - char * outFileName, - char * outPath); + int inIndex, + char * outFileName, + char * outPath); /*************************************************************************** * EXCLUSIVE AIRCRAFT ACCESS ***************************************************************************/ /* * The following routines require exclusive access to the airplane APIs. Only - * one plugin may have this access at a time. + * one plugin may have this access at a time. * */ @@ -160,11 +160,11 @@ XPLM_API void XPLMGetNthAircraftModel( * * Your airplanes available callback is called when another plugin gives up * access to the multiplayer planes. Use this to wait for access to - * multiplayer. + * multiplayer. * */ typedef void (* XPLMPlanesAvailable_f)( - void * inRefcon); + void * inRefcon); /* * XPLMAcquirePlanes @@ -180,19 +180,19 @@ typedef void (* XPLMPlanesAvailable_f)( * * If you pass in a callback and do not receive access to the planes your * callback will be called when the airplanes are available. If you do receive - * airplane access, your callback will not be called. + * airplane access, your callback will not be called. * */ XPLM_API int XPLMAcquirePlanes( - char ** inAircraft, /* Can be NULL */ - XPLMPlanesAvailable_f inCallback, - void * inRefcon); + char ** inAircraft, /* Can be NULL */ + XPLMPlanesAvailable_f inCallback, + void * inRefcon); /* * XPLMReleasePlanes * * Call this function to release access to the planes. Note that if you are - * disabled, access to planes is released for you and you must reacquire it. + * disabled, access to planes is released for you and you must reacquire it. * */ XPLM_API void XPLMReleasePlanes(void); @@ -202,11 +202,11 @@ XPLM_API void XPLMReleasePlanes(void); * * This routine sets the number of active planes. If you pass in a number * higher than the total number of planes availables, only the total number of - * planes available is actually used. + * planes available is actually used. * */ XPLM_API void XPLMSetActiveAircraftCount( - int inCount); + int inCount); /* * XPLMSetAircraftModel @@ -214,28 +214,28 @@ XPLM_API void XPLMSetActiveAircraftCount( * This routine loads an aircraft model. It may only be called if you have * exclusive access to the airplane APIs. Pass in the path of the model with * the .acf extension. The index is zero based, but you may not pass in 0 - * (use XPLMSetUsersAircraft to load the user's aircracft). + * (use XPLMSetUsersAircraft to load the user's aircracft). * */ XPLM_API void XPLMSetAircraftModel( - int inIndex, - const char * inAircraftPath); + int inIndex, + const char * inAircraftPath); /* * XPLMDisableAIForPlane * * This routine turns off X-Plane's AI for a given plane. The plane will - * continue to draw and be a real plane in X-Plane, but will not move itself. + * continue to draw and be a real plane in X-Plane, but will not move itself. * */ XPLM_API void XPLMDisableAIForPlane( - int inPlaneIndex); + int inPlaneIndex); #if defined(XPLM_DEPRECATED) /* * XPLMDrawAircraft * - * WARNING: Aircraft drawing via this API is deprecated and will not work in + * WARNING: Aircraft drawing via this API is deprecated and WILL NOT WORK in * future versions of X-Plane. Use XPLMInstance for 3-d drawing of custom * aircraft models. * @@ -243,19 +243,19 @@ XPLM_API void XPLMDisableAIForPlane( * callback. Pass in the position of the plane in OpenGL local coordinates * and the orientation of the plane. A 1 for full drawing indicates that the * whole plane must be drawn; a 0 indicates you only need the nav lights - * drawn. (This saves rendering time when planes are far away.) + * drawn. (This saves rendering time when planes are far away.) * */ XPLM_API void XPLMDrawAircraft( - int inPlaneIndex, - float inX, - float inY, - float inZ, - float inPitch, - float inRoll, - float inYaw, - int inFullDraw, - XPLMPlaneDrawState_t * inDrawStateInfo); + int inPlaneIndex, + float inX, + float inY, + float inZ, + float inPitch, + float inRoll, + float inYaw, + int inFullDraw, + XPLMPlaneDrawState_t * inDrawStateInfo); #endif /* XPLM_DEPRECATED */ #if defined(XPLM_DEPRECATED) @@ -274,7 +274,7 @@ XPLM_API void XPLMDrawAircraft( * WARNING: this routine does not necessarily place the airplane at the * airport; use XPLMSetUsersAircraft to be compatible. This routine is * provided to do special experimentation with flight models without resetting - * flight. + * flight. * */ XPLM_API void XPLMReinitUsersPlane(void); diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMPlugin.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMPlugin.h old mode 100755 new mode 100644 index be5d06c..da84ac8 --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMPlugin.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMPlugin.h @@ -2,8 +2,8 @@ #define _XPLMPlugin_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -12,7 +12,7 @@ ***************************************************************************/ /* * These APIs provide facilities to find and work with other plugins and - * manage other plugins. + * manage other plugins. * */ @@ -29,7 +29,7 @@ extern "C" { * These APIs allow you to find another plugin or yourself, or iterate across * all plugins. For example, if you wrote an FMS plugin that needed to talk * to an autopilot plugin, you could use these APIs to locate the autopilot - * plugin. + * plugin. * */ @@ -38,7 +38,7 @@ extern "C" { * XPLMGetMyID * * This routine returns the plugin ID of the calling plug-in. Call this to - * get your own ID. + * get your own ID. * */ XPLM_API XPLMPluginID XPLMGetMyID(void); @@ -47,7 +47,7 @@ XPLM_API XPLMPluginID XPLMGetMyID(void); * XPLMCountPlugins * * This routine returns the total number of plug-ins that are loaded, both - * disabled and enabled. + * disabled and enabled. * */ XPLM_API int XPLMCountPlugins(void); @@ -57,22 +57,22 @@ XPLM_API int XPLMCountPlugins(void); * * This routine returns the ID of a plug-in by index. Index is 0 based from 0 * to XPLMCountPlugins-1, inclusive. Plugins may be returned in any arbitrary - * order. + * order. * */ XPLM_API XPLMPluginID XPLMGetNthPlugin( - int inIndex); + int inIndex); /* * XPLMFindPluginByPath * * This routine returns the plug-in ID of the plug-in whose file exists at the * passed in absolute file system path. XPLM_NO_PLUGIN_ID is returned if the - * path does not point to a currently loaded plug-in. + * path does not point to a currently loaded plug-in. * */ XPLM_API XPLMPluginID XPLMFindPluginByPath( - const char * inPath); + const char * inPath); /* * XPLMFindPluginBySignature @@ -82,11 +82,11 @@ XPLM_API XPLMPluginID XPLMFindPluginByPath( * signature. Signatures are the best way to identify another plug-in as they * are independent of the file system path of a plug-in or the human-readable * plug-in name, and should be unique for all plug-ins. Use this routine to - * locate another plugin that your plugin interoperates with + * locate another plugin that your plugin interoperates with * */ XPLM_API XPLMPluginID XPLMFindPluginBySignature( - const char * inSignature); + const char * inSignature); /* * XPLMGetPluginInfo @@ -98,22 +98,22 @@ XPLM_API XPLMPluginID XPLMFindPluginBySignature( * outName - the human-readable name of the plug-in. outFilePath - the * absolute file path to the file that contains this plug-in. outSignature - a * unique string that identifies this plug-in. outDescription - a - * human-readable description of this plug-in. + * human-readable description of this plug-in. * */ XPLM_API void XPLMGetPluginInfo( - XPLMPluginID inPlugin, - char * outName, /* Can be NULL */ - char * outFilePath, /* Can be NULL */ - char * outSignature, /* Can be NULL */ - char * outDescription); /* Can be NULL */ + XPLMPluginID inPlugin, + char * outName, /* Can be NULL */ + char * outFilePath, /* Can be NULL */ + char * outSignature, /* Can be NULL */ + char * outDescription); /* Can be NULL */ /*************************************************************************** * ENABLING/DISABLING PLUG-INS ***************************************************************************/ /* * These routines are used to work with plug-ins and manage them. Most - * plugins will not need to use these APIs. + * plugins will not need to use these APIs. * */ @@ -121,11 +121,11 @@ XPLM_API void XPLMGetPluginInfo( /* * XPLMIsPluginEnabled * - * Returns whether the specified plug-in is enabled for running. + * Returns whether the specified plug-in is enabled for running. * */ XPLM_API int XPLMIsPluginEnabled( - XPLMPluginID inPluginID); + XPLMPluginID inPluginID); /* * XPLMEnablePlugin @@ -133,20 +133,20 @@ XPLM_API int XPLMIsPluginEnabled( * This routine enables a plug-in if it is not already enabled. It returns 1 * if the plugin was enabled or successfully enables itself, 0 if it does not. * Plugins may fail to enable (for example, if resources cannot be acquired) - * by returning 0 from their XPluginEnable callback. + * by returning 0 from their XPluginEnable callback. * */ XPLM_API int XPLMEnablePlugin( - XPLMPluginID inPluginID); + XPLMPluginID inPluginID); /* * XPLMDisablePlugin * - * This routine disableds an enabled plug-in. + * This routine disableds an enabled plug-in. * */ XPLM_API void XPLMDisablePlugin( - XPLMPluginID inPluginID); + XPLMPluginID inPluginID); /* * XPLMReloadPlugins @@ -155,7 +155,7 @@ XPLM_API void XPLMDisablePlugin( * return from the callback you were within (e.g. a menu select callback) you * will receive your XPluginDisable and XPluginStop callbacks and your DLL * will be unloaded, then the start process happens as if the sim was starting - * up. + * up. * */ XPLM_API void XPLMReloadPlugins(void); @@ -193,7 +193,7 @@ XPLM_API void XPLMReloadPlugins(void); * (e.g. be greater or equal to unsigned 0x8000000) while commands should have * this bit be cleared. * - * The following messages are sent to your plugin by X-Plane. + * The following messages are sent to your plugin by X-Plane. * */ @@ -278,18 +278,44 @@ XPLM_API void XPLMReloadPlugins(void); #define XPLM_MSG_RELEASE_PLANES 111 #endif /* XPLM303 */ +#if defined(XPLM400) +/* Sent to your plugin after FMOD sound banks are loaded. The parameter is the* + * XPLMBankID enum in XPLMSound.h, 0 for the master bank and 1 for the radio * + * bank. */ +#define XPLM_MSG_FMOD_BANK_LOADED 112 +#endif /* XPLM400 */ + +#if defined(XPLM400) +/* Sent to your plugin before FMOD sound banks are unloaded. Any associated * + * resources should be cleaned up at this point. The parameter is the * + * XPLMBankID enum in XPLMSound.h, 0 for the master bank and 1 for the radio * + * bank. */ +#define XPLM_MSG_FMOD_BANK_UNLOADING 113 +#endif /* XPLM400 */ + +#if defined(XPLM400) +/* Sent to your plugin per-frame (at-most) when/if datarefs are added. It will* + * include the new data ref total count so that your plugin can keep a local * + * cache of the total, see what's changed and know which ones to inquire about* + * if it cares. * + * * + * This message is only sent to plugins that enable the * + * XPLM_WANTS_DATAREF_NOTIFICATIONS feature. */ +#define XPLM_MSG_DATAREFS_ADDED 114 +#endif /* XPLM400 */ + /* * XPLMSendMessageToPlugin * * This function sends a message to another plug-in or X-Plane. Pass * XPLM_NO_PLUGIN_ID to broadcast to all plug-ins. Only enabled plug-ins with - * a message receive function receive the message. + * a message receive function receive the message. * */ XPLM_API void XPLMSendMessageToPlugin( - XPLMPluginID inPlugin, - int inMessage, - void * inParam); + XPLMPluginID inPlugin, + int inMessage, + void * inParam); #if defined(XPLM200) /*************************************************************************** @@ -298,8 +324,8 @@ XPLM_API void XPLMSendMessageToPlugin( /* * The plugin features API allows your plugin to "sign up" for additional * capabilities and plugin system features that are normally disabled for - * backward compatibility. This allows advanced plugins to "opt-in" to new - * behavior. + * backward compatibility or performance. This allows advanced plugins to + * "opt-in" to new behavior. * * Each feature is defined by a permanent string name. The feature string * names will vary with the particular installation of X-Plane, so plugins @@ -352,7 +378,15 @@ XPLM_API void XPLMSendMessageToPlugin( * * Before enabling this, make sure any custom widget code in your plugin is * prepared to cope with the UI coordinate system not being th same as the - * OpenGL window coordinate system. + * OpenGL window coordinate system. + * + * XPLM_WANTS_DATAREF_NOTIFICATIONS + * -------------------------------- + * + * Available in the SDK 4.0.0, this capability tells X-Plane to to send the + * enabling plugin the new XPLM_MSG_DATAREFS_ADDED message any time new + * datarefs are added. The SDK will coalesce consecutive dataref registrations + * to minimize the number of messages sent. * */ @@ -362,57 +396,57 @@ XPLM_API void XPLMSendMessageToPlugin( * * You pass an XPLMFeatureEnumerator_f to get a list of all features supported * by a given version running version of X-Plane. This routine is called once - * for each feature. + * for each feature. * */ typedef void (* XPLMFeatureEnumerator_f)( - const char * inFeature, - void * inRef); + const char * inFeature, + void * inRef); /* * XPLMHasFeature * * This returns 1 if the given installation of X-Plane supports a feature, or - * 0 if it does not. + * 0 if it does not. * */ XPLM_API int XPLMHasFeature( - const char * inFeature); + const char * inFeature); /* * XPLMIsFeatureEnabled * * This returns 1 if a feature is currently enabled for your plugin, or 0 if * it is not enabled. It is an error to call this routine with an unsupported - * feature. + * feature. * */ XPLM_API int XPLMIsFeatureEnabled( - const char * inFeature); + const char * inFeature); /* * XPLMEnableFeature * * This routine enables or disables a feature for your plugin. This will * change the running behavior of X-Plane and your plugin in some way, - * depending on the feature. + * depending on the feature. * */ XPLM_API void XPLMEnableFeature( - const char * inFeature, - int inEnable); + const char * inFeature, + int inEnable); /* * XPLMEnumerateFeatures * * This routine calls your enumerator callback once for each feature that this * running version of X-Plane supports. Use this routine to determine all of - * the features that X-Plane can support. + * the features that X-Plane can support. * */ XPLM_API void XPLMEnumerateFeatures( - XPLMFeatureEnumerator_f inEnumerator, - void * inRef); + XPLMFeatureEnumerator_f inEnumerator, + void * inRef); #endif /* XPLM200 */ #ifdef __cplusplus diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMProcessing.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMProcessing.h old mode 100755 new mode 100644 index 94ef0c4..247e71e --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMProcessing.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMProcessing.h @@ -2,8 +2,8 @@ #define _XPLMProcessing_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -17,8 +17,8 @@ * and performing I/O. * * You can receive a callback either just before or just after the per-frame - * physics calculations happen - you can use post-FM callbacks to "patch" the - * flight model after it has run. + * physics calculations happen - you can use post-flightmodel callbacks to + * "patch" the flight model after it has run. * * If the user has set the number of flight model iterations per frame greater * than one your plugin will _not_ see this; these integrations run on the @@ -32,8 +32,9 @@ * * WARNING: Do NOT use these callbacks to draw! You cannot draw during flight * loop callbacks. Use the drawing callbacks (see XPLMDisplay for more info) - * for graphics. (One exception: you can use a post-flight loop callback to - * update your own off-screen FBOs.) + * for graphics or the XPLMInstance functions for aircraft or models. (One + * exception: you can use a post-flight loop callback to update your own + * off-screen FBOs.) * */ @@ -52,14 +53,14 @@ extern "C" { * XPLMFlightLoopPhaseType * * You can register a flight loop callback to run either before or after the - * flight model is integrated by X-Plane. + * flight model is integrated by X-Plane. * */ enum { - /* Your callback runs before X-Plane integrates the flight model. */ + /* Your callback runs before X-Plane integrates the flight model. */ xplm_FlightLoop_Phase_BeforeFlightModel = 0, - /* Your callback runs after X-Plane integrates the flight model. */ + /* Your callback runs after X-Plane integrates the flight model. */ xplm_FlightLoop_Phase_AfterFlightModel = 1, @@ -73,7 +74,7 @@ typedef int XPLMFlightLoopPhaseType; * * This is an opaque identifier for a flight loop callback. You can use this * identifier to easily track and remove your callbacks, or to use the new - * flight loop APIs. + * flight loop APIs. * */ typedef void * XPLMFlightLoopID; @@ -94,14 +95,15 @@ typedef void * XPLMFlightLoopID; * dispatched. * - inCounter: a monotonically increasing counter, bumped once per flight * loop dispatch from the sim. - * - inRefcon: your own ptr constant from when you regitered yor callback. + * - inRefcon: your own pointer constant provided when you registered yor + * callback. * * Your return value controls when you will next be called. * * - Return 0 to stop receiving callbacks. - * - Pass a positive number to specify how many seconds until the next + * - Return a positive number to specify how many seconds until the next * callback. (You will be called at or after this time, not before.) - * - Pass a negative number to specify how many loops must go by until you + * - Return a negative number to specify how many loops must go by until you * are called. For example, -1.0 means call me the very next loop. * * Try to run your flight loop as infrequently as is practical, and suspend it @@ -109,22 +111,22 @@ typedef void * XPLMFlightLoopID; * callbacks that do nothing lowers X-Plane's frame rate. * * Your callback will NOT be unregistered if you return 0; it will merely be - * inactive. + * inactive. * */ typedef float (* XPLMFlightLoop_f)( - float inElapsedSinceLastCall, - float inElapsedTimeSinceLastFlightLoop, - int inCounter, - void * inRefcon); + float inElapsedSinceLastCall, + float inElapsedTimeSinceLastFlightLoop, + int inCounter, + void * inRefcon); #if defined(XPLM210) /* * XPLMCreateFlightLoop_t * * XPLMCreateFlightLoop_t contains the parameters to create a new flight loop - * callback. The strsucture can be expanded in future SDKs - always set - * structSize to the size of your structure in bytes. + * callback. The structure may be expanded in future SDKs - always set + * structSize to the size of your structure in bytes. * */ typedef struct { @@ -144,7 +146,7 @@ typedef struct { * * __WARNING__: XPLMGetElapsedTime is not a very good timer! It lacks * precision in both its data type and its source. Do not attempt to use it - * for timing critical applications like network multiplayer. + * for timing critical applications like network multiplayer. * */ XPLM_API float XPLMGetElapsedTime(void); @@ -153,7 +155,7 @@ XPLM_API float XPLMGetElapsedTime(void); * XPLMGetCycleNumber * * This routine returns a counter starting at zero for each sim cycle - * computed/video frame rendered. + * computed/video frame rendered. * */ XPLM_API int XPLMGetCycleNumber(void); @@ -162,20 +164,21 @@ XPLM_API int XPLMGetCycleNumber(void); * XPLMRegisterFlightLoopCallback * * This routine registers your flight loop callback. Pass in a pointer to a - * flight loop function and a refcon. inInterval defines when you will be - * called. Pass in a positive number to specify seconds from registration time - * to the next callback. Pass in a negative number to indicate when you will - * be called (e.g. pass -1 to be called at the next cylcle). Pass 0 to not be - * called; your callback will be inactive. + * flight loop function and a refcon (an optional reference value determined + * by you). inInterval defines when you will be called. Pass in a positive + * number to specify seconds from registration time to the next callback. Pass + * in a negative number to indicate when you will be called (e.g. pass -1 to + * be called at the next cylcle). Pass 0 to not be called; your callback will + * be inactive. * * (This legacy function only installs pre-flight-loop callbacks; use - * XPLMCreateFlightLoop for more control.) + * XPLMCreateFlightLoop for more control.) * */ XPLM_API void XPLMRegisterFlightLoopCallback( - XPLMFlightLoop_f inFlightLoop, - float inInterval, - void * inRefcon); + XPLMFlightLoop_f inFlightLoop, + float inInterval, + void * inRefcon); /* * XPLMUnregisterFlightLoopCallback @@ -185,12 +188,12 @@ XPLM_API void XPLMRegisterFlightLoopCallback( * it will not be called again. * * Only use this on flight loops registered via - * XPLMRegisterFlightLoopCallback. + * XPLMRegisterFlightLoopCallback. * */ XPLM_API void XPLMUnregisterFlightLoopCallback( - XPLMFlightLoop_f inFlightLoop, - void * inRefcon); + XPLMFlightLoop_f inFlightLoop, + void * inRefcon); /* * XPLMSetFlightLoopCallbackInterval @@ -203,14 +206,14 @@ XPLM_API void XPLMUnregisterFlightLoopCallback( * positive for seconds, negative for cycles, and 0 for deactivating the * callback. If inRelativeToNow is 1, times are from the time of this call; * otherwise they are from the time the callback was last called (or the time - * it was registered if it has never been called. + * it was registered if it has never been called. * */ XPLM_API void XPLMSetFlightLoopCallbackInterval( - XPLMFlightLoop_f inFlightLoop, - float inInterval, - int inRelativeToNow, - void * inRefcon); + XPLMFlightLoop_f inFlightLoop, + float inInterval, + int inRelativeToNow, + void * inRefcon); #if defined(XPLM210) /* @@ -218,11 +221,11 @@ XPLM_API void XPLMSetFlightLoopCallbackInterval( * * This routine creates a flight loop callback and returns its ID. The flight * loop callback is created using the input param struct, and is inited to be - * unscheduled. + * unscheduled. * */ XPLM_API XPLMFlightLoopID XPLMCreateFlightLoop( - XPLMCreateFlightLoop_t * inParams); + XPLMCreateFlightLoop_t * inParams); #endif /* XPLM210 */ #if defined(XPLM210) @@ -230,11 +233,11 @@ XPLM_API XPLMFlightLoopID XPLMCreateFlightLoop( * XPLMDestroyFlightLoop * * This routine destroys a flight loop callback by ID. Only call it on flight - * loops created with the newer XPLMCreateFlightLoop API. + * loops created with the newer XPLMCreateFlightLoop API. * */ XPLM_API void XPLMDestroyFlightLoop( - XPLMFlightLoopID inFlightLoopID); + XPLMFlightLoopID inFlightLoopID); #endif /* XPLM210 */ #if defined(XPLM210) @@ -246,15 +249,15 @@ XPLM_API void XPLMDestroyFlightLoop( * the absolute value of the input. If the interval is positive, it is a * duration in seconds. * - * If inRelativeToNow is true, ties are interpretted relative to the time this + * If inRelativeToNow is true, times are interpreted relative to the time this * routine is called; otherwise they are relative to the last call time or the - * time the flight loop was registered (if never called). + * time the flight loop was registered (if never called). * */ XPLM_API void XPLMScheduleFlightLoop( - XPLMFlightLoopID inFlightLoopID, - float inInterval, - int inRelativeToNow); + XPLMFlightLoopID inFlightLoopID, + float inInterval, + int inRelativeToNow); #endif /* XPLM210 */ #ifdef __cplusplus diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMScenery.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMScenery.h index 452bac9..d15f83d 100644 --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMScenery.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMScenery.h @@ -2,8 +2,8 @@ #define _XPLMScenery_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -11,7 +11,7 @@ * XPLMScenery ***************************************************************************/ /* - * This package contains APIs to interact with X-Plane's scenery system. + * This package contains APIs to interact with X-Plane's scenery system. * */ @@ -44,7 +44,7 @@ extern "C" { * probing operations are expensive, and should be avoided via caching when * possible. * - * Y testing returns a location on the terrain, a normal vectory, and a + * Y testing returns a location on the terrain, a normal vector, and a * velocity vector. The normal vector tells you the slope of the terrain at * that point. The velocity vector tells you if that terrain is moving (and is * in meters/second). For example, if your Y test hits the aircraft carrier @@ -52,7 +52,7 @@ extern "C" { * * Note: the Y-testing API is limited to probing the loaded scenery area, * which is approximately 300x300 km in X-Plane 9. Probes outside this area - * will return the height of a 0 MSL sphere. + * will return the height of a 0 MSL sphere. * */ @@ -62,12 +62,12 @@ extern "C" { * * XPLMProbeType defines the type of terrain probe - each probe has a * different algorithm. (Only one type of probe is provided right now, but - * future APIs will expose more flexible or poewrful or useful probes. + * future APIs will expose more flexible or powerful or useful probes. * */ enum { - /* The Y probe gives you the location of the tallest physical scenery along * - * the Y axis going through the queried point. */ + /* The Y probe gives you the location of the tallest physical scenery along * + * the Y axis going through the queried point. */ xplm_ProbeY = 0, @@ -77,19 +77,19 @@ typedef int XPLMProbeType; /* * XPLMProbeResult * - * Probe results - possible results from a probe query. + * Probe results - possible results from a probe query. * */ enum { - /* The probe hit terrain and returned valid values. */ + /* The probe hit terrain and returned valid values. */ xplm_ProbeHitTerrain = 0, - /* An error in the API call. Either the probe struct size is bad, or the * - * probe is invalid or the type is mismatched for the specific query call. */ + /* An error in the API call. Either the probe struct size is bad, the probe * + * is invalid, or the type is mismatched for the specific query call. */ xplm_ProbeError = 1, - /* The probe call succeeded but there is no terrain under this point (perhaps * - * it is off the side of the planet?) */ + /* The probe call succeeded but there is no terrain under this point (perhaps * + * it is off the side of the planet?) */ xplm_ProbeMissed = 2, @@ -100,7 +100,7 @@ typedef int XPLMProbeResult; * XPLMProbeRef * * An XPLMProbeRef is an opaque handle to a probe, used for querying the - * terrain. + * terrain. * */ typedef void * XPLMProbeRef; @@ -109,54 +109,54 @@ typedef void * XPLMProbeRef; * XPLMProbeInfo_t * * XPLMProbeInfo_t contains the results of a probe call. Make sure to set - * structSize to the size of the struct before using it. + * structSize to the size of the struct before using it. * */ typedef struct { - /* Size of structure in bytes - always set this before calling the XPLM. */ + /* Size of structure in bytes - always set this before calling the XPLM. */ int structSize; - /* Resulting X location of the terrain point we hit, in local OpenGL * - * coordinates. */ + /* Resulting X location of the terrain point we hit, in local OpenGL * + * coordinates. */ float locationX; - /* Resulting Y location of the terrain point we hit, in local OpenGL * - * coordinates. */ + /* Resulting Y location of the terrain point we hit, in local OpenGL * + * coordinates. */ float locationY; - /* Resulting Z location of the terrain point we hit, in local OpenGL * - * coordinates. */ + /* Resulting Z location of the terrain point we hit, in local OpenGL * + * coordinates. */ float locationZ; - /* X component of the normal vector to the terrain we found. */ + /* X component of the normal vector to the terrain we found. */ float normalX; - /* Y component of the normal vector to the terrain we found. */ + /* Y component of the normal vector to the terrain we found. */ float normalY; - /* Z component of the normal vector to the terrain we found. */ + /* Z component of the normal vector to the terrain we found. */ float normalZ; - /* X component of the velocity vector of the terrain we found. */ + /* X component of the velocity vector of the terrain we found. */ float velocityX; - /* Y component of the velocity vector of the terrain we found. */ + /* Y component of the velocity vector of the terrain we found. */ float velocityY; - /* Z component of the velocity vector of the terrain we found. */ + /* Z component of the velocity vector of the terrain we found. */ float velocityZ; - /* Tells if the surface we hit is water (otherwise it is land). */ + /* Tells if the surface we hit is water (otherwise it is land). */ int is_wet; } XPLMProbeInfo_t; /* * XPLMCreateProbe * - * Creates a new probe object of a given type and returns. + * Creates a new probe object of a given type and returns. * */ XPLM_API XPLMProbeRef XPLMCreateProbe( - XPLMProbeType inProbeType); + XPLMProbeType inProbeType); /* * XPLMDestroyProbe * - * Deallocates an existing probe object. + * Deallocates an existing probe object. * */ XPLM_API void XPLMDestroyProbe( - XPLMProbeRef inProbe); + XPLMProbeRef inProbe); /* * XPLMProbeTerrainXYZ @@ -164,15 +164,15 @@ XPLM_API void XPLMDestroyProbe( * Probes the terrain. Pass in the XYZ coordinate of the probe point, a probe * object, and an XPLMProbeInfo_t struct that has its structSize member set * properly. Other fields are filled in if we hit terrain, and a probe result - * is returned. + * is returned. * */ XPLM_API XPLMProbeResult XPLMProbeTerrainXYZ( - XPLMProbeRef inProbe, - float inX, - float inY, - float inZ, - XPLMProbeInfo_t * outInfo); + XPLMProbeRef inProbe, + float inX, + float inY, + float inZ, + XPLMProbeInfo_t * outInfo); #endif /* XPLM200 */ #if defined(XPLM300) @@ -189,7 +189,7 @@ XPLM_API XPLMProbeResult XPLMProbeTerrainXYZ( * necessarily match what a magnetic compass shows as north. * * Using this API ensures that you present the same offsets to users as - * X-Plane's built-in instruments. + * X-Plane's built-in instruments. * */ @@ -198,32 +198,32 @@ XPLM_API XPLMProbeResult XPLMProbeTerrainXYZ( * XPLMGetMagneticVariation * * Returns X-Plane's simulated magnetic variation (declination) at the - * indication latitude and longitude. + * indication latitude and longitude. * */ XPLM_API float XPLMGetMagneticVariation( - double latitude, - double longitude); + double latitude, + double longitude); /* * XPLMDegTrueToDegMagnetic * * Converts a heading in degrees relative to true north into a value relative - * to magnetic north at the user's current location. + * to magnetic north at the user's current location. * */ XPLM_API float XPLMDegTrueToDegMagnetic( - float headingDegreesTrue); + float headingDegreesTrue); /* * XPLMDegMagneticToDegTrue * * Converts a heading in degrees relative to magnetic north at the user's - * current location into a value relative to true north. + * current location into a value relative to true north. * */ XPLM_API float XPLMDegMagneticToDegTrue( - float headingDegreesMagnetic); + float headingDegreesMagnetic); #endif /* XPLM300 */ /*************************************************************************** @@ -233,7 +233,7 @@ XPLM_API float XPLMDegMagneticToDegTrue( * The object drawing routines let you load and draw X-Plane OBJ files. * Objects are loaded by file path and managed via an opaque handle. X-Plane * naturally reference counts objects, so it is important that you balance - * every successful call to XPLMLoadObject with a call to XPLMUnloadObject! + * every successful call to XPLMLoadObject with a call to XPLMUnloadObject! * */ @@ -243,7 +243,7 @@ XPLM_API float XPLMDegMagneticToDegTrue( * XPLMObjectRef * * An XPLMObjectRef is a opaque handle to an .obj file that has been loaded - * into memory. + * into memory. * */ typedef void * XPLMObjectRef; @@ -255,23 +255,23 @@ typedef void * XPLMObjectRef; * * The XPLMDrawInfo_t structure contains positioning info for one object that * is to be drawn. Be sure to set structSize to the size of the structure for - * future expansion. + * future expansion. * */ typedef struct { - /* Set this to the size of this structure! */ + /* Set this to the size of this structure! */ int structSize; - /* X location of the object in local coordinates. */ + /* X location of the object in local coordinates. */ float x; - /* Y location of the object in local coordinates. */ + /* Y location of the object in local coordinates. */ float y; - /* Z location of the object in local coordinates. */ + /* Z location of the object in local coordinates. */ float z; - /* Pitch in degres to rotate the object, positive is up. */ + /* Pitch in degres to rotate the object, positive is up. */ float pitch; - /* Heading in local coordinates to rotate the object, clockwise. */ + /* Heading in local coordinates to rotate the object, clockwise. */ float heading; - /* Roll to rotate the object. */ + /* Roll to rotate the object. */ float roll; } XPLMDrawInfo_t; #endif /* XPLM200 */ @@ -287,12 +287,12 @@ typedef struct { * * If your plugin is disabled, this callback will be delivered as soon as the * plugin is re-enabled. If your plugin is unloaded before this callback is - * ever called, the SDK will release the object handle for you. + * ever called, the SDK will release the object handle for you. * */ typedef void (* XPLMObjectLoaded_f)( - XPLMObjectRef inObject, - void * inRefcon); + XPLMObjectRef inObject, + void * inRefcon); #endif /* XPLM210 */ #if defined(XPLM200) @@ -315,12 +315,12 @@ typedef void (* XPLMObjectLoaded_f)( * load any object that can be used in the X-Plane scenery system. * * It is important that the datarefs an object uses for animation already be - * loaded before you load the object. For this reason it may be necessary to - * defer object loading until the sim has fully started. + * registered before you load the object. For this reason it may be necessary + * to defer object loading until the sim has fully started. * */ XPLM_API XPLMObjectRef XPLMLoadObject( - const char * inPath); + const char * inPath); #endif /* XPLM200 */ #if defined(XPLM210) @@ -338,13 +338,13 @@ XPLM_API XPLMObjectRef XPLMLoadObject( * * There is no way to cancel an asynchronous object load; you must wait for * the load to complete and then release the object if it is no longer - * desired. + * desired. * */ XPLM_API void XPLMLoadObjectAsync( - const char * inPath, - XPLMObjectLoaded_f inCallback, - void * inRefcon); + const char * inPath, + XPLMObjectLoaded_f inCallback, + void * inRefcon); #endif /* XPLM210 */ #if defined(XPLM_DEPRECATED) @@ -371,15 +371,15 @@ XPLM_API void XPLMLoadObjectAsync( * against gravity. If this is 0, the object is drawn with your rotations from * local coordanates -- that is, an object with no rotations is drawn pointing * down the -Z axis and the Y axis of the object matches the local coordinate - * Y axis. + * Y axis. * */ XPLM_API void XPLMDrawObjects( - XPLMObjectRef inObject, - int inCount, - XPLMDrawInfo_t * inLocations, - int lighting, - int earth_relative); + XPLMObjectRef inObject, + int inCount, + XPLMDrawInfo_t * inLocations, + int lighting, + int earth_relative); #endif /* XPLM_DEPRECATED */ #if defined(XPLM200) @@ -389,11 +389,11 @@ XPLM_API void XPLMDrawObjects( * This routine marks an object as no longer being used by your plugin. * Objects are reference counted: once no plugins are using an object, it is * purged from memory. Make sure to call XPLMUnloadObject once for each - * successful call to XPLMLoadObject. + * successful call to XPLMLoadObject. * */ XPLM_API void XPLMUnloadObject( - XPLMObjectRef inObject); + XPLMObjectRef inObject); #endif /* XPLM200 */ #if defined(XPLM200) @@ -404,7 +404,7 @@ XPLM_API void XPLMUnloadObject( * The library access routines allow you to locate scenery objects via the * X-Plane library system. Right now library access is only provided for * objects, allowing plugin-drawn objects to be extended using the library - * system. + * system. * */ @@ -414,12 +414,12 @@ XPLM_API void XPLMUnloadObject( * * An XPLMLibraryEnumerator_f is a callback you provide that is called once * for each library element that is located. The returned paths will be - * relative to the X-System folder. + * relative to the X-System folder. * */ typedef void (* XPLMLibraryEnumerator_f)( - const char * inFilePath, - void * inRef); + const char * inFilePath, + void * inRef); /* * XPLMLookupObjects @@ -432,15 +432,15 @@ typedef void (* XPLMLibraryEnumerator_f)( * The latitude and longitude parameters specify the location the object will * be used. The library system allows for scenery packages to only provide * objects to certain local locations. Only objects that are allowed at the - * latitude/longitude you provide will be returned. + * latitude/longitude you provide will be returned. * */ XPLM_API int XPLMLookupObjects( - const char * inPath, - float inLatitude, - float inLongitude, - XPLMLibraryEnumerator_f enumerator, - void * ref); + const char * inPath, + float inLatitude, + float inLongitude, + XPLMLibraryEnumerator_f enumerator, + void * ref); #endif /* XPLM200 */ #ifdef __cplusplus diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMSound.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMSound.h new file mode 100644 index 0000000..9e89bb6 --- /dev/null +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMSound.h @@ -0,0 +1,284 @@ +#ifndef _XPLMSound_h_ +#define _XPLMSound_h_ + +/* + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 + * + */ + +/*************************************************************************** + * XPLMSound + ***************************************************************************/ +/* + * This provides a minimal interface into the FMOD audio system. On the + * simplest level, you can request that X-Plane plays an in-memory audio + * buffer. This will work without linking to FMOD yourself. If you want to do + * anything more, such as modifying the sound, or loading banks and triggering + * your own events, you can get a pointer to the FMOD Studio instance. + * + */ + +#include "XPLMDefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(XPLM400) +/*************************************************************************** + * FMOD ACCESS + ***************************************************************************/ + +/* + * XPLMAudioBus + * + * This enumeration states the type of audio you wish to play - that is, the + * part of the simulated environment that the audio belongs in. If you use + * FMOD directly, note that COM1, COM2, Pilot and GND exist in a different + * FMOD bank so you may see these channels being unloaded/reloaded + * independently of the others. They may also be using a different + * FMOD::System if the user has selected a dedicated headset output device. + * + */ +enum { + /* Incoming speech on COM1 */ + xplm_AudioRadioCom1 = 0, + + /* Incoming speech on COM2 */ + xplm_AudioRadioCom2 = 1, + + /* Pilot's own speech */ + xplm_AudioRadioPilot = 2, + + /* Copilot's own speech */ + xplm_AudioRadioCopilot = 3, + + xplm_AudioExteriorAircraft = 4, + + xplm_AudioExteriorEnvironment = 5, + + xplm_AudioExteriorUnprocessed = 6, + + xplm_AudioInterior = 7, + + xplm_AudioUI = 8, + + /* Dedicated ground vehicle cable */ + xplm_AudioGround = 9, + + /* Master bus. Not normally to be used directly. */ + xplm_Master = 10, + + +}; +typedef int XPLMAudioBus; + +/* + * XPLMBankID + * + * These values are returned as the parameter of the + * "XPLM_MSG_FMOD_BANK_LOADED" and "XPLM_MSG_FMOD_BANK_UNLOADING" messages. + * + */ +enum { + /* Master bank. Handles all aircraft and environmental audio. */ + xplm_MasterBank = 0, + + /* Radio bank. Handles COM1/COM2/GND/Pilot/Copilot. */ + xplm_RadioBank = 1, + + +}; +typedef int XPLMBankID; + + +/* + * If you want to get full access to FMOD sound features, you need to include fmod.h or fmod.hpp yourself FIRST. + * If you only need the basic wrapper functions which allow 3D placement and playback on a specified channel, there + * is no need to link with full FMOD. + * It is recommended but not required that you don't mix methods - either use native FMOD calls or stick entirely + * within the functions of the X-Plane SDK. + * + * If you choose to use the advanced method, be aware that it is your responsibility to ensure that any resources, + * especially callbacks, are cleaned up when needed. The sound system may well be completely rebuild when the master + * banks are reloaded, when aircraft are reloaded, or your plugin is unloaded. + * + * IMPORTANT: For all calls which use, or return, FMOD base types like FMOD_Studio_System*, these are fully interchangeable + * with their C++ equivalents. See https://www.fmod.com/docs/2.02/api/white-papers-handle-system.html . + */ +#if defined(_FMOD_COMMON_H) + +/* + * XPLMGetFMODStudio + * + * Get a handle to the FMOD Studio, allowing you to load/process whatever else + * you need. This also gives access to the underlying system via + * FMOD::Studio::System::getCoreSystem() / FMOD_Studio_System_GetCoreSystem() + * . When a separate output device is being used for the radio, this will + * always return the FMOD::Studio that is running the environment output, as + * before. If you want to specifically target the headset output device, you + * can obtain that FMOD::Studio by getting one of the radio-specific output + * channelgroups and using the getSystem() call on that. + * + */ +XPLM_API FMOD_STUDIO_SYSTEM* XPLMGetFMODStudio(void); + +/* + * XPLMGetFMODChannelGroup + * + * Get a reference to a particular channel group - that is, an output channel. + * See the table above for values. + * + */ +XPLM_API FMOD_CHANNELGROUP* XPLMGetFMODChannelGroup( + XPLMAudioBus audioType); + + +#else +/* + * These definitions are enough to play a basic sound without linking to the full FMOD distribution. You can still position it in 3D + * and change other basic parameters. In all cases where an FMOD_RESULT is returned, the full range of FMOD_RESULT codes are used - the + * status will in almost all situations be coming straight from FMOD - so the single definition here is purely to create a matching + * datatype and allow simple "is OK" and "is not OK" tests. +*/ + +typedef enum FMOD_RESULT +{ + FMOD_OK, +} FMOD_RESULT; +typedef enum FMOD_SOUND_FORMAT +{ + FMOD_SOUND_FORMAT_PCM16 = 2 +} FMOD_SOUND_FORMAT; +typedef struct FMOD_VECTOR +{ + float x, y, z; +} FMOD_VECTOR; +typedef void FMOD_CHANNEL; +#endif + +/* + * XPLMPCMComplete_f + * + * If you use XPLMPlayPCMOnBus() you may use this optional callback to find + * out when the FMOD::Channel is complete, if you need to deallocate memory + * for example. + * + */ +typedef void (* XPLMPCMComplete_f)( + void * inRefcon, + FMOD_RESULT status); + +/* + * XPLMPlayPCMOnBus + * + * Play an in-memory audio buffer on a given audio bus. The resulting FMOD + * channel is returned. PAY ATTENTION TO THE CALLBACK - when the sample + * completes or is stopped by X-Plane, the channel will go away. It's up to + * you to listen for the callback and invalidate any copy of the channel + * pointer you have lying around. The callback is optional because if you have + * no intention of interacting with the sound after it's launched, then you + * don't need to keep the channel pointer at all. The sound is not started + * instantly. Instead, it will be started the next time X-Plane refreshes the + * sound system, typically at the start of the next frame. This allows you to + * set the initial position for the sound, if required. The callback will be + * called on the main thread, and will be called only once per sound. If the + * call fails and you provide a callback function, you will get a callback + * with an FMOD status code. + * + */ +XPLM_API FMOD_CHANNEL* XPLMPlayPCMOnBus( + void * audioBuffer, + uint32_t bufferSize, + FMOD_SOUND_FORMAT soundFormat, + int freqHz, + int numChannels, + int loop, + XPLMAudioBus audioType, + XPLMPCMComplete_f inCallback, + void * inRefcon); /* Can be NULL */ + +/* + * XPLMStopAudio + * + * Stop playing an active FMOD channel. If you defined a completion callback, + * this will be called. After this, the FMOD::Channel* will no longer be valid + * and must not be used in any future calls. + * + */ +XPLM_API FMOD_RESULT XPLMStopAudio( + FMOD_CHANNEL* fmod_channel); + +/* + * XPLMSetAudioPosition + * + * Move the given audio channel (i.e. a single sound) to a specific location + * in local co-ordinates. This will set the sound to 3D if it is not already. + * + */ +XPLM_API FMOD_RESULT XPLMSetAudioPosition( + FMOD_CHANNEL* fmod_channel, + FMOD_VECTOR* position, + FMOD_VECTOR* velocity); + +/* + * XPLMSetAudioFadeDistance + * + * Set the minimum and maximum fade distances for a given sound. This is + * highly unlikely to be 0 - please see + * https://documentation.help/FMOD-Studio-API/FMOD_Sound_Set3DMinMaxDistance.html + * for full details. This will set the sound to 3D if it is not already. You + * can set a 3D sound back to 2D by passing negative values for both min amd + * max. + * + */ +XPLM_API FMOD_RESULT XPLMSetAudioFadeDistance( + FMOD_CHANNEL* fmod_channel, + float min_fade_distance, + float max_fade_distance); + +/* + * XPLMSetAudioVolume + * + * Set the current volume of an active FMOD channel. This should be used to + * handle changes in the audio source volume, not for fading with distance. + * Values from 0 to 1 are normal, above 1 can be used to artificially amplify + * a sound. + * + */ +XPLM_API FMOD_RESULT XPLMSetAudioVolume( + FMOD_CHANNEL* fmod_channel, + float source_volume); + +/* + * XPLMSetAudioPitch + * + * Change the current pitch of an active FMOD channel. + * + */ +XPLM_API FMOD_RESULT XPLMSetAudioPitch( + FMOD_CHANNEL* fmod_channel, + float audio_pitch_hz); + +/* + * XPLMSetAudioCone + * + * Set a directional cone for an active FMOD channel. The orientation vector + * is in local coordinates. This will set the sound to 3D if it is not + * already. + * + */ +XPLM_API FMOD_RESULT XPLMSetAudioCone( + FMOD_CHANNEL* fmod_channel, + float inside_angle, + float outside_angle, + float outside_volume, + FMOD_VECTOR* orientation); + +#endif /* XPLM400 */ +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMUtilities.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMUtilities.h old mode 100755 new mode 100644 index bec319e..d2fbf93 --- a/Example/Lib/SDK/CHeaders/XPLM/XPLMUtilities.h +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMUtilities.h @@ -2,8 +2,8 @@ #define _XPLMUtilities_h_ /* - * Copyright 2005-2012 Sandy Barbour and Ben Supnik All rights reserved. See - * license.txt for usage. X-Plane SDK Version: 2.1.1 + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 * */ @@ -58,7 +58,7 @@ extern "C" { * ----------------------- * * Some of these APIs use full paths, but others use paths relative to the - * user's X-Plane installation. This is documented on a per-API basis. + * user's X-Plane installation. This is documented on a per-API basis. * */ @@ -68,15 +68,15 @@ extern "C" { * XPLMDataFileType * * These enums define types of data files you can load or unload using the - * SDK. + * SDK. * */ enum { - /* A situation (.sit) file, which starts off a flight in a given * - * configuration. */ + /* A situation (.sit) file, which starts off a flight in a given * + * configuration. */ xplm_DataFile_Situation = 1, - /* A situation movie (.smo) file, which replays a past flight. */ + /* A situation movie (.smo) file, which replays a past flight. */ xplm_DataFile_ReplayMovie = 2, @@ -88,14 +88,14 @@ typedef int XPLMDataFileType; * XPLMGetSystemPath * * This function returns the full path to the X-System folder. Note that this - * is a directory path, so it ends in a trailing : or /. + * is a directory path, so it ends in a trailing : or / . * * The buffer you pass should be at least 512 characters long. The path is - * returned using the current native or OS path conventions. + * returned using the current native or OS path conventions. * */ XPLM_API void XPLMGetSystemPath( - char * outSystemPath); + char * outSystemPath); /* * XPLMGetPrefsPath @@ -103,22 +103,22 @@ XPLM_API void XPLMGetSystemPath( * This routine returns a full path to a file that is within X-Plane's * preferences directory. (You should remove the file name back to the last * directory separator to get the preferences directory using - * XPLMExtractFileAndPath.) + * XPLMExtractFileAndPath). * * The buffer you pass should be at least 512 characters long. The path is - * returned using the current native or OS path conventions. + * returned using the current native or OS path conventions. * */ XPLM_API void XPLMGetPrefsPath( - char * outPrefsPath); + char * outPrefsPath); /* * XPLMGetDirectorySeparator * * This routine returns a string with one char and a null terminator that is * the directory separator for the current platform. This allows you to write - * code that concatinates directory paths without having to #ifdef for - * platform. The character returned will reflect the current file path mode. + * code that concatenates directory paths without having to #ifdef for + * platform. The character returned will reflect the current file path mode. * */ XPLM_API const char * XPLMGetDirectorySeparator(void); @@ -127,20 +127,20 @@ XPLM_API const char * XPLMGetDirectorySeparator(void); * XPLMExtractFileAndPath * * Given a full path to a file, this routine separates the path from the file. - * If the path is a partial directory (e.g. ends in : or \) the trailing + * If the path is a partial directory (e.g. ends in : or / ) the trailing * directory separator is removed. This routine works in-place; a pointer to * the file part of the buffer is returned; the original buffer still starts - * with the path and is null terminated with no trailing separator. + * with the path and is null terminated with no trailing separator. * */ XPLM_API char * XPLMExtractFileAndPath( - char * inFullPath); + char * inFullPath); /* * XPLMGetDirectoryContents * * This routine returns a list of files in a directory (specified by a full - * path, no trailing : or \). The output is returned as a list of NULL + * path, no trailing : or / ). The output is returned as a list of NULL * terminated strings. An index array (if specified) is filled with pointers * into the strings. The last file is indicated by a zero-length string (and * NULL in the indices). This routine will return 1 if you had capacity for @@ -175,18 +175,18 @@ XPLM_API char * XPLMExtractFileAndPath( * * WARNING: Before X-Plane 7 this routine did not properly iterate through * directories. If X-Plane - * 6 compatibility is needed, use your own code to iterate directories. + * 6 compatibility is needed, use your own code to iterate directories. * */ XPLM_API int XPLMGetDirectoryContents( - const char * inDirectoryPath, - int inFirstReturn, - char * outFileNames, - int inFileNameBufSize, - char ** outIndices, /* Can be NULL */ - int inIndexCount, - int * outTotalFiles, /* Can be NULL */ - int * outReturnedFiles); /* Can be NULL */ + const char * inDirectoryPath, + int inFirstReturn, + char * outFileNames, + int inFileNameBufSize, + char ** outIndices, /* Can be NULL */ + int inIndexCount, + int * outTotalFiles, /* Can be NULL */ + int * outReturnedFiles); /* Can be NULL */ #if defined(XPLM200) /* @@ -194,12 +194,12 @@ XPLM_API int XPLMGetDirectoryContents( * * Loads a data file of a given type. Paths must be relative to the X-System * folder. To clear the replay, pass a NULL file name (this is only valid with - * replay movies, not sit files). + * replay movies, not sit files). * */ XPLM_API int XPLMLoadDataFile( - XPLMDataFileType inFileType, - const char * inFilePath); /* Can be NULL */ + XPLMDataFileType inFileType, + const char * inFilePath); /* Can be NULL */ #endif /* XPLM200 */ #if defined(XPLM200) @@ -207,12 +207,12 @@ XPLM_API int XPLMLoadDataFile( * XPLMSaveDataFile * * Saves the current situation or replay; paths are relative to the X-System - * folder. + * folder. * */ XPLM_API int XPLMSaveDataFile( - XPLMDataFileType inFileType, - const char * inFilePath); + XPLMDataFileType inFileType, + const char * inFilePath); #endif /* XPLM200 */ /*************************************************************************** @@ -226,7 +226,7 @@ XPLM_API int XPLMSaveDataFile( * the original authors considered extending the API to other applications * that shared basic infrastructure with X-Plane. These enumerations are * hold-overs from that original roadmap; all values other than X-Plane are - * deprecated. Your plugin should never need this enumeration. + * deprecated. Your plugin should never need this enumeration. * */ enum { @@ -257,6 +257,22 @@ enum { #if defined(XPLM_DEPRECATED) xplm_Host_XAuto = 7, +#endif /* XPLM_DEPRECATED */ +#if defined(XPLM_DEPRECATED) + xplm_Host_Xavion = 8, + +#endif /* XPLM_DEPRECATED */ +#if defined(XPLM_DEPRECATED) + xplm_Host_Control_Pad = 9, + +#endif /* XPLM_DEPRECATED */ +#if defined(XPLM_DEPRECATED) + xplm_Host_PFD_Map = 10, + +#endif /* XPLM_DEPRECATED */ +#if defined(XPLM_DEPRECATED) + xplm_Host_RADAR = 11, + #endif /* XPLM_DEPRECATED */ }; @@ -268,7 +284,7 @@ typedef int XPLMHostApplicationID; * These enums define what language the sim is running in. These enumerations * do not imply that the sim can or does run in all of these languages; they * simply provide a known encoding in the event that a given sim version is - * localized to a certain language. + * localized to a certain language. * */ enum { @@ -302,6 +318,10 @@ enum { xplm_Language_Chinese = 10, #endif /* XPLM300 */ +#if defined(XPLM400) + xplm_Language_Ukrainian = 11, + +#endif /* XPLM400 */ }; typedef int XPLMLanguageCode; @@ -317,11 +337,11 @@ typedef int XPLMLanguageCode; * info in your XPluginStart and XPluginStop callbacks. To avoid causing logic * errors in the management code, do not call any other plugin routines from * your error callback - it is only meant for catching errors in the - * debugging. + * debugging. * */ typedef void (* XPLMError_f)( - const char * inMessage); + const char * inMessage); #endif /* XPLM200 */ #if defined(XPLM_DEPRECATED) @@ -335,7 +355,7 @@ typedef void (* XPLMError_f)( * NOTE: because plugins are always called from within the XPLM, there is no * need to check for initialization; it will always return 1. This routine is * deprecated - you do not need to check it before continuing within your - * plugin. + * plugin. * */ XPLM_API int XPLMInitialized(void); @@ -345,23 +365,23 @@ XPLM_API int XPLMInitialized(void); * XPLMGetVersions * * This routine returns the revision of both X-Plane and the XPLM DLL. All - * versions are three-digit decimal numbers (e.g. 606 for version 6.06 of - * X-Plane); the current revision of the XPLM is 200 (2.00). This routine also - * returns the host ID of the app running us. + * versions are at least three-digit decimal numbers (e.g. 606 for version + * 6.06 of X-Plane); the current revision of the XPLM is 400 (4.00). This + * routine also returns the host ID of the app running us. * * The most common use of this routine is to special-case around X-Plane - * version-specific behavior. + * version-specific behavior. * */ XPLM_API void XPLMGetVersions( - int * outXPlaneVersion, - int * outXPLMVersion, - XPLMHostApplicationID * outHostID); + int * outXPlaneVersion, + int * outXPLMVersion, + XPLMHostApplicationID * outHostID); /* * XPLMGetLanguage * - * This routine returns the langauge the sim is running in. + * This routine returns the langauge the sim is running in. * */ XPLM_API XPLMLanguageCode XPLMGetLanguage(void); @@ -392,11 +412,11 @@ XPLM_API XPLMLanguageCode XPLMGetLanguage(void); * * To use functionality via XPLMFindSymbol you will need to copy your own * definitions of the X-Plane API prototypes and cast the returned pointer to - * the correct type. + * the correct type. * */ XPLM_API void * XPLMFindSymbol( - const char * inString); + const char * inString); #endif /* XPLM200 */ #if defined(XPLM200) @@ -422,11 +442,11 @@ XPLM_API void * XPLMFindSymbol( * not normally run, and this may adversely affect performance, so do not * leave error callbacks installed in shipping plugins. Since the only useful * response to an error is to change code, error callbacks are not useful "in - * the field". + * the field". * */ XPLM_API void XPLMSetErrorCallback( - XPLMError_f inCallback); + XPLMError_f inCallback); #endif /* XPLM200 */ /* @@ -440,11 +460,11 @@ XPLM_API void XPLMSetErrorCallback( * plugin. The X-Plane Log file is shared by X-Plane and every plugin in the * system, and plugins that (when functioning normally) print verbose log * output make it difficult for developers to find error conditions from other - * parts of the system. + * parts of the system. * */ XPLM_API void XPLMDebugString( - const char * inString); + const char * inString); /* * XPLMSpeakString @@ -452,11 +472,11 @@ XPLM_API void XPLMDebugString( * This function displays the string in a translucent overlay over the current * display and also speaks the string if text-to-speech is enabled. The string * is spoken asynchronously, this function returns immediately. This function - * may not speak or print depending on user preferences. + * may not speak or print depending on user preferences. * */ XPLM_API void XPLMSpeakString( - const char * inString); + const char * inString); /* * XPLMGetVirtualKeyDescription @@ -464,11 +484,11 @@ XPLM_API void XPLMSpeakString( * Given a virtual key code (as defined in XPLMDefs.h) this routine returns a * human-readable string describing the character. This routine is provided * for showing users what keyboard mappings they have set up. The string may - * read 'unknown' or be a blank or NULL string if the virtual key is unknown. + * read 'unknown' or be a blank or NULL string if the virtual key is unknown. * */ XPLM_API const char * XPLMGetVirtualKeyDescription( - char inVirtualKey); + char inVirtualKey); /* * XPLMReloadScenery @@ -476,9 +496,9 @@ XPLM_API const char * XPLMGetVirtualKeyDescription( * XPLMReloadScenery reloads the current set of scenery. You can use this * function in two typical ways: simply call it to reload the scenery, picking * up any new installed scenery, .env files, etc. from disk. Or, change the - * lat/ref and lon/ref data refs and then call this function to shift the + * lat/ref and lon/ref datarefs and then call this function to shift the * scenery environment. This routine is equivalent to picking "reload - * scenery" from the developer menu. + * scenery" from the developer menu. * */ XPLM_API void XPLMReloadScenery(void); @@ -523,7 +543,7 @@ XPLM_API void XPLMReloadScenery(void); * in letting X-Plane handle or not handle the command; you are responsible * for passing a *balanced* number of begin and end messages to X-Plane. (E.g. * it is not legal to pass all the begin messages to X-Plane but hide all the - * end messages). + * end messages). * */ @@ -531,17 +551,17 @@ XPLM_API void XPLMReloadScenery(void); /* * XPLMCommandPhase * - * The phases of a command. + * The phases of a command. * */ enum { - /* The command is being started. */ + /* The command is being started. */ xplm_CommandBegin = 0, - /* The command is continuing to execute. */ + /* The command is continuing to execute. */ xplm_CommandContinue = 1, - /* The command has ended. */ + /* The command has ended. */ xplm_CommandEnd = 2, @@ -558,7 +578,7 @@ typedef int XPLMCommandPhase; * * Note that a command is not "owned" by a particular plugin. Since many * plugins may participate in a command's execution, the command does not go - * away if the plugin that created it is unloaded. + * away if the plugin that created it is unloaded. * */ typedef void * XPLMCommandRef; @@ -573,23 +593,23 @@ typedef void * XPLMCommandRef; * * Your command handler should return 1 to let processing of the command * continue to other plugins and X-Plane, or 0 to halt processing, potentially - * bypassing X-Plane code. + * bypassing X-Plane code. * */ typedef int (* XPLMCommandCallback_f)( - XPLMCommandRef inCommand, - XPLMCommandPhase inPhase, - void * inRefcon); + XPLMCommandRef inCommand, + XPLMCommandPhase inPhase, + void * inRefcon); /* * XPLMFindCommand * * XPLMFindCommand looks up a command by name, and returns its command - * reference or NULL if the command does not exist. + * reference or NULL if the command does not exist. * */ XPLM_API XPLMCommandRef XPLMFindCommand( - const char * inName); + const char * inName); /* * XPLMCommandBegin @@ -597,33 +617,33 @@ XPLM_API XPLMCommandRef XPLMFindCommand( * XPLMCommandBegin starts the execution of a command, specified by its * command reference. The command is "held down" until XPLMCommandEnd is * called. You must balance each XPLMCommandBegin call with an XPLMCommandEnd - * call. + * call. * */ XPLM_API void XPLMCommandBegin( - XPLMCommandRef inCommand); + XPLMCommandRef inCommand); /* * XPLMCommandEnd * * XPLMCommandEnd ends the execution of a given command that was started with * XPLMCommandBegin. You must not issue XPLMCommandEnd for a command you did - * not begin. + * not begin. * */ XPLM_API void XPLMCommandEnd( - XPLMCommandRef inCommand); + XPLMCommandRef inCommand); /* * XPLMCommandOnce * * This executes a given command momentarily, that is, the command begins and * ends immediately. This is the equivalent of calling XPLMCommandBegin() and - * XPLMCommandEnd() back ot back. + * XPLMCommandEnd() back to back. * */ XPLM_API void XPLMCommandOnce( - XPLMCommandRef inCommand); + XPLMCommandRef inCommand); /* * XPLMCreateCommand @@ -631,12 +651,12 @@ XPLM_API void XPLMCommandOnce( * XPLMCreateCommand creates a new command for a given string. If the command * already exists, the existing command reference is returned. The description * may appear in user interface contexts, such as the joystick configuration - * screen. + * screen. * */ XPLM_API XPLMCommandRef XPLMCreateCommand( - const char * inName, - const char * inDescription); + const char * inName, + const char * inDescription); /* * XPLMRegisterCommandHandler @@ -648,27 +668,27 @@ XPLM_API XPLMCommandRef XPLMCreateCommand( * X-Plane executes the command, and returning 0 from your callback will * disable X-Plane's processing of the command. If inBefore is false, your * callback will run after X-Plane. (You can register a single callback both - * before and after a command.) + * before and after a command.) * */ XPLM_API void XPLMRegisterCommandHandler( - XPLMCommandRef inComand, - XPLMCommandCallback_f inHandler, - int inBefore, - void * inRefcon); + XPLMCommandRef inComand, + XPLMCommandCallback_f inHandler, + int inBefore, + void * inRefcon); /* * XPLMUnregisterCommandHandler * * XPLMUnregisterCommandHandler removes a command callback registered with - * XPLMRegisterCommandHandler. + * XPLMRegisterCommandHandler. * */ XPLM_API void XPLMUnregisterCommandHandler( - XPLMCommandRef inComand, - XPLMCommandCallback_f inHandler, - int inBefore, - void * inRefcon); + XPLMCommandRef inComand, + XPLMCommandCallback_f inHandler, + int inBefore, + void * inRefcon); #endif /* XPLM200 */ #if defined(XPLM_DEPRECATED) @@ -686,7 +706,7 @@ XPLM_API void XPLMUnregisterCommandHandler( * The legacy user interaction APIs let you simulate commands the user can do * with a joystick, keyboard etc. Note that it is generally safer for future * compatibility to use one of these commands than to manipulate the - * underlying sim data. + * underlying sim data. * */ @@ -696,7 +716,7 @@ XPLM_API void XPLMUnregisterCommandHandler( * * These enums represent all the keystrokes available within X-Plane. They can * be sent to X-Plane directly. For example, you can reverse thrust using - * these enumerations. + * these enumerations. * */ enum { @@ -804,7 +824,7 @@ typedef int XPLMCommandKeyID; * These are enumerations for all of the things you can do with a joystick * button in X-Plane. They currently match the buttons menu in the equipment * setup dialog, but these enums will be stable even if they change in - * X-Plane. + * X-Plane. * */ enum { @@ -914,12 +934,12 @@ typedef int XPLMCommandButtonID; * is a raw key stroke it may be mapped by the keys file or enter text into a * field. * - * Deprecated: use XPLMCommandOnce + * Deprecated: use XPLMCommandOnce * */ XPLM_API void XPLMSimulateKeyPress( - int inKeyType, - int inKey); + int inKeyType, + int inKey); /* * XPLMCommandKeyStroke @@ -929,26 +949,26 @@ XPLM_API void XPLMSimulateKeyPress( * remapped their keyboard. Examples of things you might do with this include * pausing the simulator. * - * Deprecated: use XPLMCommandOnce + * Deprecated: use XPLMCommandOnce * */ XPLM_API void XPLMCommandKeyStroke( - XPLMCommandKeyID inKey); + XPLMCommandKeyID inKey); /* * XPLMCommandButtonPress * * This function simulates any of the actions that might be taken by pressing * a joystick button. However, this lets you call the command directly rather - * than have to know which button is mapped where. Important: you must release - * each button you press. The APIs are separate so that you can 'hold down' a - * button for a fixed amount of time. + * than having to know which button is mapped where. Important: you must + * release each button you press. The APIs are separate so that you can 'hold + * down' a button for a fixed amount of time. * - * Deprecated: use XPLMCommandBegin. + * Deprecated: use XPLMCommandBegin. * */ XPLM_API void XPLMCommandButtonPress( - XPLMCommandButtonID inButton); + XPLMCommandButtonID inButton); /* * XPLMCommandButtonRelease @@ -956,11 +976,11 @@ XPLM_API void XPLMCommandButtonPress( * This function simulates any of the actions that might be taken by pressing * a joystick button. See XPLMCommandButtonPress. * - * Deprecated: use XPLMCommandEnd. + * Deprecated: use XPLMCommandEnd. * */ XPLM_API void XPLMCommandButtonRelease( - XPLMCommandButtonID inButton); + XPLMCommandButtonID inButton); #endif /* XPLM_DEPRECATED */ #ifdef __cplusplus diff --git a/Example/Lib/SDK/CHeaders/XPLM/XPLMWeather.h b/Example/Lib/SDK/CHeaders/XPLM/XPLMWeather.h new file mode 100644 index 0000000..3f1f50f --- /dev/null +++ b/Example/Lib/SDK/CHeaders/XPLM/XPLMWeather.h @@ -0,0 +1,146 @@ +#ifndef _XPLMWeather_h_ +#define _XPLMWeather_h_ + +/* + * Copyright 2005-2022 Laminar Research, Sandy Barbour and Ben Supnik All + * rights reserved. See license.txt for usage. X-Plane SDK Version: 4.0.0 + * + */ + +/*************************************************************************** + * XPLMWeather + ***************************************************************************/ +/* + * This provides access to the X-Plane 12 enhanced weather system. + * + */ + +#include "XPLMDefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************************** + * WEATHER ACCESS + ***************************************************************************/ + +/* + * XPLMWeatherInfoWinds_t + * + */ +typedef struct { + /* Altitude MSL, meters */ + float alt_msl; + /* Wind speed, meters/sec */ + float speed; + /* Direction (true) */ + float direction; + /* Gust speed, meters/sec */ + float gust_speed; + /* Shear arc, degrees i.e. 50% of this arc in either direction from base */ + float shear; + /* Clear-air turbulence ratio */ + float turbulence; +} XPLMWeatherInfoWinds_t; + +/* + * XPLMWeatherInfoClouds_t + * + */ +typedef struct { + /* Cloud type, float enum */ + float cloud_type; + /* Coverage ratio */ + float coverage; + /* Altitude MSL, meters */ + float alt_top; + /* Altitude MSL, meters */ + float alt_base; +} XPLMWeatherInfoClouds_t; + +/* + * XPLMWeatherInfo_t + * + * Basic weather conditions at a specific point. + * + */ +typedef struct { + /* The size of the struct. */ + int structSize; + /* Temperature at the given altitude in Celsius */ + float temperature_alt; + /* Dewpoint at the given altitude in Celsius */ + float dewpoint_alt; + /* Pressure at the given altitude in Pascals */ + float pressure_alt; + /* Precipitation rate at the given altitude */ + float precip_rate_alt; + /* Wind direction at the given altitude */ + float wind_dir_alt; + /* Wind speed at the given altitude, meters/sec */ + float wind_spd_alt; + /* Turbulence ratio at the given altitude */ + float turbulence_alt; + /* Height of water waves in meters */ + float wave_height; + /* Length of water waves in meters */ + float wave_length; + /* Direction from which water waves are coming */ + int wave_dir; + /* Speed of wave advance in meters/sec */ + float wave_speed; + /* Base visibility at 0 altitude, meters */ + float visibility; + /* Base precipitation ratio at 0 altitude */ + float precip_rate; + /* Climb rate due to thermals, meters/sec */ + float thermal_climb; + /* Pressure at 0 altitude in Pascals */ + float pressure_sl; + /* Defined wind layers. Not all layers are always defined. */ + XPLMWeatherInfoWinds_t wind_layers[13]; + /* Defined cloud layers. Not all layers are always defined. */ + XPLMWeatherInfoClouds_t cloud_layers[3]; +} XPLMWeatherInfo_t; + +#if defined(XPLM400) +/* + * XPLMGetMETARForAirport + * + * 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. 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 (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( + double latitude, + double longitude, + double altitude_m, + XPLMWeatherInfo_t * out_info); +#endif /* XPLM400 */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Example/Lib/SDK/Libraries/Lin/XPLM_64.so b/Example/Lib/SDK/Libraries/Lin/XPLM_64.so new file mode 100755 index 0000000..001e6f6 Binary files /dev/null and b/Example/Lib/SDK/Libraries/Lin/XPLM_64.so differ diff --git a/Example/Lib/SDK/Libraries/Lin/XPWidgets_64.so b/Example/Lib/SDK/Libraries/Lin/XPWidgets_64.so new file mode 100755 index 0000000..6eaca3c Binary files /dev/null and b/Example/Lib/SDK/Libraries/Lin/XPWidgets_64.so differ diff --git a/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Resources b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/C/Resources/Info.plist b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/C/Resources/Info.plist new file mode 100644 index 0000000..53b5610 --- /dev/null +++ b/Example/Lib/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/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/C/XPLM b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/C/XPLM new file mode 100755 index 0000000..1ea059f Binary files /dev/null and b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/C/XPLM differ diff --git a/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/C/_CodeSignature/CodeResources b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/C/_CodeSignature/CodeResources new file mode 100644 index 0000000..1e37a64 --- /dev/null +++ b/Example/Lib/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/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/Current b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/Current new file mode 120000 index 0000000..96d80cd --- /dev/null +++ b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/Versions/Current @@ -0,0 +1 @@ +C \ No newline at end of file diff --git a/Example/Lib/SDK/Libraries/Mac/XPLM.framework/XPLM b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/XPLM deleted file mode 100755 index 3340711..0000000 Binary files a/Example/Lib/SDK/Libraries/Mac/XPLM.framework/XPLM and /dev/null differ diff --git a/Example/Lib/SDK/Libraries/Mac/XPLM.framework/XPLM b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/XPLM new file mode 120000 index 0000000..ae3cf6c --- /dev/null +++ b/Example/Lib/SDK/Libraries/Mac/XPLM.framework/XPLM @@ -0,0 +1 @@ +Versions/Current/XPLM \ No newline at end of file diff --git a/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Resources b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/Resources/Info.plist b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/Resources/Info.plist new file mode 100644 index 0000000..60487dd --- /dev/null +++ b/Example/Lib/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/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/XPWidgets b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/XPWidgets new file mode 100755 index 0000000..c996c4a Binary files /dev/null and b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/XPWidgets differ diff --git a/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/_CodeSignature/CodeResources b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/C/_CodeSignature/CodeResources new file mode 100644 index 0000000..cf0809d --- /dev/null +++ b/Example/Lib/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/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/Current b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/Current new file mode 120000 index 0000000..96d80cd --- /dev/null +++ b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/Versions/Current @@ -0,0 +1 @@ +C \ No newline at end of file diff --git a/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets deleted file mode 100755 index 20e521a..0000000 Binary files a/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets and /dev/null differ diff --git a/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets new file mode 120000 index 0000000..61477f4 --- /dev/null +++ b/Example/Lib/SDK/Libraries/Mac/XPWidgets.framework/XPWidgets @@ -0,0 +1 @@ +Versions/Current/XPWidgets \ No newline at end of file diff --git a/Example/Lib/SDK/Libraries/Win/XPLM_64.lib b/Example/Lib/SDK/Libraries/Win/XPLM_64.lib index f72dd53..090ed41 100644 Binary files a/Example/Lib/SDK/Libraries/Win/XPLM_64.lib and b/Example/Lib/SDK/Libraries/Win/XPLM_64.lib differ diff --git a/Example/Lib/SDK/Libraries/Win/XPWidgets_64.lib b/Example/Lib/SDK/Libraries/Win/XPWidgets_64.lib index 48f1317..53c55d6 100644 Binary files a/Example/Lib/SDK/Libraries/Win/XPWidgets_64.lib and b/Example/Lib/SDK/Libraries/Win/XPWidgets_64.lib differ diff --git a/Example/Lib/SDK/README.txt b/Example/Lib/SDK/README.txt index 2316eb5..122e3df 100644 --- a/Example/Lib/SDK/README.txt +++ b/Example/Lib/SDK/README.txt @@ -5,24 +5,12 @@ This download contains the files necessary to build plugins for X-Plane. The X-Plane plugin website is: -http://www.xsquawkbox.net/xpsdk/ +https://developer.x-plane.com/sdk/ The website contains full documentation on the SDK including tech notes, sample plugins, sample code, contact information, and links to the latest versions of this SDK. -The X-Plane SDK authors can be reached at: - -xplanesdk@xsquawkbox.net - -Please do not email Austin or Laminar Research for SDK questions or support; -the SDK is a third party effort. - -the X-Plane developer mailing list is an unlisted yahoo group frequented by -many X-Plane developers. - -x-plane-dev@yahoogroups.com - ------------------------------------------------------------------------------- SDK FILES ------------------------------------------------------------------------------- @@ -32,25 +20,93 @@ README.txt This document CHeaders Header files for compiling C/C++ plugins Delphi Interfaces for compiling Pascal plugins Libraries Import libraries for linking on Windows - and frameworks for linking on Mac. + and frameworks for linking on Mac. Note: there are no import/link-time libraries for Linux; on Linux, plugins simply leave SDK symbols undefined and they are discovered at runtime. The SDK website explains this process in more detail. -Mac CFM plugins are not supported by the SDK versions 2.0 and higher; the -2.0 SDK requires X-Plane 9.0 or newer, and X-Plane 9 will not run on -Mac OS 9. Therefore CFM plugins are not useful (and are probably -counterproductive since they cannot support x86 code). If you have a CFM -plugin, continue to use the 1.0 SDK to build it. You will have to port to -Mach-O if you want to use 2.0 features. - ------------------------------------------------------------------------------- RELEASE NOTES ------------------------------------------------------------------------------- This section contains per-release notes for the history of the X-Plane SDK. +X-Plane SDK Release 4.1.1 10/10/2024 + +This is a bug fix to the SDK itself; the dylib link paths on the included +XPLM and XPWidgets frameworks now contain paths compatible with all versions +of X-Plane and not just X-Plane 12.1.0 and newer. Fixes XPD-16057 and +includes doc clarification for sound callbacks. + +X-Plane SDK Release 4.1.0 4/10/2024 + +The 4.1.0 SDK includes two new sets of APIs: + + - XPLMAvionics has new APIs to create custom plugin-driven glass displays, + as well as extended callbacks for overriding the existing displays. + + - XPLMNavigation has new APIs for interacting with the FMS and its flight- + plans. + +This version of the SDK requires X-Plane 12.1.0 or newer. + +X-Plane SDK Release 4.0.1 3/16/2023 + +The 4.0.1 SDK fixes the XPLMSound.h header, which contained invalid C code +(C++ struct definitons for FMOD_VECTOR and FMOD_ enums.) + +X-Plane SDK Release 4.0.0 3/8/2023 + +The 4.0.0 SDK adds support for ARM64 Macs. The 4.0 SDK is supported by X-Plane +12.04 (but can be used with X-Plane 12.00 if not using the weather, sound or +dataref introspection APIs). New features: + + - M1/ARM64 support for Mac + - Avionics display callbacks provide direct drawing to avionic "devices" + - New XPLMSound API + - New XPLMWeather API + - New dataref APIs to get the set of all datarefs programmatically and be + notified of new datarefs ("introspection"). + +X-Plane SDK Release 3.0.2 4/29/2020 + +The SDK 3.0.2 adds the modern 3-d drawing callback for interoperability with +Metal and Vulkan, and deprecates most older drawing callbacks. + +X-Plane SDK Release 3.0.1 3/5/2018 + +The SDK 3.0.1 API adds new messages and APIs to support VR. + +X-Plane SDK Release 3.0.0 11/2/7/2017 + +The SDK 3.0 API supports new features and new packaging for plugins. The 3.0 +SDK requires X-Plane 11.0 or newer. New features include: + + - Display APIs to match X-Plane 11's UI. + - New map APIs. Legacy 2-d map draw callbacks are deprecated. + - Aircraft-plugins get their own menu + - Aircraft placement by lat-lon-elevation. + - Magnetic variation queries + - Chinese language support + - New instancing API + +The 3.0 SDK supports a new plugin packaging schema: + + //.xpl + +where ABI is one of mac_x64, win_x64 or lin_x64. The new schema is preferred, +so you can pack a version of your plugin that requires 3.0 with this scheme +and include a legacy 2.x plugin using hte old scheme for X-Plane 10 +compatibility. + +Please use the new scheme where possible - having a unique file name for each +DLL makes crash reports easier to read and triage. + +The 3.0 SDK drops support for 32-bit plugins; if you need to ship a 32-bit +plugin for 32-bit X-Plane 10, shipping using two schemes and two binaries may +be the best option. + X-Plane SDK Release 2.1.3 11/14/13 Fixed XPC Wrappers to use int and intptr_t instead of long. This fixes diff --git a/LTAPI.cpp b/LTAPI.cpp index b44d56d..19e556f 100644 --- a/LTAPI.cpp +++ b/LTAPI.cpp @@ -10,7 +10,7 @@ /// textual info like type, registration, call sign, flight number. /// @see https://twinfan.github.io/LTAPI/ /// @author Birger Hoppe -/// @copyright (c) 2019-2020 Birger Hoppe +/// @copyright (c) 2019-2025 Birger Hoppe /// @copyright Permission is hereby granted, free of charge, to any person obtaining a /// copy of this software and associated documentation files (the "Software"), /// to deal in the Software without restriction, including without limitation @@ -277,6 +277,7 @@ std::string LTAPIAircraft::getPhaseStr () const { switch (bulk.bits.phase) { case FPH_UNKNOWN: return "Unknown"; + case FPH_PARKED: return "Parked"; case FPH_TAXI: return "Taxi"; case FPH_TAKE_OFF: return "Take Off"; case FPH_TO_ROLL: return "Take Off Roll"; diff --git a/LTAPI.doxygen b/LTAPI.doxygen index 3dcf017..7abe7c7 100644 --- a/LTAPI.doxygen +++ b/LTAPI.doxygen @@ -1,7 +1,7 @@ -# Doxyfile 1.8.18 +# Doxyfile 1.12.0 # This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. +# Doxygen (www.doxygen.org) for a project. # # All text after a double hash (##) is considered a comment and is placed in # front of the TAG it is preceding. @@ -12,6 +12,16 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use Doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use Doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options @@ -32,7 +42,7 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = "LTAPI" +PROJECT_NAME = LTAPI # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version @@ -53,24 +63,42 @@ PROJECT_BRIEF = "API to access LiveTraffic's aircraft information" PROJECT_LOGO = +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If +# entered, it will be relative to the location where Doxygen was started. If # left blank the current directory will be used. OUTPUT_DIRECTORY = docs -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where +# If the CREATE_SUBDIRS tag is set to YES then Doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this +# option can be useful when feeding Doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + +# If the ALLOW_UNICODE_NAMES tag is set to YES, Doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # U+3044. @@ -79,36 +107,28 @@ CREATE_SUBDIRS = NO ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this +# documentation generated by Doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English -# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all generated output in the proper direction. -# Possible values are: None, LTR, RTL and Context. -# The default value is: None. - -OUTPUT_TEXT_DIRECTION = None - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# If the BRIEF_MEMBER_DESC tag is set to YES, Doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# If the REPEAT_BRIEF tag is set to YES, Doxygen will prepend the brief # description of a member or function before the detailed description # # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the @@ -139,13 +159,13 @@ ABBREVIATE_BRIEF = "The $name class" \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief +# Doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. ALWAYS_DETAILED_SEC = NO -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# If the INLINE_INHERITED_MEMB tag is set to YES, Doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. @@ -153,7 +173,7 @@ ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# If the FULL_PATH_NAMES tag is set to YES, Doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. @@ -163,11 +183,11 @@ FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand # part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to +# If left blank the directory from which Doxygen is run is used as the path to # strip. # # Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. +# will be relative from the directory where Doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = @@ -181,14 +201,14 @@ STRIP_FROM_PATH = STRIP_FROM_INC_PATH = -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# If the SHORT_NAMES tag is set to YES, Doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. SHORT_NAMES = NO -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief # description. If set to NO, the Javadoc-style will behave just like regular Qt- # style comments (thus requiring an explicit @brief command for a brief @@ -197,17 +217,17 @@ SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO -# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# If the JAVADOC_BANNER tag is set to YES then Doxygen will interpret a line # such as # /*************** # as being the beginning of a Javadoc-style comment "banner". If set to NO, the # Javadoc-style will behave just like regular comments and it will not be -# interpreted by doxygen. +# interpreted by Doxygen. # The default value is: NO. JAVADOC_BANNER = NO -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If # set to NO, the Qt-style will behave just like regular Qt-style comments (thus # requiring an explicit \brief command for a brief description.) @@ -215,7 +235,7 @@ JAVADOC_BANNER = NO QT_AUTOBRIEF = NO -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as # a brief description. This used to be the default behavior. The new default is # to treat a multi-line C++ comment block as a detailed description. Set this @@ -227,13 +247,21 @@ QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +# By default Python docstrings are displayed as preformatted text and Doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# Doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as Doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. INHERIT_DOCS = YES -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# If the SEPARATE_MEMBER_PAGES tag is set to YES then Doxygen will produce a new # page for each member. If set to NO, the documentation of a member will be part # of the file/class/namespace that contains it. # The default value is: NO. @@ -250,16 +278,16 @@ TAB_SIZE = 4 # the documentation. An alias has the form: # name=value # For example adding -# "sideeffect=@par Side Effects:\n" +# "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines (in the resulting output). You can put ^^ in the value part of an -# alias to insert a newline as if a physical newline was in the original file. -# When you need a literal { or } or , in the value part of an alias you have to -# escape them by means of a backslash (\), this can lead to conflicts with the -# commands \{ and \} for these it is advised to use the version @{ and @} or use -# a double escape (\\{ and \\}) +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) ALIASES = @@ -303,27 +331,30 @@ OPTIMIZE_OUTPUT_SLICE = NO # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, -# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# language is one of the parsers supported by Doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files). For instance to make doxygen treat .inc files +# default for Fortran type files). For instance to make Doxygen treat .inc files # as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by Doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# If the MARKDOWN_SUPPORT tag is enabled then Doxygen pre-processes all comments # according to the Markdown format, which allows for more readable # documentation. See https://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# The output of markdown processing is further processed by Doxygen, so you can +# mix Doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. # The default value is: YES. @@ -333,12 +364,23 @@ MARKDOWN_SUPPORT = YES # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 5. +# Minimum value: 0, maximum value: 99, default value: 6. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 -# When enabled doxygen tries to link words that correspond to documented +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + +# When enabled Doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or # globally by setting AUTOLINK_SUPPORT to NO. @@ -348,10 +390,10 @@ AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and +# tag to YES in order to let Doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. +# versus func(std::string) {}). This also makes the inheritance and +# collaboration diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO @@ -363,16 +405,16 @@ BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. +# https://www.riverbankcomputing.com/software) sources only. Doxygen will parse +# them like normal C++ but will assume all classes use public instead of private +# inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. +# Doxygen to replace the get and set methods by a property in the documentation. # This will only work if the methods are indeed getting or setting a simple # type. If this is not the case, or you want to show the methods anyway, you # should set this option to NO. @@ -381,7 +423,7 @@ SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first +# tag is set to YES then Doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. # The default value is: NO. @@ -439,21 +481,42 @@ TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be # an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The +# code, Doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# Doxygen will become slower. If the cache is too large, memory is wasted. The # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest +# symbols. At the end of a run Doxygen will report the cache usage and suggest # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number of threads Doxygen is allowed to use +# during processing. When set to 0 Doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which effectively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# If the EXTRACT_ALL tag is set to YES, Doxygen will assume all entities in # documentation are documented, even if no documentation was available. Private # class members and static file members will be hidden unless the # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. @@ -512,7 +575,14 @@ EXTRACT_LOCAL_METHODS = NO EXTRACT_ANON_NSPACES = NO -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation # section is generated. This option has no effect if EXTRACT_ALL is enabled. @@ -520,22 +590,23 @@ EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. # The default value is: NO. HIDE_UNDOC_CLASSES = NO -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the # documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. If set to NO, these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. @@ -549,30 +620,44 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# (including Cygwin) ands Mac users are advised to set this option to NO. -# The default value is: system dependent. +# With the correct setting of option CASE_SENSE_NAMES Doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and macOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. CASE_SENSE_NAMES = YES -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# If the HIDE_SCOPE_NAMES tag is set to NO then Doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the # scope will be hidden. # The default value is: NO. HIDE_SCOPE_NAMES = NO -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then Doxygen will # append additional text to a page's title, such as Class Reference. If set to # YES the compound reference will be hidden. # The default value is: NO. HIDE_COMPOUND_REFERENCE= NO -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES then Doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -585,7 +670,7 @@ SHOW_INCLUDE_FILES = YES SHOW_GROUPED_MEMB_INC = NO -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. @@ -597,14 +682,14 @@ FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# If the SORT_MEMBER_DOCS tag is set to YES then Doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. # The default value is: YES. SORT_MEMBER_DOCS = YES -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# If the SORT_BRIEF_DOCS tag is set to YES then Doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member # name. If set to NO, the members will appear in declaration order. Note that # this will also influence the order of the classes in the class list. @@ -612,7 +697,7 @@ SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then Doxygen will sort the # (brief and detailed) documentation of class members so that constructors and # destructors are listed first. If set to NO the constructors will appear in the # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. @@ -624,7 +709,7 @@ SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = NO -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# If the SORT_GROUP_NAMES tag is set to YES then Doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. @@ -641,11 +726,11 @@ SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# If the STRICT_PROTO_MATCHING option is enabled and Doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between # the prototype and the implementation of a member function even if there is # only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# simple string match. By disabling STRICT_PROTO_MATCHING Doxygen will still # accept a match between prototype and implementation in such cases. # The default value is: NO. @@ -715,24 +800,25 @@ SHOW_FILES = YES SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from +# Doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command command input-file, where command is the value of the # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file +# by Doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated +# by Doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can +# that represents Doxygen's defaults, run Doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. # -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# Note that if you run Doxygen from a directory containing a file called +# DoxygenLayout.xml, Doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. LAYOUT_FILE = @@ -747,19 +833,35 @@ LAYOUT_FILE = CITE_BIB_FILES = +# The EXTERNAL_TOOL_PATH tag can be used to extend the search path (PATH +# environment variable) so that external tools such as latex and gs can be +# found. +# Note: Directories specified with EXTERNAL_TOOL_PATH are added in front of the +# path already specified by the PATH variable, and are added in the order +# specified. +# Note: This option is particularly useful for macOS version 14 (Sonoma) and +# higher, when running Doxygen from Doxywizard, because in this case any user- +# defined changes to the PATH are ignored. A typical example on macOS is to set +# EXTERNAL_TOOL_PATH = /Library/TeX/texbin /usr/local/bin +# together with the standard path, the full search path used by doxygen when +# launching external tools will then become +# PATH=/Library/TeX/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin + +EXTERNAL_TOOL_PATH = + #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the +# standard output by Doxygen. If QUIET is set to YES this implies that the # messages are off. # The default value is: NO. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# generated to standard error (stderr) by Doxygen. If WARNINGS is set to YES # this implies that the warnings are on. # # Tip: Turn warnings on while writing the documentation. @@ -767,49 +869,89 @@ QUIET = NO WARNINGS = YES -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# If the WARN_IF_UNDOCUMENTED tag is set to YES then Doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. WARN_IF_UNDOCUMENTED = YES -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. +# If the WARN_IF_DOC_ERROR tag is set to YES, Doxygen will generate warnings for +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES +# If WARN_IF_INCOMPLETE_DOC is set to YES, Doxygen will warn about incomplete +# function parameter documentation. If set to NO, Doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. If -# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# value. If set to NO, Doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, Doxygen will warn about +# undocumented enumeration values. If set to NO, Doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + +# If the WARN_AS_ERROR tag is set to YES then Doxygen will immediately stop when +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then Doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the Doxygen process Doxygen will return with a non-zero status. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then Doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined Doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. WARN_AS_ERROR = NO -# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# The WARN_FORMAT tag determines the format of the warning messages that Doxygen # can produce. The string should contain the $file, $line, and $text tags, which # will be replaced by the file and line number from which the warning originated # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of Doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard -# error (stderr). +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). WARN_LOGFILE = @@ -823,34 +965,48 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = MainPage.dox \ +INPUT = docs/MainPage.dox \ + README.md \ LTAPI.h \ LTAPI.cpp # This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv/) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that Doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). +# See also: INPUT_ENCODING for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. +# read by Doxygen. +# +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. # -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), -# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen -# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, -# *.vhdl, *.ucf, *.qsf and *.ice. +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, +# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to +# be provided as Doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.c \ *.cc \ @@ -908,7 +1064,7 @@ RECURSIVE = YES # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # -# Note that relative paths are relative to the directory from which doxygen is +# Note that relative paths are relative to the directory from which Doxygen is # run. EXCLUDE = @@ -933,10 +1089,7 @@ EXCLUDE_PATTERNS = # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* +# ANamespace::AClass, ANamespace::*Test EXCLUDE_SYMBOLS = @@ -966,7 +1119,7 @@ EXAMPLE_RECURSIVE = NO IMAGE_PATH = -# The INPUT_FILTER tag can be used to specify a program that doxygen should +# The INPUT_FILTER tag can be used to specify a program that Doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command: # @@ -981,9 +1134,14 @@ IMAGE_PATH = # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # +# Note that Doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. +# properly processed by Doxygen. INPUT_FILTER = @@ -996,7 +1154,7 @@ INPUT_FILTER = # # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. +# properly processed by Doxygen. FILTER_PATTERNS = @@ -1018,10 +1176,19 @@ FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page # (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. +# and want to reuse the introduction page also for the Doxygen output. USE_MDFILE_AS_MAINPAGE = +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- @@ -1036,12 +1203,13 @@ USE_MDFILE_AS_MAINPAGE = SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. +# multi-line macros, enums or list initialized variables directly into the +# documentation. # The default value is: NO. INLINE_SOURCES = NO -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct Doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. @@ -1079,7 +1247,7 @@ REFERENCES_LINK_SOURCE = YES SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# point to the HTML generated by the htags(1) tool instead of Doxygen built-in # source browser. The htags tool is part of GNU's global source tagging system # (see https://www.gnu.org/software/global/global.html). You will need version # 4.8.6 or higher. @@ -1093,14 +1261,14 @@ SOURCE_TOOLTIPS = YES # Doxygen will invoke htags (and that will in turn invoke gtags), so these # tools must be available from the command line (i.e. in the search path). # -# The result: instead of the source browser generated by doxygen, the links to +# The result: instead of the source browser generated by Doxygen, the links to # source code will now point to the output of htags. # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# If the VERBATIM_HEADERS tag is set the YES then Doxygen will generate a # verbatim copy of the header file for each class for which an include is # specified. Set to NO to disable this. # See also: Section \class. @@ -1108,31 +1276,42 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was +# If the CLANG_ASSISTED_PARSING tag is set to YES then Doxygen will use the +# clang parser (see: +# http://clang.llvm.org/) for more accurate parsing at the cost of reduced +# performance. This can be particularly helpful with template rich C++ code for +# which Doxygen's built-in parser lacks the necessary type information. +# Note: The availability of this option depends on whether or not Doxygen was # generated with the -Duse_libclang=ON option for CMake. # The default value is: NO. CLANG_ASSISTED_PARSING = NO +# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS +# tag is set to YES then Doxygen will add the directory of each input to the +# include path. +# The default value is: YES. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_ADD_INC_PATHS = YES + # If clang assisted parsing is enabled you can provide the compiler with command # line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories +# the include paths will already be set by Doxygen for the files and directories # specified with INPUT and INCLUDE_PATH. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. CLANG_OPTIONS = # If clang assisted parsing is enabled you can provide the clang parser with the -# path to the compilation database (see: -# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files -# were built. This is equivalent to specifying the "-p" option to a clang tool, -# such as clang-check. These options will then be passed to the parser. -# Note: The availability of this option depends on whether or not doxygen was +# path to the directory containing a file called compile_commands.json. This +# file is the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the +# options used when the source files were built. This is equivalent to +# specifying the -p option to a clang tool, such as clang-check. These options +# will then be passed to the parser. Any options specified with CLANG_OPTIONS +# will be added as well. +# Note: The availability of this option depends on whether or not Doxygen was # generated with the -Duse_libclang=ON option for CMake. CLANG_DATABASE_PATH = @@ -1148,17 +1327,11 @@ CLANG_DATABASE_PATH = ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = @@ -1167,7 +1340,7 @@ IGNORE_PREFIX = # Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# If the GENERATE_HTML tag is set to YES, Doxygen will generate HTML output # The default value is: YES. GENERATE_HTML = YES @@ -1188,40 +1361,40 @@ HTML_OUTPUT = html HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a +# each generated HTML page. If the tag is left blank Doxygen will generate a # standard header. # # To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. +# that Doxygen needs, which is dependent on the configuration options used (e.g. # the setting GENERATE_TREEVIEW). It is highly recommended to start with a # default header using # doxygen -w html new_header.html new_footer.html new_stylesheet.css # YourConfigFile # and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally +# for information on how to generate the default header that Doxygen normally # uses. # Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description +# default header when upgrading to a newer version of Doxygen. For a description # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard +# generated HTML page. If the tag is left blank Doxygen will generate a standard # footer. See HTML_HEADER for more information on how to generate a default # footer and what special commands can be used inside the footer. See also # section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. +# that Doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. +# the HTML output. If left blank Doxygen will generate a default style sheet. # See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. +# sheet that Doxygen normally uses. # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as # it is more robust and this tag (HTML_STYLESHEET) will in the future become # obsolete. @@ -1231,13 +1404,18 @@ HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. +# created by Doxygen. Using this option one can overrule certain style aspects. # This is preferred over using HTML_STYLESHEET since it does not replace the # standard style sheet and is therefore more robust against future updates. # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. # This tag requires that the tag GENERATE_HTML is set to YES. HTML_EXTRA_STYLESHEET = @@ -1252,9 +1430,22 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generates light mode output, DARK always +# generates dark mode output, AUTO_LIGHT automatically sets the mode according +# to the user preference, uses light mode if no preference is set (the default), +# AUTO_DARK automatically sets the mode according to the user preference, uses +# dark mode if no preference is set and TOGGLE allows a user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see +# this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. @@ -1264,7 +1455,7 @@ HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A +# in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1282,15 +1473,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1310,6 +1492,33 @@ HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = YES +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + +# If the HTML_COPY_CLIPBOARD tag is set to YES then Doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# Doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -1325,10 +1534,11 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/xcode/), introduced with OSX -# 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, Doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. @@ -1345,6 +1555,13 @@ GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. # com.mycompany.MyDocSet. Doxygen will append .docset to the name. @@ -1367,14 +1584,18 @@ DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# If the GENERATE_HTMLHELP tag is set to YES then Doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# generated by Doxygen into a single compiled HTML file (.chm). Compiled HTML # files are now used as the Windows 98 help format, and will replace the old # Windows help format (.hlp) on all Windows platforms in the future. Compressed # HTML files also contain an index, a table of contents, and you can search for @@ -1394,14 +1615,14 @@ CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. +# Doxygen will try to run the HTML help compiler on the generated index.hhp. # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1428,6 +1649,16 @@ BINARY_TOC = NO TOC_EXPAND = NO +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help @@ -1446,7 +1677,8 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1454,8 +1686,8 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1463,16 +1695,16 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = @@ -1484,9 +1716,9 @@ QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty Doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @@ -1529,18 +1761,30 @@ DISABLE_INDEX = NO # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by Doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATE_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. +# Doxygen will group on one line in the generated HTML documentation. # # Note that a value of 0 will completely suppress the enum values from appearing # in the overview section. @@ -1549,6 +1793,12 @@ GENERATE_TREEVIEW = NO ENUM_VALUES_PER_LINE = 4 +# When the SHOW_ENUM_VALUES tag is set doxygen will show the specified +# enumeration values besides the enumeration mnemonics. +# The default value is: NO. + +SHOW_ENUM_VALUES = NO + # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. @@ -1556,19 +1806,26 @@ ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# If the EXT_LINKS_IN_WINDOW option is set to YES, Doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO -# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# If the OBFUSCATE_EMAILS tag is set to YES, Doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + +# If the HTML_FORMULA_FORMAT option is set to svg, Doxygen will use the pdf2svg # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. -# Possible values are: png The default and svg Looks nicer but requires the -# pdf2svg tool. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1576,24 +1833,13 @@ HTML_FORMULA_FORMAT = png # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML +# Doxygen run you need to manually remove any form_*.png images from the HTML # output directory to force them to be regenerated. # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1611,11 +1857,29 @@ FORMULA_MACROFILE = USE_MATHJAX = NO +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + # When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for MathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1628,33 +1892,40 @@ MATHJAX_FORMAT = HTML-CSS # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# The MATHJAX_CODEFILE tag can be used to specify a file with JavaScript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_CODEFILE = -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and +# When the SEARCHENGINE tag is enabled Doxygen will generate a search box for +# the HTML output. The underlying search engine uses JavaScript and DHTML and # should work on any modern browser. Note that when using HTML help # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) # there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then +# For large projects the JavaScript based search engine can be slow, then # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to # search using the keyboard; to jump to the search box use + S # (what the is depends on the OS and browser, but it is typically @@ -1673,7 +1944,7 @@ SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH -# setting. When disabled, doxygen will generate a PHP script for searching and +# setting. When disabled, Doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing # and searching needs to be provided by external tools. See the section # "External Indexing and Searching" for details. @@ -1682,7 +1953,7 @@ SEARCHENGINE = NO SERVER_BASED_SEARCH = NO -# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP +# When EXTERNAL_SEARCH tag is enabled Doxygen will no longer generate the PHP # script for searching. Instead the search results are written to an XML file # which needs to be processed by an external indexer. Doxygen will invoke an # external search engine pointed to by the SEARCHENGINE_URL option to obtain the @@ -1690,7 +1961,8 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1703,8 +1975,9 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1725,7 +1998,7 @@ SEARCHDATA_FILE = searchdata.xml EXTERNAL_SEARCH_ID = -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through Doxygen # projects other than the one defined by this configuration file, but that are # all added to the same external search index. Each project needs to have a # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of @@ -1739,7 +2012,7 @@ EXTRA_SEARCH_MAPPINGS = # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- -# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. +# If the GENERATE_LATEX tag is set to YES, Doxygen will generate LaTeX output. # The default value is: YES. GENERATE_LATEX = NO @@ -1784,7 +2057,7 @@ MAKEINDEX_CMD_NAME = makeindex LATEX_MAKEINDEX_CMD = \makeindex -# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX +# If the COMPACT_LATEX tag is set to YES, Doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1813,36 +2086,38 @@ PAPER_TYPE = a4 EXTRA_PACKAGES = -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. +# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for +# the generated LaTeX document. The header should contain everything until the +# first chapter. If it is left blank Doxygen will generate a standard header. It +# is highly recommended to start with a default header using +# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty +# and then modify the file new_header.tex. See also section "Doxygen usage" for +# information on how to generate the default header that Doxygen normally uses. # -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. +# Note: Only use a user-defined header if you know what you are doing! +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of Doxygen. The following +# commands have a special meaning inside the header (and footer): For a +# description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See +# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for +# the generated LaTeX document. The footer should contain everything after the +# last chapter. If it is left blank Doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! +# special commands can be used inside the footer. See also section "Doxygen +# usage" for information on how to generate the default footer that Doxygen +# normally uses. Note: Only use a user-defined footer if you know what you are +# doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined # LaTeX style sheets that are included after the standard style sheets created -# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# by Doxygen. Using this option one can overrule certain style aspects. Doxygen # will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the @@ -1868,40 +2143,38 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, Doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. USE_PDFLATEX = YES -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. +# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error. +# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch +# mode nothing is printed on the terminal, errors are scrolled as if is +# hit at every error; missing files that TeX tries to input or request from +# keyboard input (\read on a not open input stream) cause the job to abort, +# NON_STOP In nonstop mode the diagnostic message will appear on the terminal, +# but there is no possibility of user interaction just like in batch mode, +# SCROLL In scroll mode, TeX will stop only for missing files to input or if +# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at +# each error, asking for user intervention. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_BATCHMODE = NO -# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the +# If the LATEX_HIDE_INDICES tag is set to YES then Doxygen will not include the # index chapters (such as File Index, Compound Index, etc.) in the output. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HIDE_INDICES = NO -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. @@ -1910,14 +2183,6 @@ LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the @@ -1930,7 +2195,7 @@ LATEX_EMOJI_DIRECTORY = # Configuration options related to the RTF output #--------------------------------------------------------------------------- -# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The +# If the GENERATE_RTF tag is set to YES, Doxygen will generate RTF output. The # RTF output is optimized for Word 97 and may not look too pretty with other RTF # readers/editors. # The default value is: NO. @@ -1945,7 +2210,7 @@ GENERATE_RTF = NO RTF_OUTPUT = rtf -# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF +# If the COMPACT_RTF tag is set to YES, Doxygen generates more compact RTF # documents. This may be useful for small projects and may help to save some # trees in general. # The default value is: NO. @@ -1965,38 +2230,36 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's +# Load stylesheet definitions from file. Syntax is similar to Doxygen's # configuration file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the -# default style sheet that doxygen normally uses. +# default style sheet that Doxygen normally uses. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's configuration file. A template extensions file can be +# similar to Doxygen's configuration file. A template extensions file can be # generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. +# The RTF_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the RTF_OUTPUT output directory. +# Note that the files will be copied as-is; there are no commands or markers +# available. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_SOURCE_CODE = NO +RTF_EXTRA_FILES = #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- -# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for +# If the GENERATE_MAN tag is set to YES, Doxygen will generate man pages for # classes and files. # The default value is: NO. @@ -2027,7 +2290,7 @@ MAN_EXTENSION = .3 MAN_SUBDIR = -# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, then it # will generate one additional man file for each entity documented in the real # man page(s). These additional files only source the real man page, but without # them the man command would be unable to find the correct page. @@ -2040,7 +2303,7 @@ MAN_LINKS = NO # Configuration options related to the XML output #--------------------------------------------------------------------------- -# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that +# If the GENERATE_XML tag is set to YES, Doxygen will generate an XML file that # captures the structure of the code including all documentation. # The default value is: NO. @@ -2054,7 +2317,7 @@ GENERATE_XML = NO XML_OUTPUT = xml -# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program +# If the XML_PROGRAMLISTING tag is set to YES, Doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to # the XML output. Note that enabling this will significantly increase the size # of the XML output. @@ -2063,7 +2326,7 @@ XML_OUTPUT = xml XML_PROGRAMLISTING = YES -# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, Doxygen will include # namespace members in file scope as well, matching the HTML output. # The default value is: NO. # This tag requires that the tag GENERATE_XML is set to YES. @@ -2074,7 +2337,7 @@ XML_NS_MEMB_FILE_SCOPE = NO # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- -# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files +# If the GENERATE_DOCBOOK tag is set to YES, Doxygen will generate Docbook files # that can be used to generate PDF. # The default value is: NO. @@ -2088,32 +2351,49 @@ GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- -# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# If the GENERATE_AUTOGEN_DEF tag is set to YES, Doxygen will generate an +# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to Sqlite3 output +#--------------------------------------------------------------------------- + +# If the GENERATE_SQLITE3 tag is set to YES Doxygen will generate a Sqlite3 +# database with symbols found by Doxygen stored in tables. +# The default value is: NO. + +GENERATE_SQLITE3 = NO + +# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be +# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put +# in front of it. +# The default directory is: sqlite3. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_OUTPUT = sqlite3 + +# The SQLITE3_RECREATE_DB tag is set to YES, the existing doxygen_sqlite3.db +# database file will be recreated with each Doxygen run. If set to NO, Doxygen +# will warn if a database file is already found and not modify it. +# The default value is: YES. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_RECREATE_DB = YES + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- -# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module +# If the GENERATE_PERLMOD tag is set to YES, Doxygen will generate a Perl module # file that captures the structure of the code including all documentation. # # Note that this feature is still experimental and incomplete at the moment. @@ -2121,7 +2401,7 @@ GENERATE_AUTOGEN_DEF = NO GENERATE_PERLMOD = NO -# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary +# If the PERLMOD_LATEX tag is set to YES, Doxygen will generate the necessary # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI # output from the Perl module output. # The default value is: NO. @@ -2151,13 +2431,13 @@ PERLMOD_MAKEVAR_PREFIX = # Configuration options related to the preprocessor #--------------------------------------------------------------------------- -# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all +# If the ENABLE_PREPROCESSING tag is set to YES, Doxygen will evaluate all # C-preprocessor directives found in the sources and include files. # The default value is: YES. ENABLE_PREPROCESSING = YES -# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# If the MACRO_EXPANSION tag is set to YES, Doxygen will expand all macro names # in the source code. If set to NO, only conditional compilation will be # performed. Macro expansion can be done in a controlled way by setting # EXPAND_ONLY_PREDEF to YES. @@ -2183,7 +2463,8 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = @@ -2215,7 +2496,7 @@ PREDEFINED = EXPAND_AS_DEFINED = -# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will +# If the SKIP_FUNCTION_MACROS tag is set to YES then Doxygen's preprocessor will # remove all references to function-like macros that are alone on a line, have # an all uppercase name, and do not end with a semicolon. Such function macros # are typically used for boiler-plate code, and will confuse the parser if not @@ -2239,26 +2520,26 @@ SKIP_FUNCTION_MACROS = YES # section "Linking to external documentation" for more information about the use # of tag files. # Note: Each tag file must have a unique name (where the name does NOT include -# the path). If a tag file is not located in the directory in which doxygen is +# the path). If a tag file is not located in the directory in which Doxygen is # run, you must also specify the path to the tagfile here. TAGFILES = -# When a file name is specified after GENERATE_TAGFILE, doxygen will create a +# When a file name is specified after GENERATE_TAGFILE, Doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. +# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces +# will be listed in the class and namespace index. If set to NO, only the +# inherited external classes will be listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be +# in the topic index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. @@ -2272,42 +2553,26 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. HIDE_UNDOC_RELATIONS = YES -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# If you set the HAVE_DOT tag to YES then Doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO # The default value is: NO. HAVE_DOT = NO -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed -# to run in parallel. When set to 0 doxygen will base this on the number of +# The DOT_NUM_THREADS specifies the number of dot invocations Doxygen is allowed +# to run in parallel. When set to 0 Doxygen will base this on the number of # processors available in the system. You can set it explicitly to a value # larger than 0 to get control over the balance between CPU load and processing # speed. @@ -2316,55 +2581,83 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. +# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of +# subgraphs. When you want a differently looking font in the dot files that +# Doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# For details please see Node, +# Edge and Graph Attributes specification You need to make sure dot is able +# to find the font, which can be done by putting it in a standard location or by +# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. Default graphviz fontsize is 14. +# The default value is: fontname=Helvetica,fontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = Helvetica +DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. +# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can +# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about +# arrows shapes. +# The default value is: labelfontname=Helvetica,labelfontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. +# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes +# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification +# The default value is: shape=box,height=0.2,width=0.4. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" + +# You can set the path where dot can find font specified with fontname in +# DOT_COMMON_ATTR and others dot attributes. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then Doxygen will +# generate a graph for each documented class showing the direct and indirect +# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and +# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case +# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the +# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. +# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance +# relations will be shown as texts / links. Explicit enabling an inheritance +# graph or choosing a different representation for an inheritance graph of a +# specific class, can be accomplished by means of the command \inheritancegraph. +# Disabling an inheritance graph can be accomplished by means of the command +# \hideinheritancegraph. +# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. CLASS_GRAPH = YES -# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a +# If the COLLABORATION_GRAPH tag is set to YES then Doxygen will generate a # graph for each documented class showing the direct and indirect implementation # dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. +# class with other documented classes. Explicit enabling a collaboration graph, +# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the +# command \collaborationgraph. Disabling a collaboration graph can be +# accomplished by means of the command \hidecollaborationgraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. COLLABORATION_GRAPH = YES -# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# If the GROUP_GRAPHS tag is set to YES then Doxygen will generate a graph for +# groups, showing the direct groups dependencies. Explicit enabling a group +# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means +# of the command \groupgraph. Disabling a directory graph can be accomplished by +# means of the command \hidegroupgraph. See also the chapter Grouping in the +# manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GROUP_GRAPHS = YES -# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and +# If the UML_LOOK tag is set to YES, Doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. # The default value is: NO. @@ -2381,10 +2674,32 @@ UML_LOOK = NO # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 10 +# If the DOT_UML_DETAILS tag is set to NO, Doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, Doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, Doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will be wrapped across multiple lines. Some heuristics are +# applied to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2394,24 +2709,29 @@ UML_LIMIT_NUM_FIELDS = 10 TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to -# YES then doxygen will generate a graph for each documented file showing the +# YES then Doxygen will generate a graph for each documented file showing the # direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO, +# can be accomplished by means of the command \includegraph. Disabling an +# include graph can be accomplished by means of the command \hideincludegraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. INCLUDE_GRAPH = YES # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are -# set to YES then doxygen will generate a graph for each documented file showing +# set to YES then Doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set +# to NO, can be accomplished by means of the command \includedbygraph. Disabling +# an included by graph can be accomplished by means of the command +# \hideincludedbygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. INCLUDED_BY_GRAPH = YES -# If the CALL_GRAPH tag is set to YES then doxygen will generate a call +# If the CALL_GRAPH tag is set to YES then Doxygen will generate a call # dependency graph for every global function or class method. # # Note that enabling this option will significantly increase the time of a run. @@ -2423,7 +2743,7 @@ INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO -# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller +# If the CALLER_GRAPH tag is set to YES then Doxygen will generate a caller # dependency graph for every global function or class method. # # Note that enabling this option will significantly increase the time of a run. @@ -2435,26 +2755,36 @@ CALL_GRAPH = NO CALLER_GRAPH = NO -# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical +# If the GRAPHICAL_HIERARCHY tag is set to YES then Doxygen will graphical # hierarchy of all classes instead of a textual one. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GRAPHICAL_HIERARCHY = YES -# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the +# If the DIRECTORY_GRAPH tag is set to YES then Doxygen will show the # dependencies a directory has on other directories in a graphical way. The # dependency relations are determined by the #include relations between the -# files in the directories. +# files in the directories. Explicit enabling a directory graph, when +# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command +# \directorygraph. Disabling a directory graph can be accomplished by means of +# the command \hidedirectorygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. DIRECTORY_GRAPH = YES +# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels +# of child directories generated in directory dependency graphs by dot. +# Minimum value: 1, maximum value: 25, default value: 1. +# This tag requires that the tag DIRECTORY_GRAPH is set to YES. + +DIR_GRAPH_MAX_DEPTH = 1 + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). +# https://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). @@ -2491,11 +2821,12 @@ DOT_PATH = DOTFILE_DIRS = -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). +# You can include diagrams made with dia in Doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. -MSCFILE_DIRS = +DIA_PATH = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile @@ -2503,28 +2834,28 @@ MSCFILE_DIRS = DIAFILE_DIRS = -# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. +# When using PlantUML, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file or to the filename of jar file +# to be used. If left blank, it is assumed PlantUML is not used or called during +# a preprocessing step. Doxygen will generate a warning when it encounters a +# \startuml command in this case and will not generate output for the diagram. PLANTUML_JAR_PATH = -# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a -# configuration file for plantuml. +# When using PlantUML, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for PlantUML. PLANTUML_CFG_FILE = -# When using plantuml, the specified paths are searched for files specified by -# the !include statement in a plantuml block. +# When using PlantUML, the specified paths are searched for files specified by +# the !include statement in a PlantUML block. PLANTUML_INCLUDE_PATH = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes -# larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct +# larger than this value, Doxygen will truncate the graph, which is visualized +# by representing a node as a red box. Note that if the number of direct # children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. @@ -2545,18 +2876,6 @@ DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support @@ -2566,17 +2885,37 @@ DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO -# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page +# If the GENERATE_LEGEND tag is set to YES Doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated # graphs. +# Note: This tag requires that UML_LOOK isn't set, i.e. the Doxygen internal +# graphical representation for inheritance and collaboration diagrams is used. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, Doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc temporary +# files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES + +# You can define message sequence charts within Doxygen comments using the \msc +# command. If the MSCGEN_TOOL tag is left empty (the default), then Doxygen will +# use a built-in version of mscgen tool to produce the charts. Alternatively, +# the MSCGEN_TOOL tag can also specify the name an external tool. For instance, +# specifying prog as the value, Doxygen will call the tool as prog -T +# -o . The external tool should support +# output file formats "png", "eps", "svg", and "ismap". + +MSCGEN_TOOL = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = diff --git a/LTAPI.doxygen.bak b/LTAPI.doxygen.bak deleted file mode 100644 index e28443c..0000000 --- a/LTAPI.doxygen.bak +++ /dev/null @@ -1,2565 +0,0 @@ -# Doxyfile 1.8.15 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the configuration -# file that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# https://www.gnu.org/software/libiconv/ for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "LTAPI" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "API to access LiveTraffic's aircraft information" - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = Documentation - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all generated output in the proper direction. -# Possible values are: None, LTR, RTL and Context. -# The default value is: None. - -OUTPUT_TEXT_DIRECTION = None - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines (in the resulting output). You can put ^^ in the value part of an -# alias to insert a newline as if a physical newline was in the original file. -# When you need a literal { or } or , in the value part of an alias you have to -# escape them by means of a backslash (\), this can lead to conflicts with the -# commands \{ and \} for these it is advised to use the version @{ and @} or use -# a double escape (\\{ and \\}) - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice -# sources only. Doxygen will then generate output that is more tailored for that -# language. For instance, namespaces will be presented as modules, types will be -# separated into more groups, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_SLICE = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, -# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: -# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser -# tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is -# Fortran), use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See https://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 0 - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = YES - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. If -# EXTRACT_ALL is set to YES then this flag will automatically be disabled. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = MainPage.dox README.md LTAPI.h LTAPI.cpp - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv/) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. - -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.idl \ - *.ddl \ - *.odl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.cs \ - *.d \ - *.php \ - *.php4 \ - *.php5 \ - *.phtml \ - *.inc \ - *.m \ - *.markdown \ - *.md \ - *.mm \ - *.dox \ - *.py \ - *.pyw \ - *.f90 \ - *.f95 \ - *.f03 \ - *.f08 \ - *.f \ - *.for \ - *.tcl \ - *.vhd \ - *.vhdl \ - *.ucf \ - *.qsf \ - *.ice - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# entity all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see https://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse_libclang=ON option for CMake. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -# If clang assisted parsing is enabled you can provide the clang parser with the -# path to the compilation database (see: -# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files -# were built. This is equivalent to specifying the "-p" option to a clang tool, -# such as clang-check. These options will then be passed to the parser. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse_libclang=ON option for CMake. - -CLANG_DATABASE_PATH = - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# https://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - -# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML -# documentation will contain a main index with vertical navigation menus that -# are dynamically created via Javascript. If disabled, the navigation index will -# consists of multiple levels of tabs that are statically embedded in every HTML -# page. Disable this option to support browsers that do not have Javascript, -# like the Qt help browser. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_MENUS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = YES - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/xcode/), introduced with OSX -# 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy -# genXcode/_index.html for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# https://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /