X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b951c85fec31e70aa092e1b8bdb6f55b82707a26..5c475284a2f878f72449fa1e5517052c4e804758:/src/common/sysopt.cpp diff --git a/src/common/sysopt.cpp b/src/common/sysopt.cpp index 39849e7fa9..4536efb4fb 100644 --- a/src/common/sysopt.cpp +++ b/src/common/sysopt.cpp @@ -1,12 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: common/sysopt.cpp +// Name: src/common/sysopt.cpp // Purpose: wxSystemOptions // Author: Julian Smart // Modified by: // Created: 2001-07-10 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,10 +17,6 @@ // headers // --------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "sysopt.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,106 +24,89 @@ #pragma hdrstop #endif -#ifndef WX_PRECOMP - #include "wx/list.h" -#endif - #if wxUSE_SYSTEM_OPTIONS -#include "wx/string.h" #include "wx/sysopt.h" -#include "wx/module.h" -// ---------------------------------------------------------------------------- -// private classes -// ---------------------------------------------------------------------------- - -// the module which is used to clean up wxSystemOptions data (this is a -// singleton class so it can't be done in the dtor) -class wxSystemOptionsModule : public wxModule -{ - friend class WXDLLEXPORT wxSystemOptions; -public: - virtual bool OnInit(); - virtual void OnExit(); - -private: - DECLARE_DYNAMIC_CLASS(wxSystemOptionsModule) - - static wxArrayString sm_optionNames; - static wxArrayString sm_optionValues; -}; - -// =========================================================================== -// implementation -// =========================================================================== +#ifndef WX_PRECOMP + #include "wx/app.h" + #include "wx/list.h" + #include "wx/string.h" + #include "wx/arrstr.h" +#endif // ---------------------------------------------------------------------------- -// wxSystemOptionsModule +// private globals // ---------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxSystemOptionsModule, wxModule) - -wxArrayString wxSystemOptionsModule::sm_optionNames; -wxArrayString wxSystemOptionsModule::sm_optionValues; +static wxArrayString gs_optionNames, + gs_optionValues; -bool wxSystemOptionsModule::OnInit() -{ - return TRUE; -} - -void wxSystemOptionsModule::OnExit() -{ - sm_optionNames.Clear(); - sm_optionValues.Clear(); -} - -// ---------------------------------------------------------------------------- -// wxSystemOptions -// ---------------------------------------------------------------------------- +// ============================================================================ +// wxSystemOptions implementation +// ============================================================================ // Option functions (arbitrary name/value mapping) void wxSystemOptions::SetOption(const wxString& name, const wxString& value) { - int idx = wxSystemOptionsModule::sm_optionNames.Index(name, FALSE); + int idx = gs_optionNames.Index(name, false); if (idx == wxNOT_FOUND) { - wxSystemOptionsModule::sm_optionNames.Add(name); - wxSystemOptionsModule::sm_optionValues.Add(value); + gs_optionNames.Add(name); + gs_optionValues.Add(value); } else { - wxSystemOptionsModule::sm_optionNames[idx] = name; - wxSystemOptionsModule::sm_optionValues[idx] = value; + gs_optionNames[idx] = name; + gs_optionValues[idx] = value; } } void wxSystemOptions::SetOption(const wxString& name, int value) { - wxString valStr; - valStr.Printf(wxT("%d"), value); - SetOption(name, valStr); + SetOption(name, wxString::Format(wxT("%d"), value)); } wxString wxSystemOptions::GetOption(const wxString& name) { - int idx = wxSystemOptionsModule::sm_optionNames.Index(name, FALSE); - if (idx == wxNOT_FOUND) - return wxEmptyString; - else - return wxSystemOptionsModule::sm_optionValues[idx]; + wxString val; + + int idx = gs_optionNames.Index(name, false); + if ( idx != wxNOT_FOUND ) + { + val = gs_optionValues[idx]; + } + else // not set explicitly + { + // look in the environment: first for a variable named "wx_appname_name" + // which can be set to affect the behaviour or just this application + // and then for "wx_name" which can be set to change the option globally + wxString var(name); + var.Replace(wxT("."), wxT("_")); // '.'s not allowed in env var names + var.Replace(wxT("-"), wxT("_")); // and neither are '-'s + + wxString appname; + if ( wxTheApp ) + appname = wxTheApp->GetAppName(); + + if ( !appname.empty() ) + val = wxGetenv(wxT("wx_") + appname + wxT('_') + var); + + if ( val.empty() ) + val = wxGetenv(wxT("wx_") + var); + } + + return val; } int wxSystemOptions::GetOptionInt(const wxString& name) { - return wxAtoi(GetOption(name)); + return wxAtoi (GetOption(name)); } bool wxSystemOptions::HasOption(const wxString& name) { - return (wxSystemOptionsModule::sm_optionNames.Index(name, FALSE) != wxNOT_FOUND); + return !GetOption(name).empty(); } -#endif - // wxUSE_SYSTEM_OPTIONS - +#endif // wxUSE_SYSTEM_OPTIONS