From 26ac5fadeaa4081fb0e19909d6152f75c64090bb Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Sat, 22 Aug 1998 16:41:51 +0000 Subject: [PATCH 1/1] Removed child frame CreateStatusBar from MDI sample; renamed config.h to confbase.h; config.h now includes appropriate files git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@617 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/confbase.h | 244 +++++++++++++++++++++++++++++++++++++ include/wx/config.h | 252 +++------------------------------------ include/wx/stubs/accel.h | 3 + samples/mdi/mdi.cpp | 5 +- src/common/config.cpp | 4 +- 5 files changed, 264 insertions(+), 244 deletions(-) create mode 100644 include/wx/confbase.h diff --git a/include/wx/confbase.h b/include/wx/confbase.h new file mode 100644 index 0000000000..619589b04c --- /dev/null +++ b/include/wx/confbase.h @@ -0,0 +1,244 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: confbase.h +// Purpose: declaration of the base class of all config implementations +// (see also: fileconf.h and msw/regconf.h) +// Author: Karsten Ballüder & Vadim Zeitlin +// Modified by: +// Created: 07.04.98 (adapted from appconf.h) +// RCS-ID: $Id$ +// Copyright: (c) 1997 Karsten Ballüder Ballueder@usa.net +// Vadim Zeitlin +// Licence: wxWindows license +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_CONFBASE_H_ +#define _WX_CONFBASE_H_ + +#ifdef __GNUG__ +#pragma interface "confbase.h" +#endif + +// ---------------------------------------------------------------------------- +// compile options +// ---------------------------------------------------------------------------- + +// it won't compile without it anyhow +#ifndef USE_WXCONFIG + #error "Please define USE_WXCONFIG or remove config.cpp from your makefile" +#endif // USE_WXCONFIG + +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- + +/// shall we be case sensitive in parsing variable names? +#ifndef wxCONFIG_CASE_SENSITIVE + #define wxCONFIG_CASE_SENSITIVE FALSE +#endif + +/// separates group and entry names (probably shouldn't be changed) +#ifndef wxCONFIG_PATH_SEPARATOR + #define wxCONFIG_PATH_SEPARATOR '/' +#endif + +/// introduces immutable entries +// (i.e. the ones which can't be changed from the local config file) +#ifndef wxCONFIG_IMMUTABLE_PREFIX + #define wxCONFIG_IMMUTABLE_PREFIX '!' +#endif + +/// should we use registry instead of configuration files under Win32? +// (i.e. whether wxConfigBase::Create() will create a wxFileConfig (if it's +// FALSE) or wxRegConfig (if it's true and we're under Win32) or wxIniConfig +// (under Win16)) +#ifndef wxCONFIG_WIN32_NATIVE + #define wxCONFIG_WIN32_NATIVE TRUE +#endif + +// ---------------------------------------------------------------------------- +// various helper global functions +// ---------------------------------------------------------------------------- + +/* + Replace environment variables ($SOMETHING) with their values. The format is + $VARNAME or ${VARNAME} where VARNAME contains alphanumeric characters and + '_' only. '$' must be escaped ('\$') in order to be taken literally. + */ +extern wxString wxExpandEnvVars(const wxString &sz); + +/* + Split path into parts removing '..' in progress + */ +extern void wxSplitPath(wxArrayString& aParts, const char *sz); + +// ---------------------------------------------------------------------------- +// abstract base class wxConfigBase which defines the interface for derived +// classes +// +// wxConfig organizes the items in a tree-like structure (modeled after the +// Unix/Dos filesystem). There are groups (directories) and keys (files). +// There is always one current group given by the current path. +// +// Keys are pairs "key_name = value" where value may be of string or integer +// (long) type (@@@ doubles and other types such as wxDate coming soon). +// ---------------------------------------------------------------------------- +class wxConfigBase +{ +public: + // static functions + // sets the config object, returns the previous pointer + static wxConfigBase *Set(wxConfigBase *pConfig); + // get the config object, creates it on demand unless DontCreateOnDemand + // was called + static wxConfigBase *Get() { if ( !ms_pConfig ) Create(); return ms_pConfig; } + // create a new config object: this function will create the "best" + // implementation of wxConfig available for the current platform, see + // comments near definition wxCONFIG_WIN32_NATIVE for details. It returns + // the created object and also sets it as ms_pConfig. + static wxConfigBase *Create(); + // should Get() try to create a new log object if the current one is NULL? + static void DontCreateOnDemand() { ms_bAutoCreate = FALSE; } + + // ctor & virtual dtor + // environment variable expansion is on by default + wxConfigBase() { m_bExpandEnvVars = TRUE; m_bRecordDefaults = FALSE; } + // empty but ensures that dtor of all derived classes is virtual + virtual ~wxConfigBase() { } + + // path management + // set current path: if the first character is '/', it's the absolute path, + // otherwise it's a relative path. '..' is supported. If the strPath + // doesn't exist it is created. + virtual void SetPath(const wxString& strPath) = 0; + // retrieve the current path (always as absolute path) + virtual const wxString& GetPath() const = 0; + + // enumeration: all functions here return false when there are no more items. + // you must pass the same lIndex to GetNext and GetFirst (don't modify it) + // enumerate subgroups + virtual bool GetFirstGroup(wxString& str, long& lIndex) const = 0; + virtual bool GetNextGroup (wxString& str, long& lIndex) const = 0; + // enumerate entries + virtual bool GetFirstEntry(wxString& str, long& lIndex) const = 0; + virtual bool GetNextEntry (wxString& str, long& lIndex) const = 0; + // get number of entries/subgroups in the current group, with or without + // it's subgroups + virtual size_t GetNumberOfEntries(bool bRecursive = FALSE) const = 0; + virtual size_t GetNumberOfGroups(bool bRecursive = FALSE) const = 0; + + // tests of existence + // returns TRUE if the group by this name exists + virtual bool HasGroup(const wxString& strName) const = 0; + // same as above, but for an entry + virtual bool HasEntry(const wxString& strName) const = 0; + // returns TRUE if either a group or an entry with a given name exist + bool Exists(const wxString& strName) const + { return HasGroup(strName) || HasEntry(strName); } + + // key access: returns TRUE if value was really read, FALSE if default used + // (and if the key is not found the default value is returned.) + // read a string from the key + virtual bool Read(wxString *pStr, const char *szKey, + const char *szDefault = NULL) const = 0; + // another version using statis buffer - it means it will be overwritten + // after each call to this function! + virtual const char *Read(const char *szKey, + const char *szDefault = NULL) const; + // the same for longs + virtual long Read(const char *szKey, long lDefault) const + { long l; Read(&l, szKey, lDefault); return l; } + // and another version: returns true if default value is returned + virtual bool Read(long *pl, const char *szKey, long lDefault = 0) const = 0; + + // write the value (return true on success) + virtual bool Write(const char *szKey, const char *szValue) = 0; + virtual bool Write(const char *szKey, long lValue) = 0; + // permanently writes all changes + virtual bool Flush(bool bCurrentOnly = FALSE) = 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 + virtual bool DeleteEntry(const char *szKey, + bool bDeleteGroupIfEmpty = TRUE) = 0; + // delete the group (with all subgroups) + virtual bool DeleteGroup(const char *szKey) = 0; + // delete the whole underlying object (disk file, registry key, ...) + // primarly for use by desinstallation routine. + virtual bool DeleteAll() = 0; + + // options + // we can automatically expand environment variables in the config entries + // (this option is on by default, you can turn it on/off at any time) + bool IsExpandingEnvVars() const { return m_bExpandEnvVars; } + void SetExpandEnvVars(bool bDoIt = TRUE) { m_bExpandEnvVars = bDoIt; } + // recording of default values + void SetRecordDefaults(bool bDoIt = TRUE) { m_bRecordDefaults = bDoIt; } + bool IsRecordingDefaults() const { return m_bRecordDefaults; } + // does expansion only if needed + wxString ExpandEnvVars(const wxString& str) const + { + wxString tmp; // Required for BC++ + if (IsExpandingEnvVars()) + tmp = wxExpandEnvVars(str); + else + tmp = str; + return tmp; + } + +protected: + static bool IsImmutable(const char *szKey) + { return *szKey == wxCONFIG_IMMUTABLE_PREFIX; } + + // a handy little class which changes current path to the path of given entry + // and restores it in dtor: so if you declare a local variable of this type, + // you work in the entry directory and the path is automatically restored + // when the function returns + class PathChanger + { + public: + // ctor/dtor do path changing/restorin + PathChanger(const wxConfigBase *pContainer, const wxString& strEntry); + ~PathChanger(); + + // get the key name + const wxString& Name() const { return m_strName; } + + private: + wxConfigBase *m_pContainer; // object we live in + wxString m_strName, // name of entry (i.e. name only) + m_strOldPath; // saved path + bool m_bChanged; // was the path changed? + }; + +private: + // are we doing automatic environment variable expansion? + bool m_bExpandEnvVars; + // do we record default values? + bool m_bRecordDefaults; + + // static variables + static wxConfigBase *ms_pConfig; + static bool ms_bAutoCreate; +}; + +// ---------------------------------------------------------------------------- +// the native wxConfigBase implementation +// ---------------------------------------------------------------------------- + +// under Windows we prefer to use the native implementation +#if defined(__WXMSW__) && wxCONFIG_WIN32_NATIVE + #ifdef __WIN32__ + #define wxConfig wxRegConfig + #define classwxConfig classwxRegConfig + #else //WIN16 + #define wxConfig wxIniConfig + #define classwxConfig classwxIniConfig + #endif +#else // either we're under Unix or wish to use files even under Windows + #define wxConfig wxFileConfig + #define classwxConfig classwxFileConfig +#endif + +#endif // _WX_CONFIG_H_ + diff --git a/include/wx/config.h b/include/wx/config.h index f8114b3901..d9ffb9fa58 100644 --- a/include/wx/config.h +++ b/include/wx/config.h @@ -1,241 +1,17 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: config.h -// Purpose: declaration of the base class of all config implementations -// (see also: fileconf.h and msw/regconf.h) -// Author: Karsten Ballüder & Vadim Zeitlin -// Modified by: -// Created: 07.04.98 (adapted from appconf.h) -// RCS-ID: $Id$ -// Copyright: (c) 1997 Karsten Ballüder Ballueder@usa.net -// Vadim Zeitlin -// Licence: wxWindows license -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CONFIG_H_ -#define _WX_CONFIG_H_ - -#ifdef __GNUG__ -#pragma interface "config.h" -#endif - -// ---------------------------------------------------------------------------- -// compile options -// ---------------------------------------------------------------------------- - -// it won't compile without it anyhow -#ifndef USE_WXCONFIG - #error "Please define USE_WXCONFIG or remove config.cpp from your makefile" -#endif // USE_WXCONFIG - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -/// shall we be case sensitive in parsing variable names? -#ifndef wxCONFIG_CASE_SENSITIVE - #define wxCONFIG_CASE_SENSITIVE FALSE -#endif - -/// separates group and entry names (probably shouldn't be changed) -#ifndef wxCONFIG_PATH_SEPARATOR - #define wxCONFIG_PATH_SEPARATOR '/' +#ifndef _WX_CONFIG_H_BASE_ +#define _WX_CONFIG_H_BASE_ + +#include "wx/confbase.h" + +#if defined(__WXMSW__) && defined(wxCONFIG_WIN32_NATIVE) +# ifdef __WIN32__ +# include "wx/msw/regconf.h" +#else +# include "wx/msw/iniconf.h" +# endif +#else +# include "wx/fileconf.h" #endif -/// introduces immutable entries -// (i.e. the ones which can't be changed from the local config file) -#ifndef wxCONFIG_IMMUTABLE_PREFIX - #define wxCONFIG_IMMUTABLE_PREFIX '!' #endif - -/// should we use registry instead of configuration files under Win32? -// (i.e. whether wxConfigBase::Create() will create a wxFileConfig (if it's -// FALSE) or wxRegConfig (if it's true and we're under Win32) or wxIniConfig -// (under Win16)) -#ifndef wxCONFIG_WIN32_NATIVE - #define wxCONFIG_WIN32_NATIVE TRUE -#endif - -// ---------------------------------------------------------------------------- -// various helper global functions -// ---------------------------------------------------------------------------- - -/* - Replace environment variables ($SOMETHING) with their values. The format is - $VARNAME or ${VARNAME} where VARNAME contains alphanumeric characters and - '_' only. '$' must be escaped ('\$') in order to be taken literally. - */ -extern wxString wxExpandEnvVars(const wxString &sz); - -/* - Split path into parts removing '..' in progress - */ -extern void wxSplitPath(wxArrayString& aParts, const char *sz); - -// ---------------------------------------------------------------------------- -// abstract base class wxConfigBase which defines the interface for derived -// classes -// -// wxConfig organizes the items in a tree-like structure (modeled after the -// Unix/Dos filesystem). There are groups (directories) and keys (files). -// There is always one current group given by the current path. -// -// Keys are pairs "key_name = value" where value may be of string or integer -// (long) type (@@@ doubles and other types such as wxDate coming soon). -// ---------------------------------------------------------------------------- -class wxConfigBase -{ -public: - // static functions - // sets the config object, returns the previous pointer - static wxConfigBase *Set(wxConfigBase *pConfig); - // get the config object, creates it on demand unless DontCreateOnDemand - // was called - static wxConfigBase *Get() { if ( !ms_pConfig ) Create(); return ms_pConfig; } - // create a new config object: this function will create the "best" - // implementation of wxConfig available for the current platform, see - // comments near definition wxCONFIG_WIN32_NATIVE for details. It returns - // the created object and also sets it as ms_pConfig. - static wxConfigBase *Create(); - // should Get() try to create a new log object if the current one is NULL? - static void DontCreateOnDemand() { ms_bAutoCreate = FALSE; } - - // ctor & virtual dtor - // environment variable expansion is on by default - wxConfigBase() { m_bExpandEnvVars = TRUE; m_bRecordDefaults = FALSE; } - // empty but ensures that dtor of all derived classes is virtual - virtual ~wxConfigBase() { } - - // path management - // set current path: if the first character is '/', it's the absolute path, - // otherwise it's a relative path. '..' is supported. If the strPath - // doesn't exist it is created. - virtual void SetPath(const wxString& strPath) = 0; - // retrieve the current path (always as absolute path) - virtual const wxString& GetPath() const = 0; - - // enumeration: all functions here return false when there are no more items. - // you must pass the same lIndex to GetNext and GetFirst (don't modify it) - // enumerate subgroups - virtual bool GetFirstGroup(wxString& str, long& lIndex) const = 0; - virtual bool GetNextGroup (wxString& str, long& lIndex) const = 0; - // enumerate entries - virtual bool GetFirstEntry(wxString& str, long& lIndex) const = 0; - virtual bool GetNextEntry (wxString& str, long& lIndex) const = 0; - // get number of entries/subgroups in the current group, with or without - // it's subgroups - virtual size_t GetNumberOfEntries(bool bRecursive = FALSE) const = 0; - virtual size_t GetNumberOfGroups(bool bRecursive = FALSE) const = 0; - - // tests of existence - // returns TRUE if the group by this name exists - virtual bool HasGroup(const wxString& strName) const = 0; - // same as above, but for an entry - virtual bool HasEntry(const wxString& strName) const = 0; - // returns TRUE if either a group or an entry with a given name exist - bool Exists(const wxString& strName) const - { return HasGroup(strName) || HasEntry(strName); } - - // key access: returns TRUE if value was really read, FALSE if default used - // (and if the key is not found the default value is returned.) - // read a string from the key - virtual bool Read(wxString *pStr, const char *szKey, - const char *szDefault = NULL) const = 0; - // another version using statis buffer - it means it will be overwritten - // after each call to this function! - virtual const char *Read(const char *szKey, - const char *szDefault = NULL) const; - // the same for longs - virtual long Read(const char *szKey, long lDefault) const - { long l; Read(&l, szKey, lDefault); return l; } - // and another version: returns true if default value is returned - virtual bool Read(long *pl, const char *szKey, long lDefault = 0) const = 0; - - // write the value (return true on success) - virtual bool Write(const char *szKey, const char *szValue) = 0; - virtual bool Write(const char *szKey, long lValue) = 0; - // permanently writes all changes - virtual bool Flush(bool bCurrentOnly = FALSE) = 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 - virtual bool DeleteEntry(const char *szKey, - bool bDeleteGroupIfEmpty = TRUE) = 0; - // delete the group (with all subgroups) - virtual bool DeleteGroup(const char *szKey) = 0; - // delete the whole underlying object (disk file, registry key, ...) - // primarly for use by desinstallation routine. - virtual bool DeleteAll() = 0; - - // options - // we can automatically expand environment variables in the config entries - // (this option is on by default, you can turn it on/off at any time) - bool IsExpandingEnvVars() const { return m_bExpandEnvVars; } - void SetExpandEnvVars(bool bDoIt = TRUE) { m_bExpandEnvVars = bDoIt; } - // recording of default values - void SetRecordDefaults(bool bDoIt = TRUE) { m_bRecordDefaults = bDoIt; } - bool IsRecordingDefaults() const { return m_bRecordDefaults; } - // does expansion only if needed - wxString ExpandEnvVars(const wxString& str) const - { - wxString tmp; // Required for BC++ - if (IsExpandingEnvVars()) - tmp = wxExpandEnvVars(str); - else - tmp = str; - return tmp; - } - -protected: - static bool IsImmutable(const char *szKey) - { return *szKey == wxCONFIG_IMMUTABLE_PREFIX; } - - // a handy little class which changes current path to the path of given entry - // and restores it in dtor: so if you declare a local variable of this type, - // you work in the entry directory and the path is automatically restored - // when the function returns - class PathChanger - { - public: - // ctor/dtor do path changing/restorin - PathChanger(const wxConfigBase *pContainer, const wxString& strEntry); - ~PathChanger(); - - // get the key name - const wxString& Name() const { return m_strName; } - - private: - wxConfigBase *m_pContainer; // object we live in - wxString m_strName, // name of entry (i.e. name only) - m_strOldPath; // saved path - bool m_bChanged; // was the path changed? - }; - -private: - // are we doing automatic environment variable expansion? - bool m_bExpandEnvVars; - // do we record default values? - bool m_bRecordDefaults; - - // static variables - static wxConfigBase *ms_pConfig; - static bool ms_bAutoCreate; -}; - -// ---------------------------------------------------------------------------- -// the native wxConfigBase implementation -// ---------------------------------------------------------------------------- - -// under Windows we prefer to use the native implementation -#if defined(__WXMSW__) && wxCONFIG_WIN32_NATIVE - #ifdef __WIN32__ - #define wxConfig wxRegConfig - #else //WIN16 - #define wxConfig wxIniConfig - #endif -#else // either we're under Unix or wish to use files even under Windows - #define wxConfig wxFileConfig -#endif - -#endif // _WX_CONFIG_H_ - + // _WX_CONFIG_H_BASE_ diff --git a/include/wx/stubs/accel.h b/include/wx/stubs/accel.h index 236dc0eb55..10e43ef5e8 100644 --- a/include/wx/stubs/accel.h +++ b/include/wx/stubs/accel.h @@ -30,6 +30,9 @@ class WXDLLEXPORT wxAcceleratorTable; // Hold Shift key down #define wxACCEL_SHIFT 0x04 + // Hold no key down +#define wxACCEL_NONE 0x00 + class WXDLLEXPORT wxAcceleratorEntry { public: diff --git a/samples/mdi/mdi.cpp b/samples/mdi/mdi.cpp index 56f3a75047..566f542618 100644 --- a/samples/mdi/mdi.cpp +++ b/samples/mdi/mdi.cpp @@ -141,14 +141,11 @@ void MyFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event) ) subframe->SetTitle(title); winNumber ++; - // Give it an icon (this is ignored in MDI mode: uses resources) + // Give it an icon #ifdef __WXMSW__ subframe->SetIcon(wxIcon("chrt_icn")); #endif - // Give it a status line - subframe->CreateStatusBar(); - // Make a menubar wxMenu *file_menu = new wxMenu; diff --git a/src/common/config.cpp b/src/common/config.cpp index a60ca5bc2b..2eb6facd54 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -18,7 +18,7 @@ // headers // ---------------------------------------------------------------------------- #ifdef __GNUG__ - #pragma implementation "config.h" + #pragma implementation "confbase.h" #endif #include "wx/wxprec.h" @@ -36,7 +36,7 @@ #include #include #include -#include +#include // we must include (one of) these files for wxConfigBase::Create #if defined(__WXMSW__) && defined(wxCONFIG_WIN32_NATIVE) -- 2.45.2