]> git.saurik.com Git - wxWidgets.git/commitdiff
Remove Objective-C class posing for everything except for NSApplication.
authorDavid Elliott <dfe@tgwbd.org>
Fri, 20 Apr 2007 22:27:56 +0000 (22:27 +0000)
committerDavid Elliott <dfe@tgwbd.org>
Fri, 20 Apr 2007 22:27:56 +0000 (22:27 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45554 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
include/wx/cocoa/menu.h
include/wx/cocoa/objc/NSMenu.h
include/wx/cocoa/objc/NSView.h
include/wx/cocoa/objc/NSWindow.h
src/cocoa/NSMenu.mm
src/cocoa/NSView.mm
src/cocoa/NSWindow.mm
src/cocoa/control.mm
src/cocoa/frame.mm
src/cocoa/menu.mm
src/cocoa/radiobox.mm
src/cocoa/toplevel.mm
src/cocoa/window.mm

index 21ceed2f327685128c28df81e74c0348c8f5510e..479afe083b396222f1e104285ddb49b1da41d2b5 100644 (file)
@@ -73,7 +73,7 @@ private:
 // ========================================================================
 // wxMenuBar
 // ========================================================================
-class WXDLLEXPORT wxMenuBar : public wxMenuBarBase, public wxCocoaNSMenu
+class WXDLLEXPORT wxMenuBar : public wxMenuBarBase
 {
 public:
     // ctors and dtor
index 88df42043fdd1db0e4a8c4121571907a3763b555..f9211ddfb022b12b5b7fe09378239f9d2570da7b 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Name:        wx/cocoa/objc/NSMenu.h
-// Purpose:     wxPoserNSMenu class
+// Purpose:     WXNSMenu class
 // Author:      David Elliott
 // Modified by:
 // Created:     2007/04/20 (move from NSMenu.mm)
 #import <AppKit/NSMenu.h>
 
 // ============================================================================
-// @class wxPoserNSMenu
+// @class WXNSMenu
 // ============================================================================
-@interface wxPoserNSMenu : NSMenu
+@interface WXNSMenu : NSMenu
 {
 }
 
 - (void)dealloc;
 
-@end // wxPoserNSMenu
+@end // WXNSMenu
 
 #endif //ndef __WX_COCOA_OBJC_NSMENU_H__
index 58c4f5101d2413b0034b75b1c29302ba51023949..4bedd94b4fd1dc73d54355fdc1ef9852c8b7c85c 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Name:        wx/cocoa/objc/NSView.h
-// Purpose:     wxPoserNSView class
+// Purpose:     WXNSView class
 // Author:      David Elliott
 // Modified by:
 // Created:     2007/04/20 (move from NSView.mm)
@@ -15,9 +15,9 @@
 #import <AppKit/NSView.h>
 
 // ============================================================================
-// @class wxPoserNSView
+// @class WXNSView
 // ============================================================================
-@interface wxPoserNSView : NSView
+@interface WXNSView : NSView
 {
 }
 
@@ -35,6 +35,6 @@
 - (void)otherMouseDragged:(NSEvent *)theEvent;
 - (void)otherMouseUp:(NSEvent *)theEvent;
 - (void)resetCursorRects;
-@end // wxPoserNSView
+@end // WXNSView
 
 #endif //ndef __WX_COCOA_OBJC_NSVIEW_H__
index 91109254d2c28318cd9bc6aa056d963b910eac7c..56ba3e151b133f2feb2a4d30485e00c874184c50 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Name:        wx/cocoa/objc/NSWindow.h
-// Purpose:     wxPoserNSWindow class
+// Purpose:     WXNSWindow class
 // Author:      David Elliott
 // Modified by:
 // Created:     2007/04/20 (move from NSWindow.mm)
 ///////////////////////////////////////////////////////////////////////////////
 
 #import <AppKit/NSWindow.h>
+#import <AppKit/NSPanel.h>
 
 // ============================================================================
-// @class wxPoserNSWindow
+// @class WXNSWindow
 // ============================================================================
-@interface wxPoserNSWindow : NSWindow
+@interface WXNSWindow : NSWindow
 {
 }
 
 - (BOOL)canBecomeKeyWindow;
 - (BOOL)canBecomeMainWindow;
-@end // wxPoserNSwindow
+@end // WXNSWindow
+
+// ============================================================================
+// @class WXNSPanel
+// ============================================================================
+@interface WXNSPanel : NSPanel
+{
+}
+
+- (BOOL)canBecomeKeyWindow;
+- (BOOL)canBecomeMainWindow;
+@end // WXNSPanel
 
index 40226cd5a2b7c2736dd6f678c8197d5554cd47c3..18451658af990f780748a5cf606fc4fa8ea8d00a 100644 (file)
 #include "wx/cocoa/objc/NSMenu.h"
 
 // ============================================================================
-// @class wxPoserNSMenu
+// @class WXNSMenu
 // ============================================================================
 
-WX_IMPLEMENT_POSER(wxPoserNSMenu);
-@implementation wxPoserNSMenu : NSMenu
+@implementation WXNSMenu : NSMenu
 
 - (void)dealloc
 {
@@ -36,7 +35,7 @@ WX_IMPLEMENT_POSER(wxPoserNSMenu);
     [super dealloc];
 }
 
-@end // wxPoserNSMenu
+@end // WXNSMenu
 
 // ============================================================================
 // @class wxNSMenuNotificationObserver
index db8d47e61863673a685f82d5af0a67464e3afadd..7d864f2e309088494c2567132f9741c575b18733 100644 (file)
@@ -54,10 +54,10 @@ void wxCocoaNSView::DisassociateNSView(WX_NSView cocoaNSView)
 }
 
 // ============================================================================
-// @class wxPoserNSView
+// @class WXNSView
 // ============================================================================
-WX_IMPLEMENT_POSER(wxPoserNSView);
-@implementation wxPoserNSView : NSView
+
+@implementation WXNSView : NSView
 
 - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
 {
@@ -166,7 +166,7 @@ WX_IMPLEMENT_POSER(wxPoserNSView);
         [super resetCursorRects];
 }
 
-@end // implementation wxPoserNSView
+@end // implementation WXNSView
 
 @interface wxNSViewNotificationObserver : NSObject
 {
index 2a75aac9c07e177c89167a98b31f1ce174c8f76b..a18760ee592885f9604ef354564dd6076c2816da 100644 (file)
@@ -187,10 +187,9 @@ wxMenuBar* wxCocoaNSWindow::GetAppMenuBar(wxCocoaNSWindow *win)
 }
 
 // ============================================================================
-// @class wxPoserNSWindow
+// @class WXNSWindow
 // ============================================================================
-WX_IMPLEMENT_POSER(wxPoserNSWindow);
-@implementation wxPoserNSWindow : NSWindow
+@implementation WXNSWindow : NSWindow
 
 - (BOOL)canBecomeKeyWindow
 {
@@ -210,4 +209,29 @@ WX_IMPLEMENT_POSER(wxPoserNSWindow);
     return canBecome;
 }
 
-@end // implementation wxPoserNSWindow
+@end // implementation WXNSWindow
+
+// ============================================================================
+// @class WXNSPanel
+// ============================================================================
+@implementation WXNSPanel : NSPanel
+
+- (BOOL)canBecomeKeyWindow
+{
+    bool canBecome = false;
+    wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
+    if(!tlw || !tlw->Cocoa_canBecomeKeyWindow(canBecome))
+        canBecome = [super canBecomeKeyWindow];
+    return canBecome;
+}
+
+- (BOOL)canBecomeMainWindow
+{
+    bool canBecome = false;
+    wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
+    if(!tlw || !tlw->Cocoa_canBecomeMainWindow(canBecome))
+        canBecome = [super canBecomeMainWindow];
+    return canBecome;
+}
+
+@end // implementation WXNSPanel
index 3bb9b1b29fd4e14cddc9d43a6d12aff349cb7363..1d14483d6df9db6f402dfc232e558ff06f5819a1 100644 (file)
 }
 
 - (void)drawRect: (NSRect)rect;
+- (void)mouseDown:(NSEvent *)theEvent;
+- (void)mouseDragged:(NSEvent *)theEvent;
+- (void)mouseUp:(NSEvent *)theEvent;
+- (void)mouseMoved:(NSEvent *)theEvent;
+- (void)mouseEntered:(NSEvent *)theEvent;
+- (void)mouseExited:(NSEvent *)theEvent;
+- (void)rightMouseDown:(NSEvent *)theEvent;
+- (void)rightMouseDragged:(NSEvent *)theEvent;
+- (void)rightMouseUp:(NSEvent *)theEvent;
+- (void)otherMouseDown:(NSEvent *)theEvent;
+- (void)otherMouseDragged:(NSEvent *)theEvent;
+- (void)otherMouseUp:(NSEvent *)theEvent;
+- (void)resetCursorRects;
 @end // wxNonControlNSControl
 
 @implementation wxNonControlNSControl : NSControl
+
+- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
+{
+    bool acceptsFirstMouse = false;
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if(!win || !win->Cocoa_acceptsFirstMouse(acceptsFirstMouse, theEvent))
+        acceptsFirstMouse = [super acceptsFirstMouse:theEvent];
+    return acceptsFirstMouse;
+}
+
 - (void)drawRect: (NSRect)rect
 {
     wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
     if( !win || !win->Cocoa_drawRect(rect) )
         [super drawRect:rect];
 }
+
+- (void)mouseDown:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_mouseDown(theEvent) )
+        [super mouseDown:theEvent];
+}
+
+- (void)mouseDragged:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_mouseDragged(theEvent) )
+        [super mouseDragged:theEvent];
+}
+
+- (void)mouseUp:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_mouseUp(theEvent) )
+        [super mouseUp:theEvent];
+}
+
+- (void)mouseMoved:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_mouseMoved(theEvent) )
+        [super mouseMoved:theEvent];
+}
+
+- (void)mouseEntered:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_mouseEntered(theEvent) )
+        [super mouseEntered:theEvent];
+}
+
+- (void)mouseExited:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_mouseExited(theEvent) )
+        [super mouseExited:theEvent];
+}
+
+- (void)rightMouseDown:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_rightMouseDown(theEvent) )
+        [super rightMouseDown:theEvent];
+}
+
+- (void)rightMouseDragged:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_rightMouseDragged(theEvent) )
+        [super rightMouseDragged:theEvent];
+}
+
+- (void)rightMouseUp:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_rightMouseUp(theEvent) )
+        [super rightMouseUp:theEvent];
+}
+
+- (void)otherMouseDown:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_otherMouseDown(theEvent) )
+        [super otherMouseDown:theEvent];
+}
+
+- (void)otherMouseDragged:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_otherMouseDragged(theEvent) )
+        [super otherMouseDragged:theEvent];
+}
+
+- (void)otherMouseUp:(NSEvent *)theEvent
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_otherMouseUp(theEvent) )
+        [super otherMouseUp:theEvent];
+}
+
+- (void)resetCursorRects
+{
+    wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
+    if( !win || !win->Cocoa_resetCursorRects() )
+        [super resetCursorRects];
+}
+
 @end // wxNonControlNSControl
 
 IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow)
index 4a3569d81e6dea670c1666c54f80d66d723166ba..dd494c88dff6e4556a7d5712a236071e4127b14c 100644 (file)
@@ -170,7 +170,7 @@ void wxFrame::CocoaReplaceView(WX_NSView oldView, WX_NSView newView)
 void wxFrame::UpdateFrameNSView()
 {
     if(!m_frameNSView)
-    {
+    {  // NOTE: We only need a plain NSView here since we don't associate it with ourselves.
         m_frameNSView = [[NSView alloc] initWithFrame:[[m_cocoaNSWindow contentView] frame]];
         [m_cocoaNSWindow setContentView: m_frameNSView];
         [m_frameNSView addSubview:m_cocoaNSView];
index 27cc125141c11b41016a05e2d254cea5fb7411d5..55e0f3035b114a4dcfac97a530005ae091435712 100644 (file)
@@ -29,7 +29,7 @@
 #include "wx/cocoa/string.h"
 
 #import <Foundation/NSString.h>
-#import <AppKit/NSMenu.h>
+#include "wx/cocoa/objc/NSMenu.h"
 
 #if wxUSE_MENUS
 
@@ -46,7 +46,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxMenu,wxEvtHandler)
 bool wxMenu::Create(const wxString& title, long style)
 {
     wxAutoNSAutoreleasePool pool;
-    m_cocoaNSMenu = [[NSMenu alloc] initWithTitle: wxNSStringWithWxString(title)];
+    m_cocoaNSMenu = [[WXNSMenu alloc] initWithTitle: wxNSStringWithWxString(title)];
     AssociateNSMenu(m_cocoaNSMenu);
     return true;
 }
index a6e87e742f7dac6a851f09b467b418b0ff78cb1c..4b4f7522e25466401b1faa1af5d00edf87079e34 100644 (file)
@@ -20,7 +20,7 @@
     #include "wx/arrstr.h"
 #endif //WX_PRECOMP
 
-#import <AppKit/NSView.h>
+#include "wx/cocoa/objc/NSView.h"
 
 IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
 BEGIN_EVENT_TABLE(wxRadioBox, wxControl)
@@ -53,7 +53,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid,
 {
     if(!CreateControl(parent,winid,pos,size,style,validator,name))
         return false;
-    SetNSView([[NSView alloc] initWithFrame: MakeDefaultNSRect(size)]);
+    SetNSView([[WXNSView alloc] initWithFrame: MakeDefaultNSRect(size)]);
     [m_cocoaNSView release];
     if(m_parent)
         m_parent->CocoaAddChild(this);
index 1a5379ff5290992be112e8699a304870384b545e..fbcf064b1b7d938a27f21c1e3f399111150519fb 100644 (file)
@@ -33,8 +33,8 @@
 #include "wx/cocoa/autorelease.h"
 #include "wx/cocoa/string.h"
 
-#import <AppKit/NSView.h>
-#import <AppKit/NSWindow.h>
+#include "wx/cocoa/objc/NSView.h"
+#include "wx/cocoa/objc/NSWindow.h"
 #import <AppKit/NSPanel.h>
 // ----------------------------------------------------------------------------
 // globals
@@ -131,10 +131,18 @@ bool wxTopLevelWindowCocoa::Create(wxWindow *parent,
 
     m_cocoaNSWindow = NULL;
     m_cocoaNSView = NULL;
+    // NOTE: We may need to deal with the contentView becoming a wx NSView as well.
+    NSWindow *newWindow;
+    // Create a WXNSPanel or a WXNSWindow depending on what type of window is desired.
     if(style & wxFRAME_TOOL_WINDOW)
-        SetNSWindow([[NSPanel alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]);
+        newWindow = [[WXNSPanel alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO];
     else
-        SetNSWindow([[NSWindow alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]);
+        newWindow = [[WXNSWindow alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO];
+    // Make sure the default content view is a WXNSView
+    [newWindow setContentView: [[WXNSView alloc] initWithFrame: [[newWindow contentView] frame]]];
+    // Associate the window and view
+    SetNSWindow(newWindow);
+
     // NOTE: SetNSWindow has retained the Cocoa object for this object.
     // Because we do not release on close, the following release matches the
     // above alloc and thus the retain count will be 1.
@@ -188,6 +196,8 @@ void wxTopLevelWindowCocoa::SetNSWindow(WX_NSWindow cocoaNSWindow)
     [cocoaNSWindow retain];
     [m_cocoaNSWindow release];
     m_cocoaNSWindow = cocoaNSWindow;
+    // NOTE: We are no longer using posing so we won't get events on the
+    // window's view unless it was explicitly created as the wx view class.
     if(m_cocoaNSWindow)
         SetNSView([m_cocoaNSWindow contentView]);
     else
index 91bb13ef99c92e72a0f9805eb97d188ec6b906dc..13024b9f67201304dcb56ada7b959aee5a56045e 100644 (file)
@@ -23,7 +23,7 @@
 #include "wx/cocoa/autorelease.h"
 #include "wx/cocoa/string.h"
 
-#import <AppKit/NSView.h>
+#include "wx/cocoa/objc/NSView.h"
 #import <AppKit/NSEvent.h>
 #import <AppKit/NSScrollView.h>
 #import <AppKit/NSColor.h>
@@ -327,7 +327,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID winid,
 
     // TODO: create the window
     m_cocoaNSView = NULL;
-    SetNSView([[NSView alloc] initWithFrame: MakeDefaultNSRect(size)]);
+    SetNSView([[WXNSView alloc] initWithFrame: MakeDefaultNSRect(size)]);
     [m_cocoaNSView release];
 
     if (m_parent)