]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/logg.cpp
Respect wxListItem::m_mask in general list control Set/GetItem() and allow
[wxWidgets.git] / src / generic / logg.cpp
index a0b7a1aa5cf5544c3c4035dc8542c75e6ea7bf40..b39273fa298e3fec51e2cffcca2db7334a247d50 100644 (file)
@@ -73,6 +73,8 @@
     #include <wtime.h>
 #endif
 
+#include "wx/datetime.h"
+
 // the suffix we add to the button to show that the dialog can be expanded
 #define EXPAND_SUFFIX _T(" >>")
 
 // 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)) )
     {
@@ -97,7 +95,6 @@ static wxString TimeStamp(const wxChar *format, time_t t)
         wxFAIL_MSG(_T("strftime() failed"));
     }
     return wxString(buf);
-#endif
 }
 
 
@@ -130,18 +127,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;
@@ -151,7 +152,7 @@ private:
 };
 
 BEGIN_EVENT_TABLE(wxLogDialog, wxDialog)
-    EVT_BUTTON(wxID_CANCEL, wxLogDialog::OnOk)
+    EVT_BUTTON(wxID_OK, wxLogDialog::OnOk)
     EVT_BUTTON(wxID_MORE,   wxLogDialog::OnDetails)
 #if wxUSE_FILE
     EVT_BUTTON(wxID_SAVE,   wxLogDialog::OnSave)
@@ -251,8 +252,8 @@ void wxLogGui::Flush()
     m_bHasMessages = false;
 
     wxString appName = wxTheApp->GetAppName();
-    if ( !!appName )
-        appName[0u] = wxToupper(appName[0u]);
+    if ( !appName.empty() )
+        appName[0u] = (wxChar)wxToupper(appName[0u]);
 
     long style;
     wxString titleFormat;
@@ -317,7 +318,7 @@ void wxLogGui::Flush()
 
     // this catches both cases of 1 message with wxUSE_LOG_DIALOG and any
     // situation without it
-    if ( !!str )
+    if ( !str.empty() )
     {
         wxMessageBox(str, title, wxOK | style);
 
@@ -428,6 +429,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
@@ -642,7 +645,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
 
@@ -681,13 +684,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;
 
@@ -701,12 +710,15 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
                       wxDefaultPosition, wxDefaultSize,
                       wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
-    if ( ms_details.IsEmpty() )
+    if ( ms_details.empty() )
     {
         // ensure that we won't loop here if wxGetTranslation()
         // 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();
@@ -726,6 +738,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
@@ -734,42 +748,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);
-
-    // this "Ok" button has wxID_CANCEL id - not very logical, but this allows
-    // to close the log dialog with <Esc> which wouldn't work otherwise (as it
-    // translates into click on cancel button)
+#ifndef __SMARTPHONE__
+    wxBoxSizer *sizerButtons = new wxBoxSizer(isPda ? wxHORIZONTAL : wxVERTICAL);
+#endif
+    wxBoxSizer *sizerAll = new wxBoxSizer(isPda ? wxVERTICAL : wxHORIZONTAL);
 
-    // FIXME: use stock button here!
-    wxButton *btnOk = new wxButton(this, wxID_CANCEL, _("OK"));
-    sizerButtons->Add(btnOk, 0, wxCENTRE | wxBOTTOM, MARGIN/2);
+#ifdef __SMARTPHONE__
+    SetLeftMenu(wxID_OK);
+    SetRightMenu(wxID_MORE, ms_details + EXPAND_SUFFIX);
+#else
+    wxButton *btnOk = new wxButton(this, wxID_OK);
+    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
@@ -778,13 +798,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);
 
@@ -804,23 +828,23 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
     m_maxHeight = size.y;
     SetSizeHints(size.x, size.y, m_maxWidth, m_maxHeight);
 
+#ifndef __SMARTPHONE__
     btnOk->SetFocus();
+#endif
 
-    // this can't happen any more as we don't use this dialog in this case
-#if 0
-    if ( count == 1 )
+    Centre();
+
+    if (isPda)
     {
-        // no details... it's easier to disable a button than to change the
-        // dialog layout depending on whether we have details or not
-        m_btnDetails->Disable();
+        // Move up the screen so that when we expand the dialog,
+        // there's enough space.
+        Move(wxPoint(GetPosition().x, GetPosition().y / 2));
     }
-#endif // 0
-
-    Centre();
 }
 
 void wxLogDialog::CreateDetailsControls()
 {
+#ifndef __SMARTPHONE__
     // create the save button and separator line if possible
 #if wxUSE_FILE
     m_btnSave = new wxButton(this, wxID_SAVE);
@@ -830,6 +854,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,
@@ -837,6 +863,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)
@@ -998,10 +1029,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
@@ -1009,18 +1046,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);
@@ -1034,7 +1079,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
     }
@@ -1067,11 +1112,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();
@@ -1106,7 +1156,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;