Completed wxBox,

Changed a few defines in defs.h, most importantly,
    wxCENTRE is now 1


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3324 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1999-08-09 11:27:37 +00:00
parent 447a039fa3
commit d597fcb781
4 changed files with 261 additions and 259 deletions

View File

@@ -443,7 +443,8 @@ enum
wxMOTIF_X, // OSF Motif 1.x.x wxMOTIF_X, // OSF Motif 1.x.x
wxCOSE_X, // OSF Common Desktop Environment wxCOSE_X, // OSF Common Desktop Environment
wxNEXTSTEP, // NeXTStep wxNEXTSTEP, // NeXTStep
wxMACINTOSH, // Apple System 7 wxMACINTOSH, // Apple System 7 and 8
wxBEOS, // BeOS
wxGTK, // GTK on X wxGTK, // GTK on X
wxGTK_WIN32, // GTK on Win32 wxGTK_WIN32, // GTK on Win32
wxGTK_OS2, // GTK on OS/2 wxGTK_OS2, // GTK on OS/2
@@ -578,6 +579,67 @@ enum
#define wxINT32_SWAP_ON_BE(val) (val) #define wxINT32_SWAP_ON_BE(val) (val)
#endif #endif
// ----------------------------------------------------------------------------
// Geometric flags
// ----------------------------------------------------------------------------
enum wxGeometryCentre
{
wxCENTRE = 0x0001,
wxCENTER = wxCENTRE
};
// centering into frame rather than screen (obsolete)
#define wxCENTER_FRAME 0x0000
// centre on screen rather than parent
#define wxCENTRE_ON_SCREEN 0x0002
#define wxCENTER_ON_SCREEN wxCENTRE_ON_SCREEN
enum wxOrientation
{
wxHORIZONTAL = 0x0004,
wxVERTICAL = 0x0008,
wxBOTH = (wxVERTICAL | wxHORIZONTAL)
};
enum wxDirection
{
wxLEFT = 0x0010,
wxRIGHT = 0x0020,
wxUP = 0x0040,
wxDOWN = 0x0080,
wxTOP = wxUP,
wxBOTTOM = wxDOWN,
wxNORTH = wxUP,
wxSOUTH = wxDOWN,
wxWEST = wxLEFT,
wxEAST = wxRIGHT,
wxALL = (wxUP | wxDOWN | wxRIGHT | wxLEFT)
};
enum wxAlignment
{
wxALIGN_NOT = 0x0000,
wxALIGN_CENTER = 0x0100,
wxALIGN_CENTRE = wxALIGN_CENTER,
wxALIGN_LEFT = wxALIGN_NOT,
wxALIGN_TOP = wxALIGN_NOT,
wxALIGN_RIGHT = 0x0200,
wxALIGN_BOTTOM = 0x0400
};
enum wxStretch
{
wxSTRETCH_NOT = 0x0000,
wxSHRINK = 0x1000,
wxGROW = 0x2000,
wxEXPAND = wxGROW
};
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Window style flags // Window style flags
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -715,13 +777,7 @@ enum
* Apply to all panel items * Apply to all panel items
*/ */
#define wxCOLOURED 0x0800 #define wxCOLOURED 0x0800
// Alignment for panel item labels: replaces characters with zeros
// when creating label, so spaces can be included in string for alignment.
#define wxFIXED_LENGTH 0x0400 #define wxFIXED_LENGTH 0x0400
#define wxALIGN_LEFT 0x0000
#define wxALIGN_CENTER 0x0100
#define wxALIGN_CENTRE 0x0100
#define wxALIGN_RIGHT 0x0200
/* /*
* Styles for wxListBox * Styles for wxListBox
@@ -920,33 +976,32 @@ enum
* values do not correspond to the return values of the dialogs (for * values do not correspond to the return values of the dialogs (for
* those values, look at the wxID_XXX defines). * those values, look at the wxID_XXX defines).
*/ */
#define wxOK 0x00000001
#define wxYES_NO 0x00000002 // wxCENTRE already defined as 0x00000001
#define wxCANCEL 0x00000004 #define wxOK 0x00000004
#define wxYES 0x00000008 #define wxYES_NO 0x00000008
#define wxNO 0x00000010 #define wxCANCEL 0x00000010
#define wxNO_DEFAULT 0x00000020 #define wxYES 0x00000020
#define wxNO 0x00000040
#define wxNO_DEFAULT 0x00000080
#define wxYES_DEFAULT 0x00000000 // has no effect #define wxYES_DEFAULT 0x00000000 // has no effect
#define wxICON_EXCLAMATION 0x00000040 #define wxICON_EXCLAMATION 0x00000100
#define wxICON_HAND 0x00000080 #define wxICON_HAND 0x00000200
#define wxICON_WARNING wxICON_EXCLAMATION #define wxICON_WARNING wxICON_EXCLAMATION
#define wxICON_ERROR wxICON_HAND #define wxICON_ERROR wxICON_HAND
#define wxICON_QUESTION 0x00000100 #define wxICON_QUESTION 0x00000400
#define wxICON_INFORMATION 0x00000200 #define wxICON_INFORMATION 0x00000800
#define wxICON_STOP wxICON_HAND #define wxICON_STOP wxICON_HAND
#define wxICON_ASTERISK wxICON_INFORMATION #define wxICON_ASTERISK wxICON_INFORMATION
#define wxICON_MASK (0x00000040|0x00000080|0x00000100|0x00000200) #define wxICON_MASK (0x00000100|0x00000200|0x00000400|0x00000800)
#define wxCENTRE 0x00000400 #define wxFORWARD 0x00001000
#define wxCENTER wxCENTRE #define wxBACKWARD 0x00002000
#define wxRESET 0x00004000
#define wxFORWARD 0x00000800 #define wxHELP 0x00008000
#define wxBACKWARD 0x00001000 #define wxMORE 0x00010000
#define wxRESET 0x00002000 #define wxSETUP 0x00020000
#define wxHELP 0x00004000
#define wxMORE 0x00008000
#define wxSETUP 0x00010000
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// standard IDs // standard IDs
@@ -1008,33 +1063,6 @@ enum
#define wxID_HIGHEST 5999 #define wxID_HIGHEST 5999
// ----------------------------------------------------------------------------
// Orientations and directions
// ----------------------------------------------------------------------------
enum wxOrientation
{
wxHORIZONTAL = 0x0001,
wxVERTICAL = 0x0002,
wxBOTH = (wxVERTICAL | wxHORIZONTAL)
};
enum wxDirection
{
wxLEFT = 0x0010,
wxRIGHT = 0x0020,
wxUP = 0x0040,
wxDOWN = 0x0080
};
// wxCENTRE = 0x0400 (defined above)
// centering into frame rather than screen (obsolete)
#define wxCENTER_FRAME 0x0000
// centre on screen rather than parent
#define wxCENTRE_ON_SCREEN 0x0004
#define wxCENTER_ON_SCREEN wxCENTRE_ON_SCREEN
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Possible SetSize flags // Possible SetSize flags
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -39,13 +39,13 @@ class WXDLLEXPORT wxNewSizerItem: public wxObject
{ {
public: public:
// spacer // spacer
wxNewSizerItem( int width, int height, int option ); wxNewSizerItem( int width, int height, int option, int flag, int border );
// window // window
wxNewSizerItem( wxWindow *window, int option ); wxNewSizerItem( wxWindow *window, int option, int flag, int border );
// subsizer // subsizer
wxNewSizerItem( wxNewSizer *sizer, int option ); wxNewSizerItem( wxNewSizer *sizer, int option, int flag, int border );
virtual wxSize GetSize(); virtual wxSize GetSize();
virtual wxSize CalcMin(); virtual wxSize CalcMin();
@@ -61,12 +61,19 @@ public:
{ return m_sizer; } { return m_sizer; }
int GetOption() const int GetOption() const
{ return m_option; } { return m_option; }
int GetFlag() const
{ return m_flag; }
int GetBorder() const
{ return m_border; }
protected: protected:
wxWindow *m_window; wxWindow *m_window;
wxNewSizer *m_sizer; wxNewSizer *m_sizer;
wxSize m_size;
wxSize m_minSize; wxSize m_minSize;
int m_option; int m_option;
int m_border;
int m_flag;
}; };
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@@ -79,9 +86,9 @@ public:
wxNewSizer(); wxNewSizer();
~wxNewSizer(); ~wxNewSizer();
virtual void Add( wxWindow *window, int option = 0 ); virtual void Add( wxWindow *window, int option = 0, int flag = 0, int border = 0 );
virtual void Add( wxNewSizer *sizer, int option = 0 ); virtual void Add( wxNewSizer *sizer, int option = 0, int flag = 0, int border = 0 );
virtual void Add( int width, int height, int option = 0 ); virtual void Add( int width, int height, int option = 0, int flag = 0, int border = 0 );
void SetDimension( int x, int y, int width, int height ); void SetDimension( int x, int y, int width, int height );
@@ -109,42 +116,13 @@ protected:
}; };
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// wxBorderNewSizer // wxBox
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
#define wxWEST wxLEFT class WXDLLEXPORT wxBox: public wxNewSizer
#define wxEAST wxRIGHT
#define wxNORTH wxUP
#define wxSOUTH wxDOWN
#define wxALL_DIRECTIONS (wxNORTH | wxSOUTH | wxEAST | wxWEST)
class WXDLLEXPORT wxBorderNewSizer: public wxNewSizer
{ {
public: public:
wxBorderNewSizer( int sides = wxALL_DIRECTIONS ); wxBox( int orient );
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;
};
//---------------------------------------------------------------------------
// wxBoxNewSizer
//---------------------------------------------------------------------------
class WXDLLEXPORT wxBoxNewSizer: public wxNewSizer
{
public:
wxBoxNewSizer( int orient );
void RecalcSizes(); void RecalcSizes();
wxSize CalcMin(); wxSize CalcMin();

View File

@@ -370,56 +370,53 @@ NewSizerFrame::NewSizerFrame(wxFrame *frame, char *title, int x, int y ):
{ {
// we want to get a dialog that is stretchable because it // we want to get a dialog that is stretchable because it
// has a text ctrl in the middle. at the bottom, we have // has a text ctrl in the middle. at the bottom, we have
// two buttons which are not supposed to get stretched // two buttons which.
// and therefore we insert two spacers next to them
topsizer = new wxBoxNewSizer( wxVERTICAL ); topsizer = new wxBox( wxVERTICAL );
// 1) top: create wxStaticText with minimum size equal to its default size
topsizer->Add(
new wxStaticText( this, -1, "An explanation (wxALIGN_RIGHT)." ),
0, // make vertically unstretchable
wxALIGN_RIGHT | // right align text
wxTOP | wxLEFT | wxRIGHT, // make border all around except wxBOTTOM
5 ); // set border width to 5
// 2) top: create wxTextCtrl with minimum size (100x60)
// 1) upper part: text ctrl topsizer->Add(
new wxTextCtrl( this, -1, "My text (wxEXPAND).", wxDefaultPosition, wxSize(100,60), wxTE_MULTILINE),
// make border around textctrl in all directions 1, // make vertically stretchable
wxBorderNewSizer *text_border = new wxBorderNewSizer(); wxEXPAND | // make horizontally stretchable
wxALL, // and make border all around
// make border around text ctrl 20 pixels wide 5 ); // set border width to 5
// minimum size for the text ctrl is 60x30
text_border->Add( new wxTextCtrl( this, -1, "My text.", wxDefaultPosition, wxSize(170,30), wxTE_MULTILINE), 5 );
// add text ctrl with border to top sizer
// a value of more than zero indicates that it's stretchable
topsizer->Add( text_border, 1 );
// 2) middle part: static line
// make border for beauty static line
wxBorderNewSizer *line_border = new wxBorderNewSizer();
// make border around static line 2 pixels wide // 3) middle: create wxStaticLine with minimum size (3x3)
// minimum size for the static line is 3x3 topsizer->Add(
line_border->Add( new wxStaticLine( this, -1, wxDefaultPosition, wxSize(170,3), wxHORIZONTAL), 5 ); new wxStaticLine( this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL),
0, // make vertically unstretchable
// add text ctrl with border to top sizer wxEXPAND | // make horizontally stretchable
topsizer->Add( line_border ); wxALL, // and make border all around
5 ); // set border width to 5
// 3) bottom: buttons // 4) bottom: create two centred wxButtons
wxBox *button_box = new wxBox( wxHORIZONTAL );
button_box->Add(
new wxButton( this, -1, "Two buttons in a box" ),
0, // make horizontally unstretchable
wxALL, // make border all around
7 ); // set border width to 7
button_box->Add(
new wxButton( this, -1, "(wxCENTER)" ),
0, // make horizontally unstretchable
wxALL, // make border all around
7 ); // set border width to 7
// make border around button in all directions topsizer->Add(
wxBoxNewSizer *button_sizer = new wxBoxNewSizer( wxHORIZONTAL ); button_box,
0, // make vertically unstretchable
// make border around buttons 5 pixels wide wxCENTER ); // no border and centre horizontally
// minimum size for the button is its default size
wxBorderNewSizer *button1_border = new wxBorderNewSizer();
button1_border->Add( new wxButton( this, -1, "Hello 1", wxDefaultPosition, wxSize(80,30) ), 5 );
button_sizer->Add( button1_border );
wxBorderNewSizer *button2_border = new wxBorderNewSizer();
button2_border->Add( new wxButton( this, -1, "Hello 2", wxDefaultPosition, wxSize(80,30) ), 5 );
button_sizer->Add( button2_border );
// add buttons with border to top sizer
topsizer->Add( button_sizer );
// set frame to minimum size // set frame to minimum size

View File

@@ -27,62 +27,130 @@
// wxNewSizerItem // wxNewSizerItem
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
wxNewSizerItem::wxNewSizerItem( int width, int height, int option ) wxNewSizerItem::wxNewSizerItem( int width, int height, int option, int flag, int border )
{ {
m_window = (wxWindow *) NULL; m_window = (wxWindow *) NULL;
m_sizer = (wxNewSizer *) NULL; m_sizer = (wxNewSizer *) NULL;
m_option = option;
m_border = border;
m_flag = flag;
// minimal size is the initial size
m_minSize.x = width; m_minSize.x = width;
m_minSize.y = height; m_minSize.y = height;
m_option = option;
// size is set directly
m_size = m_minSize;
} }
wxNewSizerItem::wxNewSizerItem( wxWindow *window, int option ) wxNewSizerItem::wxNewSizerItem( wxWindow *window, int option, int flag, int border )
{ {
m_window = window; m_window = window;
m_sizer = (wxNewSizer *) NULL; m_sizer = (wxNewSizer *) NULL;
m_minSize = window->GetSize();
m_option = option; m_option = option;
m_border = border;
m_flag = flag;
// minimal size is the initial size
m_minSize = window->GetSize();
// size is calculated later
// m_size = ...
} }
wxNewSizerItem::wxNewSizerItem( wxNewSizer *sizer, int option ) wxNewSizerItem::wxNewSizerItem( wxNewSizer *sizer, int option, int flag, int border )
{ {
m_window = (wxWindow *) NULL; m_window = (wxWindow *) NULL;
m_sizer = sizer; m_sizer = sizer;
m_minSize = sizer->GetSize();
m_option = option; m_option = option;
m_border = border;
m_flag = flag;
// minimal size is calculated later
// m_minSize = ...
// size is calculated later
// m_size = ...
} }
wxSize wxNewSizerItem::GetSize() wxSize wxNewSizerItem::GetSize()
{ {
wxSize ret;
if (IsNewSizer()) if (IsNewSizer())
return m_sizer->GetSize(); ret = m_sizer->GetSize();
else
if (IsWindow()) if (IsWindow())
return m_window->GetSize(); ret = m_window->GetSize();
else ret = m_size;
return m_minSize;
if (m_flag & wxWEST)
ret.x += m_border;
if (m_flag & wxEAST)
ret.x += m_border;
if (m_flag & wxNORTH)
ret.y += m_border;
if (m_flag & wxSOUTH)
ret.y += m_border;
return ret;
} }
wxSize wxNewSizerItem::CalcMin() wxSize wxNewSizerItem::CalcMin()
{ {
wxSize ret;
if (IsNewSizer()) if (IsNewSizer())
return m_sizer->CalcMin(); ret = m_sizer->CalcMin();
/*
The minimum size of a window should be the
initial size, as saved in m_minSize, not the
current size.
else
if (IsWindow()) if (IsWindow())
return m_window->GetSize(); ret = m_window->GetSize();
*/
return m_minSize; else ret = m_minSize;
if (m_flag & wxWEST)
ret.x += m_border;
if (m_flag & wxEAST)
ret.x += m_border;
if (m_flag & wxNORTH)
ret.y += m_border;
if (m_flag & wxSOUTH)
ret.y += m_border;
return ret;
} }
void wxNewSizerItem::SetDimension( wxPoint pos, wxSize size ) void wxNewSizerItem::SetDimension( wxPoint pos, wxSize size )
{ {
if (m_flag & wxWEST)
{
pos.x += m_border;
size.x -= m_border;
}
if (m_flag & wxEAST)
{
size.x -= m_border;
}
if (m_flag & wxNORTH)
{
pos.y += m_border;
size.y -= m_border;
}
if (m_flag & wxSOUTH)
{
size.y -= m_border;
}
if (IsNewSizer()) if (IsNewSizer())
m_sizer->SetDimension( pos.x, pos.y, size.x, size.y ); m_sizer->SetDimension( pos.x, pos.y, size.x, size.y );
if (IsWindow()) if (IsWindow())
m_window->SetSize( pos.x, pos.y, size.x, size.y ); m_window->SetSize( pos.x, pos.y, size.x, size.y );
m_minSize = size; m_size = size;
} }
bool wxNewSizerItem::IsWindow() bool wxNewSizerItem::IsWindow()
@@ -113,19 +181,19 @@ wxNewSizer::~wxNewSizer()
{ {
} }
void wxNewSizer::Add( wxWindow *window, int option ) void wxNewSizer::Add( wxWindow *window, int option, int flag, int border )
{ {
m_children.Append( new wxNewSizerItem( window, option ) ); m_children.Append( new wxNewSizerItem( window, option, flag, border ) );
} }
void wxNewSizer::Add( wxNewSizer *sizer, int option ) void wxNewSizer::Add( wxNewSizer *sizer, int option, int flag, int border )
{ {
m_children.Append( new wxNewSizerItem( sizer, option ) ); m_children.Append( new wxNewSizerItem( sizer, option, flag, border ) );
} }
void wxNewSizer::Add( int width, int height, int option ) void wxNewSizer::Add( int width, int height, int option, int flag, int border )
{ {
m_children.Append( new wxNewSizerItem( width, height, option ) ); m_children.Append( new wxNewSizerItem( width, height, option, flag, border ) );
} }
void wxNewSizer::Fit( wxWindow *window ) void wxNewSizer::Fit( wxWindow *window )
@@ -164,108 +232,15 @@ void wxNewSizer::SetDimension( int x, int y, int width, int height )
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// wxBorderNewSizer // wxBox
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
wxBorderNewSizer::wxBorderNewSizer( int sides ) wxBox::wxBox( int orient )
{
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;
}
//---------------------------------------------------------------------------
// wxBoxNewSizer
//---------------------------------------------------------------------------
wxBoxNewSizer::wxBoxNewSizer( int orient )
{ {
m_orient = orient; m_orient = orient;
} }
void wxBoxNewSizer::RecalcSizes() void wxBox::RecalcSizes()
{ {
if (m_children.GetCount() == 0) if (m_children.GetCount() == 0)
{ {
@@ -310,7 +285,19 @@ void wxBoxNewSizer::RecalcSizes()
height = (delta * weight) + extra; height = (delta * weight) + extra;
extra = 0; // only the first item will get the remainder as extra size extra = 0; // only the first item will get the remainder as extra size
} }
item->SetDimension( pt, wxSize( size.x, height) );
wxPoint child_pos( pt );
wxSize child_size( wxSize( size.x, height) );
if (item->GetFlag() & wxALIGN_RIGHT)
child_pos.x += m_size.x - size.x;
else if (item->GetFlag() & wxCENTER)
child_pos.x += (m_size.x - size.x) / 2;
else if (item->GetFlag() & wxEXPAND)
child_size.x = m_size.x;
item->SetDimension( child_pos, child_size );
pt.y += height; pt.y += height;
} }
else else
@@ -321,7 +308,19 @@ void wxBoxNewSizer::RecalcSizes()
width = (delta * weight) + extra; width = (delta * weight) + extra;
extra = 0; // only the first item will get the remainder as extra size extra = 0; // only the first item will get the remainder as extra size
} }
item->SetDimension( pt, wxSize(width, size.y) );
wxPoint child_pos( pt );
wxSize child_size( wxSize(width, size.y) );
if (item->GetFlag() & wxALIGN_BOTTOM)
child_pos.y += m_size.y - size.y;
else if (item->GetFlag() & wxCENTER)
child_pos.y += (m_size.y - size.y) / 2;
else if (item->GetFlag() & wxEXPAND)
child_size.y = m_size.y;
item->SetDimension( child_pos, child_size );
pt.x += width; pt.x += width;
} }
@@ -329,7 +328,7 @@ void wxBoxNewSizer::RecalcSizes()
} }
} }
wxSize wxBoxNewSizer::CalcMin() wxSize wxBox::CalcMin()
{ {
if (m_children.GetCount() == 0) if (m_children.GetCount() == 0)
return wxSize(2,2); return wxSize(2,2);