#include "WimaController.h" const char* WimaController::wimaFileExtension = "wima"; const char* WimaController::areaItemsName = "AreaItems"; const char* WimaController::missionItemsName = "MissionItems"; WimaController::WimaController(QObject *parent) : QObject (parent) , _container (nullptr) , _joinedArea (this) , _measurementArea (this) , _serviceArea (this) , _corridor (this) , _localPlanDataValid (false) { } QmlObjectListModel* WimaController::visualItems() { return &_visualItems; } QStringList WimaController::loadNameFilters() const { QStringList filters; filters << tr("Supported types (*.%1 *.%2)").arg(wimaFileExtension).arg(AppSettings::planFileExtension) << tr("All Files (*.*)"); return filters; } QStringList WimaController::saveNameFilters() const { QStringList filters; filters << tr("Supported types (*.%1 *.%2)").arg(wimaFileExtension).arg(AppSettings::planFileExtension); return filters; } WimaDataContainer *WimaController::dataContainer() const { return _container; } void WimaController::setMasterController(PlanMasterController *masterC) { _masterController = masterC; emit masterControllerChanged(); } void WimaController::setMissionController(MissionController *missionC) { _missionController = missionC; emit missionControllerChanged(); } /*! * \fn void WimaController::setDataContainer(WimaDataContainer *container) * Sets the pointer to the \c WimaDataContainer, which is meant to exchange data between the \c WimaController and the \c WimaPlaner. * * \sa WimaPlaner, WimaDataContainer, WimaPlanData */ void WimaController::setDataContainer(WimaDataContainer *container) { if (container != nullptr) { if (_container != nullptr) { disconnect(_container, &WimaDataContainer::dataValidChanged, this, &WimaController::containerDataValidChanged); } _container = container; connect(_container, &WimaDataContainer::dataValidChanged, this, &WimaController::containerDataValidChanged); emit dataContainerChanged(); } } void WimaController::startMission() { } void WimaController::abortMission() { } void WimaController::pauseMission() { } void WimaController::resumeMission() { } bool WimaController::updateMission() { return true; } void WimaController::saveToCurrent() { } void WimaController::saveToFile(const QString& filename) { } bool WimaController::loadFromCurrent() { return true; } bool WimaController::loadFromFile(const QString &filename) { return true; } QJsonDocument WimaController::saveToJson(FileType fileType) { return QJsonDocument(); } /*! * \fn void WimaController::containerDataValidChanged(bool valid) * Pulls plan data generated by \c WimaPlaner from the \c _container if the data is valid (\a valid equals true). * Is connected to the dataValidChanged() signal of the \c WimaDataContainer. * * \sa WimaDataContainer, WimaPlaner, WimaPlanData */ void WimaController::containerDataValidChanged(bool valid) { if ( valid ) { if (_container == nullptr) { qWarning("WimaController::containerDataValidChanged(): No container assigned!"); } _localPlanDataValid = false; WimaPlanData planData = _container->pull(); // extract list with WimaAreas QList areaList = planData.areaList(); int areaCounter = 0; int numAreas = 4; // extract only numAreas Areas, if there are more they are invalid and ignored bool joinedAreaAssigned = false; for (int i = 0; i < areaList.size(); i++) { const WimaAreaData *areaData = areaList[i]; if (areaData->type() == WimaServiceAreaData::typeString) { // is it a service area? _serviceArea = *qobject_cast(areaData); qWarning("Service area, wuhuuu!"); areaCounter++; continue; } WimaMeasurementAreaData *measurementAreaData = qobject_cast(areaData); if (measurementAreaData != nullptr) { // is it a measurement area? _measurementArea = *measurementAreaData; qWarning("Measurement area, wuhuuu!"); areaCounter++; continue; } WimaCorridorData *corridorAreaData = qobject_cast(areaData); if (corridorAreaData != nullptr) { // is it a corridor? _corridor = *corridorAreaData; qWarning("Corridor, wuhuuu!"); areaCounter++; continue; } if (!joinedAreaAssigned) { // first WimaAreaData object is assumed to be the joined Area _joinedArea = *areaData; qWarning("Joined area, wuhuuu!"); areaCounter++; joinedAreaAssigned = true; continue; } if (areaCounter >= numAreas) break; } // append areas to _visualItems, don't append _corridor, it's not necessary to display it in flyView _visualItems.clear(); //_visualItems.append(&_measurementArea); //_visualItems.append(&_serviceArea); _visualItems.append(&_joinedArea); emit visualItemsChanged(); _localPlanDataValid = true; } else { _localPlanDataValid = false; _visualItems.clear(); emit visualItemsChanged(); } }