X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/28b22cccdebe7150a06b956e0e644023ab3de1a0..76e7cfab8fdb0c7862fd07e427af54181717fc62:/src/cocoa/notebook.mm diff --git a/src/cocoa/notebook.mm b/src/cocoa/notebook.mm index c77473f95a..c766bc4099 100644 --- a/src/cocoa/notebook.mm +++ b/src/cocoa/notebook.mm @@ -1,10 +1,9 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cocoa/notebook.mm +// Name: src/cocoa/notebook.mm // Purpose: wxNotebook // Author: David Elliott // Modified by: // Created: 2004/04/08 -// RCS-ID: $Id$ // Copyright: (c) 2004 David Elliott // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,12 +14,13 @@ #ifndef WX_PRECOMP #include "wx/app.h" - #include "wx/notebook.h" #endif //WX_PRECOMP +#include "wx/notebook.h" #include "wx/imaglist.h" #include "wx/cocoa/autorelease.h" #include "wx/cocoa/string.h" +#include "wx/cocoa/objc/objc_uniquifying.h" #import #import @@ -48,6 +48,7 @@ - (NSImage*)image; - (void)setImage:(NSImage*)image; @end // interface WXCTabViewImageItem : NSTabViewItem +WX_DECLARE_GET_OBJC_CLASS(WXCTabViewImageItem,NSTabViewItem) @implementation WXCTabViewImageItem : NSTabViewItem - (id)init @@ -64,6 +65,7 @@ - (void)dealloc { [m_image release]; + [super dealloc]; } - (NSSize)sizeOfLabel:(BOOL)shouldTruncateLabel @@ -119,18 +121,12 @@ } @end // implementation WXCTabViewImageItem : NSTabViewItem - -// ======================================================================== -// wxNotebookEvent -// ======================================================================== -DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING) -IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxNotifyEvent) +WX_IMPLEMENT_GET_OBJC_CLASS(WXCTabViewImageItem,NSTabViewItem) // ======================================================================== // wxNotebook // ======================================================================== -IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxControl) + BEGIN_EVENT_TABLE(wxNotebook, wxNotebookBase) END_EVENT_TABLE() WX_IMPLEMENT_COCOA_OWNER(wxNotebook,NSTabView,NSView,NSView) @@ -146,6 +142,23 @@ bool wxNotebook::Create(wxWindow *parent, wxWindowID winid, return false; m_cocoaNSView = NULL; SetNSTabView([[NSTabView alloc] initWithFrame:MakeDefaultNSRect(size)]); + + do + { + NSTabViewType tabViewType; + if(style & wxNB_TOP) + tabViewType = NSTopTabsBezelBorder; + else if(style & wxNB_LEFT) + tabViewType = NSLeftTabsBezelBorder; + else if(style & wxNB_RIGHT) + tabViewType = NSRightTabsBezelBorder; + else if(style & wxNB_BOTTOM) + tabViewType = NSBottomTabsBezelBorder; + else + break; + [GetNSTabView() setTabViewType:tabViewType]; + } while(0); + if(m_parent) m_parent->CocoaAddChild(this); SetInitialFrameRect(pos,size); @@ -180,7 +193,7 @@ wxNotebookPage *wxNotebook::DoRemovePage(size_t nPage) [tvitem retain]; [GetNSTabView() removeTabViewItem:tvitem]; // Remove the child window as a notebook page - wxASSERT([tvitem view] == page->GetNSViewForSuperview()); + wxASSERT(static_cast([tvitem view]) == page->GetNSViewForSuperview()); [tvitem setView:nil]; [tvitem release]; // Make it back into a normal child window @@ -200,9 +213,9 @@ bool wxNotebook::InsertPage( size_t pos, { wxAutoNSAutoreleasePool pool; m_pages.Insert(page,pos); - NSTabViewItem *tvitem = [[WXCTabViewImageItem alloc] initWithIdentifier:nil]; + NSTabViewItem *tvitem = [[WX_GET_OBJC_CLASS(WXCTabViewImageItem) alloc] initWithIdentifier:nil]; [tvitem setLabel: wxNSStringWithWxString(title)]; - const wxBitmap *bmp = (imageId!=-1)?m_imageList->GetBitmap(imageId):NULL; + const wxBitmap *bmp = (imageId!=-1)?m_imageList->GetBitmapPtr(imageId):NULL; if(bmp) [(WXCTabViewImageItem*) tvitem setImage: bmp->GetNSImage(true)]; @@ -250,7 +263,7 @@ int wxNotebook::GetPageImage(size_t nPage) const bool wxNotebook::SetPageImage(size_t nPage, int nImage) { - const wxBitmap *bmp = nImage!=-1?m_imageList->GetBitmap(nImage):NULL; + const wxBitmap *bmp = nImage!=-1?m_imageList->GetBitmapPtr(nImage):NULL; if(!bmp) return false; NSTabViewItem *tvitem = [GetNSTabView() tabViewItemAtIndex: nPage]; @@ -260,8 +273,23 @@ bool wxNotebook::SetPageImage(size_t nPage, int nImage) return true; } - int wxNotebook::SetSelection(size_t nPage) +{ + const int pageOld = GetSelection(); + + if ( !SendPageChangingEvent(nPage) ) + return pageOld; + + int page = ChangeSelection(nPage); + if ( page != wxNOT_FOUND ) + { + SendPageChangedEvent(pageOld); + } + + return page; +} + +int wxNotebook::ChangeSelection(size_t nPage) { wxAutoNSAutoreleasePool pool; [GetNSTabView() selectTabViewItemAtIndex:nPage]; @@ -272,24 +300,25 @@ int wxNotebook::GetSelection() const { NSTabViewItem *selectedItem = [GetNSTabView() selectedTabViewItem]; if(!selectedItem) - return -1; + return wxNOT_FOUND; return [GetNSTabView() indexOfTabViewItem:selectedItem]; } void wxNotebook::CocoaDelegate_tabView_didSelectTabViewItem(WX_NSTabViewItem tabViewItem) { // FIXME: oldSel probably == newSel - wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, GetId(), + wxBookCtrlEvent event(wxEVT_NOTEBOOK_PAGE_CHANGED, GetId(), [GetNSTabView() indexOfTabViewItem:tabViewItem], GetSelection()); event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); } bool wxNotebook::CocoaDelegate_tabView_shouldSelectTabViewItem(WX_NSTabViewItem tabViewItem) { - wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, GetId(), + wxBookCtrlEvent event(wxEVT_NOTEBOOK_PAGE_CHANGING, GetId(), [GetNSTabView() indexOfTabViewItem:tabViewItem], GetSelection()); event.SetEventObject(this); - return !GetEventHandler()->ProcessEvent(event) || event.IsAllowed(); + return !HandleWindowEvent(event) || event.IsAllowed(); } #endif // wxUSE_NOTEBOOK