committing current cocoa state just to be safe ...
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55366 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -33,8 +33,7 @@ wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
					    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    [v setBezelStyle:NSRegularSquareBezelStyle];
 | 
					    [v setBezelStyle:NSRegularSquareBezelStyle];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ wxSize wxButton::DoGetBestSize() const
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        case wxWINDOW_VARIANT_NORMAL:
 | 
					        case wxWINDOW_VARIANT_NORMAL:
 | 
				
			||||||
        case wxWINDOW_VARIANT_LARGE:
 | 
					        case wxWINDOW_VARIANT_LARGE:
 | 
				
			||||||
            sz.y = 20 ;
 | 
					            sz.y = 23 ;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case wxWINDOW_VARIANT_SMALL:
 | 
					        case wxWINDOW_VARIANT_SMALL:
 | 
				
			||||||
@@ -49,6 +49,21 @@ wxSize wxButton::DoGetBestSize() const
 | 
				
			|||||||
            break;
 | 
					            break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxRect r ;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    m_peer->GetBestRect(&r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( r.GetWidth() == 0 && r.GetHeight() == 0 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    sz.x = r.GetWidth();
 | 
				
			||||||
 | 
					    sz.y = r.GetHeight();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int wBtn = 96;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if ((wBtn > sz.x) || ( GetWindowStyle() & wxBU_EXACTFIT))
 | 
				
			||||||
 | 
					        sz.x = wBtn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxOSX_USE_CARBON
 | 
					#if wxOSX_USE_CARBON
 | 
				
			||||||
    Rect    bestsize = { 0 , 0 , 0 , 0 } ;
 | 
					    Rect    bestsize = { 0 , 0 , 0 , 0 } ;
 | 
				
			||||||
    m_peer->GetBestRect( &bestsize ) ;
 | 
					    m_peer->GetBestRect( &bestsize ) ;
 | 
				
			||||||
@@ -111,7 +126,7 @@ wxSize wxButton::GetDefaultSize()
 | 
				
			|||||||
- (id)initWithFrame:(NSRect)frame
 | 
					- (id)initWithFrame:(NSRect)frame
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [super initWithFrame:frame];
 | 
					    [super initWithFrame:frame];
 | 
				
			||||||
    m_impl = NULL;
 | 
					    impl = NULL;
 | 
				
			||||||
    [self setTarget: self];
 | 
					    [self setTarget: self];
 | 
				
			||||||
    [self setAction: @selector(clickedAction:)];
 | 
					    [self setAction: @selector(clickedAction:)];
 | 
				
			||||||
    return self;
 | 
					    return self;
 | 
				
			||||||
@@ -119,9 +134,9 @@ wxSize wxButton::GetDefaultSize()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- (void) clickedAction: (id) sender
 | 
					- (void) clickedAction: (id) sender
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if ( m_impl )
 | 
					    if ( impl )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        wxButton* wxpeer = (wxButton*) m_impl->GetWXPeer();
 | 
					        wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
 | 
				
			||||||
        if ( wxpeer )
 | 
					        if ( wxpeer )
 | 
				
			||||||
            wxpeer->HandleClicked(0);
 | 
					            wxpeer->HandleClicked(0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -129,12 +144,12 @@ wxSize wxButton::GetDefaultSize()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_impl = theImplementation;
 | 
					    impl = theImplementation;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (wxWidgetImpl*) implementation
 | 
					- (wxWidgetImpl*) implementation
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return m_impl;
 | 
					    return impl;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (BOOL) isFlipped
 | 
					- (BOOL) isFlipped
 | 
				
			||||||
@@ -185,8 +200,7 @@ wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
					    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if ( id == wxID_HELP )
 | 
					    if ( id == wxID_HELP )
 | 
				
			||||||
@@ -256,12 +270,33 @@ wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void wxWidgetCocoaImpl::SetDefaultButton( bool isDefault )
 | 
					void wxWidgetCocoaImpl::SetDefaultButton( bool isDefault )
 | 
				
			||||||
{ 
 | 
					{ 
 | 
				
			||||||
    [m_osxView setKeyEquivalent: isDefault ? @"\r" : nil ];
 | 
					    if ( [m_osxView isKindOfClass:[NSButton class]] )
 | 
				
			||||||
//    SetData(kControlButtonPart , kControlPushButtonDefaultTag , (Boolean) isDefault ) ;
 | 
					        [(NSButton*)m_osxView setKeyEquivalent: isDefault ? @"\r" : nil ];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxWidgetCocoaImpl::PerformClick() 
 | 
					void wxWidgetCocoaImpl::PerformClick() 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO for the disclosure button : NSDisclosureBezelStyle and the button type to NSOnOffButton.
 | 
					wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer, 
 | 
				
			||||||
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
 | 
					                                    const wxString& label,
 | 
				
			||||||
 | 
					                                    const wxPoint& pos, 
 | 
				
			||||||
 | 
					                                    const wxSize& size,
 | 
				
			||||||
 | 
					                                    long style, 
 | 
				
			||||||
 | 
					                                    long extraStyle) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
 | 
					    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
				
			||||||
 | 
					    [v setBezelStyle:NSDisclosureBezelStyle];
 | 
				
			||||||
 | 
					    [v setButtonType:NSOnOffButton];
 | 
				
			||||||
 | 
					    [v setTitle:wxCFStringRef( label).AsNSString()];
 | 
				
			||||||
 | 
					    [v setImagePosition:NSImageRight];
 | 
				
			||||||
 | 
					    [sv addSubview:v];
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
				
			||||||
 | 
					    [v setImplementation:c];
 | 
				
			||||||
 | 
					    return c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,8 +27,7 @@ wxWidgetImplType* wxWidgetImpl::CreateCheckBox( wxWindowMac* wxpeer,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
					    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [v setButtonType:NSSwitchButton];    
 | 
					    [v setButtonType:NSSwitchButton];    
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										105
									
								
								src/osx/cocoa/choice.mm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								src/osx/cocoa/choice.mm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        src/osx/cocoa/choice.mm
 | 
				
			||||||
 | 
					// Purpose:     wxChoice
 | 
				
			||||||
 | 
					// Author:      Stefan Csomor
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     1998-01-01
 | 
				
			||||||
 | 
					// RCS-ID:      $Id: choice.cpp 54129 2008-06-11 19:30:52Z SC $
 | 
				
			||||||
 | 
					// Copyright:   (c) Stefan Csomor
 | 
				
			||||||
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/wxprec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_CHOICE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/choice.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef WX_PRECOMP
 | 
				
			||||||
 | 
					    #include "wx/menu.h"
 | 
				
			||||||
 | 
					    #include "wx/dcclient.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSPopUpButton : NSPopUpButton
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxWidgetImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation;
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation;
 | 
				
			||||||
 | 
					- (BOOL) isFlipped;
 | 
				
			||||||
 | 
					- (void) clickedAction: (id) sender;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSPopUpButton
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)initWithFrame:(NSRect)frame pullsDown:(BOOL) pd
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super initWithFrame:frame pullsDown:pd];
 | 
				
			||||||
 | 
					    impl = NULL;
 | 
				
			||||||
 | 
					    [self setTarget: self];
 | 
				
			||||||
 | 
					    [self setAction: @selector(clickedAction:)];
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) clickedAction: (id) sender
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( impl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
 | 
				
			||||||
 | 
					        if ( wxpeer )
 | 
				
			||||||
 | 
					            wxpeer->HandleClicked(0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (BOOL) isFlipped
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return YES;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (int) intValue
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   return [self indexOfSelectedItem];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) setIntValue: (int) v
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [self selectItemAtIndex:v];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxWidgetImplType* wxWidgetImpl::CreateChoice( wxWindowMac* wxpeer, 
 | 
				
			||||||
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
 | 
					                                    wxMenu* menu,
 | 
				
			||||||
 | 
					                                    const wxPoint& pos, 
 | 
				
			||||||
 | 
					                                    const wxSize& size,
 | 
				
			||||||
 | 
					                                    long style, 
 | 
				
			||||||
 | 
					                                    long extraStylew)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
 | 
					    wxNSPopUpButton* v = [[wxNSPopUpButton alloc] initWithFrame:r pullsDown:NO];
 | 
				
			||||||
 | 
					    [sv addSubview:v];
 | 
				
			||||||
 | 
					    [v setMenu: menu->GetHMenu()];
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
				
			||||||
 | 
					    [v setImplementation:c];
 | 
				
			||||||
 | 
					    return c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_CHOICE
 | 
				
			||||||
@@ -26,6 +26,9 @@ extern wxList wxModalDialogs;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void wxDialog::DoShowModal()
 | 
					void wxDialog::DoShowModal()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    wxCHECK_RET( !IsModal(), wxT("DoShowModal() called twice") );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxModalDialogs.Append(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SetFocus() ;
 | 
					    SetFocus() ;
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
@@ -41,12 +44,12 @@ void wxDialog::DoShowModal()
 | 
				
			|||||||
        resetGroupParent = true;
 | 
					        resetGroupParent = true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					 | 
				
			||||||
    NSWindow* theWindow = GetWXWindow();
 | 
					    NSWindow* theWindow = GetWXWindow();
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSModalSession session = [NSApp beginModalSessionForWindow:theWindow];
 | 
					    NSModalSession session = [NSApp beginModalSessionForWindow:theWindow];
 | 
				
			||||||
    while (IsModal()) 
 | 
					    while (IsModal()) 
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        wxMacAutoreleasePool autoreleasepool;
 | 
				
			||||||
        if ([NSApp runModalSession:session] != NSRunContinuesResponse)
 | 
					        if ([NSApp runModalSession:session] != NSRunContinuesResponse)
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        // TODO should we do some idle processing ?
 | 
					        // TODO should we do some idle processing ?
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,7 @@ void wxGUIEventLoop::WakeUp()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool wxGUIEventLoop::Pending() const
 | 
					bool wxGUIEventLoop::Pending() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    wxMacAutoreleasePool autoreleasepool;
 | 
				
			||||||
    // a pointer to the event is returned if there is one, or nil if not
 | 
					    // a pointer to the event is returned if there is one, or nil if not
 | 
				
			||||||
    return [[NSApplication sharedApplication]
 | 
					    return [[NSApplication sharedApplication]
 | 
				
			||||||
            nextEventMatchingMask: NSAnyEventMask
 | 
					            nextEventMatchingMask: NSAnyEventMask
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										124
									
								
								src/osx/cocoa/gauge.mm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								src/osx/cocoa/gauge.mm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,124 @@
 | 
				
			|||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        gauge.mm
 | 
				
			||||||
 | 
					// Purpose:     wxGauge class
 | 
				
			||||||
 | 
					// Author:      Stefan Csomor
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     1998-01-01
 | 
				
			||||||
 | 
					// RCS-ID:      $Id: gauge.cpp 54820 2008-07-29 20:04:11Z SC $
 | 
				
			||||||
 | 
					// Copyright:   (c) Stefan Csomor
 | 
				
			||||||
 | 
					// Licence:       wxWindows licence
 | 
				
			||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/wxprec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_GAUGE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/gauge.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSProgressIndicator : NSProgressIndicator
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxWidgetImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation;
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation;
 | 
				
			||||||
 | 
					- (BOOL) isFlipped;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSProgressIndicator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)initWithFrame:(NSRect)frame
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super initWithFrame:frame];
 | 
				
			||||||
 | 
					    impl = NULL;
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (BOOL) isFlipped
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return YES;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxOSXGaugeCocoaImpl : public wxWidgetCocoaImpl
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public :
 | 
				
			||||||
 | 
					    wxOSXGaugeCocoaImpl( wxWindowMac* peer, WXWidget w) : wxWidgetCocoaImpl( peer, w )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void SetMaximum(wxInt32 v)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        SetDeterminateMode();
 | 
				
			||||||
 | 
					        wxWidgetCocoaImpl::SetMaximum( v ) ;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void SetValue(wxInt32 v)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        SetDeterminateMode();
 | 
				
			||||||
 | 
					        wxWidgetCocoaImpl::SetValue( v ) ;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void PulseGauge()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ( ![(wxNSProgressIndicator*)m_osxView isIndeterminate] )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            [(wxNSProgressIndicator*)m_osxView setIndeterminate:YES];
 | 
				
			||||||
 | 
					            [(wxNSProgressIndicator*)m_osxView startAnimation:nil];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					    void SetDeterminateMode()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					       // switch back to determinate mode if necessary
 | 
				
			||||||
 | 
					        if ( [(wxNSProgressIndicator*)m_osxView isIndeterminate]  )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            [(wxNSProgressIndicator*)m_osxView stopAnimation:nil];
 | 
				
			||||||
 | 
					            [(wxNSProgressIndicator*)m_osxView setIndeterminate:NO];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxWidgetImplType* wxWidgetImpl::CreateGauge( wxWindowMac* wxpeer, 
 | 
				
			||||||
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
 | 
					                                    wxInt32 value,
 | 
				
			||||||
 | 
					                                    wxInt32 minimum,
 | 
				
			||||||
 | 
					                                    wxInt32 maximum,
 | 
				
			||||||
 | 
					                                    const wxPoint& pos, 
 | 
				
			||||||
 | 
					                                    const wxSize& size,
 | 
				
			||||||
 | 
					                                    long style, 
 | 
				
			||||||
 | 
					                                    long extraStyle)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
 | 
					    wxNSProgressIndicator* v = [[wxNSProgressIndicator alloc] initWithFrame:r];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [v setMinValue: minimum];
 | 
				
			||||||
 | 
					    [v setMaxValue: maximum];
 | 
				
			||||||
 | 
					    [v setIndeterminate:FALSE];
 | 
				
			||||||
 | 
					    [v setDoubleValue: (double) value];
 | 
				
			||||||
 | 
					    [sv addSubview:v];
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl* c = new wxOSXGaugeCocoaImpl( wxpeer, v );
 | 
				
			||||||
 | 
					    [v setImplementation:c];
 | 
				
			||||||
 | 
					    return c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_GAUGE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										617
									
								
								src/osx/cocoa/listbox.mm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										617
									
								
								src/osx/cocoa/listbox.mm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,617 @@
 | 
				
			|||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        src/osx/cocoa/listbox.mm
 | 
				
			||||||
 | 
					// Purpose:     wxListBox
 | 
				
			||||||
 | 
					// Author:      Stefan Csomor
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     1998-01-01
 | 
				
			||||||
 | 
					// RCS-ID:      $Id: listbox.cpp 54820 2008-07-29 20:04:11Z SC $
 | 
				
			||||||
 | 
					// Copyright:   (c) Stefan Csomor
 | 
				
			||||||
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/wxprec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_LISTBOX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/listbox.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef WX_PRECOMP
 | 
				
			||||||
 | 
					    #include "wx/log.h"
 | 
				
			||||||
 | 
					    #include "wx/intl.h"
 | 
				
			||||||
 | 
					    #include "wx/utils.h"
 | 
				
			||||||
 | 
					    #include "wx/settings.h"
 | 
				
			||||||
 | 
					    #include "wx/arrstr.h"
 | 
				
			||||||
 | 
					    #include "wx/dcclient.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// forward decls
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxListWidgetCocoaImpl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSTableDataSource : NSObject
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxListWidgetCocoaImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)tableView:(NSTableView *)aTableView 
 | 
				
			||||||
 | 
					        objectValueForTableColumn:(NSTableColumn *)aTableColumn 
 | 
				
			||||||
 | 
					        row:(NSInteger)rowIndex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)tableView:(NSTableView *)aTableView 
 | 
				
			||||||
 | 
					        setObjectValue:(NSTableColumn *)aTableColumn 
 | 
				
			||||||
 | 
					        row:(NSInteger)rowIndex;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxListWidgetCocoaImpl *) theImplementation;
 | 
				
			||||||
 | 
					- (wxListWidgetCocoaImpl*) implementation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSTableView : NSTableView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxListWidgetCocoaImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxListWidgetCocoaImpl *) theImplementation;
 | 
				
			||||||
 | 
					- (wxListWidgetCocoaImpl*) implementation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// table column
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxCocoaTableColumn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSTableColumn : NSTableColumn
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxCocoaTableColumn* column;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) setColumn: (wxCocoaTableColumn*) col;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxCocoaTableColumn*) column;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class WXDLLIMPEXP_CORE wxCocoaTableColumn : public wxListWidgetColumn
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public :
 | 
				
			||||||
 | 
					    wxCocoaTableColumn( wxNSTableColumn* column, bool editable ) 
 | 
				
			||||||
 | 
					        : m_column( column ), m_editable(editable)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ~wxCocoaTableColumn()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    wxNSTableColumn* GetNSTableColumn() const { return m_column ; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    bool IsEditable() const { return m_editable; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					protected :
 | 
				
			||||||
 | 
					    wxNSTableColumn* m_column;
 | 
				
			||||||
 | 
					    bool m_editable;
 | 
				
			||||||
 | 
					} ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NSString* column1 = @"1";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxListWidgetCocoaImpl : public wxWidgetCocoaImpl, public wxListWidgetImpl
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public :
 | 
				
			||||||
 | 
					    wxListWidgetCocoaImpl( wxWindowMac* peer, NSScrollView* view, wxNSTableView* tableview, wxNSTableDataSource* data );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ~wxListWidgetCocoaImpl();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual wxListWidgetColumn*     InsertTextColumn( unsigned pos, const wxString& title, bool editable = false, 
 | 
				
			||||||
 | 
					                                wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1)  ;
 | 
				
			||||||
 | 
					    virtual wxListWidgetColumn*     InsertCheckColumn( unsigned pos , const wxString& title, bool editable = false, 
 | 
				
			||||||
 | 
					                                wxAlignment just = wxALIGN_LEFT , int defaultWidth =  -1)  ;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // add and remove
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual void            ListDelete( unsigned int n ) ;    
 | 
				
			||||||
 | 
					    virtual void            ListInsert( unsigned int n ) ;
 | 
				
			||||||
 | 
					    virtual void            ListClear() ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // selecting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void            ListDeselectAll();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual void            ListSetSelection( unsigned int n, bool select, bool multi ) ;
 | 
				
			||||||
 | 
					    virtual int             ListGetSelection() const ;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual int             ListGetSelections( wxArrayInt& aSelections ) const ;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual bool            ListIsSelected( unsigned int n ) const ;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // display
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void            ListScrollTo( unsigned int n ) ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // accessing content
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual unsigned int    ListGetCount() const ;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    int                     ListGetColumnType( int col )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return col;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    virtual void            UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL ) ;
 | 
				
			||||||
 | 
					    virtual void            UpdateLineToEnd( unsigned int n);
 | 
				
			||||||
 | 
					protected :
 | 
				
			||||||
 | 
					    wxNSTableView*          m_tableView ;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    wxNSTableDataSource*    m_dataSource;
 | 
				
			||||||
 | 
					} ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// implementations
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSTableColumn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id) init
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super init];
 | 
				
			||||||
 | 
					    column = nil;
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) setColumn: (wxCocoaTableColumn*) col
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    column = col;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxCocoaTableColumn*) column
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return column;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxNSTableViewCellValue : public wxListWidgetCellValue
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public :
 | 
				
			||||||
 | 
					    wxNSTableViewCellValue( id &v ) : value(v)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual ~wxNSTableViewCellValue() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void Set( CFStringRef v )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        value = [[(NSString*)v retain] autorelease];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    virtual void Set( const wxString& value ) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Set( (CFStringRef) wxCFStringRef( value ) );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    virtual void Set( int v ) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        value = [NSNumber numberWithInt:v];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual int GetIntValue() const 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ( [value isKindOfClass:[NSNumber class]] )
 | 
				
			||||||
 | 
					            return [ (NSNumber*) value intValue ];
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual wxString GetStringValue() const 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ( [value isKindOfClass:[NSString class]] )
 | 
				
			||||||
 | 
					            return wxCFStringRef( (CFStringRef) [value retain] ).AsString();
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        return wxEmptyString;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					    id& value;
 | 
				
			||||||
 | 
					} ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSTableDataSource
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id) init
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super init];
 | 
				
			||||||
 | 
					    impl = nil;
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxListWidgetCocoaImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxListWidgetCocoaImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( impl )
 | 
				
			||||||
 | 
					        return impl->ListGetCount();
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)tableView:(NSTableView *)aTableView 
 | 
				
			||||||
 | 
					        objectValueForTableColumn:(NSTableColumn *)aTableColumn 
 | 
				
			||||||
 | 
					        row:(NSInteger)rowIndex
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSTableColumn* tablecol = (wxNSTableColumn *)aTableColumn;
 | 
				
			||||||
 | 
					    wxListBox* lb = dynamic_cast<wxListBox*>(impl->GetWXPeer());
 | 
				
			||||||
 | 
					    wxCocoaTableColumn* col = [tablecol column];
 | 
				
			||||||
 | 
					    id value = nil;
 | 
				
			||||||
 | 
					    wxNSTableViewCellValue cellvalue(value);
 | 
				
			||||||
 | 
					    lb->GetValueCallback(rowIndex, col, cellvalue);
 | 
				
			||||||
 | 
					    return value;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)tableView:(NSTableView *)aTableView 
 | 
				
			||||||
 | 
					        setObjectValue:(id)value forTableColumn:(NSTableColumn *)aTableColumn 
 | 
				
			||||||
 | 
					        row:(NSInteger)rowIndex
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSTableColumn* tablecol = (wxNSTableColumn *)aTableColumn;
 | 
				
			||||||
 | 
					    wxListBox* lb = dynamic_cast<wxListBox*>(impl->GetWXPeer());
 | 
				
			||||||
 | 
					    wxCocoaTableColumn* col = [tablecol column];
 | 
				
			||||||
 | 
					    wxNSTableViewCellValue cellvalue(value);
 | 
				
			||||||
 | 
					    lb->SetValueCallback(rowIndex, col, cellvalue);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSTableView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxListWidgetCocoaImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxListWidgetCocoaImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxListWidgetCocoaImpl::wxListWidgetCocoaImpl( wxWindowMac* peer, NSScrollView* view, wxNSTableView* tableview, wxNSTableDataSource* data ) :
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl( peer, view ), m_tableView(tableview), m_dataSource(data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxListWidgetCocoaImpl::~wxListWidgetCocoaImpl()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [m_dataSource release];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned int wxListWidgetCocoaImpl::ListGetCount() const 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxListBox* lb = dynamic_cast<wxListBox*> ( GetWXPeer() );
 | 
				
			||||||
 | 
					    return lb->GetCount();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// columns
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxListWidgetColumn* wxListWidgetCocoaImpl::InsertTextColumn( unsigned pos, const wxString& title, bool editable, 
 | 
				
			||||||
 | 
					                                wxAlignment just, int defaultWidth) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSTableColumn* col1 = [[wxNSTableColumn alloc] init];
 | 
				
			||||||
 | 
					    [col1 setEditable:editable];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    unsigned formerColCount = [m_tableView numberOfColumns];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // there's apparently no way to insert at a specific position
 | 
				
			||||||
 | 
					    [m_tableView addTableColumn:col1 ];
 | 
				
			||||||
 | 
					    if ( pos < formerColCount )
 | 
				
			||||||
 | 
					        [m_tableView moveColumn:formerColCount toColumn:pos];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    if ( defaultWidth >= 0 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [col1 setMaxWidth:defaultWidth];
 | 
				
			||||||
 | 
					        [col1 setMinWidth:defaultWidth];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    wxCocoaTableColumn* wxcol = new wxCocoaTableColumn( col1, editable );
 | 
				
			||||||
 | 
					    [col1 setColumn:wxcol];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // owned by the tableview
 | 
				
			||||||
 | 
					    [col1 release];
 | 
				
			||||||
 | 
					    return wxcol;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxListWidgetColumn* wxListWidgetCocoaImpl::InsertCheckColumn( unsigned pos , const wxString& title, bool editable, 
 | 
				
			||||||
 | 
					                                wxAlignment just, int defaultWidth ) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   wxNSTableColumn* col1 = [[wxNSTableColumn alloc] init];
 | 
				
			||||||
 | 
					    [col1 setEditable:editable];
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					    // set your custom cell & set it up
 | 
				
			||||||
 | 
					    NSButtonCell* checkbox = [[NSButtonCell alloc] init];
 | 
				
			||||||
 | 
					    [checkbox setTitle:@""];
 | 
				
			||||||
 | 
					    [checkbox setButtonType:NSSwitchButton];
 | 
				
			||||||
 | 
					    [col1 setDataCell:checkbox] ;
 | 
				
			||||||
 | 
					    [checkbox release];
 | 
				
			||||||
 | 
					             
 | 
				
			||||||
 | 
					    unsigned formerColCount = [m_tableView numberOfColumns];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // there's apparently no way to insert at a specific position
 | 
				
			||||||
 | 
					    [m_tableView addTableColumn:col1 ];
 | 
				
			||||||
 | 
					    if ( pos < formerColCount )
 | 
				
			||||||
 | 
					        [m_tableView moveColumn:formerColCount toColumn:pos];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    if ( defaultWidth >= 0 )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [col1 setMaxWidth:defaultWidth];
 | 
				
			||||||
 | 
					        [col1 setMinWidth:defaultWidth];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    wxCocoaTableColumn* wxcol = new wxCocoaTableColumn( col1, editable );
 | 
				
			||||||
 | 
					    [col1 setColumn:wxcol];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // owned by the tableview
 | 
				
			||||||
 | 
					    [col1 release];
 | 
				
			||||||
 | 
					    return wxcol;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// inserting / removing lines
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxListWidgetCocoaImpl::ListInsert( unsigned int n ) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxListBoxCocoaLine* line = new wxListBoxCocoaLine();
 | 
				
			||||||
 | 
					        line->SetLabel(items[i]);
 | 
				
			||||||
 | 
					        if ( m_items.size() <= n+i )
 | 
				
			||||||
 | 
					            m_items.push_back( line );
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            m_items.insert(m_items.begin()+n, line);
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					        NSMutableDictionary* line = [[NSMutableDictionary alloc] init];
 | 
				
			||||||
 | 
					        [line setObject:wxCFStringRef(items[i]).AsNSString() forKey:column1];
 | 
				
			||||||
 | 
					        NSMutableArray* array = [m_dataSource items];
 | 
				
			||||||
 | 
					        if ( [array count] <= n+i )
 | 
				
			||||||
 | 
					            [array addObject:line];
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            [array insertObject:line atIndex:n];
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    [m_tableView reloadData];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxListWidgetCocoaImpl::ListDelete( unsigned int n ) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [m_tableView reloadData];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxListWidgetCocoaImpl::ListClear() 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [m_tableView reloadData];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// selecting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxListWidgetCocoaImpl::ListDeselectAll()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [m_tableView deselectAll:nil];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxListWidgetCocoaImpl::ListSetSelection( unsigned int n, bool select, bool multi ) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // TODO
 | 
				
			||||||
 | 
					    if ( select )
 | 
				
			||||||
 | 
					        [m_tableView selectRow: n byExtendingSelection:multi];
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        [m_tableView deselectRow: n];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int wxListWidgetCocoaImpl::ListGetSelection() const 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int wxListWidgetCocoaImpl::ListGetSelections( wxArrayInt& aSelections ) const 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool wxListWidgetCocoaImpl::ListIsSelected( unsigned int n ) const 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// display
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxListWidgetCocoaImpl::ListScrollTo( unsigned int n ) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [m_tableView scrollRowToVisible:n];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					void wxListWidgetCocoaImpl::UpdateLine( unsigned int n, wxListWidgetColumn* col ) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // TODO optimize
 | 
				
			||||||
 | 
					    [m_tableView reloadData];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxListWidgetCocoaImpl::UpdateLineToEnd( unsigned int n) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // TODO optimize
 | 
				
			||||||
 | 
					    [m_tableView reloadData];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// accessing content
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxWidgetImplType* wxWidgetImpl::CreateListBox( wxWindowMac* wxpeer, 
 | 
				
			||||||
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
 | 
					                                    const wxPoint& pos, 
 | 
				
			||||||
 | 
					                                    const wxSize& size,
 | 
				
			||||||
 | 
					                                    long style, 
 | 
				
			||||||
 | 
					                                    long extraStyle)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    NSView* superv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
 | 
					    NSScrollView* scrollview = [[NSScrollView alloc] initWithFrame:r];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // use same scroll flags logic as msw
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    [scrollview setHasVerticalScroller:YES];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if ( style & wxLB_HSCROLL )
 | 
				
			||||||
 | 
					        [scrollview setHasHorizontalScroller:YES];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    [scrollview setAutohidesScrollers: ((style & wxLB_ALWAYS_SB) ? NO : YES)];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // setting up the true table
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    wxNSTableView* tableview = [[wxNSTableView alloc] init];
 | 
				
			||||||
 | 
					    [scrollview setDocumentView:tableview];
 | 
				
			||||||
 | 
					    [tableview release];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // only one multi-select mode available
 | 
				
			||||||
 | 
					    if ( (style & wxLB_EXTENDED) || (style & wxLB_MULTIPLE) )
 | 
				
			||||||
 | 
					        [tableview setAllowsMultipleSelection:YES];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    // simple listboxes have no header row
 | 
				
			||||||
 | 
					    [tableview setHeaderView:nil];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    [tableview setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle];
 | 
				
			||||||
 | 
					    wxNSTableDataSource* ds = [[ wxNSTableDataSource alloc] init];
 | 
				
			||||||
 | 
					    [tableview setDataSource:ds];
 | 
				
			||||||
 | 
					    [superv addSubview:scrollview];
 | 
				
			||||||
 | 
					    wxListWidgetCocoaImpl* c = new wxListWidgetCocoaImpl( wxpeer, scrollview, tableview, ds );
 | 
				
			||||||
 | 
					    [tableview setImplementation:c];
 | 
				
			||||||
 | 
					    [ds setImplementation:c];
 | 
				
			||||||
 | 
					    return c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int wxListBox::DoListHitTest(const wxPoint& inpoint) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#if wxOSX_USE_CARBON
 | 
				
			||||||
 | 
					    OSStatus err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // There are few reasons why this is complicated:
 | 
				
			||||||
 | 
					    // 1) There is no native HitTest function for Mac
 | 
				
			||||||
 | 
					    // 2) GetDataBrowserItemPartBounds only works on visible items
 | 
				
			||||||
 | 
					    // 3) We can't do it through GetDataBrowserTableView[Item]RowHeight
 | 
				
			||||||
 | 
					    //    because what it returns is basically inaccurate in the context
 | 
				
			||||||
 | 
					    //    of the coordinates we want here, but we use this as a guess
 | 
				
			||||||
 | 
					    //    for where the first visible item lies
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxPoint point = inpoint;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // get column property ID (req. for call to itempartbounds)
 | 
				
			||||||
 | 
					    DataBrowserTableViewColumnID colId = 0;
 | 
				
			||||||
 | 
					    err = GetDataBrowserTableViewColumnProperty(m_peer->GetControlRef(), 0, &colId);
 | 
				
			||||||
 | 
					    wxCHECK_MSG(err == noErr, wxNOT_FOUND, wxT("Unexpected error from GetDataBrowserTableViewColumnProperty"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // OK, first we need to find the first visible item we have -
 | 
				
			||||||
 | 
					    // this will be the "low" for our binary search. There is no real
 | 
				
			||||||
 | 
					    // easy way around this, as we will need to do a SLOW linear search
 | 
				
			||||||
 | 
					    // until we find a visible item, but we can do a cheap calculation
 | 
				
			||||||
 | 
					    // via the row height to speed things up a bit
 | 
				
			||||||
 | 
					    UInt32 scrollx, scrolly;
 | 
				
			||||||
 | 
					    err = GetDataBrowserScrollPosition(m_peer->GetControlRef(), &scrollx, &scrolly);
 | 
				
			||||||
 | 
					    wxCHECK_MSG(err == noErr, wxNOT_FOUND, wxT("Unexpected error from GetDataBrowserScrollPosition"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    UInt16 height;
 | 
				
			||||||
 | 
					    err = GetDataBrowserTableViewRowHeight(m_peer->GetControlRef(), &height);
 | 
				
			||||||
 | 
					    wxCHECK_MSG(err == noErr, wxNOT_FOUND, wxT("Unexpected error from GetDataBrowserTableViewRowHeight"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // these indices are 0-based, as usual, so we need to add 1 to them when
 | 
				
			||||||
 | 
					    // passing them to data browser functions which use 1-based indices
 | 
				
			||||||
 | 
					    int low = scrolly / height,
 | 
				
			||||||
 | 
					        high = GetCount() - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // search for the first visible item (note that the scroll guess above
 | 
				
			||||||
 | 
					    // is the low bounds of where the item might lie so we only use that as a
 | 
				
			||||||
 | 
					    // starting point - we should reach it within 1 or 2 iterations of the loop)
 | 
				
			||||||
 | 
					    while ( low <= high )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Rect bounds;
 | 
				
			||||||
 | 
					        err = GetDataBrowserItemPartBounds(
 | 
				
			||||||
 | 
					            m_peer->GetControlRef(), low + 1, colId,
 | 
				
			||||||
 | 
					            kDataBrowserPropertyEnclosingPart,
 | 
				
			||||||
 | 
					            &bounds); // note +1 to translate to Mac ID
 | 
				
			||||||
 | 
					        if ( err == noErr )
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // errDataBrowserItemNotFound is expected as it simply means that the
 | 
				
			||||||
 | 
					        // item is not currently visible -- but other errors are not
 | 
				
			||||||
 | 
					        wxCHECK_MSG( err == errDataBrowserItemNotFound, wxNOT_FOUND,
 | 
				
			||||||
 | 
					                     wxT("Unexpected error from GetDataBrowserItemPartBounds") );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        low++;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // NOW do a binary search for where the item lies, searching low again if
 | 
				
			||||||
 | 
					    // we hit an item that isn't visible
 | 
				
			||||||
 | 
					    while ( low <= high )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        int mid = (low + high) / 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Rect bounds;
 | 
				
			||||||
 | 
					        err = GetDataBrowserItemPartBounds(
 | 
				
			||||||
 | 
					            m_peer->GetControlRef(), mid + 1, colId,
 | 
				
			||||||
 | 
					            kDataBrowserPropertyEnclosingPart,
 | 
				
			||||||
 | 
					            &bounds); //note +1 to trans to mac id
 | 
				
			||||||
 | 
					        wxCHECK_MSG( err == noErr || err == errDataBrowserItemNotFound,
 | 
				
			||||||
 | 
					                     wxNOT_FOUND,
 | 
				
			||||||
 | 
					                     wxT("Unexpected error from GetDataBrowserItemPartBounds") );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ( err == errDataBrowserItemNotFound )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // item not visible, attempt to find a visible one
 | 
				
			||||||
 | 
					            // search lower
 | 
				
			||||||
 | 
					            high = mid - 1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else // visible item, do actual hitttest
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // if point is within the bounds, return this item (since we assume
 | 
				
			||||||
 | 
					            // all x coords of items are equal we only test the x coord in
 | 
				
			||||||
 | 
					            // equality)
 | 
				
			||||||
 | 
					            if ((point.x >= bounds.left && point.x <= bounds.right) &&
 | 
				
			||||||
 | 
					                (point.y >= bounds.top && point.y <= bounds.bottom) )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // found!
 | 
				
			||||||
 | 
					                return mid;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if ( point.y < bounds.top )
 | 
				
			||||||
 | 
					                // index(bounds) greater then key(point)
 | 
				
			||||||
 | 
					                high = mid - 1;
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                // index(bounds) less then key(point)
 | 
				
			||||||
 | 
					                low = mid + 1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    return wxNOT_FOUND;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_LISTBOX
 | 
				
			||||||
							
								
								
									
										193
									
								
								src/osx/cocoa/menu.mm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								src/osx/cocoa/menu.mm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,193 @@
 | 
				
			|||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        src/osx/cocoa/menu.mm
 | 
				
			||||||
 | 
					// Purpose:     wxMenu, wxMenuBar, wxMenuItem
 | 
				
			||||||
 | 
					// Author:      Stefan Csomor
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     1998-01-01
 | 
				
			||||||
 | 
					// RCS-ID:      $Id: menu.cpp 54129 2008-06-11 19:30:52Z SC $
 | 
				
			||||||
 | 
					// Copyright:   (c) Stefan Csomor
 | 
				
			||||||
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ============================================================================
 | 
				
			||||||
 | 
					// headers & declarations
 | 
				
			||||||
 | 
					// ============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// wxWidgets headers
 | 
				
			||||||
 | 
					// -----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/wxprec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/menu.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef WX_PRECOMP
 | 
				
			||||||
 | 
					    #include "wx/log.h"
 | 
				
			||||||
 | 
					    #include "wx/app.h"
 | 
				
			||||||
 | 
					    #include "wx/utils.h"
 | 
				
			||||||
 | 
					    #include "wx/frame.h"
 | 
				
			||||||
 | 
					    #include "wx/menuitem.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// other standard headers
 | 
				
			||||||
 | 
					// ----------------------
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@class wxNSMenuItem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSMenu : NSMenu
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   wxMenuImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) setImplementation:(wxMenuImpl*) item;
 | 
				
			||||||
 | 
					- (wxMenuImpl*) implementation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSMenu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id) init
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super init];
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxMenuImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxMenuImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSMenuController : NSObject
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)menuWillOpen:(NSMenu *)menu;
 | 
				
			||||||
 | 
					- (void)menuDidClose:(NSMenu *)menu;
 | 
				
			||||||
 | 
					- (void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSMenuController
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id) init
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super init];
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)menuWillOpen:(NSMenu *)smenu
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSMenu* menu = (wxNSMenu*) smenu;
 | 
				
			||||||
 | 
					    wxMenuImpl* menuimpl = [menu implementation];
 | 
				
			||||||
 | 
					    if ( menuimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxMenu* wxpeer = (wxMenu*) menuimpl->GetWXPeer();
 | 
				
			||||||
 | 
					        wxpeer->HandleMenuOpened();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)menuDidClose:(NSMenu *)smenu
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSMenu* menu = (wxNSMenu*) smenu;
 | 
				
			||||||
 | 
					    wxMenuImpl* menuimpl = [menu implementation];
 | 
				
			||||||
 | 
					    if ( menuimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxMenu* wxpeer = (wxMenu*) menuimpl->GetWXPeer();
 | 
				
			||||||
 | 
					        wxpeer->HandleMenuClosed();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)menu:(NSMenu *)smenu willHighlightItem:(NSMenuItem *)item
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSMenu* menu = (wxNSMenu*) smenu;
 | 
				
			||||||
 | 
					    wxMenuImpl* menuimpl = [menu implementation];
 | 
				
			||||||
 | 
					    if ( menuimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxMenu* wxpeer = (wxMenu*) menuimpl->GetWXPeer();
 | 
				
			||||||
 | 
					        if ( [ item isKindOfClass:[wxNSMenuItem class] ] )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            wxMenuItemImpl* menuitemimpl = (wxMenuItemImpl*) [ (wxNSMenuItem*) item implementation ];
 | 
				
			||||||
 | 
					            if ( wxpeer && menuitemimpl )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                wxpeer->HandleMenuItemHighlighted( menuitemimpl->GetWXPeer() );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxMenuCocoaImpl : public wxMenuImpl 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public :
 | 
				
			||||||
 | 
					    wxMenuCocoaImpl( wxMenu* peer , NSMenu* menu) : wxMenuImpl(peer), m_osxMenu(menu)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual ~wxMenuCocoaImpl();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    virtual void InsertOrAppend(wxMenuItem *pItem, size_t pos) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if ( pos == (size_t) -1 )
 | 
				
			||||||
 | 
					            [m_osxMenu addItem:(NSMenuItem*) pItem->GetPeer()->GetHMenuItem() ];
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            [m_osxMenu insertItem:(NSMenuItem*) pItem->GetPeer()->GetHMenuItem() atIndex:pos];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    virtual void Remove( wxMenuItem *pItem ) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxMenu removeItem:(NSMenuItem*) pItem->GetPeer()->GetHMenuItem()];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual void MakeRoot()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [NSApp setMainMenu:m_osxMenu];
 | 
				
			||||||
 | 
					        [NSApp setAppleMenu:[[m_osxMenu itemAtIndex:0] submenu]];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void Enable( bool enable )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    virtual void SetTitle( const wxString& text )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxCFStringRef cfText(text);
 | 
				
			||||||
 | 
					        [m_osxMenu setTitle:cfText.AsNSString()];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    WXHMENU GetHMenu() { return m_osxMenu; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    static wxMenuImpl* Create( wxMenu* peer, const wxString& title );
 | 
				
			||||||
 | 
					    static wxMenuImpl* CreateRootMenu( wxMenu* peer );
 | 
				
			||||||
 | 
					protected :
 | 
				
			||||||
 | 
					    NSMenu* m_osxMenu;
 | 
				
			||||||
 | 
					} ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxMenuCocoaImpl::~wxMenuCocoaImpl()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [m_osxMenu release];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxMenuImpl* wxMenuImpl::Create( wxMenu* peer, const wxString& title )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    static wxNSMenuController* controller = NULL;
 | 
				
			||||||
 | 
					    if ( controller == NULL )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        controller = [[wxNSMenuController alloc] init];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    wxCFStringRef cfText( title );
 | 
				
			||||||
 | 
					    wxNSMenu* menu = [[wxNSMenu alloc] initWithTitle:cfText.AsNSString()];
 | 
				
			||||||
 | 
					    wxMenuImpl* c = new wxMenuCocoaImpl( peer, menu );
 | 
				
			||||||
 | 
					    [menu setDelegate:controller];
 | 
				
			||||||
 | 
					    [menu setImplementation:c];
 | 
				
			||||||
 | 
					    return c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										274
									
								
								src/osx/cocoa/menuitem.mm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										274
									
								
								src/osx/cocoa/menuitem.mm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,274 @@
 | 
				
			|||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        src/osx/cocoa/menuitem.mm
 | 
				
			||||||
 | 
					// Purpose:     wxMenuItem implementation
 | 
				
			||||||
 | 
					// Author:      Stefan Csomor
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     1998-01-01
 | 
				
			||||||
 | 
					// RCS-ID:      $Id: menuitem.cpp 54129 2008-06-11 19:30:52Z SC $
 | 
				
			||||||
 | 
					// Copyright:   (c) Stefan Csomor
 | 
				
			||||||
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/wxprec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/menuitem.h"
 | 
				
			||||||
 | 
					#include "wx/stockitem.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef WX_PRECOMP
 | 
				
			||||||
 | 
					    #include "wx/app.h"
 | 
				
			||||||
 | 
					    #include "wx/menu.h"
 | 
				
			||||||
 | 
					#endif // WX_PRECOMP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSMenuItem : NSMenuItem
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   wxMenuItemImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) setImplementation:(wxMenuItemImpl*) item;
 | 
				
			||||||
 | 
					- (wxMenuItemImpl*) implementation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) clickedAction: (id) sender;
 | 
				
			||||||
 | 
					- (BOOL)validateMenuItem:(NSMenuItem *) menuItem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSMenuItem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id) init
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super init];
 | 
				
			||||||
 | 
					     return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) clickedAction: (id) sender
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( impl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        impl->GetWXPeer()->GetMenu()->HandleCommandProcess(impl->GetWXPeer());
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (BOOL)validateMenuItem:(NSMenuItem *) menuItem
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if( impl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        impl->GetWXPeer()->GetMenu()->HandleCommandUpdateStatus(impl->GetWXPeer());
 | 
				
			||||||
 | 
					        return impl->GetWXPeer()->IsEnabled();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return YES ;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxMenuItemImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxMenuItemImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxMacCocoaMenuItemSetAccelerator( NSMenuItem* menuItem, wxAcceleratorEntry* entry )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    unsigned int modifiers = 0 ;
 | 
				
			||||||
 | 
					    int key = entry->GetKeyCode() ;
 | 
				
			||||||
 | 
					    if ( key )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (entry->GetFlags() & wxACCEL_CTRL);
 | 
				
			||||||
 | 
					            modifiers |= NSCommandKeyMask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (entry->GetFlags() & wxACCEL_ALT)
 | 
				
			||||||
 | 
					            modifiers |= NSAlternateKeyMask ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // this may be ignored later for alpha chars
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (entry->GetFlags() & wxACCEL_SHIFT)
 | 
				
			||||||
 | 
					            modifiers |= NSShiftKeyMask ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        unichar shortcut = 0;
 | 
				
			||||||
 | 
					        if ( key >= WXK_F1 && key <= WXK_F15 )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            modifiers |= NSFunctionKeyMask ;
 | 
				
			||||||
 | 
					            shortcut = NSF1FunctionKey + ( key - WXK_F1 );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            switch ( key )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					                // standard function keys from here
 | 
				
			||||||
 | 
					                case WXK_TAB :
 | 
				
			||||||
 | 
					                    modifiers |= NSFunctionKeyMask ;
 | 
				
			||||||
 | 
					                    shortcut = NSTabCharacter ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case kEnterCharCode :
 | 
				
			||||||
 | 
					                    modifiers |= NSFunctionKeyMask ;
 | 
				
			||||||
 | 
					                    cocoaKey = NSTabCharacter ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_RETURN :
 | 
				
			||||||
 | 
					                    modifiers |= NSFunctionKeyMask ;
 | 
				
			||||||
 | 
					                    cocoaKey = NSTabCharacter ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_ESCAPE :
 | 
				
			||||||
 | 
					                    modifiers |= NSFunctionKeyMask ;
 | 
				
			||||||
 | 
					                    cocoaKey = kEscapeCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_SPACE :
 | 
				
			||||||
 | 
					                    shortcut = ' ' ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_CLEAR :
 | 
				
			||||||
 | 
					                    cocoaKey = kClearCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_PAGEUP :
 | 
				
			||||||
 | 
					                    cocoaKey = kPageUpCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_PAGEDOWN :
 | 
				
			||||||
 | 
					                    cocoaKey = kPageDownCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_LEFT :
 | 
				
			||||||
 | 
					                    cocoaKey = kLeftArrowCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_UP :
 | 
				
			||||||
 | 
					                    cocoaKey = kUpArrowCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_RIGHT :
 | 
				
			||||||
 | 
					                    cocoaKey = kRightArrowCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_DOWN :
 | 
				
			||||||
 | 
					                    cocoaKey = kDownArrowCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_HOME :
 | 
				
			||||||
 | 
					                    cocoaKey = kHomeCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case WXK_END :
 | 
				
			||||||
 | 
					                    cocoaKey = kEndCharCode ;
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					                // TODO Test all above with their function key equiv.
 | 
				
			||||||
 | 
					                // from NSEvent.h
 | 
				
			||||||
 | 
					                default :
 | 
				
			||||||
 | 
					                    if(entry->GetFlags() & wxACCEL_SHIFT)
 | 
				
			||||||
 | 
					                        shortcut = toupper(key);
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        shortcut = tolower(key);
 | 
				
			||||||
 | 
					                    break ;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [menuItem setKeyEquivalent:[NSString stringWithCharacters:&shortcut length:1]];
 | 
				
			||||||
 | 
					        [menuItem setKeyEquivalentModifierMask:modifiers];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxMenuItemCocoaImpl : public wxMenuItemImpl 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public :
 | 
				
			||||||
 | 
					    wxMenuItemCocoaImpl( wxMenuItem* peer, NSMenuItem* item ) : wxMenuItemImpl(peer), m_osxMenuItem(item)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ~wxMenuItemCocoaImpl();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    void SetBitmap( const wxBitmap& bitmap ) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxMenuItem setImage:bitmap.GetNSImage()];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void Enable( bool enable ) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxMenuItem setEnabled:enable];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void Check( bool check ) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxMenuItem setState:( check ?  NSOnState :  NSOffState) ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void Hide( bool hide )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxMenuItem setHidden:hide ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void SetLabel( const wxString& text, wxAcceleratorEntry *entry ) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxCFStringRef cfText(text);
 | 
				
			||||||
 | 
					        [m_osxMenuItem setTitle:cfText.AsNSString()];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if ( entry )
 | 
				
			||||||
 | 
					            wxMacCocoaMenuItemSetAccelerator( m_osxMenuItem, entry );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void * GetHMenuItem() { return m_osxMenuItem; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected :
 | 
				
			||||||
 | 
					    NSMenuItem* m_osxMenuItem ;
 | 
				
			||||||
 | 
					} ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxMenuItemCocoaImpl::~wxMenuItemCocoaImpl()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxMenuItemImpl* wxMenuItemImpl::Create( wxMenuItem* peer, wxMenu *pParentMenu,
 | 
				
			||||||
 | 
					                       int id,
 | 
				
			||||||
 | 
					                       const wxString& text,
 | 
				
			||||||
 | 
					                       wxAcceleratorEntry *entry,
 | 
				
			||||||
 | 
					                       const wxString& strHelp,
 | 
				
			||||||
 | 
					                       wxItemKind kind,
 | 
				
			||||||
 | 
					                       wxMenu *pSubMenu )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxMenuItemImpl* c = NULL;
 | 
				
			||||||
 | 
					    NSMenuItem* item = nil;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if ( kind == wxITEM_SEPARATOR )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        item = [[NSMenuItem separatorItem] retain];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxCFStringRef cfText(text);
 | 
				
			||||||
 | 
					        wxNSMenuItem* temp = [ [ wxNSMenuItem alloc ] init ];
 | 
				
			||||||
 | 
					        if ( ! pParentMenu->GetNoEventsMode() )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            [temp setTarget: temp];
 | 
				
			||||||
 | 
					            [temp setAction: @selector(clickedAction:)];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [temp setTitle:cfText.AsNSString()];
 | 
				
			||||||
 | 
					        if ( pSubMenu )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            pSubMenu->GetPeer()->SetTitle( text );
 | 
				
			||||||
 | 
					            [temp setSubmenu:pSubMenu->GetHMenu()];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if ( entry )
 | 
				
			||||||
 | 
					                wxMacCocoaMenuItemSetAccelerator( temp, entry );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        item = temp;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    c = new wxMenuItemCocoaImpl( peer, item );
 | 
				
			||||||
 | 
					    if ( kind != wxITEM_SEPARATOR )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [(wxNSMenuItem*)item setImplementation:c];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -21,9 +21,6 @@
 | 
				
			|||||||
#include "wx/osx/private.h"
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxOSX_USE_COCOA
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
NSRect wxToNSRect( NSView* parent, const wxRect& r )
 | 
					NSRect wxToNSRect( NSView* parent, const wxRect& r )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    NSRect frame = parent ? [parent bounds] : [[NSScreen mainScreen] frame];
 | 
					    NSRect frame = parent ? [parent bounds] : [[NSScreen mainScreen] frame];
 | 
				
			||||||
@@ -64,6 +61,143 @@ wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p )
 | 
				
			|||||||
    return wxPoint( x, y);
 | 
					    return wxPoint( x, y);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// wx native implementation classes
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSWindow : NSWindow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNonOwnedWindowCocoaImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxNonOwnedWindowCocoaImpl *) theImplementation;
 | 
				
			||||||
 | 
					- (wxNonOwnedWindowCocoaImpl*) implementation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSWindow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxNonOwnedWindowCocoaImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxNonOwnedWindowCocoaImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSPanel : wxNSWindow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSPanel 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// controller
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNonOwnedWindowController : NSObject
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)windowDidResize:(NSNotification *)notification;
 | 
				
			||||||
 | 
					- (NSSize)windowWillResize:(NSWindow *)window toSize:(NSSize)proposedFrameSize;
 | 
				
			||||||
 | 
					- (void)windowDidResignMain:(NSNotification *)notification;
 | 
				
			||||||
 | 
					- (void)windowDidBecomeMain:(NSNotification *)notification;
 | 
				
			||||||
 | 
					- (void)windowDidMove:(NSNotification *)notification;
 | 
				
			||||||
 | 
					- (BOOL)windowShouldClose:(id)window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNonOwnedWindowController
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id) init
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super init];
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (BOOL)windowShouldClose:(id)nwindow
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSWindow* window = (wxNSWindow*) nwindow;
 | 
				
			||||||
 | 
					    wxNonOwnedWindowCocoaImpl* windowimpl = [window implementation];
 | 
				
			||||||
 | 
					    if ( windowimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNonOwnedWindow* wxpeer = windowimpl->GetWXPeer();
 | 
				
			||||||
 | 
					        if ( wxpeer )
 | 
				
			||||||
 | 
					            wxpeer->Close();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return NO;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (NSSize)windowWillResize:(NSWindow *)window
 | 
				
			||||||
 | 
					                    toSize:(NSSize)proposedFrameSize
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // todo
 | 
				
			||||||
 | 
					    return proposedFrameSize;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)windowDidResize:(NSNotification *)notification
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSWindow* window = (wxNSWindow*) [notification object];
 | 
				
			||||||
 | 
					    wxNonOwnedWindowCocoaImpl* windowimpl = [window implementation];
 | 
				
			||||||
 | 
					    if ( windowimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNonOwnedWindow* wxpeer = windowimpl->GetWXPeer();
 | 
				
			||||||
 | 
					        if ( wxpeer )
 | 
				
			||||||
 | 
					            wxpeer->HandleResized(0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)windowDidMove:(NSNotification *)notification
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSWindow* window = (wxNSWindow*) [notification object];
 | 
				
			||||||
 | 
					    wxNonOwnedWindowCocoaImpl* windowimpl = [window implementation];
 | 
				
			||||||
 | 
					    if ( windowimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNonOwnedWindow* wxpeer = windowimpl->GetWXPeer();
 | 
				
			||||||
 | 
					        if ( wxpeer )
 | 
				
			||||||
 | 
					            wxpeer->HandleMoved(0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)windowDidBecomeMain:(NSNotification *)notification
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSWindow* window = (wxNSWindow*) [notification object];
 | 
				
			||||||
 | 
					    wxNonOwnedWindowCocoaImpl* windowimpl = [window implementation];
 | 
				
			||||||
 | 
					    if ( windowimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNonOwnedWindow* wxpeer = windowimpl->GetWXPeer();
 | 
				
			||||||
 | 
					        if ( wxpeer )
 | 
				
			||||||
 | 
					            wxpeer->HandleActivated(0, true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)windowDidResignMain:(NSNotification *)notification
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSWindow* window = (wxNSWindow*) [notification object];
 | 
				
			||||||
 | 
					    wxNonOwnedWindowCocoaImpl* windowimpl = [window implementation];
 | 
				
			||||||
 | 
					    if ( windowimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNonOwnedWindow* wxpeer = windowimpl->GetWXPeer();
 | 
				
			||||||
 | 
					        if ( wxpeer )
 | 
				
			||||||
 | 
					            wxpeer->HandleActivated(0, false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
IMPLEMENT_DYNAMIC_CLASS( wxNonOwnedWindowCocoaImpl , wxNonOwnedWindowImpl )
 | 
					IMPLEMENT_DYNAMIC_CLASS( wxNonOwnedWindowCocoaImpl , wxNonOwnedWindowImpl )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxNonOwnedWindowCocoaImpl::wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) : 
 | 
					wxNonOwnedWindowCocoaImpl::wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) : 
 | 
				
			||||||
@@ -92,12 +226,18 @@ void wxNonOwnedWindowCocoaImpl::Destroy()
 | 
				
			|||||||
void wxNonOwnedWindowCocoaImpl::Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
 | 
					void wxNonOwnedWindowCocoaImpl::Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
 | 
				
			||||||
long style, long extraStyle, const wxString& name )
 | 
					long style, long extraStyle, const wxString& name )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    static wxNonOwnedWindowController* controller = NULL;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if ( !controller )
 | 
				
			||||||
 | 
					        controller =[[wxNonOwnedWindowController alloc] init];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int windowstyle = NSBorderlessWindowMask;
 | 
					    int windowstyle = NSBorderlessWindowMask;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if ( style & wxFRAME_TOOL_WINDOW )
 | 
					    if ( style & wxFRAME_TOOL_WINDOW )
 | 
				
			||||||
        m_macWindow = [NSPanel alloc];
 | 
					        m_macWindow = [wxNSPanel alloc];
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        m_macWindow = [NSWindow alloc];
 | 
					        m_macWindow = [wxNSWindow alloc];
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    CGWindowLevel level = kCGNormalWindowLevelKey;
 | 
					    CGWindowLevel level = kCGNormalWindowLevelKey;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@@ -180,6 +320,8 @@ long style, long extraStyle, const wxString& name )
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( NULL, wxRect( pos, size) );
 | 
					    NSRect r = wxToNSRect( NULL, wxRect( pos, size) );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    [m_macWindow setImplementation:this];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    [m_macWindow initWithContentRect:r
 | 
					    [m_macWindow initWithContentRect:r
 | 
				
			||||||
        styleMask:windowstyle
 | 
					        styleMask:windowstyle
 | 
				
			||||||
        backing:NSBackingStoreBuffered
 | 
					        backing:NSBackingStoreBuffered
 | 
				
			||||||
@@ -187,6 +329,9 @@ long style, long extraStyle, const wxString& name )
 | 
				
			|||||||
        ];
 | 
					        ];
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    [m_macWindow setLevel:level];
 | 
					    [m_macWindow setLevel:level];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [m_macWindow setDelegate:controller];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    // [m_macWindow makeKeyAndOrderFront:nil];
 | 
					    // [m_macWindow makeKeyAndOrderFront:nil];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -373,4 +518,38 @@ bool wxNonOwnedWindowCocoaImpl::ShowFullScreen(bool show, long style)
 | 
				
			|||||||
void wxNonOwnedWindowCocoaImpl::RequestUserAttention(int WXUNUSED(flags))
 | 
					void wxNonOwnedWindowCocoaImpl::RequestUserAttention(int WXUNUSED(flags))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					
 | 
				
			||||||
 | 
					void wxNonOwnedWindowCocoaImpl::ScreenToWindow( int *x, int *y )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxPoint p((x ? *x : 0), (y ? *y : 0) );
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    NSPoint nspt = wxToNSPoint( NULL, p );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    nspt = [[m_macWindow contentView] convertPoint:p toV:nil];
 | 
				
			||||||
 | 
					    p = wxFromNSPoint( 
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					    if ( x )
 | 
				
			||||||
 | 
					        *x = p.x;
 | 
				
			||||||
 | 
					    if ( y )
 | 
				
			||||||
 | 
					        *y = p.y;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxNonOwnedWindowCocoaImpl::WindowToScreen( int *x, int *y )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxPoint p(  (x ? *x : 0), (y ? *y : 0) );
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    p = [m_macWindow convertPoint:p toWindow:nil];
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					    if ( x )
 | 
				
			||||||
 | 
					        *x = p.x;
 | 
				
			||||||
 | 
					    if ( y )
 | 
				
			||||||
 | 
					        *y = p.y;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxNonOwnedWindowImpl* wxNonOwnedWindowImpl::CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, const wxPoint& pos, const wxSize& size,
 | 
				
			||||||
 | 
					    long style, long extraStyle, const wxString& name )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNonOwnedWindowImpl* now = new wxNonOwnedWindowCocoaImpl( wxpeer );
 | 
				
			||||||
 | 
					    now->Create( parent, pos, size, style , extraStyle, name );
 | 
				
			||||||
 | 
					    return now;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -26,29 +26,73 @@
 | 
				
			|||||||
#include "wx/imaglist.h"
 | 
					#include "wx/imaglist.h"
 | 
				
			||||||
#include "wx/osx/private.h"
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@interface wxNSTabView : NSTabView
 | 
					//
 | 
				
			||||||
 | 
					// controller
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxTabViewController : NSObject
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wxWidgetImpl* m_impl;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation;
 | 
					- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem;
 | 
				
			||||||
- (wxWidgetImpl*) implementation;
 | 
					- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSTabView : NSTabView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetCocoaImpl *) theImplementation;
 | 
				
			||||||
 | 
					- (wxWidgetCocoaImpl*) implementation;
 | 
				
			||||||
- (BOOL) isFlipped;
 | 
					- (BOOL) isFlipped;
 | 
				
			||||||
- (int) intValue;
 | 
					
 | 
				
			||||||
- (void) setIntValue:(int) v;
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxTabViewController
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id) init
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super init];
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSTabView* view = (wxNSTabView*) tabView;
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl* viewimpl = [view implementation];
 | 
				
			||||||
 | 
					    if ( viewimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNotebook* wxpeer = (wxNotebook*) viewimpl->GetWXPeer();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return YES;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxNSTabView* view = (wxNSTabView*) tabView;
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl* viewimpl = [view implementation];
 | 
				
			||||||
 | 
					    if ( viewimpl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNotebook* wxpeer = (wxNotebook*) viewimpl->GetWXPeer();
 | 
				
			||||||
 | 
					        wxpeer->HandleClicked(0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@end
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@implementation wxNSTabView
 | 
					@implementation wxNSTabView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
					- (void)setImplementation: (wxWidgetCocoaImpl *) theImplementation
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_impl = theImplementation;
 | 
					    impl = theImplementation;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (wxWidgetImpl*) implementation
 | 
					- (wxWidgetCocoaImpl*) implementation
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return m_impl;
 | 
					    return impl;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (BOOL) isFlipped
 | 
					- (BOOL) isFlipped
 | 
				
			||||||
@@ -56,22 +100,99 @@
 | 
				
			|||||||
    return YES;
 | 
					    return YES;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (int) intValue
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    NSTabViewItem* selectedItem = [self selectedTabViewItem];
 | 
					 | 
				
			||||||
    if ( selectedItem == nil )
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        return [self indexOfTabViewItem:selectedItem]+1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- (void) setIntValue:(int) v
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [self selectTabViewItemAtIndex:(v-1)];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@end
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxCocoaTabView : public wxWidgetCocoaImpl
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    wxCocoaTabView( wxWindowMac* peer , WXWidget w ) : wxWidgetCocoaImpl(peer, w)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void GetContentArea( int &left , int &top , int &width , int &height ) const 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNSTabView* slf = (wxNSTabView*) m_osxView;
 | 
				
			||||||
 | 
					        NSRect r = [slf contentRect];
 | 
				
			||||||
 | 
					        left = r.origin.x;
 | 
				
			||||||
 | 
					        top = r.origin.y;
 | 
				
			||||||
 | 
					        width = r.size.width;
 | 
				
			||||||
 | 
					        height = r.size.height;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void SetValue( wxInt32 value ) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNSTabView* slf = (wxNSTabView*) m_osxView;
 | 
				
			||||||
 | 
					        // avoid 'changed' events when setting the tab programmatically
 | 
				
			||||||
 | 
					        wxTabViewController* controller = [slf delegate];
 | 
				
			||||||
 | 
					        [slf setDelegate:nil];
 | 
				
			||||||
 | 
					        [slf selectTabViewItemAtIndex:(value-1)];
 | 
				
			||||||
 | 
					        [slf setDelegate:controller];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    wxInt32 GetValue() const
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNSTabView* slf = (wxNSTabView*) m_osxView;
 | 
				
			||||||
 | 
					        NSTabViewItem* selectedItem = [slf selectedTabViewItem];
 | 
				
			||||||
 | 
					        if ( selectedItem == nil )
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            return [slf indexOfTabViewItem:selectedItem]+1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void SetMaximum( wxInt32 maximum )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxNSTabView* slf = (wxNSTabView*) m_osxView;
 | 
				
			||||||
 | 
					        int cocoacount = [slf numberOfTabViewItems ];
 | 
				
			||||||
 | 
					        // avoid 'changed' events when setting the tab programmatically
 | 
				
			||||||
 | 
					        wxTabViewController* controller = [slf delegate];
 | 
				
			||||||
 | 
					        [slf setDelegate:nil];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if ( maximum > cocoacount )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for ( int i = cocoacount ; i < maximum ; ++i )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                NSTabViewItem* item = [[NSTabViewItem alloc] init];
 | 
				
			||||||
 | 
					                [slf addTabViewItem:item];
 | 
				
			||||||
 | 
					                [item release];
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if ( maximum < cocoacount )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for ( int i = cocoacount -1 ; i >= maximum ; --i )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                NSTabViewItem* item = [(wxNSTabView*) m_osxView tabViewItemAtIndex:i];
 | 
				
			||||||
 | 
					                [slf removeTabViewItem:item];
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [slf setDelegate:controller];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void SetupTabs( const wxNotebook& notebook)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        int pcount = notebook.GetPageCount();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        SetMaximum( pcount );
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        for ( int i = 0 ; i < pcount ; ++i )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            wxNotebookPage* page = notebook.GetPage(i);
 | 
				
			||||||
 | 
					            NSTabViewItem* item = [(wxNSTabView*) m_osxView tabViewItemAtIndex:i];
 | 
				
			||||||
 | 
					            [item setView:page->GetHandle() ];
 | 
				
			||||||
 | 
					            wxCFStringRef cf( page->GetLabel() , notebook.GetFont().GetEncoding() );
 | 
				
			||||||
 | 
					            [item setLabel:cf.AsNSString()];
 | 
				
			||||||
 | 
					            if ( notebook.GetImageList() && notebook.GetPageImage(i) >= 0 )
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                const wxBitmap bmap = notebook.GetImageList()->GetBitmap( notebook.GetPageImage( i ) ) ;
 | 
				
			||||||
 | 
					                if ( bmap.Ok() )
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // TODO how to set an image on a tab
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
#if 0
 | 
					#if 0
 | 
				
			||||||
    Rect bounds = wxMacGetBoundsForControl( this, pos, size );
 | 
					    Rect bounds = wxMacGetBoundsForControl( this, pos, size );
 | 
				
			||||||
@@ -120,18 +241,17 @@ wxWidgetImplType* wxWidgetImpl::CreateTabView( wxWindowMac* wxpeer,
 | 
				
			|||||||
                                    long style, 
 | 
					                                    long style, 
 | 
				
			||||||
                                    long extraStyle)
 | 
					                                    long extraStyle)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    static wxTabViewController* controller = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( !controller )
 | 
				
			||||||
 | 
					        controller =[[wxTabViewController alloc] init];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    /*    if ( bounds.right <= bounds.left )
 | 
					 | 
				
			||||||
        bounds.right = bounds.left + 100;
 | 
					 | 
				
			||||||
    if ( bounds.bottom <= bounds.top )
 | 
					 | 
				
			||||||
        bounds.bottom = bounds.top + 100;
 | 
					 | 
				
			||||||
    */
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSTabViewType tabstyle = NSTopTabsBezelBorder;
 | 
					    NSTabViewType tabstyle = NSTopTabsBezelBorder;
 | 
				
			||||||
   if ( style & wxBK_LEFT )
 | 
					    if ( style & wxBK_LEFT )
 | 
				
			||||||
        tabstyle = NSLeftTabsBezelBorder;
 | 
					        tabstyle = NSLeftTabsBezelBorder;
 | 
				
			||||||
    else if ( style & wxBK_RIGHT )
 | 
					    else if ( style & wxBK_RIGHT )
 | 
				
			||||||
        tabstyle = NSRightTabsBezelBorder;
 | 
					        tabstyle = NSRightTabsBezelBorder;
 | 
				
			||||||
@@ -141,77 +261,10 @@ wxWidgetImplType* wxWidgetImpl::CreateTabView( wxWindowMac* wxpeer,
 | 
				
			|||||||
    wxNSTabView* v = [[wxNSTabView alloc] initWithFrame:r];
 | 
					    wxNSTabView* v = [[wxNSTabView alloc] initWithFrame:r];
 | 
				
			||||||
    [sv addSubview:v];
 | 
					    [sv addSubview:v];
 | 
				
			||||||
    [v setTabViewType:tabstyle];
 | 
					    [v setTabViewType:tabstyle];
 | 
				
			||||||
    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
					    wxWidgetCocoaImpl* c = new wxCocoaTabView( wxpeer, v );
 | 
				
			||||||
    [v setImplementation:c];
 | 
					    [v setImplementation:c];
 | 
				
			||||||
 | 
					    [v setDelegate: controller];
 | 
				
			||||||
    return c;
 | 
					    return c;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxWidgetCocoaImpl::SetupTabs( const wxNotebook& notebook)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    int pcount = notebook.GetPageCount();
 | 
					 | 
				
			||||||
    int cocoacount = [ (wxNSTabView*) m_osxView numberOfTabViewItems ];
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if ( pcount > cocoacount )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        for ( int i = cocoacount ; i < pcount ; ++i )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            NSTabViewItem* item = [[NSTabViewItem alloc] init];
 | 
					 | 
				
			||||||
            [(wxNSTabView*) m_osxView addTabViewItem:item];
 | 
					 | 
				
			||||||
            [item release];
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else if ( pcount < cocoacount )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        for ( int i = cocoacount -1 ; i >= pcount ; --i )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            NSTabViewItem* item = [(wxNSTabView*) m_osxView tabViewItemAtIndex:i];
 | 
					 | 
				
			||||||
            [(wxNSTabView*) m_osxView removeTabViewItem:item];
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    for ( int i = 0 ; i < pcount ; ++i )
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        wxNotebookPage* page = notebook.GetPage(i);
 | 
					 | 
				
			||||||
        NSTabViewItem* item = [(wxNSTabView*) m_osxView tabViewItemAtIndex:i];
 | 
					 | 
				
			||||||
        [item setLabel:wxCFStringRef( page->GetLabel() , notebook.GetFont().GetEncoding() ).AsNSString()];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
    SetMaximum( GetPageCount() ) ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    wxNotebookPage *page;
 | 
					 | 
				
			||||||
    ControlTabInfoRecV1 info;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const size_t countPages = GetPageCount();
 | 
					 | 
				
			||||||
    for (size_t ii = 0; ii < countPages; ii++)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        page = (wxNotebookPage*) notebook->GetPage[ii];
 | 
					 | 
				
			||||||
        info.version = kControlTabInfoVersionOne;
 | 
					 | 
				
			||||||
        info.iconSuiteID = 0;
 | 
					 | 
				
			||||||
        wxCFStringRef cflabel( page->GetLabel(), GetFont().GetEncoding() ) ;
 | 
					 | 
				
			||||||
        info.name = cflabel ;
 | 
					 | 
				
			||||||
        SetData<ControlTabInfoRecV1>( ii + 1, kControlTabInfoTag, &info ) ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ( GetImageList() && GetPageImage(ii) >= 0 )
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            const wxBitmap bmap = GetImageList()->GetBitmap( GetPageImage( ii ) ) ;
 | 
					 | 
				
			||||||
            if ( bmap.Ok() )
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                ControlButtonContentInfo info ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                wxMacCreateBitmapButton( &info, bmap ) ;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                OSStatus err = SetData<ControlButtonContentInfo>( ii + 1, kControlTabImageContentTag, &info );
 | 
					 | 
				
			||||||
                if ( err != noErr )
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    wxFAIL_MSG("Error when setting icon on tab");
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                wxMacReleaseBitmapButton( &info ) ;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        SetTabEnabled( ii + 1, true ) ;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,8 +27,7 @@ wxWidgetImplType* wxWidgetImpl::CreateRadioButton( wxWindowMac* wxpeer,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
					    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    [v setButtonType:NSRadioButton];    
 | 
					    [v setButtonType:NSRadioButton];    
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										123
									
								
								src/osx/cocoa/scrolbar.mm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								src/osx/cocoa/scrolbar.mm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
				
			|||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        src/osx/cocoa/scrolbar.mm
 | 
				
			||||||
 | 
					// Purpose:     wxScrollBar
 | 
				
			||||||
 | 
					// Author:      Stefan Csomor
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     1998-01-01
 | 
				
			||||||
 | 
					// RCS-ID:      $Id: scrolbar.cpp 54129 2008-06-11 19:30:52Z SC $
 | 
				
			||||||
 | 
					// Copyright:   (c) Stefan Csomor
 | 
				
			||||||
 | 
					// Licence:       wxWindows licence
 | 
				
			||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/wxprec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/scrolbar.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef WX_PRECOMP
 | 
				
			||||||
 | 
					    #include "wx/intl.h"
 | 
				
			||||||
 | 
					    #include "wx/log.h"
 | 
				
			||||||
 | 
					    #include "wx/settings.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSScroller : NSScroller
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxWidgetImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation;
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation;
 | 
				
			||||||
 | 
					- (BOOL) isFlipped;
 | 
				
			||||||
 | 
					 - (void) clickedAction: (id) sender;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSScroller
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)initWithFrame:(NSRect)frame
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super initWithFrame:frame];
 | 
				
			||||||
 | 
					    impl = NULL;
 | 
				
			||||||
 | 
					    [self setTarget: self];
 | 
				
			||||||
 | 
					    [self setAction: @selector(clickedAction:)];
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) clickedAction: (id) sender
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( impl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
 | 
				
			||||||
 | 
					        if ( wxpeer )
 | 
				
			||||||
 | 
					            wxpeer->HandleClicked(0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl ;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (BOOL) isFlipped
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return YES;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxOSXScrollBarCocoaImpl : public wxWidgetCocoaImpl
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public :
 | 
				
			||||||
 | 
					    wxOSXScrollBarCocoaImpl( wxWindowMac* peer, WXWidget w) : wxWidgetCocoaImpl( peer, w )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void SetMaximum(wxInt32 v)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        m_maximum = v;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void    SetScrollThumb( wxInt32 value, wxInt32 thumbSize ) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        double v = ((double) value)/m_maximum;
 | 
				
			||||||
 | 
					        double t = ((double) thumbSize)/m_maximum;
 | 
				
			||||||
 | 
					#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
 | 
				
			||||||
 | 
					        [(wxNSScroller*) m_osxView setFloatValue:v knobProportion:t];
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        [(wxNSScroller*) m_osxView setDoubleValue:v];
 | 
				
			||||||
 | 
					        [(wxNSScroller*) m_osxView setKnobProportion:t];
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    wxInt32 GetValue() const
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return [(wxNSScroller*) m_osxView floatValue] * m_maximum;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					    wxInt32 m_maximum;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxWidgetImplType* wxWidgetImpl::CreateScrollBar( wxWindowMac* wxpeer, 
 | 
				
			||||||
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
 | 
					                                    const wxPoint& pos, 
 | 
				
			||||||
 | 
					                                    const wxSize& size,
 | 
				
			||||||
 | 
					                                    long style, 
 | 
				
			||||||
 | 
					                                    long extraStyle)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
 | 
					    wxNSScroller* v = [[wxNSScroller alloc] initWithFrame:r];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [sv addSubview:v];
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl* c = new wxOSXScrollBarCocoaImpl( wxpeer, v );
 | 
				
			||||||
 | 
					    [v setImplementation:c];
 | 
				
			||||||
 | 
					    return c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										108
									
								
								src/osx/cocoa/slider.mm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								src/osx/cocoa/slider.mm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,108 @@
 | 
				
			|||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        src/osx/cocoa/slider.mm
 | 
				
			||||||
 | 
					// Purpose:     wxSlider
 | 
				
			||||||
 | 
					// Author:      Stefan Csomor
 | 
				
			||||||
 | 
					// Modified by:
 | 
				
			||||||
 | 
					// Created:     1998-01-01
 | 
				
			||||||
 | 
					// RCS-ID:      $Id: slider.cpp 54129 2008-06-11 19:30:52Z SC $
 | 
				
			||||||
 | 
					// Copyright:   (c) Stefan Csomor
 | 
				
			||||||
 | 
					// Licence:       wxWindows licence
 | 
				
			||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/wxprec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_SLIDER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/slider.h"
 | 
				
			||||||
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@interface wxNSSlider : NSSlider
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    wxWidgetImpl* impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation;
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation;
 | 
				
			||||||
 | 
					- (BOOL) isFlipped;
 | 
				
			||||||
 | 
					 - (void) clickedAction: (id) sender;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSSlider
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (id)initWithFrame:(NSRect)frame
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [super initWithFrame:frame];
 | 
				
			||||||
 | 
					    impl = NULL;
 | 
				
			||||||
 | 
					    [self setTarget: self];
 | 
				
			||||||
 | 
					    [self setAction: @selector(clickedAction:)];
 | 
				
			||||||
 | 
					    return self;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void) clickedAction: (id) sender
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( impl )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
 | 
				
			||||||
 | 
					        if ( wxpeer )
 | 
				
			||||||
 | 
					            wxpeer->HandleClicked(0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (BOOL) isFlipped
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return YES;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxWidgetImplType* wxWidgetImpl::CreateSlider( wxWindowMac* wxpeer, 
 | 
				
			||||||
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
 | 
					                                    wxInt32 value,
 | 
				
			||||||
 | 
					                                    wxInt32 minimum,
 | 
				
			||||||
 | 
					                                    wxInt32 maximum,
 | 
				
			||||||
 | 
					                                    const wxPoint& pos, 
 | 
				
			||||||
 | 
					                                    const wxSize& size,
 | 
				
			||||||
 | 
					                                    long style, 
 | 
				
			||||||
 | 
					                                    long extraStyle)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
 | 
					    wxNSSlider* v = [[wxNSSlider alloc] initWithFrame:r];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int tickMarks = 0;
 | 
				
			||||||
 | 
					    if ( style & wxSL_AUTOTICKS )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        tickMarks = (maximum - minimum) + 1; // +1 for the 0 value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // keep the number of tickmarks from becoming unwieldly, therefore below it is ok to cast
 | 
				
			||||||
 | 
					        // it to a UInt16
 | 
				
			||||||
 | 
					        while (tickMarks > 20)
 | 
				
			||||||
 | 
					            tickMarks /= 5;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        [v setNumberOfTickMarks:tickMarks];
 | 
				
			||||||
 | 
					        [v setTickMarkPosition:NSTickMarkBelow];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [v setMinValue: minimum];
 | 
				
			||||||
 | 
					    [v setMaxValue: maximum];
 | 
				
			||||||
 | 
					    [v setFloatValue: (double) value];
 | 
				
			||||||
 | 
					    [sv addSubview:v];
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
				
			||||||
 | 
					    [v setImplementation:c];
 | 
				
			||||||
 | 
					    return c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_SLIDER
 | 
				
			||||||
@@ -16,6 +16,25 @@
 | 
				
			|||||||
#include "wx/statbox.h"
 | 
					#include "wx/statbox.h"
 | 
				
			||||||
#include "wx/osx/private.h"
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSBox
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (BOOL) isFlipped
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return NO;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxWidgetImplType* wxWidgetImpl::CreateGroupBox( wxWindowMac* wxpeer, 
 | 
					wxWidgetImplType* wxWidgetImpl::CreateGroupBox( wxWindowMac* wxpeer, 
 | 
				
			||||||
                                    wxWindowMac* parent, 
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
                                    wxWindowID id, 
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
@@ -27,8 +46,7 @@ wxWidgetImplType* wxWidgetImpl::CreateGroupBox( wxWindowMac* wxpeer,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSBox* v = [[wxNSBox alloc] initWithFrame:r];
 | 
					    wxNSBox* v = [[wxNSBox alloc] initWithFrame:r];
 | 
				
			||||||
    [sv addSubview:v];
 | 
					    [sv addSubview:v];
 | 
				
			||||||
    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
					    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,25 +33,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "wx/osx/private.h"
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@implementation wxNSBox
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    m_impl = theImplementation;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- (wxWidgetImpl*) implementation
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return m_impl;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- (BOOL) isFlipped
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return YES;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wxWidgetImplType* wxWidgetImpl::CreateStaticLine( wxWindowMac* wxpeer, 
 | 
					wxWidgetImplType* wxWidgetImpl::CreateStaticLine( wxWindowMac* wxpeer, 
 | 
				
			||||||
                                    wxWindowMac* parent, 
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
                                    wxWindowID id, 
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
@@ -62,8 +43,7 @@ wxWidgetImplType* wxWidgetImpl::CreateStaticLine( wxWindowMac* wxpeer,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSBox* v = [[wxNSBox alloc] initWithFrame:r];
 | 
					    wxNSBox* v = [[wxNSBox alloc] initWithFrame:r];
 | 
				
			||||||
    [sv addSubview:v];
 | 
					    [sv addSubview:v];
 | 
				
			||||||
    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
					    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,43 +92,6 @@ wxSize wxStaticText::DoGetBestSize() const
 | 
				
			|||||||
          to allow correct dynamic ellipsizing of the label
 | 
					          to allow correct dynamic ellipsizing of the label
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@interface wxNSTextField : NSTextField
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    wxWidgetImpl* m_impl;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation;
 | 
					 | 
				
			||||||
- (wxWidgetImpl*) implementation;
 | 
					 | 
				
			||||||
- (BOOL) isFlipped;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@implementation wxNSTextField
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    m_impl = theImplementation;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- (wxWidgetImpl*) implementation
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return m_impl;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- (BOOL) isFlipped
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return YES;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// use our common calls
 | 
					 | 
				
			||||||
- (void) setTitle:(NSString *) title
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    [self setStringValue: title];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wxWidgetImplType* wxWidgetImpl::CreateStaticText( wxWindowMac* wxpeer, 
 | 
					wxWidgetImplType* wxWidgetImpl::CreateStaticText( wxWindowMac* wxpeer, 
 | 
				
			||||||
                                    wxWindowMac* parent, 
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
                                    wxWindowID id, 
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
@@ -140,8 +103,7 @@ wxWidgetImplType* wxWidgetImpl::CreateStaticText( wxWindowMac* wxpeer,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSTextField* v = [[wxNSTextField alloc] initWithFrame:r];
 | 
					    wxNSTextField* v = [[wxNSTextField alloc] initWithFrame:r];
 | 
				
			||||||
    [sv addSubview:v];
 | 
					    [sv addSubview:v];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										138
									
								
								src/osx/cocoa/textctrl.mm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								src/osx/cocoa/textctrl.mm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,138 @@
 | 
				
			|||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Name:        src/osx/cocoa/textctrl.mm
 | 
				
			||||||
 | 
					// Purpose:     wxTextCtrl
 | 
				
			||||||
 | 
					// Author:      Stefan Csomor
 | 
				
			||||||
 | 
					// Modified by: Ryan Norton (MLTE GetLineLength and GetLineText)
 | 
				
			||||||
 | 
					// Created:     1998-01-01
 | 
				
			||||||
 | 
					// RCS-ID:      $Id: textctrl.cpp 54820 2008-07-29 20:04:11Z SC $
 | 
				
			||||||
 | 
					// Copyright:   (c) Stefan Csomor
 | 
				
			||||||
 | 
					// Licence:     wxWindows licence
 | 
				
			||||||
 | 
					/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/wxprec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_TEXTCTRL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/textctrl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef WX_PRECOMP
 | 
				
			||||||
 | 
					    #include "wx/intl.h"
 | 
				
			||||||
 | 
					    #include "wx/app.h"
 | 
				
			||||||
 | 
					    #include "wx/utils.h"
 | 
				
			||||||
 | 
					    #include "wx/dc.h"
 | 
				
			||||||
 | 
					    #include "wx/button.h"
 | 
				
			||||||
 | 
					    #include "wx/menu.h"
 | 
				
			||||||
 | 
					    #include "wx/settings.h"
 | 
				
			||||||
 | 
					    #include "wx/msgdlg.h"
 | 
				
			||||||
 | 
					    #include "wx/toplevel.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __DARWIN__
 | 
				
			||||||
 | 
					    #include <sys/types.h>
 | 
				
			||||||
 | 
					    #include <sys/stat.h>
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    #include <stat.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if wxUSE_STD_IOSTREAM
 | 
				
			||||||
 | 
					    #if wxUSE_IOSTREAMH
 | 
				
			||||||
 | 
					        #include <fstream.h>
 | 
				
			||||||
 | 
					    #else
 | 
				
			||||||
 | 
					        #include <fstream>
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/filefn.h"
 | 
				
			||||||
 | 
					#include "wx/sysopt.h"
 | 
				
			||||||
 | 
					#include "wx/thread.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
 | 
					#include "wx/osx/carbon/private/mactext.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@implementation wxNSTextField
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    impl = theImplementation;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (wxWidgetImpl*) implementation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return impl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- (BOOL) isFlipped
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return YES;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// use our common calls
 | 
				
			||||||
 | 
					- (void) setTitle:(NSString *) title
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [self setStringValue: title];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class wxNSTextFieldControl : public wxMacTextControl
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public :
 | 
				
			||||||
 | 
					    wxNSTextFieldControl( wxTextCtrl *wxPeer, WXWidget w ) : wxMacTextControl(wxPeer, w)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    virtual ~wxNSTextFieldControl()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void VisibilityChanged(bool shown){}
 | 
				
			||||||
 | 
					    virtual wxString GetStringValue() const 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxCFStringRef cf( (CFStringRef) [[(wxNSTextField*) m_osxView stringValue] retain] );
 | 
				
			||||||
 | 
					        return cf.AsString(m_wxPeer->GetFont().GetEncoding());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    virtual void SetStringValue( const wxString &str) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [(wxNSTextField*) m_osxView setStringValue: wxCFStringRef( str , m_wxPeer->GetFont().GetEncoding() ).AsNSString()];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    virtual void Copy() {}
 | 
				
			||||||
 | 
					    virtual void Cut() {}
 | 
				
			||||||
 | 
					    virtual void Paste() {}
 | 
				
			||||||
 | 
					    virtual bool CanPaste() const { return false;}
 | 
				
			||||||
 | 
					    virtual void SetEditable(bool editable) {}
 | 
				
			||||||
 | 
					    virtual void GetSelection( long* from, long* to) const {}
 | 
				
			||||||
 | 
					    virtual void SetSelection( long from , long to ){}
 | 
				
			||||||
 | 
					    virtual void WriteText(const wxString& str) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // temp hack to get logging working early
 | 
				
			||||||
 | 
					        wxString former = GetStringValue();
 | 
				
			||||||
 | 
					        SetStringValue( former + str );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer, 
 | 
				
			||||||
 | 
					                                    wxWindowMac* parent, 
 | 
				
			||||||
 | 
					                                    wxWindowID id, 
 | 
				
			||||||
 | 
					                                    const wxString& str,
 | 
				
			||||||
 | 
					                                    const wxPoint& pos, 
 | 
				
			||||||
 | 
					                                    const wxSize& size,
 | 
				
			||||||
 | 
					                                    long style, 
 | 
				
			||||||
 | 
					                                    long extraStyle)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
 | 
					    wxNSTextField* v = [[wxNSTextField alloc] initWithFrame:r];
 | 
				
			||||||
 | 
					    [sv addSubview:v];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //[v setBezeled:NO];
 | 
				
			||||||
 | 
					    //[v setEditable:NO];
 | 
				
			||||||
 | 
					    //[v setDrawsBackground:NO];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    wxWidgetCocoaImpl* c = new wxNSTextFieldControl( wxpeer, v );
 | 
				
			||||||
 | 
					    [v setImplementation:c];
 | 
				
			||||||
 | 
					    return c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // wxUSE_TEXTCTRL
 | 
				
			||||||
@@ -36,8 +36,7 @@ wxWidgetImplType* wxWidgetImpl::CreateToggleButton( wxWindowMac* wxpeer,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
					    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    [v setBezelStyle:NSRoundedBezelStyle];    
 | 
					    [v setBezelStyle:NSRoundedBezelStyle];    
 | 
				
			||||||
@@ -59,8 +58,7 @@ wxWidgetImplType* wxWidgetImpl::CreateBitmapToggleButton( wxWindowMac* wxpeer,
 | 
				
			|||||||
{    
 | 
					{    
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
					    wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    [v setBezelStyle:NSRegularSquareBezelStyle];
 | 
					    [v setBezelStyle:NSRegularSquareBezelStyle];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,9 +30,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if wxUSE_GUI
 | 
					#if wxUSE_GUI
 | 
				
			||||||
#if wxOSX_USE_COCOA_OR_CARBON
 | 
					#if wxOSX_USE_COCOA_OR_CARBON
 | 
				
			||||||
    #include "wx/osx/uma.h"
 | 
					 | 
				
			||||||
    #include <CoreServices/CoreServices.h>
 | 
					    #include <CoreServices/CoreServices.h>
 | 
				
			||||||
    #include <Carbon/Carbon.h>
 | 
					 | 
				
			||||||
    #include "wx/osx/private/timer.h"
 | 
					    #include "wx/osx/private/timer.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#endif // wxUSE_GUI
 | 
					#endif // wxUSE_GUI
 | 
				
			||||||
@@ -58,6 +56,17 @@ void wxMacWakeUp()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#endif // wxUSE_BASE
 | 
					#endif // wxUSE_BASE
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
					bool wxApp::DoInitGui()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [NSApplication sharedApplication];
 | 
				
			||||||
 | 
					    [NSApp finishLaunching];
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxApp::DoCleanUp()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxUSE_GUI
 | 
					#if wxUSE_GUI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxClientDisplayRect(int *x, int *y, int *width, int *height)
 | 
					void wxClientDisplayRect(int *x, int *y, int *width, int *height)
 | 
				
			||||||
@@ -82,7 +91,7 @@ void wxGetMousePosition( int* x, int* y )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
wxTimerImpl* wxGUIAppTraits::CreateTimerImpl(wxTimer *timer)
 | 
					wxTimerImpl* wxGUIAppTraits::CreateTimerImpl(wxTimer *timer)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return new wxCarbonTimerImpl(timer);
 | 
					    return new wxOSXTimerImpl(timer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int gs_wxBusyCursorCount = 0;
 | 
					int gs_wxBusyCursorCount = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,11 +17,20 @@
 | 
				
			|||||||
#include "wx/osx/private.h"
 | 
					#include "wx/osx/private.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if wxOSX_USE_COCOA
 | 
					NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size , bool adjustForOrigin )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int x, y, w, h ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    window->MacGetBoundsForControl( pos , size , x , y, w, h , adjustForOrigin ) ;
 | 
				
			||||||
 | 
					    wxRect bounds(x,y,w,h);
 | 
				
			||||||
 | 
					    NSView* sv = (window->GetParent()->GetHandle() );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return wxToNSRect( sv, bounds );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@interface wxNSView : NSView
 | 
					@interface wxNSView : NSView
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wxWidgetImpl* m_impl;
 | 
					    wxWidgetImpl* impl;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (void)drawRect: (NSRect) rect;
 | 
					- (void)drawRect: (NSRect) rect;
 | 
				
			||||||
@@ -59,7 +68,7 @@ void SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEvent )
 | 
				
			|||||||
    wxevent.m_altDown = modifiers & NSAlternateKeyMask;
 | 
					    wxevent.m_altDown = modifiers & NSAlternateKeyMask;
 | 
				
			||||||
    wxevent.m_metaDown = modifiers & NSCommandKeyMask;
 | 
					    wxevent.m_metaDown = modifiers & NSCommandKeyMask;
 | 
				
			||||||
    wxevent.m_clickCount = clickCount;
 | 
					    wxevent.m_clickCount = clickCount;
 | 
				
			||||||
    wxevent.SetTimestamp( [nsEvent timestamp] ) ;
 | 
					    wxevent.SetTimestamp( [nsEvent timestamp] * 1000.0 ) ;
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
    // a control click is interpreted as a right click
 | 
					    // a control click is interpreted as a right click
 | 
				
			||||||
    bool thisButtonIsFakeRight = false ;
 | 
					    bool thisButtonIsFakeRight = false ;
 | 
				
			||||||
@@ -182,12 +191,15 @@ void SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEvent )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@implementation wxNSView
 | 
					@implementation wxNSView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define OSX_DEBUG_DRAWING 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (void)drawRect: (NSRect) rect
 | 
					- (void)drawRect: (NSRect) rect
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if ( m_impl )
 | 
					    if ( impl )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
 | 
					        CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
 | 
				
			||||||
        CGContextSaveGState( context );
 | 
					        CGContextSaveGState( context );
 | 
				
			||||||
 | 
					#if OSX_DEBUG_DRAWING
 | 
				
			||||||
        CGContextBeginPath( context );
 | 
					        CGContextBeginPath( context );
 | 
				
			||||||
        CGContextMoveToPoint(context, 0, 0);
 | 
					        CGContextMoveToPoint(context, 0, 0);
 | 
				
			||||||
        NSRect bounds = [self bounds];
 | 
					        NSRect bounds = [self bounds];
 | 
				
			||||||
@@ -200,18 +212,32 @@ void SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEvent )
 | 
				
			|||||||
        CGContextAddLineToPoint(context, bounds.size.width-10, bounds.size.height);
 | 
					        CGContextAddLineToPoint(context, bounds.size.width-10, bounds.size.height);
 | 
				
			||||||
        CGContextClosePath( context );
 | 
					        CGContextClosePath( context );
 | 
				
			||||||
        CGContextStrokePath(context);
 | 
					        CGContextStrokePath(context);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ( [ self isFlipped ] == NO )
 | 
					        if ( [ self isFlipped ] == NO )
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            CGContextTranslateCTM( context, 0,  [self bounds].size.height );
 | 
					            CGContextTranslateCTM( context, 0,  [self bounds].size.height );
 | 
				
			||||||
            CGContextScaleCTM( context, 1, -1 );
 | 
					            CGContextScaleCTM( context, 1, -1 );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        m_impl->GetWXPeer()->MacSetCGContextRef( context );
 | 
					        
 | 
				
			||||||
 | 
					        wxRegion updateRgn;
 | 
				
			||||||
 | 
					        const NSRect *rects;
 | 
				
			||||||
 | 
					        int count ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [self getRectsBeingDrawn:&rects count:&count];
 | 
				
			||||||
 | 
					        for ( int i = 0 ; i < count ; ++i )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            updateRgn.Union(wxFromNSRect(self, rects[i]) );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        wxWindow* wxpeer = impl->GetWXPeer();
 | 
				
			||||||
 | 
					        wxpeer->GetUpdateRegion() = updateRgn;
 | 
				
			||||||
 | 
					        wxpeer->MacSetCGContextRef( context );
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        wxPaintEvent event;
 | 
					        wxPaintEvent event;
 | 
				
			||||||
        event.SetTimestamp(0); //  todo
 | 
					        event.SetTimestamp(0); //  todo
 | 
				
			||||||
        event.SetEventObject(m_impl->GetWXPeer());
 | 
					        event.SetEventObject(wxpeer);
 | 
				
			||||||
        m_impl->GetWXPeer()->HandleWindowEvent(event);
 | 
					        wxpeer->HandleWindowEvent(event);
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
        CGContextRestoreGState( context );
 | 
					        CGContextRestoreGState( context );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -256,17 +282,17 @@ void SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEvent )
 | 
				
			|||||||
    SetupMouseEvent( wxevent , event ) ;
 | 
					    SetupMouseEvent( wxevent , event ) ;
 | 
				
			||||||
    wxevent.m_x = pt.x;
 | 
					    wxevent.m_x = pt.x;
 | 
				
			||||||
    wxevent.m_y = pt.y;
 | 
					    wxevent.m_y = pt.y;
 | 
				
			||||||
    m_impl->GetWXPeer()->HandleWindowEvent(wxevent);
 | 
					    impl->GetWXPeer()->HandleWindowEvent(wxevent);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
					- (void)setImplementation: (wxWidgetImpl *) theImplementation
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_impl = theImplementation;
 | 
					    impl = theImplementation;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (wxWidgetImpl*) implementation
 | 
					- (wxWidgetImpl*) implementation
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return m_impl;
 | 
					    return impl;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- (BOOL) isFlipped
 | 
					- (BOOL) isFlipped
 | 
				
			||||||
@@ -313,7 +339,14 @@ void wxWidgetCocoaImpl::Init()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
wxWidgetCocoaImpl::~wxWidgetCocoaImpl()
 | 
					wxWidgetCocoaImpl::~wxWidgetCocoaImpl()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [m_osxView setImplementation:NULL];
 | 
					    if ( [m_osxView respondsToSelector:@selector(setImplementation:) ] )
 | 
				
			||||||
 | 
					        [m_osxView setImplementation:NULL];
 | 
				
			||||||
 | 
					    if ( !IsRootControl() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        NSView *sv = [m_osxView superview];
 | 
				
			||||||
 | 
					        if ( sv != nil )
 | 
				
			||||||
 | 
					            [m_osxView removeFromSuperview];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    [m_osxView release];
 | 
					    [m_osxView release];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@@ -322,6 +355,11 @@ bool wxWidgetCocoaImpl::IsVisible() const
 | 
				
			|||||||
    return [m_osxView isHiddenOrHasHiddenAncestor] == NO;
 | 
					    return [m_osxView isHiddenOrHasHiddenAncestor] == NO;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::SetVisibility( bool visible )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [m_osxView setHidden:(visible ? NO:YES)];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxWidgetCocoaImpl::Raise()
 | 
					void wxWidgetCocoaImpl::Raise()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -354,7 +392,7 @@ void wxWidgetCocoaImpl::GetSize( int &width, int &height ) const
 | 
				
			|||||||
    height = rect.size.height;
 | 
					    height = rect.size.height;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxWidgetCocoaImpl::GetContentArea( int&left, int &top, int &width, int &height )
 | 
					void wxWidgetCocoaImpl::GetContentArea( int&left, int &top, int &width, int &height ) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    left = top = 0;
 | 
					    left = top = 0;
 | 
				
			||||||
    GetSize( width, height );
 | 
					    GetSize( width, height );
 | 
				
			||||||
@@ -373,19 +411,23 @@ bool wxWidgetCocoaImpl::GetNeedsDisplay() const
 | 
				
			|||||||
    return [m_osxView needsDisplay];
 | 
					    return [m_osxView needsDisplay];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wxWidgetCocoaImpl::CanFocus() const
 | 
					bool wxWidgetCocoaImpl::CanFocus() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return [m_osxView acceptsFirstResponder] == YES;
 | 
					    return [m_osxView canBecomeKeyView] == YES;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool wxWidgetCocoaImpl::HasFocus() const
 | 
					bool wxWidgetCocoaImpl::HasFocus() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return [m_osxView isFirstResponder] == YES;
 | 
					    return ( [[m_osxView window] firstResponder] == m_osxView );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool wxWidgetCocoaImpl::SetFocus() 
 | 
					bool wxWidgetCocoaImpl::SetFocus() 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    [m_osxView makeKeyWindow] ;
 | 
					    if ( [m_osxView canBecomeKeyView] == NO )
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    [[m_osxView window] makeFirstResponder: m_osxView] ;
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -401,18 +443,121 @@ void wxWidgetCocoaImpl::Embed( wxWidgetImpl *parent )
 | 
				
			|||||||
    [container addSubview:m_osxView];
 | 
					    [container addSubview:m_osxView];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::SetBackgroundColour( const wxColour &WXUNUSED(col) )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // m_osxView.backgroundColor = [[UIColor alloc] initWithCGColor:col.GetCGColor()];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::SetLabel( const wxString& title, wxFontEncoding encoding )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ( [m_osxView respondsToSelector:@selector(setTitle:) ] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        wxCFStringRef cf( title , m_wxPeer->GetFont().GetEncoding() );
 | 
				
			||||||
 | 
					        [m_osxView setTitle:cf.AsNSString()];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void  wxWidgetImpl::Convert( wxPoint *pt , wxWidgetImpl *from , wxWidgetImpl *to )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    NSPoint p = wxToNSPoint( from->GetWXWidget(), *pt );
 | 
				
			||||||
 | 
					    p = [from->GetWXWidget() convertPoint:p toView:to->GetWXWidget() ]; 
 | 
				
			||||||
 | 
					    *pt = wxFromNSPoint( to->GetWXWidget(), p );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wxInt32 wxWidgetCocoaImpl::GetValue() const 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return [(NSControl*)m_osxView intValue];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::SetValue( wxInt32 v ) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (  [m_osxView respondsToSelector:@selector(setIntValue:)] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxView setIntValue:v];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if (  [m_osxView respondsToSelector:@selector(setFloatValue:)] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxView setFloatValue:(double)v];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if (  [m_osxView respondsToSelector:@selector(setDoubleValue:)] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxView setDoubleValue:(double)v];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::SetMinimum( wxInt32 v ) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (  [m_osxView respondsToSelector:@selector(setMinValue:)] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxView setMinValue:(double)v];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::SetMaximum( wxInt32 v ) 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (  [m_osxView respondsToSelector:@selector(setMaxValue:)] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxView setMaxValue:(double)v];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::SetBitmap( const wxBitmap& bitmap )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (  [m_osxView respondsToSelector:@selector(setImage:)] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        [m_osxView setImage:bitmap.GetNSImage()];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::SetupTabs( const wxNotebook& notebook)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // implementation in subclass
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::GetBestRect( wxRect *r ) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    r->x = r->y = r->width = r->height = 0;
 | 
				
			||||||
 | 
					//    if (  [m_osxView isKindOfClass:[NSControl class]] )
 | 
				
			||||||
 | 
					    if (  [m_osxView respondsToSelector:@selector(sizeToFit)] )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        NSRect former = [m_osxView frame];
 | 
				
			||||||
 | 
					        [m_osxView sizeToFit];
 | 
				
			||||||
 | 
					        NSRect best = [m_osxView frame];
 | 
				
			||||||
 | 
					        [m_osxView setFrame:former];
 | 
				
			||||||
 | 
					        r->width = best.size.width;
 | 
				
			||||||
 | 
					        r->height = best.size.height;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool wxWidgetCocoaImpl::IsEnabled() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return [m_osxView enable];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::Enable( bool enable )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [m_osxView setEnabled:enable];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::PulseGauge()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wxWidgetCocoaImpl::SetScrollThumb( wxInt32 val, wxInt32 view )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Factory methods
 | 
					// Factory methods
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxWidgetImpl* wxWidgetImpl::CreateUserPane( wxWindowMac* wxpeer, const wxPoint& pos, const wxSize& size,
 | 
					wxWidgetImpl* wxWidgetImpl::CreateUserPane( wxWindowMac* wxpeer, wxWindowMac* parent, wxWindowID id, const wxPoint& pos, const wxSize& size,
 | 
				
			||||||
                            long style, long extraStyle, const wxString& name)
 | 
					                            long style, long extraStyle)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
					    NSView* sv = (wxpeer->GetParent()->GetHandle() );
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    NSRect r = wxToNSRect( sv, wxRect( pos, size) );
 | 
					    NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
 | 
				
			||||||
    // Rect bounds = wxMacGetBoundsForControl( wxpeer, pos , size ) ;
 | 
					 | 
				
			||||||
    wxNSView* v = [[wxNSView alloc] initWithFrame:r];
 | 
					    wxNSView* v = [[wxNSView alloc] initWithFrame:r];
 | 
				
			||||||
    [sv addSubview:v];
 | 
					    [sv addSubview:v];
 | 
				
			||||||
    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
					    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
 | 
				
			||||||
@@ -429,6 +574,3 @@ wxWidgetImpl* wxWidgetImpl::CreateContentView( wxNonOwnedWindow* now )
 | 
				
			|||||||
    [tlw setContentView:v];
 | 
					    [tlw setContentView:v];
 | 
				
			||||||
    return c;
 | 
					    return c;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user