]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/fileconf.cpp
Warning fixes found under hardest mode of OpenWatcom. Seems clean in Borland, MinGW...
[wxWidgets.git] / src / common / fileconf.cpp
index 40e7383cf5ebb0024446bca039da990a854b8acf..7fcaadeb5d845c927d9114585c8963e34bfbcaa2 100644 (file)
@@ -49,6 +49,7 @@
 
 #if defined(__WXMAC__)
   #include  "wx/mac/private.h"  // includes mac headers
+  #include  "wx/filename.h"     // for MacSetTypeAndCreator
 #endif
 
 #if defined(__WXMSW__)
@@ -205,6 +206,9 @@ private:
   // DeleteSubgroupByName helper
   bool DeleteSubgroup(wxFileConfigGroup *pGroup);
 
+  // used by Rename()
+  void UpdateGroupAndSubgroupsLines();
+
 public:
   // ctor
   wxFileConfigGroup(wxFileConfigGroup *pParent, const wxString& strName, wxFileConfig *);
@@ -1028,6 +1032,9 @@ bool wxFileConfig::Save(wxOutputStream& os, wxMBConv& conv)
 bool wxFileConfig::RenameEntry(const wxString& oldName,
                                const wxString& newName)
 {
+    wxASSERT_MSG( !wxStrchr(oldName, wxCONFIG_PATH_SEPARATOR),
+                   _T("RenameEntry(): paths are not supported") );
+
     // check that the entry exists
     wxFileConfigEntry *oldEntry = m_pCurrentGroup->FindEntry(oldName);
     if ( !oldEntry )
@@ -1442,28 +1449,41 @@ void wxFileConfigGroup::SetLastEntry(wxFileConfigEntry *pEntry)
 // group name
 // ----------------------------------------------------------------------------
 
+void wxFileConfigGroup::UpdateGroupAndSubgroupsLines()
+{
+    // update the line of this group
+    wxFileConfigLineList *line = GetGroupLine();
+    wxCHECK_RET( line, _T("a non root group must have a corresponding line!") );
+
+    // +1: skip the leading '/'
+    line->SetText(wxString::Format(_T("[%s]"), GetFullName().c_str() + 1));
+
+
+    // also update all subgroups as they have this groups name in their lines
+    const size_t nCount = m_aSubgroups.Count();
+    for ( size_t n = 0; n < nCount; n++ )
+    {
+        m_aSubgroups[n]->UpdateGroupAndSubgroupsLines();
+    }
+}
+
 void wxFileConfigGroup::Rename(const wxString& newName)
 {
     wxCHECK_RET( m_pParent, _T("the root group can't be renamed") );
 
     m_strName = newName;
 
-    // +1: no leading '/'
-    wxString strFullName;
-    strFullName << wxT("[") << (GetFullName().c_str() + 1) << wxT("]");
-
-    wxFileConfigLineList *line = GetGroupLine();
-    wxCHECK_RET( line, _T("a non root group must have a corresponding line!") );
-
-    line->SetText(strFullName);
+    // update the group lines recursively
+    UpdateGroupAndSubgroupsLines();
 }
 
 wxString wxFileConfigGroup::GetFullName() const
 {
-  if ( Parent() )
-    return Parent()->GetFullName() + wxCONFIG_PATH_SEPARATOR + Name();
-  else
-    return wxT("");
+    wxString fullname;
+    if ( Parent() )
+        fullname = Parent()->GetFullName() + wxCONFIG_PATH_SEPARATOR + Name();
+
+    return fullname;
 }
 
 // ----------------------------------------------------------------------------