#if defined(__WXMAC__)
#include "wx/mac/private.h" // includes mac headers
+ #include "wx/filename.h" // for MacSetTypeAndCreator
#endif
#if defined(__WXMSW__)
// DeleteSubgroupByName helper
bool DeleteSubgroup(wxFileConfigGroup *pGroup);
+ // used by Rename()
+ void UpdateGroupAndSubgroupsLines();
+
public:
// ctor
wxFileConfigGroup(wxFileConfigGroup *pParent, const wxString& strName, wxFileConfig *);
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 )
// 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;
}
// ----------------------------------------------------------------------------
}
else // this entry didn't exist in the local file
{
- // add a new line to the file
+ // add a new line to the file: note the hack for the root group
+ // which is special in that it doesn't have its own group line
+ // (something like "[/]") and so the line we get for it may be not
+ // its line at all if it doesn't have any entries
+ //
+ // this is definitely not the right place to fix it but changing
+ // the root group to have NULL m_pLine will probably break too
+ // much stuff elsewhere so I don't dare to do it...
wxFileConfigLineList *line = Group()->GetLastEntryLine();
+ if ( !Group()->Parent() && line == Group()->GetGroupLine() )
+ {
+ // prepend the first root group entry to the head of the list
+ line = NULL;
+ }
m_pLine = Group()->Config()->LineListInsert(strLine, line);
Group()->SetLastEntry(this);