]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/sysopt.cpp
Fix tracking rectangles in 64-bit build by remembering the tag as the 64-bit integer...
[wxWidgets.git] / src / common / sysopt.cpp
index cc01800a558bb4669f0d8f11d4ad8be81d6fd3d8..56227995c9edb0db31ea296cceddd7c61d1f258f 100644 (file)
@@ -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:    wxWidgets licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
 // headers
 // ---------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "sysopt.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
     #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"
-#include "wx/arrstr.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 WXDLLIMPEXP_BASE 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;
-
-bool wxSystemOptionsModule::OnInit()
-{
-    return TRUE;
-}
-
-void wxSystemOptionsModule::OnExit()
-{
-    sm_optionNames.Clear();
-    sm_optionValues.Clear();
-}
+static wxArrayString gs_optionNames,
+                     gs_optionValues;
 
-// ----------------------------------------------------------------------------
-// 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 explicitely
+    {
+        // 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(_T("."), _T("_"));  // '.'s not allowed in env var names
+
+        wxString appname;
+        if ( wxTheApp )
+            appname = wxTheApp->GetAppName();
+
+        if ( !appname.empty() )
+            val = wxGetenv(_T("wx_") + appname + _T('_') + var);
+
+        if ( val.empty() )
+            val = wxGetenv(_T("wx_") + var);
+    }
+
+    return val;
 }
 
 int wxSystemOptions::GetOptionInt(const wxString& name)
@@ -126,9 +105,7 @@ int wxSystemOptions::GetOptionInt(const wxString& 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