void AnnoyingDialog::OnButton(wxCommandEvent& event) { if(!m_CheckBox) cbThrow(_T("Ow... null pointer.")); int id = event.GetId(); // convert IDs from standard buttons to dReturnType switch (id) { case wxID_YES: id = rtYES; break; case wxID_OK: id = rtOK; break; case wxID_NO: id = rtNO; break; case wxID_CANCEL: id = rtCANCEL; break; default: break; } if(m_CheckBox->IsChecked()) { ConfigManager* cfg = Manager::Get()->GetConfigManager(wxT("an_dlg")); ConfigManagerContainer::StringSet disabled = cfg->ReadSSet(wxT("/disabled_ret")); // if we are supposed to remember the users choice, save the button disabled.insert(m_Id + F(wxT(":%d"), m_DefRet == rtSAVE_CHOICE ? id : m_DefRet)); cfg->Write(wxT("/disabled_ret"), disabled); } EndModal(id); }
void EnvironmentSettingsDlg::EndModal(int retCode) { if (retCode == wxID_OK) { ConfigManager *cfg = Manager::Get()->GetConfigManager(_T("app")); ConfigManager *pcfg = Manager::Get()->GetConfigManager(_T("project_manager")); ConfigManager *mcfg = Manager::Get()->GetConfigManager(_T("message_manager")); ConfigManager *acfg = Manager::Get()->GetConfigManager(_T("an_dlg")); // tab "General" cfg->Write(_T("/environment/single_instance"), (bool) XRCCTRL(*this, "chkSingleInstance", wxCheckBox)->GetValue()); cfg->Write(_T("/environment/use_ipc"), (bool) XRCCTRL(*this, "chkUseIPC", wxCheckBox)->GetValue()); cfg->Write(_T("/environment/raise_via_ipc"), (bool) XRCCTRL(*this, "chkRaiseViaIPC", wxCheckBox)->GetValue()); cfg->Write(_T("/environment/check_associations"), (bool) XRCCTRL(*this, "chkAssociations", wxCheckBox)->GetValue()); cfg->Write(_T("/environment/check_modified_files"), (bool) XRCCTRL(*this, "chkModifiedFiles", wxCheckBox)->GetValue()); cfg->Write(_T("/environment/ignore_invalid_targets"),(bool) XRCCTRL(*this, "chkInvalidTargets", wxCheckBox)->GetValue()); cfg->Write(_T("/console_shell"), XRCCTRL(*this, "txtConsoleShell", wxTextCtrl)->GetValue()); cfg->Write(_T("/console_terminal"), XRCCTRL(*this, "txtConsoleTerm", wxTextCtrl)->GetValue()); // tab "View" cfg->Write(_T("/environment/blank_workspace"), (bool) XRCCTRL(*this, "rbAppStart", wxRadioBox)->GetSelection() ? true : false); pcfg->Write(_T("/open_files"), (int) XRCCTRL(*this, "rbProjectOpen", wxRadioBox)->GetSelection()); cfg->Write(_T("/environment/settings_size"), (int) XRCCTRL(*this, "rbSettingsIconsSize", wxRadioBox)->GetSelection()); mcfg->Write(_T("/auto_hide"), (bool) XRCCTRL(*this, "chkAutoHideMessages", wxCheckBox)->GetValue()); mcfg->Write(_T("/auto_show_search"), (bool) XRCCTRL(*this, "chkAutoShowMessagesOnSearch", wxCheckBox)->GetValue()); mcfg->Write(_T("/auto_show_build_warnings"), (bool) XRCCTRL(*this, "chkAutoShowMessagesOnWarn", wxCheckBox)->GetValue()); mcfg->Write(_T("/auto_show_build_errors"), (bool) XRCCTRL(*this, "chkAutoShowMessagesOnErr", wxCheckBox)->GetValue()); mcfg->Write(_T("/save_selection_change_in_mp"), (bool) XRCCTRL(*this, "chkSaveSelectionChangeInMP", wxCheckBox)->GetValue()); cfg->Write(_T("/open_containing_folder"), XRCCTRL(*this, "txtOpenFolder", wxTextCtrl)->GetValue()); cfg->Write(_T("/environment/view/dbl_clk_maximize"), (bool)XRCCTRL(*this, "chkDblClkMaximizes", wxCheckBox)->GetValue()); cfg->Write(_T("/environment/view/layout_to_toggle"), XRCCTRL(*this, "choLayoutToToggle", wxChoice)->GetStringSelection()); cfg->Write(_T("/locale/enable"), (bool) XRCCTRL(*this, "chkI18N", wxCheckBox)->GetValue()); const wxLanguageInfo *info = wxLocale::FindLanguageInfo(XRCCTRL(*this, "cbxLanguage", wxComboBox)->GetStringSelection()); if(info) cfg->Write(_T("/locale/language"), info->CanonicalName); else cfg->Write(_T("/locale/language"), wxEmptyString); mcfg->Write(_T("/log_font_size"), (int) XRCCTRL(*this, "spnLogFontSize", wxSpinCtrl)->GetValue()); cfg->Write(_T("/dialog_placement/do_place"), (bool) XRCCTRL(*this, "chkDoPlace", wxCheckBox)->GetValue()); cfg->Write(_T("/dialog_placement/dialog_position"), (int) XRCCTRL(*this, "chkPlaceHead", wxCheckBox)->GetValue() ? pdlHead : pdlCentre); // tab "Appearence" bool tab_switcher_mode = (bool) XRCCTRL(*this, "chkStackedBasedTabSwitching", wxCheckBox)->GetValue(); if (Manager::Get()->GetConfigManager(_T("app"))->ReadBool(_T("/environment/tabs_stacked_based_switching")) != tab_switcher_mode) { if (tab_switcher_mode) Manager::Get()->GetEditorManager()->RebuildNotebookStack(); else Manager::Get()->GetEditorManager()->DeleteNotebookStack(); } cfg->Write(_T("/environment/tabs_stacked_based_switching"), tab_switcher_mode); bool enableMousewheel = (bool) XRCCTRL(*this, "chkNBUseMousewheel",wxCheckBox)->GetValue(); cfg->Write(_T("/environment/tabs_use_mousewheel"), enableMousewheel); wxString key = XRCCTRL(*this, "txtMousewheelModifier", wxTextCtrl)->GetValue(); cfg->Write(_T("/environment/tabs_mousewheel_modifier"), key.IsEmpty()?_T("Ctrl"):key); cfg->Write(_T("/environment/tabs_mousewheel_advance"), (bool) XRCCTRL(*this, "rbNBModToAdvance", wxRadioButton)->GetValue()); cfg->Write(_T("/environment/tabs_invert_advance"), (bool) XRCCTRL(*this, "chkNBInvertAdvance", wxCheckBox)->GetValue()); cfg->Write(_T("/environment/tabs_invert_move"), (bool) XRCCTRL(*this, "chkNBInvertMove", wxCheckBox)->GetValue()); bool useToolTips = (bool)XRCCTRL(*this, "chkNBUseToolTips", wxCheckBox)->GetValue(); cfg->Write(_T("/environment/tabs_use_tooltips"),useToolTips); cfg->Write(_T("/environment/tabs_dwell_time"), (int) XRCCTRL(*this, "spnNBDwellTime", wxSpinCtrl)->GetValue()); cbAuiNotebook::AllowScrolling(enableMousewheel); cbAuiNotebook::UseToolTips(useToolTips); cbAuiNotebook::SetDwellTime(cfg->ReadInt(_T("/environment/tabs_dwell_time"), 1000)); cbAuiNotebook::SetModKeys(cfg->Read(_T("/environment/tabs_mousewheel_modifier"),_T("Ctrl"))); cbAuiNotebook::UseModToAdvance(cfg->ReadBool(_T("/environment/tabs_mousewheel_advance"),false)); cbAuiNotebook::InvertAdvanceDirection(cfg->ReadBool(_T("/environment/tabs_invert_advance"),false)); cbAuiNotebook::InvertMoveDirection(cfg->ReadBool(_T("/environment/tabs_invert_move"),false)); /* cfg->Write(_T("/environment/aui/border_size"), (int) XRCCTRL(*this, "spnAuiBorder", wxSpinCtrl)->GetValue()); cfg->Write(_T("/environment/aui/sash_size"), (int) XRCCTRL(*this, "spnAuiSash", wxSpinCtrl)->GetValue()); cfg->Write(_T("/environment/aui/caption_size"), (int) XRCCTRL(*this, "spnAuiCaption", wxSpinCtrl)->GetValue()); cfg->Write(_T("/environment/aui/active_caption_colour"), XRCCTRL(*this, "btnAuiActiveCaptionColour", wxButton)->GetBackgroundColour()); cfg->Write(_T("/environment/aui/active_caption_gradient_colour"), XRCCTRL(*this, "btnAuiActiveCaptionGradientColour", wxButton)->GetBackgroundColour()); cfg->Write(_T("/environment/aui/active_caption_text_colour"), XRCCTRL(*this, "btnAuiActiveCaptionTextColour", wxButton)->GetBackgroundColour()); cfg->Write(_T("/environment/aui/inactive_caption_colour"), XRCCTRL(*this, "btnAuiInactiveCaptionColour", wxButton)->GetBackgroundColour()); cfg->Write(_T("/environment/aui/inactive_caption_gradient_colour"), XRCCTRL(*this, "btnAuiInactiveCaptionGradientColour", wxButton)->GetBackgroundColour()); cfg->Write(_T("/environment/aui/inactive_caption_text_colour"), XRCCTRL(*this, "btnAuiInactiveCaptionTextColour", wxButton)->GetBackgroundColour()); m_pArt->SetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE, XRCCTRL(*this, "spnAuiBorder", wxSpinCtrl)->GetValue()); m_pArt->SetMetric(wxAUI_DOCKART_SASH_SIZE, XRCCTRL(*this, "spnAuiSash", wxSpinCtrl)->GetValue()); m_pArt->SetMetric(wxAUI_DOCKART_CAPTION_SIZE, XRCCTRL(*this, "spnAuiCaption", wxSpinCtrl)->GetValue()); m_pArt->SetColour(wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR, XRCCTRL(*this, "btnAuiActiveCaptionColour", wxButton)->GetBackgroundColour()); m_pArt->SetColour(wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR, XRCCTRL(*this, "btnAuiActiveCaptionGradientColour", wxButton)->GetBackgroundColour()); m_pArt->SetColour(wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR, XRCCTRL(*this, "btnAuiActiveCaptionTextColour", wxButton)->GetBackgroundColour()); m_pArt->SetColour(wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR, XRCCTRL(*this, "btnAuiInactiveCaptionColour", wxButton)->GetBackgroundColour()); m_pArt->SetColour(wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR,XRCCTRL(*this, "btnAuiInactiveCaptionGradientColour", wxButton)->GetBackgroundColour()); m_pArt->SetColour(wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR, XRCCTRL(*this, "btnAuiInactiveCaptionTextColour", wxButton)->GetBackgroundColour()); */ // tab "Dialogs" wxCheckListBox* lb = XRCCTRL(*this, "chkDialogs", wxCheckListBox); ConfigManagerContainer::StringSet dialogs = acfg->ReadSSet(_T("/disabled")); for (int i = 0; i < (int)lb->GetCount(); ++i) { if (lb->IsChecked(i)) dialogs.erase(lb->GetString(i)); } acfg->Write(_T("/disabled"), dialogs); // tab "Network" cfg->Write(_T("/network_proxy"), XRCCTRL(*this, "txtProxy", wxTextCtrl)->GetValue()); // finally, apply settings in all plugins' panels for (size_t i = 0; i < m_PluginPanels.GetCount(); ++i) { cbConfigurationPanel* panel = m_PluginPanels[i]; panel->OnApply(); } } else { // finally, cancel settings in all plugins' panels for (size_t i = 0; i < m_PluginPanels.GetCount(); ++i) { cbConfigurationPanel* panel = m_PluginPanels[i]; panel->OnCancel(); } } wxScrollingDialog::EndModal(retCode); }
EnvironmentSettingsDlg::EnvironmentSettingsDlg(wxWindow* parent, wxAuiDockArt* art) : m_pArt(art) { ConfigManager *cfg = Manager::Get()->GetConfigManager(_T("app")); ConfigManager *pcfg = Manager::Get()->GetConfigManager(_T("project_manager")); ConfigManager *mcfg = Manager::Get()->GetConfigManager(_T("message_manager")); ConfigManager *acfg = Manager::Get()->GetConfigManager(_T("an_dlg")); wxXmlResource::Get()->LoadObject(this, parent, _T("dlgEnvironmentSettings"),_T("wxScrollingDialog")); int sel = cfg->ReadInt(_T("/environment/settings_size"), 0); wxListbook* lb = XRCCTRL(*this, "nbMain", wxListbook); SetSettingsIconsStyle(lb->GetListView(), (SettingsIconsStyle)sel); LoadListbookImages(); // this setting is not available under wxGTK #ifndef __WXMSW__ XRCCTRL(*this, "rbSettingsIconsSize", wxRadioBox)->Enable(false); #endif // tab "General" XRCCTRL(*this, "chkSingleInstance", wxCheckBox)->SetValue(cfg->ReadBool(_T("/environment/single_instance"), true)); #ifdef __WXMSW__ static_cast<wxStaticBoxSizer*>(XRCCTRL(*this, "chkUseIPC", wxCheckBox)->GetContainingSizer())->GetStaticBox()->SetLabel(_("Dynamic Data Exchange (will take place after restart)")); #endif bool useIpc = cfg->ReadBool(_T("/environment/use_ipc"), true); XRCCTRL(*this, "chkUseIPC", wxCheckBox)->SetValue(useIpc); XRCCTRL(*this, "chkRaiseViaIPC", wxCheckBox)->SetValue(cfg->ReadBool(_T("/environment/raise_via_ipc"), true)); XRCCTRL(*this, "chkRaiseViaIPC", wxCheckBox)->Enable(useIpc); XRCCTRL(*this, "chkAssociations", wxCheckBox)->SetValue(cfg->ReadBool(_T("/environment/check_associations"), true)); XRCCTRL(*this, "chkModifiedFiles", wxCheckBox)->SetValue(cfg->ReadBool(_T("/environment/check_modified_files"), true)); XRCCTRL(*this, "chkInvalidTargets", wxCheckBox)->SetValue(cfg->ReadBool(_T("/environment/ignore_invalid_targets"), true)); XRCCTRL(*this, "rbAppStart", wxRadioBox)->SetSelection(cfg->ReadBool(_T("/environment/blank_workspace"), true) ? 1 : 0); wxTextCtrl* txt = XRCCTRL(*this, "txtConsoleTerm", wxTextCtrl); txt->SetValue(cfg->Read(_T("/console_terminal"), DEFAULT_CONSOLE_TERM)); #ifdef __WXMSW__ // under win32, this option is not needed, so disable it txt->Enable(false); #endif txt = XRCCTRL(*this, "txtConsoleShell", wxTextCtrl); txt->SetValue(cfg->Read(_T("/console_shell"), DEFAULT_CONSOLE_SHELL)); #ifdef __WXMSW__ // under win32, this option is not needed, so disable it txt->Enable(false); #endif #if defined __WXMSW__ const wxString openFolderCmds = _T("explorer.exe /select,"); #elif defined __WXMAC__ const wxString openFolderCmds = _T("open -R"); #else const wxString openFolderCmds = _T("xdg-open"); #endif XRCCTRL(*this, "txtOpenFolder", wxTextCtrl)->SetValue(cfg->Read(_T("/open_containing_folder"), openFolderCmds)); // tab "View" bool do_place = cfg->ReadBool(_T("/dialog_placement/do_place"), false); XRCCTRL(*this, "chkDoPlace", wxCheckBox)->SetValue(do_place); XRCCTRL(*this, "chkPlaceHead", wxCheckBox)->SetValue(cfg->ReadInt(_T("/dialog_placement/dialog_position"), 0) == pdlHead ? 1 : 0); XRCCTRL(*this, "chkPlaceHead", wxCheckBox)->Enable(do_place); XRCCTRL(*this, "rbProjectOpen", wxRadioBox)->SetSelection(pcfg->ReadInt(_T("/open_files"), 1)); XRCCTRL(*this, "rbSettingsIconsSize", wxRadioBox)->SetSelection(cfg->ReadInt(_T("/environment/settings_size"), 0)); XRCCTRL(*this, "spnLogFontSize", wxSpinCtrl)->SetValue(mcfg->ReadInt(_T("/log_font_size"), 8)); bool en = mcfg->ReadBool(_T("/auto_hide"), false); XRCCTRL(*this, "chkAutoHideMessages", wxCheckBox)->SetValue(en); XRCCTRL(*this, "chkAutoShowMessagesOnSearch", wxCheckBox)->SetValue(mcfg->ReadBool(_T("/auto_show_search"), true)); XRCCTRL(*this, "chkAutoShowMessagesOnWarn", wxCheckBox)->SetValue(mcfg->ReadBool(_T("/auto_show_build_warnings"), true)); XRCCTRL(*this, "chkAutoShowMessagesOnErr", wxCheckBox)->SetValue(mcfg->ReadBool(_T("/auto_show_build_errors"), true)); XRCCTRL(*this, "chkAutoShowMessagesOnSearch", wxCheckBox)->Enable(en); XRCCTRL(*this, "chkAutoShowMessagesOnWarn", wxCheckBox)->Enable(en); XRCCTRL(*this, "chkAutoShowMessagesOnErr", wxCheckBox)->Enable(en); XRCCTRL(*this, "chkSaveSelectionChangeInMP", wxCheckBox)->SetValue(mcfg->ReadBool(_T("/save_selection_change_in_mp"), true)); en = cfg->ReadBool(_T("/environment/view/dbl_clk_maximize"), true); XRCCTRL(*this, "chkDblClkMaximizes", wxCheckBox)->SetValue(en); int idx = Manager::Get()->GetAppFrame()->GetMenuBar()->FindMenu(_("&View")); if (idx != wxNOT_FOUND) { wxMenu* menuView = Manager::Get()->GetAppFrame()->GetMenuBar()->GetMenu(idx); int sub_idx = menuView->FindItem(_("Perspectives")); if (sub_idx != wxNOT_FOUND) { wxMenu* menuLayouts = menuView->FindItem(sub_idx)->GetSubMenu(); if (menuLayouts) { wxMenuItemList& items = menuLayouts->GetMenuItems(); for (size_t i = 0; i < items.GetCount() && ! items[i]->IsSeparator() ; ++i) { #if wxCHECK_VERSION(2,8,5) XRCCTRL(*this, "choLayoutToToggle", wxChoice)->Append(items[i]->GetLabelText(items[i]->GetItemLabelText())); #else XRCCTRL(*this, "choLayoutToToggle", wxChoice)->Append(items[i]->GetLabelFromText(items[i]->GetLabel())); #endif } } } } sel = XRCCTRL(*this, "choLayoutToToggle", wxChoice)->FindString( cfg->Read(_T("/environment/view/layout_to_toggle"),cfg->Read(_T("/main_frame/layout/default")))); XRCCTRL(*this, "choLayoutToToggle", wxChoice)->SetSelection(sel != wxNOT_FOUND ? sel : 0); XRCCTRL(*this, "choLayoutToToggle", wxChoice)->Enable(en); bool i18n=cfg->ReadBool(_T("/locale/enable"), false); XRCCTRL(*this, "chkI18N", wxCheckBox)->SetValue(i18n); wxDir locDir(ConfigManager::GetDataFolder() + _T("/locale")); wxString locFName; if(locDir.IsOpened() && locDir.GetFirst(&locFName/*, wxEmptyString, wxDIR_DIRS*/)) do { const wxLanguageInfo *info = wxLocale::FindLanguageInfo(locFName); if(info) { XRCCTRL(*this, "cbxLanguage", wxComboBox)->Append(info->Description); } }while(locDir.GetNext(&locFName)); XRCCTRL(*this, "cbxLanguage", wxComboBox)->Enable(i18n); const wxLanguageInfo *info = wxLocale::FindLanguageInfo(cfg->Read(_T("/locale/language"))); if(info) XRCCTRL(*this, "cbxLanguage", wxComboBox)->SetStringSelection(info->Description); // tab "Notebook" XRCCTRL(*this, "chkStackedBasedTabSwitching", wxCheckBox)->SetValue(cfg->ReadBool(_T("/environment/tabs_stacked_based_switching"), 0)); bool enableTabMousewheel = cfg->ReadBool(_T("/environment/tabs_use_mousewheel"),true); bool modToAdvance = cfg->ReadBool(_T("/environment/tabs_mousewheel_advance"),false); XRCCTRL(*this, "chkNBUseMousewheel", wxCheckBox)->SetValue(enableTabMousewheel); XRCCTRL(*this, "rbNBModToAdvance", wxRadioButton)->SetValue(modToAdvance); XRCCTRL(*this, "rbNBModToMove", wxRadioButton)->SetValue(!modToAdvance); XRCCTRL(*this, "chkNBInvertAdvance", wxCheckBox)->SetValue(cfg->ReadBool(_T("/environment/tabs_invert_advance"),false)); XRCCTRL(*this, "chkNBInvertMove", wxCheckBox)->SetValue(cfg->ReadBool(_T("/environment/tabs_invert_move"),false)); XRCCTRL(*this, "txtMousewheelModifier", wxTextCtrl)->SetValue(cfg->Read(_T("/environment/tabs_mousewheel_modifier"),_T("Ctrl"))); XRCCTRL(*this, "txtMousewheelModifier", wxTextCtrl)->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(EnvironmentSettingsDlg::OnMousewheelModifier)); XRCCTRL(*this, "rbNBModToAdvance", wxRadioButton)->Enable(enableTabMousewheel); XRCCTRL(*this, "rbNBModToMove", wxRadioButton)->Enable(enableTabMousewheel); XRCCTRL(*this, "chkNBInvertAdvance", wxCheckBox)->Enable(enableTabMousewheel); XRCCTRL(*this, "chkNBInvertMove", wxCheckBox)->Enable(enableTabMousewheel); XRCCTRL(*this, "txtMousewheelModifier", wxTextCtrl)->Enable(enableTabMousewheel); bool useToolTips = cfg->ReadBool(_T("/environment/tabs_use_tooltips"),true); XRCCTRL(*this, "chkNBUseToolTips", wxCheckBox)->SetValue(useToolTips); XRCCTRL(*this, "spnNBDwellTime", wxSpinCtrl)->SetValue(cfg->ReadInt(_T("/environment/tabs_dwell_time"), 1000)); XRCCTRL(*this, "spnNBDwellTime", wxSpinCtrl)->Enable(useToolTips); // tab "Docking" /* XRCCTRL(*this, "spnAuiBorder", wxSpinCtrl)->SetValue(cfg->ReadInt(_T("/environment/aui/border_size"), m_pArt->GetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE))); XRCCTRL(*this, "spnAuiSash", wxSpinCtrl)->SetValue(cfg->ReadInt(_T("/environment/aui/sash_size"), m_pArt->GetMetric(wxAUI_DOCKART_SASH_SIZE))); XRCCTRL(*this, "spnAuiCaption", wxSpinCtrl)->SetValue(cfg->ReadInt(_T("/environment/aui/caption_size"), m_pArt->GetMetric(wxAUI_DOCKART_CAPTION_SIZE))); XRCCTRL(*this, "btnAuiActiveCaptionColour", wxButton)->SetBackgroundColour(cfg->ReadColour(_T("/environment/aui/active_caption_colour"), m_pArt->GetColour(wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR))); XRCCTRL(*this, "btnAuiActiveCaptionGradientColour", wxButton)->SetBackgroundColour(cfg->ReadColour(_T("/environment/aui/active_caption_gradient_colour"), m_pArt->GetColour(wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR))); XRCCTRL(*this, "btnAuiActiveCaptionTextColour", wxButton)->SetBackgroundColour(cfg->ReadColour(_T("/environment/aui/active_caption_text_colour"), m_pArt->GetColour(wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR))); XRCCTRL(*this, "btnAuiInactiveCaptionColour", wxButton)->SetBackgroundColour(cfg->ReadColour(_T("/environment/aui/inactive_caption_colour"), m_pArt->GetColour(wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR))); XRCCTRL(*this, "btnAuiInactiveCaptionGradientColour", wxButton)->SetBackgroundColour(cfg->ReadColour(_T("/environment/aui/inactive_caption_gradient_colour"), m_pArt->GetColour(wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR))); XRCCTRL(*this, "btnAuiInactiveCaptionTextColour", wxButton)->SetBackgroundColour(cfg->ReadColour(_T("/environment/aui/inactive_caption_text_colour"), m_pArt->GetColour(wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR))); */ // tab "Dialogs" wxCheckListBox* clb = XRCCTRL(*this, "chkDialogs", wxCheckListBox); clb->Clear(); ConfigManagerContainer::StringSet dialogs = acfg->ReadSSet(_T("/disabled")); for (ConfigManagerContainer::StringSet::iterator i = dialogs.begin(); i != dialogs.end(); ++i) clb->Append(*i); // tab "Network" XRCCTRL(*this, "txtProxy", wxTextCtrl)->SetValue(cfg->Read(_T("/network_proxy"))); // disable some windows-only settings, in other platforms #ifndef __WXMSW__ XRCCTRL(*this, "chkAssociations", wxCheckBox)->Enable(false); XRCCTRL(*this, "btnSetAssocs", wxButton)->Enable(false); XRCCTRL(*this, "btnManageAssocs", wxButton)->Enable(false); #endif // add all plugins configuration panels AddPluginPanels(); // make sure everything is laid out properly GetSizer()->SetSizeHints(this); CentreOnParent(); }
void AnnoyingDialog::Init(const wxString &caption, const wxString &id, const wxString& message, const wxArtID icon, dStyle style, const wxString& b1, const wxString& b2, const wxString& b3) { m_CheckBox = nullptr; m_DontAnnoy = false; m_Id = id; static_assert(wxMinimumVersion<2,8,12>::eval, "wxWidgets 2.8.12 is required"); ConfigManagerContainer::StringSet disabled; ConfigManager* cfg = Manager::Get()->GetConfigManager(wxT("an_dlg")); if (cfg->Exists(wxT("/disabled_ret"))) { // new config style, includes return code in format: // "id:dReturnType" // example: // "Question XYZ?:4" disabled = cfg->ReadSSet(wxT("/disabled_ret")); } else { // if the new config key does not exist, read from the old one // old keys are in format: // "id" disabled = cfg->ReadSSet(wxT("/disabled")); // and copy it to the new one cfg->Write(wxT("/disabled_ret"), disabled); // we do not do an in place upgrade of the format to maintain // compatibility with previous versions } ConfigManagerContainer::StringSet::const_iterator it = disabled.lower_bound(m_Id); if (it != disabled.end()) { if (*it == m_Id) { // upgrade old settings m_DontAnnoy = true; if (m_DefRet == rtSAVE_CHOICE) m_DefRet = rtYES; // default value disabled.erase(it); disabled.insert(m_Id + F(wxT(":%d"), m_DefRet)); // save updated format cfg->Write(wxT("/disabled_ret"), disabled); return; } else if (it->BeforeLast(wxT(':')) == m_Id) { m_DontAnnoy = true; // read the saved choice and store it for ShowModal() to use long ret = rtSAVE_CHOICE; if (it->AfterLast(wxT(':')).ToLong(&ret) && ret != rtSAVE_CHOICE) { Manager::Get()->GetLogManager()->Log(*it); m_DefRet = (dReturnType)ret; } else if (m_DefRet == rtSAVE_CHOICE) m_DefRet = rtYES; // default value return; } } wxBoxSizer *outerSizer = new wxBoxSizer( wxVERTICAL ); wxFlexGridSizer *mainArea = new wxFlexGridSizer(2, 0, 0); wxStaticBitmap *bitmap = new wxStaticBitmap(this, -1, wxArtProvider::GetBitmap(icon, wxART_MESSAGE_BOX), wxDefaultPosition); mainArea->Add(bitmap, 0, wxALL, 5); wxStaticText *txt = new wxStaticText(this, -1, message, wxDefaultPosition, wxDefaultSize, 0); mainArea->Add( txt, 0, wxALIGN_CENTER|wxALL, 5 ); mainArea->Add( 1, 1, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 ); int numButtons = 0; dReturnType id1 = rtINVALID; dReturnType id2 = rtINVALID; dReturnType id3 = rtINVALID; wxString bTxt1; wxString bTxt2; wxString bTxt3; if(style == OK || style == ONE_BUTTON) { numButtons = 1; // only one choice, so set m_DefRet m_DefRet = (style == OK ? rtOK : rtONE); id1 = m_DefRet; bTxt1 = b1.IsEmpty() ? wxString(_("&OK")) : b1; } else if(style == YES_NO || style == OK_CANCEL || style == TWO_BUTTONS) { numButtons = 2; id1 = (style == YES_NO ? rtYES : (style == OK_CANCEL ? rtOK : rtONE)); id2 = (style == YES_NO ? rtNO : (style == OK_CANCEL ? rtCANCEL : rtTWO)); bTxt1 = b1.IsEmpty() ? (style == YES_NO ? wxString(_("&Yes")) : wxString(_("&OK"))) : b1; bTxt2 = b2.IsEmpty() ? (style == YES_NO ? wxString(_("&No")) : wxString(_("&Cancel"))) : b2; // this is the default, so apply correct return type (if it was not set) if (m_DefRet == rtYES) m_DefRet = id1; } else if(style == YES_NO_CANCEL || style == THREE_BUTTONS) { numButtons = 3; id1 = (style == YES_NO_CANCEL ? rtYES : rtONE); id2 = (style == YES_NO_CANCEL ? rtNO : rtTWO); id3 = (style == YES_NO_CANCEL ? rtCANCEL : rtTHREE); bTxt1 = b1.IsEmpty() ? wxString(_("&Yes")) : b1; bTxt2 = b2.IsEmpty() ? wxString(_("&No")) : b2; bTxt3 = b3.IsEmpty() ? wxString(_("&Cancel")) : b3; } else cbThrow(wxString(_T("Fatal error:\nUndefined style in dialog ")) << caption); wxSizer* buttonSizer = nullptr; if (style < ONE_BUTTON) // standard buttons? use wxStdDialogButtonSizer { wxStdDialogButtonSizer *buttonArea = new wxStdDialogButtonSizer(); wxButton* but1 = new wxButton(this, id1 == rtYES ? wxID_YES : wxID_OK, bTxt1, wxDefaultPosition, wxDefaultSize, 0); but1->SetDefault(); buttonArea->AddButton(but1); if(numButtons > 1) { wxButton* but2 = new wxButton(this, id2 == rtNO ? wxID_NO : wxID_CANCEL, bTxt2, wxDefaultPosition, wxDefaultSize, 0); if (id2 == m_DefRet) but2->SetDefault(); buttonArea->AddButton(but2); } if(numButtons > 2) { wxButton* but3 = new wxButton(this, wxID_CANCEL, bTxt3, wxDefaultPosition, wxDefaultSize, 0); if (id3 == m_DefRet) but3->SetDefault(); buttonArea->AddButton(but3); } buttonArea->Realize(); buttonSizer = buttonArea; } else { // wxStdDialogButtonSizer accepts only standard IDs for its buttons, so we can't use // it with custom buttons buttonSizer = new wxBoxSizer(wxHORIZONTAL); wxButton *but1 = new wxButton(this, id1, bTxt1, wxDefaultPosition, wxDefaultSize, 0); but1->SetDefault(); buttonSizer->Add(but1, 0, wxRIGHT, 5); if(numButtons > 1) { wxButton *but2 = new wxButton(this, id2, bTxt2, wxDefaultPosition, wxDefaultSize, 0); if (id2 == m_DefRet) but2->SetDefault(); buttonSizer->Add(but2, 0, wxRIGHT, 5); } if(numButtons > 2) { wxButton *but3 = new wxButton(this, id3, bTxt3, wxDefaultPosition, wxDefaultSize, 0); if (id3 == m_DefRet) but3->SetDefault(); buttonSizer->Add(but3, 0, wxRIGHT, 5); } } outerSizer->Add( mainArea, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); outerSizer->Add( buttonSizer, 0, wxALIGN_CENTER_HORIZONTAL); m_CheckBox = new wxCheckBox(this, wxID_ANY, _("Don't annoy me again!"), wxDefaultPosition, wxDefaultSize, 0); outerSizer->Add(m_CheckBox, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxBOTTOM, 5); SetSizer( outerSizer ); outerSizer->SetSizeHints(this); Centre(); }