/////////////////////////////////////////////////////////////////////////////
-// 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
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// headers
// ---------------------------------------------------------------------------
-#ifdef __GNUG__
- #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"
-// ----------------------------------------------------------------------------
-// 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