void WidgetDialog::CreatePreliminary(SingleWindow &parent, const TCHAR *caption) { full = false; auto_size = true; WndForm::Create(parent, parent.GetClientRect(), caption, GetDialogStyle()); }
ProgressDialog::ProgressDialog(SingleWindow &parent, const DialogLook &dialog_look, const TCHAR *caption) :WndForm(parent, dialog_look, parent.GetClientRect(), caption), progress(GetClientAreaWindow()) { }
void WidgetDialog::CreateFull(SingleWindow &parent, const TCHAR *caption, Widget *widget) { Create(parent, caption, parent.GetClientRect(), widget); full = true; }
void ShowPortMonitor(SingleWindow &parent, const DialogLook &dialog_look, const TerminalLook &terminal_look, DeviceDescriptor &_device) { device = &_device; /* create the dialog */ WindowStyle dialog_style; dialog_style.Hide(); dialog_style.ControlParent(); TCHAR buffer[64]; StaticString<128> caption; caption.Format(_T("%s: %s"), _("Port monitor"), device->GetConfig().GetPortName(buffer, ARRAY_SIZE(buffer))); dialog = new WndForm(parent, dialog_look, parent.GetClientRect(), caption, dialog_style); ContainerWindow &client_area = dialog->GetClientAreaWindow(); ButtonPanel buttons(client_area, dialog_look); buttons.Add(_("Close"), OnCloseClicked); buttons.Add(_("Clear"), OnClearClicked); buttons.Add(_("Reconnect"), OnReconnectClicked); buttons.Add(_("Pause"), OnPauseClicked); const PixelRect rc = buttons.UpdateLayout(); /* create the terminal */ terminal = new TerminalWindow(terminal_look); terminal->set(dialog->GetClientAreaWindow(), rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); bridge = new PortTerminalBridge(*terminal); device->SetMonitor(bridge); paused = false; /* run it */ dialog->ShowModal(); device->SetMonitor(NULL); delete bridge; delete terminal; delete dialog; }
bool JobDialog(SingleWindow &parent, const DialogLook &dialog_look, const TCHAR *caption, Job &job, bool cancellable) { WindowStyle form_style; form_style.Hide(); WndForm form(parent, dialog_look, parent.GetClientRect(), caption); ContainerWindow &client_area = form.GetClientAreaWindow(); ProgressWindowOperation progress(client_area); DialogJobThread thread(progress, job, form); thread.Start(); JobCancelButton cancel_button(thread); if (cancellable) { ButtonWindowStyle style; style.TabStop(); PixelRect rc = client_area.GetClientRect(); rc.right -= Layout::Scale(2); rc.left = rc.right - Layout::Scale(78); rc.top += Layout::Scale(2); rc.bottom = rc.top + Layout::Scale(35); cancel_button.set(client_area, _("Cancel"), rc, style); cancel_button.SetFont(*dialog_look.button.font); cancel_button.BringToTop(); } int result = form.ShowModal(); thread.Cancel(); thread.Join(); return result == mrOK; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, #ifdef _WIN32_WCE LPWSTR lpCmdLine, #else LPSTR lpCmdLine2, #endif int nCmdShow) #endif { #ifdef ENABLE_CMDLINE #ifdef WIN32 Args args(GetCommandLine(), USAGE); #else Args args(argc, argv, USAGE); #endif ParseCommandLine(args); args.ExpectEnd(); #endif #if defined(ENABLE_RESOURCE_LOADER) && defined(USE_GDI) ResourceLoader::Init(hInstance); #endif #ifdef ENABLE_SCREEN ScreenGlobalInit screen_init; Layout::Initialize(640, 480); InitialiseFonts(); #endif #ifdef ENABLE_DIALOG dialog_settings.SetDefaults(); #endif #ifdef ENABLE_LOOK look = new Look(); look->Initialise(normal_font, bold_font, small_font); { UISettings ui_settings; ui_settings.SetDefaults(); look->InitialiseConfigured(ui_settings, normal_font, bold_font, small_font, small_font, monospace_font, normal_font, small_font, #ifndef GNAV small_font, #endif small_font); } dialog_look = &look->dialog; #elif defined(ENABLE_DIALOG_LOOK) dialog_look = new DialogLook(); dialog_look->Initialise(bold_font, normal_font, small_font, bold_font, bold_font, bold_font); #endif #ifdef ENABLE_XML_DIALOG SetXMLDialogLook(*dialog_look); #endif #ifdef ENABLE_DATA_PATH InitialiseDataPath(); #endif #ifdef ENABLE_PROFILE Profile::SetFiles(_T("")); Profile::Load(); #endif #ifdef ENABLE_MAIN_WINDOW main_window.Create(_T("Test"), {640, 480}); main_window.Show(); #endif Main(); #ifdef ENABLE_MAIN_WINDOW main_window.Destroy(); #endif #ifdef ENABLE_DATA_PATH DeinitialiseDataPath(); #endif #ifdef ENABLE_LOOK delete look; #elif defined(ENABLE_DIALOG_LOOK) delete dialog_look; #endif #ifdef ENABLE_SCREEN DeinitialiseFonts(); #endif return 0; }
void TaskManagerDialog::Create(SingleWindow &parent) { WndForm::Create(parent, parent.GetClientRect(), _("Task Manager")); task = protected_task_manager->TaskClone(); /* create the controls */ ContainerWindow &client_area = GetClientAreaWindow(); const TaskManagerLayout layout = CalculateTaskManagerLayout(client_area.GetClientRect()); task_view_position = layout.task_view; WindowStyle hidden; hidden.Hide(); task_view = new TaskMapWindow(UIGlobals::GetMapLook(), *this, MAP); task_view->Create(client_area, layout.task_view, hidden); ButtonWindowStyle button_style(hidden); button_style.TabStop(); target_button = new WndButton(client_area, GetLook(), _("Target"), layout.target_button, button_style, *this, TARGET); WindowStyle tab_style; tab_style.ControlParent(); tab_bar = new TabBarControl(client_area, GetLook(), layout.tab_bar, tab_style, layout.vertical); tab_bar->SetPageFlippedCallback([this]() { UpdateCaption(); }); /* create pages */ TaskPropertiesPanel *wProps = new TaskPropertiesPanel(*this, &task, &modified); TaskClosePanel *wClose = new TaskClosePanel(*this, &modified); TaskCalculatorPanel *wCalculator = new TaskCalculatorPanel(UIGlobals::GetDialogLook(), &modified); wCalculator->SetTargetButton(target_button); const MapLook &look = UIGlobals::GetMapLook(); Widget *wEdit = CreateTaskEditPanel(*this, look.task, look.airspace, &task, &modified); TaskMiscPanel *list_tab = new TaskMiscPanel(*this, &task, &modified); const bool enable_icons = CommonInterface::GetUISettings().dialog.tab_style == DialogSettings::TabStyle::Icon; const IconLook &icons = UIGlobals::GetIconLook(); const Bitmap *CalcIcon = enable_icons ? &icons.hBmpTabCalculator : NULL; const Bitmap *TurnPointIcon = enable_icons ? &icons.hBmpTabTask : NULL; const Bitmap *BrowseIcon = enable_icons ? &icons.hBmpTabWrench : NULL; const Bitmap *PropertiesIcon = enable_icons ? &icons.hBmpTabSettings : NULL; tab_bar->AddTab(wCalculator, _("Calculator"), CalcIcon); if (layout.vertical) { tab_bar->AddTab(wEdit, _("Turn Points"), TurnPointIcon); TurnpointTab = 1; tab_bar->AddTab(list_tab, _("Manage"), BrowseIcon); tab_bar->AddTab(wProps, _("Rules"), PropertiesIcon); PropertiesTab = 3; tab_bar->AddTab(wClose, _("Close")); tab_bar->SetCurrentPage(0); } else { tab_bar->AddTab(wClose, _("Close")); tab_bar->AddTab(wEdit, _("Turn Points"), TurnPointIcon); TurnpointTab = 2; tab_bar->AddTab(list_tab, _("Manage"), BrowseIcon); tab_bar->AddTab(wProps, _("Rules"), PropertiesIcon); PropertiesTab = 4; tab_bar->SetCurrentPage(0); } UpdateCaption(); }
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; }
bool dlgConfigInfoboxesShowModal(SingleWindow &parent, const DialogLook &dialog_look, InfoBoxLayout::Geometry geometry, InfoBoxSettings::Panel &data_r, bool allow_name_change) { current_preview = 0; data = data_r; PixelRect rc = parent.get_client_rect(); wf = new WndForm(parent, dialog_look, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); #ifdef _WIN32_WCE if (is_altair()) wf->SetKeyDownNotify(OnKeyDown); #endif ContainerWindow &client_area = wf->GetClientAreaWindow(); rc = client_area.get_client_rect(); InflateRect(&rc, Layout::FastScale(-2), Layout::FastScale(-2)); info_box_layout = InfoBoxLayout::Calculate(rc, geometry); WindowStyle preview_style; preview_style.enable_double_clicks(); for (unsigned i = 0; i < info_box_layout.count; ++i) { rc = info_box_layout.positions[i]; previews[i].set(client_area, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, preview_style); } rc = info_box_layout.remaining; WindowStyle style; style.control_parent(); EditWindowStyle edit_style; edit_style.tab_stop(); if (is_embedded() || Layout::scale_1024 < 2048) /* sunken edge doesn't fit well on the tiny screen of an embedded device */ edit_style.border(); else edit_style.sunken_edge(); const int x = rc.left; const unsigned width = rc.right - rc.left - Layout::FastScale(2); const unsigned height = Layout::Scale(22); const unsigned caption_width = Layout::Scale(60); int y = rc.top; ButtonWindowStyle button_style; button_style.tab_stop(); buttonPanelName = new WndButton(client_area, dialog_look, _T(""), x, y, width, height, button_style, OnNameAccess); buttonPanelName->set_enabled(allow_name_change); UpdatePanelName(); y += height; edit_select = new WndProperty(client_area, dialog_look, _("InfoBox"), x, y, width, height, caption_width, style, edit_style, NULL); DataFieldEnum *dfe = new DataFieldEnum(OnSelectAccess); for (unsigned i = 0; i < info_box_layout.count; ++i) { TCHAR label[32]; _stprintf(label, _T("%u"), i + 1); dfe->addEnumText(label, i); } edit_select->SetDataField(dfe); y += height; edit_content = new WndProperty(client_area, dialog_look, _("Content"), x, y, width, height, caption_width, style, edit_style, NULL); dfe = new DataFieldEnum(OnContentAccess); for (unsigned i = 0; i < InfoBoxFactory::NUM_TYPES; ++i) { const TCHAR *name = InfoBoxFactory::GetName(i); if (name != NULL) dfe->addEnumText(gettext(name), i); } dfe->Sort(0); edit_content->SetDataField(dfe); edit_content->SetOnHelpCallback(OnContentHelp); RefreshEditContent(); const unsigned button_width = Layout::Scale(60); const unsigned button_height = Layout::Scale(28); const int button_y = rc.bottom - button_height; int button_x = rc.left; WndButton *close_button = new WndButton(client_area, dialog_look, _("Close"), button_x, button_y, button_width, button_height, button_style, OnCloseClicked); button_x += button_width + Layout::Scale(2); WndButton *copy_button = new WndButton(client_area, dialog_look, _("Copy"), button_x, button_y, button_width, button_height, button_style, OnCopy); button_x += button_width + Layout::Scale(2); buttonPaste = new WndButton(client_area, dialog_look, _("Paste"), button_x, button_y, button_width, button_height, button_style, OnPaste); RefreshPasteButton(); int result = wf->ShowModal(); delete wf; delete buttonPanelName; delete edit_select; delete edit_content; delete close_button; delete copy_button; delete buttonPaste; bool changed = false; if (result == mrOK) { for (unsigned i = 0; i < InfoBoxSettings::Panel::MAX_CONTENTS; ++i) if (data.contents[i] != data_r.contents[i]) changed = true; changed |= (_tcscmp(data.name, data_r.name) != 0); if (changed) data_r = data; } return changed; }
void WndForm::Create(SingleWindow &main_window, const TCHAR *_caption, const WindowStyle style) { Create(main_window, main_window.GetClientRect(), _caption, style); }
void WidgetDialog::CreatePreliminary(SingleWindow &parent, const TCHAR *caption) { WndForm::Create(parent, parent.GetClientRect(), caption, GetDialogStyle()); }
bool dlgConfigInfoboxesShowModal(SingleWindow &parent, const DialogLook &dialog_look, const InfoBoxLook &_look, InfoBoxSettings::Geometry geometry, InfoBoxSettings::Panel &data_r, bool allow_name_change) { current_preview = 0; look = &_look; data = data_r; PixelRect rc = parent.GetClientRect(); wf = new WndForm(parent, dialog_look, rc); #ifdef _WIN32_WCE if (IsAltair()) wf->SetKeyDownFunction(OnKeyDown); #endif ContainerWindow &client_area = wf->GetClientAreaWindow(); rc = client_area.GetClientRect(); rc.Grow(Layout::FastScale(-2)); info_box_layout = InfoBoxLayout::Calculate(rc, geometry); WindowStyle preview_style; preview_style.EnableDoubleClicks(); for (unsigned i = 0; i < info_box_layout.count; ++i) { rc = info_box_layout.positions[i]; previews[i].Create(client_area, rc, preview_style); } rc = info_box_layout.remaining; WindowStyle style; style.TabStop(); PixelRect control_rc = rc; control_rc.right -= Layout::FastScale(2); const UPixelScalar height = Layout::Scale(22); const UPixelScalar caption_width = Layout::Scale(60); ButtonWindowStyle button_style; button_style.TabStop(); control_rc.bottom = control_rc.top + height; edit_name = new WndProperty(client_area, dialog_look, _("Name"), control_rc, caption_width, style); DataFieldString *dfs = new DataFieldString(allow_name_change ? (const TCHAR *)data.name : gettext(data.name)); edit_name->SetDataField(dfs); edit_name->SetReadOnly(!allow_name_change); control_rc.top = control_rc.bottom; control_rc.bottom = control_rc.top + height; edit_select = new WndProperty(client_area, dialog_look, _("InfoBox"), control_rc, caption_width, style); DataFieldEnum *dfe = new DataFieldEnum(OnSelectAccess); for (unsigned i = 0; i < info_box_layout.count; ++i) { TCHAR label[32]; _stprintf(label, _T("%u"), i + 1); dfe->addEnumText(label, i); } edit_select->SetDataField(dfe); control_rc.top += height; control_rc.bottom += height; edit_content = new WndProperty(client_area, dialog_look, _("Content"), control_rc, caption_width, style); dfe = new DataFieldEnum(OnContentAccess); for (unsigned i = InfoBoxFactory::MIN_TYPE_VAL; i < InfoBoxFactory::NUM_TYPES; i++) { const TCHAR *name = InfoBoxFactory::GetName((InfoBoxFactory::Type) i); const TCHAR *desc = InfoBoxFactory::GetDescription((InfoBoxFactory::Type) i); if (name != NULL) dfe->addEnumText(gettext(name), i, desc != NULL ? gettext(desc) : NULL); } dfe->EnableItemHelp(true); dfe->Sort(0); edit_content->SetDataField(dfe); control_rc.top += height; control_rc.bottom += height * 5; edit_content_description = new WndFrame(client_area, dialog_look, control_rc, style); RefreshEditContent(); const UPixelScalar button_width = Layout::Scale(60); const UPixelScalar button_height = Layout::Scale(28); PixelRect button_rc = rc; button_rc.right = button_rc.left + button_width; button_rc.top = button_rc.bottom - button_height; WndButton *close_button = new WndButton(client_area, dialog_look.button, _("Close"), button_rc, button_style, *wf, mrOK); button_rc.left += button_width + Layout::Scale(2); button_rc.right += button_width + Layout::Scale(2); WndButton *copy_button = new WndButton(client_area, dialog_look.button, _("Copy"), button_rc, button_style, OnCopy); button_rc.left += button_width + Layout::Scale(2); button_rc.right += button_width + Layout::Scale(2); buttonPaste = new WndButton(client_area, dialog_look.button, _("Paste"), button_rc, button_style, OnPaste); RefreshPasteButton(); int result = wf->ShowModal(); if (result == mrOK && allow_name_change) data.name = edit_name->GetDataField()->GetAsString(); delete wf; delete edit_name; delete edit_select; delete edit_content; delete close_button; delete copy_button; delete buttonPaste; bool changed = false; if (result == mrOK) { for (unsigned i = 0; i < InfoBoxSettings::Panel::MAX_CONTENTS; ++i) if (data.contents[i] != data_r.contents[i]) changed = true; changed |= (_tcscmp(data.name, data_r.name) != 0); if (changed) data_r = data; } return changed; }