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:
@@ -98,35 +98,34 @@
|
||||
(it's on by default, the current status can be retrieved with
|
||||
IsExpandingEnvVars function).
|
||||
*/
|
||||
class wxFileConfig; //linea nueva
|
||||
class ConfigGroup;
|
||||
class ConfigEntry;
|
||||
class wxFileConfig;
|
||||
class ConfigGroup;
|
||||
class ConfigEntry;
|
||||
|
||||
// we store all lines of the local config file as a linked list in memory
|
||||
class LineList
|
||||
{
|
||||
public:
|
||||
void SetNext(LineList *pNext) { m_pNext = pNext; }
|
||||
void SetPrev(LineList *pPrev) { m_pPrev = pPrev; }
|
||||
// we store all lines of the local config file as a linked list in memory
|
||||
class LineList
|
||||
{
|
||||
public:
|
||||
void SetNext(LineList *pNext) { m_pNext = pNext; }
|
||||
void SetPrev(LineList *pPrev) { m_pPrev = pPrev; }
|
||||
|
||||
// ctor
|
||||
LineList(const wxString& str, LineList *pNext = (LineList *) NULL) : m_strLine(str)
|
||||
{ SetNext(pNext); SetPrev((LineList *) NULL); }
|
||||
// ctor
|
||||
LineList(const wxString& str, LineList *pNext = (LineList *) NULL) : m_strLine(str)
|
||||
{ SetNext(pNext); SetPrev((LineList *) NULL); }
|
||||
|
||||
//
|
||||
LineList *Next() const { return m_pNext; }
|
||||
LineList *Prev() const { return m_pPrev; }
|
||||
//
|
||||
LineList *Next() const { return m_pNext; }
|
||||
LineList *Prev() const { return m_pPrev; }
|
||||
|
||||
//
|
||||
void SetText(const wxString& str) { m_strLine = str; }
|
||||
const wxString& Text() const { return m_strLine; }
|
||||
|
||||
private:
|
||||
wxString m_strLine; // line contents
|
||||
LineList *m_pNext, // next node
|
||||
*m_pPrev; // previous one
|
||||
};
|
||||
//
|
||||
void SetText(const wxString& str) { m_strLine = str; }
|
||||
const wxString& Text() const { return m_strLine; }
|
||||
|
||||
private:
|
||||
wxString m_strLine; // line contents
|
||||
LineList *m_pNext, // next node
|
||||
*m_pPrev; // previous one
|
||||
};
|
||||
|
||||
class wxFileConfig : public wxConfigBase
|
||||
{
|
||||
@@ -190,32 +189,33 @@ public:
|
||||
|
||||
// The following are necessary to satisfy the compiler
|
||||
wxString Read(const wxString& key, const wxString& defVal) const
|
||||
{ return wxConfigBase::Read(key, defVal); }
|
||||
{ return wxConfigBase::Read(key, defVal); }
|
||||
bool Read(const wxString& key, long *pl, long defVal) const
|
||||
{ return wxConfigBase::Read(key, pl, defVal); }
|
||||
{ return wxConfigBase::Read(key, pl, defVal); }
|
||||
long Read(const wxString& key, long defVal) const
|
||||
{ return wxConfigBase::Read(key, defVal); }
|
||||
{ return wxConfigBase::Read(key, defVal); }
|
||||
bool Read(const wxString& key, int *pi, int defVal) const
|
||||
{ return wxConfigBase::Read(key, pi, defVal); }
|
||||
bool Read(const wxString& key, int *pi) const
|
||||
{ return wxConfigBase::Read(key, pi); }
|
||||
bool Read(const wxString& key, double* val) const
|
||||
{ return wxConfigBase::Read(key, val); }
|
||||
{ return wxConfigBase::Read(key, val); }
|
||||
bool Read(const wxString& key, double* val, double defVal) const
|
||||
{ return wxConfigBase::Read(key, val, defVal); }
|
||||
{ return wxConfigBase::Read(key, val, defVal); }
|
||||
|
||||
virtual bool Write(const wxString& key, const wxString& szValue);
|
||||
virtual bool Write(const wxString& key, long lValue);
|
||||
|
||||
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,111 +253,106 @@ 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
|
||||
{
|
||||
private:
|
||||
ConfigGroup *m_pParent; // group that contains us
|
||||
wxString m_strName, // entry name
|
||||
m_strValue; // value
|
||||
bool m_bDirty, // changed since last read?
|
||||
m_bImmutable; // can be overriden locally?
|
||||
int m_nLine; // used if m_pLine == NULL only
|
||||
LineList *m_pLine; // pointer to our line in the linked list
|
||||
// or NULL if it was found in global file
|
||||
class ConfigEntry
|
||||
{
|
||||
private:
|
||||
ConfigGroup *m_pParent; // group that contains us
|
||||
wxString m_strName, // entry name
|
||||
m_strValue; // value
|
||||
bool m_bDirty, // changed since last read?
|
||||
m_bImmutable; // can be overriden locally?
|
||||
int m_nLine; // used if m_pLine == NULL only
|
||||
LineList *m_pLine; // pointer to our line in the linked list
|
||||
// or NULL if it was found in global file
|
||||
|
||||
public:
|
||||
ConfigEntry(ConfigGroup *pParent, const wxString& strName, int nLine);
|
||||
public:
|
||||
ConfigEntry(ConfigGroup *pParent, const wxString& strName, int nLine);
|
||||
|
||||
// simple accessors
|
||||
const wxString& Name() const { return m_strName; }
|
||||
const wxString& Value() const { return m_strValue; }
|
||||
ConfigGroup *Group() const { return m_pParent; }
|
||||
bool IsDirty() const { return m_bDirty; }
|
||||
bool IsImmutable() const { return m_bImmutable; }
|
||||
bool IsLocal() const { return m_pLine != 0; }
|
||||
int Line() const { return m_nLine; }
|
||||
LineList *GetLine() const { return m_pLine; }
|
||||
// simple accessors
|
||||
const wxString& Name() const { return m_strName; }
|
||||
const wxString& Value() const { return m_strValue; }
|
||||
ConfigGroup *Group() const { return m_pParent; }
|
||||
bool IsDirty() const { return m_bDirty; }
|
||||
bool IsImmutable() const { return m_bImmutable; }
|
||||
bool IsLocal() const { return m_pLine != 0; }
|
||||
int Line() const { return m_nLine; }
|
||||
LineList *GetLine() const { return m_pLine; }
|
||||
|
||||
// modify entry attributes
|
||||
void SetValue(const wxString& strValue, bool bUser = TRUE);
|
||||
void SetDirty();
|
||||
void SetLine(LineList *pLine);
|
||||
};
|
||||
// modify entry attributes
|
||||
void SetValue(const wxString& strValue, bool bUser = TRUE);
|
||||
void SetDirty();
|
||||
void SetLine(LineList *pLine);
|
||||
};
|
||||
|
||||
class ConfigGroup
|
||||
{
|
||||
private:
|
||||
wxFileConfig *m_pConfig; // config object we belong to
|
||||
ConfigGroup *m_pParent; // parent group (NULL for root group)
|
||||
wxFileConfig::ArrayEntries m_aEntries; // entries in this group
|
||||
wxFileConfig::ArrayGroups m_aSubgroups; // subgroups
|
||||
wxString m_strName; // group's name
|
||||
bool m_bDirty; // if FALSE => all subgroups are not dirty
|
||||
LineList *m_pLine; // pointer to our line in the linked list
|
||||
ConfigEntry *m_pLastEntry; // last entry/subgroup of this group in the
|
||||
ConfigGroup *m_pLastGroup; // local file (we insert new ones after it)
|
||||
class ConfigGroup
|
||||
{
|
||||
private:
|
||||
wxFileConfig *m_pConfig; // config object we belong to
|
||||
ConfigGroup *m_pParent; // parent group (NULL for root group)
|
||||
wxFileConfig::ArrayEntries m_aEntries; // entries in this group
|
||||
wxFileConfig::ArrayGroups m_aSubgroups; // subgroups
|
||||
wxString m_strName; // group's name
|
||||
bool m_bDirty; // if FALSE => all subgroups are not dirty
|
||||
LineList *m_pLine; // pointer to our line in the linked list
|
||||
ConfigEntry *m_pLastEntry; // last entry/subgroup of this group in the
|
||||
ConfigGroup *m_pLastGroup; // local file (we insert new ones after it)
|
||||
|
||||
// DeleteSubgroupByName helper
|
||||
bool DeleteSubgroup(ConfigGroup *pGroup);
|
||||
// DeleteSubgroupByName helper
|
||||
bool DeleteSubgroup(ConfigGroup *pGroup);
|
||||
|
||||
public:
|
||||
// ctor
|
||||
ConfigGroup(ConfigGroup *pParent, const wxString& strName, wxFileConfig *);
|
||||
public:
|
||||
// ctor
|
||||
ConfigGroup(ConfigGroup *pParent, const wxString& strName, wxFileConfig *);
|
||||
|
||||
// dtor deletes all entries and subgroups also
|
||||
~ConfigGroup();
|
||||
// dtor deletes all entries and subgroups also
|
||||
~ConfigGroup();
|
||||
|
||||
// simple accessors
|
||||
const wxString& Name() const { return m_strName; }
|
||||
ConfigGroup *Parent() const { return m_pParent; }
|
||||
wxFileConfig *Config() const { return m_pConfig; }
|
||||
bool IsDirty() const { return m_bDirty; }
|
||||
// simple accessors
|
||||
const wxString& Name() const { return m_strName; }
|
||||
ConfigGroup *Parent() const { return m_pParent; }
|
||||
wxFileConfig *Config() const { return m_pConfig; }
|
||||
bool IsDirty() const { return m_bDirty; }
|
||||
|
||||
const wxFileConfig::ArrayEntries& Entries() const { return m_aEntries; }
|
||||
const wxFileConfig::ArrayGroups& Groups() const { return m_aSubgroups; }
|
||||
bool IsEmpty() const { return Entries().IsEmpty() && Groups().IsEmpty(); }
|
||||
const wxFileConfig::ArrayEntries& Entries() const { return m_aEntries; }
|
||||
const wxFileConfig::ArrayGroups& Groups() const { return m_aSubgroups; }
|
||||
bool IsEmpty() const { return Entries().IsEmpty() && Groups().IsEmpty(); }
|
||||
|
||||
// find entry/subgroup (NULL if not found)
|
||||
ConfigGroup *FindSubgroup(const char *szName) const;
|
||||
ConfigEntry *FindEntry (const char *szName) const;
|
||||
// find entry/subgroup (NULL if not found)
|
||||
ConfigGroup *FindSubgroup(const char *szName) const;
|
||||
ConfigEntry *FindEntry (const char *szName) const;
|
||||
|
||||
// delete entry/subgroup, return FALSE if doesn't exist
|
||||
bool DeleteSubgroupByName(const char *szName);
|
||||
bool DeleteEntry(const char *szName);
|
||||
// delete entry/subgroup, return FALSE if doesn't exist
|
||||
bool DeleteSubgroupByName(const char *szName);
|
||||
bool DeleteEntry(const char *szName);
|
||||
|
||||
// create new entry/subgroup returning pointer to newly created element
|
||||
ConfigGroup *AddSubgroup(const wxString& strName);
|
||||
ConfigEntry *AddEntry (const wxString& strName, int nLine = wxNOT_FOUND);
|
||||
// create new entry/subgroup returning pointer to newly created element
|
||||
ConfigGroup *AddSubgroup(const wxString& strName);
|
||||
ConfigEntry *AddEntry (const wxString& strName, int nLine = wxNOT_FOUND);
|
||||
|
||||
// will also recursively set parent's dirty flag
|
||||
void SetDirty();
|
||||
void SetLine(LineList *pLine);
|
||||
// will also recursively set parent's dirty flag
|
||||
void SetDirty();
|
||||
void SetLine(LineList *pLine);
|
||||
|
||||
//
|
||||
wxString GetFullName() const;
|
||||
// rename: no checks are done to ensure that the name is unique!
|
||||
void Rename(const wxString& newName);
|
||||
|
||||
// get the last line belonging to an entry/subgroup of this group
|
||||
LineList *GetGroupLine(); // line which contains [group]
|
||||
LineList *GetLastEntryLine(); // after which our subgroups start
|
||||
LineList *GetLastGroupLine(); // after which the next group starts
|
||||
//
|
||||
wxString GetFullName() const;
|
||||
|
||||
// called by entries/subgroups when they're created/deleted
|
||||
void SetLastEntry(ConfigEntry *pEntry) { m_pLastEntry = pEntry; }
|
||||
void SetLastGroup(ConfigGroup *pGroup) { m_pLastGroup = pGroup; }
|
||||
};
|
||||
// get the last line belonging to an entry/subgroup of this group
|
||||
LineList *GetGroupLine(); // line which contains [group]
|
||||
LineList *GetLastEntryLine(); // after which our subgroups start
|
||||
LineList *GetLastGroupLine(); // after which the next group starts
|
||||
|
||||
// called by entries/subgroups when they're created/deleted
|
||||
void SetLastEntry(ConfigEntry *pEntry) { m_pLastEntry = pEntry; }
|
||||
void SetLastGroup(ConfigGroup *pGroup) { m_pLastGroup = pGroup; }
|
||||
};
|
||||
|
||||
#endif //_FILECONF_H
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user