void QuickMenu::Prepare(ContainerWindow &parent, const PixelRect &rc) { WindowStyle grid_view_style; grid_view_style.ControlParent(); grid_view_style.Hide(); const auto &dialog_look = UIGlobals::GetDialogLook(); const auto &font = *dialog_look.button.font; const unsigned column_width = Layout::Scale(78u); const unsigned row_height = std::max(2 * (Layout::GetTextPadding() + font.GetHeight()), Layout::GetMaximumControlHeight()); grid_view.Create(parent, dialog_look, rc, grid_view_style, column_width, row_height); SetWindow(&grid_view); WindowStyle buttonStyle; buttonStyle.TabStop(); for (unsigned i = 0; i < menu.MAX_ITEMS; ++i) { if (buttons.full()) continue; const auto &menuItem = menu[i]; if (!menuItem.IsDefined()) continue; TCHAR buffer[100]; const auto expanded = ButtonLabel::Expand(menuItem.label, buffer, ARRAY_SIZE(buffer)); if (!expanded.visible) continue; PixelRect button_rc; button_rc.left = 0; button_rc.top = 0; button_rc.right = 80; button_rc.bottom = 30; auto *button = new Button(grid_view, button_rc, buttonStyle, new QuickMenuButtonRenderer(dialog_look, expanded.text), *this, menuItem.event); button->SetEnabled(expanded.enabled); buttons.append(button); grid_view.AddItem(*button); } grid_view.RefreshLayout(); UpdateCaption(); }
void AddWaypoint(const WaypointPtr &way_point, bool in_task) { if (waypoints.full()) return; if (!projection.WaypointInScaleFilter(*way_point) && !in_task) return; PixelPoint sc; if (!projection.GeoToScreenIfVisible(way_point->location, sc)) return; VisibleWaypoint &vwp = waypoints.append(); vwp.Set(way_point, sc, in_task); }
WindowReference(const ContainerWindow &root, Window &_window) :window(&_window) { const ContainerWindow *parent = window->GetParent(); while (true) { if (parent == &root) return; if (parent == NULL || parents.full()) { window = NULL; return; } parents.append(parent); parent = parent->GetParent(); } }
bool FlarmDetails::AddSecondaryItem(FlarmId id, const TCHAR *name) { int index = LookupSecondaryIndex(id); if (index != -1) { // modify existing record FLARM_Names[index].ID = id; FLARM_Names[index].Name = name; return true; } if (FLARM_Names.full()) return false; // create new record FlarmIdNameCouple &item = FLARM_Names.append(); item.ID = id; item.Name = name; return true; }
void WaypointDetailsWidget::Prepare(ContainerWindow &parent, const PixelRect &rc) { for (const auto &i : waypoint.files_embed) { if (images.full()) break; try { if (!images.append().LoadFile(LocalPath(i.c_str()))) images.shrink(images.size() - 1); } catch (const std::exception &e) { LogFormat("Failed to load %s: %s", (const char *)NarrowPathName(Path(i.c_str())), e.what()); images.shrink(images.size() - 1); } } const Layout layout(rc, waypoint); WindowStyle dock_style; dock_style.Hide(); dock_style.ControlParent(); WindowStyle button_style; button_style.Hide(); button_style.TabStop(); if (allow_navigation) goto_button.Create(parent, look.button, _("GoTo"), layout.goto_button, button_style, *this, GOTO); if (!images.empty()) { magnify_button.Create(parent, layout.magnify_button, button_style, new SymbolButtonRenderer(look.button, _T("+")), *this, MAGNIFY); shrink_button.Create(parent, layout.shrink_button, button_style, new SymbolButtonRenderer(look.button, _T("-")), *this, SHRINK); } if (allow_navigation) { previous_button.Create(parent, layout.previous_button, button_style, new SymbolButtonRenderer(look.button, _T("<")), *this, PREVIOUS); next_button.Create(parent, layout.next_button, button_style, new SymbolButtonRenderer(look.button, _T(">")), *this, NEXT); } close_button.Create(parent, look.button, _("Close"), layout.close_button, button_style, dialog, mrOK); info_dock.Create(parent, layout.main, dock_style); info_dock.SetWidget(&info_widget); details_panel.Create(parent, look, layout.main, dock_style); details_text.Create(details_panel, layout.details_text); details_text.SetFont(look.text_font); details_text.SetText(waypoint.details.c_str()); #ifdef HAVE_RUN_FILE const unsigned num_files = std::distance(waypoint.files_external.begin(), waypoint.files_external.end()); if (num_files > 0) { file_list.Create(details_panel, layout.file_list, WindowStyle(), layout.file_list_item_height); file_list.SetItemRenderer(&file_list_handler); file_list.SetCursorHandler(&file_list_handler); file_list.SetLength(num_files); } #endif commands_dock.Create(parent, layout.main, dock_style); commands_dock.SetWidget(&commands_widget); if (!images.empty()) image_window.Create(parent, layout.main, dock_style, [this](Canvas &canvas, const PixelRect &rc){ OnImagePaint(canvas, rc); }); last_page = 2 + images.size(); }
/** * Updates filter to add sample to buffer * * @param x0 Input (pre-filtered) value at sample time * * @return True if buffer is full */ bool Update(const fixed x0) { if (!x.full()) x.append(x0); return x.full(); }
/** * Allocates a new FLARM_TRAFFIC object from the array. * * @return the FLARM_TRAFFIC pointer, NULL if the array is full */ FLARM_TRAFFIC *AllocateTraffic() { return traffic.full() ? NULL : &traffic.append(); }
void dlgWaypointDetailsShowModal(SingleWindow &parent, const Waypoint &_waypoint, bool allow_navigation) { waypoint = &_waypoint; wf = LoadDialog(CallBackTable, parent, Layout::landscape ? _T("IDR_XML_WAYPOINTDETAILS_L") : _T("IDR_XML_WAYPOINTDETAILS")); assert(wf != NULL); LastUsedWaypoints::Add(_waypoint); UpdateCaption(waypoint->name.c_str(), waypoint->file_num); wf->SetKeyDownNotify(FormKeyDown); wInfo = (DockWindow *)wf->FindByName(_T("info")); assert(wInfo != NULL); wInfo->SetWidget(new WaypointInfoWidget(UIGlobals::GetDialogLook(), _waypoint)); wCommand = (DockWindow *)wf->FindByName(_T("commands")); assert(wCommand != NULL); wCommand->SetWidget(new WaypointCommandsWidget(UIGlobals::GetDialogLook(), wf, _waypoint, protected_task_manager)); wCommand->Hide(); wDetails = wf->FindByName(_T("frmDetails")); assert(wDetails != NULL); ListControl *wFilesList = (ListControl *)wf->FindByName(_T("Files")); assert(wFilesList != NULL); EditWindow *wDetailsText = (EditWindow *)wf->FindByName(_T("Details")); assert(wDetailsText != NULL); wDetailsText->SetText(waypoint->details.c_str()); #ifdef ANDROID int num_files = std::distance(waypoint->files_external.begin(), waypoint->files_external.end()); if (num_files > 0) { wFilesList->SetPaintItemCallback(OnFileListItemPaint); wFilesList->SetCursorCallback(OnFileListEnter); wFilesList->SetActivateCallback(OnFileListEnter); unsigned list_height = wFilesList->GetItemHeight() * std::min(num_files, 5); wFilesList->Resize(wFilesList->GetWidth(), list_height); wFilesList->SetLength(num_files); PixelRect rc = wDetailsText->GetPosition(); rc.top += list_height; wDetailsText->Move(rc); } else #endif wFilesList->Hide(); wImage = (PaintWindow *)wf->FindByName(_T("frmImage")); assert(wImage != NULL); wMagnify = (WndButton *)wf->FindByName(_T("cmdMagnify")); assert(wMagnify != NULL); wShrink = (WndButton *)wf->FindByName(_T("cmdShrink")); assert(wShrink != NULL); if (!allow_navigation) { WndButton* butnav = (WndButton *)wf->FindByName(_T("cmdPrev")); assert(butnav != NULL); butnav->Hide(); butnav = (WndButton *)wf->FindByName(_T("cmdNext")); assert(butnav != NULL); butnav->Hide(); butnav = (WndButton *)wf->FindByName(_T("cmdGoto")); assert(butnav != NULL); butnav->Hide(); } for (auto it = waypoint->files_embed.begin(), it_end = waypoint->files_embed.end(); it != it_end && !images.full(); it++) { TCHAR path[MAX_PATH]; LocalPath(path, it->c_str()); if (!images.append().LoadFile(path)) images.shrink(images.size() - 1); } page = 0; NextPage(0); // JMW just to turn proper pages on/off wf->ShowModal(); delete wf; for (auto image = images.begin(); image < images.end(); image++) image->Reset(); images.clear(); }
void dlgWaypointDetailsShowModal(const Waypoint &_waypoint, bool allow_navigation) { waypoint = &_waypoint; form = LoadDialog(CallBackTable, UIGlobals::GetMainWindow(), Layout::landscape ? _T("IDR_XML_WAYPOINTDETAILS_L") : _T("IDR_XML_WAYPOINTDETAILS")); assert(form != nullptr); LastUsedWaypoints::Add(_waypoint); UpdateCaption(); form->SetKeyDownFunction(FormKeyDown); info_widget = (DockWindow *)form->FindByName(_T("info")); assert(info_widget != nullptr); info_widget->SetWidget(new WaypointInfoWidget(UIGlobals::GetDialogLook(), _waypoint)); commands_widget = (DockWindow *)form->FindByName(_T("commands")); assert(commands_widget != nullptr); commands_widget->SetWidget(new WaypointCommandsWidget(UIGlobals::GetDialogLook(), form, _waypoint, protected_task_manager)); commands_widget->Hide(); details_panel = form->FindByName(_T("frmDetails")); assert(details_panel != nullptr); ListControl *wFilesList = (ListControl *)form->FindByName(_T("Files")); assert(wFilesList != nullptr); LargeTextWindow *wDetailsText = (LargeTextWindow *) form->FindByName(_T("Details")); assert(wDetailsText != nullptr); wDetailsText->SetText(waypoint->details.c_str()); #ifdef ANDROID WaypointExternalFileListHandler handler; int num_files = std::distance(waypoint->files_external.begin(), waypoint->files_external.end()); if (num_files > 0) { wFilesList->SetItemRenderer(&handler); wFilesList->SetCursorHandler(&handler); unsigned list_height = wFilesList->GetItemHeight() * std::min(num_files, 5); wFilesList->Resize(wFilesList->GetWidth(), list_height); wFilesList->SetLength(num_files); PixelRect rc = wDetailsText->GetPosition(); rc.top += list_height; wDetailsText->Move(rc); } else #endif wFilesList->Hide(); image_window = (PaintWindow *)form->FindByName(_T("frmImage")); assert(image_window != nullptr); magnify_button = (WndButton *)form->FindByName(_T("cmdMagnify")); assert(magnify_button != nullptr); shrink_button = (WndButton *)form->FindByName(_T("cmdShrink")); assert(shrink_button != nullptr); if (!allow_navigation) { for (const TCHAR *button_name : { _T("cmdPrev"), _T("cmdNext"), _T("cmdGoto") }) { Window *button = form->FindByName(button_name); assert(button != nullptr); button->Hide(); } } for (auto it = waypoint->files_embed.begin(), it_end = waypoint->files_embed.end(); it != it_end && !images.full(); it++) { TCHAR path[MAX_PATH]; LocalPath(path, it->c_str()); if (!images.append().LoadFile(path)) images.shrink(images.size() - 1); } last_page = 2 + images.size(); page = 0; UpdatePage(); form->ShowModal(); delete form; for (auto image = images.begin(); image < images.end(); image++) image->Reset(); images.clear(); }
/** * Updates filter to add sample to buffer * * @param x0 Input (pre-filtered) value at sample time * * @return True if buffer is full */ bool Update(const double x0) { if (!x.full()) x.append(x0); return x.full(); }