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