#endif
#include "wx/cocoa/autorelease.h"
+#include "wx/cocoa/string.h"
+#include "wx/cocoa/trackingrectmanager.h"
+#include "wx/cocoa/objc/objc_uniquifying.h"
#import <AppKit/NSControl.h>
#import <AppKit/NSCell.h>
- (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
[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)
return false;
wxLogTrace(wxTRACE_COCOA,wxT("Created control with id=%d"),GetId());
m_cocoaNSView = NULL;
- SetNSControl([[wxNonControlNSControl alloc] initWithFrame: MakeDefaultNSRect(size)]);
+ SetNSControl([[WX_GET_OBJC_CLASS(wxNonControlNSControl) 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];
m_parent->CocoaAddChild(this);
SetInitialFrameRect(pos,size);
+ // Controls should have a viewable-area tracking rect by default
+ m_visibleTrackingRectManager = new wxCocoaTrackingRectManager(this);
+
return true;
}
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];
{
[GetNSControl() setEnabled: enable];
}
+
+/*static*/ void wxControl::CocoaSetLabelForObject(const wxString& label, struct objc_object *aView)
+{
+ [aView setTitle:wxNSStringWithWxString(GetLabelText(label))];
+}
+