added wxGenericStaticBitmap (#9608)
[wxWidgets.git] / samples / widgets / statbmp.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Program: wxWidgets Widgets Sample
3 // Name: statbmp.cpp
4 // Purpose: Part of the widgets sample showing wxStaticBitmap
5 // Author: Marcin Wojdyr
6 // Created: 2008-06-19
7 // Id: $Id$
8 // Copyright: (c) 2008 Marcin Wojdyr
9 // License: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 // ============================================================================
13 // declarations
14 // ============================================================================
15
16 // ----------------------------------------------------------------------------
17 // headers
18 // ----------------------------------------------------------------------------
19
20 // for compilers that support precompilation, includes "wx/wx.h".
21 #include "wx/wxprec.h"
22
23 #ifdef __BORLANDC__
24 #pragma hdrstop
25 #endif
26
27 // for all others, include the necessary headers
28 #ifndef WX_PRECOMP
29 #include "wx/log.h"
30
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"
36 #endif
37
38 #include "wx/generic/statbmpg.h"
39 #include "wx/sizer.h"
40 #include "wx/filepicker.h"
41
42 #include "widgets.h"
43 #include "icons/statbmp.xpm"
44
45
46 class StatBmpWidgetsPage : public WidgetsPage
47 {
48 public:
49 StatBmpWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
50 : WidgetsPage(book, imaglist, statbmp_xpm) {}
51
52 virtual void CreateContent();
53 virtual wxControl *GetWidget() const { return m_statbmp; }
54 virtual void RecreateWidget();
55
56 private:
57 void OnFileChange(wxFileDirPickerEvent &WXUNUSED(ev)) { RecreateWidget(); }
58 void OnRadioChange(wxCommandEvent &WXUNUSED(ev)) { RecreateWidget(); }
59
60 void OnMouseEvent(wxMouseEvent& WXUNUSED(event))
61 {
62 wxLogMessage(wxT("wxStaticBitmap clicked."));
63 }
64
65 wxStaticBitmapBase *m_statbmp;
66 wxFilePickerCtrl *m_filepicker;
67 wxRadioBox *m_radio;
68 wxStaticBoxSizer *m_sbsizer;
69
70 DECLARE_WIDGETS_PAGE(StatBmpWidgetsPage)
71 };
72
73 IMPLEMENT_WIDGETS_PAGE(StatBmpWidgetsPage, wxT("StaticBitmap"),
74 ALL_CTRLS);
75
76 void StatBmpWidgetsPage::CreateContent()
77 {
78
79 static const wxString choices[] = { "native", "generic" };
80 m_radio = new wxRadioBox(this, wxID_ANY, "implementation",
81 wxDefaultPosition, wxDefaultSize,
82 WXSIZEOF(choices), choices);
83
84 m_filepicker = new wxFilePickerCtrl(this, wxID_ANY, "../image/toucan.png");
85
86 m_sbsizer = new wxStaticBoxSizer(wxVERTICAL, this, "wxStaticBitmap inside");
87
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());
94 SetSizer(sizer);
95
96 wxInitAllImageHandlers();
97
98 Connect(wxEVT_COMMAND_FILEPICKER_CHANGED,
99 wxFileDirPickerEventHandler(StatBmpWidgetsPage::OnFileChange));
100 Connect(wxEVT_COMMAND_RADIOBOX_SELECTED,
101 wxCommandEventHandler(StatBmpWidgetsPage::OnRadioChange));
102
103 m_statbmp = NULL;
104 RecreateWidget();
105 }
106
107 void StatBmpWidgetsPage::RecreateWidget()
108 {
109 delete m_statbmp;
110 wxString filepath = m_filepicker->GetPath();
111 wxImage image(filepath);
112 if (! image.Ok() )
113 {
114 wxLogMessage("Reading image from file '%s' failed.", filepath.c_str());
115 m_statbmp = NULL;
116 return;
117 }
118 if (m_radio->GetSelection() == 0)
119 m_statbmp = new wxStaticBitmap(this, wxID_ANY, wxBitmap(image));
120 else
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),
126 NULL, this);
127 // When switching from generic to native control on wxMSW under Wine,
128 // the explicit Refresh() is necessary
129 m_statbmp->Refresh();
130 }
131