]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/os2/notebook.cpp
Continue reading after checking the pushback buffer if more data is requested. Otherw...
[wxWidgets.git] / src / os2 / notebook.cpp
... / ...
CommitLineData
1///////////////////////////////////////////////////////////////////////////////
2// Name: src/os2/notebook.cpp
3// Purpose: implementation of wxNotebook
4// Author: David Webster
5// Modified by:
6// Created: 10/12/99
7// RCS-ID: $Id$
8// Copyright: (c) David Webster
9// Licence: wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12// For compilers that support precompilation, includes "wx.h".
13#include "wx/wxprec.h"
14
15#if wxUSE_NOTEBOOK
16
17#include "wx/notebook.h"
18
19// wxWidgets
20#ifndef WX_PRECOMP
21 #include "wx/app.h"
22 #include "wx/dcclient.h"
23 #include "wx/string.h"
24 #include "wx/settings.h"
25 #include "wx/log.h"
26 #include "wx/event.h"
27#endif // WX_PRECOMP
28
29#include "wx/imaglist.h"
30#include "wx/control.h"
31
32#include "wx/os2/private.h"
33
34// ----------------------------------------------------------------------------
35// macros
36// ----------------------------------------------------------------------------
37
38// check that the page index is valid
39#define IS_VALID_PAGE(nPage) ( \
40 /* size_t is _always_ >= 0 */ \
41 /* ((nPage) >= 0) && */ \
42 ((nPage) < GetPageCount()) \
43 )
44
45// hide the ugly cast
46#define m_hWnd (HWND)GetHWND()
47
48// ----------------------------------------------------------------------------
49// constants
50// ----------------------------------------------------------------------------
51
52// ----------------------------------------------------------------------------
53// event table
54// ----------------------------------------------------------------------------
55
56DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED)
57DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING)
58
59BEGIN_EVENT_TABLE(wxNotebook, wxControl)
60 EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, wxNotebook::OnSelChange)
61 EVT_SIZE(wxNotebook::OnSize)
62 EVT_SET_FOCUS(wxNotebook::OnSetFocus)
63 EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey)
64END_EVENT_TABLE()
65
66IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxControl)
67IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxNotifyEvent)
68
69// ============================================================================
70// implementation
71// ============================================================================
72
73// ----------------------------------------------------------------------------
74// wxNotebook construction
75// ----------------------------------------------------------------------------
76
77//
78// Common part of all ctors
79//
80void wxNotebook::Init()
81{
82 m_imageList = NULL;
83 m_nSelection = -1;
84 m_nTabSize = 0;
85} // end of wxNotebook::Init
86
87//
88// Default for dynamic class
89//
90wxNotebook::wxNotebook()
91{
92 Init();
93} // end of wxNotebook::wxNotebook
94
95//
96// The same arguments as for wxControl
97//
98wxNotebook::wxNotebook(
99 wxWindow* pParent
100, wxWindowID vId
101, const wxPoint& rPos
102, const wxSize& rSize
103, long lStyle
104, const wxString& rsName
105)
106{
107 Init();
108 Create( pParent
109 ,vId
110 ,rPos
111 ,rSize
112 ,lStyle
113 ,rsName
114 );
115} // end of wxNotebook::wxNotebook
116
117//
118// Create() function
119//
120bool wxNotebook::Create( wxWindow* pParent,
121 wxWindowID vId,
122 const wxPoint& rPos,
123 const wxSize& rSize,
124 long lStyle,
125 const wxString& rsName )
126{
127 //
128 // Base init
129 //
130 if (!CreateControl( pParent
131 ,vId
132 ,rPos
133 ,rSize
134 ,lStyle
135 ,wxDefaultValidator
136 ,rsName
137 ))
138 return false;
139
140 //
141 // Notebook, so explicitly specify 0 as last parameter
142 //
143 if (!OS2CreateControl( wxT("NOTEBOOK")
144 ,wxEmptyString
145 ,rPos
146 ,rSize
147 ,lStyle | wxTAB_TRAVERSAL
148 ))
149 return false;
150
151 SetBackgroundColour(wxColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)));
152 return true;
153} // end of wxNotebook::Create
154
155WXDWORD wxNotebook::OS2GetStyle (
156 long lStyle
157, WXDWORD* pdwExstyle
158) const
159{
160 WXDWORD dwTabStyle = wxControl::OS2GetStyle( lStyle
161 ,pdwExstyle
162 );
163
164 dwTabStyle |= WS_TABSTOP | BKS_SOLIDBIND | BKS_ROUNDEDTABS | BKS_TABTEXTCENTER | BKS_TABBEDDIALOG;
165
166 if (lStyle & wxBK_BOTTOM)
167 dwTabStyle |= BKS_MAJORTABBOTTOM | BKS_BACKPAGESBL;
168 else if (lStyle & wxBK_RIGHT)
169 dwTabStyle |= BKS_MAJORTABRIGHT | BKS_BACKPAGESBR;
170 else if (lStyle & wxBK_LEFT)
171 dwTabStyle |= BKS_MAJORTABLEFT | BKS_BACKPAGESTL;
172 else // default to top
173 dwTabStyle |= BKS_MAJORTABTOP | BKS_BACKPAGESTR;
174
175 //
176 // Ex style
177 //
178 if (pdwExstyle )
179 {
180 //
181 // Note that we never want to have the default WS_EX_CLIENTEDGE style
182 // as it looks too ugly for the notebooks
183 //
184 *pdwExstyle = 0;
185 }
186 return dwTabStyle;
187} // end of wxNotebook::OS2GetStyle
188
189// ----------------------------------------------------------------------------
190// wxNotebook accessors
191// ----------------------------------------------------------------------------
192
193size_t wxNotebook::GetPageCount() const
194{
195 //
196 // Consistency check
197 //
198 wxASSERT((int)m_pages.Count() == (int)::WinSendMsg(GetHWND(), BKM_QUERYPAGECOUNT, (MPARAM)0, (MPARAM)BKA_END));
199 return m_pages.Count();
200} // end of wxNotebook::GetPageCount
201
202int wxNotebook::GetRowCount() const
203{
204 return (int)::WinSendMsg( GetHWND()
205 ,BKM_QUERYPAGECOUNT
206 ,(MPARAM)0
207 ,(MPARAM)BKA_MAJOR
208 );
209} // end of wxNotebook::GetRowCount
210
211int wxNotebook::SetSelection( size_t nPage )
212{
213 wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") );
214
215 if (nPage != (size_t)m_nSelection)
216 {
217 wxNotebookEvent vEvent( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING
218 ,m_windowId
219 );
220
221 vEvent.SetSelection(nPage);
222 vEvent.SetOldSelection(m_nSelection);
223 vEvent.SetEventObject(this);
224 if (!GetEventHandler()->ProcessEvent(vEvent) || vEvent.IsAllowed())
225 {
226
227 //
228 // Program allows the page change
229 //
230 vEvent.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
231 GetEventHandler()->ProcessEvent(vEvent);
232
233 ::WinSendMsg( GetHWND()
234 ,BKM_TURNTOPAGE
235 ,MPFROMLONG((ULONG)m_alPageId[nPage])
236 ,(MPARAM)0
237 );
238 }
239 }
240 m_nSelection = nPage;
241 return nPage;
242} // end of wxNotebook::SetSelection
243
244bool wxNotebook::SetPageText( size_t nPage,
245 const wxString& rsStrText )
246{
247 wxCHECK_MSG( IS_VALID_PAGE(nPage), false, wxT("notebook page out of range") );
248 return (bool)::WinSendMsg( m_hWnd
249 ,BKM_SETTABTEXT
250 ,MPFROMLONG((ULONG)m_alPageId[nPage])
251 ,MPFROMP((PSZ)rsStrText.c_str())
252 );
253} // end of wxNotebook::SetPageText
254
255wxString wxNotebook::GetPageText ( size_t nPage ) const
256{
257 BOOKTEXT vBookText;
258 wxChar zBuf[256];
259 wxString sStr;
260 ULONG ulRc;
261
262 wxCHECK_MSG( IS_VALID_PAGE(nPage), wxEmptyString, wxT("notebook page out of range") );
263
264 memset(&vBookText, '\0', sizeof(BOOKTEXT));
265 vBookText.textLen = 0; // This will get the length
266 ulRc = LONGFROMMR(::WinSendMsg( m_hWnd
267 ,BKM_QUERYTABTEXT
268 ,MPFROMLONG((ULONG)m_alPageId[nPage])
269 ,MPFROMP(&vBookText)
270 ));
271 if (ulRc == (ULONG)BOOKERR_INVALID_PARAMETERS || ulRc == 0L)
272 {
273 if (ulRc == (ULONG)BOOKERR_INVALID_PARAMETERS)
274 {
275 wxLogError(wxT("Invalid Page Id for page text querry."));
276 }
277 return wxEmptyString;
278 }
279 vBookText.textLen = ulRc + 1; // To get the null terminator
280 vBookText.pString = (char*)zBuf;
281
282 //
283 // Now get the actual text
284 //
285 ulRc = LONGFROMMR(::WinSendMsg( m_hWnd
286 ,BKM_QUERYTABTEXT
287 ,MPFROMLONG((ULONG)m_alPageId[nPage])
288 ,MPFROMP(&vBookText)
289 ));
290 if (ulRc == (ULONG)BOOKERR_INVALID_PARAMETERS || ulRc == 0L)
291 {
292 return wxEmptyString;
293 }
294 if (ulRc > 255L)
295 ulRc = 255L;
296
297 vBookText.pString[ulRc] = '\0';
298 sStr = (wxChar*)vBookText.pString;
299 return sStr;
300} // end of wxNotebook::GetPageText
301
302int wxNotebook::GetPageImage ( size_t nPage ) const
303{
304 wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") );
305
306 //
307 // For OS/2 just return the page
308 //
309 return nPage;
310} // end of wxNotebook::GetPageImage
311
312bool wxNotebook::SetPageImage (
313 size_t nPage
314, int nImage
315)
316{
317 wxBitmap vBitmap = (wxBitmap)m_imageList->GetBitmap(nImage);
318
319 return (bool)::WinSendMsg( GetHWND()
320 ,BKM_SETTABBITMAP
321 ,MPFROMLONG((ULONG)m_alPageId[nPage])
322 ,(MPARAM)wxFlipBmp(vBitmap.GetHBITMAP())
323 );
324} // end of wxNotebook::SetPageImage
325
326void wxNotebook::SetImageList (
327 wxImageList* pImageList
328)
329{
330 //
331 // Does not really do anything yet, but at least we need to
332 // update the base class.
333 //
334 wxNotebookBase::SetImageList(pImageList);
335} // end of wxNotebook::SetImageList
336
337// ----------------------------------------------------------------------------
338// wxNotebook size settings
339// ----------------------------------------------------------------------------
340void wxNotebook::SetPageSize (
341 const wxSize& rSize
342)
343{
344 SetSize(rSize);
345} // end of wxNotebook::SetPageSize
346
347void wxNotebook::SetPadding (
348 const wxSize& WXUNUSED(rPadding)
349)
350{
351 //
352 // No padding in OS/2
353 //
354} // end of wxNotebook::SetPadding
355
356void wxNotebook::SetTabSize (
357 const wxSize& rSize
358)
359{
360 ::WinSendMsg( GetHWND()
361 ,BKM_SETDIMENSIONS
362 ,MPFROM2SHORT( (USHORT)rSize.x
363 ,(USHORT)rSize.y
364 )
365 ,(MPARAM)BKA_MAJORTAB
366 );
367} // end of wxNotebook::SetTabSize
368
369// ----------------------------------------------------------------------------
370// wxNotebook operations
371// ----------------------------------------------------------------------------
372
373//
374// Remove one page from the notebook, without deleting
375//
376wxNotebookPage* wxNotebook::DoRemovePage ( size_t nPage )
377{
378 wxNotebookPage* pPageRemoved = wxNotebookBase::DoRemovePage(nPage);
379
380 if (!pPageRemoved)
381 return NULL;
382
383 ::WinSendMsg( GetHWND()
384 ,BKM_DELETEPAGE
385 ,MPFROMLONG((ULONG)m_alPageId[nPage])
386 ,(MPARAM)BKA_TAB
387 );
388 if (m_pages.IsEmpty())
389 {
390 //
391 // No selection any more, the notebook becamse empty
392 //
393 m_nSelection = -1;
394 }
395 else // notebook still not empty
396 {
397 //
398 // Change the selected page if it was deleted or became invalid
399 //
400 int nSelNew;
401
402 if (m_nSelection == (int)GetPageCount())
403 {
404 //
405 // Last page deleted, make the new last page the new selection
406 //
407 nSelNew = m_nSelection - 1;
408 }
409 else if (nPage <= (size_t)m_nSelection)
410 {
411 //
412 // We must show another page, even if it has the same index
413 //
414 nSelNew = m_nSelection;
415 }
416 else // nothing changes for the currently selected page
417 {
418 nSelNew = -1;
419
420 //
421 // We still must refresh the current page: this needs to be done
422 // for some unknown reason if the tab control shows the up-down
423 // control (i.e. when there are too many pages) -- otherwise after
424 // deleting a page nothing at all is shown
425 //
426 m_pages[m_nSelection]->Refresh();
427 }
428
429 if (nSelNew != -1)
430 {
431 //
432 // m_nSelection must be always valid so reset it before calling
433 // SetSelection()
434 //
435 m_nSelection = -1;
436 SetSelection(nSelNew);
437 }
438 }
439 return pPageRemoved;
440} // end of wxNotebook::DoRemovePage
441
442//
443// Remove all pages
444//
445bool wxNotebook::DeleteAllPages()
446{
447 int nPageCount = GetPageCount();
448 int nPage;
449
450 for (nPage = 0; nPage < nPageCount; nPage++)
451 delete m_pages[nPage];
452 m_pages.Clear();
453 ::WinSendMsg( GetHWND()
454 ,BKM_DELETEPAGE
455 ,(MPARAM)0
456 ,(MPARAM)BKA_ALL
457 );
458 m_nSelection = -1;
459
460 return true;
461} // end of wxNotebook::DeleteAllPages
462
463//
464// Add a page to the notebook
465//
466bool wxNotebook::AddPage (
467 wxNotebookPage* pPage
468, const wxString& rStrText
469, bool bSelect
470, int nImageId
471)
472{
473 return InsertPage( GetPageCount()
474 ,pPage
475 ,rStrText
476 ,bSelect
477 ,nImageId
478 );
479} // end of wxNotebook::AddPage
480
481//
482// Same as AddPage() but does it at given position
483//
484bool wxNotebook::InsertPage ( size_t nPage,
485 wxNotebookPage* pPage,
486 const wxString& rsStrText,
487 bool bSelect,
488 int nImageId )
489{
490 ULONG ulApiPage;
491
492 wxASSERT( pPage != NULL );
493 wxCHECK( IS_VALID_PAGE(nPage) || nPage == GetPageCount(), false );
494
495 //
496 // Under OS/2 we can only insert FIRST, LAST, NEXT or PREV. Requires
497 // two different calls to the API. Page 1 uses the BKA_FIRST. Subsequent
498 // pages use the previous page ID coupled with a BKA_NEXT call. Unlike
499 // Windows, OS/2 uses an internal Page ID to ID the pages.
500 //
501 // OS/2 also has a nice auto-size feature that automatically sizes the
502 // the attached window so we don't have to worry about the size of the
503 // window on the page.
504 //
505 if (nPage == 0)
506 {
507 ulApiPage = LONGFROMMR(::WinSendMsg( GetHWND()
508 ,BKM_INSERTPAGE
509 ,(MPARAM)0
510 ,MPFROM2SHORT(BKA_AUTOPAGESIZE | BKA_MAJOR, BKA_FIRST)
511 ));
512 if (ulApiPage == 0L)
513 {
514 ERRORID vError;
515 wxString sError;
516
517 vError = ::WinGetLastError(vHabmain);
518 sError = wxPMErrorToStr(vError);
519 return false;
520 }
521 m_alPageId.Insert((long)ulApiPage, nPage);
522 }
523 else
524 {
525 ulApiPage = LONGFROMMR(::WinSendMsg( GetHWND()
526 ,BKM_INSERTPAGE
527 ,MPFROMLONG((ULONG)m_alPageId[nPage - 1])
528 ,MPFROM2SHORT(BKA_AUTOPAGESIZE | BKA_MAJOR, BKA_NEXT)
529 ));
530 if (ulApiPage == 0L)
531 {
532 ERRORID vError;
533 wxString sError;
534
535 vError = ::WinGetLastError(vHabmain);
536 sError = wxPMErrorToStr(vError);
537 return false;
538 }
539 m_alPageId.Insert((long)ulApiPage, nPage);
540 }
541
542 //
543 // Associate a window handle with the page
544 //
545 if (pPage)
546 {
547 if (!::WinSendMsg( GetHWND()
548 ,BKM_SETPAGEWINDOWHWND
549 ,MPFROMLONG((ULONG)m_alPageId[nPage])
550 ,MPFROMHWND(pPage->GetHWND())
551 ))
552 return false;
553 }
554 //
555 // If the inserted page is before the selected one, we must update the
556 // index of the selected page
557 //
558 if (nPage <= (size_t)m_nSelection)
559 {
560 //
561 // One extra page added
562 //
563 m_nSelection++;
564 }
565
566 if (pPage)
567 {
568 //
569 // Save the pointer to the page
570 //
571 m_pages.Insert( pPage
572 ,nPage
573 );
574 }
575
576 //
577 // Now set TAB dimenstions
578 //
579
580 wxWindowDC vDC(this);
581 wxCoord nTextX;
582 wxCoord nTextY;
583
584 vDC.GetTextExtent(rsStrText, &nTextX, &nTextY);
585 nTextY *= 2;
586 nTextX = (wxCoord)(nTextX * 1.3);
587 if (nTextX > m_nTabSize)
588 {
589 m_nTabSize = nTextX;
590 ::WinSendMsg( GetHWND()
591 ,BKM_SETDIMENSIONS
592 ,MPFROM2SHORT((USHORT)m_nTabSize, (USHORT)nTextY)
593 ,(MPARAM)BKA_MAJORTAB
594 );
595 }
596 //
597 // Now set any TAB text
598 //
599 if (!rsStrText.empty())
600 {
601 if (!SetPageText( nPage
602 ,rsStrText
603 ))
604 return false;
605 }
606
607 //
608 // Now set any TAB bitmap image
609 //
610 if (nImageId != -1)
611 {
612 if (!SetPageImage( nPage
613 ,nImageId
614 ))
615 return false;
616 }
617
618 if (pPage)
619 {
620 //
621 // Don't show pages by default (we'll need to adjust their size first)
622 //
623 HWND hWnd = GetWinHwnd(pPage);
624
625 WinSetWindowULong( hWnd
626 ,QWL_STYLE
627 ,WinQueryWindowULong( hWnd
628 ,QWL_STYLE
629 ) & ~WS_VISIBLE
630 );
631
632 //
633 // This updates internal flag too - otherwise it will get out of sync
634 //
635 pPage->Show(false);
636 }
637
638 //
639 // Some page should be selected: either this one or the first one if there is
640 // still no selection
641 //
642 int nSelNew = -1;
643
644 if (bSelect)
645 nSelNew = nPage;
646 else if ( m_nSelection == -1 )
647 nSelNew = 0;
648
649 if (nSelNew != -1)
650 SetSelection(nSelNew);
651
652 InvalidateBestSize();
653
654 return true;
655} // end of wxNotebook::InsertPage
656
657// ----------------------------------------------------------------------------
658// wxNotebook callbacks
659// ----------------------------------------------------------------------------
660void wxNotebook::OnSize(
661 wxSizeEvent& rEvent
662)
663{
664 rEvent.Skip();
665} // end of wxNotebook::OnSize
666
667void wxNotebook::OnSelChange (
668 wxNotebookEvent& rEvent
669)
670{
671 //
672 // Is it our tab control?
673 //
674 if (rEvent.GetEventObject() == this)
675 {
676 int nPageCount = GetPageCount();
677 int nSel;
678 ULONG ulOS2Sel = (ULONG)rEvent.GetOldSelection();
679 bool bFound = false;
680
681 for (nSel = 0; nSel < nPageCount; nSel++)
682 {
683 if (ulOS2Sel == (ULONG)m_alPageId[nSel])
684 {
685 bFound = true;
686 break;
687 }
688 }
689
690 if (!bFound)
691 return;
692
693 m_pages[nSel]->Show(false);
694
695 ulOS2Sel = (ULONG)rEvent.GetSelection();
696
697 bFound = false;
698
699 for (nSel = 0; nSel < nPageCount; nSel++)
700 {
701 if (ulOS2Sel == (ULONG)m_alPageId[nSel])
702 {
703 bFound = true;
704 break;
705 }
706 }
707
708 if (!bFound)
709 return;
710
711 wxNotebookPage* pPage = m_pages[nSel];
712
713 pPage->Show(true);
714 m_nSelection = nSel;
715 }
716
717 //
718 // We want to give others a chance to process this message as well
719 //
720 rEvent.Skip();
721} // end of wxNotebook::OnSelChange
722
723void wxNotebook::OnSetFocus (
724 wxFocusEvent& rEvent
725)
726{
727 //
728 // This function is only called when the focus is explicitly set (i.e. from
729 // the program) to the notebook - in this case we don't need the
730 // complicated OnNavigationKey() logic because the programmer knows better
731 // what [s]he wants
732 //
733 // set focus to the currently selected page if any
734 //
735 if (m_nSelection != -1)
736 m_pages[m_nSelection]->SetFocus();
737 rEvent.Skip();
738} // end of wxNotebook::OnSetFocus
739
740void wxNotebook::OnNavigationKey (
741 wxNavigationKeyEvent& rEvent
742)
743{
744 if (rEvent.IsWindowChange())
745 {
746 //
747 // Change pages
748 //
749 AdvanceSelection(rEvent.GetDirection());
750 }
751 else
752 {
753 //
754 // We get this event in 2 cases
755 //
756 // a) one of our pages might have generated it because the user TABbed
757 // out from it in which case we should propagate the event upwards and
758 // our parent will take care of setting the focus to prev/next sibling
759 //
760 // or
761 //
762 // b) the parent panel wants to give the focus to us so that we
763 // forward it to our selected page. We can't deal with this in
764 // OnSetFocus() because we don't know which direction the focus came
765 // from in this case and so can't choose between setting the focus to
766 // first or last panel child
767 //
768 wxWindow* pParent = GetParent();
769
770 if (rEvent.GetEventObject() == pParent)
771 {
772 //
773 // No, it doesn't come from child, case (b): forward to a page
774 //
775 if (m_nSelection != -1)
776 {
777 //
778 // So that the page knows that the event comes from it's parent
779 // and is being propagated downwards
780 //
781 rEvent.SetEventObject(this);
782
783 wxWindow* pPage = m_pages[m_nSelection];
784
785 if (!pPage->GetEventHandler()->ProcessEvent(rEvent))
786 {
787 pPage->SetFocus();
788 }
789 //else: page manages focus inside it itself
790 }
791 else
792 {
793 //
794 // We have no pages - still have to give focus to _something_
795 //
796 SetFocus();
797 }
798 }
799 else
800 {
801 //
802 // It comes from our child, case (a), pass to the parent
803 //
804 if (pParent)
805 {
806 rEvent.SetCurrentFocus(this);
807 pParent->GetEventHandler()->ProcessEvent(rEvent);
808 }
809 }
810 }
811} // end of wxNotebook::OnNavigationKey
812
813// ----------------------------------------------------------------------------
814// wxNotebook base class virtuals
815// ----------------------------------------------------------------------------
816
817//
818// Override these 2 functions to do nothing: everything is done in OnSize
819//
820void wxNotebook::SetConstraintSizes( bool WXUNUSED(bRecurse) )
821{
822 //
823 // Don't set the sizes of the pages - their correct size is not yet known
824 //
825 wxControl::SetConstraintSizes(false);
826} // end of wxNotebook::SetConstraintSizes
827
828bool wxNotebook::DoPhase ( int WXUNUSED(nPhase) )
829{
830 return true;
831} // end of wxNotebook::DoPhase
832
833// ----------------------------------------------------------------------------
834// wxNotebook Windows message handlers
835// ----------------------------------------------------------------------------
836bool wxNotebook::OS2OnScroll ( int nOrientation,
837 WXWORD wSBCode,
838 WXWORD wPos,
839 WXHWND wControl )
840{
841 //
842 // Don't generate EVT_SCROLLWIN events for the WM_SCROLLs coming from the
843 // up-down control
844 //
845 if (wControl)
846 return false;
847 return wxNotebookBase::OS2OnScroll( nOrientation
848 ,wSBCode
849 ,wPos
850 ,wControl
851 );
852} // end of wxNotebook::OS2OnScroll
853
854#endif // wxUSE_NOTEBOOK