]> git.saurik.com Git - wxWidgets.git/blob - src/common/sysopt.cpp
Fixed keyboard navigation in generic tree control.
[wxWidgets.git] / src / common / sysopt.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        src/common/sysopt.cpp
3 // Purpose:     wxSystemOptions
4 // Author:      Julian Smart
5 // Modified by:
6 // Created:     2001-07-10
7 // RCS-ID:      $Id$
8 // Copyright:   (c) Julian Smart
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // ============================================================================
13 // declarations
14 // ============================================================================
15
16 // ---------------------------------------------------------------------------
17 // headers
18 // ---------------------------------------------------------------------------
19
20 // For compilers that support precompilation, includes "wx.h".
21 #include "wx/wxprec.h"
22
23 #if defined(__BORLANDC__)
24     #pragma hdrstop
25 #endif
26
27 #if wxUSE_SYSTEM_OPTIONS
28
29 #include "wx/sysopt.h"
30
31 #ifndef WX_PRECOMP
32     #include "wx/app.h"
33     #include "wx/list.h"
34     #include "wx/string.h"
35     #include "wx/arrstr.h"
36 #endif
37
38 // ----------------------------------------------------------------------------
39 // private globals
40 // ----------------------------------------------------------------------------
41
42 static wxArrayString gs_optionNames,
43                      gs_optionValues;
44
45 // ============================================================================
46 // wxSystemOptions implementation
47 // ============================================================================
48
49 // Option functions (arbitrary name/value mapping)
50 void wxSystemOptions::SetOption(const wxString& name, const wxString& value)
51 {
52     int idx = gs_optionNames.Index(name, false);
53     if (idx == wxNOT_FOUND)
54     {
55         gs_optionNames.Add(name);
56         gs_optionValues.Add(value);
57     }
58     else
59     {
60         gs_optionNames[idx] = name;
61         gs_optionValues[idx] = value;
62     }
63 }
64
65 void wxSystemOptions::SetOption(const wxString& name, int value)
66 {
67     SetOption(name, wxString::Format(wxT("%d"), value));
68 }
69
70 wxString wxSystemOptions::GetOption(const wxString& name)
71 {
72     wxString val;
73
74     int idx = gs_optionNames.Index(name, false);
75     if ( idx != wxNOT_FOUND )
76     {
77         val = gs_optionValues[idx];
78     }
79     else // not set explicitly
80     {
81         // look in the environment: first for a variable named "wx_appname_name"
82         // which can be set to affect the behaviour or just this application
83         // and then for "wx_name" which can be set to change the option globally
84         wxString var(name);
85         var.Replace(wxT("."), wxT("_"));  // '.'s not allowed in env var names
86         var.Replace(wxT("-"), wxT("_"));  // and neither are '-'s
87
88         wxString appname;
89         if ( wxTheApp )
90             appname = wxTheApp->GetAppName();
91
92         if ( !appname.empty() )
93             val = wxGetenv(wxT("wx_") + appname + wxT('_') + var);
94
95         if ( val.empty() )
96             val = wxGetenv(wxT("wx_") + var);
97     }
98
99     return val;
100 }
101
102 int wxSystemOptions::GetOptionInt(const wxString& name)
103 {
104     return wxAtoi (GetOption(name));
105 }
106
107 bool wxSystemOptions::HasOption(const wxString& name)
108 {
109     return !GetOption(name).empty();
110 }
111
112 #endif // wxUSE_SYSTEM_OPTIONS