///////////////////////////////////////////////////////////////////////////// // Program: wxWidgets Widgets Sample // Name: statbmp.cpp // Purpose: Part of the widgets sample showing wxStaticBitmap // Author: Marcin Wojdyr // Created: 2008-06-19 // Copyright: (c) 2008 Marcin Wojdyr // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ // declarations // ============================================================================ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- // for compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif // for all others, include the necessary headers #ifndef WX_PRECOMP #include "wx/log.h" #include "wx/button.h" #include "wx/image.h" #include "wx/radiobox.h" #include "wx/statbmp.h" #include "wx/statbox.h" #include "wx/textctrl.h" #endif #include "wx/filename.h" #include "wx/generic/statbmpg.h" #include "wx/sizer.h" #include "wx/filepicker.h" #include "widgets.h" #include "icons/statbmp.xpm" class StatBmpWidgetsPage : public WidgetsPage { public: StatBmpWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist) : WidgetsPage(book, imaglist, statbmp_xpm) {} virtual void CreateContent(); virtual wxControl *GetWidget() const { return m_statbmp; } virtual void RecreateWidget(); private: void OnFileChange(wxFileDirPickerEvent &WXUNUSED(ev)) { RecreateWidget(); } void OnRadioChange(wxCommandEvent &WXUNUSED(ev)) { RecreateWidget(); } void OnMouseEvent(wxMouseEvent& WXUNUSED(event)) { wxLogMessage(wxT("wxStaticBitmap clicked.")); } wxStaticBitmapBase *m_statbmp; wxFilePickerCtrl *m_filepicker; wxRadioBox *m_radio; wxStaticBoxSizer *m_sbsizer; DECLARE_WIDGETS_PAGE(StatBmpWidgetsPage) }; IMPLEMENT_WIDGETS_PAGE(StatBmpWidgetsPage, wxT("StaticBitmap"), ALL_CTRLS); void StatBmpWidgetsPage::CreateContent() { static const wxString choices[] = { "native", "generic" }; m_radio = new wxRadioBox(this, wxID_ANY, "implementation", wxDefaultPosition, wxDefaultSize, WXSIZEOF(choices), choices); wxString testImage; #if wxUSE_LIBPNG wxFileName fn("../image/toucan.png"); if ( fn.FileExists() ) testImage = fn.GetFullPath(); #endif // wxUSE_LIBPNG m_filepicker = new wxFilePickerCtrl(this, wxID_ANY, testImage); m_sbsizer = new wxStaticBoxSizer(wxVERTICAL, this, "wxStaticBitmap inside"); wxSizer *leftsizer = new wxBoxSizer(wxVERTICAL); leftsizer->Add(m_radio, wxSizerFlags().Expand().Border()); leftsizer->Add(m_filepicker, wxSizerFlags().Expand().Border()); wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(leftsizer, wxSizerFlags().Border()); sizer->Add(m_sbsizer, wxSizerFlags().Center()); SetSizer(sizer); wxInitAllImageHandlers(); Connect(wxEVT_FILEPICKER_CHANGED, wxFileDirPickerEventHandler(StatBmpWidgetsPage::OnFileChange)); Connect(wxEVT_RADIOBOX, wxCommandEventHandler(StatBmpWidgetsPage::OnRadioChange)); m_statbmp = NULL; RecreateWidget(); } void StatBmpWidgetsPage::RecreateWidget() { wxDELETE(m_statbmp); wxString filepath = m_filepicker->GetPath(); if ( filepath.empty() ) return; wxImage image(filepath); if (! image.IsOk() ) { wxLogMessage("Reading image from file '%s' failed.", filepath.c_str()); return; } if (m_radio->GetSelection() == 0) m_statbmp = new wxStaticBitmap(this, wxID_ANY, wxBitmap(image)); else m_statbmp = new wxGenericStaticBitmap(this, wxID_ANY, wxBitmap(image)); m_sbsizer->Add(m_statbmp, wxSizerFlags(1).Expand()); GetSizer()->Layout(); m_statbmp->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatBmpWidgetsPage::OnMouseEvent), NULL, this); // When switching from generic to native control on wxMSW under Wine, // the explicit Refresh() is necessary m_statbmp->Refresh(); }