#pragma once #include #include "Slicer.h" namespace WaypointManager { template class ContainerType, class MissionItemList, class SettingsType> class GenericWaypointManager : public Slicer { public: typedef ContainerType WaypointList; GenericWaypointManager() = delete; GenericWaypointManager(SettingsType &settings); // Waypoint editing. void setWaypoints(const WaypointList &waypoints); void push_back (const WaypointType &wp); void push_front (const WaypointType &wp); virtual void clear (); void insert (std::size_t i, const WaypointType &wp); std::size_t size () const; WaypointType &at (std::size_t i); const WaypointList &waypoints() const; const WaypointList ¤tWaypoints() const; const MissionItemList &missionItems() const; const MissionItemList ¤tMissionItems() const; const QVariantList &waypointsVariant() const; const QVariantList ¤tWaypointsVariant() const; virtual bool update() = 0; virtual bool next() = 0; virtual bool previous() = 0; virtual bool reset() = 0; protected: WaypointList _waypoints; WaypointList _currentWaypoints; MissionItemList _currentMissionItems; MissionItemList _missionItems; SettingsType *_settings; bool _dirty; QVariantList _waypointsVariant; QVariantList _currentWaypointsVariant; }; template class ContainerType, class MissionItemList, class SettingsType> GenericWaypointManager::GenericWaypointManager(SettingsType &settings) : Slicer() , _settings(&settings) , _dirty(true) {} template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::push_back(const WaypointType &wp) { _dirty = true; _waypoints.push_back(wp); } template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::push_front( const WaypointType &wp) { _dirty = true; _waypoints.push_front(wp); } template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::clear() { _dirty = true; _waypoints.clear(); _currentWaypoints.clear(); _missionItems.clear(); _currentMissionItems.clear(); _waypointsVariant.clear(); _currentWaypointsVariant.clear(); } template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::insert(std::size_t i, const WaypointType &wp) { _dirty = true; _waypoints.insert(i, wp); } template class ContainerType, class MissionItemList, class SettingsType> std::size_t GenericWaypointManager::size() const { return _waypoints.size(); } template class ContainerType, class MissionItemList, class SettingsType> WaypointType & GenericWaypointManager::at(std::size_t i) { return _waypoints.at(i); } template class ContainerType, class MissionItemList, class SettingsType> const QVariantList &GenericWaypointManager::waypointsVariant() const { return _waypointsVariant; } template class ContainerType, class MissionItemList, class SettingsType> const QVariantList &GenericWaypointManager::currentWaypointsVariant() const { return _currentWaypointsVariant; } template class ContainerType, class MissionItemList, class SettingsType> const ContainerType &GenericWaypointManager::waypoints() const { return _waypoints; } template class ContainerType, class MissionItemList, class SettingsType> const ContainerType &GenericWaypointManager::currentWaypoints() const { return _currentWaypoints; } template class ContainerType, class MissionItemList, class SettingsType> const MissionItemList &GenericWaypointManager::missionItems() const { return _missionItems; } template class ContainerType, class MissionItemList, class SettingsType> const MissionItemList &GenericWaypointManager::currentMissionItems() const { return _currentMissionItems; } template class ContainerType, class MissionItemList, class SettingsType> void GenericWaypointManager::setWaypoints(const ContainerType &waypoints) { _waypoints = waypoints; } } // namespace WaypointManager