// Author: Stefan Csomor
// Modified by:
// Created: 2008-06-20
-// RCS-ID: $Id: window.mm 48805 2007-09-19 14:52:25Z SC $
+// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/log.h"
#endif
+#include "wx/textctrl.h"
+
#include <objc/runtime.h>
WXWidget wxWidgetImpl::FindFocus()
class_addMethod(c, @selector(drawRect:), (IMP) wxOSX_drawRect, "v@:{_CGRect={_CGPoint=ff}{_CGSize=ff}}" );
}
+//
+// UIControl extensions
+//
+
+@interface UIControl (wxUIControlActionSupport)
+
+- (void) WX_touchUpInsideAction:(id)sender event:(UIEvent*)event;
+- (void) WX_valueChangedAction:(id)sender event:(UIEvent*)event;
+
+@end
+
+@implementation UIControl (wxUIControlActionSupport)
+
+- (void) WX_touchUpInsideAction:(id)sender event:(UIEvent*)event
+{
+ wxWidgetIPhoneImpl* impl = (wxWidgetIPhoneImpl* ) wxWidgetImpl::FindFromWXWidget( self );
+ if (impl != NULL)
+ impl->controlAction(sender, UIControlEventTouchUpInside, event);
+}
+
+- (void) WX_valueChangedAction:(id)sender event:(UIEvent*)event
+{
+ wxWidgetIPhoneImpl* impl = (wxWidgetIPhoneImpl* ) wxWidgetImpl::FindFromWXWidget( self );
+ if (impl != NULL)
+ impl->controlAction(sender, UIControlEventValueChanged, event);
+}
+
+@end
IMPLEMENT_DYNAMIC_CLASS( wxWidgetIPhoneImpl , wxWidgetImpl )
-wxWidgetIPhoneImpl::wxWidgetIPhoneImpl( wxWindowMac* peer , WXWidget w, bool isRootControl ) :
- wxWidgetImpl( peer, isRootControl ), m_osxView(w)
+wxWidgetIPhoneImpl::wxWidgetIPhoneImpl( wxWindowMac* peer , WXWidget w, bool isRootControl, bool isUserPane ) :
+ wxWidgetImpl( peer, isRootControl, isUserPane ), m_osxView(w)
{
}
[m_osxView setFrame:r];
}
+
+
void wxWidgetIPhoneImpl::GetPosition( int &x, int &y ) const
{
CGRect r = [m_osxView frame];
m_osxView.backgroundColor = [[UIColor alloc] initWithCGColor:col.GetCGColor()];
}
+bool wxWidgetIPhoneImpl::SetBackgroundStyle(wxBackgroundStyle style)
+{
+ if ( style == wxBG_STYLE_PAINT )
+ [m_osxView setOpaque: YES ];
+ else
+ {
+ [m_osxView setOpaque: NO ];
+ m_osxView.backgroundColor = [UIColor clearColor];
+ }
+ return true;
+}
+
void wxWidgetIPhoneImpl::SetLabel(const wxString& title, wxFontEncoding encoding)
{
if ( [m_osxView respondsToSelector:@selector(setTitle:forState:) ] )
wxCFStringRef cf( title , encoding );
[m_osxView setTitle:cf.AsNSString() forState:UIControlStateNormal ];
}
+#if 0 // nonpublic API problems
else if ( [m_osxView respondsToSelector:@selector(setStringValue:) ] )
{
wxCFStringRef cf( title , encoding );
[m_osxView setStringValue:cf.AsNSString()];
}
+#endif
}
bool wxWidgetIPhoneImpl::IsEnabled() const
{
+ UIView* targetView = m_osxView;
+ // TODO add support for documentViews
+
+ if ( [targetView respondsToSelector:@selector(isEnabled) ] )
+ return [targetView isEnabled];
+
+ return true;
}
void wxWidgetIPhoneImpl::Enable( bool enable )
{
+ UIView* targetView = m_osxView;
+ // TODO add support for documentViews
+
+ if ( [targetView respondsToSelector:@selector(setEnabled:) ] )
+ [targetView setEnabled:enable];
}
void wxWidgetIPhoneImpl::SetMinimum( wxInt32 v )
wxInt32 wxWidgetIPhoneImpl::GetMinimum() const
{
+ return 0;
}
wxInt32 wxWidgetIPhoneImpl::GetMaximum() const
{
+ return 0;
}
void wxWidgetIPhoneImpl::PulseGauge()
{
}
+float wxWidgetIPhoneImpl::GetContentScaleFactor() const
+{
+ if ( [m_osxView respondsToSelector:@selector(contentScaleFactor) ])
+ return [m_osxView contentScaleFactor];
+ else
+ return 1.0;
+}
+
void wxWidgetIPhoneImpl::SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack )
{
}
{
WXWidget c = control ? control : (WXWidget) m_osxView;
wxWidgetImpl::Associate( c, this ) ;
-
- if ([c isKindOfClass:[UIControl class] ])
+
+ if ([c isKindOfClass:[UIControl class] ])
{
UIControl* cc = (UIControl*) c;
- /*
- [cc addTarget:self action:@selector(touchUpInsideAction:event:) forControlEvents:UIControlEventTouchUpInside];
- */
+ [cc addTarget:cc action:@selector(WX_touchUpInsideAction:event:) forControlEvents:UIControlEventTouchUpInside];
+ [cc addTarget:cc action:@selector(WX_valueChangedAction:event:) forControlEvents:UIControlEventValueChanged];
}
}
CGContextRef context = (CGContextRef) UIGraphicsGetCurrentContext();
CGContextSaveGState( context );
// draw background
-
+/*
CGContextSetFillColorWithColor( context, GetWXPeer()->GetBackgroundColour().GetCGColor());
CGContextFillRect(context, *rect );
-
+*/
GetWXPeer()->MacSetCGContextRef( context );
GetWXPeer()->GetUpdateRegion() =
}
}
-void wxWidgetIPhoneImpl::touchUpInsideAction(void* sender, WX_UIEvent evt, WXWidget slf, void* _cmd)
+void wxWidgetIPhoneImpl::controlAction(void* sender, wxUint32 controlEvent, WX_UIEvent rawEvent)
{
+ if ( controlEvent == UIControlEventTouchUpInside )
+ GetWXPeer()->OSXHandleClicked(0);
+}
+
+void wxWidgetIPhoneImpl::controlTextDidChange()
+{
+ wxTextCtrl* wxpeer = wxDynamicCast((wxWindow*)GetWXPeer(),wxTextCtrl);
+ if ( wxpeer )
+ {
+ wxCommandEvent event(wxEVT_TEXT, wxpeer->GetId());
+ event.SetEventObject( wxpeer );
+ event.SetString( wxpeer->GetValue() );
+ wxpeer->HandleWindowEvent( event );
+ }
}
//
sv.clipsToBounds = YES;
sv.contentMode = UIViewContentModeRedraw;
sv.clearsContextBeforeDrawing = NO;
- wxWidgetIPhoneImpl* c = new wxWidgetIPhoneImpl( wxpeer, v );
+ wxWidgetIPhoneImpl* c = new wxWidgetIPhoneImpl( wxpeer, v, false, true );
return c;
}