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