00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __PARAMETER_H__
00013 #define __PARAMETER_H__
00014
00015 #include <wx/tokenzr.h>
00016 #include "common.h"
00017 #include "moddefs.h"
00018 #include "textparser.h"
00019
00020
00021 namespace VRUT
00022 {
00023 class Module;
00024
00026 class Parameter
00027 {
00028 public:
00030 struct ParameterIdentificator
00031 {
00033 wxString poolName;
00035 wxString paramName;
00037 wxString instName;
00039 wxString description;
00040
00042 ParameterIdentificator(const wxChar * pool = wxT("*"),
00043 const wxChar * param = wxT("*"),
00044 const wxChar * inst = wxT("*"),
00045 const wxChar * _description = wxT(""))
00046 : poolName(pool), paramName(param), instName(inst), description(_description) {}
00048 ParameterIdentificator(const wxString & pool, const wxString & param, const MODULE_ID moduleID, const wxString & _description=wxT(""))
00049 : poolName(pool), paramName(param), instName(wxString::Format(wxT("%i"), moduleID.GetInstanceID())), description(_description) {}
00051 ParameterIdentificator(const ParameterIdentificator & pi)
00052 : poolName(CloneWxString(pi.poolName)), paramName(CloneWxString(pi.paramName)), instName(CloneWxString(pi.instName)), description(CloneWxString(pi.description)) {}
00053
00055 bool operator==(const ParameterIdentificator & pi) const
00056 {
00057 return pi.poolName.IsSameAs(poolName) && pi.paramName.IsSameAs(paramName) && pi.instName.IsSameAs(instName);
00058 }
00060 bool operator!=(const ParameterIdentificator & pi) const
00061 {
00062 return !operator==(pi);
00063 }
00065 bool Matches(const ParameterIdentificator & maskPi) const
00066 {
00067 return poolName.Matches(maskPi.poolName) && paramName.Matches(maskPi.paramName) && instName.Matches(maskPi.instName);
00068 }
00070 bool IsValid() const
00071 {
00072 return !poolName.IsEmpty()
00073 && !paramName.IsEmpty()
00074 && (poolName.Find('*') == wxNOT_FOUND)
00075 && (poolName.Find('?') == wxNOT_FOUND)
00076 && (paramName.Find('*') == wxNOT_FOUND)
00077 && (paramName.Find('?') == wxNOT_FOUND);
00078 }
00081 static ParameterIdentificator FromParamName(const wxString & fullName)
00082 {
00083 TextParser textParser(fullName);
00084 ParameterIdentificator pi;
00085 if (!textParser.IsEmpty())
00086 pi.poolName = textParser.GetWxString(".");
00087 if (!textParser.IsEmpty())
00088 pi.paramName = textParser.GetWxString(".");
00089 if (!textParser.IsEmpty())
00090 pi.instName = textParser.GetWxString(". \t\n\r");
00091 return pi;
00092 }
00094 static ParameterIdentificator FromEvent(const wxCommandEvent & setParamEvent)
00095 {
00096 return Parameter::ParameterIdentificator::FromParamName(((wxString *)setParamEvent.GetClientData())->BeforeFirst('='));
00097 }
00099 wxString ToString() const
00100 {
00101 return wxString::Format(wxT("%s.%s.%s"), poolName.c_str(), paramName.c_str(), instName.c_str());
00102 }
00104 ParameterIdentificator * Clone() const
00105 {
00106 return new ParameterIdentificator(*this);
00107 }
00108 };
00109
00110
00112 wxString value;
00114 wxString defaultValue;
00115
00117 Parameter(const wxString _value = wxEmptyString, const wxString defaultVal = wxEmptyString)
00118 : value(CloneWxString(_value)), defaultValue(CloneWxString(defaultVal)) {}
00119 };
00120 };
00121
00122 #endif