1 /////////////////////////////////////////////////////////////////////////////
2 // Program: wxWidgets Widgets Sample
4 // Purpose: Part of the widgets sample showing wxStaticBitmap
5 // Author: Marcin Wojdyr
8 // Copyright: (c) 2008 Marcin Wojdyr
9 // License: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // for compilers that support precompilation, includes "wx/wx.h".
21 #include "wx/wxprec.h"
27 // for all others, include the necessary headers
31 #include "wx/button.h"
32 #include "wx/radiobox.h"
33 #include "wx/statbmp.h"
34 #include "wx/statbox.h"
35 #include "wx/textctrl.h"
38 #include "wx/generic/statbmpg.h"
40 #include "wx/filepicker.h"
43 #include "icons/statbmp.xpm"
46 class StatBmpWidgetsPage
: public WidgetsPage
49 StatBmpWidgetsPage(WidgetsBookCtrl
*book
, wxImageList
*imaglist
)
50 : WidgetsPage(book
, imaglist
, statbmp_xpm
) {}
52 virtual void CreateContent();
53 virtual wxControl
*GetWidget() const { return m_statbmp
; }
54 virtual void RecreateWidget();
57 void OnFileChange(wxFileDirPickerEvent
&WXUNUSED(ev
)) { RecreateWidget(); }
58 void OnRadioChange(wxCommandEvent
&WXUNUSED(ev
)) { RecreateWidget(); }
60 void OnMouseEvent(wxMouseEvent
& WXUNUSED(event
))
62 wxLogMessage(wxT("wxStaticBitmap clicked."));
65 wxStaticBitmapBase
*m_statbmp
;
66 wxFilePickerCtrl
*m_filepicker
;
68 wxStaticBoxSizer
*m_sbsizer
;
70 DECLARE_WIDGETS_PAGE(StatBmpWidgetsPage
)
73 IMPLEMENT_WIDGETS_PAGE(StatBmpWidgetsPage
, wxT("StaticBitmap"),
76 void StatBmpWidgetsPage::CreateContent()
79 static const wxString choices
[] = { "native", "generic" };
80 m_radio
= new wxRadioBox(this, wxID_ANY
, "implementation",
81 wxDefaultPosition
, wxDefaultSize
,
82 WXSIZEOF(choices
), choices
);
84 m_filepicker
= new wxFilePickerCtrl(this, wxID_ANY
, "../image/toucan.png");
86 m_sbsizer
= new wxStaticBoxSizer(wxVERTICAL
, this, "wxStaticBitmap inside");
88 wxSizer
*leftsizer
= new wxBoxSizer(wxVERTICAL
);
89 leftsizer
->Add(m_radio
, wxSizerFlags().Expand().Border());
90 leftsizer
->Add(m_filepicker
, wxSizerFlags().Expand().Border());
91 wxSizer
*sizer
= new wxBoxSizer(wxHORIZONTAL
);
92 sizer
->Add(leftsizer
, wxSizerFlags().Border());
93 sizer
->Add(m_sbsizer
, wxSizerFlags().Center());
96 wxInitAllImageHandlers();
98 Connect(wxEVT_COMMAND_FILEPICKER_CHANGED
,
99 wxFileDirPickerEventHandler(StatBmpWidgetsPage::OnFileChange
));
100 Connect(wxEVT_COMMAND_RADIOBOX_SELECTED
,
101 wxCommandEventHandler(StatBmpWidgetsPage::OnRadioChange
));
107 void StatBmpWidgetsPage::RecreateWidget()
110 wxString filepath
= m_filepicker
->GetPath();
111 wxImage
image(filepath
);
114 wxLogMessage("Reading image from file '%s' failed.", filepath
.c_str());
118 if (m_radio
->GetSelection() == 0)
119 m_statbmp
= new wxStaticBitmap(this, wxID_ANY
, wxBitmap(image
));
121 m_statbmp
= new wxGenericStaticBitmap(this, wxID_ANY
, wxBitmap(image
));
122 m_sbsizer
->Add(m_statbmp
, wxSizerFlags(1).Expand());
123 GetSizer()->Layout();
124 m_statbmp
->Connect(wxEVT_LEFT_DOWN
,
125 wxMouseEventHandler(StatBmpWidgetsPage::OnMouseEvent
),
127 // When switching from generic to native control on wxMSW under Wine,
128 // the explicit Refresh() is necessary
129 m_statbmp
->Refresh();