1. wxWizard supports setting images for each page, sample updated to show it
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 21 Jan 2000 02:26:25 +0000 (02:26 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 21 Jan 2000 02:26:25 +0000 (02:26 +0000)
2. wxLogGui now uses a special dialog instead of a wxMsgBox
3. wxComboBox doesn't limit the text to its size under MSW
4. removed windows.h from dummy.cpp because I think it's unneeded

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5558 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

12 files changed:
include/wx/generic/wizard.h
include/wx/log.h
include/wx/wizard.h
src/common/db.cpp
src/common/dlgcmn.cpp
src/common/wincmn.cpp
src/generic/logg.cpp
src/generic/msgdlgg.cpp
src/generic/wizard.cpp
src/msw/combobox.cpp
src/msw/dummy.cpp
src/msw/mimetype.cpp

index bf305f6b04b5086188143e2fa7f2ea9fb8b3d188..7c26f62b85a49e5e3ab71b97a055ca1a8c0adbab 100644 (file)
 // wxWizard
 // ----------------------------------------------------------------------------
 
-class wxWizard : public wxWizardBase
+class WXDLLEXPORT wxButton;
+class WXDLLEXPORT wxStaticBitmap;
+
+class WXDLLEXPORT wxWizard : public wxWizardBase
 {
 public:
     // ctor
@@ -52,10 +55,12 @@ private:
 
     // wizard state
     wxWizardPage *m_page;       // the current page or NULL
+    wxBitmap      m_bitmap;     // the default bitmap to show
 
     // wizard controls
     wxButton    *m_btnPrev,     // the "<Back" button
                 *m_btnNext;     // the "Next>" or "Finish" button
+    wxStaticBitmap *m_statbmp;  // the control for the bitmap
 
     DECLARE_DYNAMIC_CLASS(wxWizard)
     DECLARE_EVENT_TABLE()
index cc42cdb54230c0f97f2b5aea8fa243698cc7818f..507e646bfa47a95603cdf92e77e828489e149911 100644 (file)
@@ -286,8 +286,9 @@ protected:
     // empty everything
     void Clear();
 
-    wxArrayString m_aMessages;
-    wxArrayLong   m_aTimes;
+    wxArrayString m_aMessages;      // the log message texts
+    wxArrayInt    m_aSeverity;      // one of wxLOG_XXX values
+    wxArrayLong   m_aTimes;         // the time of each message
     bool          m_bErrors,        // do we have any errors?
                   m_bWarnings;      // any warnings?
 };
index 1d30123a5e24630f5bb67b97205a769c70796784..58eb283c51525912ec648a1cff060b81bf0f1265 100644 (file)
@@ -38,15 +38,26 @@ class WXDLLEXPORT wxWizard;
 class WXDLLEXPORT wxWizardPage : public wxPanel
 {
 public:
-    // ctor: no other parameters are needed because the wizard will resize and
+    // ctor accepts an optional bitmap which will be used for this page instead
+    // of the default one for this wizard (should be of the same size). Notice
+    // that no other parameters are needed because the wizard will resize and
     // reposition the page anyhow
-    wxWizardPage(wxWizard *parent);
+    wxWizardPage(wxWizard *parent, const wxBitmap& bitmap = wxNullBitmap);
 
     // these functions are used by the wizard to show another page when the
     // user chooses "Back" or "Next" button
     virtual wxWizardPage *GetPrev() const = 0;
     virtual wxWizardPage *GetNext() const = 0;
 
+    // default GetBitmap() will just return m_bitmap which is ok in 99% of
+    // cases - override this method if you want to create the bitmap to be used
+    // dynamically or to do something even more fancy. It's ok to return
+    // wxNullBitmap from here - the default one will be used then.
+    virtual wxBitmap GetBitmap() const { return m_bitmap; }
+
+protected:
+    wxBitmap m_bitmap;
+
 private:
     DECLARE_ABSTRACT_CLASS(wxWizardPage)
 };
index 6f0219a901b4899d45068c07aae855b5ce4957f1..4617ff18d765f4adfd03e3da299960bbef02cafb 100644 (file)
@@ -1995,7 +1995,6 @@ wxDbInf *wxDB::GetCatalog(char *userID)
 {
        wxDbInf *pDbInf = NULL; // Array of catalog entries
        int      noTab = 0;     // Counter while filling table entries
-       int      i = 0;
        int      pass;
        RETCODE  retcode;
        SDWORD   cb;
index 73d1bcd7dcb5c44953720c990607167bcde27fbb..82fe581edb56166ee2a7af9b0c31e42228ec91ab 100644 (file)
@@ -47,9 +47,10 @@ wxSizer *wxDialogBase::CreateTextSizer( const wxString &message )
 
     // get line height for empty lines
     int y = 0;
-    wxFont new_font( GetFont() );
-    if (!new_font.Ok()) new_font = *wxSWISS_FONT;
-    GetTextExtent( "H", (int*)NULL, &y, (int*)NULL, (int*)NULL, &new_font );
+    wxFont font( GetFont() );
+    if (!font.Ok())
+        font = *wxSWISS_FONT;
+    GetTextExtent(_T("H"), (int*)NULL, &y, (int*)NULL, (int*)NULL, &font);
 
     wxString line;
     for (size_t pos = 0; pos < message.Len(); pos++)
@@ -59,13 +60,13 @@ wxSizer *wxDialogBase::CreateTextSizer( const wxString &message )
             if (!line.IsEmpty())
             {
                 wxStaticText *s1 = new wxStaticText( this, -1, line );
-               box->Add( s1 );
+                box->Add( s1 );
                 line = wxT("");
             }
-           else
-           {
-               box->Add( 5, y );
-           }
+            else
+            {
+                box->Add( 5, y );
+            }
         }
         else
         {
@@ -77,7 +78,7 @@ wxSizer *wxDialogBase::CreateTextSizer( const wxString &message )
     if (!line.IsEmpty())
     {
         wxStaticText *s2 = new wxStaticText( this, -1, line );
-       box->Add( s2 );
+        box->Add( s2 );
     }
 
     return box;
@@ -88,9 +89,9 @@ wxSizer *wxDialogBase::CreateButtonSizer( long flags )
     wxBoxSizer *box = new wxBoxSizer( wxHORIZONTAL );
 
 #if defined(__WXMSW__) || defined(__WXMAC__)
-    int margin = 6;
+    static const int margin = 6;
 #else
-    int margin = 10;
+    static const int margin = 10;
 #endif
 
     wxButton *ok = (wxButton *) NULL;
index f0970096304840a22b2196a8988b147224219728..9e96410e18f3ba41d9a2cdc8516e160edaeaddd8 100644 (file)
@@ -922,27 +922,22 @@ void wxWindowBase::SetSizer(wxSizer *sizer)
 
 bool wxWindowBase::Layout()
 {
-    int w, h;
-    GetClientSize(&w, &h);
-
     // If there is a sizer, use it instead of the constraints
     if ( GetSizer() )
     {
+        int w, h;
+        GetClientSize(&w, &h);
+
         GetSizer()->SetDimension( 0, 0, w, h );
-        return TRUE;
     }
-
-    if ( GetConstraints() )
+    else
     {
-        GetConstraints()->width.SetValue(w);
-        GetConstraints()->height.SetValue(h);
+        // Evaluate child constraints
+        ResetConstraints();   // Mark all constraints as unevaluated
+        DoPhase(1);           // Just one phase need if no sizers involved
+        DoPhase(2);
+        SetConstraintSizes(); // Recursively set the real window sizes
     }
-       
-    // Evaluate child constraints
-    ResetConstraints();   // Mark all constraints as unevaluated
-    DoPhase(1);           // Just one phase need if no sizers involved
-    DoPhase(2);
-    SetConstraintSizes(); // Recursively set the real window sizes
 
     return TRUE;
 }
@@ -1028,6 +1023,7 @@ void wxWindowBase::ResetConstraints()
         constr->centreX.SetDone(FALSE);
         constr->centreY.SetDone(FALSE);
     }
+
     wxWindowList::Node *node = GetChildren().GetFirst();
     while (node)
     {
@@ -1064,21 +1060,12 @@ void wxWindowBase::SetConstraintSizes(bool recurse)
     }
     else if ( constr )
     {
-        wxChar *windowClass = GetClassInfo()->GetClassName();
-
-        wxString winName;
-        if ( GetName() == wxT("") )
+        wxString winName = GetName();
+        if ( !winName )
             winName = wxT("unnamed");
-        else
-            winName = GetName();
-        wxLogDebug( wxT("Constraint(s) not satisfied for window of type %s, name %s:\n"),
-                (const wxChar *)windowClass,
-                (const wxChar *)winName);
-        if ( !constr->left.GetDone()) wxLogDebug( wxT("  unsatisfied 'left' constraint.\n")  );
-        if ( !constr->right.GetDone()) wxLogDebug( wxT("  unsatisfied 'right' constraint.\n")  );
-        if ( !constr->width.GetDone()) wxLogDebug( wxT("  unsatisfied 'width' constraint.\n")  );
-        if ( !constr->height.GetDone())  wxLogDebug( wxT("  unsatisfied 'height' constraint.\n")  );
-        wxLogDebug( wxT("Please check constraints: try adding AsIs() constraints.\n") );
+        wxLogDebug(wxT("Constraint not satisfied for %s, name '%s'."),
+                   GetClassInfo()->GetClassName(),
+                   winName.c_str());
     }
 
     if ( recurse )
index 51bbdd6f43e6edcf45e6f107c659db12837ad94d..e158cec0305df043c1f113f9383fe0563fb8a332 100644 (file)
@@ -38,8 +38,9 @@
     #include "wx/menu.h"
     #include "wx/frame.h"
     #include "wx/filedlg.h"
-    #include "wx/msgdlg.h"
     #include "wx/textctrl.h"
+    #include "wx/sizer.h"
+    #include "wx/statbmp.h"
 #endif // WX_PRECOMP
 
 #include "wx/file.h"
   #include  "wx/msw/private.h"
 #endif // Windows
 
+// may be defined to 0 for old behavior (using wxMessageBox) - shouldn't be
+// changed normally (that's why it's here and not in setup.h)
+#define wxUSE_LOG_DIALOG 1
+
+#if wxUSE_LOG_DIALOG
+    #include "wx/datetime.h"
+    #include "wx/listctrl.h"
+    #include "wx/image.h"
+#else // !wxUSE_TEXTFILE
+    #include "wx/msgdlg.h"
+#endif // wxUSE_LOG_DIALOG/!wxUSE_LOG_DIALOG
+
+// ----------------------------------------------------------------------------
+// private classes
+// ----------------------------------------------------------------------------
+
+#if wxUSE_LOG_DIALOG
+
+class wxLogDialog : public wxDialog
+{
+public:
+    wxLogDialog(wxWindow *parent,
+                const wxArrayString& messages,
+                const wxArrayInt& severity,
+                const wxArrayLong& timess,
+                const wxString& caption,
+                long style);
+    virtual ~wxLogDialog();
+
+    // event handlers
+    void OnOk(wxCommandEvent& event);
+    void OnDetails(wxCommandEvent& event);
+
+private:
+    // the data for the listctrl
+    const wxArrayString& m_messages;
+    const wxArrayInt& m_severity;
+    const wxArrayLong& m_times;
+
+    // the "toggle" button and its state
+    wxButton *m_btnDetails;
+    bool      m_showingDetails;
+
+    // the listctrl (not shown initially)
+    wxListCtrl *m_listctrl;
+
+    DECLARE_EVENT_TABLE()
+};
+
+BEGIN_EVENT_TABLE(wxLogDialog, wxDialog)
+    EVT_BUTTON(wxID_OK,     wxLogDialog::OnOk)
+    EVT_BUTTON(wxID_MORE,   wxLogDialog::OnDetails)
+END_EVENT_TABLE()
+
+#endif // wxUSE_LOG_DIALOG
+
 // ----------------------------------------------------------------------------
 // global variables
 // ----------------------------------------------------------------------------
@@ -117,6 +174,7 @@ void wxLogGui::Clear()
 {
     m_bErrors = m_bWarnings = FALSE;
     m_aMessages.Empty();
+    m_aSeverity.Empty();
     m_aTimes.Empty();
 }
 
@@ -128,6 +186,34 @@ void wxLogGui::Flush()
     // do it right now to block any new calls to Flush() while we're here
     m_bHasMessages = FALSE;
 
+    wxString title = wxTheApp->GetAppName();
+    if ( !!title )
+    {
+        title[0u] = wxToupper(title[0u]);
+        title += _T(' ');
+    }
+
+    long style;
+    if ( m_bErrors ) {
+        title += _("Error");
+        style = wxICON_STOP;
+    }
+    else if ( m_bWarnings ) {
+        title += _("Warning");
+        style = wxICON_EXCLAMATION;
+    }
+    else {
+        title += _("Information");
+        style = wxICON_INFORMATION;
+    }
+
+#if wxUSE_LOG_DIALOG
+    wxLogDialog dlg(wxTheApp->GetTopWindow(),
+                    m_aMessages, m_aSeverity, m_aTimes,
+                    title, style);
+    (void)dlg.ShowModal();
+
+#else // !wxUSE_LOG_DIALOG
     // concatenate all strings (but not too many to not overfill the msg box)
     wxString str;
     size_t nLines = 0,
@@ -146,27 +232,12 @@ void wxLogGui::Flush()
         str << m_aMessages[n - 1] << wxT("\n");
     }
 
-    const wxChar *title;
-    long style;
-
-    if ( m_bErrors ) {
-        title = _("Error");
-        style = wxICON_STOP;
-    }
-    else if ( m_bWarnings ) {
-        title = _("Warning");
-        style = wxICON_EXCLAMATION;
-    }
-    else {
-        title = _("Information");
-        style = wxICON_INFORMATION;
-    }
-
     wxMessageBox(str, title, wxOK | style);
+#endif // wxUSE_LOG_DIALOG/!wxUSE_LOG_DIALOG
 
     // no undisplayed messages whatsoever
     Clear();
-    
+
     // do it here again
     m_bHasMessages = FALSE;
 }
@@ -179,80 +250,88 @@ void wxLogGui::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
         case wxLOG_Info:
             if ( GetVerbose() )
         case wxLOG_Message:
+            {
                 if ( !m_bErrors ) {
                     m_aMessages.Add(szString);
+                    m_aSeverity.Add(wxLOG_Message);
                     m_aTimes.Add((long)t);
                     m_bHasMessages = TRUE;
                 }
-                break;
+            }
+            break;
 
         case wxLOG_Status:
 #if wxUSE_STATUSBAR
-                {
-                    // find the top window and set it's status text if it has any
-                    wxFrame *pFrame = gs_pFrame;
-                    if ( pFrame == NULL ) {
-                        wxWindow *pWin = wxTheApp->GetTopWindow();
-                        if ( pWin != NULL && pWin->IsKindOf(CLASSINFO(wxFrame)) ) {
-                            pFrame = (wxFrame *)pWin;
-                        }
+            {
+                // find the top window and set it's status text if it has any
+                wxFrame *pFrame = gs_pFrame;
+                if ( pFrame == NULL ) {
+                    wxWindow *pWin = wxTheApp->GetTopWindow();
+                    if ( pWin != NULL && pWin->IsKindOf(CLASSINFO(wxFrame)) ) {
+                        pFrame = (wxFrame *)pWin;
                     }
-
-                    if ( pFrame && pFrame->GetStatusBar() )
-                        pFrame->SetStatusText(szString);
                 }
+
+                if ( pFrame && pFrame->GetStatusBar() )
+                    pFrame->SetStatusText(szString);
+            }
 #endif // wxUSE_STATUSBAR
-                break;
+            break;
 
         case wxLOG_Trace:
         case wxLOG_Debug:
-                #ifdef __WXDEBUG__
-                {
-                    #ifdef __WXMSW__
-                        // don't prepend debug/trace here: it goes to the
-                        // debug window anyhow, but do put a timestamp
-                        wxString str;
-                        TimeStamp(&str);
-                        str << szString << wxT("\n\r");
-                        OutputDebugString(str);
-                    #else
-                        // send them to stderr
-                        wxFprintf(stderr, wxT("%s: %s\n"),
-                                  level == wxLOG_Trace ? wxT("Trace")
-                                                       : wxT("Debug"),
-                                  szString);
-                        fflush(stderr);
-                    #endif
-                }
-                #endif // __WXDEBUG__
+            #ifdef __WXDEBUG__
+            {
+                #ifdef __WXMSW__
+                    // don't prepend debug/trace here: it goes to the
+                    // debug window anyhow, but do put a timestamp
+                    wxString str;
+                    TimeStamp(&str);
+                    str << szString << wxT("\n\r");
+                    OutputDebugString(str);
+                #else
+                    // send them to stderr
+                    wxFprintf(stderr, wxT("%s: %s\n"),
+                              level == wxLOG_Trace ? wxT("Trace")
+                                                   : wxT("Debug"),
+                              szString);
+                    fflush(stderr);
+                #endif
+            }
+            #endif // __WXDEBUG__
 
-                break;
+            break;
 
         case wxLOG_FatalError:
-                // show this one immediately
-                wxMessageBox(szString, _("Fatal error"), wxICON_HAND);
-                break;
+            // show this one immediately
+            wxMessageBox(szString, _("Fatal error"), wxICON_HAND);
+            break;
 
         case wxLOG_Error:
+            if ( !m_bErrors ) {
+#if !wxUSE_LOG_DIALOG
                 // discard earlier informational messages if this is the 1st
-                // error because they might not make sense any more
-                if ( !m_bErrors ) {
-                    m_aMessages.Empty();
-                    m_aTimes.Empty();
-                    m_bErrors = TRUE;
-                }
-                // fall through
+                // error because they might not make sense any more and showing
+                // them in a message box might be confusing
+                m_aMessages.Empty();
+                m_aSeverity.Empty();
+                m_aTimes.Empty();
+#endif // wxUSE_LOG_DIALOG
+                m_bErrors = TRUE;
+            }
+            // fall through
 
         case wxLOG_Warning:
-                if ( !m_bErrors ) {
-                    // for the warning we don't discard the info messages
-                    m_bWarnings = TRUE;
-                }
-
-                m_aMessages.Add(szString);
-                m_aTimes.Add((long)t);
-                m_bHasMessages = TRUE;
-                break;
+            if ( !m_bErrors ) {
+                // for the warning we don't discard the info messages
+                m_bWarnings = TRUE;
+            }
+
+            m_aMessages.Add(szString);
+            m_aSeverity.Add(level);
+            m_aTimes.Add((long)t);
+            m_bHasMessages = TRUE;
+            break;
     }
 }
 
@@ -467,10 +546,7 @@ void wxLogWindow::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
 {
     // first let the previous logger show it
     if ( m_pOldLog != NULL && m_bPassMessages ) {
-        // FIXME why can't we access protected wxLog method from here (we derive
-        //       from wxLog)? gcc gives "DoLog is protected in this context", what
-        //       does this mean? Anyhow, the cast is harmless and let's us do what
-        //       we want.
+        // bogus cast just to access protected DoLog
         ((wxLogWindow *)m_pOldLog)->DoLog(level, szString, t);
     }
 
@@ -545,3 +621,168 @@ wxLogWindow::~wxLogWindow()
     delete m_pLogFrame;
 }
 
+// ----------------------------------------------------------------------------
+// wxLogDialog
+// ----------------------------------------------------------------------------
+
+#if wxUSE_LOG_DIALOG
+
+static const size_t MARGIN = 10;
+
+wxLogDialog::wxLogDialog(wxWindow *parent,
+                         const wxArrayString& messages,
+                         const wxArrayInt& severity,
+                         const wxArrayLong& times,
+                         const wxString& caption,
+                         long style)
+           : wxDialog(parent, -1, caption),
+             m_messages(messages), m_severity(severity), m_times(times)
+{
+    m_showingDetails = FALSE; // not initially
+    m_listctrl = (wxListCtrl *)NULL;
+
+    // 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);
+
+    wxButton *btnOk = new wxButton(this, wxID_OK, _T("Ok"));
+    m_btnDetails = new wxButton(this, wxID_MORE, _T("&Details >>"));
+    sizerButtons->Add(btnOk, 0, wxCENTRE|wxBOTTOM, MARGIN/2);
+    sizerButtons->Add(m_btnDetails, 0, wxCENTRE|wxTOP, MARGIN/2 - 1);
+
+    wxIcon icon = wxTheApp->GetStdIcon(style & wxICON_MASK);
+    sizerAll->Add(new wxStaticBitmap(this, -1, icon), 0, wxCENTRE);
+    const wxString& message = messages.Last();
+    sizerAll->Add(CreateTextSizer(message), 0, wxCENTRE|wxLEFT|wxRIGHT, MARGIN);
+    sizerAll->Add(sizerButtons, 0, wxALIGN_RIGHT|wxLEFT, MARGIN);
+
+    sizerTop->Add(sizerAll, 0, wxCENTRE|wxALL, MARGIN);
+
+    SetAutoLayout(TRUE);
+    SetSizer(sizerTop);
+
+    sizerTop->SetSizeHints(this);
+    sizerTop->Fit(this);
+
+    btnOk->SetFocus();
+
+    Centre();
+}
+
+void wxLogDialog::OnOk(wxCommandEvent& WXUNUSED(event))
+{
+    EndModal(wxID_OK);
+}
+
+void wxLogDialog::OnDetails(wxCommandEvent& WXUNUSED(event))
+{
+    wxSizer *sizer = GetSizer();
+
+    if ( m_showingDetails )
+    {
+        m_btnDetails->SetLabel(_T("&Details >>"));
+
+        sizer->Remove(m_listctrl);
+    }
+    else // show details now
+    {
+        m_btnDetails->SetLabel(_T("<< &Details"));
+
+        if ( !m_listctrl )
+        {
+            // create it now
+            m_listctrl = new wxListCtrl(this, -1,
+                                        wxDefaultPosition, wxDefaultSize,
+                                        wxLC_REPORT | wxLC_NO_HEADER);
+            m_listctrl->InsertColumn(0, _("Message"));
+            m_listctrl->InsertColumn(1, _("Time"));
+
+            // prepare the imagelist
+            static const int ICON_SIZE = 16;
+            wxImageList *imageList = new wxImageList(ICON_SIZE, ICON_SIZE);
+
+            // order should be the same as in the switch below!
+            static const int icons[] =
+            {
+                wxICON_ERROR,
+                wxICON_EXCLAMATION,
+                wxICON_INFORMATION
+            };
+
+            for ( size_t icon = 0; icon < WXSIZEOF(icons); icon++ )
+            {
+                wxBitmap bmp = wxTheApp->GetStdIcon(icons[icon]);
+                imageList->Add(wxImage(bmp).
+                                Rescale(ICON_SIZE, ICON_SIZE).
+                                 ConvertToBitmap());
+            }
+
+            m_listctrl->SetImageList(imageList, wxIMAGE_LIST_SMALL);
+
+            // and fill it
+            wxString fmt = wxLog::GetTimestamp();
+            if ( !fmt )
+            {
+                // default format
+                fmt = _T("%X");
+            }
+
+            size_t count = m_messages.GetCount();
+            for ( size_t n = 0; n < count; n++ )
+            {
+                int image;
+                switch ( m_severity[n] )
+                {
+                    case wxLOG_Error:
+                        image = 0;
+                        break;
+
+                    case wxLOG_Warning:
+                        image = 1;
+                        break;
+
+                    default:
+                        image = 2;
+                }
+
+                m_listctrl->InsertItem(n, m_messages[n], image);
+                m_listctrl->SetItem(n, 1,
+                                    wxDateTime((time_t)m_times[n]).Format(fmt));
+            }
+
+            // let the columns size themselves (TODO does this work under GTK?)
+            m_listctrl->SetColumnWidth(0, wxLIST_AUTOSIZE);
+            m_listctrl->SetColumnWidth(1, wxLIST_AUTOSIZE);
+
+            // get the approx height of the listctrl
+            wxFont font = GetFont();
+            if ( !font.Ok() )
+                font = *wxSWISS_FONT;
+
+            int y;
+            GetTextExtent(_T("H"), (int*)NULL, &y, (int*)NULL, (int*)NULL, &font);
+            int height = wxMin(y*(count + 3), 100);
+            m_listctrl->SetSize(-1, height);
+        }
+
+        sizer->Add(m_listctrl, 1, wxEXPAND|(wxALL & ~wxTOP), MARGIN);
+    }
+
+    m_showingDetails = !m_showingDetails;
+
+    // in any case, our size changed - update
+    sizer->Fit(this);
+}
+
+wxLogDialog::~wxLogDialog()
+{
+    if ( m_listctrl )
+    {
+        delete m_listctrl->GetImageList(wxIMAGE_LIST_SMALL);
+    }
+}
+
+#endif // wxUSE_LOG_DIALOG
index deb4be56779fe823c4c94a12e50a70178260f6eb..ec65ed52bf8d17531ae0b1a6b6bbe8f3a0eda098 100644 (file)
@@ -99,7 +99,7 @@ wxGenericMessageDialog::wxGenericMessageDialog( wxWindow *parent,
     if (size.x < size.y*3/2)
     {
         size.x = size.y*3/2;
-       SetSize( size );
+        SetSize( size );
     }
 
     Centre( wxBOTH | wxCENTER_FRAME);
index 7981bf47aa3d2c234a65c37d123f5e386506095c..9c0e7739439136d7282d7349a26ce69097afcae1 100644 (file)
@@ -66,7 +66,8 @@ IMPLEMENT_DYNAMIC_CLASS(wxWizardEvent, wxNotifyEvent)
 // wxWizardPage
 // ----------------------------------------------------------------------------
 
-wxWizardPage::wxWizardPage(wxWizard *parent) : wxPanel(parent)
+wxWizardPage::wxWizardPage(wxWizard *parent, const wxBitmap& bitmap)
+            : wxPanel(parent), m_bitmap(bitmap)
 {
     // initially the page is hidden, it's shown only when it becomes current
     Hide();
@@ -95,6 +96,7 @@ wxWizard::wxWizard(wxWindow *parent,
                    const wxBitmap& bitmap,
                    const wxPoint& pos,
                    const wxSize& size)
+        : m_bitmap(bitmap)
 {
     // constants defining the dialog layout
     // ------------------------------------
@@ -139,13 +141,15 @@ wxWizard::wxWizard(wxWindow *parent,
     m_y = Y_MARGIN;
     if ( bitmap.Ok() )
     {
-        (void)new wxStaticBitmap(this, -1, bitmap, wxPoint(m_x, m_y));
+        m_statbmp = new wxStaticBitmap(this, -1, bitmap, wxPoint(m_x, m_y));
 
         m_x += bitmap.GetWidth() + BITMAP_X_MARGIN;
         m_height = bitmap.GetHeight();
     }
     else
     {
+        m_statbmp = (wxStaticBitmap *)NULL;
+
         m_height = DEFAULT_PAGE_HEIGHT;
     }
 
@@ -193,6 +197,9 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward)
     // button or not (initially the label is "Next")
     bool btnLabelWasNext = TRUE;
 
+    // and this tells us whether we already had the default bitmap before
+    bool bmpWasDefault = TRUE;
+
     if ( m_page )
     {
         // ask the current page first
@@ -214,6 +221,7 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward)
         m_page->Hide();
 
         btnLabelWasNext = m_page->GetNext() != (wxWizardPage *)NULL;
+        bmpWasDefault = !m_page->GetBitmap().Ok();
     }
 
     // set the new one
@@ -237,6 +245,13 @@ bool wxWizard::ShowPage(wxWizardPage *page, bool goingForward)
     m_page->SetSize(m_x, m_y, m_width, m_height);
     m_page->Show();
 
+    // change the bitmap if necessary (and if we have it at all)
+    bool bmpIsDefault = !m_page->GetBitmap().Ok();
+    if ( m_statbmp && (bmpIsDefault != bmpWasDefault) )
+    {
+        m_statbmp->SetBitmap(bmpIsDefault ? m_bitmap : m_page->GetBitmap());
+    }
+
     // and update the buttons state
     m_btnPrev->Enable(m_page->GetPrev() != (wxWizardPage *)NULL);
 
index 8d6d7eada7d8f4af649890a8f42daa139c8503fb..d250452a79185615e687563c33465cfe7038a731 100644 (file)
@@ -96,8 +96,8 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
   int width = size.x;
   int height = size.y;
 
-  long msStyle = WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |
-      CBS_NOINTEGRALHEIGHT;
+  long msStyle = WS_CHILD | WS_TABSTOP | WS_VISIBLE |
+                 CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT;
 
   if (m_windowStyle & wxCB_READONLY)
     msStyle |= CBS_DROPDOWNLIST;
index c21e7df120e3214f608cf6f723e02d867aa5e2ff..ae232c15c761ab64b7770f33c04bd126e8324059 100644 (file)
@@ -26,8 +26,6 @@
     #pragma hdrstop
 #endif
 
-#include <windows.h>
-
 #include "wx/msw/msvcrt.h"
 
 // Foils optimizations in Visual C++ (see also app.cpp). Without it,
index e499d2b96054700e3c8e0313484068430ab8779e..1efa93f7a8aeb45be5e07f3379ee4efbe5e419aa 100644 (file)
   #pragma hdrstop
 #endif
 
-#ifndef WX_PRECOMP
-  #include "wx/defs.h"
-#endif
-
-#if (wxUSE_FILE && wxUSE_TEXTFILE) || defined(__WXMSW__)
+// Doesn't compile in WIN16 mode
+#ifndef __WIN16__
 
 #ifndef WX_PRECOMP
   #include "wx/string.h"
@@ -33,9 +30,6 @@
   #endif
 #endif //WX_PRECOMP
 
-// Doesn't compile in WIN16 mode
-#ifndef __WIN16__
-
 #include "wx/log.h"
 #include "wx/file.h"
 #include "wx/intl.h"
 #ifdef __WXMSW__
     #include "wx/msw/registry.h"
     #include "windows.h"
-#elif defined(__UNIX__)  || defined(__WXPM__)
-    #include "wx/ffile.h"
-    #include "wx/textfile.h"
-    #include "wx/dir.h"
-    #include "wx/utils.h"
-    #include "wx/tokenzr.h"
 #endif // OS
 
 #include "wx/msw/mimetype.h"
@@ -61,7 +49,6 @@
 // in case we're compiling in non-GUI mode
 class WXDLLEXPORT wxIcon;
 
-
 // These classes use Windows registry to retrieve the required information.
 //
 // Keys used (not all of them are documented, so it might actually stop working
@@ -86,9 +73,6 @@ class WXDLLEXPORT wxIcon;
 // location, uses it, so it isn't likely to change
 static const wxChar *MIME_DATABASE_KEY = wxT("MIME\\Database\\Content Type\\");
 
-
-
-
 wxString wxFileTypeImpl::GetCommand(const wxChar *verb) const
 {
     // suppress possible error messages
@@ -447,8 +431,5 @@ size_t wxMimeTypesManagerImpl::EnumAllFileTypes(wxArrayString& mimetypes)
 }
 
 
-#endif
-  // wxUSE_FILE && wxUSE_TEXTFILE
-
 #endif
   // __WIN16__