WimaController.cc 5.98 KB
Newer Older
Valentin Platzgummer's avatar
Valentin Platzgummer committed
1
#include "WimaController.h"
2

3 4 5
const char* WimaController::wimaFileExtension   = "wima";
const char* WimaController::areaItemsName       = "AreaItems";
const char* WimaController::missionItemsName    = "MissionItems";
6

7 8 9 10
WimaController::WimaController(QObject *parent)
    : QObject               (parent)
    , _container            (nullptr)
    , _joinedArea           (this)
11 12
    , _measurementArea      (this)
    , _serviceArea          (this)
13
    , _corridor             (this)
14
    , _localPlanDataValid   (false)
15
{
16

17 18
}

19
QmlObjectListModel* WimaController::visualItems()
20
{
21
    return &_visualItems;
22 23
}

Valentin Platzgummer's avatar
Valentin Platzgummer committed
24 25 26 27
QStringList WimaController::loadNameFilters() const
{
    QStringList filters;

28
    filters << tr("Supported types (*.%1 *.%2)").arg(wimaFileExtension).arg(AppSettings::planFileExtension) <<
Valentin Platzgummer's avatar
Valentin Platzgummer committed
29 30
               tr("All Files (*.*)");
    return filters;
31 32 33 34 35
}

QStringList WimaController::saveNameFilters() const
{
    QStringList filters;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
36

37 38
    filters << tr("Supported types (*.%1 *.%2)").arg(wimaFileExtension).arg(AppSettings::planFileExtension);
    return filters;
Valentin Platzgummer's avatar
Valentin Platzgummer committed
39 40
}

41
WimaDataContainer *WimaController::dataContainer() const
42
{
43
    return _container;
44 45
}

46 47 48 49 50
QmlObjectListModel *WimaController::missionItems()
{
    return &_missionItems;
}

51 52 53 54 55 56 57 58 59 60 61 62
void WimaController::setMasterController(PlanMasterController *masterC)
{
    _masterController = masterC;
    emit masterControllerChanged();
}

void WimaController::setMissionController(MissionController *missionC)
{
    _missionController = missionC;
    emit missionControllerChanged();
}

63 64 65 66 67 68
/*!
 * \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
 */
69 70
void WimaController::setDataContainer(WimaDataContainer *container)
{
71 72 73 74 75
    if (container != nullptr) {
        if (_container != nullptr) {
           disconnect(_container, &WimaDataContainer::dataValidChanged, this, &WimaController::containerDataValidChanged);
        }

76
        _container = container;
77
        connect(_container, &WimaDataContainer::dataValidChanged, this, &WimaController::containerDataValidChanged);
78 79 80 81 82

        emit dataContainerChanged();
    }
}

83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
void WimaController::startMission()
{

}

void WimaController::abortMission()
{

}

void WimaController::pauseMission()
{

}

void WimaController::resumeMission()
{

}

103 104
bool WimaController::updateMission()
{
105
    return true;
106 107
}

108
void WimaController::saveToCurrent()
109 110 111
{
}

112 113
void WimaController::saveToFile(const QString& filename)
{
114
    QString file = filename;
115 116
}

117
bool WimaController::loadFromCurrent()
118
{
119
    return true;
120 121 122 123
}

bool WimaController::loadFromFile(const QString &filename)
{
124
    QString file = filename;
125
    return true;
126 127 128
}


129

130
QJsonDocument WimaController::saveToJson(FileType fileType)
131
{
132 133 134 135
    if(fileType)
    {

    }
136
    return QJsonDocument();
137 138
}

139 140 141 142 143 144 145 146
/*!
 * \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)
147
{
148 149 150 151 152
    if ( valid ) {
        if (_container == nullptr) {
            qWarning("WimaController::containerDataValidChanged(): No container assigned!");
        }
        _localPlanDataValid = false;
153
        _visualItems.clear();
154
        _missionItems.clear();
155 156 157 158 159 160 161
        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
162
        qWarning() << QString("List Size: %1").arg(areaList.size());
163 164 165
        for (int i = 0; i < areaList.size(); i++) {
            const WimaAreaData *areaData = areaList[i];

166
            qWarning() << areaData->type();
167
            if (areaData->type() == WimaServiceAreaData::typeString) { // is it a service area?
168
                _serviceArea = *qobject_cast<const WimaServiceAreaData*>(areaData);
169
//                qWarning("Service area, wuhuuu!");
170
                areaCounter++;
171
                _visualItems.append(&_serviceArea);
172 173 174 175

                continue;
            }

176 177
            if (areaData->type() == WimaMeasurementAreaData::typeString) { // is it a measurement area?
                _measurementArea =  *qobject_cast<const WimaMeasurementAreaData*>(areaData);
178
//                qWarning("Measurement area, wuhuuu!");
179
                areaCounter++;
180
                _visualItems.append(&_measurementArea);
181 182 183 184

                continue;
            }

185 186
            if (areaData->type() == WimaCorridorData::typeString) { // is it a corridor?
                _corridor =  *qobject_cast<const WimaCorridorData*>(areaData);
187
//                qWarning("WimaCorridorData, wuhuuu!");
188
                areaCounter++;
189
                //_visualItems.append(&_corridor); // not needed
190 191 192 193

                continue;
            }

194 195
            if (areaData->type() == WimaJoinedAreaData::typeString) { // is it a corridor?
                _joinedArea =  *qobject_cast<const WimaJoinedAreaData*>(areaData);
196
//                qWarning("WimaJoinedAreaData, wuhuuu!");
197
                areaCounter++;
198
                _visualItems.append(&_joinedArea);
199 200

                continue;
201
            }
202 203 204 205 206

            if (areaCounter >= numAreas)
                break;
        }

207 208 209 210 211
        QList<const MissionItem*> tempMissionItems = planData.missionItems();

        for (auto missionItem : tempMissionItems)
            _missionItems.append(const_cast<MissionItem *>(missionItem)); // losing const qualifier here

212 213
        if (areaCounter == numAreas)
            _localPlanDataValid = true;
214

215 216
    } else {
        _localPlanDataValid = false;
217 218
        _visualItems.clear();
        _missionItems.clear();
219
    }
220 221

    emit visualItemsChanged();
222
    emit missionItemsChanged();
223 224
}

225 226


227 228


229 230