Newer
Older
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)
Valentin Platzgummer
committed
, _measurementArea (this)
, _serviceArea (this)
Valentin Platzgummer
committed
, _localPlanDataValid (false)
Valentin Platzgummer
committed
QmlObjectListModel* WimaController::visualItems()
{
}
QStringList WimaController::loadNameFilters() const
{
QStringList filters;
filters << tr("Supported types (*.%1 *.%2)").arg(wimaFileExtension).arg(AppSettings::planFileExtension) <<
}
QStringList WimaController::saveNameFilters() const
{
QStringList filters;
filters << tr("Supported types (*.%1 *.%2)").arg(wimaFileExtension).arg(AppSettings::planFileExtension);
return filters;
WimaDataContainer *WimaController::dataContainer()
{
Valentin Platzgummer
committed
return _container;
}
QmlObjectListModel *WimaController::missionItems()
{
return &_missionItems;
}
QVariantList WimaController::waypointPath()
{
return _waypointPath;
}
void WimaController::setMasterController(PlanMasterController *masterC)
{
_masterController = masterC;
emit masterControllerChanged();
}
void WimaController::setMissionController(MissionController *missionC)
{
_missionController = missionC;
emit missionControllerChanged();
}
Valentin Platzgummer
committed
/*!
* \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)
{
Valentin Platzgummer
committed
if (container != nullptr) {
if (_container != nullptr) {
disconnect(_container, &WimaDataContainer::dataValidChanged, this, &WimaController::containerDataValidChanged);
}
Valentin Platzgummer
committed
connect(_container, &WimaDataContainer::dataValidChanged, this, &WimaController::containerDataValidChanged);
emit dataContainerChanged();
}
}
void WimaController::startMission()
{
}
void WimaController::abortMission()
{
}
void WimaController::pauseMission()
{
}
void WimaController::resumeMission()
{
}
bool WimaController::updateMission()
{
Valentin Platzgummer
committed
return true;
void WimaController::saveToFile(const QString& filename)
{
}
bool WimaController::loadFromFile(const QString &filename)
{
QJsonDocument WimaController::saveToJson(FileType fileType)
Valentin Platzgummer
committed
return QJsonDocument();
Valentin Platzgummer
committed
/*!
* \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)
Valentin Platzgummer
committed
if ( valid ) {
if (_container == nullptr) {
qWarning("WimaController::containerDataValidChanged(): No container assigned!");
}
_localPlanDataValid = false;
_visualItems.clear();
Valentin Platzgummer
committed
WimaPlanData planData = _container->pull();
// extract list with WimaAreas
QList<const WimaAreaData*> areaList = planData.areaList();
int areaCounter = 0;
int numAreas = 4; // extract only numAreas Areas, if there are more they are invalid and ignored
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<const WimaServiceAreaData*>(areaData);
Valentin Platzgummer
committed
areaCounter++;
_visualItems.append(&_serviceArea);
Valentin Platzgummer
committed
continue;
}
if (areaData->type() == WimaMeasurementAreaData::typeString) { // is it a measurement area?
_measurementArea = *qobject_cast<const WimaMeasurementAreaData*>(areaData);
Valentin Platzgummer
committed
areaCounter++;
_visualItems.append(&_measurementArea);
Valentin Platzgummer
committed
continue;
}
if (areaData->type() == WimaCorridorData::typeString) { // is it a corridor?
_corridor = *qobject_cast<const WimaCorridorData*>(areaData);
Valentin Platzgummer
committed
areaCounter++;
//_visualItems.append(&_corridor); // not needed
Valentin Platzgummer
committed
continue;
}
if (areaData->type() == WimaJoinedAreaData::typeString) { // is it a corridor?
_joinedArea = *qobject_cast<const WimaJoinedAreaData*>(areaData);
Valentin Platzgummer
committed
areaCounter++;
_visualItems.append(&_joinedArea);
Valentin Platzgummer
committed
continue;
Valentin Platzgummer
committed
if (areaCounter >= numAreas)
break;
}
#ifdef QT_DEBUG
//qWarning("containerDataValidChanged(): count:");
//qWarning() << planData.missionItems().count();
#endif
QList<const MissionItem*> tempMissionItems = planData.missionItems();
_missionController->removeAll();
QmlObjectListModel* missionControllerVisualItems = _missionController->visualItems();
for ( auto missionItem : tempMissionItems) {
_missionController->insertSimpleMissionItem(*missionItem, missionControllerVisualItems->count());
MissionSettingsItem *settingsItem = qobject_cast<MissionSettingsItem *>((*missionControllerVisualItems)[0]);
if (settingsItem == nullptr) {
qWarning("WimaController::containerDataValidChanged(): Nullptr at MissionSettingsItem!");
return;
}
//_missionItems.append(settingsItem);
for ( int i = 1; i < missionControllerVisualItems->count(); i++) {
SimpleMissionItem *visualItem = qobject_cast<SimpleMissionItem *>((*missionControllerVisualItems)[i]);
if (visualItem == nullptr) {
qWarning("WimaController::containerDataValidChanged(): Nullptr at SimpleMissionItem!");
return;
}
SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this);
_missionItems.append(visualItemCopy);
}
if (areaCounter == numAreas)
_localPlanDataValid = true;
Valentin Platzgummer
committed
} else {
_localPlanDataValid = false;
_visualItems.clear();
_missionItems.clear();
#ifdef QT_DEBUG
//qWarning("Mission Items count: ");
//qWarning() << _missionItems.count();
#endif
void WimaController::updateWaypointPath()
{
_waypointPath.clear();
for ( int i = 1; i < _missionItems.count(); i++) {
SimpleMissionItem *item = qobject_cast<SimpleMissionItem *>(_missionItems[i]);
if (item == nullptr) {
qWarning("WimaController::updateWaypointPath(): nullptr");
return;
}
_waypointPath.append(QVariant::fromValue(item->coordinate()));
}
emit waypointPathChanged();
}