X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e3a43801df2f05c057892481df9d3cfe30fd8800..758bce950ba9236d0a9edc4c880c3ec73b5173f3:/src/generic/prop.cpp?ds=sidebyside diff --git a/src/generic/prop.cpp b/src/generic/prop.cpp index fb5e94fb8f..028427d935 100644 --- a/src/generic/prop.cpp +++ b/src/generic/prop.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -20,29 +20,19 @@ #pragma hdrstop #endif +#if wxUSE_PROPSHEET + #ifndef WX_PRECOMP -#include "wx/wx.h" #endif +#include "wx/debug.h" +#include "wx/prop.h" + #include #include #include #include -#if wxUSE_IOSTREAMH -#if defined(__WXMSW__) && !defined(__GNUWIN32__) -#include -#else -#include -#endif -#else -#include -#endif - -#include "wx/window.h" -#include "wx/utils.h" -#include "wx/list.h" -#include "wx/prop.h" IMPLEMENT_DYNAMIC_CLASS(wxPropertyValue, wxObject) @@ -58,11 +48,12 @@ wxPropertyValue::wxPropertyValue(void) wxPropertyValue::wxPropertyValue(const wxPropertyValue& copyFrom) { + m_value.string = (wxChar*) NULL; m_modifiedFlag = FALSE; Copy((wxPropertyValue& )copyFrom); } -wxPropertyValue::wxPropertyValue(const char *val) +wxPropertyValue::wxPropertyValue(const wxChar *val) { m_modifiedFlag = FALSE; m_type = wxPropertyValueString; @@ -78,7 +69,7 @@ wxPropertyValue::wxPropertyValue(const wxString& val) m_modifiedFlag = FALSE; m_type = wxPropertyValueString; - m_value.string = copystring((const char *)val); + m_value.string = copystring((const wxChar *)val); m_clientData = NULL; m_next = NULL; m_last = NULL; @@ -121,7 +112,7 @@ wxPropertyValue::wxPropertyValue(double the_real) } // Pointer versions: we have a pointer to the real C++ value. -wxPropertyValue::wxPropertyValue(char **val) +wxPropertyValue::wxPropertyValue(wxChar **val) { m_modifiedFlag = FALSE; m_type = wxPropertyValueStringPtr; @@ -189,7 +180,7 @@ wxPropertyValue::wxPropertyValue(wxStringList *the_list) wxNode *node = the_list->First(); while (node) { - char *s = (char *)node->Data(); + wxChar *s = (wxChar *)node->Data(); Append(new wxPropertyValue(s)); node = node->Next(); } @@ -253,7 +244,7 @@ void wxPropertyValue::Insert(wxPropertyValue *expr) void wxPropertyValue::Delete(wxPropertyValue *node) { wxPropertyValue *expr = GetFirst(); - + wxPropertyValue *previous = NULL; while (expr && (expr != node)) { @@ -265,7 +256,7 @@ void wxPropertyValue::Delete(wxPropertyValue *node) { if (previous) previous->m_next = expr->m_next; - + // If node was the first in the list, // make the list point to the NEXT one. if (GetFirst() == expr) @@ -338,10 +329,8 @@ wxPropertyValue *wxPropertyValue::NewCopy(void) const case wxPropertyValueStringPtr: return new wxPropertyValue(m_value.stringPtr); - case wxPropertyValueNull: -#ifdef __X__ - cerr << "Should never get here!\n"; -#endif + case wxPropertyValueNull: + wxFAIL_MSG( wxT("Should never get here!\n" ) ); break; } return NULL; @@ -349,6 +338,11 @@ wxPropertyValue *wxPropertyValue::NewCopy(void) const void wxPropertyValue::Copy(wxPropertyValue& copyFrom) { + if (m_type == wxPropertyValueString) + { + delete[] m_value.string ; + m_value.string = NULL; + } m_type = copyFrom.Type(); switch (m_type) @@ -360,11 +354,11 @@ void wxPropertyValue::Copy(wxPropertyValue& copyFrom) case wxPropertyValueReal: (*this) = copyFrom.RealValue(); return ; - + case wxPropertyValueString: (*this) = wxString(copyFrom.StringValue()); return ; - + case wxPropertyValuebool: (*this) = copyFrom.BoolValue(); return ; @@ -381,11 +375,22 @@ void wxPropertyValue::Copy(wxPropertyValue& copyFrom) return ; case wxPropertyValueStringPtr: { - char** s = copyFrom.StringValuePtr(); + wxChar** s = copyFrom.StringValuePtr(); + +#if 0 + // what is this? are you trying to assign a bool or a string? VA can't figure it out.. +#if defined(__VISAGECPP__) || defined( __VISUALC__ ) (*this) = s; +#else + (*this) = s != 0; +#endif +#endif // if 0 + + (*this) = (bool)(s != 0); + return ; } - + case wxPropertyValueList: { m_value.first = NULL; @@ -400,10 +405,8 @@ void wxPropertyValue::Copy(wxPropertyValue& copyFrom) } return; } - case wxPropertyValueNull: -#ifdef __X__ - cerr << "Should never get here!\n"; -#endif + case wxPropertyValueNull: + wxFAIL_MSG( wxT("Should never get here!\n" ) ); break; } } @@ -456,7 +459,7 @@ int wxPropertyValue::Number(void) const return i; } -void wxPropertyValue::WritePropertyClause(ostream& stream) // Write this expression as a top-level clause +void wxPropertyValue::WritePropertyClause(wxString& stream) // Write this expression as a top-level clause { if (m_type != wxPropertyValueList) return; @@ -465,89 +468,79 @@ void wxPropertyValue::WritePropertyClause(ostream& stream) // Write this expres if (node) { node->WritePropertyType(stream); - stream << "("; + stream.Append( wxT("(") ); node = node->m_next; bool first = TRUE; while (node) { if (!first) - stream << " "; + stream.Append( wxT(" ") ); node->WritePropertyType(stream); node = node->m_next; - if (node) stream << ",\n"; + if (node) + stream.Append( wxT(",\n" ) ); first = FALSE; } - stream << ").\n\n"; + stream.Append( wxT(").\n\n") ); } } -void wxPropertyValue::WritePropertyType(ostream& stream) // Write as any other subexpression +void wxPropertyValue::WritePropertyType(wxString& stream) // Write as any other subexpression { + wxString tmp; switch (m_type) { case wxPropertyValueInteger: { - stream << m_value.integer; + tmp.Printf( wxT("%ld"), m_value.integer ); + stream.Append( tmp ); break; } case wxPropertyValueIntegerPtr: { - stream << *m_value.integerPtr; + tmp.Printf( wxT("%ld"), *m_value.integerPtr ); + stream.Append( tmp ); break; } case wxPropertyValuebool: { if (m_value.integer) - stream << "True"; + stream.Append( wxT("True") ); else - stream << "False"; + stream.Append( wxT("False") ); break; } case wxPropertyValueboolPtr: { if (*m_value.integerPtr) - stream << "True"; + stream.Append( wxT("True") ); else - stream << "False"; + stream.Append( wxT("False") ); break; } case wxPropertyValueReal: { - float f = m_value.real; - sprintf(wxBuffer, "%.6g", (double)f); - stream << wxBuffer; + double d = m_value.real; + tmp.Printf( wxT("%.6g"), d ); + stream.Append( tmp ); break; } case wxPropertyValueRealPtr: { - float f = *m_value.realPtr; -/* Now the parser can cope with this. - // Prevent printing in 'e' notation. Any better way? - if (fabs(f) < 0.00001) - f = 0.0; -*/ - sprintf(wxBuffer, "%.6g", f); - stream << wxBuffer; + double d = *m_value.realPtr; + tmp.Printf( wxT("%.6g"), d ); + stream.Append( tmp ); break; } case wxPropertyValueString: { -// stream << "\""; - int i; - int len = strlen(m_value.string); - for (i = 0; i < len; i++) - { - char ch = m_value.string[i]; -// if (ch == '"' || ch == '\\') -// stream << "\\"; - stream << ch; - } - -// stream << "\""; + stream.Append( m_value.string ); break; } case wxPropertyValueStringPtr: { + wxFAIL_MSG( wxT("wxPropertyValue::WritePropertyType( wxPropertyValueStringPtr ) not implemented") ); + /* int i; int len = strlen(*(m_value.stringPtr)); for (i = 0; i < len; i++) @@ -555,24 +548,26 @@ void wxPropertyValue::WritePropertyType(ostream& stream) // Write as any othe char ch = *(m_value.stringPtr)[i]; } + */ break; } case wxPropertyValueList: { if (!m_value.first) - stream << "[]"; + stream.Append( wxT("[]") ); else { wxPropertyValue *expr = m_value.first; - stream << "["; + stream.Append( wxT("[") ); while (expr) { expr->WritePropertyType(stream); expr = expr->m_next; - if (expr) stream << ", "; + if (expr) + stream.Append( wxT(", ") ); } - stream << "]"; + stream.Append( wxT("]") ); } break; } @@ -582,16 +577,9 @@ void wxPropertyValue::WritePropertyType(ostream& stream) // Write as any othe wxString wxPropertyValue::GetStringRepresentation(void) { - char buf[500]; - buf[0] = 0; - - ostrstream str((char *)buf, (int)500, ios::out); + wxString str; WritePropertyType(str); - str << '\0'; - str.flush(); - - wxString theString(buf); - return theString; + return str; } void wxPropertyValue::operator=(const wxPropertyValue& val) @@ -603,9 +591,17 @@ void wxPropertyValue::operator=(const wxPropertyValue& val) // void wxPropertyValue::operator=(const char *val) void wxPropertyValue::operator=(const wxString& val1) { - const char *val = (const char *)val1; + const wxChar *val = (const wxChar *)val1; m_modifiedFlag = TRUE; + + wxPropertyValueType oldType = m_type; + if (oldType == wxPropertyValueString) + { + delete[] m_value.string ; + m_value.string = NULL; + } + if (m_type == wxPropertyValueNull) m_type = wxPropertyValueString; @@ -618,14 +614,13 @@ void wxPropertyValue::operator=(const wxString& val1) } else if (m_type == wxPropertyValueStringPtr) { - if (*m_value.stringPtr) - delete[] *m_value.stringPtr; + wxFAIL_MSG( wxT("Shouldn't try to assign a wxString reference to a char* pointer.") ); if (val) *m_value.stringPtr = copystring(val); else *m_value.stringPtr = NULL; } - + m_clientData = NULL; m_next = NULL; m_last = NULL; @@ -634,6 +629,13 @@ void wxPropertyValue::operator=(const wxString& val1) void wxPropertyValue::operator=(const long val) { + wxPropertyValueType oldType = m_type; + if (oldType == wxPropertyValueString) + { + delete[] m_value.string ; + m_value.string = NULL; + } + m_modifiedFlag = TRUE; if (m_type == wxPropertyValueNull) m_type = wxPropertyValueInteger; @@ -653,6 +655,13 @@ void wxPropertyValue::operator=(const long val) void wxPropertyValue::operator=(const bool val) { + wxPropertyValueType oldType = m_type; + if (oldType == wxPropertyValueString) + { + delete[] m_value.string ; + m_value.string = NULL; + } + m_modifiedFlag = TRUE; if (m_type == wxPropertyValueNull) m_type = wxPropertyValuebool; @@ -668,6 +677,13 @@ void wxPropertyValue::operator=(const bool val) void wxPropertyValue::operator=(const float val) { + wxPropertyValueType oldType = m_type; + if (oldType == wxPropertyValueString) + { + delete[] m_value.string ; + m_value.string = NULL; + } + m_modifiedFlag = TRUE; if (m_type == wxPropertyValueNull) m_type = wxPropertyValueReal; @@ -685,13 +701,20 @@ void wxPropertyValue::operator=(const float val) m_next = NULL; } -void wxPropertyValue::operator=(const char **val) +void wxPropertyValue::operator=(const wxChar **val) { + wxPropertyValueType oldType = m_type; + if (oldType == wxPropertyValueString) + { + delete[] m_value.string ; + m_value.string = NULL; + } + m_modifiedFlag = TRUE; m_type = wxPropertyValueStringPtr; if (val) - m_value.stringPtr = (char **)val; + m_value.stringPtr = (wxChar **)val; else m_value.stringPtr = NULL; m_clientData = NULL; @@ -783,7 +806,7 @@ bool *wxPropertyValue::BoolValuePtr(void) const return m_value.boolPtr; } -char *wxPropertyValue::StringValue(void) const { +wxChar *wxPropertyValue::StringValue(void) const { if (m_type == wxPropertyValueString) return m_value.string; else if (m_type == wxPropertyValueStringPtr) @@ -791,7 +814,7 @@ char *wxPropertyValue::StringValue(void) const { else return NULL; } -char **wxPropertyValue::StringValuePtr(void) const +wxChar **wxPropertyValue::StringValuePtr(void) const { return m_value.stringPtr; } @@ -799,12 +822,12 @@ char **wxPropertyValue::StringValuePtr(void) const /* * A property (name plus value) */ - + IMPLEMENT_DYNAMIC_CLASS(wxProperty, wxObject) wxProperty::wxProperty(void) { - m_propertyRole = (char *)NULL; + m_propertyRole = wxEmptyString; m_propertyValidator = NULL; m_propertyWindow = NULL; m_enabled = TRUE; @@ -828,7 +851,7 @@ wxProperty::wxProperty(wxString nm, wxString role, wxPropertyValidator *ed):m_na } wxProperty::wxProperty(wxString nm, const wxPropertyValue& val, wxString role, wxPropertyValidator *ed): - m_name(nm), m_value(val), m_propertyRole(role) + m_value(val), m_name(nm), m_propertyRole(role) { m_propertyValidator = ed; m_propertyWindow = NULL; @@ -889,7 +912,7 @@ void wxProperty::operator=(const wxPropertyValue& val) /* * Base property view class */ - + IMPLEMENT_DYNAMIC_CLASS(wxPropertyView, wxEvtHandler) wxPropertyView::wxPropertyView(long flags) @@ -913,7 +936,7 @@ wxPropertyValidator *wxPropertyView::FindPropertyValidator(wxProperty *property) { if (property->GetValidator()) return property->GetValidator(); - + wxNode *node = m_validatorRegistryList.First(); while (node) { @@ -937,7 +960,8 @@ wxPropertyValidator *wxPropertyView::FindPropertyValidator(wxProperty *property) IMPLEMENT_DYNAMIC_CLASS(wxPropertySheet, wxObject) -wxPropertySheet::wxPropertySheet(void):m_properties(wxKEY_STRING) +wxPropertySheet::wxPropertySheet(const wxString& name) +:m_properties(wxKEY_STRING),m_name(name) { } @@ -946,16 +970,6 @@ wxPropertySheet::~wxPropertySheet(void) Clear(); } -bool wxPropertySheet::Save( ostream& WXUNUSED(str) ) -{ - return FALSE; -} - -bool wxPropertySheet::Load( ostream& WXUNUSED(str) ) -{ - return FALSE; -} - void wxPropertySheet::UpdateAllViews( wxPropertyView *WXUNUSED(thisView) ) { } @@ -963,19 +977,46 @@ void wxPropertySheet::UpdateAllViews( wxPropertyView *WXUNUSED(thisView) ) // Add a property void wxPropertySheet::AddProperty(wxProperty *property) { - m_properties.Append((const char*) property->GetName(), property); + m_properties.Append((const wxChar*) property->GetName(), property); } // Get property by name -wxProperty *wxPropertySheet::GetProperty(wxString name) +wxProperty *wxPropertySheet::GetProperty(const wxString& name) const { - wxNode *node = m_properties.Find((const char*) name); + wxNode *node = m_properties.Find((const wxChar*) name); if (!node) return NULL; else return (wxProperty *)node->Data(); } +bool wxPropertySheet::SetProperty(const wxString& name, const wxPropertyValue& value) +{ + wxProperty* prop = GetProperty(name); + if(prop){ + prop->SetValue(value); + return TRUE; + }else{ + return FALSE; + } +} + +void wxPropertySheet::RemoveProperty(const wxString& name) +{ + wxNode *node = m_properties.Find(name); + if(node) + { + wxProperty *prop = (wxProperty *)node->Data(); + delete prop; + m_properties.DeleteNode(node); + } +} + +bool wxPropertySheet::HasProperty(const wxString& name) const +{ + return (GetProperty(name)?TRUE:FALSE); +} + // Clear all properties void wxPropertySheet::Clear(void) { @@ -999,7 +1040,7 @@ void wxPropertySheet::SetAllModified(bool flag) wxProperty *prop = (wxProperty *)node->Data(); prop->GetValue().SetModified(flag); node = node->Next(); - } + } } /* @@ -1020,19 +1061,19 @@ wxPropertyValidatorRegistry::~wxPropertyValidatorRegistry(void) void wxPropertyValidatorRegistry::RegisterValidator(const wxString& typeName, wxPropertyValidator *validator) { - Put((const char*) typeName, validator); + Put((const wxChar*) typeName, validator); } wxPropertyValidator *wxPropertyValidatorRegistry::GetValidator(const wxString& typeName) { - return (wxPropertyValidator *)Get((const char*) typeName); + return (wxPropertyValidator *)Get((const wxChar*) typeName); } void wxPropertyValidatorRegistry::ClearRegistry(void) { BeginFind(); wxNode *node; - while (node = Next()) + while ((node = Next()) != NULL) { delete (wxPropertyValidator *)node->Data(); } @@ -1054,66 +1095,66 @@ wxPropertyValidator::wxPropertyValidator(long flags) wxPropertyValidator::~wxPropertyValidator(void) {} -bool wxPropertyValidator::StringToFloat (char *s, float *number) { - double num; - bool ok = StringToDouble (s, &num); - *number = (float) num; - return ok; +bool wxPropertyValidator::StringToFloat (wxChar *s, float *number) { + double num; + bool ok = StringToDouble (s, &num); + *number = (float) num; + return ok; } -bool wxPropertyValidator::StringToDouble (char *s, double *number) { +bool wxPropertyValidator::StringToDouble (wxChar *s, double *number) { bool ok = TRUE; - char *value_ptr; - *number = strtod (s, &value_ptr); + wxChar *value_ptr; + *number = wxStrtod (s, &value_ptr); if (value_ptr) { - int len = strlen (value_ptr); - for (int i = 0; i < len; i++) { - ok = (isspace (value_ptr[i]) != 0); - if (!ok) return FALSE; - } + int len = wxStrlen (value_ptr); + for (int i = 0; i < len; i++) { + ok = (wxIsspace (value_ptr[i]) != 0); + if (!ok) return FALSE; + } } return ok; } -bool wxPropertyValidator::StringToInt (char *s, int *number) { - long num; - bool ok = StringToLong (s, &num); - *number = (int) num; - return ok; +bool wxPropertyValidator::StringToInt (wxChar *s, int *number) { + long num; + bool ok = StringToLong (s, &num); + *number = (int) num; + return ok; } -bool wxPropertyValidator::StringToLong (char *s, long *number) { +bool wxPropertyValidator::StringToLong (wxChar *s, long *number) { bool ok = TRUE; - char *value_ptr; - *number = strtol (s, &value_ptr, 10); + wxChar *value_ptr; + *number = wxStrtol (s, &value_ptr, 10); if (value_ptr) { - int len = strlen (value_ptr); - for (int i = 0; i < len; i++) { - ok = (isspace (value_ptr[i]) != 0); - if (!ok) return FALSE; - } + int len = wxStrlen (value_ptr); + for (int i = 0; i < len; i++) { + ok = (wxIsspace (value_ptr[i]) != 0); + if (!ok) return FALSE; + } } return ok; } -char *wxPropertyValidator::FloatToString (float number) { - static char buf[20]; - sprintf (buf, "%.6g", number); - return buf; +wxChar *wxPropertyValidator::FloatToString (float number) { + static wxChar buf[20]; + wxSprintf (buf, wxT("%.6g"), number); + return buf; } -char *wxPropertyValidator::DoubleToString (double number) { - static char buf[20]; - sprintf (buf, "%.6g", number); - return buf; +wxChar *wxPropertyValidator::DoubleToString (double number) { + static wxChar buf[20]; + wxSprintf (buf, wxT("%.6g"), number); + return buf; } -char *wxPropertyValidator::IntToString (int number) { - return ::IntToString (number); +wxChar *wxPropertyValidator::IntToString (int number) { + return ::IntToString (number); } -char *wxPropertyValidator::LongToString (long number) { - return ::LongToString (number); +wxChar *wxPropertyValidator::LongToString (long number) { + return ::LongToString (number); } - +#endif // wxUSE_PROPSHEET