#endif
#include "wx/cocoa/autorelease.h"
+#include "wx/cocoa/string.h"
#include "wx/cocoa/trackingrectmanager.h"
#include "wx/cocoa/objc/objc_uniquifying.h"
+#include "wx/cocoa/objc/NSView.h"
#import <AppKit/NSControl.h>
#import <AppKit/NSCell.h>
#include <math.h>
-@interface wxNonControlNSControl : NSControl
-{
-}
-
-- (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;
-- (void)viewDidMoveToWindow;
-- (void)viewWillMoveToWindow:(NSWindow *)newWindow;
-@end // wxNonControlNSControl
-WX_DECLARE_GET_OBJC_CLASS(wxNonControlNSControl,NSControl)
-
-@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];
-}
-
-- (void)viewDidMoveToWindow
-{
- wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
- if( !win || !win->Cocoa_viewDidMoveToWindow() )
- [super viewDidMoveToWindow];
-}
-
-- (void)viewWillMoveToWindow:(NSWindow *)newWindow
-{
- wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa(self);
- if( !win || !win->Cocoa_viewWillMoveToWindow(newWindow) )
- [super viewWillMoveToWindow:newWindow];
-}
-
-@end // wxNonControlNSControl
-WX_IMPLEMENT_GET_OBJC_CLASS(wxNonControlNSControl,NSControl)
-
IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow)
BEGIN_EVENT_TABLE(wxControl, wxControlBase)
END_EVENT_TABLE()
return false;
wxLogTrace(wxTRACE_COCOA,wxT("Created control with id=%d"),GetId());
m_cocoaNSView = NULL;
- SetNSControl([[WX_GET_OBJC_CLASS(wxNonControlNSControl) alloc] initWithFrame: MakeDefaultNSRect(size)]);
+ SetNSControl([[WX_GET_OBJC_CLASS(WXNSView) alloc] initWithFrame: MakeDefaultNSRect(size)]);
// NOTE: YES we want to release this (to match the alloc).
// DoAddChild(this) will retain us again since addSubView doesn't.
[m_cocoaNSView release];
- [GetNSControl() sizeToFit];
-
if(m_parent)
m_parent->CocoaAddChild(this);
SetInitialFrameRect(pos,size);
wxASSERT(GetNSControl());
/* We can ask single-celled controls for their cell and get its size */
NSCell *cell = nil;
-NS_DURING
- cell = [GetNSControl() cell];
-NS_HANDLER
- // TODO: if anything other than method not implemented, re-raise
-NS_ENDHANDLER
+ if([GetNSControl() respondsToSelector:@selector(cell)])
+ cell = [GetNSControl() cell];
if(cell)
{
NSSize cellSize = [cell cellSize];
}
/* multi-celled control? size to fit, get the size, then set it back */
- NSRect storedRect = [m_cocoaNSView frame];
- bool didFit = false;
-NS_DURING
- [GetNSControl() sizeToFit];
- didFit = true;
-NS_HANDLER
- // TODO: if anything other than method not implemented, re-raise
-NS_ENDHANDLER
- if(didFit)
+ if([GetNSControl() respondsToSelector:@selector(sizeToFit)])
{
+ NSRect storedRect = [m_cocoaNSView frame];
+ [GetNSControl() sizeToFit];
NSRect cocoaRect = [m_cocoaNSView frame];
wxSize size((int)ceil(cocoaRect.size.width),(int)ceil(cocoaRect.size.height));
[m_cocoaNSView setFrame: storedRect];
bool wxControl::ProcessCommand(wxCommandEvent& event)
{
- return GetEventHandler()->ProcessEvent(event);
+ return HandleWindowEvent(event);
}
void wxControl::CocoaSetEnabled(bool enable)
{
- [GetNSControl() setEnabled: enable];
+ if([GetNSControl() respondsToSelector:@selector(setEnabled:)])
+ [GetNSControl() setEnabled: enable];
}
+
+/*static*/ void wxControl::CocoaSetLabelForObject(const wxString& label, struct objc_object *aView)
+{
+ [aView setTitle:wxNSStringWithWxString(GetLabelText(label))];
+}
+