Commit c8c80fb1 authored by Valentin Platzgummer's avatar Valentin Platzgummer

insertSimpleMissionItem(const QList<const MissionItem *> &, int) and...

insertSimpleMissionItem(const QList<const MissionItem *> &, int) and _initVisualItem(VisualMissionItem*, bool) added to MissionController
parent 5a8dce08
This diff is collapsed.
......@@ -409,6 +409,35 @@ int MissionController::insertSimpleMissionItem(const MissionItem &missionItem, i
return newItem->sequenceNumber();
}
int MissionController::insertSimpleMissionItem(const QList<const MissionItem *> &missionItems, int index)
{
SimpleMissionItem *newItem = nullptr;
for (int i = 0; i < missionItems.size(); ++i) {
MissionItem missionItem = *missionItems[i];
newItem = new SimpleMissionItem(_controllerVehicle, _flyView, missionItem, this);
newItem->setSequenceNumber(_nextSequenceNumber());
_initVisualItem(newItem, false /* doResetDirty */);
MAV_CMD takeoffCmd = _controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_TAKEOFF : MAV_CMD_NAV_TAKEOFF;
if (newItem->command() == takeoffCmd) {
if (!_controllerVehicle->firmwarePlugin()->supportedMissionCommands().contains(takeoffCmd)) {
newItem->setCommand(MAV_CMD_NAV_WAYPOINT);
return -1; // can not add this takeoff command for this vehicle
}
}
if (newItem->specifiesAltitude()) {
newItem->altitude()->setRawValue(missionItem.relativeAltitude());
newItem->setAltitudeMode(QGroundControlQmlGlobal::AltitudeMode::AltitudeModeRelative);
}
newItem->setMissionFlightStatus(_missionFlightStatus);
_visualItems->insert(index + i, newItem);
}
setDirty(false); // must be called, since _initVisualItem(newItem, false /* doResetDirty */) was used
return (newItem != nullptr) ? newItem->sequenceNumber(): -1;
}
int MissionController::insertSimpleMissionItem(SimpleMissionItem &missionItem, int i)
{
int sequenceNumber = _nextSequenceNumber();
......@@ -1721,7 +1750,14 @@ void MissionController::_deinitAllVisualItems(void)
void MissionController::_initVisualItem(VisualMissionItem* visualItem)
{
setDirty(false);
_initVisualItem(visualItem, true);
}
void MissionController::_initVisualItem(VisualMissionItem *visualItem, bool doResetDirty)
{
if (doResetDirty)
setDirty(false); // this is to expensive if called on many visualItems in a row (call setDirty(false) after last _initVisualItem)
connect(visualItem, &VisualMissionItem::specifiesCoordinateChanged, this, &MissionController::_recalcWaypointLines);
connect(visualItem, &VisualMissionItem::coordinateHasRelativeAltitudeChanged, this, &MissionController::_recalcWaypointLines);
......
......@@ -114,6 +114,11 @@ public:
/// @return Sequence number for new item
int insertSimpleMissionItem(const MissionItem &missionItem, int i);
/// Add a list of simple mission items to the list
/// @param i: index to insert at
/// @return Sequence number for new item
int insertSimpleMissionItem(const QList<const MissionItem *> &missionItems, int index);
/// Add a new simple mission item to the list
/// @param i: index to insert at
/// @return Sequence number for new item
......@@ -275,6 +280,7 @@ private:
void _initAllVisualItems(void);
void _deinitAllVisualItems(void);
void _initVisualItem(VisualMissionItem* item);
void _initVisualItem(VisualMissionItem* item, bool doResetDirty);
void _deinitVisualItem(VisualMissionItem* item);
void _setupActiveVehicle(Vehicle* activeVehicle, bool forceLoadFromVehicle);
void _calcPrevWaypointValues(double homeAlt, VisualMissionItem* currentItem, VisualMissionItem* prevItem, double* azimuth, double* distance, double* altDifference);
......
......@@ -473,6 +473,7 @@ bool WimaController::fetchContainerData()
_localPlanDataValid = false;
// fetch data from container
QSharedPointer<const WimaPlanData> planData;
if (_container != nullptr) {
planData = _container->pull();
......@@ -540,9 +541,11 @@ bool WimaController::fetchContainerData()
QmlObjectListModel* missionControllerVisualItems = _missionController->visualItems();
// create SimpleMissionItem by using _missionController
for ( int i = 0; i < tempMissionItems.size(); i++) {
_missionController->insertSimpleMissionItem(*tempMissionItems[i], missionControllerVisualItems->count());
}
QList<const MissionItem*> missionItems;
missionItems.reserve(tempMissionItems.size());
for (auto item : tempMissionItems)
missionItems.append(item.data());
_missionController->insertSimpleMissionItem(missionItems, missionControllerVisualItems->count());
// copy mission items from _missionController to _missionItems
for ( int i = 1; i < missionControllerVisualItems->count(); i++) {
SimpleMissionItem *visualItem = qobject_cast<SimpleMissionItem *>((*missionControllerVisualItems)[i]);
......@@ -586,8 +589,6 @@ bool WimaController::calcNextPhase()
_currentMissionItems.clearAndDeleteContents();
_currentWaypointPath.clear();
emit currentMissionItemsChanged();
emit currentWaypointPathChanged();
bool reverse = _reverse.rawValue().toBool(); // Reverses the phase direction. Phases go from high to low waypoint numbers, if true.
int startIndex = _nextPhaseStartWaypointIndex.rawValue().toInt()-1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment