Added wxNewSizer and wxBorderNewSizer with sample
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3319 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: sizer.h
|
// Name: sizer.h
|
||||||
// Purpose: provide wxSizer class for layounting
|
// Purpose: provide wxNewSizer class for layounting
|
||||||
// Author: Robert Roebling and Robin Dunn
|
// Author: Robert Roebling and Robin Dunn
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created:
|
// Created:
|
||||||
@@ -26,62 +26,63 @@
|
|||||||
// classes
|
// classes
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
class wxSizerItem;
|
class wxNewSizerItem;
|
||||||
class wxSizer;
|
class wxNewSizer;
|
||||||
class wxBoxSizer;
|
class wxBoxNewSizer;
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// wxSizerItem
|
// wxNewSizerItem
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
class WXDLLEXPORT wxSizerItem: wxObject
|
class WXDLLEXPORT wxNewSizerItem: public wxObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// spacer
|
// spacer
|
||||||
wxSizerItem( int width, int height, int option )
|
wxNewSizerItem( int width, int height, int option );
|
||||||
|
|
||||||
// window
|
// window
|
||||||
wxSizerItem( wxWindow *window, int option );
|
wxNewSizerItem( wxWindow *window, int option );
|
||||||
|
|
||||||
// subsizer
|
// subsizer
|
||||||
wxSizerItem( wxSizer *sizer, int option );
|
wxNewSizerItem( wxNewSizer *sizer, int option );
|
||||||
|
|
||||||
virtual wxSize GetMinSize();
|
virtual wxSize GetSize();
|
||||||
|
virtual wxSize CalcMin();
|
||||||
|
virtual void SetDimension( wxPoint pos, wxSize size );
|
||||||
|
|
||||||
bool IsWindow();
|
bool IsWindow();
|
||||||
bool IsSizer();
|
bool IsNewSizer();
|
||||||
bool IsSpacer();
|
bool IsSpacer();
|
||||||
|
|
||||||
wxWindow *GetWindow() const
|
wxWindow *GetWindow() const
|
||||||
{ return m_window; }
|
{ return m_window; }
|
||||||
wxSizer *GetSizer() const
|
wxNewSizer *GetNewSizer() const
|
||||||
{ return m_sizer; }
|
{ return m_sizer; }
|
||||||
int GetOption() const
|
int GetOption() const
|
||||||
{ return m_option; }
|
{ return m_option; }
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
wxWindow *m_window;
|
wxWindow *m_window;
|
||||||
wxSizer *m_sizer;
|
wxNewSizer *m_sizer;
|
||||||
wxSize m_minSize;
|
wxSize m_minSize;
|
||||||
int m_option;
|
int m_option;
|
||||||
}
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// wxSizer
|
// wxNewSizer
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
class WXDLLEXPORT wxSizer: wxObject
|
class WXDLLEXPORT wxNewSizer: public wxObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxSizer()
|
wxNewSizer();
|
||||||
~wxSizer()
|
~wxNewSizer();
|
||||||
|
|
||||||
virtual void Add( wxWindow *window, int option = 0 );
|
virtual void Add( wxWindow *window, int option = 0 );
|
||||||
virtual void Add( wxSizer *sizer, int option = 0 );
|
virtual void Add( wxNewSizer *sizer, int option = 0 );
|
||||||
virtual void Add( int width, int height, int option = 0 );
|
virtual void Add( int width, int height, int option = 0 );
|
||||||
|
|
||||||
void SetDimension( int x, int y, int width, int height )
|
void SetDimension( int x, int y, int width, int height );
|
||||||
{ DoSetDimension( x, y, width, height ); }
|
|
||||||
|
|
||||||
wxSize GetSize()
|
wxSize GetSize()
|
||||||
{ return m_size; }
|
{ return m_size; }
|
||||||
@@ -89,21 +90,52 @@ public:
|
|||||||
{ return m_position; }
|
{ return m_position; }
|
||||||
wxSize GetMinSize()
|
wxSize GetMinSize()
|
||||||
{ return CalcMin(); }
|
{ return CalcMin(); }
|
||||||
|
|
||||||
virtual void RecalcSizes() = 0;
|
virtual void RecalcSizes() = 0;
|
||||||
virtual wxSize CalcMin() = 0;
|
virtual wxSize CalcMin() = 0;
|
||||||
|
|
||||||
|
virtual void Layout();
|
||||||
|
|
||||||
void Fit( wxWindow *window );
|
void Fit( wxWindow *window );
|
||||||
void SetSizeHints( wxWindow *window );
|
void SetSizeHints( wxWindow *window );
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
wxSize m_size;
|
wxSize m_size;
|
||||||
wxPoint m_position;
|
wxPoint m_position;
|
||||||
wxList m_children;
|
wxList m_children;
|
||||||
|
|
||||||
wxSize GetMinWindowSize( wxWindow *window );
|
wxSize GetMinWindowSize( wxWindow *window );
|
||||||
virtual void DoSetDimension( int x, int y, int width, int height );
|
};
|
||||||
}
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// wxBorderNewSizer
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define wxWEST wxLEFT
|
||||||
|
#define wxEAST wxRIGHT
|
||||||
|
#define wxNORTH wxUP
|
||||||
|
#define wxSOUTH wxDOWN
|
||||||
|
#define wxALL_DIRECTIONS (wxNORTH | wxSOUTH | wxEAST | wxWEST)
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxBorderNewSizer: public wxNewSizer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxBorderNewSizer( int sides = wxALL_DIRECTIONS );
|
||||||
|
|
||||||
|
virtual void Add( wxWindow *window, int option = 10 );
|
||||||
|
virtual void Add( wxNewSizer *sizer, int option = 10 );
|
||||||
|
virtual void Add( int width, int height, int option = 10 );
|
||||||
|
|
||||||
|
void RecalcSizes();
|
||||||
|
wxSize CalcMin();
|
||||||
|
|
||||||
|
int GetSides()
|
||||||
|
{ return m_sides; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int m_sides;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// __WXSIZER_H__
|
// __WXSIZER_H__
|
||||||
|
@@ -25,6 +25,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include "wx/sizer.h"
|
||||||
|
|
||||||
#include "layout.h"
|
#include "layout.h"
|
||||||
|
|
||||||
// Declare two frames
|
// Declare two frames
|
||||||
@@ -52,6 +54,7 @@ bool MyApp::OnInit(void)
|
|||||||
|
|
||||||
file_menu->Append(LAYOUT_LOAD_FILE, "&Load file", "Load a text file");
|
file_menu->Append(LAYOUT_LOAD_FILE, "&Load file", "Load a text file");
|
||||||
file_menu->Append(LAYOUT_TEST, "&Test sizers", "Test sizer code");
|
file_menu->Append(LAYOUT_TEST, "&Test sizers", "Test sizer code");
|
||||||
|
file_menu->Append(LAYOUT_TEST_NEW, "&Test new sizers", "Test new sizer code");
|
||||||
|
|
||||||
file_menu->AppendSeparator();
|
file_menu->AppendSeparator();
|
||||||
file_menu->Append(LAYOUT_QUIT, "E&xit", "Quit program");
|
file_menu->Append(LAYOUT_QUIT, "E&xit", "Quit program");
|
||||||
@@ -152,6 +155,10 @@ bool MyApp::OnInit(void)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
// MyFrame
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
// Define my frame constructor
|
// Define my frame constructor
|
||||||
MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h):
|
MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h):
|
||||||
wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
|
wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
|
||||||
@@ -165,6 +172,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_MENU(LAYOUT_LOAD_FILE, MyFrame::LoadFile)
|
EVT_MENU(LAYOUT_LOAD_FILE, MyFrame::LoadFile)
|
||||||
EVT_MENU(LAYOUT_QUIT, MyFrame::Quit)
|
EVT_MENU(LAYOUT_QUIT, MyFrame::Quit)
|
||||||
EVT_MENU(LAYOUT_TEST, MyFrame::TestSizers)
|
EVT_MENU(LAYOUT_TEST, MyFrame::TestSizers)
|
||||||
|
EVT_MENU(LAYOUT_TEST_NEW, MyFrame::TestNewSizers)
|
||||||
EVT_MENU(LAYOUT_ABOUT, MyFrame::About)
|
EVT_MENU(LAYOUT_ABOUT, MyFrame::About)
|
||||||
EVT_SIZE(MyFrame::OnSize)
|
EVT_SIZE(MyFrame::OnSize)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
@@ -188,7 +196,13 @@ void MyFrame::Quit(wxCommandEvent& WXUNUSED(event) )
|
|||||||
|
|
||||||
void MyFrame::TestSizers(wxCommandEvent& WXUNUSED(event) )
|
void MyFrame::TestSizers(wxCommandEvent& WXUNUSED(event) )
|
||||||
{
|
{
|
||||||
SizerFrame *newFrame = new SizerFrame((MyFrame *) NULL, (char *) "Sizer Test Frame", 50, 50, 500, 500);
|
SizerFrame *newFrame = new SizerFrame((MyFrame *) NULL, "Sizer Test Frame", 50, 50, 500, 500);
|
||||||
|
newFrame->Show(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyFrame::TestNewSizers(wxCommandEvent& WXUNUSED(event) )
|
||||||
|
{
|
||||||
|
NewSizerFrame *newFrame = new NewSizerFrame((MyFrame *) NULL, "Sizer Test Frame", 50, 50 );
|
||||||
newFrame->Show(TRUE);
|
newFrame->Show(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,6 +238,10 @@ void MyFrame::Draw(wxDC& dc, bool WXUNUSED(draw_bitmaps) )
|
|||||||
dc.DrawArc(50, 300, 100, 250, 100, 300 );
|
dc.DrawArc(50, 300, 100, 250, 100, 300 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
// MyWindow
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(MyWindow, wxWindow)
|
BEGIN_EVENT_TABLE(MyWindow, wxWindow)
|
||||||
EVT_PAINT(MyWindow::OnPaint)
|
EVT_PAINT(MyWindow::OnPaint)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
@@ -245,6 +263,9 @@ void MyWindow::OnPaint(wxPaintEvent& WXUNUSED(event) )
|
|||||||
frame->Draw(dc,TRUE);
|
frame->Draw(dc,TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
// SizerFrame
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
SizerFrame::SizerFrame(wxFrame *frame, char *title, int x, int y, int w, int h):
|
SizerFrame::SizerFrame(wxFrame *frame, char *title, int x, int y, int w, int h):
|
||||||
wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
|
wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h))
|
||||||
@@ -339,3 +360,43 @@ void SizerFrame::OnSize(wxSizeEvent& event)
|
|||||||
panel->Layout();
|
panel->Layout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
// NewSizerFrame
|
||||||
|
//-----------------------------------------------------------------
|
||||||
|
|
||||||
|
NewSizerFrame::NewSizerFrame(wxFrame *frame, char *title, int x, int y ):
|
||||||
|
wxFrame(frame, -1, title, wxPoint(x, y) )
|
||||||
|
{
|
||||||
|
// no extra options means border all around
|
||||||
|
topsizer = new wxBorderNewSizer();
|
||||||
|
|
||||||
|
// make border 20 pixels wide
|
||||||
|
topsizer->Add( new wxButton( this, -1, "Hello" ), 20 );
|
||||||
|
|
||||||
|
// set frame to minimum size
|
||||||
|
topsizer->Fit( this );
|
||||||
|
|
||||||
|
// don't allow frame to get smaller than what the sizers tell ye
|
||||||
|
topsizer->SetSizeHints( this );
|
||||||
|
|
||||||
|
// layout widgets
|
||||||
|
topsizer->Layout();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This can later be removed if we integrate wxNewSizers
|
||||||
|
// into wxWindows
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(NewSizerFrame, wxFrame)
|
||||||
|
EVT_SIZE(NewSizerFrame::OnSize)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
void NewSizerFrame::OnSize(wxSizeEvent& event)
|
||||||
|
{
|
||||||
|
wxFrame::OnSize(event);
|
||||||
|
|
||||||
|
wxSize client_size( GetClientSize() );
|
||||||
|
|
||||||
|
topsizer->SetDimension( 0, 0, client_size.x, client_size.y );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -34,6 +34,7 @@ class MyFrame: public wxFrame
|
|||||||
void LoadFile(wxCommandEvent& event);
|
void LoadFile(wxCommandEvent& event);
|
||||||
void Quit(wxCommandEvent& event);
|
void Quit(wxCommandEvent& event);
|
||||||
void TestSizers(wxCommandEvent& event);
|
void TestSizers(wxCommandEvent& event);
|
||||||
|
void TestNewSizers(wxCommandEvent& event);
|
||||||
void About(wxCommandEvent& event);
|
void About(wxCommandEvent& event);
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
@@ -71,7 +72,19 @@ class SizerFrame: public wxFrame
|
|||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NewSizerFrame: public wxFrame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxPanel *panel;
|
||||||
|
wxNewSizer *topsizer;
|
||||||
|
NewSizerFrame(wxFrame *frame, char *title, int x, int y );
|
||||||
|
void OnSize(wxSizeEvent& event);
|
||||||
|
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
#define LAYOUT_QUIT 100
|
#define LAYOUT_QUIT 100
|
||||||
#define LAYOUT_TEST 101
|
#define LAYOUT_TEST 101
|
||||||
#define LAYOUT_ABOUT 102
|
#define LAYOUT_ABOUT 102
|
||||||
#define LAYOUT_LOAD_FILE 103
|
#define LAYOUT_LOAD_FILE 103
|
||||||
|
#define LAYOUT_TEST_NEW 104
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: sizer.cpp
|
// Name: sizer.cpp
|
||||||
// Purpose: provide wxSizer class for layounting
|
// Purpose: provide wxNewSizer class for layounting
|
||||||
// Author: Robert Roebling and Robin Dunn
|
// Author: Robert Roebling and Robin Dunn
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created:
|
// Created:
|
||||||
@@ -13,105 +13,135 @@
|
|||||||
#define __WXSIZERS_H__
|
#define __WXSIZERS_H__
|
||||||
|
|
||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface "sizers.h"
|
#pragma implementation "sizer.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/sizer.h"
|
#include "wx/sizer.h"
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// wxSizerItem
|
// wxNewSizerItem
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
wxSizerItem::wxSizerItem( int width, int height, int option )
|
wxNewSizerItem::wxNewSizerItem( int width, int height, int option )
|
||||||
{
|
{
|
||||||
m_window = (wxWindow *) NULL;
|
m_window = (wxWindow *) NULL;
|
||||||
m_sizer = (wxSizer *) NULL;
|
m_sizer = (wxNewSizer *) NULL;
|
||||||
m_minSize.x = width;
|
m_minSize.x = width;
|
||||||
m_minSize.h = height;
|
m_minSize.y = height;
|
||||||
m_option = option;
|
m_option = option;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSizerItem::wxSizerItem( wxWindow *window, int option )
|
wxNewSizerItem::wxNewSizerItem( wxWindow *window, int option )
|
||||||
{
|
{
|
||||||
m_window = window;
|
m_window = window;
|
||||||
m_sizer = (wxSizer *) NULL;
|
m_sizer = (wxNewSizer *) NULL;
|
||||||
m_minSize = window->GetSize();
|
m_minSize = window->GetSize();
|
||||||
m_option = option;
|
m_option = option;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSizerItem::wxSizerItem( wxSizer *sizer, int option )
|
wxNewSizerItem::wxNewSizerItem( wxNewSizer *sizer, int option )
|
||||||
{
|
{
|
||||||
m_window = (wxWindow *) NULL;
|
m_window = (wxWindow *) NULL;
|
||||||
m_sizer = sizer;
|
m_sizer = sizer;
|
||||||
m_minSize.x = -1;
|
m_minSize = sizer->GetSize();
|
||||||
m_minSize.h = -1;
|
|
||||||
m_option = option;
|
m_option = option;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxSizerItem::GetMinSize()
|
wxSize wxNewSizerItem::GetSize()
|
||||||
{
|
{
|
||||||
if (IsSizer())
|
if (IsNewSizer())
|
||||||
return m_sizer->GetMinSize();
|
return m_sizer->GetSize();
|
||||||
else
|
|
||||||
return m_minSize;
|
if (IsWindow())
|
||||||
|
return m_window->GetSize();
|
||||||
|
|
||||||
|
return m_minSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxSizerItem::IsWindow()
|
wxSize wxNewSizerItem::CalcMin()
|
||||||
|
{
|
||||||
|
if (IsNewSizer())
|
||||||
|
return m_sizer->CalcMin();
|
||||||
|
|
||||||
|
if (IsWindow())
|
||||||
|
return m_window->GetSize();
|
||||||
|
|
||||||
|
return m_minSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxNewSizerItem::SetDimension( wxPoint pos, wxSize size )
|
||||||
|
{
|
||||||
|
if (IsNewSizer())
|
||||||
|
m_sizer->SetDimension( pos.x, pos.y, size.x, size.y );
|
||||||
|
|
||||||
|
if (IsWindow())
|
||||||
|
m_window->SetSize( pos.x, pos.y, size.x, size.y );
|
||||||
|
|
||||||
|
m_minSize = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxNewSizerItem::IsWindow()
|
||||||
{
|
{
|
||||||
return (m_window != NULL);
|
return (m_window != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxSizerItem::IsSizer()
|
bool wxNewSizerItem::IsNewSizer()
|
||||||
{
|
{
|
||||||
return (m_sizer != NULL);
|
return (m_sizer != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxSizerItem::IsSpacer()
|
bool wxNewSizerItem::IsSpacer()
|
||||||
{
|
{
|
||||||
return (m_window == NULL) && (m_sizer == NULL);
|
return (m_window == NULL) && (m_sizer == NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// wxSizer
|
// wxNewSizer
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
wxSizer::wxSizer()
|
wxNewSizer::wxNewSizer()
|
||||||
{
|
{
|
||||||
m_children.DeleteContents( TRUE );
|
m_children.DeleteContents( TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSizer::~wxSizer()
|
wxNewSizer::~wxNewSizer()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSizer::Add( wxWindow *window, int option )
|
void wxNewSizer::Add( wxWindow *window, int option )
|
||||||
{
|
{
|
||||||
m_children.Append( new wxSizerItem( window, option ) );
|
m_children.Append( new wxNewSizerItem( window, option ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSizer::Add( wxSizer *sizer, int option )
|
void wxNewSizer::Add( wxNewSizer *sizer, int option )
|
||||||
{
|
{
|
||||||
m_children.Append( new wxSizerItem( sizer, option ) );
|
m_children.Append( new wxNewSizerItem( sizer, option ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSizer::Add( int width, int height, int option )
|
void wxNewSizer::Add( int width, int height, int option )
|
||||||
{
|
{
|
||||||
m_children.Append( new wxSizerItem( width, height, option ) );
|
m_children.Append( new wxNewSizerItem( width, height, option ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSizer::Fit( wxWindow *window );
|
void wxNewSizer::Fit( wxWindow *window )
|
||||||
{
|
{
|
||||||
window->SetSize( GetMinWindowSize( window ) );
|
window->SetSize( GetMinWindowSize( window ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSizer::SetSizeHints( wxWindow *window );
|
void wxNewSizer::Layout()
|
||||||
|
{
|
||||||
|
m_size = CalcMin();
|
||||||
|
RecalcSizes();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxNewSizer::SetSizeHints( wxWindow *window )
|
||||||
{
|
{
|
||||||
wxSize size( GetMinWindowSize( window ) );
|
wxSize size( GetMinWindowSize( window ) );
|
||||||
window->SetSizeHints( size.x, size.y );
|
window->SetSizeHints( size.x, size.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxSizer::GetMinWindowSize( wxWindow *window )
|
wxSize wxNewSizer::GetMinWindowSize( wxWindow *window )
|
||||||
{
|
{
|
||||||
wxSize min( GetMinSize() );
|
wxSize min( GetMinSize() );
|
||||||
wxSize size( window->GetSize() );
|
wxSize size( window->GetSize() );
|
||||||
@@ -119,7 +149,7 @@ wxSize wxSizer::GetMinWindowSize( wxWindow *window )
|
|||||||
return wxSize( min.x+size.x-client_size.x, min.y+size.y-client_size.y );
|
return wxSize( min.x+size.x-client_size.x, min.y+size.y-client_size.y );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSizer::DoSetDimension( int x, int y, int width, int height )
|
void wxNewSizer::SetDimension( int x, int y, int width, int height )
|
||||||
{
|
{
|
||||||
m_position.x = x;
|
m_position.x = x;
|
||||||
m_position.y = y;
|
m_position.y = y;
|
||||||
@@ -128,5 +158,98 @@ void wxSizer::DoSetDimension( int x, int y, int width, int height )
|
|||||||
RecalcSizes();
|
RecalcSizes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// wxBorderNewSizer
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxBorderNewSizer::wxBorderNewSizer( int sides )
|
||||||
|
{
|
||||||
|
m_sides = sides;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxBorderNewSizer::Add( wxWindow *window, int option )
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_children.GetCount() == 0, _T("border sizer can only hold one child") );
|
||||||
|
|
||||||
|
wxNewSizer::Add( window, option );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxBorderNewSizer::Add( wxNewSizer *sizer, int option )
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_children.GetCount() == 0, _T("border sizer can only hold one child") );
|
||||||
|
|
||||||
|
wxNewSizer::Add( sizer, option );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxBorderNewSizer::Add( int width, int height, int option )
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_children.GetCount() == 0, _T("border sizer can only hold one child") );
|
||||||
|
|
||||||
|
wxNewSizer::Add( width, height, option );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxBorderNewSizer::RecalcSizes()
|
||||||
|
{
|
||||||
|
wxNode *node = m_children.GetFirst();
|
||||||
|
|
||||||
|
if (!node)
|
||||||
|
{
|
||||||
|
SetDimension( m_position.x, m_position.y, 2, 2 );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxNewSizerItem *item = (wxNewSizerItem*) node->Data();
|
||||||
|
|
||||||
|
wxSize size( m_size );
|
||||||
|
wxPoint pt( m_position );
|
||||||
|
int borderSize = item->GetOption();
|
||||||
|
|
||||||
|
if (m_sides & wxWEST)
|
||||||
|
{
|
||||||
|
size.x -= borderSize;
|
||||||
|
pt.x += borderSize;
|
||||||
|
}
|
||||||
|
if (m_sides & wxEAST)
|
||||||
|
{
|
||||||
|
size.x -= borderSize;
|
||||||
|
}
|
||||||
|
if (m_sides & wxNORTH)
|
||||||
|
{
|
||||||
|
size.y -= borderSize;
|
||||||
|
pt.y += borderSize;
|
||||||
|
}
|
||||||
|
if (m_sides & wxSOUTH)
|
||||||
|
{
|
||||||
|
size.y -= borderSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
item->SetDimension( pt, size );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSize wxBorderNewSizer::CalcMin()
|
||||||
|
{
|
||||||
|
wxNode *node = m_children.GetFirst();
|
||||||
|
|
||||||
|
if (!node)
|
||||||
|
return wxSize(2,2);
|
||||||
|
|
||||||
|
wxNewSizerItem *item = (wxNewSizerItem*) node->Data();
|
||||||
|
|
||||||
|
wxSize size( item->CalcMin() );
|
||||||
|
|
||||||
|
int borderSize = item->GetOption();
|
||||||
|
|
||||||
|
if (m_sides & wxWEST)
|
||||||
|
size.x += borderSize;
|
||||||
|
if (m_sides & wxEAST)
|
||||||
|
size.x += borderSize;
|
||||||
|
if (m_sides & wxNORTH)
|
||||||
|
size.y += borderSize;
|
||||||
|
if (m_sides & wxSOUTH)
|
||||||
|
size.y += borderSize;
|
||||||
|
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// __SIZERS_H__
|
// __SIZERS_H__
|
||||||
|
@@ -85,6 +85,7 @@ libwx_gtk_la_SOURCES = \
|
|||||||
sckipc.cpp \
|
sckipc.cpp \
|
||||||
sckstrm.cpp \
|
sckstrm.cpp \
|
||||||
serbase.cpp \
|
serbase.cpp \
|
||||||
|
sizer.cpp \
|
||||||
socket.cpp \
|
socket.cpp \
|
||||||
strconv.cpp \
|
strconv.cpp \
|
||||||
stream.cpp \
|
stream.cpp \
|
||||||
|
@@ -85,6 +85,7 @@ libwx_gtk_la_SOURCES = \
|
|||||||
sckipc.cpp \
|
sckipc.cpp \
|
||||||
sckstrm.cpp \
|
sckstrm.cpp \
|
||||||
serbase.cpp \
|
serbase.cpp \
|
||||||
|
sizer.cpp \
|
||||||
socket.cpp \
|
socket.cpp \
|
||||||
strconv.cpp \
|
strconv.cpp \
|
||||||
stream.cpp \
|
stream.cpp \
|
||||||
|
Reference in New Issue
Block a user