LocalOptionsConfig::LocalOptionsConfig(OptionsConfigPtr opts, wxXmlNode* node) { // Used for reading local values, which are merged into the passed OptionsConfigPtr only if valid if(node) { bool answer; wxString str; long l; if(XmlUtils::ReadBoolIfExists(node, wxT("DisplayFoldMargin"), answer)) { opts->SetDisplayFoldMargin(answer); } if(XmlUtils::ReadBoolIfExists(node, wxT("DisplayBookmarkMargin"), answer)) { opts->SetDisplayBookmarkMargin(answer); } if(XmlUtils::ReadBoolIfExists(node, wxT("HighlightCaretLine"), answer)) { opts->SetHighlightCaretLine(answer); } if(XmlUtils::ReadBoolIfExists(node, wxT("EditorTrimEmptyLines"), answer)) { opts->SetTrimLine(answer); } if(XmlUtils::ReadBoolIfExists(node, wxT("EditorAppendLf"), answer)) { opts->SetAppendLF(answer); } if(XmlUtils::ReadBoolIfExists(node, wxT("ShowLineNumber"), answer)) { opts->SetDisplayLineNumbers(answer); } if(XmlUtils::ReadBoolIfExists(node, wxT("IndentationGuides"), answer)) { opts->SetShowIndentationGuidelines(answer); } if(XmlUtils::ReadBoolIfExists(node, wxT("IndentUsesTabs"), answer)) { opts->SetIndentUsesTabs(answer); } if(XmlUtils::ReadBoolIfExists(node, wxT("HideChangeMarkerMargin"), answer)) { opts->SetHideChangeMarkerMargin(answer); } if(XmlUtils::ReadLongIfExists(node, wxT("IndentWidth"), l)) { opts->SetIndentWidth(l); } if(XmlUtils::ReadLongIfExists(node, wxT("TabWidth"), l)) { opts->SetTabWidth(l); } if(XmlUtils::ReadLongIfExists(node, wxT("ShowWhitespaces"), l)) { opts->SetShowWhitspaces(l); } if(XmlUtils::ReadStringIfExists(node, wxT("EOLMode"), str)) { opts->SetEolMode(str); } if(XmlUtils::ReadStringIfExists(node, wxT("FileFontEncoding"), str)) { opts->SetFileFontEncoding(str); } } }
void EditorSettingsMiscPanel::Save(OptionsConfigPtr options) { if(m_showSplashScreen->IsChecked()) { clMainFrame::Get()->SetFrameFlag(true, CL_SHOW_SPLASH); } else { clMainFrame::Get()->SetFrameFlag(false, CL_SHOW_SPLASH); } // Set the theme support. // This option requires a restart of codelite options->SetMswTheme(m_checkBoxEnableMSWTheme->IsChecked()); if(m_oldMswUseTheme != m_checkBoxEnableMSWTheme->IsChecked()) { m_restartRequired = true; } clConfig::Get().Write(kConfigSingleInstance, m_singleAppInstance->IsChecked()); clConfig::Get().Write(kConfigCheckForNewVersion, m_versionCheckOnStartup->IsChecked()); clConfig::Get().Write(kConfigMaxItemsInFindReplaceDialog, ::wxStringToInt(m_maxItemsFindReplace->GetValue(), 15)); clConfig::Get().Write(kConfigMaxOpenedTabs, ::wxStringToInt(m_spinCtrlMaxOpenTabs->GetValue(), 15)); clConfig::Get().Write(kConfigRestoreLastSession, m_checkBoxRestoreSession->IsChecked()); clConfig::Get().Write(kConfigFrameTitlePattern, m_textCtrlPattern->GetValue()); bool oldUseSingleToolbar = !PluginManager::Get()->AllowToolbar(); EditorConfigST::Get()->SetInteger(wxT("UseSingleToolbar"), m_useSingleToolbar->IsChecked() ? 1 : 0); // check to see of the icon size was modified int oldIconSize(24); OptionsConfigPtr oldOptions = EditorConfigST::Get()->GetOptions(); if(oldOptions) { oldIconSize = oldOptions->GetIconsSize(); } int iconSize(24); if(m_toolbarIconSize->GetSelection() == 0) { iconSize = 16; } options->SetIconsSize(iconSize); bool setlocale = m_SetLocale->IsChecked(); options->SetUseLocale(setlocale); wxString newLocaleString = m_AvailableLocales->GetStringSelection(); // I don't think we should check if newLocaleString is empty; that's still useful information newLocaleString = newLocaleString.BeforeFirst(wxT(':')); // Store it as "fr_FR", not "fr_FR: French" options->SetPreferredLocale(newLocaleString); if((setlocale != m_oldSetLocale) || (newLocaleString != m_oldpreferredLocale)) { m_restartRequired = true; } // save file font encoding options->SetFileFontEncoding(m_fileEncoding->GetStringSelection()); TagsManagerST::Get()->SetEncoding(options->GetFileFontEncoding()); if(oldIconSize != iconSize || oldUseSingleToolbar != m_useSingleToolbar->IsChecked()) { EditorConfigST::Get()->SetInteger(wxT("LoadSavedPrespective"), 0); // notify the user m_restartRequired = true; } else { EditorConfigST::Get()->SetInteger(wxT("LoadSavedPrespective"), 1); } size_t flags = options->GetOptions(); size_t oldFlags = oldOptions->GetOptions(); // Keep the old icon-set flags, this is done for deciding whether we should // prompt the user for possible restart size_t oldIconFlags(0); size_t newIconFlags(0); if(oldFlags & OptionsConfig::Opt_IconSet_Classic) oldIconFlags |= OptionsConfig::Opt_IconSet_Classic; if(oldFlags & OptionsConfig::Opt_IconSet_FreshFarm) oldIconFlags |= OptionsConfig::Opt_IconSet_FreshFarm; if(oldFlags & OptionsConfig::Opt_IconSet_Classic_Dark) oldIconFlags |= OptionsConfig::Opt_IconSet_Classic_Dark; if(oldIconFlags == 0) oldIconFlags = OptionsConfig::Opt_IconSet_Classic; // Clear old settings flags &= ~(OptionsConfig::Opt_IconSet_Classic); flags &= ~(OptionsConfig::Opt_IconSet_FreshFarm); flags &= ~(OptionsConfig::Opt_IconSet_Classic_Dark); if(m_choiceIconSet->GetSelection() == 0) { newIconFlags |= OptionsConfig::Opt_IconSet_Classic; flags |= OptionsConfig::Opt_IconSet_Classic; } else if(m_choiceIconSet->GetSelection() == 2) { newIconFlags |= OptionsConfig::Opt_IconSet_Classic_Dark; flags |= OptionsConfig::Opt_IconSet_Classic_Dark; } else { // 1 newIconFlags |= OptionsConfig::Opt_IconSet_FreshFarm; flags |= OptionsConfig::Opt_IconSet_FreshFarm; } clConfig::Get().Write("RedirectLogOutput", m_redirectLogOutput->IsChecked()); clConfig::Get().Write("PromptForNewReleaseOnly", m_checkBoxPromptReleaseOnly->IsChecked()); options->SetOptions(flags); m_restartRequired = ((oldIconFlags != newIconFlags) || m_restartRequired); }