+ wxFileConfigLineList *pLine = pGroup->m_pLine;
+
+ if ( pLine != 0 )
+ {
+ wxLogTrace( _T("wxFileConfig"),
+ _T(" Removing line entry for Group '%s' : '%s'"),
+ pGroup->Name().c_str(),
+ pLine->Text().c_str() );
+ wxLogTrace( _T("wxFileConfig"),
+ _T(" Removing from Group '%s' : '%s'"),
+ Name().c_str(),
+ ((m_pLine) ? m_pLine->Text().c_str() : wxEmptyString) );
+
+ // notice that we may do this test inside the previous "if"
+ // because the last entry's line is surely !NULL
+
+ if ( pGroup == m_pLastGroup )
+ {
+ wxLogTrace( _T("wxFileConfig"),
+ _T(" ------- Removing last group -------") );
+
+ // our last entry is being deleted, so find the last one which stays.
+ // go back until we find a subgroup or reach the group's line, unless
+ // we are the root group, which we'll notice shortly.
+
+ wxFileConfigGroup *pNewLast = 0;
+ size_t nSubgroups = m_aSubgroups.Count();
+ wxFileConfigLineList *pl;
+
+ for ( pl = pLine->Prev(); pl != m_pLine; pl = pl->Prev() )
+ {
+ // is it our subgroup?
+
+ for ( size_t n = 0; (pNewLast == 0) && (n < nSubgroups); n++ )
+ {
+ // do _not_ call GetGroupLine! we don't want to add it to the local
+ // file if it's not already there
+
+ if ( m_aSubgroups[n]->m_pLine == m_pLine )
+ pNewLast = m_aSubgroups[n];
+ }
+
+ if ( pNewLast != 0 ) // found?
+ break;
+ }
+
+ if ( pl == m_pLine || m_pParent == 0 )
+ {
+ wxLogTrace( _T("wxFileConfig"),
+ _T(" ------- No previous group found -------") );
+
+ wxASSERT_MSG( !pNewLast || m_pLine == 0,
+ _T("how comes it has the same line as we?") );
+
+ // we've reached the group line without finding any subgroups,
+ // or realised we removed the last group from the root.
+
+ m_pLastGroup = 0;
+ }
+ else
+ {
+ wxLogTrace( _T("wxFileConfig"),
+ _T(" ------- Last Group set to '%s' -------"),
+ pNewLast->Name().c_str() );
+
+ m_pLastGroup = pNewLast;
+ }
+ }
+
+ m_pConfig->LineListRemove(pLine);
+ }
+ else
+ {
+ wxLogTrace( _T("wxFileConfig"),
+ _T(" No line entry for Group '%s'?"),
+ pGroup->Name().c_str() );
+ }
+
+ SetDirty();