]> git.saurik.com Git - wxWidgets.git/blame - contrib/src/applet/ifelsevar.cpp
Faster Deselect
[wxWidgets.git] / contrib / src / applet / ifelsevar.cpp
CommitLineData
716cd410
KB
1/****************************************************************************
2*
3* wxWindows HTML Applet Package
4*
5* Copyright (C) 1991-2001 SciTech Software, Inc.
6* All rights reserved.
7*
8* ========================================================================
9*
10* The contents of this file are subject to the wxWindows License
11* Version 3.0 (the "License"); you may not use this file except in
12* compliance with the License. You may obtain a copy of the License at
13* http://www.wxwindows.org/licence3.txt
14*
15* Software distributed under the License is distributed on an
16* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
17* implied. See the License for the specific language governing
18* rights and limitations under the License.
19*
20* ========================================================================
21*
22* Language: ANSI C++
23* Environment: Any
24*
25* Description: Implementation of wxIfElseVariable Class, Dynamically constructed
26* objects representing variables in SSI #if, #else, and #endif directives
27*
28****************************************************************************/
29
716cd410
KB
30// Include private headers
31#include "wx/applet/ifelsevar.h"
32
574c939e
KB
33// wxWindows forcelink macro
34#include "wx/html/forcelnk.h"
35#include "wx/msgdlg.h"
36
716cd410
KB
37/*---------------------------- Global variables ---------------------------*/
38
574c939e
KB
39static wxIfElseVariable *wxIfElseVariable::sm_first = NULL;
40static wxHashTable *wxIfElseVariable::sm_varTable = NULL;
716cd410
KB
41
42/*----------------------------- Implementation ----------------------------*/
43
44/****************************************************************************
45PARAMETERS:
574c939e
KB
46varName - The String name of the class
47getValueFn - Pointer to the function that returns the echo variable value
716cd410 48
574c939e
KB
49REMARKS:
50Constructor for the wxIfElseVariable class that self registers itself with
51the list of all echo variables when the static class instance is created
52at program init time (remember all the constructors get called before
53the main program function!).
54****************************************************************************/
55wxIfElseVariable::wxIfElseVariable(
56 const char *varName,
57 wxIfElseVariableGetValueFn getValueFn)
58{
59 m_varName = varName;
60 m_getValueFn = getValueFn;
61 m_next = sm_first;
62 sm_first = this;
63}
716cd410 64
574c939e 65/****************************************************************************
716cd410 66REMARKS:
574c939e
KB
67Initializes parent pointers and hash table for fast searching for echo
68variables.
69****************************************************************************/
70void wxIfElseVariable::Initialize()
71{
72 wxIfElseVariable::sm_varTable = new wxHashTable(wxKEY_STRING);
73
74 // Index all class infos by their class name
75 wxIfElseVariable *info = sm_first;
76 while (info) {
77 if (info->m_varName)
78 sm_varTable->Put(info->m_varName, info);
79 info = info->m_next;
80 }
81}
716cd410 82
574c939e
KB
83/****************************************************************************
84REMARKS:
85Clean up echo variable hash tables on application exit.
716cd410 86****************************************************************************/
574c939e 87void wxIfElseVariable::CleanUp()
716cd410 88{
574c939e
KB
89 delete wxIfElseVariable::sm_varTable;
90 wxIfElseVariable::sm_varTable = NULL;
91}
716cd410 92
574c939e
KB
93/****************************************************************************
94PARAMETERS:
95varName - The String name of the class
716cd410 96
574c939e
KB
97REMARKS:
98Constructor for the wxIfElseVariable class that self registers itself with
99the list of all ifelse variables when the static class instance is created
100at program init time (remember all the constructors get called before
101the main program function!).
102****************************************************************************/
103bool wxIfElseVariable::GetValue(
104 const wxChar *varName)
105{
106 wxIfElseVariable *info = wxIfElseVariable::FindVariable(varName);
107 if (info) {
108 // Return the forced value if the variable has been forced.
109 if (info->forced)
110 return info->forceVal;
111 return info->m_getValueFn();
112 }
716cd410 113#ifdef CHECKED
574c939e 114 wxMessageBox(wxString("wxHTML #if error: Class is not a valid if else variable (") + varName + wxString(")."),"Error",wxICON_ERROR);
716cd410 115#endif
574c939e
KB
116 return wxString("");
117}
118
119/****************************************************************************
120PARAMETERS:
121varName - The String name of the class
122
123RETURNS:
124True if the if/else variable exists, false if not.
125****************************************************************************/
126bool wxIfElseVariable::Exists(
127 const wxChar *varName)
128{
129 return wxIfElseVariable::FindVariable(varName) != NULL;
130}
716cd410 131
574c939e
KB
132/****************************************************************************
133PARAMETERS:
134varName - The String name of the class
135val - Value to force the if/else variable with
136
137REMARKS:
138Function to forcibly override the value of an if/else variable for
139testing purposes. Once the variable has been forced, it will always return
140the forced value until the application exists.
141
142NOTE: This is only available when compiled in CHECKED mode.
143****************************************************************************/
144void wxIfElseVariable::Force(
145 const wxChar *varName,
146 bool val)
147{
148 wxIfElseVariable *info = wxIfElseVariable::FindVariable(varName);
149 if (info) {
150 info->forced = true;
151 info->forceVal = val;
152 }
153 else {
154#ifdef CHECKED
155 wxMessageBox(wxString("wxHTML #if error: Class is not a valid if else variable (") + varName + wxString(")."),"Error",wxICON_ERROR);
156#endif
157 }
716cd410
KB
158}
159
160/*------------------------ Macro Documentation ---------------------------*/
161
162// Here we declare some fake functions to get doc-jet to properly document the macros
163
164#undef BEGIN_IFELSE_VARIABLE
165/****************************************************************************
166PARAMETERS:
167name - The name of the variable to create
168
169REMARKS:
170This macro is used to create variables for use by the #if, #else and #endif
171blocks in the HTML preprocessor.
172To create a new variable include the code necessary to get the value of the
173variable between a block of BEGIN_IFELSE_VARIABLE and END_IFELSE_VARIABLE macros.
174
175EXAMPLE:
176BEGIN_IFELSE_VARIABLE(UserName)
177 // Get username from nucleus
178 bool tmp = GA_HasRegistered();
179END_IFELSE_VARIABLE(UserName, tmp)
180
181SEE ALSO:
182wxIfElseVariable, wxIfElsePrep, END_IFELSE_VARIABLE, IFELSE_VARIABLE
183****************************************************************************/
184void BEGIN_IFELSE_VARIABLE(
185 const char *name);
186
187#undef END_IFELSE_VARIABLE
188/****************************************************************************
189PARAMETERS:
190name - The name of the variable to end
191returnval - The boolean value which is the value of the variable
192
193REMARKS:
194This macro is used to create variables for use by the #if, #else and #endif
195blocks in the HTML preprocessor.
196To create a new variable include the code necessary to get the value of the
197variable between a block of BEGIN_IFELSE_VARIABLE and END_IFELSE_VARIABLE macros.
198
199EXAMPLE:
200BEGIN_IFELSE_VARIABLE(UserName)
201 // Get username from nucleus
202 bool tmp = GA_HasRegistered();
203END_IFELSE_VARIABLE(UserName, tmp)
204
205SEE ALSO:
206wxIfElseVariable, wxIfElsePrep, BEGIN_IFELSE_VARIABLE, IFELSE_VARIABLE
207****************************************************************************/
208void END_IFELSE_VARIABLE(
209 const char *name,
210 bool returnval);
211
212#undef IFELSE_VARIABLE
213/****************************************************************************
214PARAMETERS:
215name - The name of the variable
216state - value of the variable
217
218REMARKS:
219This macro is used to create constant boolean variables for use by the
220#if, #else and #endif blocks in the HTML preprocessor.
221This MACRO creates a variable that simply returns the given state and is
222not modifiable.
223
224SEE ALSO:
225wxIfElseVariable, wxIfElsePrep, BEGIN_IFELSE_VARIABLE, END_IFELSE_VARIABLE
226****************************************************************************/
227void IFELSE_VARIABLE(
228 const char *name,
229 bool state);
230
716cd410 231FORCE_LINK_ME(ifelsevar)
574c939e 232