bool dlgTaskPointType(SingleWindow &parent, OrderedTask** task, const unsigned index) { ordered_task = *task; task_modified = false; active_index = index; point = ordered_task->get_tp(active_index); if (point) way_point = &point->GetWaypoint(); else way_point = NULL; if (Layout::landscape) wf = LoadDialog(CallBackTable, parent, _T("IDR_XML_TASKPOINTTYPE_L")); else wf = LoadDialog(CallBackTable, parent, _T("IDR_XML_TASKPOINTTYPE")); if (!wf) return false; assert(wf != NULL); wPointTypes = (WndListFrame*)wf->FindByName(_T("frmPointTypes")); assert(wPointTypes != NULL); point_types = ordered_task->GetFactory().GetValidTypes(index); if (point_types.empty()) { assert(1); return false; } wPointTypes->SetActivateCallback(OnPointListEnter); wPointTypes->SetPaintItemCallback(OnPointPaintListItem); wPointTypes->SetCursorCallback(OnPointCursorCallback); wPointTypes->SetLength(point_types.size()); if (point) for (unsigned i=0; i<point_types.size(); i++) if (point_types[i] == get_point_type()) wPointTypes->SetCursorIndex(i); RefreshView(); if (point_types.size()==1) SetPointType(point_types[0]); else wf->ShowModal(); delete wf; wf = NULL; return task_modified; }
static void OnSelect() { if (wPointTypes->GetCursorIndex() >= point_types.size()) return; if (SetPointType(get_cursor_type())) wf->SetModalResult(mrOK); else wf->SetModalResult(mrCancel); }
static void OnPointPaintListItem(Canvas &canvas, const PixelRect rc, unsigned DrawListIndex) { assert(DrawListIndex < point_types.size()); StaticString<120> buffer; const TCHAR* text = OrderedTaskPointName(point_types[DrawListIndex]); if (point && (point_types[DrawListIndex] == get_point_type())) buffer.Format(_T("*%s"), text); else buffer.Format(_T(" %s"), text); canvas.text(rc.left + Layout::FastScale(2), rc.top + Layout::FastScale(2), buffer); }
void TaskDefaultsConfigPanel::Init(WndForm *_wf) { assert(_wf != NULL); wf = _wf; WndProperty *wp; const SETTINGS_COMPUTER &settings_computer = XCSoarInterface::SettingsComputer(); OrderedTask* temptask = protected_task_manager->task_blank(); temptask->set_factory(TaskBehaviour::FACTORY_RT); wp = (WndProperty*)wf->FindByName(_T("prpStartType")); if (wp) { const AbstractTaskFactory::LegalPointVector point_types = temptask->get_factory().getValidStartTypes(); DataFieldEnum* dfe = (DataFieldEnum*)wp->GetDataField(); dfe->EnableItemHelp(true); for (unsigned i = 0; i < point_types.size(); i++) { dfe->addEnumText(OrderedTaskPointName(point_types[i]), (unsigned)point_types[i], OrderedTaskPointDescription(point_types[i])); if (point_types[i] == settings_computer.sector_defaults.start_type) dfe->Set((unsigned)point_types[i]); } wp->RefreshDisplay(); } LoadFormProperty(*wf, _T("prpStartRadius"), ugDistance, settings_computer.sector_defaults.start_radius); wp = (WndProperty*)wf->FindByName(_T("prpFinishType")); if (wp) { const AbstractTaskFactory::LegalPointVector point_types = temptask->get_factory().getValidFinishTypes(); DataFieldEnum* dfe = (DataFieldEnum*)wp->GetDataField(); dfe->EnableItemHelp(true); for (unsigned i = 0; i < point_types.size(); i++) { dfe->addEnumText(OrderedTaskPointName(point_types[i]), (unsigned)point_types[i], OrderedTaskPointDescription(point_types[i])); if (point_types[i] == settings_computer.sector_defaults.finish_type) dfe->Set((unsigned)point_types[i]); } wp->RefreshDisplay(); } LoadFormProperty(*wf, _T("prpFinishRadius"), ugDistance, settings_computer.sector_defaults.finish_radius); wp = (WndProperty*)wf->FindByName(_T("prpTurnpointType")); if (wp) { const AbstractTaskFactory::LegalPointVector point_types = temptask->get_factory().getValidIntermediateTypes(); DataFieldEnum* dfe = (DataFieldEnum*)wp->GetDataField(); dfe->EnableItemHelp(true); for (unsigned i = 0; i < point_types.size(); i++) { dfe->addEnumText(OrderedTaskPointName(point_types[i]), (unsigned)point_types[i], OrderedTaskPointDescription(point_types[i])); if (point_types[i] == settings_computer.sector_defaults.turnpoint_type) { dfe->Set((unsigned)point_types[i]); } } wp->RefreshDisplay(); } LoadFormProperty(*wf, _T("prpTurnpointRadius"), ugDistance, settings_computer.sector_defaults.turnpoint_radius); wp = (WndProperty*)wf->FindByName(_T("prpTaskType")); if (wp) { const std::vector<TaskBehaviour::Factory_t> factory_types = temptask->get_factory_types(); DataFieldEnum* dfe = (DataFieldEnum*)wp->GetDataField(); dfe->EnableItemHelp(true); for (unsigned i = 0; i < factory_types.size(); i++) { dfe->addEnumText(OrderedTaskFactoryName(factory_types[i]), (unsigned)factory_types[i], OrderedTaskFactoryDescription( factory_types[i])); if (factory_types[i] == settings_computer.task_type_default) dfe->Set((unsigned)factory_types[i]); } wp->RefreshDisplay(); } LoadFormProperty(*wf, _T("prpAATMinTime"), (unsigned)(settings_computer.ordered_defaults.aat_min_time / 60)); LoadFormProperty(*wf, _T("prpAATTimeMargin"), (unsigned)(settings_computer.optimise_targets_margin / 60)); delete temptask; }