bool IsEmpty() const { return Entries().IsEmpty() && Groups().IsEmpty(); }
// find entry/subgroup (NULL if not found)
- wxFileConfigGroup *FindSubgroup(const wxChar *szName) const;
- wxFileConfigEntry *FindEntry (const wxChar *szName) const;
+ wxFileConfigGroup *FindSubgroup(const wxString& name) const;
+ wxFileConfigEntry *FindEntry (const wxString& name) const;
// delete entry/subgroup, return false if doesn't exist
- bool DeleteSubgroupByName(const wxChar *szName);
- bool DeleteEntry(const wxChar *szName);
+ bool DeleteSubgroupByName(const wxString& name);
+ bool DeleteEntry(const wxString& name);
// create new entry/subgroup returning pointer to newly created element
wxFileConfigGroup *AddSubgroup(const wxString& strName);
void wxFileConfig::Parse(const wxTextBuffer& buffer, bool bLocal)
{
- const wxChar *pStart;
- const wxChar *pEnd;
- wxString strLine;
size_t nLineCount = buffer.GetLineCount();
for ( size_t n = 0; n < nLineCount; n++ )
{
- strLine = buffer[n];
+ wxString strLine = buffer[n];
+ // FIXME-UTF8: rewrite using iterators, without this buffer
+ wxWxCharBuffer buf(strLine.c_str());
+ const wxChar *pStart;
+ const wxChar *pEnd;
// add the line to linked list
if ( bLocal )
// skip leading spaces
- for ( pStart = strLine; wxIsspace(*pStart); pStart++ )
+ for ( pStart = buf; wxIsspace(*pStart); pStart++ )
;
// skip blank/comment lines
// change current group
size_t n;
m_pCurrentGroup = m_pRootGroup;
- for ( n = 0; n < aParts.Count(); n++ ) {
+ for ( n = 0; n < aParts.GetCount(); n++ ) {
wxFileConfigGroup *pNextGroup = m_pCurrentGroup->FindSubgroup(aParts[n]);
if ( pNextGroup == NULL )
{
// recombine path parts in one variable
m_strPath.Empty();
- for ( n = 0; n < aParts.Count(); n++ ) {
+ for ( n = 0; n < aParts.GetCount(); n++ ) {
m_strPath << wxCONFIG_PATH_SEPARATOR << aParts[n];
}
bool wxFileConfig::GetNextGroup (wxString& str, long& lIndex) const
{
- if ( size_t(lIndex) < m_pCurrentGroup->Groups().Count() ) {
+ if ( size_t(lIndex) < m_pCurrentGroup->Groups().GetCount() ) {
str = m_pCurrentGroup->Groups()[(size_t)lIndex++]->Name();
return true;
}
bool wxFileConfig::GetNextEntry (wxString& str, long& lIndex) const
{
- if ( size_t(lIndex) < m_pCurrentGroup->Entries().Count() ) {
+ if ( size_t(lIndex) < m_pCurrentGroup->Entries().GetCount() ) {
str = m_pCurrentGroup->Entries()[(size_t)lIndex++]->Name();
return true;
}
size_t wxFileConfig::GetNumberOfEntries(bool bRecursive) const
{
- size_t n = m_pCurrentGroup->Entries().Count();
+ size_t n = m_pCurrentGroup->Entries().GetCount();
if ( bRecursive ) {
wxFileConfigGroup *pOldCurrentGroup = m_pCurrentGroup;
- size_t nSubgroups = m_pCurrentGroup->Groups().Count();
+ size_t nSubgroups = m_pCurrentGroup->Groups().GetCount();
for ( size_t nGroup = 0; nGroup < nSubgroups; nGroup++ ) {
CONST_CAST m_pCurrentGroup = m_pCurrentGroup->Groups()[nGroup];
n += GetNumberOfEntries(true);
size_t wxFileConfig::GetNumberOfGroups(bool bRecursive) const
{
- size_t n = m_pCurrentGroup->Groups().Count();
+ size_t n = m_pCurrentGroup->Groups().GetCount();
if ( bRecursive ) {
wxFileConfigGroup *pOldCurrentGroup = m_pCurrentGroup;
- size_t nSubgroups = m_pCurrentGroup->Groups().Count();
+ size_t nSubgroups = m_pCurrentGroup->Groups().GetCount();
for ( size_t nGroup = 0; nGroup < nSubgroups; nGroup++ ) {
CONST_CAST m_pCurrentGroup = m_pCurrentGroup->Groups()[nGroup];
n += GetNumberOfGroups(true);
bool wxFileConfig::RenameEntry(const wxString& oldName,
const wxString& newName)
{
- wxASSERT_MSG( !wxStrchr(oldName, wxCONFIG_PATH_SEPARATOR),
+ wxASSERT_MSG( oldName.find(wxCONFIG_PATH_SEPARATOR) == wxString::npos,
_T("RenameEntry(): paths are not supported") );
// check that the entry exists
if ( m_fnLocalFile.IsOk() )
{
- if ( m_fnLocalFile.FileExists() && wxRemove(m_fnLocalFile.GetFullPath()) == -1 )
+ if ( m_fnLocalFile.FileExists() &&
+ !wxRemoveFile(m_fnLocalFile.GetFullPath()) )
{
wxLogSysError(_("can't delete user configuration file '%s'"),
m_fnLocalFile.GetFullPath().c_str());
wxFileConfigGroup::~wxFileConfigGroup()
{
// entries
- size_t n, nCount = m_aEntries.Count();
+ size_t n, nCount = m_aEntries.GetCount();
for ( n = 0; n < nCount; n++ )
delete m_aEntries[n];
// subgroups
- nCount = m_aSubgroups.Count();
+ nCount = m_aSubgroups.GetCount();
for ( n = 0; n < nCount; n++ )
delete m_aSubgroups[n];
}
// also update all subgroups as they have this groups name in their lines
- const size_t nCount = m_aSubgroups.Count();
+ const size_t nCount = m_aSubgroups.GetCount();
for ( size_t n = 0; n < nCount; n++ )
{
m_aSubgroups[n]->UpdateGroupAndSubgroupsLines();
// use binary search because the array is sorted
wxFileConfigEntry *
-wxFileConfigGroup::FindEntry(const wxChar *szName) const
+wxFileConfigGroup::FindEntry(const wxString& name) const
{
size_t i,
lo = 0,
- hi = m_aEntries.Count();
+ hi = m_aEntries.GetCount();
int res;
wxFileConfigEntry *pEntry;
pEntry = m_aEntries[i];
#if wxCONFIG_CASE_SENSITIVE
- res = wxStrcmp(pEntry->Name(), szName);
+ res = pEntry->Name().compare(name);
#else
- res = wxStricmp(pEntry->Name(), szName);
+ res = pEntry->Name().CmpNoCase(name);
#endif
if ( res > 0 )
}
wxFileConfigGroup *
-wxFileConfigGroup::FindSubgroup(const wxChar *szName) const
+wxFileConfigGroup::FindSubgroup(const wxString& name) const
{
size_t i,
lo = 0,
- hi = m_aSubgroups.Count();
+ hi = m_aSubgroups.GetCount();
int res;
wxFileConfigGroup *pGroup;
pGroup = m_aSubgroups[i];
#if wxCONFIG_CASE_SENSITIVE
- res = wxStrcmp(pGroup->Name(), szName);
+ res = pGroup->Name().compare(name);
#else
- res = wxStricmp(pGroup->Name(), szName);
+ res = pGroup->Name().CmpNoCase(name);
#endif
if ( res > 0 )
delete several of them.
*/
-bool wxFileConfigGroup::DeleteSubgroupByName(const wxChar *szName)
+bool wxFileConfigGroup::DeleteSubgroupByName(const wxString& name)
{
- wxFileConfigGroup * const pGroup = FindSubgroup(szName);
+ wxFileConfigGroup * const pGroup = FindSubgroup(name);
return pGroup ? DeleteSubgroup(pGroup) : false;
}
: wxEmptyString );
// delete all entries...
- size_t nCount = pGroup->m_aEntries.Count();
+ size_t nCount = pGroup->m_aEntries.GetCount();
wxLogTrace(FILECONF_TRACE_MASK,
_T("Removing %lu entries"), (unsigned long)nCount );
}
// ...and subgroups of this subgroup
- nCount = pGroup->m_aSubgroups.Count();
+ nCount = pGroup->m_aSubgroups.GetCount();
wxLogTrace( FILECONF_TRACE_MASK,
_T("Removing %lu subgroups"), (unsigned long)nCount );
// our last entry is being deleted, so find the last one which
// stays by going back until we find a subgroup or reach the
// group line
- const size_t nSubgroups = m_aSubgroups.Count();
+ const size_t nSubgroups = m_aSubgroups.GetCount();
m_pLastGroup = NULL;
for ( wxFileConfigLineList *pl = pLine->Prev();
- pl && pl != m_pLine && !m_pLastGroup;
+ pl && !m_pLastGroup;
pl = pl->Prev() )
{
// does this line belong to our subgroup?
break;
}
}
+
+ if ( pl == m_pLine )
+ break;
}
}
return true;
}
-bool wxFileConfigGroup::DeleteEntry(const wxChar *szName)
+bool wxFileConfigGroup::DeleteEntry(const wxString& name)
{
- wxFileConfigEntry *pEntry = FindEntry(szName);
+ wxFileConfigEntry *pEntry = FindEntry(name);
if ( !pEntry )
{
// entry doesn't exist, nothing to do
// go back until we find another entry or reach the group's line
wxFileConfigEntry *pNewLast = NULL;
- size_t n, nEntries = m_aEntries.Count();
+ size_t n, nEntries = m_aEntries.GetCount();
wxFileConfigLineList *pl;
for ( pl = pLine->Prev(); pl != m_pLine; pl = pl->Prev() ) {
// is it our subgroup?
int CompareEntries(wxFileConfigEntry *p1, wxFileConfigEntry *p2)
{
#if wxCONFIG_CASE_SENSITIVE
- return wxStrcmp(p1->Name(), p2->Name());
+ return p1->Name().compare(p2->Name());
#else
- return wxStricmp(p1->Name(), p2->Name());
+ return p1->Name().CmpNoCase(p2->Name());
#endif
}
int CompareGroups(wxFileConfigGroup *p1, wxFileConfigGroup *p2)
{
#if wxCONFIG_CASE_SENSITIVE
- return wxStrcmp(p1->Name(), p2->Name());
+ return p1->Name().compare(p2->Name());
#else
- return wxStricmp(p1->Name(), p2->Name());
+ return p1->Name().CmpNoCase(p2->Name());
#endif
}