// 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
// static variables
static wxConfigBase *ms_pConfig;
+ static bool ms_bAutoCreate;
};
// ----------------------------------------------------------------------------
#define wxConfig wxFileConfig
#endif
-#endif //_wxCONFIG_H
\ No newline at end of file
+#endif //_wxCONFIG_H
+
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
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
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
};
#include <wx/config.h>
// 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 <wx/msw/regconf.h>
#else //WIN16
// global and class static variables
// ----------------------------------------------------------------------------
-wxConfigBase *wxConfigBase::ms_pConfig = NULL;
+wxConfigBase *wxConfigBase::ms_pConfig = NULL;
+bool wxConfigBase::ms_bAutoCreate = TRUE;
// ============================================================================
// implementation
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
strDir << szHome;
#else // Win16
// Win16 has no idea about home, so use the current directory instead
- strDir = ".\\";
+ strDir = ".\\";
#endif // WIN16/32
#endif // UNIX/Win
// 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();
}
{
CleanUp();
- m_strLocalFile = m_strGlobalFile = "";
- Init();
-
const char *szFile = m_strLocalFile;
if ( remove(szFile) == -1 )
if ( remove(szFile) )
wxLogSysError(_("can't delete system configuration file '%s'"), szFile);
+ m_strLocalFile = m_strGlobalFile = "";
+ Init();
+
return TRUE;
}
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;
if ( ms_pLogger != NULL )
ms_pLogger->Flush();
- ms_bInitialized = TRUE;
-
wxLog *pOldLogger = ms_pLogger;
ms_pLogger = pLogger;
return pOldLogger;
// static variables
// ----------------------------------------------------------------------------
wxLog *wxLog::ms_pLogger = NULL;
-bool wxLog::ms_bInitialized = FALSE;
+bool wxLog::ms_bAutoCreate = TRUE;
wxTraceMask wxLog::ms_ulTraceMask = (wxTraceMask)0;
// ----------------------------------------------------------------------------