SetWindow::SetWindow(Window* parent, const SetP& set) : wxFrame(parent, wxID_ANY, _TITLE_("magic set editor"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) , current_panel(nullptr) , find_dialog(nullptr) , find_data(wxFR_DOWN) , number_of_recent_sets(0) { SetIcon(load_resource_icon(_("app"))); // initialize menu bar wxMenuBar* menuBar = new wxMenuBar(); IconMenu* menuFile = new IconMenu(); menuFile->Append(ID_FILE_NEW, _("new"), _MENU_("new set"), _HELP_("new set")); menuFile->Append(ID_FILE_OPEN, _("open"), _MENU_("open set"), _HELP_("open set")); menuFile->Append(ID_FILE_SAVE, _("save"), _MENU_("save set"), _HELP_("save set")); menuFile->Append(ID_FILE_SAVE_AS, _MENU_("save set as"), _HELP_("save set as")); menuExport = new IconMenu(); menuExport->Append(ID_FILE_EXPORT_HTML, _("export_html"), _MENU_("export html"), _HELP_("export html")); menuExport->Append(ID_FILE_EXPORT_IMAGE, _("export_image"), _MENU_("export image"), _HELP_("export image")); menuExport->Append(ID_FILE_EXPORT_IMAGES, _("export_images"), _MENU_("export images"), _HELP_("export images")); menuExport->Append(ID_FILE_EXPORT_APPR, _("export_apprentice"), _MENU_("export apprentice"),_HELP_("export apprentice")); menuExport->Append(ID_FILE_EXPORT_MWS, _("export_mws"), _MENU_("export mws"), _HELP_("export mws")); menuFile->Append(wxID_ANY, _("export"), _MENU_("export"), _HELP_("export"), wxITEM_NORMAL, menuExport); menuFile->AppendSeparator(); menuFile->Append(ID_FILE_CHECK_UPDATES, _MENU_("check updates"), _HELP_("check updates")); #if USE_SCRIPT_PROFILING menuFile->Append(ID_FILE_PROFILER, _MENU_("show profiler"), _HELP_("show profiler")); #endif // menuFile->Append(ID_FILE_INSPECT, _("Inspect Internal Data..."), _("Shows a the data in the set using a tree structure")); // menuFile->AppendSeparator(); menuFile->Append(ID_FILE_RELOAD, _MENU_("reload data"), _HELP_("reload data")); menuFile->AppendSeparator(); menuFile->Append(ID_FILE_PRINT_PREVIEW, _("print_preview"), _MENU_("print preview"), _HELP_("print preview")); menuFile->Append(ID_FILE_PRINT, _("print"), _MENU_("print"), _HELP_("print")); menuFile->AppendSeparator(); // recent files go here menuFile->AppendSeparator(); menuFile->Append(ID_FILE_EXIT, _MENU_("exit"), _HELP_("exit")); menuBar->Append(menuFile, _MENU_("file")); IconMenu* menuEdit = new IconMenu(); menuEdit->Append(ID_EDIT_UNDO, _("undo"), _MENU_1_("undo",wxEmptyString), _HELP_("undo")); menuEdit->Append(ID_EDIT_REDO, _("redo"), _MENU_1_("redo",wxEmptyString), _HELP_("redo")); menuEdit->AppendSeparator(); menuEdit->Append(ID_EDIT_CUT, _("cut"), _MENU_("cut"), _HELP_("cut")); menuEdit->Append(ID_EDIT_COPY, _("copy"), _MENU_("copy"), _HELP_("copy")); menuEdit->Append(ID_EDIT_PASTE, _("paste"), _MENU_("paste"), _HELP_("paste")); menuEdit->AppendSeparator(); menuEdit->Append(ID_EDIT_FIND, _("find"), _MENU_("find"), _HELP_("find")); menuEdit->Append(ID_EDIT_FIND_NEXT, _MENU_("find next"), _HELP_("find next")); menuEdit->Append(ID_EDIT_REPLACE, _MENU_("replace"), _HELP_("replace")); menuEdit->Append(ID_EDIT_AUTO_REPLACE, _MENU_("auto replace"), _HELP_("auto replace")); menuEdit->AppendSeparator(); menuEdit->Append(ID_EDIT_PREFERENCES, _MENU_("preferences"), _HELP_("preferences")); menuBar->Append(menuEdit, _MENU_("edit")); IconMenu* menuWindow = new IconMenu(); menuWindow->Append(ID_WINDOW_NEW, _MENU_("new window"), _HELP_("new window")); menuWindow->AppendSeparator(); menuBar->Append(menuWindow, _MENU_("window")); IconMenu* menuHelp = new IconMenu(); menuHelp->Append(ID_HELP_INDEX, _("help"), _MENU_("index"), _HELP_("index")); menuHelp->Append(ID_HELP_WEBSITE, _MENU_("website"), _HELP_("website")); menuHelp->AppendSeparator(); menuHelp->Append(ID_HELP_ABOUT, _MENU_("about"), _HELP_("about")); menuBar->Append(menuHelp, _MENU_("help")); SetMenuBar(menuBar); // status bar CreateStatusBar(); SetStatusText(_HELP_("welcome")); // tool bar wxToolBar* tb = CreateToolBar(wxTB_FLAT | wxNO_BORDER | wxTB_HORIZONTAL); tb->SetToolBitmapSize(wxSize(18,18)); tb->AddTool(ID_FILE_NEW, _(""), load_resource_tool_image(_("new")), wxNullBitmap, wxITEM_NORMAL, _TOOLTIP_("new set"), _HELP_("new set")); tb->AddTool(ID_FILE_OPEN, _(""), load_resource_tool_image(_("open")), wxNullBitmap, wxITEM_NORMAL, _TOOLTIP_("open set"), _HELP_("open set")); tb->AddTool(ID_FILE_SAVE, _(""), load_resource_tool_image(_("save")), wxNullBitmap, wxITEM_NORMAL, _TOOLTIP_("save set"), _HELP_("save set")); tb->AddSeparator(); tb->AddTool(ID_FILE_EXPORT, _(""), load_resource_tool_image(_("export")), wxNullBitmap, wxITEM_CHECK, _TOOLTIP_("export"), _HELP_("export")); tb->AddSeparator(); tb->AddTool(ID_EDIT_CUT, _(""), load_resource_tool_image(_("cut")), wxNullBitmap, wxITEM_NORMAL, _TOOLTIP_("cut"), _HELP_("cut")); tb->AddTool(ID_EDIT_COPY, _(""), load_resource_tool_image(_("copy")), wxNullBitmap, wxITEM_NORMAL, _TOOLTIP_("copy"), _HELP_("copy")); tb->AddTool(ID_EDIT_PASTE, _(""), load_resource_tool_image(_("paste")), wxNullBitmap, wxITEM_NORMAL, _TOOLTIP_("paste"), _HELP_("paste")); tb->AddSeparator(); tb->AddTool(ID_EDIT_UNDO, _(""), load_resource_tool_image(_("undo")), wxNullBitmap, wxITEM_NORMAL, _TOOLTIP_1_("undo",wxEmptyString)); tb->AddTool(ID_EDIT_REDO, _(""), load_resource_tool_image(_("redo")), wxNullBitmap, wxITEM_NORMAL, _TOOLTIP_1_("redo",wxEmptyString)); tb->AddSeparator(); tb->Realize(); // tab bar, sizer wxToolBar* tabBar = new wxToolBar(this, ID_TAB_BAR, wxDefaultPosition, wxDefaultSize, wxTB_FLAT | wxNO_BORDER | wxTB_HORIZONTAL | wxTB_HORZ_TEXT | wxTB_NOALIGN); wxSizer* s = new wxBoxSizer(wxVERTICAL); s->Add(tabBar, 0, wxEXPAND | wxBOTTOM, 0); SetSizer(s); #if defined(__WXMSW__) && defined(TBSTYLE_EX_DOUBLEBUFFER) // Use double buffering HWND hWND = (HWND)tabBar->GetHWND(); int style = ::SendMessage(hWND, TB_GETEXTENDEDSTYLE, 0, 0); ::SendMessage(hWND, TB_SETEXTENDEDSTYLE, style | LVS_EX_DOUBLEBUFFER, 0); #endif // panels addPanel(menuWindow, tabBar, new CardsPanel (this, wxID_ANY), 0, _("window_cards"), _("cards tab")); addPanel(menuWindow, tabBar, new StylePanel (this, wxID_ANY), 1, _("window_style"), _("style tab")); addPanel(menuWindow, tabBar, new SetInfoPanel (this, wxID_ANY), 2, _("window_set_info"), _("set info tab")); addPanel(menuWindow, tabBar, new KeywordsPanel (this, wxID_ANY), 3, _("window_keywords"), _("keywords tab")); addPanel(menuWindow, tabBar, new StatsPanel (this, wxID_ANY), 4, _("window_statistics"), _("stats tab")); addPanel(menuWindow, tabBar, new RandomPackPanel(this, wxID_ANY), 5, _("window_random_pack"),_("random pack tab")); addPanel(menuWindow, tabBar, new ConsolePanel (this, wxID_ANY), 6, _("window_console"), _("console tab")); selectPanel(ID_WINDOW_CARDS); // select cards panel // loose ends tabBar->Realize(); SetSize(settings.set_window_width, settings.set_window_height); if (settings.set_window_maximized) { Maximize(); } set_windows.push_back(this); // register this window // don't send update ui events to children // note: this still sends events for menu and toolbar items! wxUpdateUIEvent::SetMode(wxUPDATE_UI_PROCESS_SPECIFIED); SetExtraStyle(wxWS_EX_PROCESS_UI_UPDATES); tabBar->SetExtraStyle(wxWS_EX_PROCESS_UI_UPDATES); try { setSet(set); } catch (...) { // clean up! // if we don't destroy the panel we could crash in ~CardsPanel, since it expected // the insertSymbolMenu to be removed by destroyUI but not deleted. current_panel->destroyUI(GetToolBar(), GetMenuBar()); delete find_dialog; set_windows.erase(remove(set_windows.begin(), set_windows.end(), this)); throw; } current_panel->Layout(); }
void SymbolSymmetryEditor::initUI(wxToolBar* tb, wxMenuBar* mb) { copies = new wxSpinCtrl( tb, ID_COPIES, _("2"), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 2, 10, 2); copies->SetHelpText(_HELP_("copies")); copies->SetSize(50, -1); tb->AddSeparator(); tb->AddTool(ID_ADD_SYMMETRY, _TOOL_("add symmetry"), load_resource_tool_image(_("symmetry_add")), wxNullBitmap, wxITEM_CHECK, _TOOLTIP_("add symmetry"), _HELP_("add symmetry")); tb->AddTool(ID_REMOVE_SYMMETRY, _TOOL_("remove symmetry"), load_resource_tool_image(_("symmetry_remove")), wxNullBitmap, wxITEM_CHECK, _TOOLTIP_("remove symmetry"), _HELP_("remove symmetry")); tb->AddSeparator(); tb->AddTool(ID_SYMMETRY_ROTATION, _TOOL_("rotation"), load_resource_image(_("symmetry_rotation")), wxNullBitmap, wxITEM_CHECK, _TOOLTIP_("rotation"), _HELP_("rotation")); tb->AddTool(ID_SYMMETRY_REFLECTION, _TOOL_("reflection"), load_resource_image(_("symmetry_reflection")), wxNullBitmap, wxITEM_CHECK, _TOOLTIP_("reflection"), _HELP_("reflection")); tb->AddSeparator(); tb->AddControl(copies); tb->Realize(); control.SetCursor(*wxCROSS_CURSOR); resetActions(); // set status text }