]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/prop.cpp
-fix for a bug in parsing tag's properties with common suffixes
[wxWidgets.git] / src / generic / prop.cpp
index 178d82bc97bde1d55f741e012f78ed70cb22fd1a..717558038272163fc7c9e0cf8d5bb504fad777a7 100644 (file)
@@ -47,6 +47,7 @@ wxPropertyValue::wxPropertyValue(void)
 
 wxPropertyValue::wxPropertyValue(const wxPropertyValue& copyFrom)
 {
 
 wxPropertyValue::wxPropertyValue(const wxPropertyValue& copyFrom)
 {
+  m_value.string = (wxChar*) NULL;
   m_modifiedFlag = FALSE;
   Copy((wxPropertyValue& )copyFrom);
 }
   m_modifiedFlag = FALSE;
   Copy((wxPropertyValue& )copyFrom);
 }
@@ -178,7 +179,7 @@ wxPropertyValue::wxPropertyValue(wxStringList *the_list)
   wxNode *node = the_list->First();
   while (node)
   {
   wxNode *node = the_list->First();
   while (node)
   {
-    char *s = (char *)node->Data();
+    wxChar *s = (wxChar *)node->Data();
     Append(new wxPropertyValue(s));
     node = node->Next();
   }
     Append(new wxPropertyValue(s));
     node = node->Next();
   }
@@ -328,7 +329,7 @@ wxPropertyValue *wxPropertyValue::NewCopy(void) const
      return new wxPropertyValue(m_value.stringPtr);
 
    case wxPropertyValueNull:
      return new wxPropertyValue(m_value.stringPtr);
 
    case wxPropertyValueNull:
-    wxFAIL_MSG( _T("Should never get here!\n" ) );
+    wxFAIL_MSG( wxT("Should never get here!\n" ) );
     break;
   }
   return NULL;
     break;
   }
   return NULL;
@@ -336,6 +337,11 @@ wxPropertyValue *wxPropertyValue::NewCopy(void) const
 
 void wxPropertyValue::Copy(wxPropertyValue& copyFrom)
 {
 
 void wxPropertyValue::Copy(wxPropertyValue& copyFrom)
 {
+  if (m_type == wxPropertyValueString)
+  {
+    delete[] m_value.string ;
+    m_value.string = NULL;
+  }
   m_type = copyFrom.Type();
 
   switch (m_type)
   m_type = copyFrom.Type();
 
   switch (m_type)
@@ -369,12 +375,18 @@ void wxPropertyValue::Copy(wxPropertyValue& copyFrom)
     case wxPropertyValueStringPtr:
     {
       wxChar** s = copyFrom.StringValuePtr();
     case wxPropertyValueStringPtr:
     {
       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..
       // what is this? are you trying to assign a bool or a string?  VA can't figure it out..
-#if defined(__VISAGECPP__)
+#if defined(__VISAGECPP__) || defined( __VISUALC__ )
       (*this) = s;
 #else
       (*this) = s != 0;
 #endif
       (*this) = s;
 #else
       (*this) = s != 0;
 #endif
+#endif // if 0
+
+      (*this) = (bool)(s != 0);
+      
       return ;
     }
 
       return ;
     }
 
@@ -393,7 +405,7 @@ void wxPropertyValue::Copy(wxPropertyValue& copyFrom)
       return;
     }
    case wxPropertyValueNull:
       return;
     }
    case wxPropertyValueNull:
-    wxFAIL_MSG( _T("Should never get here!\n" ) );
+    wxFAIL_MSG( wxT("Should never get here!\n" ) );
     break;
   }
 }
     break;
   }
 }
@@ -455,20 +467,20 @@ void wxPropertyValue::WritePropertyClause(wxString& stream)  // Write this expre
   if (node)
   {
     node->WritePropertyType(stream);
   if (node)
   {
     node->WritePropertyType(stream);
-    stream.Append( _T("(") );
+    stream.Append( wxT("(") );
     node = node->m_next;
     bool first = TRUE;
     while (node)
     {
       if (!first)
     node = node->m_next;
     bool first = TRUE;
     while (node)
     {
       if (!first)
-        stream.Append( _T("  ") );
+        stream.Append( wxT("  ") );
       node->WritePropertyType(stream);
       node = node->m_next;
       if (node)
       node->WritePropertyType(stream);
       node = node->m_next;
       if (node)
-        stream.Append( _T(",\n" ) );
+        stream.Append( wxT(",\n" ) );
       first = FALSE;
     }
       first = FALSE;
     }
-    stream.Append( _T(").\n\n") );
+    stream.Append( wxT(").\n\n") );
   }
 }
 
   }
 }
 
@@ -479,43 +491,43 @@ void wxPropertyValue::WritePropertyType(wxString& stream)    // Write as any oth
   {
     case wxPropertyValueInteger:
     {
   {
     case wxPropertyValueInteger:
     {
-      tmp.Printf( _T("%ld"), m_value.integer );
+      tmp.Printf( wxT("%ld"), m_value.integer );
       stream.Append( tmp );
       break;
     }
     case wxPropertyValueIntegerPtr:
     {
       stream.Append( tmp );
       break;
     }
     case wxPropertyValueIntegerPtr:
     {
-      tmp.Printf( _T("%ld"), *m_value.integerPtr );
+      tmp.Printf( wxT("%ld"), *m_value.integerPtr );
       stream.Append( tmp );
       break;
     }
     case wxPropertyValuebool:
     {
       if (m_value.integer)
       stream.Append( tmp );
       break;
     }
     case wxPropertyValuebool:
     {
       if (m_value.integer)
-        stream.Append( _T("True") );
+        stream.Append( wxT("True") );
       else
       else
-        stream.Append( _T("False") );
+        stream.Append( wxT("False") );
       break;
     }
     case wxPropertyValueboolPtr:
     {
       if (*m_value.integerPtr)
       break;
     }
     case wxPropertyValueboolPtr:
     {
       if (*m_value.integerPtr)
-        stream.Append( _T("True") );
+        stream.Append( wxT("True") );
       else
       else
-        stream.Append( _T("False") );
+        stream.Append( wxT("False") );
       break;
     }
     case wxPropertyValueReal:
     {
       double d = m_value.real;
       break;
     }
     case wxPropertyValueReal:
     {
       double d = m_value.real;
-      tmp.Printf( _T("%.6g"), d );
+      tmp.Printf( wxT("%.6g"), d );
       stream.Append( tmp );
       break;
     }
     case wxPropertyValueRealPtr:
     {
       double d = *m_value.realPtr;
       stream.Append( tmp );
       break;
     }
     case wxPropertyValueRealPtr:
     {
       double d = *m_value.realPtr;
-      tmp.Printf( _T("%.6g"), d );
+      tmp.Printf( wxT("%.6g"), d );
       stream.Append( tmp );
       break;
     }
       stream.Append( tmp );
       break;
     }
@@ -526,7 +538,7 @@ void wxPropertyValue::WritePropertyType(wxString& stream)    // Write as any oth
     }
     case wxPropertyValueStringPtr:
     {
     }
     case wxPropertyValueStringPtr:
     {
-      wxFAIL_MSG( _T("wxPropertyValue::WritePropertyType( wxPropertyValueStringPtr ) not implemented") );
+      wxFAIL_MSG( wxT("wxPropertyValue::WritePropertyType( wxPropertyValueStringPtr ) not implemented") );
       /*
       int i;
       int len = strlen(*(m_value.stringPtr));
       /*
       int i;
       int len = strlen(*(m_value.stringPtr));
@@ -541,20 +553,20 @@ void wxPropertyValue::WritePropertyType(wxString& stream)    // Write as any oth
     case wxPropertyValueList:
     {
       if (!m_value.first)
     case wxPropertyValueList:
     {
       if (!m_value.first)
-        stream.Append( _T("[]") );
+        stream.Append( wxT("[]") );
       else
       {
         wxPropertyValue *expr = m_value.first;
 
       else
       {
         wxPropertyValue *expr = m_value.first;
 
-        stream.Append( _T("[") );
+        stream.Append( wxT("[") );
         while (expr)
         {
           expr->WritePropertyType(stream);
           expr = expr->m_next;
           if (expr)
         while (expr)
         {
           expr->WritePropertyType(stream);
           expr = expr->m_next;
           if (expr)
-           stream.Append( _T(", ") );
+           stream.Append( wxT(", ") );
         }
         }
-        stream.Append( _T("]") );
+        stream.Append( wxT("]") );
       }
       break;
     }
       }
       break;
     }
@@ -581,6 +593,14 @@ void wxPropertyValue::operator=(const wxString& val1)
   const wxChar *val = (const wxChar *)val1;
 
   m_modifiedFlag = TRUE;
   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;
 
   if (m_type == wxPropertyValueNull)
     m_type = wxPropertyValueString;
 
@@ -593,8 +613,7 @@ void wxPropertyValue::operator=(const wxString& val1)
   }
   else if (m_type == wxPropertyValueStringPtr)
   {
   }
   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
     if (val)
       *m_value.stringPtr = copystring(val);
     else
@@ -609,6 +628,13 @@ void wxPropertyValue::operator=(const wxString& val1)
 
 void wxPropertyValue::operator=(const long val)
 {
 
 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;
   m_modifiedFlag = TRUE;
   if (m_type == wxPropertyValueNull)
     m_type = wxPropertyValueInteger;
@@ -628,6 +654,13 @@ void wxPropertyValue::operator=(const long val)
 
 void wxPropertyValue::operator=(const bool 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;
   m_modifiedFlag = TRUE;
   if (m_type == wxPropertyValueNull)
     m_type = wxPropertyValuebool;
@@ -643,6 +676,13 @@ void wxPropertyValue::operator=(const bool val)
 
 void wxPropertyValue::operator=(const float 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;
   m_modifiedFlag = TRUE;
   if (m_type == wxPropertyValueNull)
     m_type = wxPropertyValueReal;
@@ -662,6 +702,13 @@ void wxPropertyValue::operator=(const float val)
 
 void wxPropertyValue::operator=(const wxChar **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;
 
   m_modifiedFlag = TRUE;
   m_type = wxPropertyValueStringPtr;
 
@@ -1091,13 +1138,13 @@ bool wxPropertyValidator::StringToLong (wxChar *s, long *number) {
 
 wxChar *wxPropertyValidator::FloatToString (float number) {
        static wxChar buf[20];
 
 wxChar *wxPropertyValidator::FloatToString (float number) {
        static wxChar buf[20];
-       wxSprintf (buf, _T("%.6g"), number);
+       wxSprintf (buf, wxT("%.6g"), number);
        return buf;
 }
 
 wxChar *wxPropertyValidator::DoubleToString (double number) {
        static wxChar buf[20];
        return buf;
 }
 
 wxChar *wxPropertyValidator::DoubleToString (double number) {
        static wxChar buf[20];
-       wxSprintf (buf, _T("%.6g"), number);
+       wxSprintf (buf, wxT("%.6g"), number);
        return buf;
 }
 
        return buf;
 }