#pragma hdrstop
#endif
+#ifndef WX_PRECOMP
+ #include "wx/string.h"
+ #include "wx/intl.h"
+#endif // WX_PRECOMP
+
#include "wx/sizer.h"
#include "wx/utils.h"
#include "wx/statbox.h"
#include "wx/settings.h"
#include "wx/listimpl.cpp"
+#include "wx/intl.h"
#if WXWIN_COMPATIBILITY_2_4
#include "wx/notebook.h"
#endif
-#ifdef __WXMAC__
-# include "wx/mac/uma.h"
-#endif
-
//---------------------------------------------------------------------------
IMPLEMENT_CLASS(wxSizerItem, wxObject)
#if wxUSE_STATBOX
IMPLEMENT_CLASS(wxStaticBoxSizer, wxBoxSizer)
#endif
+#if wxUSE_BUTTON
IMPLEMENT_CLASS(wxStdDialogButtonSizer, wxBoxSizer)
+#endif
WX_DEFINE_EXPORTED_LIST( wxSizerItemList );
m_sizer = NULL;
m_show = true;
m_userData = NULL;
- m_zoneRect = wxRect( 0, 0, 0, 0 );
+ m_zoneRect = wxRect(0,0,0,0);
}
void wxSizerItem::Init(const wxSizerFlags& flags)
, m_proportion( proportion )
, m_border( border )
, m_flag( flag )
- , m_zoneRect( 0, 0, 0, 0 )
+ , m_zoneRect()
, m_show( true )
, m_userData( userData )
{
, m_proportion( proportion )
, m_border( border )
, m_flag( flag )
- , m_zoneRect( 0, 0, 0, 0 )
+ , m_zoneRect()
, m_show( true )
, m_userData( userData )
{
, m_proportion( proportion )
, m_border( border )
, m_flag( flag )
- , m_zoneRect( 0, 0, 0, 0 )
+ , m_zoneRect()
, m_show( true )
, m_ratio( 0.0 )
, m_userData( userData )
//---------------------------------------------------------------------------
wxSizer::wxSizer()
- : m_minSize( wxSize( 0, 0 ) )
+ :m_minSize()
{
}
SetItemBounds( node->GetData(), x, y, w, h);
}
- y = y + m_rowHeights[r] + m_vgap;
+ if (m_rowHeights[r] != -1)
+ y = y + m_rowHeights[r] + m_vgap;
}
- x = x + m_colWidths[c] + m_hgap;
+ if (m_colWidths[c] != -1)
+ x = x + m_colWidths[c] + m_hgap;
}
}
int width = 0;
for (int col = 0; col < ncols; col++)
if ( m_colWidths[ col ] != -1 )
- width += m_colWidths[ col ] + ( col == ncols-1 ? 0 : m_hgap );
+ width += m_colWidths[ col ] + m_hgap;
+ if (width > 0)
+ width -= m_hgap;
int height = 0;
for (int row = 0; row < nrows; row++)
if ( m_rowHeights[ row ] != -1 )
- height += m_rowHeights[ row ] + ( row == nrows-1 ? 0 : m_vgap );
+ height += m_rowHeights[ row ] + m_vgap;
+ if (height > 0)
+ height -= m_vgap;
m_calculatedMinSize = wxSize( width, height );
return m_calculatedMinSize;
wxASSERT_MSG( box, wxT("wxStaticBoxSizer needs a static box") );
}
+wxStaticBoxSizer::wxStaticBoxSizer(int orient, wxWindow *win, const wxString& s)
+ : wxBoxSizer(orient),
+ m_staticBox(new wxStaticBox(win, wxID_ANY, s))
+{
+}
+
static void GetStaticBoxBorders( wxStaticBox *box,
int *borderTop,
int *borderOther)
{
// this has to be done platform by platform as there is no way to
// guess the thickness of a wxStaticBox border
-#ifdef __WXCOCOA__
- box->GetBordersForSizer(borderTop,borderOther);
-#elif defined(__WXMAC__)
-
- static int extraTop = -1; // Uninitted
- static int other = 5;
-
- if ( extraTop == -1 )
- {
- // The minimal border used for the top. Later on the staticbox'
- // font height is added to this.
- extraTop = 0;
-
- if ( UMAGetSystemVersion() >= 0x1030 /*Panther*/ )
- {
- // As indicated by the HIG, Panther needs an extra border of 11
- // pixels (otherwise overlapping occurs at the top). The "other"
- // border has to be 11.
- extraTop = 11;
- other = 11;
- }
-
- }
-
- *borderTop = extraTop + box->GetCharHeight();
- *borderOther = other;
-
-#else
-#ifdef __WXGTK__
- if ( box->GetLabel().empty() )
- *borderTop = 5;
- else
-#endif // __WXGTK__
- *borderTop = box->GetCharHeight();
-
- *borderOther = 5;
-#endif // __WXCOCOA__
+ box->GetBordersForSizer(borderTop, borderOther);
}
void wxStaticBoxSizer::RecalcSizes()
#endif // wxUSE_STATBOX
+#if wxUSE_BUTTON
+
wxStdDialogButtonSizer::wxStdDialogButtonSizer()
: wxBoxSizer(wxHORIZONTAL)
{
+ // Vertical buttons with lots of space on either side
+ // looks rubbish on WinCE, so let's not do this for now.
+ // If we are going to use vertical buttons, we should
+ // put the sizer to the right of other controls in the dialog,
+ // and that's beyond the scope of this sizer.
+#ifndef __WXWINCE__
bool is_pda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA);
-
- // If we have a PDA screen, put yes/no button over
+ // If we have a PDA screen, put yes/no button over
// all other buttons, otherwise on the left side.
if (is_pda)
m_orient = wxVERTICAL;
-
+#endif
+
m_buttonAffirmative = NULL;
m_buttonApply = NULL;
m_buttonNegative = NULL;
m_buttonCancel = mybutton;
break;
case wxID_HELP:
+ case wxID_CONTEXT_HELP:
m_buttonHelp = mybutton;
break;
default:
}
}
-void wxStdDialogButtonSizer::Finalise()
+void wxStdDialogButtonSizer::SetAffirmativeButton( wxButton *button )
+{
+ m_buttonAffirmative = button;
+}
+
+void wxStdDialogButtonSizer::SetNegativeButton( wxButton *button )
+{
+ m_buttonNegative = button;
+}
+
+void wxStdDialogButtonSizer::SetCancelButton( wxButton *button )
+{
+ m_buttonCancel = button;
+}
+
+void wxStdDialogButtonSizer::Realize()
{
#ifdef __WXMAC__
Add(0, 0, 0, wxLEFT, 6);
if (m_buttonHelp)
- Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
-
+ Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
+
if (m_buttonNegative){
// HIG POLICE BULLETIN - destructive buttons need extra padding
// 24 pixels on either side
Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 12);
}
-
+
// extra whitespace between help/negative and cancel/ok buttons
- Add(0, 0, 1, wxEXPAND, 0);
-
+ Add(0, 0, 1, wxEXPAND, 0);
+
if (m_buttonCancel){
Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
// Cancel or help should be default
// m_buttonCancel->SetDefaultButton();
}
-
- // Ugh, Mac doesn't really have apply dialogs, so I'll just
+
+ // Ugh, Mac doesn't really have apply dialogs, so I'll just
// figure the best place is between Cancel and OK
if (m_buttonApply)
Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
-
+
if (m_buttonAffirmative){
Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT, 6);
-
+
if (m_buttonAffirmative->GetId() == wxID_SAVE){
// these buttons have set labels under Mac so we should use them
m_buttonAffirmative->SetLabel(_("Save"));
m_buttonNegative->SetLabel(_("Don't Save"));
}
}
-
+
// Extra space around and at the right
Add(12, 24);
#elif defined(__WXGTK20__)
Add(0, 0, 0, wxLEFT, 9);
if (m_buttonHelp)
- Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
-
+ Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
+
// extra whitespace between help and cancel/ok buttons
- Add(0, 0, 1, wxEXPAND, 0);
-
+ Add(0, 0, 1, wxEXPAND, 0);
+
if (m_buttonNegative){
Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
}
-
+
if (m_buttonCancel){
Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
// Cancel or help should be default
// m_buttonCancel->SetDefaultButton();
}
-
+
if (m_buttonApply)
Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
-
+
if (m_buttonAffirmative)
Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT, 6);
#else
// Windows style
Add(0, 0, 0, wxLEFT, 9);
if (m_buttonHelp)
- Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonHelp->ConvertDialogToPixels(wxSize(4, 0)).x);
-
+ Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonHelp->ConvertDialogToPixels(wxSize(4, 0)).x);
+
// extra whitespace between help and cancel/ok buttons
- Add(0, 0, 1, wxEXPAND, 0);
+ Add(0, 0, 1, wxEXPAND, 0);
if (m_buttonApply)
Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonApply->ConvertDialogToPixels(wxSize(4, 0)).x);
-
+
if (m_buttonAffirmative){
Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonAffirmative->ConvertDialogToPixels(wxSize(4, 0)).x);
}
-
+
if (m_buttonNegative){
Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonNegative->ConvertDialogToPixels(wxSize(4, 0)).x);
}
-
+
if (m_buttonCancel){
Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT, m_buttonCancel->ConvertDialogToPixels(wxSize(4, 0)).x);
// Cancel or help should be default
// m_buttonCancel->SetDefaultButton();
}
-
+
#endif
}
+#endif // wxUSE_BUTTON
+
#if WXWIN_COMPATIBILITY_2_4
// ----------------------------------------------------------------------------
wxSize wxBookCtrlSizer::CalcMin()
{
- wxSize sizeBorder = m_bookctrl->CalcSizeFromPage(wxSize(0, 0));
+ wxSize sizeBorder = m_bookctrl->CalcSizeFromPage(wxSize(0,0));
sizeBorder.x += 5;
sizeBorder.y += 5;