X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c50e42a1223f6da4a07f5c8472a3fe7bf682356a..33cc6200a8c797c72536ca319148c0f712cf658a:/src/generic/logg.cpp diff --git a/src/generic/logg.cpp b/src/generic/logg.cpp index bb9ec867a3..ee26cbdd01 100644 --- a/src/generic/logg.cpp +++ b/src/generic/logg.cpp @@ -73,6 +73,8 @@ #include #endif +#include "wx/datetime.h" + // 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 +#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 +157,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 +257,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 +323,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); @@ -434,7 +440,7 @@ class wxLogFrame : public wxFrame { public: // ctor & dtor - wxLogFrame(wxFrame *pParent, wxLogWindow *log, const wxChar *szTitle); + wxLogFrame(wxWindow *pParent, wxLogWindow *log, const wxChar *szTitle); virtual ~wxLogFrame(); // menu callbacks @@ -478,7 +484,7 @@ BEGIN_EVENT_TABLE(wxLogFrame, wxFrame) EVT_CLOSE(wxLogFrame::OnCloseWindow) END_EVENT_TABLE() -wxLogFrame::wxLogFrame(wxFrame *pParent, wxLogWindow *log, const wxChar *szTitle) +wxLogFrame::wxLogFrame(wxWindow *pParent, wxLogWindow *log, const wxChar *szTitle) : wxFrame(pParent, wxID_ANY, szTitle) { m_log = log; @@ -585,7 +591,7 @@ wxLogFrame::~wxLogFrame() // wxLogWindow // ----------- -wxLogWindow::wxLogWindow(wxFrame *pParent, +wxLogWindow::wxLogWindow(wxWindow *pParent, const wxChar *szTitle, bool bShow, bool bDoPass) @@ -642,7 +648,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 @@ -687,7 +693,11 @@ wxLogWindow::~wxLogWindow() #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 +711,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 +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 @@ -734,20 +749,28 @@ 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 which wouldn't work otherwise (as it - // translates into click on cancel button) - wxButton *btnOk = new wxButton(this, wxID_CANCEL, wxSTOCK_OK); - sizerButtons->Add(btnOk, 0, wxCENTRE | wxBOTTOM, MARGIN/2); +#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, 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 ) @@ -776,12 +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,32 +829,34 @@ 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, wxSTOCK_SAVE); + m_btnSave = new wxButton(this, wxID_SAVE); #endif // wxUSE_FILE #if 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, @@ -834,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) @@ -878,7 +913,7 @@ void wxLogDialog::CreateDetailsControls() if ( !fmt ) { // default format - fmt = _T("%c"); + fmt = wxDefaultDateTimeFormat; } size_t count = m_messages.GetCount(); @@ -964,7 +999,7 @@ void wxLogDialog::OnSave(wxCommandEvent& WXUNUSED(event)) if ( !fmt ) { // default format - fmt = _T("%c"); + fmt = wxDefaultDateTimeFormat; } size_t count = m_messages.GetCount(); @@ -995,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 @@ -1006,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); @@ -1031,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 } @@ -1064,6 +1113,11 @@ 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); @@ -1103,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;