void InputEvents::eventAddWaypoint(const TCHAR *misc) { const NMEAInfo &basic = CommonInterface::Basic(); const DerivedInfo &calculated = CommonInterface::Calculated(); if (StringIsEqual(misc, _T("takeoff"))) { if (basic.location_available && calculated.terrain_valid) { ScopeSuspendAllThreads suspend; way_points.AddTakeoffPoint(basic.location, calculated.terrain_altitude); way_points.Optimise(); } } else { Waypoint edit_waypoint = way_points.Create(basic.location); edit_waypoint.elevation = calculated.terrain_altitude; if (!dlgWaypointEditShowModal(edit_waypoint) || edit_waypoint.name.empty()) { trigger_redraw(); return; } SuspendAppendSaveWaypoint(std::move(edit_waypoint)); } trigger_redraw(); }
// TaskLoad // Loads the task of the specified filename void InputEvents::eventTaskLoad(const TCHAR *misc) { if (protected_task_manager == NULL) return; if (!StringIsEmpty(misc)) { TCHAR buffer[MAX_PATH]; LocalPath(buffer, misc); OrderedTask *task = TaskFile::GetTask(buffer, CommonInterface::GetComputerSettings().task, &way_points, 0); if (task) { { ScopeSuspendAllThreads suspend; task->CheckDuplicateWaypoints(way_points); way_points.Optimise(); } task->FillMatPoints(way_points); protected_task_manager->TaskCommit(*task); delete task; } } trigger_redraw(); }
void InputEvents::eventCalculator(gcc_unused const TCHAR *misc) { dlgTaskManagerShowModal(UIGlobals::GetMainWindow()); trigger_redraw(); }
void InputEvents::eventCalculator(gcc_unused const TCHAR *misc) { dlgTaskManagerShowModal(); trigger_redraw(); }
// AdjustWaypoint // Adjusts the active waypoint of the task // next: selects the next waypoint, stops at final waypoint // previous: selects the previous waypoint, stops at start waypoint // nextwrap: selects the next waypoint, wrapping back to start after final // previouswrap: selects the previous waypoint, wrapping to final after start void InputEvents::eventAdjustWaypoint(const TCHAR *misc) { if (protected_task_manager == NULL) return; if (StringIsEqual(misc, _T("next"))) protected_task_manager->IncrementActiveTaskPoint(1); // next else if (StringIsEqual(misc, _T("nextwrap"))) protected_task_manager->IncrementActiveTaskPoint(1); // next - with wrap else if (StringIsEqual(misc, _T("previous"))) protected_task_manager->IncrementActiveTaskPoint(-1); // previous else if (StringIsEqual(misc, _T("previouswrap"))) protected_task_manager->IncrementActiveTaskPoint(-1); // previous with wrap else if (StringIsEqual(misc, _T("nextarm"))) protected_task_manager->IncrementActiveTaskPointArm(1); // arm sensitive next else if (StringIsEqual(misc, _T("previousarm"))) protected_task_manager->IncrementActiveTaskPointArm(-1); // arm sensitive previous { /* quickly propagate the updated values from the TaskManager to the InterfaceBlackboard, so they are available immediately */ ProtectedTaskManager::ExclusiveLease tm(*protected_task_manager); tm->UpdateCommonStatsTask(); CommonInterface::ReadCommonStats(tm->GetCommonStats()); } trigger_redraw(); }
// Setup // Activates configuration and setting dialogs // Basic: Basic settings (QNH/Bugs/Ballast/MaxTemperature) // Wind: Wind settings // Task: Task editor // Airspace: Airspace filter settings // Replay: IGC replay dialog void InputEvents::eventSetup(const TCHAR *misc) { if (StringIsEqual(misc, _T("Basic"))) dlgBasicSettingsShowModal(); else if (StringIsEqual(misc, _T("Wind"))) ShowWindSettingsDialog(); else if (StringIsEqual(misc, _T("System"))) SystemConfiguration(); else if (StringIsEqual(misc, _T("Task"))) dlgTaskManagerShowModal(); else if (StringIsEqual(misc, _T("Airspace"))) dlgAirspaceShowModal(false); else if (StringIsEqual(misc, _T("Weather"))) ShowWeatherDialog(_T("rasp")); else if (StringIsEqual(misc, _T("Replay"))) { if (!CommonInterface::MovementDetected()) ShowReplayDialog(); } else if (StringIsEqual(misc, _T("Switches"))) dlgSwitchesShowModal(); else if (StringIsEqual(misc, _T("Teamcode"))) dlgTeamCodeShowModal(); else if (StringIsEqual(misc, _T("Target"))) dlgTargetShowModal(); else if (StringIsEqual(misc, _T("Plane"))) dlgPlanesShowModal(); else if (StringIsEqual(misc, _T("Profile"))) ProfileListDialog(); else if (StringIsEqual(misc, _T("Alternates"))) dlgAlternatesListShowModal(); trigger_redraw(); }
void view_helper_set_x(ViewHelper *self, float x) { if (self->x == x) return; self->x = x; update_autoscale(self); trigger_redraw(self, NULL); }
void view_helper_set_scale(ViewHelper *self, float scale) { if (self->scale == scale) return; self->scale = scale; update_autoscale(self); trigger_redraw(self, NULL); }
void view_helper_set_y(ViewHelper *self, float y) { if (self->y == y) return; self->y = y; update_autoscale(self); trigger_redraw(self, NULL); }
// AbortTask // Allows aborting and resuming of tasks // abort: aborts the task if active // resume: resumes the task if aborted // toggle: toggles between abort and resume // show: displays a status message showing the task abort status void InputEvents::eventAbortTask(const TCHAR *misc) { if (protected_task_manager == NULL) return; ProtectedTaskManager::ExclusiveLease task_manager(*protected_task_manager); if (StringIsEqual(misc, _T("abort"))) task_manager->Abort(); else if (StringIsEqual(misc, _T("resume"))) task_manager->Resume(); else if (StringIsEqual(misc, _T("show"))) { switch (task_manager->GetMode()) { case TaskType::ABORT: Message::AddMessage(_("Task aborted")); break; case TaskType::GOTO: Message::AddMessage(_("Go to target")); break; case TaskType::ORDERED: Message::AddMessage(_("Ordered task")); break; default: Message::AddMessage(_("No task")); } } else { // toggle switch (task_manager->GetMode()) { case TaskType::NONE: case TaskType::ORDERED: task_manager->Abort(); break; case TaskType::GOTO: if (task_manager->CheckOrderedTask()) { task_manager->Resume(); } else { task_manager->Abort(); } break; case TaskType::ABORT: task_manager->Resume(); break; } } /* quickly propagate the updated values from the TaskManager to the InterfaceBlackboard, so they are available immediately */ task_manager->UpdateCommonStatsTask(); CommonInterface::ReadCommonStats(task_manager->GetCommonStats()); trigger_redraw(); }
/* When the GeglNode has been computed, * find out if the size of the vie changed and * emit the "size-changed" signal to notify view * find out which area in the view was computed and emit the * "redraw-needed" signal to notify it that a redraw is needed */ static void computed_event(GeglNode *node, GeglRectangle *rect, ViewHelper *self) { update_autoscale(self); /* Emit redraw-needed */ GeglRectangle redraw_rect = *rect; model_rect_to_view_rect(self, &redraw_rect); trigger_redraw(self, &redraw_rect); }
void InputEvents::eventGotoLookup(gcc_unused const TCHAR *misc) { const NMEAInfo &basic = CommonInterface::Basic(); if (protected_task_manager == NULL) return; auto wp = ShowWaypointListDialog(basic.location); if (wp != NULL) { protected_task_manager->DoGoto(std::move(wp)); trigger_redraw(); } }
void InputEvents::eventGotoLookup(gcc_unused const TCHAR *misc) { const NMEAInfo &basic = CommonInterface::Basic(); if (protected_task_manager == NULL) return; const Waypoint* wp = dlgWaypointSelect(XCSoarInterface::main_window, basic.location); if (wp != NULL) { protected_task_manager->DoGoto(*wp); trigger_redraw(); } }
// AbortTask // Allows aborting and resuming of tasks // abort: aborts the task if active // resume: resumes the task if aborted // toggle: toggles between abort and resume // show: displays a status message showing the task abort status void InputEvents::eventAbortTask(const TCHAR *misc) { if (protected_task_manager == NULL) return; ProtectedTaskManager::ExclusiveLease task_manager(*protected_task_manager); if (StringIsEqual(misc, _T("abort"))) task_manager->Abort(); else if (StringIsEqual(misc, _T("resume"))) task_manager->Resume(); else if (StringIsEqual(misc, _T("show"))) { switch (task_manager->GetMode()) { case TaskManager::MODE_ABORT: Message::AddMessage(_("Task aborted")); break; case TaskManager::MODE_GOTO: Message::AddMessage(_("Go to target")); break; case TaskManager::MODE_ORDERED: Message::AddMessage(_("Ordered task")); break; default: Message::AddMessage(_("No task")); } } else { // toggle switch (task_manager->GetMode()) { case TaskManager::MODE_NULL: case TaskManager::MODE_ORDERED: task_manager->Abort(); break; case TaskManager::MODE_GOTO: if (task_manager->CheckOrderedTask()) { task_manager->Resume(); } else { task_manager->Abort(); } break; case TaskManager::MODE_ABORT: task_manager->Resume(); break; } } trigger_redraw(); }
void InputEvents::eventAirspaceDisplayMode(const TCHAR *misc) { AirspaceRendererSettings &settings = CommonInterface::SetMapSettings().airspace; if (StringIsEqual(misc, _T("all"))) settings.altitude_mode = AirspaceDisplayMode::ALLON; else if (StringIsEqual(misc, _T("clip"))) settings.altitude_mode = AirspaceDisplayMode::CLIP; else if (StringIsEqual(misc, _T("auto"))) settings.altitude_mode = AirspaceDisplayMode::AUTO; else if (StringIsEqual(misc, _T("below"))) settings.altitude_mode = AirspaceDisplayMode::ALLBELOW; else if (StringIsEqual(misc, _T("off"))) settings.altitude_mode = AirspaceDisplayMode::ALLOFF; trigger_redraw(); }
// AdjustWaypoint // Adjusts the active waypoint of the task // next: selects the next waypoint, stops at final waypoint // previous: selects the previous waypoint, stops at start waypoint // nextwrap: selects the next waypoint, wrapping back to start after final // previouswrap: selects the previous waypoint, wrapping to final after start void InputEvents::eventAdjustWaypoint(const TCHAR *misc) { if (protected_task_manager == NULL) return; if (StringIsEqual(misc, _T("next"))) protected_task_manager->IncrementActiveTaskPoint(1); // next else if (StringIsEqual(misc, _T("nextwrap"))) protected_task_manager->IncrementActiveTaskPoint(1); // next - with wrap else if (StringIsEqual(misc, _T("previous"))) protected_task_manager->IncrementActiveTaskPoint(-1); // previous else if (StringIsEqual(misc, _T("previouswrap"))) protected_task_manager->IncrementActiveTaskPoint(-1); // previous with wrap else if (StringIsEqual(misc, _T("nextarm"))) protected_task_manager->IncrementActiveTaskPointArm(1); // arm sensitive next else if (StringIsEqual(misc, _T("previousarm"))) protected_task_manager->IncrementActiveTaskPointArm(-1); // arm sensitive previous trigger_redraw(); }
void InputEvents::eventScreenModes(const TCHAR *misc) { // toggle switches like this: // -- normal infobox // -- auxiliary infobox // -- full screen // -- normal infobox const UIState &ui_state = CommonInterface::GetUIState(); if (StringIsEqual(misc, _T("normal"))) { PageActions::OpenLayout(PageLayout::Default()); } else if (StringIsEqual(misc, _T("auxilary"))) { PageActions::OpenLayout(PageLayout::Aux()); } else if (StringIsEqual(misc, _T("toggleauxiliary"))) { PageActions::OpenLayout(ui_state.auxiliary_enabled ? PageLayout::Default() : PageLayout::Aux()); } else if (StringIsEqual(misc, _T("full"))) { PageActions::OpenLayout(PageLayout::FullScreen()); } else if (StringIsEqual(misc, _T("togglefull"))) { CommonInterface::main_window->SetFullScreen( !CommonInterface::main_window->GetFullScreen()); } else if (StringIsEqual(misc, _T("show"))) { if (CommonInterface::main_window->GetFullScreen()) Message::AddMessage(_("Screen Mode Full")); else if (ui_state.auxiliary_enabled) Message::AddMessage(_("Auxiliary InfoBoxes")); else Message::AddMessage(_("Default InfoBoxes")); } else if (StringIsEqual(misc, _T("previous"))) PageActions::Prev(); else PageActions::Next(); trigger_redraw(); }
// TODO code: Keep marker text for use in log file etc. void InputEvents::eventMarkLocation(const TCHAR *misc) { const NMEAInfo &basic = CommonInterface::Basic(); if (StringIsEqual(misc, _T("reset"))) { ScopeSuspendAllThreads suspend; way_points.EraseUserMarkers(); } else { const auto location = GetVisibleLocation(); if (!location.IsValid()) return; MarkLocation(location, basic.date_time_utc); const WaypointFactory factory(WaypointOrigin::USER, terrain); Waypoint wp = factory.Create(location); factory.FallbackElevation(wp); TCHAR name[64] = _T("Marker"); if (basic.date_time_utc.IsPlausible()) { auto *p = name + StringLength(name); *p++ = _T(' ' ); FormatISO8601(p, basic.date_time_utc); } wp.name = name; wp.type = Waypoint::Type::MARKER; SuspendAppendSaveWaypoint(std::move(wp)); if (CommonInterface::GetUISettings().sound.sound_modes_enabled) PlayResource(_T("IDR_WAV_CLEAR")); } trigger_redraw(); }