diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2e7bbdc..a2cc985 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,7 +6,7 @@ include(GNUInstallDirs)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release;RelWithDebInfo;MinSizeRel;Coverage")
-set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD 14)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
@@ -164,7 +164,7 @@ include_directories(
libs/libevents
libs/mavlink/include/mavlink/v2.0
- libs/mavlink/include/mavlink/v2.0/all
+ libs/mavlink/include/mavlink/v2.0/ardupilotmega
libs/mavlink/include/mavlink/v2.0/common
libs/shapelib
@@ -178,6 +178,8 @@ set(QGC_RESOURCES
${CMAKE_CURRENT_SOURCE_DIR}/qgcresources.qrc
${CMAKE_CURRENT_SOURCE_DIR}/qgroundcontrol.qrc
${CMAKE_CURRENT_SOURCE_DIR}/resources/InstrumentValueIcons/InstrumentValueIcons.qrc
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/Airmap/airmap.qrc
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/Airmap/dummy/airmap_dummy.qrc
${CMAKE_CURRENT_SOURCE_DIR}/src/FirmwarePlugin/APM/APMResources.qrc
${CMAKE_CURRENT_SOURCE_DIR}/src/FirmwarePlugin/PX4/PX4Resources.qrc
${CMAKE_CURRENT_SOURCE_DIR}/VideoReceiverApp/qml.qrc
diff --git a/QGCCommon.pri b/QGCCommon.pri
index f39686c..d45af61 100644
--- a/QGCCommon.pri
+++ b/QGCCommon.pri
@@ -20,7 +20,9 @@ CONFIG -= debug_and_release
CONFIG += warn_on
CONFIG += resources_big
CONFIG += c++17
-
+
+DEFINES += DISABLE_AIRMAP # AIRMAP SDK does not exist anymore
+
linux {
linux-g++ | linux-g++-64 | linux-g++-32 | linux-clang {
message("Linux build")
@@ -107,21 +109,19 @@ linux {
QMAKE_CXXFLAGS += -fvisibility=hidden
QMAKE_CXXFLAGS_WARN_ON += -Werror \
-Wno-unused-parameter \ # gst-plugins-good
- -Wno-unused-but-set-variable \ # eigen & QGCTileCacheWorker.cpp
-Wno-deprecated-declarations # eigen
} else {
error("Unsupported Mac toolchain, only 64-bit LLVM+clang is supported")
}
} else : ios {
message("iOS build")
- CONFIG += iOSBuild MobileBuild app_bundle
+ CONFIG += iOSBuild MobileBuild app_bundle NoSerialBuild
CONFIG -= bitcode
DEFINES += __ios__
DEFINES += QGC_NO_GOOGLE_MAPS
DEFINES += NO_SERIAL_LINK
DEFINES += QGC_DISABLE_UVC
DEFINES += QGC_GST_TAISYNC_ENABLED
- DEFINES += NO_SERIAL_LINK
QMAKE_IOS_DEPLOYMENT_TARGET = 11.0
QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 1,2 # Universal
QMAKE_LFLAGS += -Wl,-no_pie
@@ -143,10 +143,6 @@ linux|macx|ios {
}
}
-contains(DEFINES, NO_SERIAL_LINK) {
- message("Serial port support disabled")
-}
-
!MacBuild:!AndroidBuild {
# See QGCPostLinkCommon.pri for details on why MacBuild doesn't use DESTDIR
DESTDIR = staging
@@ -199,8 +195,6 @@ exists ($$PWD/.git) {
DEFINES += APP_VERSION_STR=\"\\\"$$APP_VERSION_STR\\\"\"
AndroidBuild {
- QGC_ANDROID_PACKAGE = org.mavlink.qgroundcontrol
-
message(VERSION $${VERSION})
MAJOR_VERSION = $$section(VERSION, ".", 0, 0)
MINOR_VERSION = $$section(VERSION, ".", 1, 1)
diff --git a/QGCExternalLibs.pri b/QGCExternalLibs.pri
index ace9afc..e2a2307 100644
--- a/QGCExternalLibs.pri
+++ b/QGCExternalLibs.pri
@@ -54,8 +54,7 @@ isEmpty(MAVLINK_CONF) {
MAVLINK_CONF = $$fromfile(user_config.pri, MAVLINK_CONF)
message($$sprintf("Using user-supplied mavlink dialect '%1' specified in user_config.pri", $$MAVLINK_CONF))
} else {
- MAVLINK_CONF = all
- message($$sprintf("Using MAVLink dialect '%1'.", $$MAVLINK_CONF))
+ MAVLINK_CONF = ardupilotmega
}
}
@@ -68,18 +67,32 @@ contains (CONFIG, QGC_DISABLE_APM_MAVLINK) {
CONFIG += ArdupilotEnabled
}
+# First we select the dialect, checking for valid user selection
+# Users can override all other settings by specifying MAVLINK_CONF as an argument to qmake
+!isEmpty(MAVLINK_CONF) {
+ message($$sprintf("Using MAVLink dialect '%1'.", $$MAVLINK_CONF))
+}
+
# Then we add the proper include paths dependent on the dialect.
INCLUDEPATH += $$MAVLINKPATH
-count(MAVLINK_CONF, 1) {
- exists($$MAVLINKPATH/$$MAVLINK_CONF) {
- INCLUDEPATH += $$MAVLINKPATH/$$MAVLINK_CONF
- DEFINES += $$sprintf('QGC_USE_%1_MESSAGES', $$upper($$MAVLINK_CONF))
+exists($$MAVLINKPATH/common) {
+ !isEmpty(MAVLINK_CONF) {
+ count(MAVLINK_CONF, 1) {
+ exists($$MAVLINKPATH/$$MAVLINK_CONF) {
+ INCLUDEPATH += $$MAVLINKPATH/$$MAVLINK_CONF
+ DEFINES += $$sprintf('QGC_USE_%1_MESSAGES', $$upper($$MAVLINK_CONF))
+ } else {
+ error($$sprintf("MAVLink dialect '%1' does not exist at '%2'!", $$MAVLINK_CONF, $$MAVLINKPATH_REL))
+ }
+ } else {
+ error(Only a single mavlink dialect can be specified in MAVLINK_CONF)
+ }
} else {
- error($$sprintf("MAVLink dialect '%1' does not exist at '%2'!", $$MAVLINK_CONF, $$MAVLINKPATH_REL))
+ INCLUDEPATH += $$MAVLINKPATH/common
}
} else {
- error(Only a single mavlink dialect can be specified in MAVLINK_CONF)
+ error($$sprintf("MAVLink folder does not exist at '%1'! Run 'git submodule init && git submodule update' on the command line.",$$MAVLINKPATH_REL))
}
#
@@ -92,13 +105,11 @@ DEFINES += NOMINMAX
# [REQUIRED] Events submodule
HEADERS+= \
libs/libevents/libevents/libs/cpp/protocol/receive.h \
- libs/libevents/libevents/libs/cpp/parse/health_and_arming_checks.h \
libs/libevents/libevents/libs/cpp/parse/parser.h \
libs/libevents/libevents/libs/cpp/generated/events_generated.h \
libs/libevents/libevents_definitions.h
SOURCES += \
libs/libevents/libevents/libs/cpp/protocol/receive.cpp \
- libs/libevents/libevents/libs/cpp/parse/health_and_arming_checks.cpp \
libs/libevents/libevents/libs/cpp/parse/parser.cpp \
libs/libevents/definitions.cpp
INCLUDEPATH += \
@@ -213,9 +224,9 @@ MacBuild {
# Include Android OpenSSL libs
AndroidBuild {
include($$SOURCE_DIR/libs/OpenSSL/android_openssl/openssl.pri)
- #message("ANDROID_EXTRA_LIBS")
- #message($$ANDROID_TARGET_ARCH)
- #message($$ANDROID_EXTRA_LIBS)
+ message("ANDROID_EXTRA_LIBS")
+ message($$ANDROID_TARGET_ARCH)
+ message($$ANDROID_EXTRA_LIBS)
}
# Pairing
@@ -264,3 +275,54 @@ contains (DEFINES, DISABLE_ZEROCONF) {
} else {
message("Skipping support for Zeroconf (unsupported platform)")
}
+
+#
+# [OPTIONAL] AirMap Support
+#
+contains (DEFINES, DISABLE_AIRMAP) {
+ message("Skipping support for AirMap (manual override from command line)")
+# Otherwise the user can still disable this feature in the user_config.pri file.
+} else:exists(user_config.pri):infile(user_config.pri, DEFINES, DISABLE_AIRMAP) {
+ message("Skipping support for AirMap (manual override from user_config.pri)")
+} else {
+ AIRMAP_PLATFORM_SDK_PATH = $${OUT_PWD}/libs/airmap-platform-sdk
+ AIRMAP_QT_PATH = Qt.$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}
+ message("Including support for AirMap")
+ MacBuild {
+ exists("$${AIRMAPD_PATH}/macOS/$$AIRMAP_QT_PATH") {
+ message("Including support for AirMap for macOS")
+ LIBS += -L$${AIRMAPD_PATH}/macOS/$$AIRMAP_QT_PATH -lairmap-qt
+ DEFINES += QGC_AIRMAP_ENABLED
+ }
+ } else:LinuxBuild {
+ #-- Download and install platform-sdk libs and headers iff they're not already in the build directory
+ AIRMAP_PLATFORM_SDK_URL = "https://github.com/airmap/platform-sdk/releases/download/2.0/airmap-platform-sdk-2.0.0-Linux.deb"
+ AIRMAP_PLATFORM_SDK_FILEPATH = "$${OUT_PWD}/airmap-platform-sdk.deb"
+ AIRMAP_PLATFORM_SDK_INSTALL_DIR = "tmp"
+
+ airmap_platform_sdk_install.target = $${AIRMAP_PLATFORM_SDK_PATH}/include/airmap
+ airmap_platform_sdk_install.commands = \
+ rm -rf $${AIRMAP_PLATFORM_SDK_PATH} && \
+ mkdir -p "$${AIRMAP_PLATFORM_SDK_PATH}/linux/$${AIRMAP_QT_PATH}" && \
+ mkdir -p "$${AIRMAP_PLATFORM_SDK_PATH}/include/airmap" && \
+ mkdir -p "$${AIRMAP_PLATFORM_SDK_PATH}/$${AIRMAP_PLATFORM_SDK_INSTALL_DIR}" && \
+ curl --location --output "$${AIRMAP_PLATFORM_SDK_FILEPATH}" "$${AIRMAP_PLATFORM_SDK_URL}" && \
+ ar p "$${AIRMAP_PLATFORM_SDK_FILEPATH}" data.tar.gz | tar xvz -C "$${AIRMAP_PLATFORM_SDK_PATH}/$${AIRMAP_PLATFORM_SDK_INSTALL_DIR}/" --strip-components=1 && \
+ mv -u "$${AIRMAP_PLATFORM_SDK_PATH}/$${AIRMAP_PLATFORM_SDK_INSTALL_DIR}/usr/lib/x86_64-linux-gnu/*" "$${AIRMAP_PLATFORM_SDK_PATH}/linux/$${AIRMAP_QT_PATH}/" && \
+ mv -u "$${AIRMAP_PLATFORM_SDK_PATH}/$${AIRMAP_PLATFORM_SDK_INSTALL_DIR}/usr/include/airmap/*" "$${AIRMAP_PLATFORM_SDK_PATH}/include/airmap/" && \
+ rm -rf "$${AIRMAP_PLATFORM_SDK_PATH}/$${AIRMAP_PLATFORM_SDK_INSTALL_DIR}" && \
+ rm "$${AIRMAP_PLATFORM_SDK_FILEPATH}"
+ airmap_platform_sdk_install.depends =
+ QMAKE_EXTRA_TARGETS += airmap_platform_sdk_install
+ PRE_TARGETDEPS += $$airmap_platform_sdk_install.target
+
+ LIBS += -L$${AIRMAP_PLATFORM_SDK_PATH}/linux/$${AIRMAP_QT_PATH} -lairmap-cpp
+ DEFINES += QGC_AIRMAP_ENABLED
+ } else {
+ message("Skipping support for Airmap (unsupported platform)")
+ }
+ contains (DEFINES, QGC_AIRMAP_ENABLED) {
+ INCLUDEPATH += \
+ $${AIRMAP_PLATFORM_SDK_PATH}/include
+ }
+}
diff --git a/QGCPostLinkCommon.pri b/QGCPostLinkCommon.pri
index 4ad6b57..4816d61 100644
--- a/QGCPostLinkCommon.pri
+++ b/QGCPostLinkCommon.pri
@@ -25,12 +25,22 @@ MacBuild {
# with the differences between post list command running in a shell script (XCode) versus a makefile (Qt Creator)
macx-xcode {
# SDL2 Framework
- QMAKE_POST_LINK += && rsync -a --delete $$SOURCE_DIR/libs/Frameworks/SDL2.framework $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/Frameworks
+ QMAKE_POST_LINK += && rsync -a --delete $$SOURCE_DIR/libs/Frameworks/SDL2.Framework $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/Frameworks
QMAKE_POST_LINK += && install_name_tool -change "@rpath/SDL2.framework/Versions/A/SDL2" "@executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2" $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/MacOS/$${TARGET}
+ # AirMap
+ contains (DEFINES, QGC_AIRMAP_ENABLED) {
+ QMAKE_POST_LINK += && rsync -a $$SOURCE_DIR/libs/airmapd/macOS/$$AIRMAP_QT_PATH/* $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/Frameworks/
+ QMAKE_POST_LINK += && install_name_tool -change "@rpath/libairmap-qt.0.0.1.dylib" "@executable_path/../Frameworks/libairmap-qt.0.0.1.dylib" $BUILT_PRODUCTS_DIR/$${TARGET}.app/Contents/MacOS/$${TARGET}
+ }
} else {
# SDL2 Framework
- QMAKE_POST_LINK += && rsync -a --delete $$SOURCE_DIR/libs/Frameworks/SDL2.framework $${TARGET}.app/Contents/Frameworks
+ QMAKE_POST_LINK += && rsync -a --delete $$SOURCE_DIR/libs/Frameworks/SDL2.Framework $${TARGET}.app/Contents/Frameworks
QMAKE_POST_LINK += && install_name_tool -change "@rpath/SDL2.framework/Versions/A/SDL2" "@executable_path/../Frameworks/SDL2.framework/Versions/A/SDL2" $${TARGET}.app/Contents/MacOS/$${TARGET}
+ # AirMap
+ contains (DEFINES, QGC_AIRMAP_ENABLED) {
+ QMAKE_POST_LINK += && rsync -a $$SOURCE_DIR/libs/airmap-platform-sdk/macOS/$$AIRMAP_QT_PATH/* $${TARGET}.app/Contents/Frameworks/
+ QMAKE_POST_LINK += && install_name_tool -change "@rpath/libairmap-qt.0.0.1.dylib" "@executable_path/../Frameworks/libairmap-qt.0.0.1.dylib" $${TARGET}.app/Contents/MacOS/$${TARGET}
+ }
}
}
@@ -54,9 +64,7 @@ WindowsBuild {
# Copy Visual Studio DLLs
# Note that this is only done for release because the debugging versions of these DLLs cannot be redistributed.
QMAKE_POST_LINK += $$escape_expand(\\n) $$QMAKE_COPY \"$$SOURCE_DIR\\libs\\Microsoft\\windows\\msvcp140.dll\" \"$$DESTDIR\"
- QMAKE_POST_LINK += $$escape_expand(\\n) $$QMAKE_COPY \"$$SOURCE_DIR\\libs\\Microsoft\\windows\\msvcp140_1.dll\" \"$$DESTDIR\"
QMAKE_POST_LINK += $$escape_expand(\\n) $$QMAKE_COPY \"$$SOURCE_DIR\\libs\\Microsoft\\windows\\vcruntime140.dll\" \"$$DESTDIR\"
- QMAKE_POST_LINK += $$escape_expand(\\n) $$QMAKE_COPY \"$$SOURCE_DIR\\libs\\Microsoft\\windows\\vcruntime140_1.dll\" \"$$DESTDIR\"
}
DEPLOY_TARGET = $$shell_quote($$shell_path($$DESTDIR\\$${TARGET}.exe))
@@ -122,9 +130,9 @@ LinuxBuild {
libicui18n.so \
libicuuc.so
}
- # Copy only if non-existing to avoid file timestamp updates
+
for(QT_LIB, QT_LIB_LIST) {
- QMAKE_POST_LINK += && $$QMAKE_COPY -n --dereference $$[QT_INSTALL_LIBS]/$$QT_LIB $$DESTDIR/Qt/libs/
+ QMAKE_POST_LINK += && $$QMAKE_COPY --dereference $$[QT_INSTALL_LIBS]/$$QT_LIB $$DESTDIR/Qt/libs/
}
# QT_INSTALL_PLUGINS
@@ -144,11 +152,16 @@ LinuxBuild {
}
for(QT_PLUGIN, QT_PLUGIN_LIST) {
- QMAKE_POST_LINK += && $$QMAKE_COPY -n --dereference --recursive $$[QT_INSTALL_PLUGINS]/$$QT_PLUGIN $$DESTDIR/Qt/plugins/
+ QMAKE_POST_LINK += && $$QMAKE_COPY --dereference --recursive $$[QT_INSTALL_PLUGINS]/$$QT_PLUGIN $$DESTDIR/Qt/plugins/
}
# QT_INSTALL_QML
- QMAKE_POST_LINK += && $$QMAKE_COPY -n --dereference --recursive $$[QT_INSTALL_QML] $$DESTDIR/Qt/
+ QMAKE_POST_LINK += && $$QMAKE_COPY --dereference --recursive $$[QT_INSTALL_QML] $$DESTDIR/Qt/
+
+ # Airmap
+ contains (DEFINES, QGC_AIRMAP_ENABLED) {
+ QMAKE_POST_LINK += && $$QMAKE_COPY $$OUT_PWD/libs/airmap-platform-sdk/linux/$$AIRMAP_QT_PATH/libairmap-cpp.so.2.0.0 $$DESTDIR/Qt/libs/
+ }
# QGroundControl start script
contains (CONFIG, QGC_DISABLE_CUSTOM_BUILD) | !exists($$PWD/custom/custom.pri) {
diff --git a/QGCPostLinkInstaller.pri b/QGCPostLinkInstaller.pri
index 162f0a3..7c2a0b2 100644
--- a/QGCPostLinkInstaller.pri
+++ b/QGCPostLinkInstaller.pri
@@ -16,10 +16,10 @@ installer {
QMAKE_POST_LINK += && $$dirname(QMAKE_QMAKE)/macdeployqt $${TARGET}.app -appstore-compliant -verbose=1 -qmldir=$${SOURCE_DIR}/src
# macdeployqt is missing some relocations once in a while. "Fix" it:
- QMAKE_POST_LINK += && rsync -a --delete /Library/Frameworks/GStreamer.framework $${TARGET}.app/Contents/Frameworks
+ QMAKE_POST_LINK += && cp -R /Library/Frameworks/GStreamer.framework $${TARGET}.app/Contents/Frameworks
QMAKE_POST_LINK += && echo libexec
QMAKE_POST_LINK += && ln -sf $${TARGET}.app/Contents/Frameworks $${TARGET}.app/Contents/Frameworks/GStreamer.framework/Versions/1.0/libexec/Frameworks
- QMAKE_POST_LINK += && install_name_tool -change /Library/Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer @executable_path/../Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer $${TARGET}.app/Contents/MacOS/$${TARGET}
+ QMAKE_POST_LINK += && install_name_tool -change /Library/Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer @executable_path/../Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer $${TARGET}.app/Contents/MacOS/QGroundControl
QMAKE_POST_LINK += && rm -rf $${TARGET}.app/Contents/Frameworks/GStreamer.framework/Versions/1.0/{bin,etc,share,Headers,include,Commands}
QMAKE_POST_LINK += && rm -rf $${TARGET}.app/Contents/Frameworks/GStreamer.framework/Versions/1.0/lib/{*.a,*.la,glib-2.0,gst-validate-launcher,pkgconfig}
@@ -34,8 +34,6 @@ installer {
QMAKE_POST_LINK += && mkdir -p package
QMAKE_POST_LINK += && mkdir -p staging
QMAKE_POST_LINK += && rsync -a --delete $${TARGET}.app staging
- QMAKE_POST_LINK += && rm -rf /tmp/tmp.dmg
- QMAKE_POST_LINK += && rm -rf package/$${TARGET}.dmg
QMAKE_POST_LINK += && hdiutil create /tmp/tmp.dmg -ov -volname "$${TARGET}-$${MAC_VERSION}" -fs HFS+ -srcfolder "staging"
QMAKE_POST_LINK += && hdiutil convert /tmp/tmp.dmg -format UDBZ -o package/$${TARGET}.dmg
QMAKE_POST_LINK += && rm /tmp/tmp.dmg
@@ -51,13 +49,10 @@ installer {
}
AndroidBuild {
_ANDROID_KEYSTORE_PASSWORD = $$(ANDROID_KEYSTORE_PASSWORD)
- QMAKE_POST_LINK += && mkdir -p package
isEmpty(_ANDROID_KEYSTORE_PASSWORD) {
- message(Keystore password not available - not signing package)
- # This is for builds in forks and PR where the Android keystore password is not available
- QMAKE_POST_LINK += && make apk
- QMAKE_POST_LINK += && cp android-build/build/outputs/apk/debug/android-build-debug.apk package/QGroundControl$${ANDROID_TRUE_BITNESS}.apk
+ message(Skipping androiddeployqt since keystore password is not available)
} else {
+ QMAKE_POST_LINK += && mkdir -p package
QMAKE_POST_LINK += && make apk_install_target INSTALL_ROOT=android-build
QMAKE_POST_LINK += && androiddeployqt --verbose --input android-QGroundControl-deployment-settings.json --output android-build --release --sign $${SOURCE_DIR}/android/android_release.keystore QGCAndroidKeyStore --storepass $$(ANDROID_KEYSTORE_PASSWORD)
QMAKE_POST_LINK += && cp android-build/build/outputs/apk/release/android-build-release-signed.apk package/QGroundControl$${ANDROID_TRUE_BITNESS}.apk
diff --git a/README.md b/README.md
index a914739..3112f0f 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,15 @@
-# QGroundControl Ground Control Station
+# Spiri Ground Control Station
-[![Releases](https://img.shields.io/github/release/mavlink/QGroundControl.svg)](https://github.com/mavlink/QGroundControl/releases)
+[![Releases](https://git.spirirobotics.com/hetongapp/Spiri-App/raw/branch/master/Spiri/resources/images/Spiri-release.svg)](https://git.spirirobotics.com/hetongapp/Spiri-App/releases)
+[![Travis Build Status](https://travis-ci.org/mavlink/qgroundcontrol.svg?branch=master)](https://travis-ci.org/mavlink/qgroundcontrol)
+[![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/crxcm4qayejuvh6c/branch/master?svg=true)](https://ci.appveyor.com/project/mavlink/qgroundcontrol)
-*QGroundControl* (QGC) is an intuitive and powerful ground control station (GCS) for UAVs.
-The primary goal of QGC is ease of use for both first time and professional users.
-It provides full flight control and mission planning for any MAVLink enabled drone, and vehicle setup for both PX4 and ArduPilot powered UAVs. Instructions for *using QGroundControl* are provided in the [User Manual](https://docs.qgroundcontrol.com/en/) (you may not need them because the UI is very intuitive!)
+
+*Spiri GroundControl* (SGC) is an intuitive and powerful ground control station (GCS) for UAVs.
+
+The primary goal of SGC is ease of use for both first time and professional users.
+It provides full flight control and mission planning for any MAVLink enabled drone, and vehicle setup for both PX4 and ArduPilot powered UAVs. Instructions for *using Spiri GroundControl* are provided in the [User Manual](https://docs.qgroundcontrol.com/en/) (you may not need them because the UI is very intuitive!)
All the code is open-source, so you can contribute and evolve it as you want.
The [Developer Guide](https://dev.qgroundcontrol.com/en/) explains how to [build](https://dev.qgroundcontrol.com/en/getting_started/) and extend QGC.
@@ -18,3 +22,63 @@ Key Links:
* [Discussion/Support](https://docs.qgroundcontrol.com/en/Support/Support.html)
* [Contributing](https://dev.qgroundcontrol.com/en/contribute/)
* [License](https://github.com/mavlink/qgroundcontrol/blob/master/COPYING.md)
+
+
+# Setup Installation (Windows)
+
+*Install QT 5.15.2
+* Here is the link and Download: [Website](https://download.qt.io/official_releases/online_installers/) (Windows)
+* Setup the environment for QT!
+ * 1. right click the desktop and click the attribution.
+ * 2. select the "Advanced System Settings"
+ * 3. select the "Environment Variables"
+ * 4. create a new qt system variable(using your own QT install Path) (eg. D:\QT5.15.2\5.15.2\msvc2019_64)
+
+*Install Spiri QGC
+* create a folder in your workspace and name it such as "Spiri"
+* git clone https://git.spirirobotics.com/hetongapp/SpiriGroundControl.git
+* Then cd to the "Spiri/SpiriGroundControl" and update the repo: "git submodule update --init --recursive".
+* Open the "qgroundcontrol.pro" in "Spiri/SpiriGroundControl" folder by using the QT creator
+* click "build" and "run"
+
+
+# Setup Installation (MacOS)
+
+* Install the Xcode in Apple Store
+* Install Qt Creator for macOS: [Website](https://info.qt.io/zh-cn/download-qt-for-application-development)
+* Create or open a Qt project and check the "iphonesimulator-clang-..." environment in the project configuration page
+* create a folder in your workspace and name it such as "Spiri"
+* git clone https://git.spirirobotics.com/hetongapp/SpiriGroundControl.git
+* Then cd to the "Spiri/SpiriGroundControl" and update the repo: "git submodule update --init --recursive".
+* Click the hammer compile button in the lower left corner, after the compilation is successful, you can close Qt Creator.
+* After the compilation is complete, there will be an "Info.plist" file in the output folder, open it with Xcode.
+
+
+# Setup Installation (Ubuntu20.04)
+
+*Install QT 5.15.2
+* Setup the environment for QT!
+ ```bash
+ sudo chmod u+x ./Ubuntu_QT_install.sh && source ./Ubuntu_QT_install.sh
+ ```
+*Install Spiri QGC
+* create a folder in your workspace and name it such as "Spiri"
+* git clone https://git.spirirobotics.com/Spiri/SpiriGroundControlTest.git
+* Then cd to the "Spiri/SpiriGroundControlTest" and update the repo: "git submodule update --init --recursive".
+* Open the "qgroundcontrol.pro" in "Spiri/SpiriGroundControlTest" folder by using the QT creator
+* click "build" and "run"
+
+
+# Branch naming rules
+
+ * Dev-AndroidAPP-Tong
+ * Bug-AndroidAPP-Tong
+ * Rev-AndroidAPP-Tong
+
+ Note:
+
+ * Dev:This branch is for develop
+ * Bug: This branch is for bug fix
+ * Rev: This branch is for revision
+ * Tong:Contributer's name
+ * AndroidAPP:The general description of this task
\ No newline at end of file
diff --git a/Spiri/README.md b/Spiri/README.md
new file mode 100644
index 0000000..ddb5b54
--- /dev/null
+++ b/Spiri/README.md
@@ -0,0 +1,69 @@
+# Spiri Ground Control Station
+
+[![Releases](https://img.shields.io/github/release/mavlink/QGroundControl.svg)](https://git.spirirobotics.com/hetongapp/SpiriGroundControl/releases)
+[![Travis Build Status](https://travis-ci.org/mavlink/qgroundcontrol.svg?branch=master)](https://travis-ci.org/mavlink/qgroundcontrol)
+[![Appveyor Build Status](https://ci.appveyor.com/api/projects/status/crxcm4qayejuvh6c/branch/master?svg=true)](https://ci.appveyor.com/project/mavlink/qgroundcontrol)
+
+
+
+*Spiri GroundControl* (SGC) is an intuitive and powerful ground control station (GCS) for UAVs.
+
+The primary goal of SGC is ease of use for both first time and professional users.
+It provides full flight control and mission planning for any MAVLink enabled drone, and vehicle setup for both PX4 and ArduPilot powered UAVs. Instructions for *using Spiri GroundControl* are provided in the [User Manual](https://docs.qgroundcontrol.com/en/) (you may not need them because the UI is very intuitive!)
+
+All the code is open-source, so you can contribute and evolve it as you want.
+The [Developer Guide](https://dev.qgroundcontrol.com/en/) explains how to [build](https://dev.qgroundcontrol.com/en/getting_started/) and extend QGC.
+
+
+Key Links:
+* [Website](http://qgroundcontrol.com) (qgroundcontrol.com)
+* [User Manual](https://docs.qgroundcontrol.com/en/)
+* [Developer Guide](https://dev.qgroundcontrol.com/en/)
+* [Discussion/Support](https://docs.qgroundcontrol.com/en/Support/Support.html)
+* [Contributing](https://dev.qgroundcontrol.com/en/contribute/)
+* [License](https://github.com/mavlink/qgroundcontrol/blob/master/COPYING.md)
+
+
+# Setup Installation (Windows)
+
+*Install QT 5.15.2
+* Here is the link and Download: [Website](https://download.qt.io/official_releases/online_installers/) (Windows)
+* Setup the environment for QT!
+ * 1. right click the desktop and click the attribution.
+ * 2. select the "Advanced System Settings"
+ * 3. select the "Environment Variables"
+ * 4. create a new qt system variable(using your own QT install Path) (eg. D:\QT5.15.2\5.15.2\msvc2019_64)
+
+*Install Spiri QGC
+* create a folder in your workspace and name it such as "Spiri"
+* git clone https://git.spirirobotics.com/hetongapp/SpiriGroundControl.git
+* Then cd to the "Spiri/SpiriGroundControl" and update the repo: "git submodule update --init --recursive".
+* Open the "qgroundcontrol.pro" in "Spiri/SpiriGroundControl" folder by using the QT creator
+* click "build" and "run"
+
+
+# Setup Installation (MacOS)
+
+* Install the Xcode in Apple Store
+* Install Qt Creator for macOS: [Website](https://info.qt.io/zh-cn/download-qt-for-application-development)
+* Create or open a Qt project and check the "iphonesimulator-clang-..." environment in the project configuration page
+* create a folder in your workspace and name it such as "Spiri"
+* git clone https://git.spirirobotics.com/hetongapp/SpiriGroundControl.git
+* Then cd to the "Spiri/SpiriGroundControl" and update the repo: "git submodule update --init --recursive".
+* Click the hammer compile button in the lower left corner, after the compilation is successful, you can close Qt Creator.
+* After the compilation is complete, there will be an "Info.plist" file in the output folder, open it with Xcode.
+
+
+# Setup Installation (Ubuntu20.04)
+
+*Install QT 5.15.2
+* Setup the environment for QT!
+ ```bash
+ sudo chmod u+x ./Ubuntu_QT_install.sh && source ./Ubuntu_QT_install.sh
+ ```
+*Install Spiri QGC
+* create a folder in your workspace and name it such as "Spiri"
+* git clone https://git.spirirobotics.com/Spiri/SpiriGroundControlTest.git
+* Then cd to the "Spiri/SpiriGroundControlTest" and update the repo: "git submodule update --init --recursive".
+* Open the "qgroundcontrol.pro" in "Spiri/SpiriGroundControlTest" folder by using the QT creator
+* click "build" and "run"
\ No newline at end of file
diff --git a/Spiri/config/.gitkeep b/Spiri/config/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/Spiri/data/.gitkeep b/Spiri/data/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/Spiri/model/spiri.mesh b/Spiri/model/spiri.mesh
new file mode 100644
index 0000000..0137c2e
Binary files /dev/null and b/Spiri/model/spiri.mesh differ
diff --git a/Spiri/qml/.gitkeep b/Spiri/qml/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/Spiri/resources/icon/spiri.ico b/Spiri/resources/icon/spiri.ico
new file mode 100644
index 0000000..a6081f6
Binary files /dev/null and b/Spiri/resources/icon/spiri.ico differ
diff --git a/Spiri/resources/icon/spiri1.ico b/Spiri/resources/icon/spiri1.ico
new file mode 100644
index 0000000..fe7d8b3
Binary files /dev/null and b/Spiri/resources/icon/spiri1.ico differ
diff --git a/Spiri/resources/images/Spiri-release.svg b/Spiri/resources/images/Spiri-release.svg
new file mode 100644
index 0000000..637f515
--- /dev/null
+++ b/Spiri/resources/images/Spiri-release.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Spiri/resources/images/Spiri_black_120.ico b/Spiri/resources/images/Spiri_black_120.ico
new file mode 100644
index 0000000..7ab5514
Binary files /dev/null and b/Spiri/resources/images/Spiri_black_120.ico differ
diff --git a/Spiri/resources/images/Spiri_black_160.jpg b/Spiri/resources/images/Spiri_black_160.jpg
new file mode 100644
index 0000000..2fdf40d
Binary files /dev/null and b/Spiri/resources/images/Spiri_black_160.jpg differ
diff --git a/Spiri/resources/images/Spiri_black_240.jpg b/Spiri/resources/images/Spiri_black_240.jpg
new file mode 100644
index 0000000..0fa449e
Binary files /dev/null and b/Spiri/resources/images/Spiri_black_240.jpg differ
diff --git a/Spiri/resources/images/Spiri_black_320.jpg b/Spiri/resources/images/Spiri_black_320.jpg
new file mode 100644
index 0000000..634568a
Binary files /dev/null and b/Spiri/resources/images/Spiri_black_320.jpg differ
diff --git a/Spiri/resources/images/Spiri_black_480.jpg b/Spiri/resources/images/Spiri_black_480.jpg
new file mode 100644
index 0000000..37c61ac
Binary files /dev/null and b/Spiri/resources/images/Spiri_black_480.jpg differ
diff --git a/Spiri/resources/images/Spiri_black_640.jpg b/Spiri/resources/images/Spiri_black_640.jpg
new file mode 100644
index 0000000..7022b11
Binary files /dev/null and b/Spiri/resources/images/Spiri_black_640.jpg differ
diff --git a/Spiri/resources/images/Spiri_black_bl.ico b/Spiri/resources/images/Spiri_black_bl.ico
new file mode 100644
index 0000000..cb0f00b
Binary files /dev/null and b/Spiri/resources/images/Spiri_black_bl.ico differ
diff --git a/Spiri/resources/images/Spiri_black_bl.jpg b/Spiri/resources/images/Spiri_black_bl.jpg
new file mode 100644
index 0000000..3d2e37e
Binary files /dev/null and b/Spiri/resources/images/Spiri_black_bl.jpg differ
diff --git a/Spiri/resources/images/spiri.png b/Spiri/resources/images/spiri.png
new file mode 100644
index 0000000..25adf6f
Binary files /dev/null and b/Spiri/resources/images/spiri.png differ
diff --git a/Spiri/src/.gitkeep b/Spiri/src/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/UnitTest.qrc b/UnitTest.qrc
index 0423748..f08de29 100644
--- a/UnitTest.qrc
+++ b/UnitTest.qrc
@@ -15,10 +15,5 @@
src/MissionManager/UnitTest/PolygonBadXml.kml
src/MissionManager/UnitTest/PolygonBadCoordinatesNode.kml
src/comm/MockLinkOptionsDlg.qml
- src/qgcunittest/TranslationTest.json
- src/qgcunittest/TranslationTest_de_DE.ts
-
-
- src/comm/MockLinkOptionsDlg.qml
diff --git a/Vagrantfile b/Vagrantfile
index a57ab79..4b41ae5 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -1,38 +1,21 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
+# if you update this file, please consider updating .travis.yml too
+
require 'yaml'
current_dir = File.dirname(File.expand_path(__FILE__))
configfile = YAML.load_file("#{current_dir}/.vagrantconfig.yml")
+travisfile = YAML.load_file("#{current_dir}/.travis.yml")
yaml_config = configfile['configs']['dev']
-env_global = [
- 'JOBS=4',
- 'SHADOW_BUILD_DIR=/tmp/shadow_build_dir',
- 'CODESIGN=nocodesign',
-]
-
-packages = [
- 'build-essential',
- 'fuse',
- 'git',
- 'libgstreamer-plugins-base1.0-dev',
- 'libgstreamer1.0-0:amd64',
- 'libgstreamer1.0-dev',
- 'libsdl2-dev',
- 'libudev-dev',
- 'speech-dispatcher',
- 'wget'
-]
-
-
Vagrant.configure(2) do |config|
# This trick is used to prefer a VM box over docker
config.vm.provider "virtualbox"
config.vm.provider "vmware_fusion"
- config.vm.box = "ubuntu/jammy64"
+ config.vm.box = "ubuntu/bionic64"
config.vm.provider :docker do |docker, override|
override.vm.box = "tknerr/baseimage-ubuntu-16.04"
end
@@ -81,8 +64,6 @@ Vagrant.configure(2) do |config|
apt-get install -y python3-pip
su - vagrant -c "pip3 install --user aqtinstall"
- apt-get install -y patchelf
-
dir="%{qt_deps_unpack_dir}"
version="5.15.2"
host="linux"
@@ -92,8 +73,6 @@ Vagrant.configure(2) do |config|
su - vagrant -c "mkdir -p ${dir}"
su - vagrant -c "python3 -m aqt install-qt -O ${dir} ${host} ${target} ${version} -m ${modules}"
- mkdir -p /vagrant/shadow-build
-
# write out a pair of scripts to make rebuilding on the VM easy:
su - vagrant -c "cat <do-qmake.sh
#!/bin/bash
@@ -122,10 +101,6 @@ MAKE
"
su - vagrant -c "chmod +x do-qmake.sh do-make.sh"
- # increase the allowed number of open files (the link step takes a
- # lot of open filehandles!):
-echo '* soft nofile 2048' >/etc/security/limits.d/fileno.conf
-
# now run the scripts:
su - vagrant -c ./do-qmake.sh
su - vagrant -c ./do-make.sh
@@ -137,8 +112,8 @@ echo '* soft nofile 2048' >/etc/security/limits.d/file
:qt_deps_tarball => yaml_config['qt_deps_tarball'],
:pro => yaml_config['pro'],
:spec => yaml_config['spec'],
- :apt_pkgs => (packages).join(' '),
- :build_env => env_global.select { |item| item.is_a?(String) }.join(' '),
+ :apt_pkgs => (travisfile['addons']['apt']['packages']+['git', 'build-essential', 'fuse', 'libsdl2-dev']).join(' '),
+ :build_env => travisfile['env']['global'].select { |item| item.is_a?(String) }.join(' '),
:project_root_dir => yaml_config['project_root_dir'],
:qt_deps_unpack_parent_dir => yaml_config['qt_deps_unpack_parent_dir'],
diff --git a/android.pri b/android.pri
index 43dbbf9..3965065 100644
--- a/android.pri
+++ b/android.pri
@@ -1,71 +1,24 @@
+include($$PWD/libs/qtandroidserialport/src/qtandroidserialport.pri)
+message("Adding Serial Java Classes")
QT += androidextras
-include($$PWD/libs/qtandroidserialport/src/qtandroidserialport.pri)
+ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
-ANDROID_PACKAGE_SOURCE_DIR = $$OUT_PWD/ANDROID_PACKAGE_SOURCE_DIR # Tells Qt location of package files for build
-ANDROID_PACKAGE_QGC_SOURCE_DIR = $$PWD/android # Original location of QGC package files
-ANDROID_PACKAGE_CUSTOM_SOURCE_DIR = $$PWD/custom/android # Original location for custom build override package files
+exists($$PWD/custom/android) {
+ message("Merging $$PWD/custom/android/ -> $$PWD/android/")
-# We always move the package files to the ANDROID_PACKAGE_SOURCE_DIR build dir so we can modify the manifest as needed
+ ANDROID_PACKAGE_SOURCE_DIR = $$OUT_PWD/ANDROID_PACKAGE_SOURCE_DIR
+ android_source_dir_target.target = android_source_dir
+ PRE_TARGETDEPS += $$android_source_dir_target.target
+ QMAKE_EXTRA_TARGETS += android_source_dir_target
-android_source_dir_target.target = $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml
-android_source_dir_target.commands = \
- $$QMAKE_MKDIR $$ANDROID_PACKAGE_SOURCE_DIR && \
- $$QMAKE_COPY_DIR $$ANDROID_PACKAGE_QGC_SOURCE_DIR/* $$ANDROID_PACKAGE_SOURCE_DIR
-PRE_TARGETDEPS += $$android_source_dir_target.target
-QMAKE_EXTRA_TARGETS += android_source_dir_target
-exists($$ANDROID_PACKAGE_CUSTOM_SOURCE_DIR/AndroidManifest.xml) {
- android_source_dir_target.depends = $$ANDROID_PACKAGE_CUSTOM_SOURCE_DIR/AndroidManifest.xml
-} else {
- android_source_dir_target.depends = $$ANDROID_PACKAGE_QGC_SOURCE_DIR/AndroidManifest.xml
+ android_source_dir_target.commands = $$QMAKE_MKDIR $$ANDROID_PACKAGE_SOURCE_DIR && \
+ $$QMAKE_COPY_DIR $$PWD/android/* $$OUT_PWD/ANDROID_PACKAGE_SOURCE_DIR && \
+ $$QMAKE_COPY_DIR $$PWD/custom/android/* $$OUT_PWD/ANDROID_PACKAGE_SOURCE_DIR && \
+ $$QMAKE_STREAM_EDITOR -i \"s/package=\\\"org.mavlink.spiri\\\"/package=\\\"$$QGC_ANDROID_PACKAGE\\\"/\" $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml
+ android_source_dir_target.depends = FORCE
}
-# Custom builds can override android package file
-
-exists($$ANDROID_PACKAGE_CUSTOM_SOURCE_DIR) {
- message("Merging$$ $$ANDROID_PACKAGE_QGC_SOURCE_DIR and $$ANDROID_PACKAGE_CUSTOM_SOURCE_DIR to $$ANDROID_PACKAGE_SOURCE_DIR")
-
- android_source_dir_target.commands = $$android_source_dir_target.commands && \
- $$QMAKE_COPY_DIR $$ANDROID_PACKAGE_CUSTOM_SOURCE_DIR/* $$ANDROID_PACKAGE_SOURCE_DIR && \
- $$QMAKE_STREAM_EDITOR -i \"s/package=\\\"org.mavlink.qgroundcontrol\\\"/package=\\\"$$QGC_ANDROID_PACKAGE\\\"/\" $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml
-}
-
-# Insert package name into manifest file
-
-android_source_dir_target.commands = $$android_source_dir_target.commands && \
- $$QMAKE_STREAM_EDITOR -i \"s/%%QGC_INSERT_PACKAGE_NAME%%/$$QGC_ANDROID_PACKAGE/\" $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml
-
-# Update manifest activity intent filter as needed
-
-QGC_INSERT_ACTIVITY_INTENT_FILTER = ""
-AndroidHomeApp {
- # QGC is the android home application
- QGC_INSERT_ACTIVITY_INTENT_FILTER = $$QGC_INSERT_ACTIVITY_INTENT_FILTER "\r\n\r\n"
-}
-!contains(DEFINES, NO_SERIAL_LINK) {
- # Add usb device support
- QGC_INSERT_ACTIVITY_INTENT_FILTER = $$QGC_INSERT_ACTIVITY_INTENT_FILTER "\r\n\r\n\r\n"
-}
-contains(DEFINES, QGC_ENABLE_BLUETOOTH) {
- QGC_INSERT_ACTIVITY_INTENT_FILTER = $$QGC_INSERT_ACTIVITY_INTENT_FILTER "\r\n\r\n"
-}
-android_source_dir_target.commands = $$android_source_dir_target.commands && \
- $$QMAKE_STREAM_EDITOR -i \"s//$$QGC_INSERT_ACTIVITY_INTENT_FILTER/\" $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml
-
-# Update manifest activity meta data as needed
-
-contains(DEFINES, NO_SERIAL_LINK) {
- # No need to add anything to manifest
- android_source_dir_target.commands = $$android_source_dir_target.commands && \
- $$QMAKE_STREAM_EDITOR -i \"s///\" $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml
-} else {
- # Updates the manifest for usb device support
- android_source_dir_target.commands = $$android_source_dir_target.commands && \
- $$QMAKE_STREAM_EDITOR -i \"s//\r\n\r\n/\" $$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml
-}
-
-# OTHER_FILES makes the specified files be visible in Qt Creator for editing
-
exists($$PWD/custom/android/AndroidManifest.xml) {
OTHER_FILES += \
$$PWD/custom/android/AndroidManifest.xml
@@ -92,6 +45,7 @@ OTHER_FILES += \
$$PWD/android/src/org/freedesktop/gstreamer/androidmedia/GstAhsCallback.java \
$$PWD/android/src/org/freedesktop/gstreamer/androidmedia/GstAmcOnFrameAvailableListener.java
+
DISTFILES += \
$$PWD/android/gradle/wrapper/gradle-wrapper.jar \
$$PWD/android/gradlew \
@@ -99,12 +53,3 @@ DISTFILES += \
$$PWD/android/build.gradle \
$$PWD/android/gradle/wrapper/gradle-wrapper.properties \
$$PWD/android/gradlew.bat
-
-SOURCES += \
- $$PWD/android/src/AndroidInterface.cc
-
-HEADERS += \
- $$PWD/android/src/AndroidInterface.h
-
-INCLUDEPATH += \
- $$PWD/android/src
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 15c35bc..7fc431b 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -1,5 +1,5 @@
-
-
+
+
@@ -14,12 +14,15 @@
-
-
+
+
+
+
+
-
-
-
+
+
+
@@ -95,10 +98,9 @@
-
+
-
diff --git a/android/res/drawable-hdpi/icon.png b/android/res/drawable-hdpi/icon.png
index f6323cd..490d9ac 100644
Binary files a/android/res/drawable-hdpi/icon.png and b/android/res/drawable-hdpi/icon.png differ
diff --git a/android/res/drawable-ldpi/icon.png b/android/res/drawable-ldpi/icon.png
index 8676e65..b6dc758 100644
Binary files a/android/res/drawable-ldpi/icon.png and b/android/res/drawable-ldpi/icon.png differ
diff --git a/android/res/drawable-mdpi/icon.png b/android/res/drawable-mdpi/icon.png
index c1c7603..df8efcb 100644
Binary files a/android/res/drawable-mdpi/icon.png and b/android/res/drawable-mdpi/icon.png differ
diff --git a/android/res/drawable-xhdpi/icon.png b/android/res/drawable-xhdpi/icon.png
index 58a1454..34c3d76 100644
Binary files a/android/res/drawable-xhdpi/icon.png and b/android/res/drawable-xhdpi/icon.png differ
diff --git a/android/res/drawable-xxhdpi/icon.png b/android/res/drawable-xxhdpi/icon.png
index f74d76f..39e7e39 100644
Binary files a/android/res/drawable-xxhdpi/icon.png and b/android/res/drawable-xxhdpi/icon.png differ
diff --git a/android/res/drawable-xxxhdpi/icon.png b/android/res/drawable-xxxhdpi/icon.png
index f74d76f..c251bc9 100644
Binary files a/android/res/drawable-xxxhdpi/icon.png and b/android/res/drawable-xxxhdpi/icon.png differ
diff --git a/android/src/AndroidInterface.cc b/android/src/AndroidInterface.cc
deleted file mode 100644
index cd8afdc..0000000
--- a/android/src/AndroidInterface.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-/****************************************************************************
- *
- * Copyright (C) 2018 Pinecone Inc. All rights reserved.
- *
- * QGroundControl is licensed according to the terms in the file
- * COPYING.md in the root of the source code directory.
- *
- ****************************************************************************/
-
-#include
-#include
-#include "QGCApplication.h"
-#include "AndroidInterface.h"
-#include
-#include
-
-QString AndroidInterface::getSDCardPath()
-{
- QAndroidJniObject value = QAndroidJniObject::callStaticObjectMethod("org/mavlink/qgroundcontrol/QGCActivity", "getSDCardPath",
- "()Ljava/lang/String;");
- QString sdCardPath = value.toString();
-
- QString readPermission("android.permission.READ_EXTERNAL_STORAGE");
- QString writePermission("android.permission.WRITE_EXTERNAL_STORAGE");
-
- if (QtAndroid::checkPermission(readPermission) == QtAndroid::PermissionResult::Denied ||
- QtAndroid::checkPermission(writePermission) == QtAndroid::PermissionResult::Denied) {
- QtAndroid::PermissionResultMap resultHash = QtAndroid::requestPermissionsSync(QStringList({ readPermission, writePermission }));
- if (resultHash[readPermission] == QtAndroid::PermissionResult::Denied ||
- resultHash[writePermission] == QtAndroid::PermissionResult::Denied) {
- return QString();
- }
- }
-
- return sdCardPath;
-}
diff --git a/android/src/org/mavlink/qgroundcontrol/QGCActivity.java b/android/src/org/mavlink/qgroundcontrol/QGCActivity.java
index c46192b..14fb760 100644
--- a/android/src/org/mavlink/qgroundcontrol/QGCActivity.java
+++ b/android/src/org/mavlink/qgroundcontrol/QGCActivity.java
@@ -38,7 +38,6 @@ import java.util.concurrent.Executors;
import java.util.Timer;
import java.util.TimerTask;
import java.io.IOException;
-import java.lang.reflect.Method;
import android.app.Activity;
import android.app.PendingIntent;
@@ -59,8 +58,6 @@ import android.app.PendingIntent;
import android.view.WindowManager;
import android.os.Bundle;
import android.bluetooth.BluetoothDevice;
-import android.os.storage.StorageManager;
-import android.os.storage.StorageVolume;
import com.hoho.android.usbserial.driver.*;
import org.qtproject.qt5.android.bindings.QtActivity;
@@ -765,34 +762,5 @@ public class QGCActivity extends QtActivity
}
}).start();
}
-
- public static String getSDCardPath() {
- StorageManager storageManager = (StorageManager)_instance.getSystemService(Activity.STORAGE_SERVICE);
- List volumes = storageManager.getStorageVolumes();
- Method mMethodGetPath;
- String path = "";
- for (StorageVolume vol : volumes) {
- try {
- mMethodGetPath = vol.getClass().getMethod("getPath");
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- continue;
- }
- try {
- path = (String) mMethodGetPath.invoke(vol);
- } catch (Exception e) {
- e.printStackTrace();
- continue;
- }
-
- if (vol.isRemovable() == true) {
- Log.i(TAG, "removable sd card mounted " + path);
- return path;
- } else {
- Log.i(TAG, "storage mounted " + path);
- }
- }
- return "";
- }
}
diff --git a/backup-Jenkinsfile b/backup-Jenkinsfile
new file mode 100644
index 0000000..54d9f38
--- /dev/null
+++ b/backup-Jenkinsfile
@@ -0,0 +1,345 @@
+pipeline {
+ agent none
+ stages {
+
+ stage('build') {
+ parallel {
+
+ stage('Android 32 bit Release') {
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ CCACHE_CPP2 = '1'
+ QGC_CONFIG = 'release'
+ QMAKE_VER = "5.12.5/android_armv7/bin/qmake"
+ QT_MKSPEC = "android-clang"
+ BITNESS=32
+ }
+ agent {
+ docker {
+ image 'mavlink/qgc-build-android:2019-11-12'
+ args '-v ${CCACHE_DIR}:${CCACHE_DIR}:rw'
+ }
+ }
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'git submodule deinit -f .'
+ sh 'git clean -ff -x -d .'
+ sh 'git submodule update --init --recursive --force'
+ sh 'mkdir build; cd build; ${QT_PATH}/${QMAKE_VER} -r ${WORKSPACE}/qgroundcontrol.pro CONFIG+=${QGC_CONFIG} CONFIG+=WarningsAsErrorsOn'
+ sh 'cd build; make -j`nproc --all`'
+ sh 'ccache -s'
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ stage('Android 64 bit Release') {
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ CCACHE_CPP2 = '1'
+ QGC_CONFIG = 'release'
+ QMAKE_VER = "5.12.5/android_arm64_v8a/bin/qmake"
+ QT_MKSPEC = "android-clang"
+ BITNESS=64
+ }
+ agent {
+ docker {
+ image 'mavlink/qgc-build-android_arm64_v8a:2019-11-12'
+ args '-v ${CCACHE_DIR}:${CCACHE_DIR}:rw'
+ }
+ }
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'git submodule deinit -f .'
+ sh 'git clean -ff -x -d .'
+ sh 'git submodule update --init --recursive --force'
+ sh 'mkdir build; cd build; ${QT_PATH}/${QMAKE_VER} -r ${WORKSPACE}/qgroundcontrol.pro CONFIG+=${QGC_CONFIG} CONFIG+=WarningsAsErrorsOn'
+ //sh 'cd build; make -j`nproc --all`' // FIXME
+ sh 'ccache -s'
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ stage('Linux Debug') {
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ QGC_CONFIG = 'debug'
+ QMAKE_VER = "5.12.5/gcc_64/bin/qmake"
+ }
+ agent {
+ docker {
+ image 'mavlink/qgc-build-linux:2019-11-12'
+ args '-v ${CCACHE_DIR}:${CCACHE_DIR}:rw'
+ }
+ }
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'git submodule deinit -f .'
+ sh 'git clean -ff -x -d .'
+ sh 'git submodule update --init --recursive --force'
+ sh 'mkdir build; cd build; ${QT_PATH}/${QMAKE_VER} -r ${WORKSPACE}/qgroundcontrol.pro CONFIG+=${QGC_CONFIG} CONFIG+=WarningsAsErrorsOn'
+ sh 'cd build; make -j`nproc --all`'
+ sh 'ccache -s'
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ stage('Linux Debug (cmake)') {
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ CMAKE_BUILD_TYPE = 'Debug'
+ QT_VERSION = "5.12.5"
+ QT_MKSPEC = "gcc_64"
+ }
+ agent {
+ docker {
+ image 'mavlink/qgc-build-linux:2019-11-12'
+ args '-v ${CCACHE_DIR}:${CCACHE_DIR}:rw'
+ }
+ }
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'make distclean'
+ sh 'make submodulesclean'
+ sh 'make linux'
+ //sh 'make linux check' // TODO: needs Xvfb or similar
+ sh 'ccache -s'
+ sh 'make distclean'
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ stage('Linux Release') {
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ QGC_CONFIG = 'release'
+ QMAKE_VER = "5.12.5/gcc_64/bin/qmake"
+ }
+ agent {
+ docker {
+ image 'mavlink/qgc-build-linux:2019-11-12'
+ args '-v ${CCACHE_DIR}:${CCACHE_DIR}:rw'
+ }
+ }
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'git submodule deinit -f .'
+ sh 'git clean -ff -x -d .'
+ sh 'git submodule update --init --recursive --force'
+ withCredentials([file(credentialsId: 'QGC_Airmap_api_key', variable: 'AIRMAP_API_HEADER')]) {
+ sh 'cp $AIRMAP_API_HEADER ${WORKSPACE}/src/Airmap/Airmap_api_key.h'
+ }
+ sh 'mkdir build; cd build; ${QT_PATH}/${QMAKE_VER} -r ${WORKSPACE}/qgroundcontrol.pro CONFIG+=${QGC_CONFIG} CONFIG+=WarningsAsErrorsOn'
+ //sh 'cd build; make -j`nproc --all`' // TODO: increase slave memory
+ sh 'cd build; make'
+ sh 'ccache -s'
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ stage('Linux Release (cmake)') {
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ CMAKE_BUILD_TYPE = 'Release'
+ QT_VERSION = "5.12.5"
+ QT_MKSPEC = "gcc_64"
+ }
+ agent {
+ docker {
+ image 'mavlink/qgc-build-linux:2019-11-12'
+ args '-v ${CCACHE_DIR}:${CCACHE_DIR}:rw'
+ }
+ }
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'make distclean'
+ sh 'make submodulesclean'
+ sh 'make linux'
+ sh 'ccache -s'
+ sh 'make distclean'
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ stage('OSX Debug') {
+ agent {
+ node {
+ label 'mac'
+ }
+ }
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ QGC_CONFIG = 'debug'
+ QMAKE_VER = "5.11.0/clang_64/bin/qmake"
+ }
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'git submodule deinit -f .'
+ sh 'git clean -ff -x -d .'
+ sh 'git submodule update --init --recursive --force'
+ sh 'mkdir build; cd build; ${QT_PATH}/${QMAKE_VER} -r ${WORKSPACE}/qgroundcontrol.pro CONFIG+=${QGC_CONFIG} CONFIG+=WarningsAsErrorsOn'
+ sh 'cd build; make -j`sysctl -n hw.ncpu`'
+ sh 'ccache -s'
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ stage('OSX Debug (cmake)') {
+ agent {
+ node {
+ label 'mac'
+ }
+ }
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ CCACHE_CPP2 = '1'
+ CMAKE_BUILD_TYPE = 'Debug'
+ QT_VERSION = "5.11.0"
+ QT_MKSPEC = "clang_64"
+ }
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'make distclean'
+ sh 'make submodulesclean'
+ sh 'make mac'
+ sh 'ccache -s'
+ sh 'make distclean'
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ stage('OSX Release') {
+ agent {
+ node {
+ label 'mac'
+ }
+ }
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ CCACHE_CPP2 = '1'
+ QGC_CONFIG = 'installer'
+ QMAKE_VER = "5.11.0/clang_64/bin/qmake"
+ }
+ stages {
+ stage('Clean Checkout') {
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'git submodule deinit -f .'
+ sh 'git clean -ff -x -d .'
+ sh 'git submodule update --init --recursive --force'
+ }
+ }
+
+ stage('Add Airmap API key') {
+ steps {
+ withCredentials([file(credentialsId: 'QGC_Airmap_api_key', variable: 'AIRMAP_API_HEADER')]) {
+ sh 'cp $AIRMAP_API_HEADER ${WORKSPACE}/src/Airmap/Airmap_api_key.h'
+ }
+ }
+ when {
+ anyOf {
+ branch 'master';
+ branch 'Stable_*'
+ }
+ }
+ }
+
+ stage('Build OSX Release') {
+ steps {
+ sh 'mkdir build; cd build; ${QT_PATH}/${QMAKE_VER} -r ${WORKSPACE}/qgroundcontrol.pro CONFIG+=${QGC_CONFIG} CONFIG+=WarningsAsErrorsOn'
+ sh 'cd build; make -j`sysctl -n hw.ncpu`'
+ archiveArtifacts(artifacts: 'build/**/*.dmg', fingerprint: true)
+ sh 'ccache -s'
+ }
+ }
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ stage('OSX Release (cmake)') {
+ agent {
+ node {
+ label 'mac'
+ }
+ }
+ environment {
+ CCACHE_BASEDIR = "${env.WORKSPACE}"
+ CCACHE_CPP2 = '1'
+ CMAKE_BUILD_TYPE = 'Release'
+ QT_VERSION = "5.11.0"
+ QT_MKSPEC = "clang_64"
+ }
+ steps {
+ sh 'export'
+ sh 'ccache -z'
+ sh 'make distclean'
+ sh 'make submodulesclean'
+ sh 'make mac'
+ sh 'ccache -s'
+ sh 'make distclean'
+ }
+ post {
+ cleanup {
+ sh 'git clean -ff -x -d .'
+ }
+ }
+ }
+
+ } // parallel
+ } // stage('build')
+ } // stages
+
+ environment {
+ CCACHE_DIR = '/tmp/ccache'
+ QT_FATAL_WARNINGS = '1'
+ }
+
+ options {
+ buildDiscarder(logRotator(numToKeepStr: '10', artifactDaysToKeepStr: '30'))
+ timeout(time: 60, unit: 'MINUTES')
+ }
+}
diff --git a/build_ios.sh b/build_ios.sh
new file mode 100755
index 0000000..ed58565
--- /dev/null
+++ b/build_ios.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+if [ ! -d /Volumes/RAMDisk ] ; then
+ echo 'RAM Disk not found'
+ echo 'Only used for App Store builds. It will not work on your computer.'
+ exit 1
+fi
+#-- Set to my local installation
+QMAKE=/Users/gus/Applications/Qt/5.12.2/ios/bin/qmake
+#-- Using Travis variables as this will eventually live there
+SHADOW_BUILD_DIR=/Volumes/RAMDisk/build-qgroundcontrol-iOS-Release
+TRAVIS_BUILD_DIR=/Users/gus/github/work/UpstreamQGC
+#-- Build it
+mkdir -p ${SHADOW_BUILD_DIR} &&
+cd ${SHADOW_BUILD_DIR} &&
+#-- Create project only (build using Xcode)
+${QMAKE} -r ${TRAVIS_BUILD_DIR}/qgroundcontrol.pro CONFIG+=WarningsAsErrorsOn CONFIG-=debug_and_release CONFIG+=release CONFIG+=ForAppStore
+sed -i .bak 's/com.yourcompany.${PRODUCT_NAME:rfc1034identifier}/org.QGroundControl.qgc/' ${SHADOW_BUILD_DIR}/QGroundControl.xcodeproj/project.pbxproj
+#-- Create and build
+#${QMAKE} -r ${TRAVIS_BUILD_DIR}/qgroundcontrol.pro CONFIG+=WarningsAsErrorsOn CONFIG-=debug_and_release CONFIG+=release CONFIG+=ForAppStore &&
+#xcodebuild -configuration Release -xcconfig ${TRAVIS_BUILD_DIR}/ios/qgroundcontrol_appstore.xcconfig
diff --git a/custom-example/InstrumentValueIcons.qrc b/custom/InstrumentValueIcons.qrc
similarity index 100%
rename from custom-example/InstrumentValueIcons.qrc
rename to custom/InstrumentValueIcons.qrc
index 282ed41..7d5a381 100644
--- a/custom-example/InstrumentValueIcons.qrc
+++ b/custom/InstrumentValueIcons.qrc
@@ -1,301 +1,301 @@
- ../resources/InstrumentValueIcons/stethoscope.svg
- ../resources/InstrumentValueIcons/inbox-check.svg
- ../resources/InstrumentValueIcons/cheveron-up.svg
- ../resources/InstrumentValueIcons/location-shopping.svg
- ../resources/InstrumentValueIcons/cheveron-right.svg
- ../resources/InstrumentValueIcons/bookmark.svg
- ../resources/InstrumentValueIcons/travel-case.svg
- ../resources/InstrumentValueIcons/user-solid-square.svg
- ../resources/InstrumentValueIcons/arrow-simple-up.svg
- ../resources/InstrumentValueIcons/list.svg
- ../resources/InstrumentValueIcons/shuffle.svg
- ../resources/InstrumentValueIcons/travel-walk.svg
- ../resources/InstrumentValueIcons/checkmark.svg
- ../resources/InstrumentValueIcons/trophy.svg
- ../resources/InstrumentValueIcons/mood-happy-solid.svg
- ../resources/InstrumentValueIcons/cog.svg
- ../resources/InstrumentValueIcons/text-box.svg
- ../resources/InstrumentValueIcons/video-camera.svg
- ../resources/InstrumentValueIcons/backward-step.svg
- ../resources/InstrumentValueIcons/view-column.svg
- ../resources/InstrumentValueIcons/add-outline.svg
- ../resources/InstrumentValueIcons/battery-low.svg
- ../resources/InstrumentValueIcons/bookmark copy 2.svg
- ../resources/InstrumentValueIcons/volume-down.svg
- ../resources/InstrumentValueIcons/travel-taxi-cab.svg
- ../resources/InstrumentValueIcons/camera.svg
- ../resources/InstrumentValueIcons/apparel.svg
- ../resources/InstrumentValueIcons/checkmark-outline.svg
- ../resources/InstrumentValueIcons/envelope.svg
- ../resources/InstrumentValueIcons/flag.svg
- ../resources/InstrumentValueIcons/window-new.svg
- ../resources/InstrumentValueIcons/arrow-simple-right.svg
- ../resources/InstrumentValueIcons/filter.svg
- ../resources/InstrumentValueIcons/minus-outline.svg
- ../resources/InstrumentValueIcons/edit-cut.svg
- ../resources/InstrumentValueIcons/volume-off.svg
- ../resources/InstrumentValueIcons/zoom-in.svg
- ../resources/InstrumentValueIcons/pin.svg
- ../resources/InstrumentValueIcons/layers.svg
- ../resources/InstrumentValueIcons/airplane.svg
- ../resources/InstrumentValueIcons/view-tile.svg
- ../resources/InstrumentValueIcons/location-marina.svg
- ../resources/InstrumentValueIcons/border-top.svg
- ../resources/InstrumentValueIcons/refresh.svg
- ../resources/InstrumentValueIcons/travel-bus.svg
- ../resources/InstrumentValueIcons/add-solid.svg
- ../resources/InstrumentValueIcons/notifications.svg
- ../resources/InstrumentValueIcons/indent-decrease.svg
- ../resources/InstrumentValueIcons/badge.svg
- ../resources/InstrumentValueIcons/align-center.svg
- ../resources/InstrumentValueIcons/queue.svg
- ../resources/InstrumentValueIcons/conversation.svg
- ../resources/InstrumentValueIcons/inbox-download.svg
- ../resources/InstrumentValueIcons/cloud.svg
- ../resources/InstrumentValueIcons/text-decoration.svg
- ../resources/InstrumentValueIcons/date-add.svg
- ../resources/InstrumentValueIcons/network.svg
- ../resources/InstrumentValueIcons/list-add.svg
- ../resources/InstrumentValueIcons/film.svg
- ../resources/InstrumentValueIcons/book-reference.svg
- ../resources/InstrumentValueIcons/star-full.svg
- ../resources/InstrumentValueIcons/information-outline.svg
- ../resources/InstrumentValueIcons/user-group.svg
- ../resources/InstrumentValueIcons/hard-drive.svg
- ../resources/InstrumentValueIcons/chart-bar.svg
- ../resources/InstrumentValueIcons/box.svg
- ../resources/InstrumentValueIcons/music-notes.svg
- ../resources/InstrumentValueIcons/bookmark copy 3.svg
- ../resources/InstrumentValueIcons/anchor.svg
- ../resources/InstrumentValueIcons/mood-sad-solid.svg
- ../resources/InstrumentValueIcons/coffee.svg
- ../resources/InstrumentValueIcons/mood-neutral-outline.svg
- ../resources/InstrumentValueIcons/menu.svg
- ../resources/InstrumentValueIcons/fast-rewind.svg
- ../resources/InstrumentValueIcons/user-add.svg
- ../resources/InstrumentValueIcons/mobile-devices.svg
- ../resources/InstrumentValueIcons/time.svg
- ../resources/InstrumentValueIcons/subdirectory-left.svg
- ../resources/InstrumentValueIcons/window.svg
- ../resources/InstrumentValueIcons/hand-stop.svg
- ../resources/InstrumentValueIcons/beverage.svg
- ../resources/InstrumentValueIcons/volume-mute.svg
- ../resources/InstrumentValueIcons/reply-all.svg
- ../resources/InstrumentValueIcons/location-food.svg
- ../resources/InstrumentValueIcons/arrow-thin-left.svg
- ../resources/InstrumentValueIcons/folder-outline.svg
- ../resources/InstrumentValueIcons/dial-pad.svg
- ../resources/InstrumentValueIcons/battery-half.svg
- ../resources/InstrumentValueIcons/trash.svg
- ../resources/InstrumentValueIcons/notification.svg
- ../resources/InstrumentValueIcons/send.svg
- ../resources/InstrumentValueIcons/station.svg
- ../resources/InstrumentValueIcons/pen-tool.svg
- ../resources/InstrumentValueIcons/gift.svg
- ../resources/InstrumentValueIcons/arrow-outline-down.svg
- ../resources/InstrumentValueIcons/ticket.svg
- ../resources/InstrumentValueIcons/border-none.svg
- ../resources/InstrumentValueIcons/format-italic.svg
- ../resources/InstrumentValueIcons/user-solid-circle.svg
- ../resources/InstrumentValueIcons/edit-pencil.svg
- ../resources/InstrumentValueIcons/step-forward.svg
- ../resources/InstrumentValueIcons/edit-copy.svg
- ../resources/InstrumentValueIcons/globe.svg
- ../resources/InstrumentValueIcons/arrow-thin-right.svg
- ../resources/InstrumentValueIcons/inbox-full.svg
- ../resources/InstrumentValueIcons/mood-sad-outline.svg
- ../resources/InstrumentValueIcons/bug.svg
- ../resources/InstrumentValueIcons/question.svg
- ../resources/InstrumentValueIcons/dots-horizontal-double.svg
- ../resources/InstrumentValueIcons/format-bold.svg
- ../resources/InstrumentValueIcons/close-outline.svg
- ../resources/InstrumentValueIcons/dots-horizontal-triple.svg
- ../resources/InstrumentValueIcons/format-text-size.svg
- ../resources/InstrumentValueIcons/computer-laptop.svg
- ../resources/InstrumentValueIcons/arrow-thick-down.svg
- ../resources/InstrumentValueIcons/cheveron-outline-down.svg
- ../resources/InstrumentValueIcons/travel.svg
- ../resources/InstrumentValueIcons/usb.svg
- ../resources/InstrumentValueIcons/cheveron-down.svg
- ../resources/InstrumentValueIcons/key.svg
- ../resources/InstrumentValueIcons/tools copy.svg
- ../resources/InstrumentValueIcons/album.svg
- ../resources/InstrumentValueIcons/arrow-base-down.svg
- ../resources/InstrumentValueIcons/copy.svg
- ../resources/InstrumentValueIcons/align-left.svg
- ../resources/InstrumentValueIcons/explore.svg
- ../resources/InstrumentValueIcons/watch.svg
- ../resources/InstrumentValueIcons/playlist.svg
- ../resources/InstrumentValueIcons/pause-outline.svg
- ../resources/InstrumentValueIcons/location-current.svg
- ../resources/InstrumentValueIcons/home.svg
- ../resources/InstrumentValueIcons/battery-full.svg
- ../resources/InstrumentValueIcons/format-font-size.svg
- ../resources/InstrumentValueIcons/exclamation-solid.svg
- ../resources/InstrumentValueIcons/music-artist.svg
- ../resources/InstrumentValueIcons/music-album.svg
- ../resources/InstrumentValueIcons/chart-pie.svg
- ../resources/InstrumentValueIcons/photo.svg
- ../resources/InstrumentValueIcons/lock-open.svg
- ../resources/InstrumentValueIcons/inbox.svg
- ../resources/InstrumentValueIcons/hot.svg
- ../resources/InstrumentValueIcons/browser-window-new.svg
- ../resources/InstrumentValueIcons/zoom-out.svg
- ../resources/InstrumentValueIcons/search.svg
- ../resources/InstrumentValueIcons/backward.svg
- ../resources/InstrumentValueIcons/store-front.svg
- ../resources/InstrumentValueIcons/user.svg
- ../resources/InstrumentValueIcons/lock-closed.svg
- ../resources/InstrumentValueIcons/load-balancer.svg
- ../resources/InstrumentValueIcons/border-all.svg
- ../resources/InstrumentValueIcons/location-gas-station.svg
- ../resources/InstrumentValueIcons/news-paper.svg
- ../resources/InstrumentValueIcons/align-justified.svg
- ../resources/InstrumentValueIcons/color-palette.svg
- ../resources/InstrumentValueIcons/radio.svg
- ../resources/InstrumentValueIcons/reply.svg
- ../resources/InstrumentValueIcons/target.svg
- ../resources/InstrumentValueIcons/border-vertical.svg
- ../resources/InstrumentValueIcons/duplicate.svg
- ../resources/InstrumentValueIcons/arrow-thick-right.svg
- ../resources/InstrumentValueIcons/exclamation-outline.svg
- ../resources/InstrumentValueIcons/bolt.svg
- ../resources/InstrumentValueIcons/shopping-cart.svg
- ../resources/InstrumentValueIcons/calendar.svg
- ../resources/InstrumentValueIcons/travel-train.svg
- ../resources/InstrumentValueIcons/save-disk.svg
- ../resources/InstrumentValueIcons/cloud-upload.svg
- ../resources/InstrumentValueIcons/dashboard.svg
- ../resources/InstrumentValueIcons/arrow-simple-down.svg
- ../resources/InstrumentValueIcons/computer-desktop.svg
- ../resources/InstrumentValueIcons/music-playlist.svg
- ../resources/InstrumentValueIcons/share-01.svg
- ../resources/InstrumentValueIcons/travel-car.svg
- ../resources/InstrumentValueIcons/border-horizontal.svg
- ../resources/InstrumentValueIcons/fast-forward.svg
- ../resources/InstrumentValueIcons/keyboard.svg
- ../resources/InstrumentValueIcons/chat-bubble-dots.svg
- ../resources/InstrumentValueIcons/folder.svg
- ../resources/InstrumentValueIcons/document.svg
- ../resources/InstrumentValueIcons/format-underline.svg
- ../resources/InstrumentValueIcons/arrow-thin-down.svg
- ../resources/InstrumentValueIcons/cheveron-outline-left.svg
- ../resources/InstrumentValueIcons/thumbs-down.svg
- ../resources/InstrumentValueIcons/stroke-width.svg
- ../resources/InstrumentValueIcons/yin-yang.svg
- ../resources/InstrumentValueIcons/thumbs-up.svg
- ../resources/InstrumentValueIcons/cheveron-left.svg
- ../resources/InstrumentValueIcons/radar.svg
- ../resources/InstrumentValueIcons/play.svg
- ../resources/InstrumentValueIcons/bluetooth.svg
- ../resources/InstrumentValueIcons/clipboard.svg
- ../resources/InstrumentValueIcons/mood-happy-outline.svg
- ../resources/InstrumentValueIcons/reload.svg
- ../resources/InstrumentValueIcons/information-solid.svg
- ../resources/InstrumentValueIcons/php-elephant.svg
- ../resources/InstrumentValueIcons/bookmark-outline-add.svg
- ../resources/InstrumentValueIcons/border-inner.svg
- ../resources/InstrumentValueIcons/brightness-up.svg
- ../resources/InstrumentValueIcons/view-hide.svg
- ../resources/InstrumentValueIcons/forward-step.svg
- ../resources/InstrumentValueIcons/cheveron-outline-up.svg
- ../resources/InstrumentValueIcons/cheveron-outline-right.svg
- ../resources/InstrumentValueIcons/share.svg
- ../resources/InstrumentValueIcons/border-right.svg
- ../resources/InstrumentValueIcons/location-hotel.svg
- ../resources/InstrumentValueIcons/brightness-down.svg
- ../resources/InstrumentValueIcons/light-bulb.svg
- ../resources/InstrumentValueIcons/location-park.svg
- ../resources/InstrumentValueIcons/factory.svg
- ../resources/InstrumentValueIcons/stand-by.svg
- ../resources/InstrumentValueIcons/swap.svg
- ../resources/InstrumentValueIcons/portfolio.svg
- ../resources/InstrumentValueIcons/arrow-outline-right.svg
- ../resources/InstrumentValueIcons/tuning.svg
- ../resources/InstrumentValueIcons/view-carousel.svg
- ../resources/InstrumentValueIcons/calculator.svg
- ../resources/InstrumentValueIcons/show-sidebar.svg
- ../resources/InstrumentValueIcons/step-backward.svg
- ../resources/InstrumentValueIcons/tablet.svg
- ../resources/InstrumentValueIcons/backspace.svg
- ../resources/InstrumentValueIcons/map.svg
- ../resources/InstrumentValueIcons/arrow-simple-left.svg
- ../resources/InstrumentValueIcons/view-show.svg
- ../resources/InstrumentValueIcons/adjust.svg
- ../resources/InstrumentValueIcons/border-bottom.svg
- ../resources/InstrumentValueIcons/document-add.svg
- ../resources/InstrumentValueIcons/plugin.svg
- ../resources/InstrumentValueIcons/navigation-more.svg
- ../resources/InstrumentValueIcons/browser-window-open.svg
- ../resources/InstrumentValueIcons/flashlight.svg
- ../resources/InstrumentValueIcons/currency-dollar.svg
- ../resources/InstrumentValueIcons/close-solid.svg
- ../resources/InstrumentValueIcons/vector.svg
- ../resources/InstrumentValueIcons/paste.svg
- ../resources/InstrumentValueIcons/arrow-outline-up.svg
- ../resources/InstrumentValueIcons/pause.svg
- ../resources/InstrumentValueIcons/artist.svg
- ../resources/InstrumentValueIcons/hour-glass.svg
- ../resources/InstrumentValueIcons/browser-window.svg
- ../resources/InstrumentValueIcons/border-left.svg
- ../resources/InstrumentValueIcons/tag.svg
- ../resources/InstrumentValueIcons/translate.svg
- ../resources/InstrumentValueIcons/mood-neutral-solid.svg
- ../resources/InstrumentValueIcons/pause-solid.svg
- ../resources/InstrumentValueIcons/phone.svg
- ../resources/InstrumentValueIcons/heart.svg
- ../resources/InstrumentValueIcons/headphones.svg
- ../resources/InstrumentValueIcons/servers.svg
- ../resources/InstrumentValueIcons/close.svg
../resources/InstrumentValueIcons/directions.svg
- ../resources/InstrumentValueIcons/arrow-thick-left.svg
- ../resources/InstrumentValueIcons/play-outline.svg
- ../resources/InstrumentValueIcons/arrow-thick-up.svg
- ../resources/InstrumentValueIcons/code.svg
- ../resources/InstrumentValueIcons/thermometer.svg
- ../resources/InstrumentValueIcons/location-restroom.svg
- ../resources/InstrumentValueIcons/list-bullet.svg
- ../resources/InstrumentValueIcons/wrench.svg
- ../resources/InstrumentValueIcons/compose.svg
- ../resources/InstrumentValueIcons/at-symbol.svg
- ../resources/InstrumentValueIcons/library.svg
- ../resources/InstrumentValueIcons/view-list.svg
- ../resources/InstrumentValueIcons/timer.svg
- ../resources/InstrumentValueIcons/window-open.svg
- ../resources/InstrumentValueIcons/mouse.svg
- ../resources/InstrumentValueIcons/buoy.svg
- ../resources/InstrumentValueIcons/subdirectory-right.svg
- ../resources/InstrumentValueIcons/volume-up.svg
- ../resources/InstrumentValueIcons/edit-crop.svg
- ../resources/InstrumentValueIcons/screen-full.svg
- ../resources/InstrumentValueIcons/forward.svg
- ../resources/InstrumentValueIcons/pylon.svg
- ../resources/InstrumentValueIcons/align-right.svg
- ../resources/InstrumentValueIcons/border-outer.svg
- ../resources/InstrumentValueIcons/arrow-thin-up.svg
- ../resources/InstrumentValueIcons/printer.svg
- ../resources/InstrumentValueIcons/wallet.svg
- ../resources/InstrumentValueIcons/arrow-outline-left.svg
- ../resources/InstrumentValueIcons/credit-card.svg
- ../resources/InstrumentValueIcons/repost.svg
- ../resources/InstrumentValueIcons/notifications-outline.svg
- ../resources/InstrumentValueIcons/bookmark-outline.svg
- ../resources/InstrumentValueIcons/radar copy 2.svg
- ../resources/InstrumentValueIcons/share-alt.svg
- ../resources/InstrumentValueIcons/link.svg
- ../resources/InstrumentValueIcons/attachment.svg
- ../resources/InstrumentValueIcons/chart.svg
- ../resources/InstrumentValueIcons/shield.svg
- ../resources/InstrumentValueIcons/block.svg
- ../resources/InstrumentValueIcons/indent-increase.svg
- ../resources/InstrumentValueIcons/arrow-base-up.svg
- ../resources/InstrumentValueIcons/minus-solid.svg
- ../resources/InstrumentValueIcons/folder-outline-add.svg
- ../resources/InstrumentValueIcons/location.svg
- ../resources/InstrumentValueIcons/mic.svg
- ../resources/InstrumentValueIcons/education.svg
../resources/InstrumentValueIcons/announcement.svg
+ ../resources/InstrumentValueIcons/user-solid-square.svg
+ ../resources/InstrumentValueIcons/shield.svg
+ ../resources/InstrumentValueIcons/watch.svg
+ ../resources/InstrumentValueIcons/share.svg
+ ../resources/InstrumentValueIcons/bookmark-outline-add.svg
+ ../resources/InstrumentValueIcons/arrow-thick-left.svg
+ ../resources/InstrumentValueIcons/reload.svg
+ ../resources/InstrumentValueIcons/badge.svg
+ ../resources/InstrumentValueIcons/travel-walk.svg
+ ../resources/InstrumentValueIcons/cog.svg
+ ../resources/InstrumentValueIcons/folder-outline.svg
+ ../resources/InstrumentValueIcons/queue.svg
+ ../resources/InstrumentValueIcons/indent-decrease.svg
+ ../resources/InstrumentValueIcons/menu.svg
+ ../resources/InstrumentValueIcons/computer-laptop.svg
+ ../resources/InstrumentValueIcons/view-column.svg
+ ../resources/InstrumentValueIcons/list.svg
+ ../resources/InstrumentValueIcons/question.svg
+ ../resources/InstrumentValueIcons/music-artist.svg
+ ../resources/InstrumentValueIcons/playlist.svg
+ ../resources/InstrumentValueIcons/wallet.svg
+ ../resources/InstrumentValueIcons/bluetooth.svg
+ ../resources/InstrumentValueIcons/radar copy 2.svg
+ ../resources/InstrumentValueIcons/tuning.svg
+ ../resources/InstrumentValueIcons/book-reference.svg
+ ../resources/InstrumentValueIcons/information-solid.svg
+ ../resources/InstrumentValueIcons/user-group.svg
+ ../resources/InstrumentValueIcons/view-hide.svg
+ ../resources/InstrumentValueIcons/gift.svg
+ ../resources/InstrumentValueIcons/pylon.svg
+ ../resources/InstrumentValueIcons/arrow-thin-left.svg
+ ../resources/InstrumentValueIcons/pause.svg
+ ../resources/InstrumentValueIcons/layers.svg
+ ../resources/InstrumentValueIcons/repost.svg
+ ../resources/InstrumentValueIcons/hand-stop.svg
+ ../resources/InstrumentValueIcons/border-horizontal.svg
+ ../resources/InstrumentValueIcons/send.svg
+ ../resources/InstrumentValueIcons/beverage.svg
+ ../resources/InstrumentValueIcons/align-center.svg
+ ../resources/InstrumentValueIcons/travel-bus.svg
+ ../resources/InstrumentValueIcons/artist.svg
+ ../resources/InstrumentValueIcons/color-palette.svg
+ ../resources/InstrumentValueIcons/compose.svg
+ ../resources/InstrumentValueIcons/news-paper.svg
+ ../resources/InstrumentValueIcons/printer.svg
+ ../resources/InstrumentValueIcons/border-all.svg
+ ../resources/InstrumentValueIcons/edit-copy.svg
+ ../resources/InstrumentValueIcons/dots-horizontal-triple.svg
+ ../resources/InstrumentValueIcons/border-left.svg
+ ../resources/InstrumentValueIcons/view-show.svg
+ ../resources/InstrumentValueIcons/globe.svg
+ ../resources/InstrumentValueIcons/subdirectory-right.svg
+ ../resources/InstrumentValueIcons/chart.svg
+ ../resources/InstrumentValueIcons/arrow-outline-down.svg
+ ../resources/InstrumentValueIcons/browser-window.svg
+ ../resources/InstrumentValueIcons/inbox.svg
+ ../resources/InstrumentValueIcons/music-album.svg
+ ../resources/InstrumentValueIcons/currency-dollar.svg
+ ../resources/InstrumentValueIcons/chart-bar.svg
+ ../resources/InstrumentValueIcons/text-box.svg
+ ../resources/InstrumentValueIcons/border-outer.svg
+ ../resources/InstrumentValueIcons/stethoscope.svg
+ ../resources/InstrumentValueIcons/coffee.svg
+ ../resources/InstrumentValueIcons/timer.svg
+ ../resources/InstrumentValueIcons/mood-sad-outline.svg
+ ../resources/InstrumentValueIcons/show-sidebar.svg
+ ../resources/InstrumentValueIcons/border-vertical.svg
+ ../resources/InstrumentValueIcons/thumbs-up.svg
+ ../resources/InstrumentValueIcons/step-forward.svg
+ ../resources/InstrumentValueIcons/location-marina.svg
+ ../resources/InstrumentValueIcons/inbox-download.svg
+ ../resources/InstrumentValueIcons/cheveron-outline-down.svg
+ ../resources/InstrumentValueIcons/volume-down.svg
+ ../resources/InstrumentValueIcons/browser-window-new.svg
+ ../resources/InstrumentValueIcons/add-solid.svg
+ ../resources/InstrumentValueIcons/credit-card.svg
+ ../resources/InstrumentValueIcons/cheveron-outline-up.svg
+ ../resources/InstrumentValueIcons/edit-pencil.svg
+ ../resources/InstrumentValueIcons/format-bold.svg
+ ../resources/InstrumentValueIcons/paste.svg
+ ../resources/InstrumentValueIcons/radio.svg
+ ../resources/InstrumentValueIcons/album.svg
+ ../resources/InstrumentValueIcons/at-symbol.svg
+ ../resources/InstrumentValueIcons/education.svg
+ ../resources/InstrumentValueIcons/radar.svg
+ ../resources/InstrumentValueIcons/headphones.svg
+ ../resources/InstrumentValueIcons/load-balancer.svg
+ ../resources/InstrumentValueIcons/home.svg
+ ../resources/InstrumentValueIcons/backward.svg
+ ../resources/InstrumentValueIcons/tablet.svg
+ ../resources/InstrumentValueIcons/mood-happy-solid.svg
+ ../resources/InstrumentValueIcons/align-right.svg
+ ../resources/InstrumentValueIcons/folder.svg
+ ../resources/InstrumentValueIcons/duplicate.svg
+ ../resources/InstrumentValueIcons/envelope.svg
+ ../resources/InstrumentValueIcons/bookmark copy 3.svg
+ ../resources/InstrumentValueIcons/lock-closed.svg
+ ../resources/InstrumentValueIcons/clipboard.svg
+ ../resources/InstrumentValueIcons/border-bottom.svg
+ ../resources/InstrumentValueIcons/shuffle.svg
+ ../resources/InstrumentValueIcons/save-disk.svg
+ ../resources/InstrumentValueIcons/refresh.svg
+ ../resources/InstrumentValueIcons/lock-open.svg
+ ../resources/InstrumentValueIcons/link.svg
+ ../resources/InstrumentValueIcons/view-carousel.svg
+ ../resources/InstrumentValueIcons/share-01.svg
+ ../resources/InstrumentValueIcons/arrow-thick-down.svg
+ ../resources/InstrumentValueIcons/ticket.svg
+ ../resources/InstrumentValueIcons/portfolio.svg
+ ../resources/InstrumentValueIcons/arrow-simple-down.svg
+ ../resources/InstrumentValueIcons/location-restroom.svg
+ ../resources/InstrumentValueIcons/yin-yang.svg
+ ../resources/InstrumentValueIcons/buoy.svg
+ ../resources/InstrumentValueIcons/play-outline.svg
+ ../resources/InstrumentValueIcons/box.svg
+ ../resources/InstrumentValueIcons/align-left.svg
+ ../resources/InstrumentValueIcons/minus-solid.svg
+ ../resources/InstrumentValueIcons/play.svg
+ ../resources/InstrumentValueIcons/format-italic.svg
+ ../resources/InstrumentValueIcons/close.svg
+ ../resources/InstrumentValueIcons/screen-full.svg
+ ../resources/InstrumentValueIcons/airplane.svg
+ ../resources/InstrumentValueIcons/forward.svg
+ ../resources/InstrumentValueIcons/document.svg
+ ../resources/InstrumentValueIcons/cheveron-outline-left.svg
+ ../resources/InstrumentValueIcons/travel-car.svg
+ ../resources/InstrumentValueIcons/library.svg
+ ../resources/InstrumentValueIcons/heart.svg
+ ../resources/InstrumentValueIcons/zoom-out.svg
+ ../resources/InstrumentValueIcons/travel-taxi-cab.svg
+ ../resources/InstrumentValueIcons/chat-bubble-dots.svg
+ ../resources/InstrumentValueIcons/vector.svg
+ ../resources/InstrumentValueIcons/notifications-outline.svg
+ ../resources/InstrumentValueIcons/swap.svg
+ ../resources/InstrumentValueIcons/mic.svg
+ ../resources/InstrumentValueIcons/folder-outline-add.svg
+ ../resources/InstrumentValueIcons/forward-step.svg
+ ../resources/InstrumentValueIcons/minus-outline.svg
+ ../resources/InstrumentValueIcons/translate.svg
+ ../resources/InstrumentValueIcons/navigation-more.svg
+ ../resources/InstrumentValueIcons/battery-full.svg
+ ../resources/InstrumentValueIcons/pause-solid.svg
+ ../resources/InstrumentValueIcons/explore.svg
+ ../resources/InstrumentValueIcons/format-text-size.svg
+ ../resources/InstrumentValueIcons/reply.svg
+ ../resources/InstrumentValueIcons/volume-off.svg
+ ../resources/InstrumentValueIcons/list-add.svg
+ ../resources/InstrumentValueIcons/pin.svg
+ ../resources/InstrumentValueIcons/zoom-in.svg
+ ../resources/InstrumentValueIcons/photo.svg
+ ../resources/InstrumentValueIcons/mobile-devices.svg
+ ../resources/InstrumentValueIcons/text-decoration.svg
+ ../resources/InstrumentValueIcons/music-playlist.svg
+ ../resources/InstrumentValueIcons/step-backward.svg
+ ../resources/InstrumentValueIcons/information-outline.svg
+ ../resources/InstrumentValueIcons/share-alt.svg
+ ../resources/InstrumentValueIcons/exclamation-outline.svg
+ ../resources/InstrumentValueIcons/notification.svg
+ ../resources/InstrumentValueIcons/window.svg
+ ../resources/InstrumentValueIcons/map.svg
+ ../resources/InstrumentValueIcons/thermometer.svg
+ ../resources/InstrumentValueIcons/calendar.svg
+ ../resources/InstrumentValueIcons/stand-by.svg
+ ../resources/InstrumentValueIcons/thumbs-down.svg
+ ../resources/InstrumentValueIcons/cheveron-down.svg
+ ../resources/InstrumentValueIcons/factory.svg
+ ../resources/InstrumentValueIcons/stroke-width.svg
+ ../resources/InstrumentValueIcons/indent-increase.svg
+ ../resources/InstrumentValueIcons/search.svg
+ ../resources/InstrumentValueIcons/add-outline.svg
+ ../resources/InstrumentValueIcons/mood-neutral-outline.svg
+ ../resources/InstrumentValueIcons/cheveron-outline-right.svg
+ ../resources/InstrumentValueIcons/arrow-thick-right.svg
+ ../resources/InstrumentValueIcons/key.svg
+ ../resources/InstrumentValueIcons/cloud.svg
+ ../resources/InstrumentValueIcons/mood-happy-outline.svg
+ ../resources/InstrumentValueIcons/dots-horizontal-double.svg
+ ../resources/InstrumentValueIcons/format-font-size.svg
+ ../resources/InstrumentValueIcons/arrow-outline-up.svg
+ ../resources/InstrumentValueIcons/arrow-thin-up.svg
+ ../resources/InstrumentValueIcons/network.svg
+ ../resources/InstrumentValueIcons/mouse.svg
+ ../resources/InstrumentValueIcons/checkmark-outline.svg
+ ../resources/InstrumentValueIcons/mood-sad-solid.svg
+ ../resources/InstrumentValueIcons/store-front.svg
+ ../resources/InstrumentValueIcons/battery-half.svg
+ ../resources/InstrumentValueIcons/tools copy.svg
+ ../resources/InstrumentValueIcons/time.svg
+ ../resources/InstrumentValueIcons/block.svg
+ ../resources/InstrumentValueIcons/camera.svg
+ ../resources/InstrumentValueIcons/user-add.svg
+ ../resources/InstrumentValueIcons/cheveron-up.svg
+ ../resources/InstrumentValueIcons/window-new.svg
+ ../resources/InstrumentValueIcons/battery-low.svg
+ ../resources/InstrumentValueIcons/volume-up.svg
+ ../resources/InstrumentValueIcons/volume-mute.svg
+ ../resources/InstrumentValueIcons/arrow-simple-up.svg
+ ../resources/InstrumentValueIcons/travel.svg
+ ../resources/InstrumentValueIcons/location.svg
+ ../resources/InstrumentValueIcons/dashboard.svg
+ ../resources/InstrumentValueIcons/light-bulb.svg
+ ../resources/InstrumentValueIcons/travel-case.svg
+ ../resources/InstrumentValueIcons/edit-crop.svg
+ ../resources/InstrumentValueIcons/close-solid.svg
+ ../resources/InstrumentValueIcons/notifications.svg
+ ../resources/InstrumentValueIcons/video-camera.svg
+ ../resources/InstrumentValueIcons/film.svg
+ ../resources/InstrumentValueIcons/border-right.svg
+ ../resources/InstrumentValueIcons/bolt.svg
+ ../resources/InstrumentValueIcons/keyboard.svg
+ ../resources/InstrumentValueIcons/shopping-cart.svg
+ ../resources/InstrumentValueIcons/cheveron-left.svg
+ ../resources/InstrumentValueIcons/flag.svg
+ ../resources/InstrumentValueIcons/adjust.svg
+ ../resources/InstrumentValueIcons/wrench.svg
+ ../resources/InstrumentValueIcons/station.svg
+ ../resources/InstrumentValueIcons/target.svg
+ ../resources/InstrumentValueIcons/location-food.svg
+ ../resources/InstrumentValueIcons/hour-glass.svg
+ ../resources/InstrumentValueIcons/date-add.svg
+ ../resources/InstrumentValueIcons/location-gas-station.svg
+ ../resources/InstrumentValueIcons/cheveron-right.svg
+ ../resources/InstrumentValueIcons/checkmark.svg
+ ../resources/InstrumentValueIcons/format-underline.svg
+ ../resources/InstrumentValueIcons/border-none.svg
+ ../resources/InstrumentValueIcons/inbox-full.svg
+ ../resources/InstrumentValueIcons/window-open.svg
+ ../resources/InstrumentValueIcons/travel-train.svg
+ ../resources/InstrumentValueIcons/location-current.svg
+ ../resources/InstrumentValueIcons/computer-desktop.svg
+ ../resources/InstrumentValueIcons/servers.svg
+ ../resources/InstrumentValueIcons/close-outline.svg
+ ../resources/InstrumentValueIcons/apparel.svg
+ ../resources/InstrumentValueIcons/arrow-thick-up.svg
+ ../resources/InstrumentValueIcons/border-top.svg
+ ../resources/InstrumentValueIcons/bookmark copy 2.svg
+ ../resources/InstrumentValueIcons/trophy.svg
+ ../resources/InstrumentValueIcons/view-list.svg
+ ../resources/InstrumentValueIcons/arrow-thin-right.svg
+ ../resources/InstrumentValueIcons/arrow-outline-left.svg
+ ../resources/InstrumentValueIcons/edit-cut.svg
+ ../resources/InstrumentValueIcons/brightness-up.svg
+ ../resources/InstrumentValueIcons/phone.svg
+ ../resources/InstrumentValueIcons/arrow-outline-right.svg
+ ../resources/InstrumentValueIcons/mood-neutral-solid.svg
+ ../resources/InstrumentValueIcons/arrow-base-down.svg
+ ../resources/InstrumentValueIcons/arrow-simple-left.svg
+ ../resources/InstrumentValueIcons/browser-window-open.svg
+ ../resources/InstrumentValueIcons/document-add.svg
+ ../resources/InstrumentValueIcons/inbox-check.svg
+ ../resources/InstrumentValueIcons/star-full.svg
+ ../resources/InstrumentValueIcons/fast-forward.svg
+ ../resources/InstrumentValueIcons/fast-rewind.svg
+ ../resources/InstrumentValueIcons/hot.svg
+ ../resources/InstrumentValueIcons/brightness-down.svg
+ ../resources/InstrumentValueIcons/backward-step.svg
+ ../resources/InstrumentValueIcons/user.svg
+ ../resources/InstrumentValueIcons/backspace.svg
+ ../resources/InstrumentValueIcons/border-inner.svg
+ ../resources/InstrumentValueIcons/chart-pie.svg
+ ../resources/InstrumentValueIcons/arrow-base-up.svg
+ ../resources/InstrumentValueIcons/music-notes.svg
+ ../resources/InstrumentValueIcons/filter.svg
+ ../resources/InstrumentValueIcons/code.svg
+ ../resources/InstrumentValueIcons/dial-pad.svg
+ ../resources/InstrumentValueIcons/reply-all.svg
+ ../resources/InstrumentValueIcons/arrow-thin-down.svg
+ ../resources/InstrumentValueIcons/usb.svg
+ ../resources/InstrumentValueIcons/anchor.svg
+ ../resources/InstrumentValueIcons/align-justified.svg
+ ../resources/InstrumentValueIcons/conversation.svg
+ ../resources/InstrumentValueIcons/bug.svg
+ ../resources/InstrumentValueIcons/arrow-simple-right.svg
+ ../resources/InstrumentValueIcons/location-park.svg
+ ../resources/InstrumentValueIcons/flashlight.svg
+ ../resources/InstrumentValueIcons/pen-tool.svg
+ ../resources/InstrumentValueIcons/subdirectory-left.svg
+ ../resources/InstrumentValueIcons/exclamation-solid.svg
+ ../resources/InstrumentValueIcons/php-elephant.svg
+ ../resources/InstrumentValueIcons/bookmark.svg
+ ../resources/InstrumentValueIcons/location-hotel.svg
+ ../resources/InstrumentValueIcons/calculator.svg
+ ../resources/InstrumentValueIcons/view-tile.svg
+ ../resources/InstrumentValueIcons/plugin.svg
+ ../resources/InstrumentValueIcons/tag.svg
+ ../resources/InstrumentValueIcons/pause-outline.svg
+ ../resources/InstrumentValueIcons/copy.svg
+ ../resources/InstrumentValueIcons/hard-drive.svg
+ ../resources/InstrumentValueIcons/attachment.svg
+ ../resources/InstrumentValueIcons/cloud-upload.svg
+ ../resources/InstrumentValueIcons/list-bullet.svg
+ ../resources/InstrumentValueIcons/user-solid-circle.svg
+ ../resources/InstrumentValueIcons/trash.svg
+ ../resources/InstrumentValueIcons/bookmark-outline.svg
+ ../resources/InstrumentValueIcons/location-shopping.svg
diff --git a/custom-example/README.jpg b/custom/README.jpg
similarity index 100%
rename from custom-example/README.jpg
rename to custom/README.jpg
diff --git a/custom-example/README.md b/custom/README.md
similarity index 100%
rename from custom-example/README.md
rename to custom/README.md
diff --git a/custom-example/android/res/drawable-hdpi/icon.png b/custom/android-abandon/res/drawable-hdpi/icon.png
similarity index 100%
rename from custom-example/android/res/drawable-hdpi/icon.png
rename to custom/android-abandon/res/drawable-hdpi/icon.png
diff --git a/custom-example/android/res/drawable-ldpi/icon.png b/custom/android-abandon/res/drawable-ldpi/icon.png
similarity index 100%
rename from custom-example/android/res/drawable-ldpi/icon.png
rename to custom/android-abandon/res/drawable-ldpi/icon.png
diff --git a/custom-example/android/res/drawable-mdpi/icon.png b/custom/android-abandon/res/drawable-mdpi/icon.png
similarity index 100%
rename from custom-example/android/res/drawable-mdpi/icon.png
rename to custom/android-abandon/res/drawable-mdpi/icon.png
diff --git a/custom-example/android/res/drawable-xhdpi/icon.png b/custom/android-abandon/res/drawable-xhdpi/icon.png
similarity index 100%
rename from custom-example/android/res/drawable-xhdpi/icon.png
rename to custom/android-abandon/res/drawable-xhdpi/icon.png
diff --git a/custom-example/android/res/drawable-xxhdpi/icon.png b/custom/android-abandon/res/drawable-xxhdpi/icon.png
similarity index 100%
rename from custom-example/android/res/drawable-xxhdpi/icon.png
rename to custom/android-abandon/res/drawable-xxhdpi/icon.png
diff --git a/custom-example/android/res/drawable-xxxhdpi/icon.png b/custom/android-abandon/res/drawable-xxxhdpi/icon.png
similarity index 100%
rename from custom-example/android/res/drawable-xxxhdpi/icon.png
rename to custom/android-abandon/res/drawable-xxxhdpi/icon.png
diff --git a/custom-example/custom.pri b/custom/custom.pri
similarity index 78%
rename from custom-example/custom.pri
rename to custom/custom.pri
index dd5aa4b..6d26c44 100644
--- a/custom-example/custom.pri
+++ b/custom/custom.pri
@@ -23,6 +23,7 @@ DEFINES += APP_VERSION_STR=\"\\\"$$CUSTOM_QGC_VERSION\\\"\"
message(Custom QGC Version: $${CUSTOM_QGC_VERSION})
# Build a single flight stack by disabling APM support
+MAVLINK_CONF = common
CONFIG += QGC_DISABLE_APM_MAVLINK
CONFIG += QGC_DISABLE_APM_PLUGIN QGC_DISABLE_APM_PLUGIN_FACTORY
@@ -34,19 +35,19 @@ CONFIG += QGC_DISABLE_PX4_PLUGIN_FACTORY
DEFINES += CUSTOMHEADER=\"\\\"CustomPlugin.h\\\"\"
DEFINES += CUSTOMCLASS=CustomPlugin
-TARGET = CustomQGroundControl
-DEFINES += QGC_APPLICATION_NAME='"\\\"Custom QGroundControl\\\""'
+TARGET = Spiri
+DEFINES += QGC_APPLICATION_NAME='"\\\"Spiri\\\""'
-DEFINES += QGC_ORG_NAME=\"\\\"qgroundcontrol.org\\\"\"
-DEFINES += QGC_ORG_DOMAIN=\"\\\"org.qgroundcontrol\\\"\"
+DEFINES += QGC_ORG_NAME=\"\\\"spiri.org\\\"\"
+DEFINES += QGC_ORG_DOMAIN=\"\\\"org.spiri\\\"\"
-QGC_APP_NAME = "Custom QGroundControl"
-QGC_BINARY_NAME = "CustomQGroundControl"
-QGC_ORG_NAME = "Custom"
-QGC_ORG_DOMAIN = "org.custom"
-QGC_ANDROID_PACKAGE = "org.custom.qgroundcontrol"
-QGC_APP_DESCRIPTION = "Custom QGroundControl"
-QGC_APP_COPYRIGHT = "Copyright (C) 2020 QGroundControl Development Team. All rights reserved."
+QGC_APP_NAME = "Spiri"
+QGC_BINARY_NAME = "Spiri"
+QGC_ORG_NAME = "Spiri"
+QGC_ORG_DOMAIN = "org.spiri"
+QGC_ANDROID_PACKAGE = "org.spiri.spiri"
+QGC_APP_DESCRIPTION = "Spiri"
+QGC_APP_COPYRIGHT = "Copyright (C) 2023 Spiri Development Team. All rights reserved."
# Our own, custom resources
RESOURCES += \
diff --git a/custom-example/custom.qrc b/custom/custom.qrc
similarity index 100%
rename from custom-example/custom.qrc
rename to custom/custom.qrc
diff --git a/custom-example/custom_deploy.pri b/custom/custom_deploy.pri
similarity index 100%
rename from custom-example/custom_deploy.pri
rename to custom/custom_deploy.pri
diff --git a/custom-example/deploy/qgroundcontrol-start.sh b/custom/deploy/qgroundcontrol-start.sh
old mode 100755
new mode 100644
similarity index 100%
rename from custom-example/deploy/qgroundcontrol-start.sh
rename to custom/deploy/qgroundcontrol-start.sh
diff --git a/custom-example/deploy/qgroundcontrol.desktop b/custom/deploy/qgroundcontrol.desktop
similarity index 100%
rename from custom-example/deploy/qgroundcontrol.desktop
rename to custom/deploy/qgroundcontrol.desktop
diff --git a/custom-example/qgcresources.exclusion b/custom/qgcresources.exclusion
similarity index 100%
rename from custom-example/qgcresources.exclusion
rename to custom/qgcresources.exclusion
diff --git a/custom-example/qgcresources.qrc b/custom/qgcresources.qrc
similarity index 96%
rename from custom-example/qgcresources.qrc
rename to custom/qgcresources.qrc
index 3d5fda0..23d76dd 100644
--- a/custom-example/qgcresources.qrc
+++ b/custom/qgcresources.qrc
@@ -31,7 +31,6 @@
../resources/LockClosed.svg
../resources/LockOpen.svg
../resources/notile.png
- ../resources/NoVideoBackground.jpg
../resources/Pause.svg
../resources/pause-mission.svg
../resources/pencil.svg
@@ -55,9 +54,6 @@
../resources/XDelete.svg
../resources/XDeleteBlack.svg
../resources/waypoint.svg
- ../resources/Gripper.svg
- ../resources/GripperRelease.svg
- ../resources/GripperGrab.svg
../resources/icons/qgroundcontrol.ico
diff --git a/custom-example/qgroundcontrol.exclusion b/custom/qgroundcontrol.exclusion
similarity index 100%
rename from custom-example/qgroundcontrol.exclusion
rename to custom/qgroundcontrol.exclusion
diff --git a/custom-example/qgroundcontrol.qrc b/custom/qgroundcontrol.qrc
similarity index 95%
rename from custom-example/qgroundcontrol.qrc
rename to custom/qgroundcontrol.qrc
index 5a56173..d4fce6e 100644
--- a/custom-example/qgroundcontrol.qrc
+++ b/custom/qgroundcontrol.qrc
@@ -14,11 +14,9 @@
../src/ui/toolbar/ModeIndicator.qml
../src/ui/toolbar/MultiVehicleSelector.qml
../src/ui/toolbar/RCRSSIIndicator.qml
- ../src/ui/toolbar/RemoteIDIndicator.qml
../src/ui/toolbar/ROIIndicator.qml
../src/ui/toolbar/TelemetryRSSIIndicator.qml
../src/ui/toolbar/VTOLModeIndicator.qml
- ../src/ui/toolbar/APMSupportForwardingIndicator.qml
../src/FlightDisplay/DefaultChecklist.qml
@@ -40,7 +38,6 @@
../src/ui/preferences/BluetoothSettings.qml
../src/PlanView/CorridorScanEditor.qml
../src/ui/preferences/DebugWindow.qml
- ../src/ui/preferences/RemoteIDSettings.qml
../src/AutoPilotPlugins/Common/ESP8266Component.qml
../src/AutoPilotPlugins/Common/ESP8266ComponentSummary.qml
../src/ui/ExitWithErrorWindow.qml
@@ -111,7 +108,6 @@
../src/QmlControls/KMLOrSHPFileDialog.qml
../src/QmlControls/LogReplayStatusBar.qml
../src/ui/toolbar/MainStatusIndicator.qml
- ../src/ui/toolbar/FlightModeMenuIndicator.qml
../src/ui/toolbar/MainToolBar.qml
../src/QmlControls/MainWindowSavedState.qml
../src/QmlControls/MAVLinkChart.qml
@@ -133,7 +129,6 @@
../src/QmlControls/PreFlightCheckGroup.qml
../src/QmlControls/PreFlightCheckModel.qml
../src/QmlControls/QGCButton.qml
- ../src/QmlControls/QGCColumnButton.qml
../src/QmlControls/AutotuneUI.qml
../src/QmlControls/QGCCheckBox.qml
../src/QmlControls/QGCColoredImage.qml
@@ -156,10 +151,10 @@
../src/QmlControls/QGCMouseArea.qml
../src/QmlControls/QGCMovableItem.qml
../src/QmlControls/QGCPopupDialog.qml
+ ../src/QmlControls/QGCPopupDialogContainer.qml
../src/QmlControls/QGCPipOverlay.qml
../src/QmlControls/QGCPipState.qml
../src/QmlControls/QGCRadioButton.qml
- ../src/QmlControls/QGCSimpleMessageDialog.qml
../src/QmlControls/QGCSlider.qml
../src/QmlControls/QGCSwitch.qml
../src/QmlControls/QGCTabBar.qml
@@ -167,6 +162,9 @@
../src/QmlControls/QGCTextField.qml
../src/QmlControls/QGCToolBarButton.qml
../src/QmlControls/QGCToolInsets.qml
+ ../src/QmlControls/QGCViewDialog.qml
+ ../src/QmlControls/QGCViewDialogContainer.qml
+ ../src/QmlControls/QGCViewMessage.qml
../src/QmlControls/QGroundControl/Controls/qmldir
../src/PlanView/RallyPointEditorHeader.qml
../src/PlanView/RallyPointItemEditor.qml
@@ -206,6 +204,7 @@
../src/QmlControls/QGroundControl/FactControls/qmldir
../src/FlightDisplay/FlightDisplayViewVideo.qml
../src/FlightDisplay/FlightDisplayViewWidgets.qml
+ ../src/FlightDisplay/FlyViewAirspaceIndicator.qml
../src/FlightDisplay/FlyView.qml
../src/FlightDisplay/FlyViewInstrumentPanel.qml
../src/FlightDisplay/FlyViewMap.qml
@@ -221,11 +220,9 @@
../src/FlightDisplay/GuidedActionLand.qml
../src/FlightDisplay/GuidedActionList.qml
../src/FlightDisplay/GuidedActionTakeoff.qml
- ../src/FlightDisplay/GuidedActionGripper.qml
- ../src/FlightDisplay/GripperMenu.qml
../src/FlightDisplay/GuidedActionPause.qml
../src/FlightDisplay/GuidedActionRTL.qml
- ../src/FlightDisplay/GuidedValueSlider.qml
+ ../src/FlightDisplay/GuidedAltitudeSlider.qml
../src/FlightDisplay/GuidedToolStripAction.qml
../src/FlightDisplay/MultiVehicleList.qml
../src/FlightDisplay/PreFlightBatteryCheck.qml
@@ -286,8 +283,6 @@
../src/AnalyzeView/VibrationPage.qml
../src/FlightDisplay/VirtualJoystick.qml
../src/PlanView/VTOLLandingPatternEditor.qml
- ../src/comm/MockLinkOptionsDlg.qml
- ../src/FlightDisplay/FlyViewInsetViewer.qml
../src/FirstRunPromptDialogs/UnitsFirstRunPrompt.qml
@@ -304,7 +299,6 @@
../src/MissionManager/CameraSection.FactMetaData.json
../src/MissionManager/CameraSpec.FactMetaData.json
../src/MissionManager/CorridorScan.SettingsGroup.json
- ../src/Settings/RemoteID.SettingsGroup.json
../src/QmlControls/EditPositionDialog.FactMetaData.json
../src/Settings/FirmwareUpgrade.SettingsGroup.json
../src/Settings/FlightMap.SettingsGroup.json
@@ -346,8 +340,6 @@
../src/Vehicle/VibrationFact.json
../src/Vehicle/WindFact.json
../src/Vehicle/HygrometerFact.json
- ../src/Vehicle/GeneratorFact.json
- ../src/Vehicle/EFIFact.json
../src/Settings/Video.SettingsGroup.json
../src/MissionManager/VTOLLandingPattern.FactMetaData.json
@@ -358,6 +350,5 @@
../src/comm/MockLink.General.MetaData.json.xz
../src/comm/MockLink.Parameter.MetaData.json.xz
../src/comm/MockLink.Parameter.MetaData.json
- ../src/comm/Mocklink.Arduplane.params.ftp.bin
diff --git a/custom-example/res/Custom/Camera/ZoomControl.qml b/custom/res/Custom/Camera/ZoomControl.qml
similarity index 100%
rename from custom-example/res/Custom/Camera/ZoomControl.qml
rename to custom/res/Custom/Camera/ZoomControl.qml
diff --git a/custom-example/res/Custom/Camera/qmldir b/custom/res/Custom/Camera/qmldir
similarity index 100%
rename from custom-example/res/Custom/Camera/qmldir
rename to custom/res/Custom/Camera/qmldir
diff --git a/custom-example/res/Custom/Widgets/CustomArtificialHorizon.qml b/custom/res/Custom/Widgets/CustomArtificialHorizon.qml
similarity index 100%
rename from custom-example/res/Custom/Widgets/CustomArtificialHorizon.qml
rename to custom/res/Custom/Widgets/CustomArtificialHorizon.qml
diff --git a/custom-example/res/Custom/Widgets/CustomAttitudeWidget.qml b/custom/res/Custom/Widgets/CustomAttitudeWidget.qml
similarity index 100%
rename from custom-example/res/Custom/Widgets/CustomAttitudeWidget.qml
rename to custom/res/Custom/Widgets/CustomAttitudeWidget.qml
diff --git a/custom-example/res/Custom/Widgets/CustomIconButton.qml b/custom/res/Custom/Widgets/CustomIconButton.qml
similarity index 100%
rename from custom-example/res/Custom/Widgets/CustomIconButton.qml
rename to custom/res/Custom/Widgets/CustomIconButton.qml
diff --git a/custom-example/res/Custom/Widgets/CustomOnOffSwitch.qml b/custom/res/Custom/Widgets/CustomOnOffSwitch.qml
similarity index 100%
rename from custom-example/res/Custom/Widgets/CustomOnOffSwitch.qml
rename to custom/res/Custom/Widgets/CustomOnOffSwitch.qml
diff --git a/custom-example/res/Custom/Widgets/CustomQuickButton.qml b/custom/res/Custom/Widgets/CustomQuickButton.qml
similarity index 100%
rename from custom-example/res/Custom/Widgets/CustomQuickButton.qml
rename to custom/res/Custom/Widgets/CustomQuickButton.qml
diff --git a/custom-example/res/Custom/Widgets/CustomSignalStrength.qml b/custom/res/Custom/Widgets/CustomSignalStrength.qml
similarity index 100%
rename from custom-example/res/Custom/Widgets/CustomSignalStrength.qml
rename to custom/res/Custom/Widgets/CustomSignalStrength.qml
diff --git a/custom-example/res/Custom/Widgets/CustomToolBarButton.qml b/custom/res/Custom/Widgets/CustomToolBarButton.qml
similarity index 100%
rename from custom-example/res/Custom/Widgets/CustomToolBarButton.qml
rename to custom/res/Custom/Widgets/CustomToolBarButton.qml
diff --git a/custom-example/res/Custom/Widgets/CustomVehicleButton.qml b/custom/res/Custom/Widgets/CustomVehicleButton.qml
similarity index 100%
rename from custom-example/res/Custom/Widgets/CustomVehicleButton.qml
rename to custom/res/Custom/Widgets/CustomVehicleButton.qml
diff --git a/custom-example/res/Custom/Widgets/qmldir b/custom/res/Custom/Widgets/qmldir
similarity index 100%
rename from custom-example/res/Custom/Widgets/qmldir
rename to custom/res/Custom/Widgets/qmldir
diff --git a/custom-example/res/CustomFlyViewOverlay.qml b/custom/res/CustomFlyViewOverlay.qml
similarity index 84%
rename from custom-example/res/CustomFlyViewOverlay.qml
rename to custom/res/CustomFlyViewOverlay.qml
index 422c930..03ff9e8 100644
--- a/custom-example/res/CustomFlyViewOverlay.qml
+++ b/custom/res/CustomFlyViewOverlay.qml
@@ -55,38 +55,8 @@ Item {
QGCToolInsets {
id: _totalToolInsets
- leftEdgeTopInset: parentToolInsets.leftEdgeTopInset
- leftEdgeCenterInset: exampleRectangle.leftEdgeCenterInset
- leftEdgeBottomInset: parentToolInsets.leftEdgeBottomInset
- rightEdgeTopInset: parentToolInsets.rightEdgeTopInset
- rightEdgeCenterInset: parentToolInsets.rightEdgeCenterInset
- rightEdgeBottomInset: parent.width - compassBackground.x
- topEdgeLeftInset: parentToolInsets.topEdgeLeftInset
topEdgeCenterInset: compassArrowIndicator.y + compassArrowIndicator.height
- topEdgeRightInset: parentToolInsets.topEdgeRightInset
- bottomEdgeLeftInset: parentToolInsets.bottomEdgeLeftInset
- bottomEdgeCenterInset: parentToolInsets.bottomEdgeCenterInset
- bottomEdgeRightInset: parent.height - attitudeIndicator.y
- }
-
- // This is an example of how you can use parent tool insets to position an element on the custom fly view layer
- // - we use parent topEdgeLeftInset to position the widget below the toolstrip
- // - we use parent bottomEdgeLeftInset to dodge the virtual joystick if enabled
- // - we use the parent leftEdgeTopInset to size our element to the same width as the ToolStripAction
- // - we export the width of this element as the leftEdgeCenterInset so that the map will recenter if the vehicle flys behind this element
- Rectangle {
- id: exampleRectangle
- visible: false // to see this example, set this to true. To view insets, enable the insets viewer FlyView.qml
- anchors.left: parent.left
- anchors.top: parent.top
- anchors.bottom: parent.bottom
- anchors.topMargin: parentToolInsets.topEdgeLeftInset + _toolsMargin
- anchors.bottomMargin: parentToolInsets.bottomEdgeLeftInset + _toolsMargin
- anchors.leftMargin: _toolsMargin
- width: parentToolInsets.leftEdgeTopInset - _toolsMargin
- color: 'red'
-
- property real leftEdgeCenterInset: visible ? x + width : 0
+ rightEdgeBottomInset: parent.width - compassBackground.x
}
//-------------------------------------------------------------------------
@@ -239,7 +209,7 @@ Item {
Rectangle {
id: attitudeIndicator
- anchors.bottomMargin: _toolsMargin + parentToolInsets.bottomEdgeRightInset
+ anchors.bottomMargin: _toolsMargin
anchors.rightMargin: _toolsMargin
anchors.bottom: parent.bottom
anchors.right: parent.right
diff --git a/custom-example/res/Images/CustomAppIcon.png b/custom/res/Images/CustomAppIcon.png
similarity index 100%
rename from custom-example/res/Images/CustomAppIcon.png
rename to custom/res/Images/CustomAppIcon.png
diff --git a/custom-example/res/Images/CustomVehicleIcon.svg b/custom/res/Images/CustomVehicleIcon.svg
similarity index 99%
rename from custom-example/res/Images/CustomVehicleIcon.svg
rename to custom/res/Images/CustomVehicleIcon.svg
index 341f04c..671b229 100644
--- a/custom-example/res/Images/CustomVehicleIcon.svg
+++ b/custom/res/Images/CustomVehicleIcon.svg
@@ -1,7 +1,7 @@
-
-
-
-