]> git.saurik.com Git - wxWidgets.git/blobdiff - src/cocoa/notebook.mm
ensure that the copies of the bitmap passed to wxMemoryDC ctor are not modified when...
[wxWidgets.git] / src / cocoa / notebook.mm
index 5df800e872146ec2ee750641a7ee002426c9d440..0bad47d58d6fa270668cdd481b504b1487fcefbc 100644 (file)
@@ -6,18 +6,22 @@
 // Created:     2004/04/08
 // RCS-ID:      $Id$
 // Copyright:   (c) 2004 David Elliott
-// Licence:    wxWindows licence
+// Licence:    wxWidgets licence
 /////////////////////////////////////////////////////////////////////////////
 
 #include "wx/wxprec.h"
+
+#if wxUSE_NOTEBOOK
+
 #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 <AppKit/NSTabView.h>
 #import <AppKit/NSTabViewItem.h>
@@ -45,6 +49,7 @@
 - (NSImage*)image;
 - (void)setImage:(NSImage*)image;
 @end // interface WXCTabViewImageItem : NSTabViewItem
+WX_DECLARE_GET_OBJC_CLASS(WXCTabViewImageItem,NSTabViewItem)
 
 @implementation WXCTabViewImageItem : NSTabViewItem
 - (id)init
@@ -61,6 +66,7 @@
 - (void)dealloc
 {
     [m_image release];
+    [super dealloc];
 }
 
 - (NSSize)sizeOfLabel:(BOOL)shouldTruncateLabel
 }
 
 @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)
+IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxBookCtrlBase)
 BEGIN_EVENT_TABLE(wxNotebook, wxNotebookBase)
 END_EVENT_TABLE()
 WX_IMPLEMENT_COCOA_OWNER(wxNotebook,NSTabView,NSView,NSView)
@@ -143,6 +143,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);
@@ -177,7 +194,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<NSView*>([tvitem view]) == page->GetNSViewForSuperview());
     [tvitem setView:nil];
     [tvitem release];
     // Make it back into a normal child window
@@ -197,9 +214,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)];
 
@@ -247,7 +264,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];
@@ -257,8 +274,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];
@@ -276,16 +308,18 @@ int wxNotebook::GetSelection() const
 void wxNotebook::CocoaDelegate_tabView_didSelectTabViewItem(WX_NSTabViewItem tabViewItem)
 {
     // FIXME: oldSel probably == newSel
-    wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, GetId(),
+    wxBookCtrlEvent event(wxEVT_COMMAND_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_COMMAND_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