small bug fixes + a couple of new functions added

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@303 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1998-07-18 21:44:54 +00:00
parent 9fbd8b8d61
commit 82cf4761e1

View File

@@ -20,10 +20,25 @@
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include <wx/wx.h>
#ifdef __GNUG__
#pragma implementation "regconf.h"
#endif
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif //__BORLANDC__
#ifndef WX_PRECOMP
#include <wx/string.h>
#endif //WX_PRECOMP
#include <wx/log.h>
#include <wx/config.h>
#include <wx/regconf.h>
#include <wx/msw/registry.h>
#include <wx/msw/regconf.h>
// ----------------------------------------------------------------------------
// constants
@@ -77,20 +92,20 @@ wxRegConfig::~wxRegConfig()
// ----------------------------------------------------------------------------
void wxRegConfig::SetPath(const wxString& strPath)
{
ArrayString aParts;
wxArrayString aParts;
if ( strPath.IsEmpty() )
return;
if ( strPath[0] == APPCONF_PATH_SEPARATOR ) {
// absolute path
SplitPath(aParts, strPath);
wxSplitPath(aParts, strPath);
}
else {
// relative path, combine with current one
wxString strFullPath = GetPath();
strFullPath << APPCONF_PATH_SEPARATOR << strPath;
SplitPath(aParts, strFullPath);
wxSplitPath(aParts, strFullPath);
}
// recombine path parts in one variable
@@ -125,13 +140,13 @@ void wxRegConfig::SetPath(const wxString& strPath)
#define LOCAL_MASK 0x8000
#define IS_LOCAL_INDEX(l) (((l) & LOCAL_MASK) != 0)
bool wxRegConfig::GetFirstGroup(wxString& str, long& lIndex)
bool wxRegConfig::GetFirstGroup(wxString& str, long& lIndex) const
{
lIndex = 0;
return GetNextGroup(str, lIndex);
}
bool wxRegConfig::GetNextGroup (wxString& str, long& lIndex)
bool wxRegConfig::GetNextGroup(wxString& str, long& lIndex) const
{
// are we already enumerating local entries?
if ( m_keyGlobal.IsOpened() && !IS_LOCAL_INDEX(lIndex) ) {
@@ -154,35 +169,69 @@ bool wxRegConfig::GetNextGroup (wxString& str, long& lIndex)
return bOk;
}
bool wxRegConfig::GetFirstEntry(wxString& str, long& lIndex)
bool wxRegConfig::GetFirstEntry(wxString& str, long& lIndex) const
{
lIndex = 0;
return GetNextGroup(str, lIndex);
return GetNextEntry(str, lIndex);
}
bool wxRegConfig::GetNextEntry (wxString& str, long& lIndex)
bool wxRegConfig::GetNextEntry(wxString& str, long& lIndex) const
{
// are we already enumerating local entries?
if ( m_keyGlobal.IsOpened() && !IS_LOCAL_INDEX(lIndex) ) {
// try to find a global entry which doesn't appear locally
do {
if ( !m_keyGlobal.GetNextKey(str, lIndex) ) {
if ( !m_keyGlobal.GetNextValue(str, lIndex) ) {
// no more global entries
lIndex |= LOCAL_MASK;
break;
}
} while( m_keyLocal.HasSubKey(str) );
} while( m_keyLocal.HasValue(str) );
}
// much easier with local entries: get the next one we find
// (don't forget to clear our flag bit and set it again later)
lIndex &= ~LOCAL_MASK;
bool bOk = m_keyLocal.GetNextKey(str, lIndex);
bool bOk = m_keyLocal.GetNextValue(str, lIndex);
lIndex |= LOCAL_MASK;
return bOk;
}
uint wxRegConfig::GetNumberOfEntries() const
{
uint nEntries = 0;
// dummy vars
wxString str;
long l;
bool bCont = GetFirstEntry(str, l);
while ( bCont ) {
nEntries++;
bCont = GetNextEntry(str, l);
}
return nEntries;
}
uint wxRegConfig::GetNumberOfGroups() const
{
uint nGroups = 0;
// dummy vars
wxString str;
long l;
bool bCont = GetFirstGroup(str, l);
while ( bCont ) {
nGroups++;
bCont = GetNextGroup(str, l);
}
return nGroups;
}
// ----------------------------------------------------------------------------
// tests for existence
// ----------------------------------------------------------------------------
@@ -305,7 +354,7 @@ bool wxRegConfig::DeleteEntry(const char *szValue, bool bGroupIfEmptyAlso)
if ( !m_keyLocal.DeleteValue(path.Name()) )
return FALSE;
if ( m_keyLocal.IsEmpty() ) {
if ( !m_keyLocal.HasSubkeys() ) {
wxString strKey = GetPath().Right(APPCONF_PATH_SEPARATOR);
SetPath(".."); // changes m_keyLocal
return m_keyLocal.DeleteKey(strKey);
@@ -323,9 +372,6 @@ bool wxRegConfig::DeleteGroup(const char *szKey)
bool wxRegConfig::DeleteAll()
{
// first of all, prevent the creation of new registry entries
Config::EnableAutosave(FALSE);
m_keyLocal.Close();
m_keyGlobal.Close();