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:
parent
20eebe1aa8
commit
41f3015283
@ -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}
|
||||
|
@ -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
|
||||
|
@ -1145,6 +1145,8 @@ bool wxFileConfig::DeleteGroup(const wxString& key)
|
||||
if ( !m_pCurrentGroup->DeleteSubgroupByName(path.Name()) )
|
||||
return false;
|
||||
|
||||
path.UpdateIfDeleted();
|
||||
|
||||
SetDirty();
|
||||
|
||||
return true;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user