]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/xrc/xmlres.cpp
removed enum that was causing more problems than it was worth
[wxWidgets.git] / contrib / src / xrc / xmlres.cpp
index d795abd5094c580df9772d7e70314d5b405597e2..6e826ff82c57621edb2d0c141001576386b4683d 100644 (file)
@@ -60,7 +60,6 @@ wxXmlResource *wxXmlResource::ms_instance = NULL;
 
 wxXmlResource::wxXmlResource(int flags)
 {
-    m_handlers.DeleteContents(TRUE);
     m_flags = flags;
     m_version = -1;
 }
@@ -69,7 +68,6 @@ wxXmlResource::wxXmlResource(const wxString& filemask, int flags)
 {
     m_flags = flags;
     m_version = -1;
-    m_handlers.DeleteContents(TRUE);
     Load(filemask);
 }
 
@@ -84,7 +82,7 @@ bool wxXmlResource::Load(const wxString& filemask)
     wxString fnd;
     wxXmlResourceDataRecord *drec;
     bool iswild = wxIsWild(filemask);
-    bool rt = TRUE;
+    bool rt = true;
 
 #if wxUSE_FILESYSTEM
     wxFileSystem fsys;
@@ -163,7 +161,7 @@ void wxXmlResource::InsertHandler(wxXmlResourceHandler *handler)
 
 void wxXmlResource::ClearHandlers()
 {
-    m_handlers.Clear();
+    WX_CLEAR_LIST(wxList, m_handlers);
 }
 
 
@@ -262,7 +260,7 @@ bool wxXmlResource::AttachUnknownControl(const wxString& name,
     if (!container)
     {
         wxLogError(_("Cannot find container for unknown control '%s'."), name.c_str());
-        return FALSE;
+        return false;
     }
     return control->Reparent(container);
 }
@@ -276,9 +274,9 @@ static void ProcessPlatformProperty(wxXmlNode *node)
     wxXmlNode *c = node->GetChildren();
     while (c)
     {
-        isok = FALSE;
+        isok = false;
         if (!c->GetPropVal(wxT("platform"), &s))
-            isok = TRUE;
+            isok = true;
         else
         {
             wxStringTokenizer tkn(s, wxT(" |"));
@@ -326,6 +324,7 @@ bool wxXmlResource::UpdateResources()
     bool modif;
 #   if wxUSE_FILESYSTEM
     wxFSFile *file = NULL;
+    wxUnusedVar(file);
     wxFileSystem fsys;
 #   endif
 
@@ -344,7 +343,7 @@ bool wxXmlResource::UpdateResources()
     {
         modif = (m_data[i].Doc == NULL);
 
-        if (!modif)
+        if (!modif && !(m_flags & wxXRC_NO_RELOADING))
         {
 #           if wxUSE_FILESYSTEM
             file = fsys.OpenFile(m_data[i].File);
@@ -355,6 +354,7 @@ bool wxXmlResource::UpdateResources()
                 rt = false;
             }
             wxDELETE(file);
+            wxUnusedVar(file);
 #           else
             modif = wxDateTime(wxFileModificationTime(m_data[i].File)) > m_data[i].Time;
 #           endif
@@ -362,12 +362,15 @@ bool wxXmlResource::UpdateResources()
 
         if (modif)
         {
+            wxLogTrace(_T("xrc"),
+                       _T("opening file '%s'"), m_data[i].File.c_str());
+
             wxInputStream *stream = NULL;
 
 #           if wxUSE_FILESYSTEM
             file = fsys.OpenFile(m_data[i].File);
-                       if (file)
-                               stream = file->GetStream();
+            if (file)
+                stream = file->GetStream();
 #           else
             stream = new wxFileInputStream(m_data[i].File);
 #           endif
@@ -391,7 +394,7 @@ bool wxXmlResource::UpdateResources()
                 rt = false;
             }
             else
-                       {
+            {
                 long version;
                 int v1, v2, v3, v4;
                 wxString verstr = m_data[i].Doc->GetRoot()->GetPropVal(
@@ -410,13 +413,18 @@ bool wxXmlResource::UpdateResources()
                 }
 
                 ProcessPlatformProperty(m_data[i].Doc->GetRoot());
-                               m_data[i].Time = file->GetModificationTime();
-                       }
+#if wxUSE_FILESYSTEM
+                m_data[i].Time = file->GetModificationTime();
+#else
+                m_data[i].Time = wxDateTime(wxFileModificationTime(m_data[i].File));
+#endif
+            }
 
 #           if wxUSE_FILESYSTEM
-                               wxDELETE(file);
+                wxDELETE(file);
+                wxUnusedVar(file);
 #           else
-                               wxDELETE(stream);
+                wxDELETE(stream);
 #           endif
         }
     }
@@ -451,7 +459,7 @@ wxXmlNode *wxXmlResource::DoFindResource(wxXmlNode *parent,
                 wxString refName = node->GetPropVal(wxT("ref"), wxEmptyString);
                 if (refName.empty())
                     continue;
-                wxXmlNode* refNode = FindResource(refName, wxEmptyString, TRUE);
+                wxXmlNode* refNode = FindResource(refName, wxEmptyString, true);
                 if (refNode &&
                     refNode->GetPropVal(wxT("class"), wxEmptyString) == classname)
                 {
@@ -468,7 +476,7 @@ wxXmlNode *wxXmlResource::DoFindResource(wxXmlNode *parent,
                  (node->GetName() == wxT("object") ||
                   node->GetName() == wxT("object_ref")) )
             {
-                wxXmlNode* found = DoFindResource(node, name, classname, TRUE);
+                wxXmlNode* found = DoFindResource(node, name, classname, true);
                 if ( found )
                     return found;
             }
@@ -560,7 +568,7 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent,
     if ( node->GetName() == wxT("object_ref") )
     {
         wxString refName = node->GetPropVal(wxT("ref"), wxEmptyString);
-        wxXmlNode* refNode = FindResource(refName, wxEmptyString, TRUE);
+        wxXmlNode* refNode = FindResource(refName, wxEmptyString, true);
 
         if ( !refNode )
         {
@@ -586,7 +594,7 @@ wxObject *wxXmlResource::CreateResFromNode(wxXmlNode *node, wxObject *parent,
     }
     else if (node->GetName() == wxT("object"))
     {
-        wxNode *ND = m_handlers.GetFirst();
+        wxList::compatibility_iterator ND = m_handlers.GetFirst();
         while (ND)
         {
             handler = (wxXmlResourceHandler*)ND->GetData();
@@ -616,7 +624,6 @@ wxXmlSubclassFactoriesList *wxXmlResource::ms_subclassFactories = NULL;
     if (!ms_subclassFactories)
     {
         ms_subclassFactories = new wxXmlSubclassFactoriesList;
-        ms_subclassFactories->DeleteContents(TRUE);
     }
     ms_subclassFactories->Append(factory);
 }
@@ -662,7 +669,7 @@ wxObject *wxXmlResourceHandler::CreateResource(wxXmlNode *node, wxObject *parent
         wxString subclass = node->GetPropVal(wxT("subclass"), wxEmptyString);
         if (!subclass.empty())
         {
-            for (wxXmlSubclassFactoriesList::Node *i = wxXmlResource::ms_subclassFactories->GetFirst();
+            for (wxXmlSubclassFactoriesList::compatibility_iterator i = wxXmlResource::ms_subclassFactories->GetFirst();
                  i; i = i->GetNext())
             {
                 m_instance = i->GetData()->Create(subclass);
@@ -715,6 +722,8 @@ void wxXmlResourceHandler::AddWindowStyles()
     XRC_ADD_STYLE(wxTRANSPARENT_WINDOW);
     XRC_ADD_STYLE(wxWANTS_CHARS);
     XRC_ADD_STYLE(wxNO_FULL_REPAINT_ON_RESIZE);
+    XRC_ADD_STYLE(wxFULL_REPAINT_ON_RESIZE);
+    XRC_ADD_STYLE(wxWS_EX_BLOCK_EVENTS);
 }
 
 
@@ -751,7 +760,8 @@ int wxXmlResourceHandler::GetStyle(const wxString& param, int defaults)
 
 wxString wxXmlResourceHandler::GetText(const wxString& param, bool translate)
 {
-    wxString str1(GetParamValue(param));
+    wxXmlNode *parNode = GetParamNode(param);
+    wxString str1(GetNodeContent(parNode));
     wxString str2;
     const wxChar *dt;
     wxChar amp_char;
@@ -787,11 +797,31 @@ wxString wxXmlResourceHandler::GetText(const wxString& param, bool translate)
         else str2 << *dt;
     }
 
-    if (translate && m_resource->GetFlags() & wxXRC_USE_LOCALE)
-        return wxGetTranslation(str2);
+    if (m_resource->GetFlags() & wxXRC_USE_LOCALE)
+    {
+        if (translate && parNode &&
+            parNode->GetPropVal(wxT("translate"), wxEmptyString) != wxT("0"))
+        {
+            return wxGetTranslation(str2);
+        }
+        else
+        {
+#if wxUSE_UNICODE
+            return str2;
+#else
+            // The string is internally stored as UTF-8, we have to convert
+            // it into system's default encoding so that it can be displayed:
+            return wxString(str2.mb_str(wxConvUTF8), wxConvLocal);
+#endif
+        }
+    }
     else
+    {
+        // If wxXRC_USE_LOCALE is not set, then the string is already in
+        // system's default encoding in ANSI build, so we don't have to
+        // do anything special here.
         return str2;
-
+    }
 }
 
 
@@ -963,7 +993,7 @@ wxSize wxXmlResourceHandler::GetSize(const wxString& param)
     wxString s = GetParamValue(param);
     if (s.IsEmpty()) s = wxT("-1,-1");
     bool is_dlg;
-    long sx, sy;
+    long sx, sy = 0;
 
     is_dlg = s[s.Length()-1] == wxT('d');
     if (is_dlg) s.RemoveLast();
@@ -1063,7 +1093,7 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param)
     else if (family == wxT("swiss")) ifamily = wxSWISS;
     else if (family == wxT("modern")) ifamily = wxMODERN;
 
-    bool underlined = GetBool(wxT("underlined"), FALSE);
+    bool underlined = GetBool(wxT("underlined"), false);
 
     wxString encoding = GetParamValue(wxT("encoding"));
     wxFontMapper mapper;
@@ -1080,7 +1110,7 @@ wxFont wxXmlResourceHandler::GetFont(const wxString& param)
     wxStringTokenizer tk(faces, wxT(","));
     while (tk.HasMoreTokens())
     {
-        int index = enu.GetFacenames()->Index(tk.GetNextToken(), FALSE);
+        int index = enu.GetFacenames()->Index(tk.GetNextToken(), false);
         if (index != wxNOT_FOUND)
         {
             facename = (*enu.GetFacenames())[index];
@@ -1100,17 +1130,20 @@ void wxXmlResourceHandler::SetupWindow(wxWindow *wnd)
     //FIXME : add cursor
 
     if (HasParam(wxT("exstyle")))
-        wnd->SetExtraStyle(GetStyle(wxT("exstyle")));
+        // Have to OR it with existing style, since
+        // some implementations (e.g. wxGTK) use the extra style
+        // during creation
+        wnd->SetExtraStyle(wnd->GetExtraStyle() | GetStyle(wxT("exstyle")));
     if (HasParam(wxT("bg")))
         wnd->SetBackgroundColour(GetColour(wxT("bg")));
     if (HasParam(wxT("fg")))
         wnd->SetForegroundColour(GetColour(wxT("fg")));
     if (GetBool(wxT("enabled"), 1) == 0)
-        wnd->Enable(FALSE);
+        wnd->Enable(false);
     if (GetBool(wxT("focused"), 0) == 1)
         wnd->SetFocus();
     if (GetBool(wxT("hidden"), 0) == 1)
-        wnd->Show(FALSE);
+        wnd->Show(false);
 #if wxUSE_TOOLTIPS
     if (HasParam(wxT("tooltip")))
         wnd->SetToolTip(GetText(wxT("tooltip")));
@@ -1183,14 +1216,12 @@ static int XRCID_Lookup(const wxChar *str_id, int value_if_not_found = -2)
     index %= XRCID_TABLE_SIZE;
 
     XRCID_record *oldrec = NULL;
-    int matchcnt = 0;
     for (XRCID_record *rec = XRCID_Records[index]; rec; rec = rec->next)
     {
         if (wxStrcmp(rec->key, str_id) == 0)
         {
             return rec->id;
         }
-        matchcnt++;
         oldrec = rec;
     }
 
@@ -1281,11 +1312,13 @@ public:
     {
         AddStdXRCID_Records();
         wxXmlResource::AddSubclassFactory(new wxXmlSubclassFactoryCXX);
-        return TRUE;
+        return true;
     }
     void OnExit()
     {
         delete wxXmlResource::Set(NULL);
+        if(wxXmlResource::ms_subclassFactories)
+            WX_CLEAR_LIST(wxXmlSubclassFactoriesList, *wxXmlResource::ms_subclassFactories);
         wxDELETE(wxXmlResource::ms_subclassFactories);
         CleanXRCID_Records();
     }