void WaypointListDialog::OnPaintItem(Canvas &canvas, const PixelRect rc, unsigned i) { if (waypoint_list.empty()) { assert(i == 0); const UPixelScalar line_height = rc.bottom - rc.top; const Font &name_font = *UIGlobals::GetDialogLook().list.font; canvas.SetTextColor(COLOR_BLACK); canvas.Select(name_font); canvas.DrawText(rc.left + line_height + Layout::FastScale(2), rc.top + line_height / 2 - name_font.GetHeight() / 2, dialog_state.IsDefined() || way_points.IsEmpty() ? _("No Match!") : _("Choose a filter or click here")); return; } assert(i < waypoint_list.size()); const struct WaypointListItem &info = waypoint_list[i]; WaypointListRenderer::Draw(canvas, rc, *info.waypoint, info.GetVector(location), UIGlobals::GetDialogLook(), UIGlobals::GetMapLook().waypoint, CommonInterface::GetMapSettings().waypoint); }
static void OnWaypointListEnter() { if (waypoint_list.size() > 0) dialog->SetModalResult(mrOK); else name_control->BeginEditing(); }
WaypointPtr WaypointManager::nearestVisibleWaypoint(D3DXVECTOR3 target) { WaypointPtr wp; float minDist = 65535; WaypointList seen = visibleWaypoints(target); if(seen.size()==0) return WaypointPtr(); for(int i=0; i<seen.size(); i++) { float d = D3DXVec3Length(&(waypoints[seen[i]]->_position - target)); if(d<minDist) { wp = waypoints[seen[i]]; minDist = d; } } return wp; }
static void OnWaypointListEnter(gcc_unused unsigned i) { if (waypoint_list.size() > 0) dialog->SetModalResult(mrOK); else OnFilterNameButton(*name_button); }
const Waypoint* dlgWaypointSelect(SingleWindow &parent, const GeoPoint &_location, OrderedTask *ordered_task, const unsigned ordered_task_index) { dialog = LoadDialog(callback_table, parent, Layout::landscape ? _T("IDR_XML_WAYPOINTSELECT_L") : _T("IDR_XML_WAYPOINTSELECT")); assert(dialog != NULL); #ifdef GNAV dialog->SetKeyDownNotify(FormKeyDown); #endif const DialogLook &dialog_look = UIGlobals::GetDialogLook(); waypoint_list_control = (ListControl*)dialog->FindByName(_T("frmWaypointList")); assert(waypoint_list_control != NULL); waypoint_list_control->SetActivateCallback(OnWaypointListEnter); waypoint_list_control->SetPaintItemCallback(OnPaintListItem); waypoint_list_control->SetItemHeight(WaypointListRenderer::GetHeight(dialog_look)); name_button = (WndButton*)dialog->FindByName(_T("cmdFltName")); name_button->SetOnLeftNotify(OnFilterNameButtonLeft); name_button->SetOnRightNotify(OnFilterNameButtonRight); distance_filter = (WndProperty*)dialog->FindByName(_T("prpFltDistance")); direction_filter = (WndProperty*)dialog->FindByName(_T("prpFltDirection")); type_filter = (WndProperty *)dialog->FindByName(_T("prpFltType")); location = _location; triangle_validator = new FAITrianglePointValidator(ordered_task, ordered_task_index); last_heading = CommonInterface::Calculated().heading; PrepareData(); UpdateList(); dialog->SetTimerNotify(OnTimerNotify); if (dialog->ShowModal() != mrOK) { delete dialog; delete triangle_validator; return NULL; } unsigned index = waypoint_list_control->GetCursorIndex(); delete dialog; delete triangle_validator; const Waypoint* retval = NULL; if (index < waypoint_list.size()) retval = waypoint_list[index].waypoint; return retval; }
void WaypointManagerWidget::OnPaintItem(Canvas &canvas, const PixelRect rc, unsigned i) { assert(i < items.size()); const auto &info = items[i]; WaypointListRenderer::Draw(canvas, rc, *info.waypoint, row_renderer, UIGlobals::GetMapLook().waypoint, CommonInterface::GetMapSettings().waypoint); }
static void UpdateList() { if (filter_data.type_index == TF_LAST_USED) FillLastUsedList(waypoint_list, LastUsedWaypoints::GetList(), way_points); else FillList(waypoint_list, way_points, location, last_heading, filter_data); waypoint_list_control->SetLength(std::max(1, (int)waypoint_list.size())); waypoint_list_control->SetOrigin(0); waypoint_list_control->SetCursorIndex(0); waypoint_list_control->Invalidate(); }
static void UpdateList() { waypoint_list.clear(); if (dialog_state.type_index == TypeFilter::LAST_USED) FillLastUsedList(waypoint_list, LastUsedWaypoints::GetList(), way_points); else FillList(waypoint_list, way_points, location, last_heading, dialog_state); waypoint_list_control->SetLength(std::max(1, (int)waypoint_list.size())); waypoint_list_control->SetOrigin(0); waypoint_list_control->SetCursorIndex(0); waypoint_list_control->Invalidate(); }
void WaypointListWidget::UpdateList() { items.clear(); if (dialog_state.type_index == TypeFilter::LAST_USED) FillLastUsedList(items, LastUsedWaypoints::GetList(), way_points); else FillList(items, way_points, location, last_heading, dialog_state); auto &list = GetList(); list.SetLength(std::max(1u, (unsigned)items.size())); list.SetOrigin(0); list.SetCursorIndex(0); list.Invalidate(); }
void WaypointManagerWidget::UpdateList() { items.clear(); WaypointFilter filter; filter.Clear(); filter.type_index = TypeFilter::USER; WaypointListBuilder builder(filter, GeoPoint::Invalid(), items, nullptr, 0); builder.Visit(way_points); auto &list = GetList(); list.SetLength(items.size()); list.SetOrigin(0); list.SetCursorIndex(0); list.Invalidate(); }
const Waypoint* ShowWaypointListDialog(SingleWindow &parent, const GeoPoint &_location, OrderedTask *_ordered_task, unsigned _ordered_task_index) { dialog = LoadDialog(callback_table, parent, Layout::landscape ? _T("IDR_XML_WAYPOINTSELECT_L") : _T("IDR_XML_WAYPOINTSELECT")); assert(dialog != NULL); #ifdef GNAV dialog->SetKeyDownFunction(FormKeyDown); #endif const DialogLook &dialog_look = UIGlobals::GetDialogLook(); WaypointListDialog dialog2; waypoint_list_control = (ListControl*)dialog->FindByName(_T("frmWaypointList")); assert(waypoint_list_control != NULL); waypoint_list_control->SetItemRenderer(&dialog2); waypoint_list_control->SetItemHeight(WaypointListRenderer::GetHeight(dialog_look)); waypoint_list_control->SetCursorHandler(&dialog2); FilterDataFieldListener listener; name_control = (WndProperty *)dialog->FindByName(_T("name")); assert(name_control != nullptr); DataField *name_df = new PrefixDataField(_T(""), WaypointNameAllowedCharacters); name_control->SetDataField(name_df); name_df->SetListener(&listener); distance_filter = (WndProperty*)dialog->FindByName(_T("prpFltDistance")); assert(distance_filter != NULL); distance_filter->GetDataField()->SetListener(&listener); direction_filter = (WndProperty*)dialog->FindByName(_T("prpFltDirection")); assert(direction_filter != NULL); direction_filter->GetDataField()->SetListener(&listener); type_filter = (WndProperty *)dialog->FindByName(_T("prpFltType")); assert(type_filter != NULL); type_filter->GetDataField()->SetListener(&listener); location = _location; ordered_task = _ordered_task; ordered_task_index = _ordered_task_index; last_heading = CommonInterface::Basic().attitude.heading; PrepareData(); UpdateList(); const ScopeGPSListener l(CommonInterface::GetLiveBlackboard(), OnGPSUpdate); if (dialog->ShowModal() != mrOK) { delete dialog; return NULL; } unsigned index = waypoint_list_control->GetCursorIndex(); delete dialog; const Waypoint* retval = NULL; if (index < waypoint_list.size()) retval = waypoint_list[index].waypoint; return retval; }