statbmp.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. // Copyright: (c) 2008 Marcin Wojdyr
  8. // Licence: wxWindows licence
  9. /////////////////////////////////////////////////////////////////////////////
  10. // ============================================================================
  11. // declarations
  12. // ============================================================================
  13. // ----------------------------------------------------------------------------
  14. // headers
  15. // ----------------------------------------------------------------------------
  16. // for compilers that support precompilation, includes "wx/wx.h".
  17. #include "wx/wxprec.h"
  18. #ifdef __BORLANDC__
  19. #pragma hdrstop
  20. #endif
  21. // for all others, include the necessary headers
  22. #ifndef WX_PRECOMP
  23. #include "wx/log.h"
  24. #include "wx/button.h"
  25. #include "wx/image.h"
  26. #include "wx/radiobox.h"
  27. #include "wx/statbmp.h"
  28. #include "wx/statbox.h"
  29. #include "wx/textctrl.h"
  30. #endif
  31. #include "wx/filename.h"
  32. #include "wx/generic/statbmpg.h"
  33. #include "wx/sizer.h"
  34. #include "wx/filepicker.h"
  35. #include "widgets.h"
  36. #include "icons/statbmp.xpm"
  37. class StatBmpWidgetsPage : public WidgetsPage
  38. {
  39. public:
  40. StatBmpWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
  41. : WidgetsPage(book, imaglist, statbmp_xpm) {}
  42. virtual void CreateContent();
  43. virtual wxControl *GetWidget() const { return m_statbmp; }
  44. virtual void RecreateWidget();
  45. private:
  46. void OnFileChange(wxFileDirPickerEvent &WXUNUSED(ev)) { RecreateWidget(); }
  47. void OnRadioChange(wxCommandEvent &WXUNUSED(ev)) { RecreateWidget(); }
  48. void OnMouseEvent(wxMouseEvent& WXUNUSED(event))
  49. {
  50. wxLogMessage(wxT("wxStaticBitmap clicked."));
  51. }
  52. wxStaticBitmapBase *m_statbmp;
  53. wxFilePickerCtrl *m_filepicker;
  54. wxRadioBox *m_radio;
  55. wxStaticBoxSizer *m_sbsizer;
  56. DECLARE_WIDGETS_PAGE(StatBmpWidgetsPage)
  57. };
  58. IMPLEMENT_WIDGETS_PAGE(StatBmpWidgetsPage, wxT("StaticBitmap"),
  59. ALL_CTRLS);
  60. void StatBmpWidgetsPage::CreateContent()
  61. {
  62. static const wxString choices[] = { "native", "generic" };
  63. m_radio = new wxRadioBox(this, wxID_ANY, "implementation",
  64. wxDefaultPosition, wxDefaultSize,
  65. WXSIZEOF(choices), choices);
  66. wxString testImage;
  67. #if wxUSE_LIBPNG
  68. wxFileName fn("../image/toucan.png");
  69. if ( fn.FileExists() )
  70. testImage = fn.GetFullPath();
  71. #endif // wxUSE_LIBPNG
  72. m_filepicker = new wxFilePickerCtrl(this, wxID_ANY, testImage);
  73. m_sbsizer = new wxStaticBoxSizer(wxVERTICAL, this, "wxStaticBitmap inside");
  74. wxSizer *leftsizer = new wxBoxSizer(wxVERTICAL);
  75. leftsizer->Add(m_radio, wxSizerFlags().Expand().Border());
  76. leftsizer->Add(m_filepicker, wxSizerFlags().Expand().Border());
  77. wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
  78. sizer->Add(leftsizer, wxSizerFlags().Border());
  79. sizer->Add(m_sbsizer, wxSizerFlags().Center());
  80. SetSizer(sizer);
  81. wxInitAllImageHandlers();
  82. Connect(wxEVT_FILEPICKER_CHANGED,
  83. wxFileDirPickerEventHandler(StatBmpWidgetsPage::OnFileChange));
  84. Connect(wxEVT_RADIOBOX,
  85. wxCommandEventHandler(StatBmpWidgetsPage::OnRadioChange));
  86. m_statbmp = NULL;
  87. RecreateWidget();
  88. }
  89. void StatBmpWidgetsPage::RecreateWidget()
  90. {
  91. wxDELETE(m_statbmp);
  92. wxString filepath = m_filepicker->GetPath();
  93. if ( filepath.empty() )
  94. return;
  95. wxImage image(filepath);
  96. if (! image.IsOk() )
  97. {
  98. wxLogMessage("Reading image from file '%s' failed.", filepath.c_str());
  99. return;
  100. }
  101. if (m_radio->GetSelection() == 0)
  102. m_statbmp = new wxStaticBitmap(this, wxID_ANY, wxBitmap(image));
  103. else
  104. m_statbmp = new wxGenericStaticBitmap(this, wxID_ANY, wxBitmap(image));
  105. m_sbsizer->Add(m_statbmp, wxSizerFlags(1).Expand());
  106. GetSizer()->Layout();
  107. m_statbmp->Connect(wxEVT_LEFT_DOWN,
  108. wxMouseEventHandler(StatBmpWidgetsPage::OnMouseEvent),
  109. NULL, this);
  110. // When switching from generic to native control on wxMSW under Wine,
  111. // the explicit Refresh() is necessary
  112. m_statbmp->Refresh();
  113. }