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