int main(int argc, char **argv) { Args args(argc, argv, "TASKFILE REPLAYFILE"); const auto task_path = args.ExpectNextPath(); DebugReplay *replay = CreateDebugReplay(args); if (replay == NULL) return EXIT_FAILURE; args.ExpectEnd(); TaskBehaviour task_behaviour; task_behaviour.SetDefaults(); OrderedTask *task = TaskFile::GetTask(task_path, task_behaviour, NULL, 0); if (task == NULL) { fprintf(stderr, "Failed to load task\n"); return EXIT_FAILURE; } task->UpdateGeometry(); const GlidePolar glide_polar(1); Run(*replay, *task, glide_polar); delete task; delete replay; return EXIT_SUCCESS; }
void TaskEditPanel::OnMakeFinish() { ordered_task->UpdateStatsGeometry(); if (ordered_task->GetFactory().CheckAddFinish()) ordered_task->UpdateGeometry(); RefreshView(); }
void TaskEditPanel::EditTaskPoint(unsigned ItemIndex) { if (ItemIndex < ordered_task->TaskSize()) { if (dlgTaskPointShowModal(*ordered_task, ItemIndex)) { *task_modified = true; ordered_task->ClearName(); ordered_task->UpdateGeometry(); RefreshView(); } } else if (!ordered_task->IsFull()) { OrderedTaskPoint* point = nullptr; AbstractTaskFactory &factory = ordered_task->GetFactory(); const Waypoint* way_point = ShowWaypointListDialog(ordered_task->TaskSize() > 0 ? ordered_task->GetPoint(ordered_task->TaskSize() - 1).GetLocation() : CommonInterface::Basic().location, ordered_task, ItemIndex); if (!way_point) return; if (ItemIndex == 0) { point = (OrderedTaskPoint*)factory.CreateStart(*way_point); } else { point = (OrderedTaskPoint*)factory.CreateIntermediate(*way_point); } if (point == nullptr) return; if (factory.Append(*point, true)) { *task_modified = true; ordered_task->ClearName(); ordered_task->UpdateGeometry(); RefreshView(); } delete point; } }
void TaskEditPanel::MoveDown() { unsigned index = GetList().GetCursorIndex(); if (index >= ordered_task->TaskSize()) return; if (!ordered_task->GetFactory().Swap(index, true)) return; GetList().SetCursorIndex(index + 1); *task_modified = true; ordered_task->ClearName(); ordered_task->UpdateGeometry(); RefreshView(); }
static OrderedTask * LoadTask2(const TCHAR *path, const TaskBehaviour &task_behaviour) { OrderedTask *task = LoadTask(path, task_behaviour); if (task == nullptr) { fprintf(stderr, "Failed to parse XML\n"); return nullptr; } task->UpdateGeometry(); if (!task->CheckTask()) { fprintf(stderr, "Failed to load task from XML\n"); delete task; return NULL; } return task; }
void TaskEditPanel::ReverseTask() { if (ordered_task->TaskSize() < 2) return; const unsigned start_index = 0; const unsigned finish_index = ordered_task->TaskSize() - 1; const Waypoint start_wp = ordered_task->GetTaskPoint(start_index).GetWaypoint(); const Waypoint finish_wp = ordered_task->GetTaskPoint(finish_index).GetWaypoint(); if (start_wp.location != finish_wp.location) { // swap start/finish TP if at different location but leave OZ type intact ordered_task->Relocate(start_index, finish_wp); ordered_task->Relocate(finish_index, start_wp); // remove optional start points while (ordered_task->HasOptionalStarts()) ordered_task->RemoveOptionalStart(0); } // reverse intermediate TPs order keeping the OZ type with the respective TP unsigned length = ordered_task->TaskSize()-1; for (unsigned i = 1; i < length - 1; ++i) { const OrderedTaskPoint &otp = ordered_task->GetTaskPoint(length - 1); if (!ordered_task->GetFactory().Insert(otp, i, false)) return; if (!ordered_task->GetFactory().Remove(length, false)) return; } *task_modified = true; ordered_task->ClearName(); ordered_task->GetFactory().CheckAddFinish(); ordered_task->UpdateStatsGeometry(); ordered_task->UpdateGeometry(); RefreshView(); }