]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/logg.cpp
Tinderbox build fix.
[wxWidgets.git] / src / generic / logg.cpp
index 727f33a11d0909ad28e3e98efec6ac8b9d560d77..50e1457c19b354350e8104ba7d823f22c414a8f3 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "logg.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-  #pragma hdrstop
+    #pragma hdrstop
 #endif
 
 #ifndef WX_PRECOMP
@@ -41,7 +37,6 @@
     #include "wx/textctrl.h"
     #include "wx/sizer.h"
     #include "wx/statbmp.h"
-    #include "wx/button.h"
     #include "wx/settings.h"
 #endif // WX_PRECOMP
 
 #include "wx/artprov.h"
 
 #ifdef  __WXMSW__
-  // for OutputDebugString()
-  #include  "wx/msw/private.h"
+    // for OutputDebugString()
+    #include  "wx/msw/private.h"
 #endif // Windows
 
 #ifdef  __WXPM__
-  #include <time.h>
+    #include <time.h>
 #endif
 
 #if wxUSE_LOG_DIALOG
     #include "wx/listctrl.h"
     #include "wx/imaglist.h"
     #include "wx/image.h"
-#else // !wxUSE_LOG_DIALOG
-    #include "wx/msgdlg.h"
 #endif // wxUSE_LOG_DIALOG/!wxUSE_LOG_DIALOG
 
 #if defined(__MWERKS__) && wxUSE_UNICODE
 // allows to exclude the usage of wxDateTime
 static wxString TimeStamp(const wxChar *format, time_t t)
 {
-#ifdef __WXWINCE__
-    // FIXME
-    return wxEmptyString;
-#else
     wxChar buf[4096];
     if ( !wxStrftime(buf, WXSIZEOF(buf), format, localtime(&t)) )
     {
@@ -99,7 +88,6 @@ static wxString TimeStamp(const wxChar *format, time_t t)
         wxFAIL_MSG(_T("strftime() failed"));
     }
     return wxString(buf);
-#endif
 }
 
 
@@ -132,18 +120,22 @@ private:
     wxArrayLong m_times;
 
     // the "toggle" button and its state
+#ifndef __SMARTPHONE__
     wxButton *m_btnDetails;
+#endif
     bool      m_showingDetails;
 
     // the controls which are not shown initially (but only when details
     // button is pressed)
     wxListCtrl *m_listctrl;
+#ifndef __SMARTPHONE__
 #if wxUSE_STATLINE
     wxStaticLine *m_statline;
 #endif // wxUSE_STATLINE
 #if wxUSE_FILE
     wxButton *m_btnSave;
 #endif // wxUSE_FILE
+#endif // __SMARTPHONE__
 
     // the translated "Details" string
     static wxString ms_details;
@@ -252,6 +244,12 @@ void wxLogGui::Flush()
     // do it right now to block any new calls to Flush() while we're here
     m_bHasMessages = false;
 
+    unsigned repeatCount = 0;
+    if ( wxLog::GetRepetitionCounting() )
+    {
+        repeatCount = wxLog::DoLogNumberOfRepeats();
+    }
+
     wxString appName = wxTheApp->GetAppName();
     if ( !appName.empty() )
         appName[0u] = (wxChar)wxToupper(appName[0u]);
@@ -289,6 +287,8 @@ void wxLogGui::Flush()
     {
 #if wxUSE_LOG_DIALOG
 
+        if ( repeatCount > 0 )
+            m_aMessages[nMsgCount-1] += wxString::Format(wxT(" (%s)"), m_aMessages[nMsgCount-2].c_str());
         wxLogDialog dlg(NULL,
                         m_aMessages, m_aSeverity, m_aTimes,
                         title, style);
@@ -430,6 +430,8 @@ void wxLogGui::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
 // wxLogWindow and wxLogFrame implementation
 // ----------------------------------------------------------------------------
 
+#if wxUSE_LOGWINDOW
+
 // log frame class
 // ---------------
 class wxLogFrame : public wxFrame
@@ -644,7 +646,7 @@ void wxLogWindow::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
 
     // remove selection (WriteText is in fact ReplaceSelection)
 #ifdef __WXMSW__
-    long nLen = pText->GetLastPosition();
+    wxTextPos nLen = pText->GetLastPosition();
     pText->SetSelection(nLen, nLen);
 #endif // Windows
 
@@ -683,13 +685,19 @@ wxLogWindow::~wxLogWindow()
     delete m_pLogFrame;
 }
 
+#endif // wxUSE_LOGWINDOW
+
 // ----------------------------------------------------------------------------
 // wxLogDialog
 // ----------------------------------------------------------------------------
 
 #if wxUSE_LOG_DIALOG
 
+#ifndef __SMARTPHONE__
 static const size_t MARGIN = 10;
+#else
+static const size_t MARGIN = 0;
+#endif
 
 wxString wxLogDialog::ms_details;
 
@@ -709,6 +717,9 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
         // happens to pop up a Log message while translating this :-)
         ms_details = wxTRANSLATE("&Details");
         ms_details = wxGetTranslation(ms_details);
+#ifdef __SMARTPHONE__
+        ms_details = wxStripMenuCodes(ms_details);
+#endif
     }
 
     size_t count = messages.GetCount();
@@ -728,6 +739,8 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
     m_showingDetails = false; // not initially
     m_listctrl = (wxListCtrl *)NULL;
 
+#ifndef __SMARTPHONE__
+
 #if wxUSE_STATLINE
     m_statline = (wxStaticLine *)NULL;
 #endif // wxUSE_STATLINE
@@ -736,37 +749,48 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
     m_btnSave = (wxButton *)NULL;
 #endif // wxUSE_FILE
 
+#endif // __SMARTPHONE__
+
+    bool isPda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA);
+
     // create the controls which are always shown and layout them: we use
     // sizers even though our window is not resizeable to calculate the size of
     // the dialog properly
     wxBoxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
-    wxBoxSizer *sizerButtons = new wxBoxSizer(wxVERTICAL);
-    wxBoxSizer *sizerAll = new wxBoxSizer(wxHORIZONTAL);
+#ifndef __SMARTPHONE__
+    wxBoxSizer *sizerButtons = new wxBoxSizer(isPda ? wxHORIZONTAL : wxVERTICAL);
+#endif
+    wxBoxSizer *sizerAll = new wxBoxSizer(isPda ? wxVERTICAL : wxHORIZONTAL);
 
+#ifdef __SMARTPHONE__
+    SetLeftMenu(wxID_OK);
+    SetRightMenu(wxID_MORE, ms_details + EXPAND_SUFFIX);
+#else
     wxButton *btnOk = new wxButton(this, wxID_OK);
-    sizerButtons->Add(btnOk, 0, wxCENTRE | wxBOTTOM, MARGIN/2);
+    sizerButtons->Add(btnOk, 0, isPda ? wxCENTRE : wxCENTRE|wxBOTTOM, MARGIN/2);
     m_btnDetails = new wxButton(this, wxID_MORE, ms_details + EXPAND_SUFFIX);
-    sizerButtons->Add(m_btnDetails, 0, wxCENTRE | wxTOP, MARGIN/2 - 1);
+    sizerButtons->Add(m_btnDetails, 0, isPda ? wxCENTRE|wxLEFT : wxCENTRE | wxTOP, MARGIN/2 - 1);
+#endif
 
     wxBitmap bitmap;
     switch ( style & wxICON_MASK )
     {
         case wxICON_ERROR:
-            bitmap = wxArtProvider::GetIcon(wxART_ERROR, wxART_MESSAGE_BOX);
+            bitmap = wxArtProvider::GetBitmap(wxART_ERROR, wxART_MESSAGE_BOX);
 #ifdef __WXPM__
             bitmap.SetId(wxICON_SMALL_ERROR);
 #endif
             break;
 
         case wxICON_INFORMATION:
-            bitmap = wxArtProvider::GetIcon(wxART_INFORMATION, wxART_MESSAGE_BOX);
+            bitmap = wxArtProvider::GetBitmap(wxART_INFORMATION, wxART_MESSAGE_BOX);
 #ifdef __WXPM__
             bitmap.SetId(wxICON_SMALL_INFO);
 #endif
             break;
 
         case wxICON_WARNING:
-            bitmap = wxArtProvider::GetIcon(wxART_WARNING, wxART_MESSAGE_BOX);
+            bitmap = wxArtProvider::GetBitmap(wxART_WARNING, wxART_MESSAGE_BOX);
 #ifdef __WXPM__
             bitmap.SetId(wxICON_SMALL_WARNING);
 #endif
@@ -775,13 +799,17 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
         default:
             wxFAIL_MSG(_T("incorrect log style"));
     }
-    sizerAll->Add(new wxStaticBitmap(this, wxID_ANY, bitmap), 0,
+
+    if (!isPda)
+        sizerAll->Add(new wxStaticBitmap(this, wxID_ANY, bitmap), 0,
                   wxALIGN_CENTRE_VERTICAL);
 
     const wxString& message = messages.Last();
     sizerAll->Add(CreateTextSizer(message), 1,
                   wxALIGN_CENTRE_VERTICAL | wxLEFT | wxRIGHT, MARGIN);
-    sizerAll->Add(sizerButtons, 0, wxALIGN_RIGHT | wxLEFT, MARGIN);
+#ifndef __SMARTPHONE__
+    sizerAll->Add(sizerButtons, 0, isPda ? wxCENTRE|wxTOP|wxBOTTOM : (wxALIGN_RIGHT | wxLEFT), MARGIN);
+#endif
 
     sizerTop->Add(sizerAll, 0, wxALL | wxEXPAND, MARGIN);
 
@@ -801,13 +829,23 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
     m_maxHeight = size.y;
     SetSizeHints(size.x, size.y, m_maxWidth, m_maxHeight);
 
+#ifndef __SMARTPHONE__
     btnOk->SetFocus();
+#endif
 
     Centre();
+
+    if (isPda)
+    {
+        // Move up the screen so that when we expand the dialog,
+        // there's enough space.
+        Move(wxPoint(GetPosition().x, GetPosition().y / 2));
+    }
 }
 
 void wxLogDialog::CreateDetailsControls()
 {
+#ifndef __SMARTPHONE__
     // create the save button and separator line if possible
 #if wxUSE_FILE
     m_btnSave = new wxButton(this, wxID_SAVE);
@@ -817,6 +855,8 @@ void wxLogDialog::CreateDetailsControls()
     m_statline = new wxStaticLine(this, wxID_ANY);
 #endif // wxUSE_STATLINE
 
+#endif // __SMARTPHONE__
+
     // create the list ctrl now
     m_listctrl = new wxListCtrl(this, wxID_ANY,
                                 wxDefaultPosition, wxDefaultSize,
@@ -824,6 +864,11 @@ void wxLogDialog::CreateDetailsControls()
                                 wxLC_REPORT |
                                 wxLC_NO_HEADER |
                                 wxLC_SINGLE_SEL);
+#ifdef __WXWINCE__
+    // This maks a big aesthetic difference on WinCE but I
+    // don't want to risk problems on other platforms
+    m_listctrl->Hide();
+#endif
 
     // no need to translate these strings as they're not shown to the
     // user anyhow (we use wxLC_NO_HEADER style)
@@ -868,7 +913,7 @@ void wxLogDialog::CreateDetailsControls()
     if ( !fmt )
     {
         // default format
-        fmt = wxDefaultDateTimeFormat;
+        fmt = _T("%c");
     }
 
     size_t count = m_messages.GetCount();
@@ -954,7 +999,7 @@ void wxLogDialog::OnSave(wxCommandEvent& WXUNUSED(event))
     if ( !fmt )
     {
         // default format
-        fmt = wxDefaultDateTimeFormat;
+        fmt = _T("%c");
     }
 
     size_t count = m_messages.GetCount();
@@ -985,10 +1030,16 @@ void wxLogDialog::OnDetails(wxCommandEvent& WXUNUSED(event))
 
     if ( m_showingDetails )
     {
+#ifdef __SMARTPHONE__
+        SetRightMenu(wxID_MORE, ms_details + EXPAND_SUFFIX);
+#else
         m_btnDetails->SetLabel(ms_details + EXPAND_SUFFIX);
+#endif
 
         sizer->Detach( m_listctrl );
 
+#ifndef __SMARTPHONE__
+
 #if wxUSE_STATLINE
         sizer->Detach( m_statline );
 #endif // wxUSE_STATLINE
@@ -996,18 +1047,26 @@ void wxLogDialog::OnDetails(wxCommandEvent& WXUNUSED(event))
 #if wxUSE_FILE
         sizer->Detach( m_btnSave );
 #endif // wxUSE_FILE
+
+#endif // __SMARTPHONE__
     }
     else // show details now
     {
+#ifdef __SMARTPHONE__
+        SetRightMenu(wxID_MORE, wxString(_T("<< ")) + ms_details);
+#else
         m_btnDetails->SetLabel(wxString(_T("<< ")) + ms_details);
+#endif
 
         if ( !m_listctrl )
         {
             CreateDetailsControls();
         }
 
-#if wxUSE_STATLINE
-        sizer->Add(m_statline, 0, wxEXPAND | (wxALL & ~wxTOP), MARGIN);
+#if wxUSE_STATLINE && !defined(__SMARTPHONE__)
+        bool isPda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA);
+        if (!isPda)
+            sizer->Add(m_statline, 0, wxEXPAND | (wxALL & ~wxTOP), MARGIN);
 #endif // wxUSE_STATLINE
 
         sizer->Add(m_listctrl, 1, wxEXPAND | (wxALL & ~wxTOP), MARGIN);
@@ -1021,7 +1080,7 @@ void wxLogDialog::OnDetails(wxCommandEvent& WXUNUSED(event))
         sizer->SetItemMinSize(m_listctrl, 100, 3*GetCharHeight());
 #endif // 0
 
-#if wxUSE_FILE
+#if wxUSE_FILE && !defined(__SMARTPHONE__)
         sizer->Add(m_btnSave, 0, wxALIGN_RIGHT | (wxALL & ~wxTOP), MARGIN);
 #endif // wxUSE_FILE
     }
@@ -1054,11 +1113,16 @@ void wxLogDialog::OnDetails(wxCommandEvent& WXUNUSED(event))
 
     SetSizeHints(size.x, size.y, m_maxWidth, m_maxHeight);
 
+#ifdef __WXWINCE__
+    if (m_showingDetails)
+        m_listctrl->Show();
+#endif
+
     // don't change the width when expanding/collapsing
     SetSize(wxDefaultCoord, size.y);
 
 #ifdef __WXGTK__
-    // VS: this is neccessary in order to force frame redraw under
+    // VS: this is necessary in order to force frame redraw under
     // WindowMaker or fvwm2 (and probably other broken WMs).
     // Otherwise, detailed list wouldn't be displayed.
     Show();
@@ -1093,7 +1157,7 @@ static int OpenLogFile(wxFile& file, wxString *pFilename, wxWindow *parent)
 
     // open file
     // ---------
-    bool bOk;
+    bool bOk wxDUMMY_INITIALIZE(false);
     if ( wxFile::Exists(filename) ) {
         bool bAppend = false;
         wxString strMsg;
@@ -1158,4 +1222,3 @@ void wxLogTextCtrl::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
 }
 
 #endif // wxUSE_LOG && wxUSE_TEXTCTRL
-