void RowFormWidget::Initialise(ContainerWindow &parent, const PixelRect &rc) { assert(!IsDefined()); assert(rows.empty()); WindowStyle style; style.Hide(); style.ControlParent(); SetWindow(new PanelControl(parent, look, rc, style)); }
void SolidWidget::Initialise(ContainerWindow &parent, const PixelRect &rc) { WindowStyle style; style.ControlParent(); style.Hide(); auto window = new SolidContainerWindow(); window->Create(parent, rc, UIGlobals::GetDialogLook().background_color, style); SetWindow(window); widget->Initialise(*window, ToOrigin(rc)); }
WndProperty * RowFormWidget::CreateEdit(const TCHAR *label, const TCHAR *help, bool read_only) { assert(IsDefined()); const PixelRect edit_rc = InitialControlRect(Layout::GetMinimumControlHeight()); WindowStyle style; if (!read_only) style.ControlParent(); EditWindowStyle edit_style; edit_style.SetVerticalCenter(); if (read_only) edit_style.SetReadOnly(); else edit_style.TabStop(); if (IsEmbedded() || Layout::scale_1024 < 2048) /* sunken edge doesn't fit well on the tiny screen of an embedded device */ edit_style.Border(); else edit_style.SunkenEdge(); PanelControl &panel = *(PanelControl *)GetWindow(); WndProperty *edit = new WndProperty(panel, look, label, edit_rc, (*label == '\0') ? 0 : 100, style, edit_style, NULL); if (help != NULL) edit->SetHelpText(help); return edit; }
void dlgQuickMenuShowModal(SingleWindow &parent) { const Menu *menu = InputEvents::GetMenu(_T("RemoteStick")); if (menu == NULL) return; const DialogLook &dialog_look = UIGlobals::GetDialogLook(); WindowStyle dialogStyle; dialogStyle.Hide(); dialogStyle.ControlParent(); wf = new WndForm(parent, dialog_look, parent.get_client_rect(), _T("Quick Menu"), dialogStyle); ContainerWindow &client_area = wf->GetClientAreaWindow(); PixelRect r = client_area.get_client_rect(); WindowStyle grid_view_style; grid_view_style.ControlParent(); grid_view = new GridView(client_area, r.left, r.top, r.right - r.left, r.bottom - r.top, dialog_look, grid_view_style); WindowStyle buttonStyle; buttonStyle.TabStop(); for (unsigned i = 0; i < menu->MAX_ITEMS; ++i) { if (buttons.full()) continue; const MenuItem &menuItem = (*menu)[i]; if (!menuItem.IsDefined()) continue; TCHAR buffer[100]; ButtonLabel::Expanded 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; WndButton *button = new WndCustomButton(*grid_view, dialog_look, expanded.text, button_rc, buttonStyle, OnButtonClicked); button->set_enabled(expanded.enabled); buttons.append(button); events.append(menuItem.event); } grid_view->SetItems(buttons); SetFormDefaultFocus(); SetFormCaption(); wf->SetKeyDownNotify(FormKeyDown); wf->ShowModal(); for (auto it = buttons.begin(), end = buttons.end(); it != end; ++it) delete *it; buttons.clear(); events.clear(); delete wf; delete grid_view; }
/** * This function returns a WndForm created either from the ressources or * from the XML file in XCSoarData(if found) * @param LookUpTable The CallBackTable * @param FileName The XML filename to search for in XCSoarData * @param Parent The parent window (e.g. XCSoarInterface::main_window) * @param resource The resource to look for * @param targetRect The area where to move the dialog if not parent * @return The WndForm object */ WndForm * LoadDialog(const CallBackTableEntry *lookup_table, SingleWindow &parent, const TCHAR *resource, const PixelRect *target_rc) { WndForm *form = NULL; // Find XML file or resource and load XML data out of it XMLNode *node = LoadXMLFromResource(resource); // TODO code: put in error checking here and get rid of exits in xmlParser // If XML error occurred -> Error messagebox + cancel assert(node != NULL); // If the main XMLNode is of type "Form" assert(StringIsEqual(node->getName(), _T("Form"))); // Determine the dialog size const TCHAR* caption = GetCaption(*node); const PixelRect rc = target_rc ? *target_rc : parent.get_client_rect(); ControlPosition pos = GetPosition(*node, rc, 0); ControlSize size = GetSize(*node, rc, pos); InitScaleWidth(size, rc); // Correct dialog size and position for dialog style switch (UIGlobals::GetDialogSettings().dialog_style) { case dsFullWidth: pos.x = rc.left; pos.y = rc.top; size.cx = rc.right - rc.left; // stretch form to full width of screen size.cy = rc.bottom - rc.top; break; case dsScaledCentered: pos = SetPositionCentered(pos, rc, size); break; case dsScaled: case dsFixed: break; case dsScaledBottom: size.cx = rc.right - rc.left; // stretch form to full width of screen pos.y = rc.bottom - size.cy; // position at bottom of screen break; } // Create the dialog WindowStyle style; style.Hide(); style.ControlParent(); PixelRect form_rc; form_rc.left = pos.x; form_rc.top = pos.y; form_rc.right = form_rc.left + size.cx; form_rc.bottom = form_rc.top + size.cy; form = new WndForm(parent, *xml_dialog_look, form_rc, caption, style); // Load the children controls LoadChildrenFromXML(*form, form->GetClientAreaWindow(), lookup_table, node); delete node; // If XML error occurred -> Error messagebox + cancel assert(!XMLNode::GlobalError); // Return the created form return form; }