diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 22250809993f165cf9bc6c524406acc21f4a41c5..99025bac2f016905cfd728d4ade9819bc57e10bd 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -438,10 +438,12 @@ HEADERS += \ src/Wima/Snake/SnakeTiles.h \ src/Wima/Snake/SnakeTilesLocal.h \ src/Wima/Snake/SnakeWorker.h \ - src/Wima/WaypointManager/GenericPathSlicer.h \ + src/Wima/WaypointManager/GenericSlicer.h \ src/Wima/WaypointManager/GenericWaypointManager.h \ src/Wima/Geometry/WimaPolygonArray.h \ src/Wima/Snake/snaketile.h \ + src/Wima/WaypointManager/Settings.h \ + src/Wima/WaypointManager/utils.h \ src/api/QGCCorePlugin.h \ src/api/QGCOptions.h \ src/api/QGCSettings.h \ @@ -495,8 +497,10 @@ SOURCES += \ src/Wima/Geometry/PolygonArray.cc \ src/Wima/Snake/QNemoProgress.cc \ src/Wima/Snake/SnakeWorker.cc \ - src/Wima/WaypointManager/GenericPathSlicer.cpp \ + src/Wima/WaypointManager/GenericSlicer.cpp \ src/Wima/WaypointManager/GenericWaypointManager.cpp \ + src/Wima/WaypointManager/Settings.cpp \ + src/Wima/WaypointManager/utils.cpp \ src/comm/ros_bridge/include/ComPrivateInclude.cpp \ src/comm/ros_bridge/include/MessageTag.cpp \ src/comm/ros_bridge/include/TopicPublisher.cpp \ diff --git a/src/Wima/WaypointManager/GenericPathSlicer.cpp b/src/Wima/WaypointManager/GenericPathSlicer.cpp deleted file mode 100644 index 68a57444b8aa6a9701ab7af30d83f0590fa6d167..0000000000000000000000000000000000000000 --- a/src/Wima/WaypointManager/GenericPathSlicer.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "GenericPathSlicer.h" diff --git a/src/Wima/WaypointManager/GenericPathSlicer.h b/src/Wima/WaypointManager/GenericPathSlicer.h deleted file mode 100644 index b8f379570f163e686e49273d34ef47decbfa64eb..0000000000000000000000000000000000000000 --- a/src/Wima/WaypointManager/GenericPathSlicer.h +++ /dev/null @@ -1,245 +0,0 @@ -#pragma once - -#include -#include - -//! @brief Base class for all waypoint managers. -template class Container /*e.g. QVector*/> -class GenericPathSlicer -{ -public: - typedef Container ContainerType; - GenericPathSlicer(); - - const ContainerType &path () const; - - // Waypoint editing. - void setPath (const ContainerType &path); - void push_back (const ElementType &wp); - void push_front (const ElementType &wp); - void clear (); - void insert (int i, const ElementType &wp); - uint32_t size(); - ElementType &at (unsigned int i); - - - // Slicing. - void slice (ContainerType &slice); - void next (ContainerType &slice); - void previous (ContainerType &slice); - void reset (ContainerType &slice); - - - // Slicing parameters. - //! @brief Sets the overlap. - //! - //! @param overlap The number of overlapping vertices - //! between on and the next slice. - void setOverlap (uint32_t overlap); - //! @brief Sets the number of vertices per slice. - //! - //! @param N The number of vertices per slice. - void setN (std::uint32_t N); - //! @brief Sets the start index. - //! - //! @param idxStart The start index. - void setStartIndex (int idxStart); - - //! @return Returns the overlap. - uint32_t overlap (); - //! @return Returns the number of vertices per slice N. - uint32_t N (); - //! @return Returns the start index. - int startIndex (); - //! @return Returns the end index. - int endIndex (); - //! @return Returns the start index of the next slice. - int nextIndex (); - - -private: - void _updateIdx(); - - ContainerType _path; - long _idxStart; - long _idxEnd; - long _idxNext; - long _idxPrevious; - uint32_t _overlap; - uint32_t _N; - bool _idxValid; - bool _atEnd; - - -}; - - -template class Container /*e.g. QVector*/> -GenericPathSlicer::GenericPathSlicer(): - _idxValid(false) - , _atEnd(false) -{} - -template class Container /*e.g. QVector*/> -const Container &GenericPathSlicer::path() const { - return _path; -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::setPath(const ContainerType &waypoints) { - _idxValid = false; - _path = waypoints; -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::push_back(const ElementType &wp) { - _idxValid = false; - _path.push_back(wp); -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::push_front(const ElementType &wp) { - _idxValid = false; - _path.push_front(wp); -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::clear(){ - _idxValid = false; - _path.clear(); -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::insert(int i, const ElementType &wp){ - _idxValid = false; - _path.insert(i, wp); -} - -template class Container /*e.g. QVector*/> -std::uint32_t GenericPathSlicer::size() -{ - return std::uint32_t(_path.size()); -} - -template class Container /*e.g. QVector*/> -ElementType &GenericPathSlicer::at(unsigned int i) -{ - return _path.at(i); -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::setOverlap(std::uint32_t overlap) -{ - _idxValid = false; - _overlap = overlap; -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::setN(uint32_t N) -{ - _idxValid = false; - _N = N > 0 ? N : 1; -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::setStartIndex(int idxStart) -{ - _idxValid = false; - _idxStart = idxStart; -} - -template class Container /*e.g. QVector*/> -uint32_t GenericPathSlicer::overlap() -{ - return _overlap; -} - -template class Container /*e.g. QVector*/> -uint32_t GenericPathSlicer::N() -{ - return _N; -} - -template class Container /*e.g. QVector*/> -int GenericPathSlicer::startIndex() -{ - if (!_idxValid) - _updateIdx(); - return _idxStart; -} - -template class Container /*e.g. QVector*/> -int GenericPathSlicer::endIndex() -{ - if (!_idxValid) - _updateIdx(); - return _idxEnd; -} - -template class Container /*e.g. QVector*/> -int GenericPathSlicer::nextIndex() -{ - if (!_idxValid) - _updateIdx(); - return _idxNext; -} - - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::_updateIdx() -{ - _idxValid = true; - _atEnd = false; - std::uint64_t size = _path.size(); - if ( _idxStart >= size-1 ) { - _idxStart = size-1; - _idxEnd = _idxStart; - _idxNext = _idxStart; - _atEnd = true; - return; - } - - _idxStart < 0 ? 0 : _idxStart; - - _idxEnd = _idxStart + _N - 1; - _idxEnd = _idxEnd < size ? _idxEnd : size-1; - - _idxNext = _idxEnd + 1 - _overlap; - _idxNext = _idxNext < 0 ? 0 : _idxNext; - _idxNext = _idxNext < size ? _idxNext : size-1; - - _idxPrevious = _idxStart - 1 + _overlap; - _idxPrevious = _idxPrevious < 0 ? 0 : _idxPrevious; - _idxPrevious = _idxPrevious < size ? _idxPrevious : size-1; -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::slice(Container &c){ - - if ( !_idxValid) - _updateIdx(); - - (void)c; - assert(false); //ToDo - - // extract waypoints - -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::next(Container &c){ - setStartIndex(_idxNext); - slice(c); -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::previous(Container &c){ - setStartIndex(_idxPrevious); - slice(c); -} - -template class Container /*e.g. QVector*/> -void GenericPathSlicer::reset(Container &c){ - setStartIndex(0); - slice(c); -} diff --git a/src/Wima/WaypointManager/GenericSlicer.cpp b/src/Wima/WaypointManager/GenericSlicer.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2131d73c98d1f00de5393f6d6f2c5392488f5ac1 --- /dev/null +++ b/src/Wima/WaypointManager/GenericSlicer.cpp @@ -0,0 +1 @@ +#include "GenericSlicer.h" diff --git a/src/Wima/WaypointManager/GenericSlicer.h b/src/Wima/WaypointManager/GenericSlicer.h new file mode 100644 index 0000000000000000000000000000000000000000..ce5930e4fe97fcb75d6c36c857b127ad9b0892d2 --- /dev/null +++ b/src/Wima/WaypointManager/GenericSlicer.h @@ -0,0 +1,164 @@ +#pragma once + +#include +#include + +#include "utils.h" + +//! @brief Base class for all waypoint managers. +template class Container /*e.g. QVector*/> +class GenericSlicer +{ +public: + typedef Container ContainerType; + GenericSlicer(); + + + // Slicing. + void slice (const ContainerType &source, ContainerType &slice); + void next (const ContainerType &source, ContainerType &slice); + void previous (const ContainerType &source, ContainerType &slice); + void reset (const ContainerType &source, ContainerType &slice); + + + // Slicing parameters. + //! @brief Sets the overlap. + //! + //! @param overlap The number of overlapping vertices + //! between on and the next slice. + void setOverlap (uint32_t overlap); + //! @brief Sets the number of vertices per slice. + //! + //! @param N The number of vertices per slice. + void setN (std::uint32_t N); + //! @brief Sets the start index. + //! + //! @param idxStart The start index. + void setStartIndex (int idxStart); + + //! @return Returns the overlap. + uint32_t overlap (); + //! @return Returns the number of vertices per slice N. + uint32_t N (); + //! @return Returns the start index. + int startIndex (); + + +private: + void _updateIdx(std::size_t size); + + long _idxStart; + long _idxEnd; + long _idxNext; + long _idxPrevious; + uint32_t _overlap; + uint32_t _N; + bool _idxValid; + bool _atEnd; + + +}; + + +template class Container /*e.g. QVector*/> +GenericSlicer::GenericSlicer(): + _idxValid(false) + , _atEnd(false) +{} + +template class Container /*e.g. QVector*/> +void GenericSlicer::setOverlap(std::uint32_t overlap) +{ + _idxValid = false; + _overlap = overlap; +} + +template class Container /*e.g. QVector*/> +void GenericSlicer::setN(uint32_t N) +{ + _idxValid = false; + _N = N > 0 ? N : 1; +} + +template class Container /*e.g. QVector*/> +void GenericSlicer::setStartIndex(int idxStart) +{ + _idxValid = false; + _idxStart = idxStart; +} + +template class Container /*e.g. QVector*/> +uint32_t GenericSlicer::overlap() +{ + return _overlap; +} + +template class Container /*e.g. QVector*/> +uint32_t GenericSlicer::N() +{ + return _N; +} + +template class Container /*e.g. QVector*/> +int GenericSlicer::startIndex() +{ + return _idxStart; +} + + +template class Container /*e.g. QVector*/> +void GenericSlicer::_updateIdx(std::size_t size) +{ + _idxValid = true; + _atEnd = false; + if ( _idxStart >= size-1 ) { + _idxStart = size-1; + _idxEnd = _idxStart; + _idxNext = _idxStart; + _atEnd = true; + return; + } + + _idxStart < 0 ? 0 : _idxStart; + + _idxEnd = _idxStart + _N - 1; + _idxEnd = _idxEnd < size ? _idxEnd : size-1; + + _idxNext = _idxEnd + 1 - _overlap; + _idxNext = _idxNext < 0 ? 0 : _idxNext; + _idxNext = _idxNext < size ? _idxNext : size-1; + + _idxPrevious = _idxStart - 1 + _overlap; + _idxPrevious = _idxPrevious < 0 ? 0 : _idxPrevious; + _idxPrevious = _idxPrevious < size ? _idxPrevious : size-1; +} + +template class Container /*e.g. QVector*/> +void GenericSlicer::slice(const ContainerType &source, + Container &slice){ + + if ( !_idxValid) + _updateIdx(source.size()); + + WaypointManager::Utils::extract(source, slice, _idxStart, _idxEnd); + // extract waypoints + +} + +template class Container /*e.g. QVector*/> +void GenericSlicer::next(const ContainerType &source, Container &slice){ + setStartIndex(_idxNext); + slice(source, slice); +} + +template class Container /*e.g. QVector*/> +void GenericSlicer::previous(const ContainerType &source, Container &slice){ + setStartIndex(_idxPrevious); + slice(source, slice); +} + +template class Container /*e.g. QVector*/> +void GenericSlicer::reset(const ContainerType &source, Container &slice){ + setStartIndex(0); + slice(source, slice); +} diff --git a/src/Wima/WaypointManager/GenericWaypointManager.cpp b/src/Wima/WaypointManager/GenericWaypointManager.cpp index f5819b9ce12edb10cc4554f8ae22650af0670ba6..489faec251db3d143e031384b3f026b456bf2e54 100644 --- a/src/Wima/WaypointManager/GenericWaypointManager.cpp +++ b/src/Wima/WaypointManager/GenericWaypointManager.cpp @@ -1,6 +1 @@ #include "GenericWaypointManager.h" - -GenericWaypointManager::GenericWaypointManager() -{ - -} diff --git a/src/Wima/WaypointManager/GenericWaypointManager.h b/src/Wima/WaypointManager/GenericWaypointManager.h index 8ec74f3b8d6487964d45ff12190fbd0820a181ea..14cda453f880840d85e76b130e8ca4366a153248 100644 --- a/src/Wima/WaypointManager/GenericWaypointManager.h +++ b/src/Wima/WaypointManager/GenericWaypointManager.h @@ -1,8 +1,63 @@ #pragma once +#include +#include "GenericSlicer.h" +#include "Settings.h" + +namespace WaypointManager { + +template class ContainerType> class GenericWaypointManager { + typedef GenericSlicer Slicer; public: - GenericWaypointManager(); + typedef ContainerType WaypointList; + + GenericWaypointManager() = delete; + GenericWaypointManager(Slicer *slicer, Settings *settings); + + // Waypoint editing. + void setWaypoints(const WaypointList &waypoints); + void push_back (const WaypointType &wp); + void push_front (const WaypointType &wp); + void clear (); + void insert (int i, const ElementType &wp); + uint32_t size () const; + WaypointType &at (unsigned int i); + + + const ContainerType &getWaypoints () ; + const ContainerType &getSlcieaypoints () ; + const ContainerType &missionItems () ; + + void slice(); + void next(); + void previous(); + void reset(); + +private: + WaypointList _waypoints; + WaypointList _slice; + bool _sliceValid; + Slicer *_slicer; + Settings *_settings; + }; + + +template class ContainerType> +GenericWaypointManager::GenericWaypointManager( + Slicer *slicer, + Settings *Settings) : + _sliceValid(false) + , _slicer(slicer) + , _settings(_settings) +{} + + + +} // namespace WaypointManager + diff --git a/src/Wima/WaypointManager/Settings.cpp b/src/Wima/WaypointManager/Settings.cpp new file mode 100644 index 0000000000000000000000000000000000000000..73916727690676c11ddcd6e649e15930b9733600 --- /dev/null +++ b/src/Wima/WaypointManager/Settings.cpp @@ -0,0 +1 @@ +#include "Settings.h" diff --git a/src/Wima/WaypointManager/Settings.h b/src/Wima/WaypointManager/Settings.h new file mode 100644 index 0000000000000000000000000000000000000000..c971917060532acdf8f988dafb9c5732bef7b78c --- /dev/null +++ b/src/Wima/WaypointManager/Settings.h @@ -0,0 +1,11 @@ +#pragma once + +namespace WaypointManager { + +class Settings +{ +public: + Settings(); +}; + +} // namespace WaypointManager diff --git a/src/Wima/WaypointManager/utils.cpp b/src/Wima/WaypointManager/utils.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0831f81f95ea01fbd17cb8a83291956e24a6023c --- /dev/null +++ b/src/Wima/WaypointManager/utils.cpp @@ -0,0 +1,8 @@ +#include "utils.h" + + +template<> +QVariant getCoordinate(const SimpleMissionItem* item) +{ + return QVariant::fromValue(item->coordinate()); +} diff --git a/src/Wima/WaypointManager/utils.h b/src/Wima/WaypointManager/utils.h new file mode 100644 index 0000000000000000000000000000000000000000..e94cda664511521fbf8ac8ad59dc2684377ff6a5 --- /dev/null +++ b/src/Wima/WaypointManager/utils.h @@ -0,0 +1,103 @@ +#pragma once + +namespace WaypointManager { +namespace Utils { + + +template +CoordinateType getCoordinate(const SimpleMissionItem* item){ + return item->coordinate(); +} + +template<> +QVariant getCoordinate(const SimpleMissionItem* item); + + +/// extracts the coordinates stored in missionItems (list of MissionItems) and stores them in coordinateList. +template class ContainerType> +bool extract(QmlObjectListModel &missionItems, + ContainerType &coordinateList, + std::size_t startIndex, + std::size_t endIndex) +{ + + if ( startIndex < std::size_t(missionItems.count()) + && endIndex < std::size_t(missionItems.count()) + && missionItems.count() > 0) { + if (startIndex > endIndex) { + if ( !extract(missionItems, + coordinateList, + startIndex, + std::size_t(missionItems.count()-1)) /*recursion*/) + return false; + if ( !extract(missionItems, + coordinateList, + 0, + endIndex) /*recursion*/) + return false; + } else { + for (std::size_t i = startIndex; i <= endIndex; ++i) { + SimpleMissionItem *mItem = missionItems.value(int(i)); + + if (mItem == nullptr) { + coordinateList.clear(); + return false; + } + coordinateList.append(getCoordinate(mItem)); + } + } + } else + return false; + + return true; +} + +/// extracts the coordinates stored in missionItems (list of MissionItems) and stores them in coordinateList. +template class ContainerType> +bool extract(QmlObjectListModel &missionItems, + ContainerType &coordinateList) +{ + + return extract(missionItems, + coordinateList, + std::size_t(0), + std::size_t(missionItems.count()) + ); +} + + +/// extracts the coordinates stored in missionItems (list of MissionItems) and stores them in coordinateList. +template class ContainerType> +bool extract(ContainerType &source, + ContainerType &destination, + std::size_t startIndex, + std::size_t endIndex) +{ + + if ( startIndex < std::size_t(source.size()) + && endIndex < std::size_t(source.size()) + && source.size() > 0) { + if (startIndex > endIndex) { + if ( !extract(source, + destination, + startIndex, + std::size_t(source.size()-1)) /*recursion*/) + return false; + if ( !extract(source, + destination, + 0, + endIndex) /*recursion*/) + return false; + } else { + for (std::size_t i = startIndex; i <= endIndex; ++i) { + destination.append(source[i]); + } + } + } else + return false; + + return true; +} + +} // namespace WaypointManager +} // namespace WaypointManager diff --git a/src/Wima/WimaController.cc b/src/Wima/WimaController.cc index f0735756145ca70486c6b191b6078fdb27d72698..4a20e7d7a4e70aee60e8bf18a87f1604fa9220b5 100644 --- a/src/Wima/WimaController.cc +++ b/src/Wima/WimaController.cc @@ -111,6 +111,18 @@ WimaController::WimaController(QObject *parent) _startStopRosBridge(); } +PlanMasterController *WimaController::masterController() { + return _masterController; +} + +MissionController *WimaController::missionController() { + return _missionController; +} + +QmlObjectListModel *WimaController::visualItems() { + return &_visualItems; +} + QVariantList WimaController::waypointPath() const { QVariantList list; diff --git a/src/Wima/WimaController.h b/src/Wima/WimaController.h index 54b1ec832e02dc6387cd8f0b63757e2a8fcf0dce..d8dc0693f335508864a4767c9a209c60c6af59d9 100644 --- a/src/Wima/WimaController.h +++ b/src/Wima/WimaController.h @@ -62,52 +62,154 @@ public: WimaController(QObject *parent = nullptr); - Q_PROPERTY(PlanMasterController* masterController READ masterController WRITE setMasterController NOTIFY masterControllerChanged) - Q_PROPERTY(MissionController* missionController READ missionController WRITE setMissionController NOTIFY missionControllerChanged) - Q_PROPERTY(QmlObjectListModel* visualItems READ visualItems NOTIFY visualItemsChanged) + Q_PROPERTY(PlanMasterController* masterController + READ masterController + WRITE setMasterController + NOTIFY masterControllerChanged + ) + Q_PROPERTY(MissionController* missionController + READ missionController + WRITE setMissionController + NOTIFY missionControllerChanged + ) + Q_PROPERTY(QmlObjectListModel* visualItems + READ visualItems + NOTIFY visualItemsChanged + ) // Q_PROPERTY(QString currentFile READ currentFile NOTIFY currentFileChanged) // Q_PROPERTY(QStringList loadNameFilters READ loadNameFilters CONSTANT) // Q_PROPERTY(QStringList saveNameFilters READ saveNameFilters CONSTANT) // Q_PROPERTY(QString fileExtension READ fileExtension CONSTANT) - Q_PROPERTY(WimaDataContainer* dataContainer READ dataContainer WRITE setDataContainer NOTIFY dataContainerChanged) - Q_PROPERTY(QmlObjectListModel* missionItems READ missionItems NOTIFY missionItemsChanged) - Q_PROPERTY(QmlObjectListModel* currentMissionItems READ currentMissionItems NOTIFY currentMissionItemsChanged) - Q_PROPERTY(QVariantList waypointPath READ waypointPath NOTIFY waypointPathChanged) - Q_PROPERTY(QVariantList currentWaypointPath READ currentWaypointPath NOTIFY currentWaypointPathChanged) - Q_PROPERTY(Fact* enableWimaController READ enableWimaController CONSTANT) - Q_PROPERTY(Fact* overlapWaypoints READ overlapWaypoints CONSTANT) - Q_PROPERTY(Fact* maxWaypointsPerPhase READ maxWaypointsPerPhase CONSTANT) - Q_PROPERTY(Fact* startWaypointIndex READ startWaypointIndex CONSTANT) - Q_PROPERTY(Fact* showAllMissionItems READ showAllMissionItems CONSTANT) - Q_PROPERTY(Fact* showCurrentMissionItems READ showCurrentMissionItems CONSTANT) - Q_PROPERTY(Fact* flightSpeed READ flightSpeed CONSTANT) - Q_PROPERTY(Fact* altitude READ altitude CONSTANT) - Q_PROPERTY(Fact* arrivalReturnSpeed READ arrivalReturnSpeed CONSTANT) - Q_PROPERTY(Fact* reverse READ reverse CONSTANT) - Q_PROPERTY(bool uploadOverrideRequired READ uploadOverrideRequired WRITE setUploadOverrideRequired NOTIFY uploadOverrideRequiredChanged) - Q_PROPERTY(double phaseDistance READ phaseDistance NOTIFY phaseDistanceChanged) - Q_PROPERTY(double phaseDuration READ phaseDuration NOTIFY phaseDurationChanged) - Q_PROPERTY(bool vehicleHasLowBattery READ vehicleHasLowBattery NOTIFY vehicleHasLowBatteryChanged) + Q_PROPERTY(WimaDataContainer* dataContainer + READ dataContainer + WRITE setDataContainer + NOTIFY dataContainerChanged + ) + Q_PROPERTY(QmlObjectListModel* missionItems + READ missionItems + NOTIFY missionItemsChanged + ) + Q_PROPERTY(QmlObjectListModel* currentMissionItems + READ currentMissionItems + NOTIFY currentMissionItemsChanged + ) + Q_PROPERTY(QVariantList waypointPath + READ waypointPath + NOTIFY waypointPathChanged + ) + Q_PROPERTY(QVariantList currentWaypointPath + READ currentWaypointPath + NOTIFY currentWaypointPathChanged + ) + Q_PROPERTY(Fact* enableWimaController + READ enableWimaController + CONSTANT) + Q_PROPERTY(Fact* overlapWaypoints + READ overlapWaypoints + CONSTANT + ) + Q_PROPERTY(Fact* maxWaypointsPerPhase + READ maxWaypointsPerPhase + CONSTANT + ) + Q_PROPERTY(Fact* startWaypointIndex + READ startWaypointIndex + CONSTANT + ) + Q_PROPERTY(Fact* showAllMissionItems + READ showAllMissionItems + CONSTANT + ) + Q_PROPERTY(Fact* showCurrentMissionItems + READ showCurrentMissionItems + CONSTANT + ) + Q_PROPERTY(Fact* flightSpeed + READ flightSpeed + CONSTANT + ) + Q_PROPERTY(Fact* altitude + READ altitude + CONSTANT + ) + Q_PROPERTY(Fact* arrivalReturnSpeed + READ arrivalReturnSpeed + CONSTANT + ) + Q_PROPERTY(Fact* reverse + READ reverse + CONSTANT + ) + Q_PROPERTY(bool uploadOverrideRequired + READ uploadOverrideRequired + WRITE setUploadOverrideRequired + NOTIFY uploadOverrideRequiredChanged + ) + Q_PROPERTY(double phaseDistance + READ phaseDistance + NOTIFY phaseDistanceChanged + ) + Q_PROPERTY(double phaseDuration + READ phaseDuration + NOTIFY phaseDurationChanged + ) + Q_PROPERTY(bool vehicleHasLowBattery + READ vehicleHasLowBattery + NOTIFY vehicleHasLowBatteryChanged + ) // Snake - Q_PROPERTY(Fact* enableSnake READ enableSnake CONSTANT) - Q_PROPERTY(long snakeConnectionStatus READ snakeConnectionStatus NOTIFY snakeConnectionStatusChanged) - Q_PROPERTY(bool snakeCalcInProgress READ snakeCalcInProgress NOTIFY snakeCalcInProgressChanged) - Q_PROPERTY(Fact* snakeTileWidth READ snakeTileWidth CONSTANT) - Q_PROPERTY(Fact* snakeTileHeight READ snakeTileHeight CONSTANT) - Q_PROPERTY(Fact* snakeMinTileArea READ snakeMinTileArea CONSTANT) - Q_PROPERTY(Fact* snakeLineDistance READ snakeLineDistance CONSTANT) - Q_PROPERTY(Fact* snakeMinTransectLength READ snakeMinTransectLength CONSTANT) - Q_PROPERTY(QmlObjectListModel* snakeTiles READ snakeTiles NOTIFY snakeTilesChanged) - Q_PROPERTY(QVariantList snakeTileCenterPoints READ snakeTileCenterPoints NOTIFY snakeTileCenterPointsChanged) - Q_PROPERTY(QVector nemoProgress READ nemoProgress NOTIFY nemoProgressChanged) + Q_PROPERTY(Fact* enableSnake + READ enableSnake + CONSTANT + ) + Q_PROPERTY(long snakeConnectionStatus + READ snakeConnectionStatus + NOTIFY snakeConnectionStatusChanged + ) + Q_PROPERTY(bool snakeCalcInProgress + READ snakeCalcInProgress + NOTIFY snakeCalcInProgressChanged + ) + Q_PROPERTY(Fact* snakeTileWidth + READ snakeTileWidth + CONSTANT + ) + Q_PROPERTY(Fact* snakeTileHeight + READ snakeTileHeight + CONSTANT + ) + Q_PROPERTY(Fact* snakeMinTileArea + READ snakeMinTileArea + CONSTANT + ) + Q_PROPERTY(Fact* snakeLineDistance + READ snakeLineDistance + CONSTANT + ) + Q_PROPERTY(Fact* snakeMinTransectLength + READ snakeMinTransectLength + CONSTANT + ) + Q_PROPERTY(QmlObjectListModel* snakeTiles + READ snakeTiles + NOTIFY snakeTilesChanged + ) + Q_PROPERTY(QVariantList snakeTileCenterPoints + READ snakeTileCenterPoints + NOTIFY snakeTileCenterPointsChanged + ) + Q_PROPERTY(QVector nemoProgress + READ nemoProgress + NOTIFY nemoProgressChanged + ) // Property accessors - PlanMasterController* masterController (void) { return _masterController; } - MissionController* missionController (void) { return _missionController; } - QmlObjectListModel* visualItems (void) { return &_visualItems; } + PlanMasterController* masterController (void); + MissionController* missionController (void); + QmlObjectListModel* visualItems (void); // QString currentFile (void) const { return _currentFile; } // QStringList loadNameFilters (void) const; // QStringList saveNameFilters (void) const;