// Created: 20.09.99 (extracted from src/common/log.cpp)
// RCS-ID: $Id$
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
#include "wx/msw/private.h"
#endif // Windows
+#ifdef __WXPM__
+ #include <time.h>
+#endif
+
#if wxUSE_LOG_DIALOG
#include "wx/listctrl.h"
#include "wx/imaglist.h"
#include "wx/msgdlg.h"
#endif // wxUSE_LOG_DIALOG/!wxUSE_LOG_DIALOG
+#if defined(__MWERKS__) && wxUSE_UNICODE
+ #include <wtime.h>
+#endif
+
// the suffix we add to the button to show that the dialog can be expanded
#define EXPAND_SUFFIX _T(" >>")
static wxString ms_details;
DECLARE_EVENT_TABLE()
+ DECLARE_NO_COPY_CLASS(wxLogDialog)
};
BEGIN_EVENT_TABLE(wxLogDialog, wxDialog)
wxLogWindow *m_log;
DECLARE_EVENT_TABLE()
+ DECLARE_NO_COPY_CLASS(wxLogFrame)
};
BEGIN_EVENT_TABLE(wxLogFrame, wxFrame)
wxLog::DoLog(level, szString, t);
}
}
-
- m_bHasMessages = TRUE;
}
void wxLogWindow::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
switch ( style & wxICON_MASK )
{
case wxICON_ERROR:
- bitmap = wxArtProvider::GetIcon(wxART_ERROR, wxART_MESSAGE_BOX); break;
+ bitmap = wxArtProvider::GetIcon(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); break;
+ bitmap = wxArtProvider::GetIcon(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); break;
+ bitmap = wxArtProvider::GetIcon(wxART_WARNING, wxART_MESSAGE_BOX);
+#ifdef __WXPM__
+ bitmap.SetId(wxICON_SMALL_WARNING);
+#endif
+ break;
+
default:
wxFAIL_MSG(_T("incorrect log style"));
}
SetAutoLayout(TRUE);
SetSizer(sizerTop);
- sizerTop->SetSizeHints(this);
- sizerTop->Fit(this);
+ // see comments in OnDetails()
+ //
+ // Note: Doing this, this way, triggered a nasty bug in
+ // wxTopLevelWindowGTK::GtkOnSize which took -1 literally once
+ // either of maxWidth or maxHeight was set. This symptom has been
+ // fixed there, but it is a problem that remains as long as we allow
+ // unchecked access to the internal size members. We really need to
+ // encapuslate window sizes more cleanly and make it clear when -1 will
+ // be substituted and when it will not.
+
+ wxSize size = sizerTop->Fit(this);
+ m_maxHeight = size.y;
+ SetSizeHints(size.x, size.y, m_maxWidth, m_maxHeight);
btnOk->SetFocus();
{
m_btnDetails->SetLabel(ms_details + EXPAND_SUFFIX);
- sizer->Remove(m_listctrl);
+ sizer->Detach( m_listctrl );
#if wxUSE_STATLINE
- sizer->Remove(m_statline);
+ sizer->Detach( m_statline );
#endif // wxUSE_STATLINE
#if wxUSE_FILE
- sizer->Remove(m_btnSave);
+ sizer->Detach( m_btnSave );
#endif // wxUSE_FILE
}
else // show details now
m_showingDetails = !m_showingDetails;
- // in any case, our size changed - update
- sizer->SetSizeHints(this);
- sizer->Fit(this);
+ // in any case, our size changed - relayout everything and set new hints
+ // ---------------------------------------------------------------------
+
+ // we have to reset min size constraints or Fit() would never reduce the
+ // dialog size when collapsing it and we have to reset max constraint
+ // because it wouldn't expand it otherwise
+
+ m_minHeight =
+ m_maxHeight = -1;
+
+ // wxSizer::FitSize() is private, otherwise we might use it directly...
+ wxSize sizeTotal = GetSize(),
+ sizeClient = GetClientSize();
+
+ wxSize size = sizer->GetMinSize();
+ size.x += sizeTotal.x - sizeClient.x;
+ size.y += sizeTotal.y - sizeClient.y;
+
+ // we don't want to allow expanding the dialog in vertical direction as
+ // this would show the "hidden" details but we can resize the dialog
+ // vertically while the details are shown
+ if ( !m_showingDetails )
+ m_maxHeight = size.y;
+
+ SetSizeHints(size.x, size.y, m_maxWidth, m_maxHeight);
+
+ // don't change the width when expanding/collapsing
+ SetSize(-1, size.y);
#ifdef __WXGTK__
// VS: this is neccessary in order to force frame redraw under
#endif // !(wxUSE_LOGGUI || wxUSE_LOGWINDOW)
-#if wxUSE_TEXTCTRL
+#if wxUSE_LOG && wxUSE_GUI && wxUSE_TEXTCTRL
// ----------------------------------------------------------------------------
// wxLogTextCtrl implementation
m_pTextCtrl->AppendText(msg);
}
-#endif // wxUSE_TEXTCTRL
+#endif // wxUSE_LOG && wxUSE_GUI && wxUSE_TEXTCTRL
+// vi:sts=4:sw=4:et