d456f87321
Ensure the frame is big enough to show its contents, otherwise some controls were truncated and not visible at all initially, at least under MSW.
154 lines
4.5 KiB
C++
154 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);
|
|
|
|
SetClientSize(m_panel->GetBestSize());
|
|
|
|
Show();
|
|
}
|
|
|