wrapsizer.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name: wrapsizer.cpp
  3. // Purpose: wxWidgets sample demonstrating wxWrapSizer use
  4. // Author: Arne Steinarson
  5. // Created: 21.01.2008
  6. // Copyright: (c) Arne Steinarson
  7. // Licence: wxWindows licence
  8. /////////////////////////////////////////////////////////////////////////////
  9. #include "wx/wxprec.h"
  10. #ifdef __BORLANDC__
  11. #pragma hdrstop
  12. #endif
  13. #ifndef WX_PRECOMP
  14. #include "wx/wx.h"
  15. #endif
  16. #include "wx/log.h"
  17. #include "wx/wrapsizer.h"
  18. #include "wx/artprov.h"
  19. #ifndef wxHAS_IMAGES_IN_RESOURCES
  20. #include "../sample.xpm"
  21. #endif
  22. // ----------------------------------------------------------------------------
  23. // definitions
  24. // ----------------------------------------------------------------------------
  25. class WrapSizerFrame : public wxFrame
  26. {
  27. public:
  28. WrapSizerFrame();
  29. private:
  30. void OnButton(wxCommandEvent& WXUNUSED(event))
  31. {
  32. Close();
  33. }
  34. void AddToolBarButton(wxToolBar *tb,
  35. const wxString& label,
  36. const wxString& artid)
  37. {
  38. wxBitmap
  39. bm = wxArtProvider::GetBitmap(artid, wxART_TOOLBAR, wxSize(16, 16));
  40. tb->AddTool(wxID_ANY, label, bm);
  41. }
  42. wxToolBar *MakeToolBar()
  43. {
  44. wxToolBar *tb = new wxToolBar(m_panel, wxID_ANY,
  45. wxDefaultPosition, wxDefaultSize,
  46. wxTB_NODIVIDER);
  47. AddToolBarButton(tb, "Help", wxART_HELP_BOOK);
  48. tb->AddSeparator( );
  49. AddToolBarButton(tb, "Open", wxART_FILE_OPEN);
  50. tb->AddSeparator( );
  51. AddToolBarButton(tb, "Up", wxART_GO_DIR_UP);
  52. AddToolBarButton(tb, "Execute", wxART_EXECUTABLE_FILE);
  53. tb->Realize( );
  54. return tb;
  55. }
  56. wxPanel *m_panel;
  57. };
  58. class WrapSizerApp : public wxApp
  59. {
  60. public:
  61. WrapSizerApp() {}
  62. virtual bool OnInit()
  63. {
  64. new WrapSizerFrame;
  65. return true;
  66. }
  67. };
  68. IMPLEMENT_APP(WrapSizerApp);
  69. // ----------------------------------------------------------------------------
  70. // WrapSizerFrame
  71. // ----------------------------------------------------------------------------
  72. WrapSizerFrame::WrapSizerFrame()
  73. : wxFrame(NULL, wxID_ANY, "wxWrapSizer Sample")
  74. {
  75. SetIcon(wxICON(sample));
  76. m_panel = new wxPanel(this);
  77. // Root sizer, vertical
  78. wxSizer * const sizerRoot = new wxBoxSizer(wxVERTICAL);
  79. // Some toolbars in a wrap sizer
  80. wxSizer * const sizerTop = new wxWrapSizer( wxHORIZONTAL );
  81. sizerTop->Add(MakeToolBar());
  82. sizerTop->Add(20, 1);
  83. sizerTop->Add(MakeToolBar());
  84. sizerTop->Add(20, 1);
  85. sizerTop->Add(MakeToolBar());
  86. sizerRoot->Add(sizerTop, wxSizerFlags().Expand().Border());
  87. // A number of checkboxes inside a wrap sizer
  88. wxSizer *sizerMid = new wxStaticBoxSizer(wxVERTICAL, m_panel,
  89. "With check-boxes");
  90. wxSizer * const sizerMidWrap = new wxWrapSizer(wxHORIZONTAL);
  91. for ( int nCheck = 0; nCheck < 6; nCheck++ )
  92. {
  93. wxCheckBox *chk = new wxCheckBox
  94. (
  95. m_panel,
  96. wxID_ANY,
  97. wxString::Format("Option %d", nCheck)
  98. );
  99. sizerMidWrap->Add(chk, wxSizerFlags().Centre().Border());
  100. }
  101. sizerMid->Add(sizerMidWrap, wxSizerFlags(100).Expand());
  102. sizerRoot->Add(sizerMid, wxSizerFlags(100).Expand().Border());
  103. // A shaped item inside a box sizer
  104. wxSizer *sizerBottom = new wxStaticBoxSizer(wxVERTICAL, m_panel,
  105. "With wxSHAPED item");
  106. wxSizer *sizerBottomBox = new wxBoxSizer(wxHORIZONTAL);
  107. sizerBottom->Add(sizerBottomBox, wxSizerFlags(100).Expand());
  108. sizerBottomBox->Add(new wxListBox(m_panel, wxID_ANY,
  109. wxPoint(0, 0), wxSize(70, 70)),
  110. wxSizerFlags().Expand().Shaped());
  111. sizerBottomBox->AddSpacer(10);
  112. sizerBottomBox->Add(new wxCheckBox(m_panel, wxID_ANY,
  113. "A much longer option..."),
  114. wxSizerFlags(100).Border());
  115. sizerRoot->Add(sizerBottom, wxSizerFlags(100).Expand().Border());
  116. // OK Button
  117. sizerRoot->Add(new wxButton(m_panel, wxID_OK),
  118. wxSizerFlags().Centre().DoubleBorder());
  119. Connect(wxID_OK, wxEVT_BUTTON,
  120. wxCommandEventHandler(WrapSizerFrame::OnButton));
  121. // Set sizer for the panel
  122. m_panel->SetSizer(sizerRoot);
  123. Show();
  124. }