]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/logg.cpp
don't set virtual size of the window to (0, 0) if scrollbars are removed from it
[wxWidgets.git] / src / generic / logg.cpp
index a084cc8bc4c639a07fc9a6bb633fc6aa46be6d2f..ee26cbdd017c701f129b05829745fc6beb9168c7 100644 (file)
@@ -73,6 +73,8 @@
     #include <wtime.h>
 #endif
 
     #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(" >>")
 
 // the suffix we add to the button to show that the dialog can be expanded
 #define EXPAND_SUFFIX _T(" >>")
 
@@ -130,18 +132,22 @@ private:
     wxArrayLong m_times;
 
     // the "toggle" button and its state
     wxArrayLong m_times;
 
     // the "toggle" button and its state
+#ifndef __SMARTPHONE__
     wxButton *m_btnDetails;
     wxButton *m_btnDetails;
+#endif
     bool      m_showingDetails;
 
     // the controls which are not shown initially (but only when details
     // button is pressed)
     wxListCtrl *m_listctrl;
     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
 #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;
 
     // the translated "Details" string
     static wxString ms_details;
@@ -642,7 +648,7 @@ void wxLogWindow::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
 
     // remove selection (WriteText is in fact ReplaceSelection)
 #ifdef __WXMSW__
 
     // remove selection (WriteText is in fact ReplaceSelection)
 #ifdef __WXMSW__
-    long nLen = pText->GetLastPosition();
+    wxTextPos nLen = pText->GetLastPosition();
     pText->SetSelection(nLen, nLen);
 #endif // Windows
 
     pText->SetSelection(nLen, nLen);
 #endif // Windows
 
@@ -687,7 +693,11 @@ wxLogWindow::~wxLogWindow()
 
 #if wxUSE_LOG_DIALOG
 
 
 #if wxUSE_LOG_DIALOG
 
+#ifndef __SMARTPHONE__
 static const size_t MARGIN = 10;
 static const size_t MARGIN = 10;
+#else
+static const size_t MARGIN = 0;
+#endif
 
 wxString wxLogDialog::ms_details;
 
 
 wxString wxLogDialog::ms_details;
 
@@ -707,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);
         // 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();
     }
 
     size_t count = messages.GetCount();
@@ -726,6 +739,8 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
     m_showingDetails = false; // not initially
     m_listctrl = (wxListCtrl *)NULL;
 
     m_showingDetails = false; // not initially
     m_listctrl = (wxListCtrl *)NULL;
 
+#ifndef __SMARTPHONE__
+
 #if wxUSE_STATLINE
     m_statline = (wxStaticLine *)NULL;
 #endif // wxUSE_STATLINE
 #if wxUSE_STATLINE
     m_statline = (wxStaticLine *)NULL;
 #endif // wxUSE_STATLINE
@@ -734,17 +749,28 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
     m_btnSave = (wxButton *)NULL;
 #endif // wxUSE_FILE
 
     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);
     // 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);
     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);
     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 )
 
     wxBitmap bitmap;
     switch ( style & wxICON_MASK )
@@ -773,13 +799,17 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
         default:
             wxFAIL_MSG(_T("incorrect log style"));
     }
         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);
                   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);
 
 
     sizerTop->Add(sizerAll, 0, wxALL | wxEXPAND, MARGIN);
 
@@ -799,13 +829,23 @@ wxLogDialog::wxLogDialog(wxWindow *parent,
     m_maxHeight = size.y;
     SetSizeHints(size.x, size.y, m_maxWidth, m_maxHeight);
 
     m_maxHeight = size.y;
     SetSizeHints(size.x, size.y, m_maxWidth, m_maxHeight);
 
+#ifndef __SMARTPHONE__
     btnOk->SetFocus();
     btnOk->SetFocus();
+#endif
 
     Centre();
 
     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()
 {
 }
 
 void wxLogDialog::CreateDetailsControls()
 {
+#ifndef __SMARTPHONE__
     // create the save button and separator line if possible
 #if wxUSE_FILE
     m_btnSave = new wxButton(this, wxID_SAVE);
     // create the save button and separator line if possible
 #if wxUSE_FILE
     m_btnSave = new wxButton(this, wxID_SAVE);
@@ -815,6 +855,8 @@ void wxLogDialog::CreateDetailsControls()
     m_statline = new wxStaticLine(this, wxID_ANY);
 #endif // wxUSE_STATLINE
 
     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,
     // create the list ctrl now
     m_listctrl = new wxListCtrl(this, wxID_ANY,
                                 wxDefaultPosition, wxDefaultSize,
@@ -822,6 +864,11 @@ void wxLogDialog::CreateDetailsControls()
                                 wxLC_REPORT |
                                 wxLC_NO_HEADER |
                                 wxLC_SINGLE_SEL);
                                 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)
 
     // no need to translate these strings as they're not shown to the
     // user anyhow (we use wxLC_NO_HEADER style)
@@ -866,7 +913,7 @@ void wxLogDialog::CreateDetailsControls()
     if ( !fmt )
     {
         // default format
     if ( !fmt )
     {
         // default format
-        fmt = _T("%c");
+        fmt = wxDefaultDateTimeFormat;
     }
 
     size_t count = m_messages.GetCount();
     }
 
     size_t count = m_messages.GetCount();
@@ -952,7 +999,7 @@ void wxLogDialog::OnSave(wxCommandEvent& WXUNUSED(event))
     if ( !fmt )
     {
         // default format
     if ( !fmt )
     {
         // default format
-        fmt = _T("%c");
+        fmt = wxDefaultDateTimeFormat;
     }
 
     size_t count = m_messages.GetCount();
     }
 
     size_t count = m_messages.GetCount();
@@ -983,10 +1030,16 @@ void wxLogDialog::OnDetails(wxCommandEvent& WXUNUSED(event))
 
     if ( m_showingDetails )
     {
 
     if ( m_showingDetails )
     {
+#ifdef __SMARTPHONE__
+        SetRightMenu(wxID_MORE, ms_details + EXPAND_SUFFIX);
+#else
         m_btnDetails->SetLabel(ms_details + EXPAND_SUFFIX);
         m_btnDetails->SetLabel(ms_details + EXPAND_SUFFIX);
+#endif
 
         sizer->Detach( m_listctrl );
 
 
         sizer->Detach( m_listctrl );
 
+#ifndef __SMARTPHONE__
+
 #if wxUSE_STATLINE
         sizer->Detach( m_statline );
 #endif // wxUSE_STATLINE
 #if wxUSE_STATLINE
         sizer->Detach( m_statline );
 #endif // wxUSE_STATLINE
@@ -994,18 +1047,26 @@ void wxLogDialog::OnDetails(wxCommandEvent& WXUNUSED(event))
 #if wxUSE_FILE
         sizer->Detach( m_btnSave );
 #endif // wxUSE_FILE
 #if wxUSE_FILE
         sizer->Detach( m_btnSave );
 #endif // wxUSE_FILE
+
+#endif // __SMARTPHONE__
     }
     else // show details now
     {
     }
     else // show details now
     {
+#ifdef __SMARTPHONE__
+        SetRightMenu(wxID_MORE, wxString(_T("<< ")) + ms_details);
+#else
         m_btnDetails->SetLabel(wxString(_T("<< ")) + ms_details);
         m_btnDetails->SetLabel(wxString(_T("<< ")) + ms_details);
+#endif
 
         if ( !m_listctrl )
         {
             CreateDetailsControls();
         }
 
 
         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);
 #endif // wxUSE_STATLINE
 
         sizer->Add(m_listctrl, 1, wxEXPAND | (wxALL & ~wxTOP), MARGIN);
@@ -1019,7 +1080,7 @@ void wxLogDialog::OnDetails(wxCommandEvent& WXUNUSED(event))
         sizer->SetItemMinSize(m_listctrl, 100, 3*GetCharHeight());
 #endif // 0
 
         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
     }
         sizer->Add(m_btnSave, 0, wxALIGN_RIGHT | (wxALL & ~wxTOP), MARGIN);
 #endif // wxUSE_FILE
     }
@@ -1052,6 +1113,11 @@ void wxLogDialog::OnDetails(wxCommandEvent& WXUNUSED(event))
 
     SetSizeHints(size.x, size.y, m_maxWidth, m_maxHeight);
 
 
     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);
 
     // don't change the width when expanding/collapsing
     SetSize(wxDefaultCoord, size.y);
 
@@ -1091,7 +1157,7 @@ static int OpenLogFile(wxFile& file, wxString *pFilename, wxWindow *parent)
 
     // open file
     // ---------
 
     // open file
     // ---------
-    bool bOk;
+    bool bOk wxDUMMY_INITIALIZE(false);
     if ( wxFile::Exists(filename) ) {
         bool bAppend = false;
         wxString strMsg;
     if ( wxFile::Exists(filename) ) {
         bool bAppend = false;
         wxString strMsg;