From 275bf4c13ab7f4b041b0d5c78cfdece709800d14 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 3 Aug 1998 22:49:01 +0000 Subject: [PATCH] minor changes and bug corrections (interface unchanged) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@423 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/config.h | 9 +++++++-- include/wx/log.h | 10 +++++++--- src/common/config.cpp | 29 +++++++++++++++++------------ src/common/fileconf.cpp | 23 ++++++++++------------- src/common/log.cpp | 27 ++++++++++++++------------- 5 files changed, 55 insertions(+), 43 deletions(-) diff --git a/include/wx/config.h b/include/wx/config.h index 26650fd4f5..c48ee1c367 100644 --- a/include/wx/config.h +++ b/include/wx/config.h @@ -88,13 +88,16 @@ public: // static functions // sets the config object, returns the previous pointer static wxConfigBase *Set(wxConfigBase *pConfig); - // get the config object, creates it on demand + // 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 @@ -211,6 +214,7 @@ private: // static variables static wxConfigBase *ms_pConfig; + static bool ms_bAutoCreate; }; // ---------------------------------------------------------------------------- @@ -228,4 +232,5 @@ private: #define wxConfig wxFileConfig #endif -#endif //_wxCONFIG_H \ No newline at end of file +#endif //_wxCONFIG_H + diff --git a/include/wx/log.h b/include/wx/log.h index e6277c84d9..db850ff128 100644 --- a/include/wx/log.h +++ b/include/wx/log.h @@ -74,7 +74,8 @@ public: bool HasPendingMessages() const { return m_bHasMessages; } // only one sink is active at each moment - // get current log target + // get current log target, will call wxApp::CreateLogTarget() to create one + // if static wxLog *GetActiveTarget(); // change log target, pLogger = NULL disables logging, // returns the previous log target @@ -90,6 +91,9 @@ public: void SetTimeStampFormat(const char *szTF) { m_szTimeFormat = szTF; } // trace mask (see wxTraceXXX constants for details) static void SetTraceMask(wxTraceMask ulMask) { ms_ulTraceMask = ulMask; } + // should GetActiveTarget() try to create a new log object if the current + // is NULL? + static void DontCreateOnDemand() { ms_bAutoCreate = FALSE; } // accessors // gets the verbose status @@ -119,8 +123,8 @@ protected: private: // static variables // ---------------- - static wxLog *ms_pLogger; // currently active log sink - static bool ms_bInitialized; // any log targets created? + static wxLog *ms_pLogger; // currently active log sink + static bool ms_bAutoCreate; // automatically create new log targets? static wxTraceMask ms_ulTraceMask; // controls wxLogTrace behaviour }; diff --git a/src/common/config.cpp b/src/common/config.cpp index 4447719209..5b3de33e72 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -39,7 +39,7 @@ #include // we must include (one of) these files for wxConfigBase::Create -#if defined(__MSWIN__) && defined(wxCONFIG_WIN32_NATIVE) +#if defined(__WXMSW__) && defined(wxCONFIG_WIN32_NATIVE) #ifdef __WIN32__ #include #else //WIN16 @@ -56,7 +56,8 @@ // global and class static variables // ---------------------------------------------------------------------------- -wxConfigBase *wxConfigBase::ms_pConfig = NULL; +wxConfigBase *wxConfigBase::ms_pConfig = NULL; +bool wxConfigBase::ms_bAutoCreate = TRUE; // ============================================================================ // implementation @@ -75,17 +76,21 @@ wxConfigBase *wxConfigBase::Set(wxConfigBase *pConfig) wxConfigBase *wxConfigBase::Create() { - return ms_pConfig = - #if defined(__MSWIN__) && defined(wxCONFIG_WIN32_NATIVE) - #ifdef __WIN32__ - new wxRegConfig(wxTheApp->GetAppName(), wxTheApp->GetVendorName()); - #else //WIN16 - #error "Sorry, no wxIniConfig yet..." - //new wxIniConfig(wxTheApp->GetAppName(), wxTheApp->GetVendorName()); + if ( ms_bAutoCreate && ms_pConfig == NULL ) { + ms_pConfig = + #if defined(__WXMSW__) && defined(wxCONFIG_WIN32_NATIVE) + #ifdef __WIN32__ + new wxRegConfig(wxTheApp->GetVendorName() + '\\' + + wxTheApp->GetAppName()); + #else //WIN16 + new wxIniConfig(wxTheApp->GetAppName(), wxTheApp->GetVendorName()); + #endif + #else // either we're under Unix or wish to use files even under Windows + new wxFileConfig(wxTheApp->GetAppName()); #endif - #else // either we're under Unix or wish to use files even under Windows - new wxFileConfig(wxTheApp->GetAppName()); - #endif + } + + return ms_pConfig; } const char *wxConfigBase::Read(const char *szKey, const char *szDefault) const diff --git a/src/common/fileconf.cpp b/src/common/fileconf.cpp index 46139022fd..46ea7077a3 100644 --- a/src/common/fileconf.cpp +++ b/src/common/fileconf.cpp @@ -124,7 +124,7 @@ wxString wxFileConfig::GetLocalDir() strDir << szHome; #else // Win16 // Win16 has no idea about home, so use the current directory instead - strDir = ".\\"; + strDir = ".\\"; #endif // WIN16/32 #endif // UNIX/Win @@ -222,16 +222,13 @@ wxFileConfig::wxFileConfig(const wxString& strLocal, const wxString& strGlobal) // if the path is not absolute, prepend the standard directory to it if ( !strLocal.IsEmpty() && !wxIsPathSeparator(strLocal[0u]) ) - { - m_strLocalFile = GetLocalDir(); - m_strLocalFile << strLocal; - } - + m_strLocalFile = GetLocalDir(); + m_strLocalFile << strLocal; + if ( !strGlobal.IsEmpty() && !wxIsPathSeparator(strGlobal[0u]) ) - { - m_strGlobalFile = GetGlobalDir(); - m_strGlobalFile << strGlobal; - } + m_strGlobalFile = GetGlobalDir(); + m_strGlobalFile << strGlobal; + Init(); } @@ -671,9 +668,6 @@ bool wxFileConfig::DeleteAll() { CleanUp(); - m_strLocalFile = m_strGlobalFile = ""; - Init(); - const char *szFile = m_strLocalFile; if ( remove(szFile) == -1 ) @@ -683,6 +677,9 @@ bool wxFileConfig::DeleteAll() if ( remove(szFile) ) wxLogSysError(_("can't delete system configuration file '%s'"), szFile); + m_strLocalFile = m_strGlobalFile = ""; + Init(); + return TRUE; } diff --git a/src/common/log.cpp b/src/common/log.cpp index 02a7ac365f..ff0532eb05 100644 --- a/src/common/log.cpp +++ b/src/common/log.cpp @@ -216,19 +216,22 @@ wxLog::wxLog() wxLog *wxLog::GetActiveTarget() { - if ( !ms_bInitialized ) { + if ( ms_bAutoCreate && ms_pLogger == NULL ) { // prevent infinite recursion if someone calls wxLogXXX() from // wxApp::CreateLogTarget() - ms_bInitialized = TRUE; - - #ifdef WX_TEST_MINIMAL - ms_pLogger = new wxLogStderr; - #else - // ask the application to create a log target for us - ms_pLogger = wxTheApp->CreateLogTarget(); - #endif + static bool s_bInGetActiveTarget = FALSE; + if ( !s_bInGetActiveTarget ) { + s_bInGetActiveTarget = TRUE; + + #ifdef WX_TEST_MINIMAL + ms_pLogger = new wxLogStderr; + #else + // ask the application to create a log target for us + ms_pLogger = wxTheApp->CreateLogTarget(); + #endif - // do nothing if it fails - what can we do? + // do nothing if it fails - what can we do? + } } return ms_pLogger; @@ -240,8 +243,6 @@ wxLog *wxLog::SetActiveTarget(wxLog *pLogger) if ( ms_pLogger != NULL ) ms_pLogger->Flush(); - ms_bInitialized = TRUE; - wxLog *pOldLogger = ms_pLogger; ms_pLogger = pLogger; return pOldLogger; @@ -705,7 +706,7 @@ wxLogWindow::~wxLogWindow() // static variables // ---------------------------------------------------------------------------- wxLog *wxLog::ms_pLogger = NULL; -bool wxLog::ms_bInitialized = FALSE; +bool wxLog::ms_bAutoCreate = TRUE; wxTraceMask wxLog::ms_ulTraceMask = (wxTraceMask)0; // ---------------------------------------------------------------------------- -- 2.45.2