X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d699f48ba33c96c24f7ab3764ad98ded0633c1c5..a2615ebc22a402b1badb46475f94ab6aa3a64018:/contrib/src/applet/echovar.cpp diff --git a/contrib/src/applet/echovar.cpp b/contrib/src/applet/echovar.cpp index 5f98f1dd63..3da0f23d45 100644 --- a/contrib/src/applet/echovar.cpp +++ b/contrib/src/applet/echovar.cpp @@ -28,64 +28,105 @@ ****************************************************************************/ // For compilers that support precompilation -#include "wx/wxprec.h" + +#include "wx/applet/echovar.h" +#include "wx/msgdlg.h" #include "wx/html/forcelnk.h" // Include private headers -#include "wx/applet/echovar.h" /*---------------------------- Global variables ---------------------------*/ -// Implement the dynamic class so it can be constructed dynamically -IMPLEMENT_ABSTRACT_CLASS(wxEchoVariable, wxObject); +static wxEchoVariable *wxEchoVariable::sm_first = NULL; +static wxHashTable *wxEchoVariable::sm_varTable = NULL; /*----------------------------- Implementation ----------------------------*/ /**************************************************************************** PARAMETERS: -cls - The String name of the class -parms - an optional parameter string to pass off to the child class +varName - The String name of the class +getValueFn - Pointer to the function that returns the echo variable value -RETURNS: -The string value of the variable +REMARKS: +Constructor for the wxEchoVariable class that self registers itself with +the list of all echo variables when the static class instance is created +at program init time (remember all the constructors get called before +the main program function!). +****************************************************************************/ +wxEchoVariable::wxEchoVariable( + const char *varName, + wxEchoVariableGetValueFn getValueFn) +{ + m_varName = varName; + m_getValueFn = getValueFn; + m_next = sm_first; + sm_first = this; +} +/**************************************************************************** REMARKS: -To grab a value from any class which is derived from this one simple use this -static function and the name of the derived class to get the value. -This static function is the only function implemented in this base class -basically this is provided for an easier method of grabbing a variable. We -keep all the dynamic object handling in this class to avoid confusing the source -where these are used. +Initializes parent pointers and hash table for fast searching for echo +variables. +****************************************************************************/ +void wxEchoVariable::Initialize() +{ + wxEchoVariable::sm_varTable = new wxHashTable(wxKEY_STRING); + + // Index all class infos by their class name + wxEchoVariable *info = sm_first; + while (info) { + if (info->m_varName) + sm_varTable->Put(info->m_varName, info); + info = info->m_next; + } +} -SEE ALSO: -wxEchoPrep +/**************************************************************************** +REMARKS: +Clean up echo variable hash tables on application exit. ****************************************************************************/ -static wxString wxEchoVariable::FindValue( - const wxString &cls, - const char *parms) +void wxEchoVariable::CleanUp() { - wxObject * tmpclass; + delete wxEchoVariable::sm_varTable; + wxEchoVariable::sm_varTable = NULL; +} - tmpclass = wxCreateDynamicObject(wxString("wxEchoVariable") + cls); - if (!tmpclass) { -#ifdef CHECKED - wxMessageBox(wxString("wxHTML #echo error: Class not found (") + cls + wxString(")."),"Error",wxICON_ERROR); -#endif - return wxString(""); - } +/**************************************************************************** +PARAMETERS: +varName - The String name of the class +parms - Parameter string for the echo variable - wxEchoVariable * ev = wxDynamicCast(tmpclass, wxEchoVariable); - - if (!ev) { +REMARKS: +Constructor for the wxEchoVariable class that self registers itself with +the list of all echo variables when the static class instance is created +at program init time (remember all the constructors get called before +the main program function!). +****************************************************************************/ +wxString wxEchoVariable::GetValue( + const wxChar *varName, + const wxChar *parms) +{ + wxEchoVariable *info = wxEchoVariable::FindVariable(varName); + if (info) + return info->m_getValueFn(parms); #ifdef CHECKED - wxMessageBox(wxString("wxHTML #echo error: Class is not a valid echo variable (") + cls + wxString(")."),"Error",wxICON_ERROR); + wxMessageBox(wxString("wxHTML #echo error: Class is not a valid echo variable (") + varName + wxString(")."),"Error",wxICON_ERROR); #endif - return wxString(""); - } - - return ev->GetValue(parms); + return wxString(""); } +/**************************************************************************** +PARAMETERS: +varName - The String name of the class + +RETURNS: +True if the echo variable exists, false if not. +****************************************************************************/ +bool wxEchoVariable::Exists( + const wxChar *varName) +{ + return wxEchoVariable::FindVariable(varName) != NULL; +} /*------------------------ Macro Documentation ---------------------------*/ @@ -177,4 +218,5 @@ void STRING_ECHO_VARIABLE( wxString string); // hack to make this file link -FORCE_LINK_ME(echovar) +FORCE_LINK_ME(echovar) +