]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/sizer.cpp
Remove some controls from limited screen area of Smartphone.
[wxWidgets.git] / src / common / sizer.cpp
index b5d44e452a00a9fa7ab7d6bac270666f0573d383..93d8ed970968378ee83a691398d7112bccf03099 100644 (file)
     #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
@@ -43,6 +50,9 @@ IMPLEMENT_CLASS(wxBoxSizer, wxSizer)
 #if wxUSE_STATBOX
 IMPLEMENT_CLASS(wxStaticBoxSizer, wxBoxSizer)
 #endif
+#if wxUSE_BUTTON
+IMPLEMENT_CLASS(wxStdDialogButtonSizer, wxBoxSizer)
+#endif
 
 WX_DEFINE_EXPORTED_LIST( wxSizerItemList );
 
@@ -89,6 +99,7 @@ void wxSizerItem::Init()
     m_sizer = NULL;
     m_show = true;
     m_userData = NULL;
+    m_zoneRect = wxRect( 0, 0, 0, 0 );
 }
 
 void wxSizerItem::Init(const wxSizerFlags& flags)
@@ -108,6 +119,7 @@ wxSizerItem::wxSizerItem( int width, int height, int proportion, int flag, int b
     , m_proportion( proportion )
     , m_border( border )
     , m_flag( flag )
+    , m_zoneRect( 0, 0, 0, 0 )
     , m_show( true )
     , m_userData( userData )
 {
@@ -120,6 +132,7 @@ wxSizerItem::wxSizerItem( wxWindow *window, int proportion, int flag, int border
     , m_proportion( proportion )
     , m_border( border )
     , m_flag( flag )
+    , m_zoneRect( 0, 0, 0, 0 )
     , m_show( true )
     , m_userData( userData )
 {
@@ -139,6 +152,7 @@ wxSizerItem::wxSizerItem( wxSizer *sizer, int proportion, int flag, int border,
     , m_proportion( proportion )
     , m_border( border )
     , m_flag( flag )
+    , m_zoneRect( 0, 0, 0, 0 )
     , m_show( true )
     , m_ratio( 0.0 )
     , m_userData( userData )
@@ -287,6 +301,7 @@ void wxSizerItem::SetDimension( wxPoint pos, wxSize size )
     if (IsSizer())
         m_sizer->SetDimension( pos.x, pos.y, size.x, size.y );
 
+    m_zoneRect = wxRect(pos, size);
     if (IsWindow())
         m_window->SetSize( pos.x, pos.y, size.x, size.y, wxSIZE_ALLOW_MINUS_ONE );
 
@@ -357,12 +372,14 @@ wxSizer::~wxSizer()
     WX_CLEAR_LIST(wxSizerItemList, m_children);
 }
 
-void wxSizer::Insert( size_t index, wxSizerItem *item )
+wxSizerItem* wxSizer::Insert( size_t index, wxSizerItem *item )
 {
     m_children.Insert( index, item );
 
     if( item->GetWindow() )
         item->GetWindow()->SetContainingSizer( this );
+
+    return item;
 }
 
 bool wxSizer::Remove( wxWindow *window )
@@ -1582,7 +1599,7 @@ static void GetStaticBoxBorders( wxStaticBox *box,
 
 #else
 #ifdef __WXGTK__
-    if ( box->GetLabel().IsEmpty() )
+    if ( box->GetLabel().empty() )
         *borderTop = 5;
     else
 #endif // __WXGTK__
@@ -1632,6 +1649,160 @@ void wxStaticBoxSizer::ShowItems( bool show )
 
 #endif // wxUSE_STATBOX
 
+#if wxUSE_BUTTON
+
+wxStdDialogButtonSizer::wxStdDialogButtonSizer()
+    : wxBoxSizer(wxHORIZONTAL)
+{
+    bool is_pda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA);
+
+    // 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;
+
+    m_buttonAffirmative = NULL;
+    m_buttonApply = NULL;
+    m_buttonNegative = NULL;
+    m_buttonCancel = NULL;
+    m_buttonHelp = NULL;
+}
+
+void wxStdDialogButtonSizer::AddButton(wxButton *mybutton)
+{
+    switch (mybutton->GetId())
+    {
+        case wxID_OK:
+        case wxID_YES:
+        case wxID_SAVE:
+            m_buttonAffirmative = mybutton;
+            break;
+        case wxID_APPLY:
+            m_buttonApply = mybutton;
+            break;
+        case wxID_NO:
+            m_buttonNegative = mybutton;
+            break;
+        case wxID_CANCEL:
+            m_buttonCancel = mybutton;
+            break;
+        case wxID_HELP:
+            m_buttonHelp = mybutton;
+            break;
+        default:
+            break;
+    }
+}
+
+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::Finalise()
+{
+#ifdef __WXMAC__
+        Add(0, 0, 0, wxLEFT, 6);
+        if (m_buttonHelp)
+            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);
+
+        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
+        // 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);
+
+        // extra whitespace between help and cancel/ok buttons
+        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
+    // do the same thing for GTK1 and Windows platforms
+    // and assume any platform not accounted for here will use
+    // 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);
+
+        // extra whitespace between help and cancel/ok buttons
+        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
 
@@ -1648,7 +1819,7 @@ IMPLEMENT_CLASS(wxNotebookSizer, wxBookCtrlSizer)
 
 #if wxUSE_BOOKCTRL
 
-wxBookCtrlSizer::wxBookCtrlSizer(wxBookCtrl *bookctrl)
+wxBookCtrlSizer::wxBookCtrlSizer(wxBookCtrlBase *bookctrl)
                : m_bookctrl(bookctrl)
 {
     wxASSERT_MSG( bookctrl, wxT("wxBookCtrlSizer needs a control") );