RenameEntry/Group() functions added to wxConfig and derivations (not yet

implemented for wxIniCnfig and wxRegConfig)


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1438 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-01-20 19:54:17 +00:00
parent e0543d2a70
commit 5d1902d6d6
6 changed files with 219 additions and 121 deletions

View File

@@ -257,6 +257,17 @@ arbitrary path (either relative or absolute), not just the key name.
\helpref{Write}{wxconfigbasewrite}\\ \helpref{Write}{wxconfigbasewrite}\\
\helpref{Flush}{wxconfigbaseflush} \helpref{Flush}{wxconfigbaseflush}
\membersection{Rename entries/groups}
The functions in this section allow to rename entries or subgroups of the
current group. They will return FALSE on error. typically because either the
entry/group with the original name doesn't exist, because the entry/group with
the new name already exists or because the function is not supported in this
wxConfig implementation.
\helpref{RenameEntry}{wxconfigbaserenameentry}\\
\helpref{RenameGroup}{wxconfigbaserenamegroup}
\membersection{Delete entries/groups} \membersection{Delete entries/groups}
The functions in this section delete entries and/or groups of entries from the The functions in this section delete entries and/or groups of entries from the
@@ -561,6 +572,28 @@ not found, {\it b} is not changed.
Reads a bool value, returning TRUE if the value was found. If the value was Reads a bool value, returning TRUE if the value was found. If the value was
not found, {\it defaultVal} is used instead. not found, {\it defaultVal} is used instead.
\membersection{wxConfigBase::RenameEntry}\label{wxconfigbaserenameentry}
\func{bool}{RenameEntry}{\param{const wxString\& }{ oldName}, \param{const wxString\& }{ newName}}
Renames an entry in the current group. The entries names (both the old and
the new one) shouldn't contain backslashes, i.e. only simple names and not
arbitrary paths are accepted by this function.
Returns FALSE if the {\it oldName} doesn't exist or if {\it newName} already
exists.
\membersection{wxConfigBase::RenameGroup}\label{wxconfigbaserenamegroup}
\func{bool}{RenameGroup}{\param{const wxString\& }{ oldName}, \param{const wxString\& }{ newName}}
Renames a subgroup of the current group. The subgroup names (both the old and
the new one) shouldn't contain backslashes, i.e. only simple names and not
arbitrary paths are accepted by this function.
Returns FALSE if the {\it oldName} doesn't exist or if {\it newName} already
exists.
\membersection{wxConfigBase::Set}\label{wxconfigbaseset} \membersection{wxConfigBase::Set}\label{wxconfigbaseset}
\func{wxConfigBase *}{Set}{\param{wxConfigBase *}{pConfig}} \func{wxConfigBase *}{Set}{\param{wxConfigBase *}{pConfig}}

View File

@@ -185,6 +185,15 @@ public:
// permanently writes all changes // permanently writes all changes
virtual bool Flush(bool bCurrentOnly = FALSE) = 0; virtual bool Flush(bool bCurrentOnly = FALSE) = 0;
// renaming, all functions return FALSE on failure (probably because the new
// name is already taken by an existing entry)
// rename an entry
virtual bool RenameEntry(const wxString& oldName,
const wxString& newName) = 0;
// rename a group
virtual bool RenameGroup(const wxString& oldName,
const wxString& newName) = 0;
// delete entries/groups // delete entries/groups
// deletes the specified entry and the group it belongs to if // deletes the specified entry and the group it belongs to if
// it was the last key in it and the second parameter is true // it was the last key in it and the second parameter is true

View File

@@ -98,7 +98,7 @@
(it's on by default, the current status can be retrieved with (it's on by default, the current status can be retrieved with
IsExpandingEnvVars function). IsExpandingEnvVars function).
*/ */
class wxFileConfig; //linea nueva class wxFileConfig;
class ConfigGroup; class ConfigGroup;
class ConfigEntry; class ConfigEntry;
@@ -127,7 +127,6 @@
*m_pPrev; // previous one *m_pPrev; // previous one
}; };
class wxFileConfig : public wxConfigBase class wxFileConfig : public wxConfigBase
{ {
public: public:
@@ -209,13 +208,14 @@ public:
virtual bool Flush(bool bCurrentOnly = FALSE); virtual bool Flush(bool bCurrentOnly = FALSE);
virtual bool RenameEntry(const wxString& oldName, const wxString& newName);
virtual bool RenameGroup(const wxString& oldName, const wxString& newName);
virtual bool DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso); virtual bool DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso);
virtual bool DeleteGroup(const wxString& szKey); virtual bool DeleteGroup(const wxString& szKey);
virtual bool DeleteAll(); virtual bool DeleteAll();
public: public:
// fwd decl
// functions to work with this list // functions to work with this list
LineList *LineListAppend(const wxString& str); LineList *LineListAppend(const wxString& str);
LineList *LineListInsert(const wxString& str, LineList *LineListInsert(const wxString& str,
@@ -224,7 +224,7 @@ public:
bool LineListIsEmpty(); bool LineListIsEmpty();
private: private:
// GetXXXFileame helpers: return ('/' terminated) directory names // GetXXXFileName helpers: return ('/' terminated) directory names
static wxString GetGlobalDir(); static wxString GetGlobalDir();
static wxString GetLocalDir(); static wxString GetLocalDir();
@@ -253,12 +253,9 @@ private:
ConfigGroup *m_pRootGroup, // the top (unnamed) group ConfigGroup *m_pRootGroup, // the top (unnamed) group
*m_pCurrentGroup; // the current group *m_pCurrentGroup; // the current group
//protected: --- if wxFileConfig::ConfigEntry is not public, functions in
// ConfigGroup such as Find/AddEntry can't return "ConfigEntry *"
public: public:
WX_DEFINE_SORTED_ARRAY(ConfigEntry *, ArrayEntries); WX_DEFINE_SORTED_ARRAY(ConfigEntry *, ArrayEntries);
WX_DEFINE_SORTED_ARRAY(ConfigGroup *, ArrayGroups); WX_DEFINE_SORTED_ARRAY(ConfigGroup *, ArrayGroups);
}; };
class ConfigEntry class ConfigEntry
@@ -341,6 +338,9 @@ public:
void SetDirty(); void SetDirty();
void SetLine(LineList *pLine); void SetLine(LineList *pLine);
// rename: no checks are done to ensure that the name is unique!
void Rename(const wxString& newName);
// //
wxString GetFullName() const; wxString GetFullName() const;
@@ -356,8 +356,3 @@ public:
#endif //_FILECONF_H #endif //_FILECONF_H

View File

@@ -91,6 +91,9 @@ public:
virtual bool Flush(bool bCurrentOnly = FALSE); virtual bool Flush(bool bCurrentOnly = FALSE);
virtual bool RenameEntry(const wxString& oldName, const wxString& newName);
virtual bool RenameGroup(const wxString& oldName, const wxString& newName);
virtual bool DeleteEntry(const wxString& Key, bool bGroupIfEmptyAlso); virtual bool DeleteEntry(const wxString& Key, bool bGroupIfEmptyAlso);
virtual bool DeleteGroup(const wxString& szKey); virtual bool DeleteGroup(const wxString& szKey);
virtual bool DeleteAll(); virtual bool DeleteAll();

View File

@@ -85,6 +85,10 @@ public:
virtual bool Flush(bool /* bCurrentOnly = FALSE */ ) { return TRUE; } virtual bool Flush(bool /* bCurrentOnly = FALSE */ ) { return TRUE; }
// rename
virtual bool RenameEntry(const wxString& oldName, const wxString& newName);
virtual bool RenameGroup(const wxString& oldName, const wxString& newName);
// delete // delete
virtual bool DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso); virtual bool DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso);
virtual bool DeleteGroup(const wxString& key); virtual bool DeleteGroup(const wxString& key);

View File

@@ -73,10 +73,8 @@
inline bool IsValid(char c) { return isalnum(c) || strchr("@_/-!.*%", c); } inline bool IsValid(char c) { return isalnum(c) || strchr("@_/-!.*%", c); }
// compare functions for sorting the arrays // compare functions for sorting the arrays
static int CompareEntries(ConfigEntry *p1, static int CompareEntries(ConfigEntry *p1, ConfigEntry *p2);
ConfigEntry *p2); static int CompareGroups(ConfigGroup *p1, ConfigGroup *p2);
static int CompareGroups(ConfigGroup *p1,
ConfigGroup *p2);
// filter strings // filter strings
static wxString FilterIn(const wxString& str); static wxString FilterIn(const wxString& str);
@@ -654,6 +652,50 @@ bool wxFileConfig::Flush(bool /* bCurrentOnly */)
return file.Commit(); return file.Commit();
} }
// ----------------------------------------------------------------------------
// renaming groups/entries
// ----------------------------------------------------------------------------
bool wxFileConfig::RenameEntry(const wxString& oldName,
const wxString& newName)
{
// check that the entry exists
ConfigEntry *oldEntry = m_pCurrentGroup->FindEntry(oldName);
if ( !oldEntry )
return FALSE;
// check that the new entry doesn't already exist
if ( m_pCurrentGroup->FindEntry(newName) )
return FALSE;
// delete the old entry, create the new one
wxString value = oldEntry->Value();
if ( !m_pCurrentGroup->DeleteEntry(oldName) )
return FALSE;
ConfigEntry *newEntry = m_pCurrentGroup->AddEntry(newName);
newEntry->SetValue(value);
return TRUE;
}
bool wxFileConfig::RenameGroup(const wxString& oldName,
const wxString& newName)
{
// check that the group exists
ConfigGroup *group = m_pCurrentGroup->FindSubgroup(oldName);
if ( !group )
return FALSE;
// check that the new group doesn't already exist
if ( m_pCurrentGroup->FindSubgroup(newName) )
return FALSE;
group->Rename(newName);
return TRUE;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// delete groups/entries // delete groups/entries
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -917,6 +959,18 @@ LineList *ConfigGroup::GetLastEntryLine()
// group name // group name
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void ConfigGroup::Rename(const wxString& newName)
{
m_strName = newName;
LineList *line = GetGroupLine();
wxString strFullName;
strFullName << "[" << (GetFullName().c_str() + 1) << "]"; // +1: no '/'
line->SetText(strFullName);
SetDirty();
}
wxString ConfigGroup::GetFullName() const wxString ConfigGroup::GetFullName() const
{ {
if ( Parent() ) if ( Parent() )