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:
@@ -257,6 +257,17 @@ arbitrary path (either relative or absolute), not just the key name.
|
||||
\helpref{Write}{wxconfigbasewrite}\\
|
||||
\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}
|
||||
|
||||
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
|
||||
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}
|
||||
|
||||
\func{wxConfigBase *}{Set}{\param{wxConfigBase *}{pConfig}}
|
||||
|
@@ -185,6 +185,15 @@ public:
|
||||
// permanently writes all changes
|
||||
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
|
||||
// deletes the specified entry and the group it belongs to if
|
||||
// it was the last key in it and the second parameter is true
|
||||
|
@@ -98,7 +98,7 @@
|
||||
(it's on by default, the current status can be retrieved with
|
||||
IsExpandingEnvVars function).
|
||||
*/
|
||||
class wxFileConfig; //linea nueva
|
||||
class wxFileConfig;
|
||||
class ConfigGroup;
|
||||
class ConfigEntry;
|
||||
|
||||
@@ -127,7 +127,6 @@
|
||||
*m_pPrev; // previous one
|
||||
};
|
||||
|
||||
|
||||
class wxFileConfig : public wxConfigBase
|
||||
{
|
||||
public:
|
||||
@@ -209,13 +208,14 @@ public:
|
||||
|
||||
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 DeleteGroup(const wxString& szKey);
|
||||
virtual bool DeleteAll();
|
||||
|
||||
public:
|
||||
// fwd decl
|
||||
|
||||
// functions to work with this list
|
||||
LineList *LineListAppend(const wxString& str);
|
||||
LineList *LineListInsert(const wxString& str,
|
||||
@@ -224,7 +224,7 @@ public:
|
||||
bool LineListIsEmpty();
|
||||
|
||||
private:
|
||||
// GetXXXFileame helpers: return ('/' terminated) directory names
|
||||
// GetXXXFileName helpers: return ('/' terminated) directory names
|
||||
static wxString GetGlobalDir();
|
||||
static wxString GetLocalDir();
|
||||
|
||||
@@ -253,12 +253,9 @@ private:
|
||||
ConfigGroup *m_pRootGroup, // the top (unnamed) 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:
|
||||
WX_DEFINE_SORTED_ARRAY(ConfigEntry *, ArrayEntries);
|
||||
WX_DEFINE_SORTED_ARRAY(ConfigGroup *, ArrayGroups);
|
||||
|
||||
};
|
||||
|
||||
class ConfigEntry
|
||||
@@ -341,6 +338,9 @@ public:
|
||||
void SetDirty();
|
||||
void SetLine(LineList *pLine);
|
||||
|
||||
// rename: no checks are done to ensure that the name is unique!
|
||||
void Rename(const wxString& newName);
|
||||
|
||||
//
|
||||
wxString GetFullName() const;
|
||||
|
||||
@@ -356,8 +356,3 @@ public:
|
||||
|
||||
#endif //_FILECONF_H
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -91,6 +91,9 @@ public:
|
||||
|
||||
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 DeleteGroup(const wxString& szKey);
|
||||
virtual bool DeleteAll();
|
||||
|
@@ -85,6 +85,10 @@ public:
|
||||
|
||||
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
|
||||
virtual bool DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso);
|
||||
virtual bool DeleteGroup(const wxString& key);
|
||||
|
@@ -73,10 +73,8 @@
|
||||
inline bool IsValid(char c) { return isalnum(c) || strchr("@_/-!.*%", c); }
|
||||
|
||||
// compare functions for sorting the arrays
|
||||
static int CompareEntries(ConfigEntry *p1,
|
||||
ConfigEntry *p2);
|
||||
static int CompareGroups(ConfigGroup *p1,
|
||||
ConfigGroup *p2);
|
||||
static int CompareEntries(ConfigEntry *p1, ConfigEntry *p2);
|
||||
static int CompareGroups(ConfigGroup *p1, ConfigGroup *p2);
|
||||
|
||||
// filter strings
|
||||
static wxString FilterIn(const wxString& str);
|
||||
@@ -654,6 +652,50 @@ bool wxFileConfig::Flush(bool /* bCurrentOnly */)
|
||||
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
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -917,6 +959,18 @@ LineList *ConfigGroup::GetLastEntryLine()
|
||||
// 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
|
||||
{
|
||||
if ( Parent() )
|
||||
|
Reference in New Issue
Block a user