]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/common/nbkbase.cpp
patch from Dimitri fixing crashes when decoding the invalid GIFs
[wxWidgets.git] / src / common / nbkbase.cpp
... / ...
CommitLineData
1///////////////////////////////////////////////////////////////////////////////
2// Name: src/common/nbkbase.cpp
3// Purpose: common wxNotebook methods
4// Author: Vadim Zeitlin
5// Modified by:
6// Created: 02.07.01
7// RCS-ID: $Id$
8// Copyright: (c) 2001 Vadim Zeitlin
9// Licence: wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20#ifdef __GNUG__
21 #pragma implementation "notebookbase.h"
22#endif
23
24// For compilers that support precompilation, includes "wx.h".
25#include "wx/wxprec.h"
26
27#ifdef __BORLANDC__
28 #pragma hdrstop
29#endif
30
31#if wxUSE_NOTEBOOK
32
33#ifndef WX_PRECOMP
34#endif //WX_PRECOMP
35
36#include "wx/imaglist.h"
37#include "wx/notebook.h"
38
39// ============================================================================
40// implementation
41// ============================================================================
42
43// ----------------------------------------------------------------------------
44// constructors and destructors
45// ----------------------------------------------------------------------------
46
47void wxNotebookBase::Init()
48{
49 m_imageList = NULL;
50 m_ownsImageList = FALSE;
51}
52
53wxNotebookBase::~wxNotebookBase()
54{
55 if ( m_ownsImageList )
56 {
57 // may be NULL, ok
58 delete m_imageList;
59 }
60}
61
62// ----------------------------------------------------------------------------
63// image list
64// ----------------------------------------------------------------------------
65
66void wxNotebookBase::SetImageList(wxImageList* imageList)
67{
68 if ( m_ownsImageList )
69 {
70 // may be NULL, ok
71 delete m_imageList;
72
73 m_ownsImageList = FALSE;
74 }
75
76 m_imageList = imageList;
77}
78
79void wxNotebookBase::AssignImageList(wxImageList* imageList)
80{
81 SetImageList(imageList);
82 m_ownsImageList = TRUE;
83}
84
85// ----------------------------------------------------------------------------
86// geometry
87// ----------------------------------------------------------------------------
88
89wxSize wxNotebookBase::CalcSizeFromPage(const wxSize& sizePage)
90{
91 // this was just taken from wxNotebookSizer::CalcMin() and is, of
92 // course, totally bogus - just like the original code was
93 wxSize sizeTotal = sizePage;
94
95 // Mac has large notebook borders.
96
97 if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
98 {
99 sizeTotal.x += 90;
100#ifdef __WXMAC__
101 sizeTotal.y += 28;
102#else
103 sizeTotal.y += 10;
104#endif
105 }
106 else
107 {
108#ifdef __WXMAC__
109 sizeTotal.x += 34; // This is OK for Aqua.
110 sizeTotal.y += 46;
111#else
112 sizeTotal.x += 10;
113 sizeTotal.y += 40;
114#endif
115 }
116
117 return sizeTotal;
118}
119
120// ----------------------------------------------------------------------------
121// pages management
122// ----------------------------------------------------------------------------
123
124bool wxNotebookBase::DeletePage(int nPage)
125{
126 wxNotebookPage *page = DoRemovePage(nPage);
127 if ( !page )
128 return FALSE;
129
130 delete page;
131
132 return TRUE;
133}
134
135wxNotebookPage *wxNotebookBase::DoRemovePage(int nPage)
136{
137 wxCHECK_MSG( nPage >= 0 && (size_t)nPage < m_pages.GetCount(), NULL,
138 _T("invalid page index in wxNotebookBase::DoRemovePage()") );
139
140 wxNotebookPage *pageRemoved = m_pages[nPage];
141 m_pages.RemoveAt(nPage);
142
143 return pageRemoved;
144}
145
146int wxNotebookBase::GetNextPage(bool forward) const
147{
148 int nPage;
149
150 int nMax = GetPageCount();
151 if ( nMax-- ) // decrement it to get the last valid index
152 {
153 int nSel = GetSelection();
154
155 // change selection wrapping if it becomes invalid
156 nPage = forward ? nSel == nMax ? 0
157 : nSel + 1
158 : nSel == 0 ? nMax
159 : nSel - 1;
160 }
161 else // notebook is empty, no next page
162 {
163 nPage = -1;
164 }
165
166 return nPage;
167}
168
169#endif // wxUSE_NOTEBOOK
170