1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: src/common/nbkbase.cpp
3 // Purpose: common wxNotebook methods
4 // Author: Vadim Zeitlin
8 // Copyright: (c) 2001 Vadim Zeitlin
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // For compilers that support precompilation, includes "wx.h".
21 #include "wx/wxprec.h"
32 #include "wx/notebook.h"
34 // ============================================================================
36 // ============================================================================
38 wxDEFINE_EVENT( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED
, wxBookCtrlEvent
);
39 wxDEFINE_EVENT( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING
, wxBookCtrlEvent
);
41 #if wxUSE_EXTENDED_RTTI
43 // ----------------------------------------------------------------------------
45 // ----------------------------------------------------------------------------
47 #include "wx/listimpl.cpp"
48 WX_DEFINE_LIST( wxNotebookPageInfoList
)
50 wxDEFINE_FLAGS( wxNotebookStyle
)
51 wxBEGIN_FLAGS( wxNotebookStyle
)
52 // new style border flags, we put them first to
53 // use them for streaming out
54 wxFLAGS_MEMBER(wxBORDER_SIMPLE
)
55 wxFLAGS_MEMBER(wxBORDER_SUNKEN
)
56 wxFLAGS_MEMBER(wxBORDER_DOUBLE
)
57 wxFLAGS_MEMBER(wxBORDER_RAISED
)
58 wxFLAGS_MEMBER(wxBORDER_STATIC
)
59 wxFLAGS_MEMBER(wxBORDER_NONE
)
61 // old style border flags
62 wxFLAGS_MEMBER(wxSIMPLE_BORDER
)
63 wxFLAGS_MEMBER(wxSUNKEN_BORDER
)
64 wxFLAGS_MEMBER(wxDOUBLE_BORDER
)
65 wxFLAGS_MEMBER(wxRAISED_BORDER
)
66 wxFLAGS_MEMBER(wxSTATIC_BORDER
)
67 wxFLAGS_MEMBER(wxBORDER
)
69 // standard window styles
70 wxFLAGS_MEMBER(wxTAB_TRAVERSAL
)
71 wxFLAGS_MEMBER(wxCLIP_CHILDREN
)
72 wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW
)
73 wxFLAGS_MEMBER(wxWANTS_CHARS
)
74 wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE
)
75 wxFLAGS_MEMBER(wxALWAYS_SHOW_SB
)
76 wxFLAGS_MEMBER(wxVSCROLL
)
77 wxFLAGS_MEMBER(wxHSCROLL
)
79 wxFLAGS_MEMBER(wxNB_FIXEDWIDTH
)
80 wxFLAGS_MEMBER(wxBK_DEFAULT
)
81 wxFLAGS_MEMBER(wxBK_TOP
)
82 wxFLAGS_MEMBER(wxBK_LEFT
)
83 wxFLAGS_MEMBER(wxBK_RIGHT
)
84 wxFLAGS_MEMBER(wxBK_BOTTOM
)
85 wxFLAGS_MEMBER(wxNB_NOPAGETHEME
)
86 wxFLAGS_MEMBER(wxNB_FLAT
)
87 wxEND_FLAGS( wxNotebookStyle
)
89 wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxNotebook
, wxControl
, "wx/notebook.h")
90 wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxNotebookPageInfo
, wxObject
, "wx/notebook.h" )
92 wxCOLLECTION_TYPE_INFO( wxNotebookPageInfo
*, wxNotebookPageInfoList
);
94 #if wxUSE_EXTENDED_RTTI
95 template<> void wxCollectionToVariantArray( wxNotebookPageInfoList
const &theList
,
96 wxVariantBaseArray
&value
)
98 wxListCollectionToVariantArray
<wxNotebookPageInfoList::compatibility_iterator
>( theList
, value
);
102 wxBEGIN_PROPERTIES_TABLE(wxNotebook
)
103 wxEVENT_PROPERTY( PageChanging
, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING
, wxNotebookEvent
)
104 wxEVENT_PROPERTY( PageChanged
, wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED
, wxNotebookEvent
)
106 wxPROPERTY_COLLECTION( PageInfos
, wxNotebookPageInfoList
, wxNotebookPageInfo
*, \
107 AddPageInfo
, GetPageInfos
, 0 /*flags*/, wxT("Helpstring"), \
109 wxPROPERTY_FLAGS( WindowStyle
, wxNotebookStyle
, long, SetWindowStyleFlag
, \
110 GetWindowStyleFlag
, wxEMPTY_PARAMETER_VALUE
, 0 /*flags*/, \
111 wxT("Helpstring"), wxT("group")) // style
112 wxEND_PROPERTIES_TABLE()
114 wxEMPTY_HANDLERS_TABLE(wxNotebook
)
116 wxCONSTRUCTOR_5( wxNotebook
, wxWindow
*, Parent
, wxWindowID
, Id
, \
117 wxPoint
, Position
, wxSize
, Size
, long, WindowStyle
)
119 wxBEGIN_PROPERTIES_TABLE(wxNotebookPageInfo
)
120 wxREADONLY_PROPERTY( Page
, wxNotebookPage
*, GetPage
, wxEMPTY_PARAMETER_VALUE
, \
121 0 /*flags*/, wxT("Helpstring"), wxT("group"))
122 wxREADONLY_PROPERTY( Text
, wxString
, GetText
, wxString(), 0 /*flags*/, \
123 wxT("Helpstring"), wxT("group"))
124 wxREADONLY_PROPERTY( Selected
, bool, GetSelected
, false, 0 /*flags*/, \
125 wxT("Helpstring"), wxT("group") )
126 wxREADONLY_PROPERTY( ImageId
, int, GetImageId
, -1, 0 /*flags*/, \
127 wxT("Helpstring"), wxT("group"))
128 wxEND_PROPERTIES_TABLE()
130 wxEMPTY_HANDLERS_TABLE(wxNotebookPageInfo
)
132 wxCONSTRUCTOR_4( wxNotebookPageInfo
, wxNotebookPage
*, Page
, \
133 wxString
, Text
, bool, Selected
, int, ImageId
)
137 void wxNotebookBase::AddPageInfo( wxNotebookPageInfo
* info
)
139 AddPage( info
->GetPage(), info
->GetText(), info
->GetSelected(), info
->GetImageId() );
142 const wxNotebookPageInfoList
& wxNotebookBase::GetPageInfos() const
144 wxNotebookPageInfoList
* list
= const_cast< wxNotebookPageInfoList
* >( &m_pageInfos
);
145 WX_CLEAR_LIST( wxNotebookPageInfoList
, *list
);
146 for( size_t i
= 0; i
< GetPageCount(); ++i
)
148 wxNotebookPageInfo
*info
= new wxNotebookPageInfo();
149 info
->Create( const_cast<wxNotebookBase
*>(this)->GetPage(i
), GetPageText(i
),
150 GetSelection() == int(i
), GetPageImage(i
) );
151 list
->Append( info
);
158 // ----------------------------------------------------------------------------
160 // ----------------------------------------------------------------------------
162 wxSize
wxNotebookBase::CalcSizeFromPage(const wxSize
& sizePage
) const
164 // this is, of course, totally bogus -- but we must do something by
165 // default because not all ports implement this
166 wxSize sizeTotal
= sizePage
;
168 if ( HasFlag(wxBK_LEFT
) || HasFlag(wxBK_RIGHT
) )
173 else // tabs on top/bottom side
182 // ----------------------------------------------------------------------------
184 // ----------------------------------------------------------------------------
186 bool wxNotebookBase::SendPageChangingEvent(int nPage
)
188 wxBookCtrlEvent
event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING
, GetId());
189 event
.SetSelection(nPage
);
190 event
.SetOldSelection(GetSelection());
191 event
.SetEventObject(this);
192 return !GetEventHandler()->ProcessEvent(event
) || event
.IsAllowed();
195 void wxNotebookBase::SendPageChangedEvent(int nPageOld
, int nPageNew
)
197 wxBookCtrlEvent
event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED
, GetId());
198 event
.SetSelection(nPageNew
== -1 ? GetSelection() : nPageNew
);
199 event
.SetOldSelection(nPageOld
);
200 event
.SetEventObject(this);
201 GetEventHandler()->ProcessEvent(event
);
204 #endif // wxUSE_NOTEBOOK