]>
git.saurik.com Git - wxWidgets.git/blob - src/generic/propdlg.cpp
aa4589b2b97228153158b767746eb1b69852da5a
   1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/generic/propdlg.cpp 
   3 // Purpose:     wxPropertySheetDialog 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // For compilers that support precompilation, includes "wx.h". 
  13 #include "wx/wxprec.h" 
  24     #include "wx/button.h" 
  28     #include "wx/msgdlg.h" 
  31 #include "wx/bookctrl.h" 
  34 #include "wx/notebook.h" 
  37 #include "wx/choicebk.h" 
  40 #include "wx/toolbook.h" 
  43 #include "wx/listbook.h" 
  46 #include "wx/generic/propdlg.h" 
  47 #include "wx/sysopt.h" 
  49 //----------------------------------------------------------------------------- 
  50 // wxPropertySheetDialog 
  51 //----------------------------------------------------------------------------- 
  53 IMPLEMENT_DYNAMIC_CLASS(wxPropertySheetDialog
, wxDialog
) 
  55 BEGIN_EVENT_TABLE(wxPropertySheetDialog
, wxDialog
) 
  56     EVT_ACTIVATE(wxPropertySheetDialog::OnActivate
) 
  57     EVT_IDLE(wxPropertySheetDialog::OnIdle
) 
  60 bool wxPropertySheetDialog::Create(wxWindow
* parent
, wxWindowID id
, const wxString
& title
, 
  61                                        const wxPoint
& pos
, const wxSize
& sz
, long style
, 
  64     if (!wxDialog::Create(parent
, id
, title
, pos
, sz
, style
|wxCLIP_CHILDREN
, name
)) 
  67     wxBoxSizer 
*topSizer 
= new wxBoxSizer( wxVERTICAL 
); 
  70     // This gives more space around the edges 
  71     m_innerSizer 
= new wxBoxSizer( wxVERTICAL 
); 
  74 #if defined(__SMARTPHONE__) || defined(__POCKETPC__) 
  77     topSizer
->Add(m_innerSizer
, 1, wxGROW
|wxALL
, extraSpace
); 
  79     m_bookCtrl 
= CreateBookCtrl(); 
  80     AddBookCtrl(m_innerSizer
); 
  85 void wxPropertySheetDialog::Init() 
  87     m_sheetStyle 
= wxPROPSHEET_DEFAULT
; 
  92 // Layout the dialog, to be called after pages have been created 
  93 void wxPropertySheetDialog::LayoutDialog(int centreFlags
) 
  95 #if !defined(__SMARTPHONE__) && !defined(__POCKETPC__) 
  96     GetSizer()->Fit(this); 
  97     GetSizer()->SetSizeHints(this); 
 101     wxUnusedVar(centreFlags
); 
 103 #if defined(__SMARTPHONE__) 
 105         m_bookCtrl
->SetFocus(); 
 109 // Creates the buttons, if any 
 110 void wxPropertySheetDialog::CreateButtons(int flags
) 
 113     // keep system option status 
 114     const wxChar 
*optionName 
= wxT("wince.dialog.real-ok-cancel"); 
 115     const int status 
= wxSystemOptions::GetOptionInt(optionName
); 
 116     wxSystemOptions::SetOption(optionName
,0); 
 119     wxSizer 
*buttonSizer 
= CreateButtonSizer( flags 
& ButtonSizerFlags 
); 
 120     if(buttonSizer
->GetChildren().GetCount() > 0 ) 
 122         m_innerSizer
->Add( buttonSizer
, 0, wxGROW
|wxALIGN_CENTER_VERTICAL
|wxTOP
|wxBOTTOM
|wxLEFT
|wxRIGHT
, 2); 
 123         m_innerSizer
->AddSpacer(2); 
 131     // restore system option 
 132     wxSystemOptions::SetOption(optionName
,status
); 
 136 // Creates the book control 
 137 wxBookCtrlBase
* wxPropertySheetDialog::CreateBookCtrl() 
 139     int style 
= wxCLIP_CHILDREN
; 
 140 #if defined(__POCKETPC__) && wxUSE_NOTEBOOK 
 141     style 
|= wxBK_BOTTOM
|wxNB_FLAT
; 
 143     style 
|= wxBK_DEFAULT
; 
 146     wxBookCtrlBase
* bookCtrl 
= NULL
; 
 149     if (GetSheetStyle() & wxPROPSHEET_NOTEBOOK
) 
 150         bookCtrl 
= new wxNotebook(this, wxID_ANY
, wxDefaultPosition
, wxDefaultSize
, style 
); 
 153     if (GetSheetStyle() & wxPROPSHEET_CHOICEBOOK
) 
 154         bookCtrl 
= new wxChoicebook(this, wxID_ANY
, wxDefaultPosition
, wxDefaultSize
, style 
); 
 157     if (GetSheetStyle() & wxPROPSHEET_TOOLBOOK
) 
 158         bookCtrl 
= new wxToolbook(this, wxID_ANY
, wxDefaultPosition
, wxDefaultSize
, style 
); 
 161     if (GetSheetStyle() & wxPROPSHEET_LISTBOOK
) 
 162         bookCtrl 
= new wxListbook(this, wxID_ANY
, wxDefaultPosition
, wxDefaultSize
, style 
); 
 165         bookCtrl 
= new wxBookCtrl(this, wxID_ANY
, wxDefaultPosition
, wxDefaultSize
, style 
); 
 167     if (GetSheetStyle() & wxPROPSHEET_SHRINKTOFIT
) 
 168         bookCtrl
->SetFitToCurrentPage(true); 
 173 // Adds the book control to the inner sizer. 
 174 void wxPropertySheetDialog::AddBookCtrl(wxSizer
* sizer
) 
 176 #if defined(__POCKETPC__) && wxUSE_NOTEBOOK 
 177     // The book control has to be sized larger than the dialog because of a border bug 
 180     sizer
->Add( m_bookCtrl
, 1, wxGROW
|wxALIGN_CENTER_VERTICAL
|wxLEFT
|wxTOP
|wxRIGHT
, borderSize 
); 
 182     sizer
->Add( m_bookCtrl
, 1, wxGROW
|wxALIGN_CENTER_VERTICAL
|wxALL
, 5 ); 
 186 void wxPropertySheetDialog::OnActivate(wxActivateEvent
& event
) 
 188 #if defined(__SMARTPHONE__) 
 189     // Attempt to focus the choice control: not yet working, but might 
 190     // be a step in the right direction. OnActivate overrides the default 
 191     // handler in toplevel.cpp that sets the focus for the first child of 
 192     // of the dialog (the choicebook). 
 193     if (event
.GetActive()) 
 195         wxChoicebook
* choiceBook 
= wxDynamicCast(GetBookCtrl(), wxChoicebook
); 
 197             choiceBook
->SetFocus(); 
 204 // Resize dialog if necessary 
 205 void wxPropertySheetDialog::OnIdle(wxIdleEvent
& event
) 
 209     if ((GetSheetStyle() & wxPROPSHEET_SHRINKTOFIT
) && GetBookCtrl()) 
 211         int sel 
= GetBookCtrl()->GetSelection(); 
 212         if (sel 
!= -1 && sel 
!= m_selectedPage
) 
 214             GetBookCtrl()->InvalidateBestSize(); 
 215             InvalidateBestSize(); 
 216             SetSizeHints(-1, -1, -1, -1); 
 218             m_selectedPage 
= sel
; 
 224 #endif // wxUSE_BOOKCTRL