Getting (maximal) size of wxToolbook
Volker Bartheld
dr_versaeg at freenet.de
Tue Sep 25 02:49:26 PDT 2007
Hi!
I want to put a wxToolbook into a nonresizeable frame. The toolbook
consists of, say, seven pages (=panels) that have a smaller height than
the toolbook buttons that are arranged with the wxNB_LEFT style. The frame
should have such an initial size that it can display all toolbook-buttons
without truncating them or the need for a resize plus all panels at their
full minimal size.
The latter I can archieve by iterating all panels and determining the largest
coordinates returned by individual wxPanel->GetMinSize() calls.
Unfortunately, I failed in querying the wxToolbook for its size that *included*
the extent of the toolbook buttons. In case of the sample code below [1], on
my wxMSW2.8.4 setup,
s0=pMyTestPanel->GetSize(), // 248,138
s1=pMyTestPanel->GetMinSize(), // 248,138
s2=pMyTestPanel->GetMaxSize(), // -1,-1
s3=m_pToolbook->GetSize(), // 292,138
s4=m_pToolbook->GetMinSize(), // -1,-1
s5=m_pToolbook->GetMaxSize(); // -1,-1
was returned which clearly didn't include the buttons (height approx
7x50=350).
How can I solve this issue?
Many thanks in advance,
Volker
====================================================================================
[1]
<toolbooksample.cc>
#include <wx/wx.h>
#include <wx/toolbook.h>
wxSizer *MyTestPanel1( wxWindow *parent, bool call_fit=true, bool set_sizer=true)
{
wxStaticBox *item1 = new wxStaticBox(parent, wxID_ANY, _("Some kewl controlzz...") );
wxStaticBoxSizer *item0 = new wxStaticBoxSizer( item1, wxVERTICAL );
wxStaticText *item2 = new wxStaticText( parent, wxID_ANY, _("... like this looooooooooooooooooooong text..."), wxDefaultPosition, wxDefaultSize, 0 );
item0->Add( item2, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
wxTextCtrl *item3 = new wxTextCtrl( parent, wxID_ANY, _("A multiline text control with some entries..."), wxDefaultPosition, wxSize(80,40), wxTE_MULTILINE );
item0->Add( item3, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
wxBoxSizer *item4 = new wxBoxSizer( wxHORIZONTAL );
wxButton *item5 = new wxButton( parent, wxID_ANY, _("Two"), wxDefaultPosition, wxDefaultSize, 0 );
item4->Add( item5, 0, wxALIGN_CENTER|wxALL, 5 );
wxButton *item6 = new wxButton( parent, wxID_ANY, _("Buttons"), wxDefaultPosition, wxDefaultSize, 0 );
item4->Add( item6, 0, wxALIGN_CENTER|wxALL, 5 );
item0->Add( item4, 0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
if (set_sizer)
{
parent->SetSizer( item0 );
if (call_fit) item0->SetSizeHints( parent );
}
return item0;
}
static const char *sample_xpm[] = {
"32 32 6 1",
" c black",
". c navy",
"X c red",
"o c yellow",
"O c gray100",
"+ c None",
/* pixels */
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++ ++++++++++",
"++++++++ ............ ++++++++++",
"++++++++ ............ ++++++++++",
"++++++++ .OO......... ++++++++++",
"++++++++ .OO......... ++++++++++",
"++++++++ .OO......... ++++++++++",
"++++++++ .OO...... ",
"++++++++ .OO...... oooooooooooo ",
" .OO...... oooooooooooo ",
" XXXXXXX .OO...... oOOooooooooo ",
" XXXXXXX .OO...... oOOooooooooo ",
" XOOXXXX ......... oOOooooooooo ",
" XOOXXXX ......... oOOooooooooo ",
" XOOXXXX oOOooooooooo ",
" XOOXXXXXXXXX ++++ oOOooooooooo ",
" XOOXXXXXXXXX ++++ oOOooooooooo ",
" XOOXXXXXXXXX ++++ oOOooooooooo ",
" XOOXXXXXXXXX ++++ oooooooooooo ",
" XOOXXXXXXXXX ++++ oooooooooooo ",
" XXXXXXXXXXXX ++++ ",
" XXXXXXXXXXXX ++++++++++++++++++",
" ++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++"
};
enum { Minimal_Quit=wxID_EXIT, Minimal_Action=wxID_HIGHEST+1 };
// ----------------------------------------------------------------------------
// main frame
// ----------------------------------------------------------------------------
class MyFrame : public wxFrame
{
DECLARE_DYNAMIC_CLASS(MyFrame)
public:
MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title), m_pToolbook(NULL)
{
SetIcon(wxICON(sample));
wxMenu *fileMenu=new wxMenu;
fileMenu->Append(Minimal_Quit, _T("E&xit\tAlt-X"), _T("Exit this program"));
wxMenuBar *menuBar=new wxMenuBar();
menuBar->Append(fileMenu, _T("&File"));
SetMenuBar(menuBar);
CreateStatusBar(1);
SetStatusText(_T("Welcome to wxWidgets!"));
wxSizer *pMainSizer=new wxBoxSizer(wxVERTICAL);
SetSizer(pMainSizer);
m_pToolbook=new wxToolbook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNB_LEFT);
wxImageList* pToolimages=new wxImageList(32, 32, false);
pToolimages->Add(wxICON(sample));
wxPanel* pMyTestPanel=new wxPanel(m_pToolbook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER);
MyTestPanel1(pMyTestPanel);
m_pToolbook->AssignImageList(pToolimages);
for(unsigned int u=0; u<7; ++u) m_pToolbook->AddPage(pMyTestPanel, wxString::Format(wxT("Tab %u"), u), false, 0);
m_pToolbook->ChangeSelection(0);
m_pToolbook->Fit();
pMainSizer->Add(m_pToolbook, wxGROW);
pMainSizer->SetSizeHints(this);
Layout();
pMainSizer->Fit(this);
wxSize
s0=pMyTestPanel->GetSize(), // 248,138
s1=pMyTestPanel->GetMinSize(), // 248,138
s2=pMyTestPanel->GetMaxSize(), // -1,-1
s3=m_pToolbook->GetSize(), // 292,138
s4=m_pToolbook->GetMinSize(), // -1,-1
s5=m_pToolbook->GetMaxSize(); // -1,-1
}
void OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); }
private:
MyFrame() : wxFrame(), m_pToolbook(NULL) {}
wxToolbook *m_pToolbook;
DECLARE_EVENT_TABLE()
}; // class MyFrame : public wxFrame
IMPLEMENT_DYNAMIC_CLASS(MyFrame, wxFrame)
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(Minimal_Quit, MyFrame::OnQuit)
END_EVENT_TABLE()
// ----------------------------------------------------------------------------
// the application
// ----------------------------------------------------------------------------
class MyApp : public wxApp
{
public:
virtual bool OnInit()
{
if(!wxApp::OnInit()) return false;
MyFrame *frame=new MyFrame(_T("Minimal wxWidgets App"));
frame->Show(true);
return true;
}
}; // class MyApp : public wxApp
IMPLEMENT_APP(MyApp)
</toolbooksample.cc>
--
mailto: V B A R T H E L D at G M X dot D E
More information about the wx-users
mailing list