fix the bug with the current path being restored if it was under the group being deleted with DeleteGroup(); clarify what happens in this case in the docs

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40095 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2006-07-14 22:08:43 +00:00
parent 20eebe1aa8
commit 41f3015283
4 changed files with 34 additions and 4 deletions

View File

@ -454,7 +454,10 @@ in it and the second parameter is true.
\func{bool}{DeleteGroup}{\param{const wxString\& }{ key}}
Delete the group (with all subgroups)
Delete the group (with all subgroups). If the current path is under the group
being deleted it is changed to its deepest still existing component. E.g. if
the current path is \texttt{/A/B/C/D} and the group \texttt{C} is deleted the
path becomes \texttt{/A/B}.
\membersection{wxConfigBase::Exists}\label{wxconfigbaseexists}

View File

@ -274,6 +274,21 @@ wxConfigPathChanger::wxConfigPathChanger(const wxConfigBase *pContainer,
}
}
void wxConfigPathChanger::UpdateIfDeleted()
{
// we don't have to do anything at all if we didn't change the path
if ( !m_bChanged )
return;
// find the deepest still existing parent path of the original path
while ( !m_pContainer->HasGroup(m_strOldPath) )
{
m_strOldPath = m_strOldPath.BeforeLast(wxCONFIG_PATH_SEPARATOR);
if ( m_strOldPath.empty() )
m_strOldPath = wxCONFIG_PATH_SEPARATOR;
}
}
wxConfigPathChanger::~wxConfigPathChanger()
{
// only restore path if it was changed

View File

@ -1145,6 +1145,8 @@ bool wxFileConfig::DeleteGroup(const wxString& key)
if ( !m_pCurrentGroup->DeleteSubgroupByName(path.Name()) )
return false;
path.UpdateIfDeleted();
SetDirty();
return true;

View File

@ -699,7 +699,18 @@ bool wxRegConfig::DeleteGroup(const wxString& key)
{
wxConfigPathChanger path(this, key);
return m_keyLocal.Exists() ? LocalKey().DeleteKey(path.Name()) : true;
if ( !m_keyLocal.Exists() )
{
// nothing to do
return true;
}
if ( !LocalKey().DeleteKey(path.Name()) )
return false;
path.UpdateIfDeleted();
return true;
}
bool wxRegConfig::DeleteAll()
@ -717,5 +728,4 @@ bool wxRegConfig::DeleteAll()
return bOk;
}
#endif
// wxUSE_CONFIG
#endif // wxUSE_CONFIG