152 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wrapsizer.cpp
 | |
| // Purpose:     wxWidgets sample demonstrating wxWrapSizer use
 | |
| // Author:      Arne Steinarson
 | |
| // Created:     21.01.2008
 | |
| // Copyright:   (c) Arne Steinarson
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #include "wx/wxprec.h"
 | |
| 
 | |
| #ifndef WX_PRECOMP
 | |
|     #include "wx/wx.h"
 | |
| #endif
 | |
| 
 | |
| #include "wx/log.h"
 | |
| #include "wx/wrapsizer.h"
 | |
| #include "wx/artprov.h"
 | |
| 
 | |
| #ifndef wxHAS_IMAGES_IN_RESOURCES
 | |
|     #include "../sample.xpm"
 | |
| #endif
 | |
| 
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // definitions
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class WrapSizerFrame : public wxFrame
 | |
| {
 | |
| public:
 | |
|     WrapSizerFrame();
 | |
| 
 | |
| private:
 | |
|     void OnButton(wxCommandEvent& WXUNUSED(event))
 | |
|     {
 | |
|         Close();
 | |
|     }
 | |
| 
 | |
|     void AddToolBarButton(wxToolBar *tb,
 | |
|                           const wxString& label,
 | |
|                           const wxString& artid)
 | |
|     {
 | |
|         wxBitmap
 | |
|             bm = wxArtProvider::GetBitmap(artid, wxART_TOOLBAR, wxSize(16, 16));
 | |
|         tb->AddTool(wxID_ANY, label, bm);
 | |
|     }
 | |
| 
 | |
|     wxToolBar *MakeToolBar()
 | |
|     {
 | |
|         wxToolBar *tb = new wxToolBar(m_panel, wxID_ANY,
 | |
|                                       wxDefaultPosition, wxDefaultSize,
 | |
|                                       wxTB_NODIVIDER);
 | |
|         AddToolBarButton(tb, "Help", wxART_HELP_BOOK);
 | |
|         tb->AddSeparator( );
 | |
|         AddToolBarButton(tb, "Open", wxART_FILE_OPEN);
 | |
|         tb->AddSeparator( );
 | |
|         AddToolBarButton(tb, "Up", wxART_GO_DIR_UP);
 | |
|         AddToolBarButton(tb, "Execute", wxART_EXECUTABLE_FILE);
 | |
| 
 | |
|         tb->Realize( );
 | |
|         return tb;
 | |
|     }
 | |
| 
 | |
|     wxPanel *m_panel;
 | |
| };
 | |
| 
 | |
| class WrapSizerApp : public wxApp
 | |
| {
 | |
| public:
 | |
|     WrapSizerApp() {}
 | |
| 
 | |
|     virtual bool OnInit() wxOVERRIDE
 | |
|     {
 | |
|         new WrapSizerFrame;
 | |
|         return true;
 | |
|     }
 | |
| };
 | |
| 
 | |
| wxIMPLEMENT_APP(WrapSizerApp);
 | |
| 
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // WrapSizerFrame
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| WrapSizerFrame::WrapSizerFrame()
 | |
|         : wxFrame(NULL, wxID_ANY, "wxWrapSizer Sample")
 | |
| {
 | |
|     SetIcon(wxICON(sample));
 | |
| 
 | |
|     m_panel = new wxPanel(this);
 | |
| 
 | |
|     // Root sizer, vertical
 | |
|     wxSizer * const sizerRoot = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
|     // Some toolbars in a wrap sizer
 | |
|     wxSizer * const sizerTop = new wxWrapSizer( wxHORIZONTAL );
 | |
|     sizerTop->Add(MakeToolBar());
 | |
|     sizerTop->Add(20, 1);
 | |
|     sizerTop->Add(MakeToolBar());
 | |
|     sizerTop->Add(20, 1);
 | |
|     sizerTop->Add(MakeToolBar());
 | |
|     sizerRoot->Add(sizerTop, wxSizerFlags().Expand().Border());
 | |
| 
 | |
|     // A number of checkboxes inside a wrap sizer
 | |
|     wxSizer *sizerMid = new wxStaticBoxSizer(wxVERTICAL, m_panel,
 | |
|                                                 "With check-boxes");
 | |
|     wxSizer * const sizerMidWrap = new wxWrapSizer(wxHORIZONTAL);
 | |
|     for ( int nCheck = 0; nCheck < 6; nCheck++ )
 | |
|     {
 | |
|         wxCheckBox *chk = new wxCheckBox
 | |
|                                 (
 | |
|                                 m_panel,
 | |
|                                 wxID_ANY,
 | |
|                                 wxString::Format("Option %d", nCheck)
 | |
|                                 );
 | |
| 
 | |
|         sizerMidWrap->Add(chk, wxSizerFlags().Centre().Border());
 | |
|     }
 | |
| 
 | |
|     sizerMid->Add(sizerMidWrap, wxSizerFlags(100).Expand());
 | |
|     sizerRoot->Add(sizerMid, wxSizerFlags(100).Expand().Border());
 | |
| 
 | |
| 
 | |
|     // A shaped item inside a box sizer
 | |
|     wxSizer *sizerBottom = new wxStaticBoxSizer(wxVERTICAL, m_panel,
 | |
|                                                 "With wxSHAPED item");
 | |
|     wxSizer *sizerBottomBox = new wxBoxSizer(wxHORIZONTAL);
 | |
|     sizerBottom->Add(sizerBottomBox, wxSizerFlags(100).Expand());
 | |
| 
 | |
|     sizerBottomBox->Add(new wxListBox(m_panel, wxID_ANY,
 | |
|                                         wxPoint(0, 0), wxSize(70, 70)),
 | |
|                         wxSizerFlags().Expand().Shaped());
 | |
|     sizerBottomBox->AddSpacer(10);
 | |
|     sizerBottomBox->Add(new wxCheckBox(m_panel, wxID_ANY,
 | |
|                                         "A much longer option..."),
 | |
|                         wxSizerFlags(100).Border());
 | |
|     sizerRoot->Add(sizerBottom, wxSizerFlags(100).Expand().Border());
 | |
| 
 | |
|     // OK Button
 | |
|     sizerRoot->Add(new wxButton(m_panel, wxID_OK),
 | |
|                     wxSizerFlags().Centre().DoubleBorder());
 | |
|     Bind(wxEVT_BUTTON, &WrapSizerFrame::OnButton, this, wxID_OK);
 | |
| 
 | |
|     // Set sizer for the panel
 | |
|     m_panel->SetSizer(sizerRoot);
 | |
| 
 | |
|     Show();
 | |
| }
 | |
| 
 |