diff --git a/include/wx/generic/wizard.h b/include/wx/generic/wizard.h index bf305f6b04..7c26f62b85 100644 --- a/include/wx/generic/wizard.h +++ b/include/wx/generic/wizard.h @@ -13,7 +13,10 @@ // 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 "" or "Finish" button + wxStaticBitmap *m_statbmp; // the control for the bitmap DECLARE_DYNAMIC_CLASS(wxWizard) DECLARE_EVENT_TABLE() diff --git a/include/wx/log.h b/include/wx/log.h index cc42cdb542..507e646bfa 100644 --- a/include/wx/log.h +++ b/include/wx/log.h @@ -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? }; diff --git a/include/wx/wizard.h b/include/wx/wizard.h index 1d30123a5e..58eb283c51 100644 --- a/include/wx/wizard.h +++ b/include/wx/wizard.h @@ -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) }; diff --git a/src/common/db.cpp b/src/common/db.cpp index 6f0219a901..4617ff18d7 100644 --- a/src/common/db.cpp +++ b/src/common/db.cpp @@ -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; diff --git a/src/common/dlgcmn.cpp b/src/common/dlgcmn.cpp index 73d1bcd7dc..82fe581edb 100644 --- a/src/common/dlgcmn.cpp +++ b/src/common/dlgcmn.cpp @@ -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; diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index f097009630..9e96410e18 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -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() ) { - GetSizer()->SetDimension( 0, 0, w, h ); - return TRUE; - } + int w, h; + GetClientSize(&w, &h); - if ( GetConstraints() ) - { - GetConstraints()->width.SetValue(w); - GetConstraints()->height.SetValue(h); + GetSizer()->SetDimension( 0, 0, w, h ); + } + else + { + // 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 ) diff --git a/src/generic/logg.cpp b/src/generic/logg.cpp index 51bbdd6f43..e158cec030 100644 --- a/src/generic/logg.cpp +++ b/src/generic/logg.cpp @@ -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" @@ -50,6 +51,62 @@ #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; - } + 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; + 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 diff --git a/src/generic/msgdlgg.cpp b/src/generic/msgdlgg.cpp index deb4be5677..ec65ed52bf 100644 --- a/src/generic/msgdlgg.cpp +++ b/src/generic/msgdlgg.cpp @@ -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); diff --git a/src/generic/wizard.cpp b/src/generic/wizard.cpp index 7981bf47aa..9c0e773943 100644 --- a/src/generic/wizard.cpp +++ b/src/generic/wizard.cpp @@ -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); diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index 8d6d7eada7..d250452a79 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -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; diff --git a/src/msw/dummy.cpp b/src/msw/dummy.cpp index c21e7df120..ae232c15c7 100644 --- a/src/msw/dummy.cpp +++ b/src/msw/dummy.cpp @@ -26,8 +26,6 @@ #pragma hdrstop #endif -#include - #include "wx/msw/msvcrt.h" // Foils optimizations in Visual C++ (see also app.cpp). Without it, diff --git a/src/msw/mimetype.cpp b/src/msw/mimetype.cpp index e499d2b960..1efa93f7a8 100644 --- a/src/msw/mimetype.cpp +++ b/src/msw/mimetype.cpp @@ -20,11 +20,8 @@ #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" @@ -45,12 +39,6 @@ #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__