27607839f1
Follow our own advice about never creating controls directly on the frame and using an intermediate wxPanel in our own sample. This is better style and makes it look better under Windows. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65239 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
157 lines
4.6 KiB
C++
157 lines
4.6 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wrapsizer.cpp
|
|
// Purpose: wxWidgets sample demonstrating wxWrapSizer use
|
|
// Author: Arne Steinarson
|
|
// Created: 21.01.2008
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Arne Steinarson
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "wx/wxprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/wx.h"
|
|
#endif
|
|
|
|
#include "wx/log.h"
|
|
#include "wx/wrapsizer.h"
|
|
#include "wx/artprov.h"
|
|
|
|
#ifndef __WXMSW__
|
|
#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()
|
|
{
|
|
new WrapSizerFrame;
|
|
return true;
|
|
}
|
|
};
|
|
|
|
IMPLEMENT_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());
|
|
Connect(wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED,
|
|
wxCommandEventHandler(WrapSizerFrame::OnButton));
|
|
|
|
// Set sizer for the panel
|
|
m_panel->SetSizer(sizerRoot);
|
|
|
|
Show();
|
|
}
|
|
|