]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/logg.cpp
Don't complain under MicroWindows if a wxDC's HDC is NULL - it happens
[wxWidgets.git] / src / generic / logg.cpp
index 1790b09bf57e6b8a366b715782329bf68935d2d6..a27b1945a1e3028b78cadad9d5299377e20966b2 100644 (file)
@@ -46,6 +46,8 @@
     #include "wx/button.h"
 #endif // WX_PRECOMP
 
     #include "wx/button.h"
 #endif // WX_PRECOMP
 
+#if wxUSE_LOGGUI || wxUSE_LOGWINDOW
+
 #include "wx/file.h"
 #include "wx/textfile.h"
 #include "wx/statline.h"
 #include "wx/file.h"
 #include "wx/textfile.h"
 #include "wx/statline.h"
 #endif // Windows
 
 // may be defined to 0 for old behavior (using wxMessageBox) - shouldn't be
 #endif // Windows
 
 // may be defined to 0 for old behavior (using wxMessageBox) - shouldn't be
-// changed normally (that's why it's here and not in setup.h)
+// changed normally (that's why it's here and not in setup.h).
+// Actually it now is in setup.h.
+#ifndef wxUSE_LOG_DIALOG
 #define wxUSE_LOG_DIALOG 1
 #define wxUSE_LOG_DIALOG 1
+#endif
 
 #if wxUSE_LOG_DIALOG
 
 #if wxUSE_LOG_DIALOG
-    #include "wx/datetime.h"
     #include "wx/listctrl.h"
     #include "wx/imaglist.h"
     #include "wx/image.h"
     #include "wx/listctrl.h"
     #include "wx/imaglist.h"
     #include "wx/image.h"
 
 #if wxUSE_LOG_DIALOG
 
 
 #if wxUSE_LOG_DIALOG
 
+// this function is a wrapper around strftime(3)
+// allows to exclude the usage of wxDateTime
+static wxString TimeStamp(const wxChar *format, time_t t)
+{
+    wxChar buf[4096];
+    if ( !wxStrftime(buf, WXSIZEOF(buf), format, localtime(&t)) )
+    {
+        // buffer is too small?
+        wxFAIL_MSG(_T("strftime() failed"));
+    }
+    return wxString(buf);
+}
+
+
 class wxLogDialog : public wxDialog
 {
 public:
 class wxLogDialog : public wxDialog
 {
 public:
@@ -137,7 +155,7 @@ END_EVENT_TABLE()
 // private functions
 // ----------------------------------------------------------------------------
 
 // private functions
 // ----------------------------------------------------------------------------
 
-#if wxUSE_FILE
+#if wxUSE_FILE && wxUSE_FILEDLG
 
 // pass an uninitialized file object, the function will ask the user for the
 // filename and try to open it, returns TRUE on success (file was opened),
 
 // pass an uninitialized file object, the function will ask the user for the
 // filename and try to open it, returns TRUE on success (file was opened),
@@ -152,7 +170,7 @@ static int OpenLogFile(wxFile& file, wxString *filename = NULL);
 // ----------------------------------------------------------------------------
 
 // we use a global variable to store the frame pointer for wxLogStatus - bad,
 // ----------------------------------------------------------------------------
 
 // we use a global variable to store the frame pointer for wxLogStatus - bad,
-// but it's he easiest way
+// but it's the easiest way
 static wxFrame *gs_pFrame; // FIXME MT-unsafe
 
 // ============================================================================
 static wxFrame *gs_pFrame; // FIXME MT-unsafe
 
 // ============================================================================
@@ -183,24 +201,6 @@ void wxLogStatus(wxFrame *pFrame, const wxChar *szFormat, ...)
   }
 }
 
   }
 }
 
-// ----------------------------------------------------------------------------
-// wxLogTextCtrl implementation
-// ----------------------------------------------------------------------------
-
-wxLogTextCtrl::wxLogTextCtrl(wxTextCtrl *pTextCtrl)
-{
-    m_pTextCtrl = pTextCtrl;
-}
-
-void wxLogTextCtrl::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
-{
-    wxString msg;
-    TimeStamp(&msg);
-    msg << szString << wxT('\n');
-
-    m_pTextCtrl->AppendText(msg);
-}
-
 // ----------------------------------------------------------------------------
 // wxLogGui implementation (FIXME MT-unsafe)
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // wxLogGui implementation (FIXME MT-unsafe)
 // ----------------------------------------------------------------------------
@@ -247,7 +247,7 @@ void wxLogGui::Flush()
         titleFormat = _("%s Information");
         style = wxICON_INFORMATION;
     }
         titleFormat = _("%s Information");
         style = wxICON_INFORMATION;
     }
-    
+
     wxString title;
     title.Printf(titleFormat, appName.c_str());
 
     wxString title;
     title.Printf(titleFormat, appName.c_str());
 
@@ -264,6 +264,7 @@ void wxLogGui::Flush()
     else // more than one message
     {
 #if wxUSE_LOG_DIALOG
     else // more than one message
     {
 #if wxUSE_LOG_DIALOG
+
         wxLogDialog dlg(parent,
                         m_aMessages, m_aSeverity, m_aTimes,
                         title, style);
         wxLogDialog dlg(parent,
                         m_aMessages, m_aSeverity, m_aTimes,
                         title, style);
@@ -342,12 +343,12 @@ void wxLogGui::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
         case wxLOG_Debug:
             #ifdef __WXDEBUG__
             {
         case wxLOG_Debug:
             #ifdef __WXDEBUG__
             {
-                #ifdef __WXMSW__
+                #if defined(__WXMSW__) && !defined(__WXMICROWIN__)
                     // don't prepend debug/trace here: it goes to the
                     // debug window anyhow, but do put a timestamp
                     wxString str;
                     TimeStamp(&str);
                     // don't prepend debug/trace here: it goes to the
                     // debug window anyhow, but do put a timestamp
                     wxString str;
                     TimeStamp(&str);
-                    str << szString << wxT("\n\r");
+                    str << szString << wxT("\r\n");
                     OutputDebugString(str);
                 #else
                     // send them to stderr
                     OutputDebugString(str);
                 #else
                     // send them to stderr
@@ -462,6 +463,7 @@ wxLogFrame::wxLogFrame(wxFrame *pParent, wxLogWindow *log, const wxChar *szTitle
             wxHSCROLL       |
             wxTE_READONLY);
 
             wxHSCROLL       |
             wxTE_READONLY);
 
+#if wxUSE_MENUS
     // create menu
     wxMenuBar *pMenuBar = new wxMenuBar;
     wxMenu *pMenu = new wxMenu;
     // create menu
     wxMenuBar *pMenuBar = new wxMenuBar;
     wxMenu *pMenu = new wxMenu;
@@ -473,6 +475,7 @@ wxLogFrame::wxLogFrame(wxFrame *pParent, wxLogWindow *log, const wxChar *szTitle
     pMenu->Append(Menu_Close, _("&Close"), _("Close this window"));
     pMenuBar->Append(pMenu, _("&Log"));
     SetMenuBar(pMenuBar);
     pMenu->Append(Menu_Close, _("&Close"), _("Close this window"));
     pMenuBar->Append(pMenu, _("&Log"));
     SetMenuBar(pMenuBar);
+#endif // wxUSE_MENUS
 
 #if wxUSE_STATUSBAR
     // status bar for menu prompts
 
 #if wxUSE_STATUSBAR
     // status bar for menu prompts
@@ -505,6 +508,7 @@ void wxLogFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
 #if wxUSE_FILE
 void wxLogFrame::OnSave(wxCommandEvent& WXUNUSED(event))
 {
 #if wxUSE_FILE
 void wxLogFrame::OnSave(wxCommandEvent& WXUNUSED(event))
 {
+#if wxUSE_FILEDLG
     wxString filename;
     wxFile file;
     int rc = OpenLogFile(file, &filename);
     wxString filename;
     wxFile file;
     int rc = OpenLogFile(file, &filename);
@@ -533,6 +537,7 @@ void wxLogFrame::OnSave(wxCommandEvent& WXUNUSED(event))
     else {
         wxLogStatus(this, _("Log saved to the file '%s'."), filename.c_str());
     }
     else {
         wxLogStatus(this, _("Log saved to the file '%s'."), filename.c_str());
     }
+#endif
 }
 #endif // wxUSE_FILE
 
 }
 #endif // wxUSE_FILE
 
@@ -857,7 +862,7 @@ void wxLogDialog::CreateDetailsControls()
             m_listctrl->InsertItem(n, m_messages[n]);
 
         m_listctrl->SetItem(n, 1,
             m_listctrl->InsertItem(n, m_messages[n]);
 
         m_listctrl->SetItem(n, 1,
-                            wxDateTime((time_t)m_times[n]).Format(fmt));
+                            TimeStamp(fmt, (time_t)m_times[n]));
     }
 
     // let the columns size themselves
     }
 
     // let the columns size themselves
@@ -892,6 +897,7 @@ void wxLogDialog::OnOk(wxCommandEvent& WXUNUSED(event))
 
 void wxLogDialog::OnSave(wxCommandEvent& WXUNUSED(event))
 {
 
 void wxLogDialog::OnSave(wxCommandEvent& WXUNUSED(event))
 {
+#if wxUSE_FILEDLG
     wxFile file;
     int rc = OpenLogFile(file);
     if ( rc == -1 )
     wxFile file;
     int rc = OpenLogFile(file);
     if ( rc == -1 )
@@ -913,7 +919,7 @@ void wxLogDialog::OnSave(wxCommandEvent& WXUNUSED(event))
     for ( size_t n = 0; ok && (n < count); n++ )
     {
         wxString line;
     for ( size_t n = 0; ok && (n < count); n++ )
     {
         wxString line;
-        line << wxDateTime((time_t)m_times[n]).Format(fmt)
+        line << TimeStamp(fmt, (time_t)m_times[n])
              << _T(": ")
              << m_messages[n]
              << wxTextFile::GetEOL();
              << _T(": ")
              << m_messages[n]
              << wxTextFile::GetEOL();
@@ -926,6 +932,7 @@ void wxLogDialog::OnSave(wxCommandEvent& WXUNUSED(event))
 
     if ( !ok )
         wxLogError(_("Can't save log contents to file."));
 
     if ( !ok )
         wxLogError(_("Can't save log contents to file."));
+#endif
 }
 
 #endif // wxUSE_FILE
 }
 
 #endif // wxUSE_FILE
@@ -992,7 +999,7 @@ wxLogDialog::~wxLogDialog()
 
 #endif // wxUSE_LOG_DIALOG
 
 
 #endif // wxUSE_LOG_DIALOG
 
-#if wxUSE_FILE
+#if wxUSE_FILE && wxUSE_FILEDLG
 
 // pass an uninitialized file object, the function will ask the user for the
 // filename and try to open it, returns TRUE on success (file was opened),
 
 // pass an uninitialized file object, the function will ask the user for the
 // filename and try to open it, returns TRUE on success (file was opened),
@@ -1052,3 +1059,34 @@ static int OpenLogFile(wxFile& file, wxString *pFilename)
 
 #endif // wxUSE_FILE
 
 
 #endif // wxUSE_FILE
 
+#endif // !(wxUSE_LOGGUI || wxUSE_LOGWINDOW)
+
+#if wxUSE_TEXTCTRL
+
+// ----------------------------------------------------------------------------
+// wxLogTextCtrl implementation
+// ----------------------------------------------------------------------------
+
+wxLogTextCtrl::wxLogTextCtrl(wxTextCtrl *pTextCtrl)
+{
+    m_pTextCtrl = pTextCtrl;
+}
+
+void wxLogTextCtrl::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
+{
+    wxString msg;
+    TimeStamp(&msg);
+
+#ifdef __WXMAC__
+    // VZ: this is a bug in wxMac, it *must* accept '\n' as new line, the
+    //     translation must be done in wxTextCtrl, not here! (FIXME)
+    msg << szString << wxT('\r');
+#else
+    msg << szString << wxT('\n');
+#endif
+
+    m_pTextCtrl->AppendText(msg);
+}
+
+#endif // wxUSE_TEXTCTRL
+