// helper function which either writes the given boolean value option to the // config or deletes it from it if the new value is the same as default one // // notice that this only works for the frame values as there is no inheritance // with the frames profiles, otherwise deleting the value wouldn't have been // enough static void UpdateBoolConfigValue(wxConfigBase *pConf, const MOption opt, bool value) { // to compare boolean value with option value we need to cast it to long to // avoid ambiguities const long lValue = value; if ( GetOptionValue(pConf, opt) != lValue ) { // current value must be changed but how? if ( lValue == GetNumericDefault(opt) ) { // it's enough to just delete the existing value pConf->DeleteEntry(GetOptionName(opt)); } else // we must really write the new value to the config { pConf->Write(GetOptionName(opt), value); } } //else: we already have the right value in the config, nothing to do ASSERT_MSG( GetOptionValue(pConf, opt) == lValue, "didn't update a boolean option correctly" ); }
void MFolderFromProfile::SetSSL(SSLSupport ssl, SSLCert cert) { m_profile->writeEntry(GetOptionName(MP_USE_SSL), (long)ssl); if ( ssl != SSLSupport_None ) { m_profile->writeEntry(GetOptionName(MP_USE_SSL_UNSIGNED), cert == SSLCert_AcceptUnsigned); } //else: no need to write it there }
void wxMFrame::SaveState(const char *name, wxWindow *frame, int flags) { wxConfigBase *pConf = GetFrameOptionsConfig(name); if ( !pConf ) return; if ( flags & Save_State ) { wxFrame *fr = wxDynamicCast(frame, wxFrame); CHECK_RET( fr, "should have a frame when saving state" ); if ( flags & Save_View ) { UpdateBoolConfigValue(pConf, MP_SHOW_TOOLBAR, fr->GetToolBar() != NULL); UpdateBoolConfigValue(pConf, MP_SHOW_STATUSBAR, fr->GetStatusBar() != NULL); } UpdateBoolConfigValue(pConf, MP_SHOW_FULLSCREEN, fr->IsFullScreen()); // IsIconized() is broken in wxGTK, it returns TRUE sometimes when the // frame is not at all iconized - no idea why :-( #ifdef __WXGTK__ bool isIconized = false; #else bool isIconized = fr->IsIconized(); #endif bool isMaximized = fr->IsMaximized(); UpdateBoolConfigValue(pConf, MP_ICONISED, isIconized); UpdateBoolConfigValue(pConf, MP_MAXIMISED, isMaximized); if ( isMaximized || isIconized ) { // don't remember the coords in this case: wxWindows returns // something weird for them for iconized frames and we don't need // them for maximized ones anyhow return; } } int x, y; frame->GetPosition(&x, &y); pConf->Write(GetOptionName(MP_XPOS), (long)x); pConf->Write(GetOptionName(MP_YPOS), (long)y); frame->GetSize(&x,&y); pConf->Write(GetOptionName(MP_WIDTH), (long)x); pConf->Write(GetOptionName(MP_HEIGHT), (long)y); }
inline MOptionValue GetOptionValue(wxConfigBase *config, const MOption opt) { MOptionValue value; const char *name = GetOptionName(opt); if ( IsNumeric(opt) ) value.Set(config->Read(name, GetNumericDefault(opt))); else value.Set(config->Read(name, GetStringDefault(opt))); return value; }
bool wxMFrame::RestorePosition(const char *name, int *x, int *y, int *w, int *h, bool *i, bool *m) { // only i and m might be NULL CHECK( x && y && w && h, FALSE, _T("NULL pointer in wxMFrame::RestorePosition") ); wxConfigBase * const pConf = GetFrameOptionsConfig(name); if ( pConf != NULL ) { *x = GetOptionValue(pConf, MP_XPOS); *y = GetOptionValue(pConf, MP_YPOS); *w = GetOptionValue(pConf, MP_WIDTH); *h = GetOptionValue(pConf, MP_HEIGHT); if ( i ) *i = GetOptionValue(pConf, MP_ICONISED).GetBoolValue(); if ( m ) *m = GetOptionValue(pConf, MP_MAXIMISED).GetBoolValue(); // assume that if one entry existed, then the other existed too return pConf->HasEntry(GetOptionName(MP_XPOS)); } else { // it's ok if it's done the first time *x = GetNumericDefault(MP_XPOS); *y = GetNumericDefault(MP_YPOS); *w = GetNumericDefault(MP_WIDTH); *h = GetNumericDefault(MP_HEIGHT); if ( i ) *i = GetNumericDefault(MP_ICONISED) != 0; if ( m ) *m = GetNumericDefault(MP_MAXIMISED) != 0; return FALSE; } }
void wxMFrame::OnMenuCommand(int id) { // is it a module generated entry? if(id >= WXMENU_MODULES_BEGIN && id < WXMENU_MODULES_END) { ProcessModulesMenu(id); return; } switch(id) { case WXMENU_FILE_CLOSE: Close(); break; case WXMENU_FILE_COMPOSE_WITH_TEMPLATE: case WXMENU_FILE_COMPOSE: { wxString templ; if ( id == WXMENU_FILE_COMPOSE_WITH_TEMPLATE ) { templ = ChooseTemplateFor(MessageTemplate_NewMessage, this); if ( templ.empty() ) { // cancelled by user break; } } Profile_obj profile(GetFolderProfile()); Composer *composeView = Composer::CreateNewMessage(templ, profile); composeView->InitText(); } break; case WXMENU_FILE_SEND_OUTBOX: mApplication->SendOutbox(); break; case WXMENU_FILE_POST: { Profile_obj profile(GetFolderProfile()); Composer *composeView = Composer::CreateNewArticle(profile); composeView->InitText(); } case WXMENU_FILE_COLLECT: { FolderMonitor *mailCollector = mApplication->GetFolderMonitor(); if ( mailCollector ) { // when the user explicitly checks for the new mail, also update // the currently opened folder(s) and give the verbose messages mailCollector->CheckNewMail(FolderMonitor::Interactive | FolderMonitor::Opened); } } break; #ifdef USE_PYTHON case WXMENU_FILE_RUN_PYSCRIPT: { wxString path = mApplication->GetDataDir(); if ( !path.empty() ) path += DIR_SEPARATOR; path += _T("scripts"); wxString filename = MDialog_FileRequester ( _("Please select a Python script to run."), this, path, "", "py", "*.py", false, NULL /* profile */ ); if ( !filename.empty() ) { PythonRunScript(filename); } //else: cancelled by user } break; #endif // USE_PYTHON case WXMENU_FILE_AWAY_MODE: mApplication->SetAwayMode(GetMenuBar()->IsChecked(id)); break; case WXMENU_FILE_EXIT: // flush MEvent queues for safety MEventManager::DispatchPending(); if ( CanClose() ) { // this frame has been already asked whether it wants to exit, so // don't ask it again mApplication->AddToFramesOkToClose(this); // exit the application if other frames don't object mApplication->Exit(); } break; case WXMENU_FILE_IMPORT: ShowImportDialog(this); break; case WXMENU_EDIT_ADB: ShowAdbFrame(this); break; case WXMENU_EDIT_PREF: ShowOptionsDialog(this); break; case WXMENU_EDIT_FILTERS: (void) ConfigureAllFilters(this); break; case WXMENU_EDIT_MODULES: ShowModulesDialog(this); break; case WXMENU_EDIT_TEMPLATES: EditTemplates(this); break; case WXMENU_EDIT_RESTORE_PREF: (void)ShowRestoreDefaultsDialog(mApplication->GetProfile(), this); break; case WXMENU_EDIT_SAVE_PREF: if ( Profile::FlushAll() ) { wxLogStatus(this, _("Program preferences successfully saved.")); } else { ERRORMESSAGE((_("Couldn't save preferences."))); } break; case WXMENU_EDIT_CONFIG_SOURCES: ShowConfigSourcesDialog(this); break; case WXMENU_EDIT_EXPORT_PREF: case WXMENU_EDIT_IMPORT_PREF: { const bool doExport = id == WXMENU_EDIT_EXPORT_PREF; String path = MDialog_FileRequester ( doExport ? _("Choose file to export settings to") : _("Choose file to import settings from"), this, wxEmptyString, wxEmptyString, wxEmptyString, wxEmptyString, doExport // true => save, false => load ); if ( path.empty() ) break; ConfigSource_obj configSrc(ConfigSourceLocal::CreateDefault()), configDst(ConfigSourceLocal::CreateFile(path)); if ( !doExport ) { configSrc.Swap(configDst); } bool ok = ConfigSource::Copy(*configDst, *configSrc); if ( doExport ) { if ( ok ) { wxLogStatus(this, _("Settings successfully exported to file \"%s\""), path.c_str()); } else { wxLogError(_("Failed to export settings to the file \"%s\"."), path.c_str()); } } else // import { if ( ok ) { wxLogStatus(this, _("Settings successfully imported from \"%s\""), path.c_str()); } else { wxLogError(_("Failed to import settings from the file \"%s\"."), path.c_str()); } } } break; case WXMENU_HELP_ABOUT: MDialog_AboutDialog(this, false /* don't timeout */); break; case WXMENU_HELP_TIP: MDialog_ShowTip(this); break; case WXMENU_HELP_CONTEXT: MDialog_Message(_("Help not implemented for current context, yet."),this,_("Sorry")); break; case WXMENU_HELP_CONTENTS: mApplication->Help(MH_CONTENTS,this); break; case WXMENU_HELP_RELEASE_NOTES: mApplication->Help(MH_RELEASE_NOTES,this); break; case WXMENU_HELP_FAQ: mApplication->Help(MH_FAQ,this); break; case WXMENU_HELP_SEARCH: mApplication->Help(MH_SEARCH,this); break; case WXMENU_HELP_COPYRIGHT: mApplication->Help(MH_COPYRIGHT,this); break; // printing: case WXMENU_FILE_PRINT_SETUP: OnPrintSetup(); break; case WXMENU_FILE_PAGE_SETUP: OnPageSetup(); break; #ifdef USE_PS_PRINTING case WXMENU_FILE_PRINT_SETUP_PS: OnPrintSetup(); break; case WXMENU_FILE_PAGE_SETUP_PS: OnPageSetup(); break; #endif // USE_PS_PRINTING #ifdef USE_DIALUP case WXMENU_FILE_NET_ON: mApplication->GoOnline(); break; case WXMENU_FILE_NET_OFF: if(mApplication->CheckOutbox()) { if ( MDialog_YesNoDialog ( _("You have outgoing messages queued.\n" "Do you want to send them before going offline?"), this, MDIALOG_YESNOTITLE, M_DLG_YES_DEFAULT, M_MSGBOX_GO_OFFLINE_SEND_FIRST ) ) { mApplication->SendOutbox(); } } mApplication->GoOffline(); break; #endif // USE_DIALUP // create a new identity and edit it case WXMENU_FILE_IDENT_ADD: { wxString ident; if ( MInputBox(&ident, _("Mahogany: Create new identity"), _("Enter the identity name:"), this, "NewIdentity") ) { ShowIdentityDialog(ident, this); // update the identity combo in the toolbar of the main frame if // any (note that this will update all the other existing // identity combo boxes as they keep themselves in sync // internally) // // TODO: we really should have a virtual wxMFrame::GetIdentCombo // as we might not always create the main frame in the // future but other frames (e.g. composer) may have the // ident combo as well wxMFrame *frameTop = mApplication->TopLevelFrame(); if ( frameTop ) { wxToolBar *tbar = frameTop->GetToolBar(); if ( tbar ) { wxWindow *win = tbar->FindWindow(IDC_IDENT_COMBO); if ( win ) { wxChoice *combo = wxDynamicCast(win, wxChoice); combo->Append(ident); } } else { FAIL_MSG(_T("where is the main frames toolbar?")); } } wxLogStatus(this, _("Created new identity '%s'."), ident.c_str()); } } break; // change the current identity case WXMENU_FILE_IDENT_CHANGE: { wxArrayString identities = Profile::GetAllIdentities(); if ( identities.IsEmpty() ) { wxLogError(_("There are no existing identities to choose from.\n" "Please create an identity first.")); } else { identities.Insert(_("Default"), 0); int rc = MDialog_GetSelection ( _("Select the new identity"), MDIALOG_YESNOTITLE, identities, this ); if ( rc != -1 ) { Profile *profile = mApplication->GetProfile(); if ( rc == 0 ) { // restore the default identity profile->DeleteEntry(GetOptionName(MP_CURRENT_IDENTITY)); } else { wxString ident = identities[(size_t)rc]; profile->writeEntry(MP_CURRENT_IDENTITY, ident); } // update the identity combo in the toolbar if any wxWindow *win = GetToolBar()->FindWindow(IDC_IDENT_COMBO); if ( win ) { wxChoice *combo = wxDynamicCast(win, wxChoice); combo->SetSelection(rc); } // TODO: should update everything (all options might have // changed) } //else: dialog cancelled, nothing to do } } break; // edit an identity's parameters case WXMENU_FILE_IDENT_EDIT: { String ident; wxArrayString identities = Profile::GetAllIdentities(); if ( identities.IsEmpty() ) { wxLogError(_("There are no existing identities to edit.\n" "Please create an identity first.")); } else { if ( identities.GetCount() > 1 ) { int rc = MDialog_GetSelection ( _("Which identity would you like to edit?"), MDIALOG_YESNOTITLE, identities, this ); if ( rc != -1 ) { ident = identities[(size_t)rc]; } //else: dialog was cancelled } else // only one identity { // use the current one ident = READ_APPCONFIG_TEXT(MP_CURRENT_IDENTITY); } } if ( !ident.empty() ) { ShowIdentityDialog(ident, this); } } break; case WXMENU_FILE_IDENT_DELETE: { String ident; wxArrayString identities = Profile::GetAllIdentities(); if ( identities.IsEmpty() ) { wxLogError(_("There are no existing identities to delete.")); } else { int rc = MDialog_GetSelection ( _("Which identity would you like to delete?"), MDIALOG_YESNOTITLE, identities, this ); if ( rc != -1 ) { ident = identities[(size_t)rc]; } //else: cancelled } if ( !ident.empty() ) { Profile *profile = mApplication->GetProfile(); if ( ident == READ_APPCONFIG(MP_CURRENT_IDENTITY) ) { // can't keep this one profile->writeEntry(MP_CURRENT_IDENTITY, wxEmptyString); } // FIXME: will this really work? if there are objects which // use this identity the section will be recreated... String identSection; identSection << Profile::GetIdentityPath() << '/' << ident; profile->DeleteGroup(identSection); // update the identity combo in the toolbar if any wxWindow *win = GetToolBar()->FindWindow(IDC_IDENT_COMBO); if ( win ) { wxChoice *combo = wxDynamicCast(win, wxChoice); combo->Delete(combo->FindString(ident)); } wxLogStatus(this, _("Identity '%s' deleted."), ident.c_str()); } } break; case WXMENU_LANG_SET_DEFAULT: { static const wxFontEncoding encodingsSupported[] = { wxFONTENCODING_ISO8859_1, // West European (Latin1) wxFONTENCODING_ISO8859_2, // Central and East European (Latin2) wxFONTENCODING_ISO8859_3, // Esperanto (Latin3) wxFONTENCODING_ISO8859_4, // Baltic (old) (Latin4) wxFONTENCODING_ISO8859_5, // Cyrillic wxFONTENCODING_ISO8859_6, // Arabic wxFONTENCODING_ISO8859_7, // Greek wxFONTENCODING_ISO8859_8, // Hebrew wxFONTENCODING_ISO8859_9, // Turkish (Latin5) wxFONTENCODING_ISO8859_10, // Variation of Latin4 (Latin6) wxFONTENCODING_ISO8859_11, // Thai wxFONTENCODING_ISO8859_12, // doesn't exist currently, but put it // here anyhow to make all ISO8859 // consecutive numbers wxFONTENCODING_ISO8859_13, // Baltic (Latin7) wxFONTENCODING_ISO8859_14, // Latin8 wxFONTENCODING_ISO8859_15, // Latin9 (a.k.a. Latin0, includes euro) wxFONTENCODING_CP1250, // WinLatin2 wxFONTENCODING_CP1251, // WinCyrillic wxFONTENCODING_CP1252, // WinLatin1 wxFONTENCODING_CP1253, // WinGreek (8859-7) wxFONTENCODING_CP1254, // WinTurkish wxFONTENCODING_CP1255, // WinHebrew wxFONTENCODING_CP1256, // WinArabic wxFONTENCODING_CP1257, // WinBaltic (almost the same as Latin 7) wxFONTENCODING_KOI8, // == KOI8-R wxFONTENCODING_UTF7, // == UTF-7 wxFONTENCODING_UTF8, // == UTF-8 }; wxArrayString encDescs; encDescs.Add(_("Default 7 bit (US ASCII)")); for ( size_t n = 0; n < WXSIZEOF(encodingsSupported); n++ ) { encDescs.Add( wxFontMapper::GetEncodingDescription( encodingsSupported[n] ) ); } int choice = MDialog_GetSelection ( _("Please choose the default encoding:\n" "it will be used by default in both\n" "message viewer and composer."), _("Choose default encoding"), encDescs, this ); wxFontEncoding enc; if ( choice == -1 ) { // cancelled, do nothing break; } else if ( choice == 0 ) { enc = wxFONTENCODING_DEFAULT; } else { enc = encodingsSupported[choice - 1]; } // remember the encoding as default mApplication->GetProfile()->writeEntry(MP_MSGVIEW_DEFAULT_ENCODING, enc); } break; case WXMENU_VIEW_TOOLBAR: if ( GetMenuBar()->IsChecked(id) ) { DoCreateToolBar(); } else // hide the toolbar { delete GetToolBar(); SetToolBar(NULL); } break; case WXMENU_VIEW_STATUSBAR: if ( GetMenuBar()->IsChecked(id) ) { DoCreateStatusBar(); } else // hide the status bar { delete GetStatusBar(); SetStatusBar(NULL); } break; case WXMENU_VIEW_FULLSCREEN: ShowFullScreen(GetMenuBar()->IsChecked(id)); break; } }
static wxString GetLongOptionName(wxString::const_iterator p, wxString::const_iterator end) { return GetOptionName(p, end, wxCMD_LINE_CHARS_ALLOWED_BY_LONG_OPTION); }
static wxString GetLongOptionName(const wxChar *p) { return GetOptionName(p, wxCMD_LINE_CHARS_ALLOWED_BY_LONG_OPTION); }
static wxString GetShortOptionName(const wxChar *p) { return GetOptionName(p, wxCMD_LINE_CHARS_ALLOWED_BY_SHORT_OPTION); }
int MFolderFromProfile::GetTreeIndex() const { // it doesn't make sense to inherit the order from parent profile return m_profile->readEntryFromHere(GetOptionName(MP_FOLDER_TREEINDEX), GetNumericDefault(MP_FOLDER_TREEINDEX)); }
int MFolderFromProfile::GetIcon() const { // it doesn't make sense to inherit the icon from parent profile (does it?) return m_profile->readEntryFromHere(GetOptionName(MP_FOLDER_ICON), GetNumericDefault(MP_FOLDER_ICON)); }
JNIEXPORT jstring JNICALL Java_aflobby_CUnitSyncJNIBindings_GetOptionName (JNIEnv *env, jclass myobject, jint optIndex){ return env->NewStringUTF(GetOptionName(optIndex)); }