From e32090bacd763d42b7408e17b81dfa29ed781146 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Thu, 12 Feb 2009 07:17:46 +0000 Subject: [PATCH] renaming clickedAction callbacks to more generic controlAction, textctrl updates git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58840 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/osx/cocoa/private.h | 4 +- include/wx/osx/cocoa/private/textimpl.h | 4 + src/osx/cocoa/listbox.mm | 35 +++++--- src/osx/cocoa/scrolbar.mm | 4 +- src/osx/cocoa/slider.mm | 4 +- src/osx/cocoa/spinbutt.mm | 4 +- src/osx/cocoa/srchctrl.mm | 6 -- src/osx/cocoa/textctrl.mm | 104 +++++++++++++++++------- src/osx/cocoa/window.mm | 32 +++++--- 9 files changed, 129 insertions(+), 68 deletions(-) diff --git a/include/wx/osx/cocoa/private.h b/include/wx/osx/cocoa/private.h index f590361da1..a3c3eb6e15 100644 --- a/include/wx/osx/cocoa/private.h +++ b/include/wx/osx/cocoa/private.h @@ -145,8 +145,8 @@ public : virtual bool isFlipped(WXWidget slf, void* _cmd); virtual void drawRect(void* rect, WXWidget slf, void* _cmd); - virtual void clickedAction(WXWidget slf, void* _cmd, void* sender); - virtual void doubleClickedAction(WXWidget slf, void* _cmd, void *sender); + virtual void controlAction(WXWidget slf, void* _cmd, void* sender); + virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender); protected: WXWidget m_osxView; diff --git a/include/wx/osx/cocoa/private/textimpl.h b/include/wx/osx/cocoa/private/textimpl.h index 223f4bfc3d..fd23df0bdc 100644 --- a/include/wx/osx/cocoa/private/textimpl.h +++ b/include/wx/osx/cocoa/private/textimpl.h @@ -32,6 +32,10 @@ public : virtual void GetSelection( long* from, long* to) const ; virtual void SetSelection( long from , long to ); virtual void WriteText(const wxString& str) ; + + virtual void controlAction(WXWidget slf, void* _cmd, void *sender); +protected : + NSTextField* m_textField; }; #endif // _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_ diff --git a/src/osx/cocoa/listbox.mm b/src/osx/cocoa/listbox.mm index 01bb7fc73f..45f1126bf4 100644 --- a/src/osx/cocoa/listbox.mm +++ b/src/osx/cocoa/listbox.mm @@ -143,8 +143,8 @@ public : virtual void UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL ) ; virtual void UpdateLineToEnd( unsigned int n); - virtual void clickedAction(WXWidget slf, void* _cmd, void *sender); - virtual void doubleClickedAction(void* _cmd); + virtual void controlAction(WXWidget slf, void* _cmd, void *sender); + virtual void controlDoubleAction(void* _cmd); protected : wxNSTableView* m_tableView ; @@ -326,8 +326,17 @@ wxListWidgetColumn* wxListWidgetCocoaImpl::InsertTextColumn( unsigned pos, const { [col1 setMaxWidth:defaultWidth]; [col1 setMinWidth:defaultWidth]; + [col1 setWidth:defaultWidth]; } - + else + { + [col1 setMaxWidth:1000]; + [col1 setMinWidth:10]; + // temporary hack, because I cannot get the automatic column resizing + // to work properly + [col1 setWidth:1000]; + } + [col1 setResizingMask: NSTableColumnAutoresizingMask]; wxCocoaTableColumn* wxcol = new wxCocoaTableColumn( col1, editable ); [col1 setColumn:wxcol]; @@ -360,8 +369,10 @@ wxListWidgetColumn* wxListWidgetCocoaImpl::InsertCheckColumn( unsigned pos , con { [col1 setMaxWidth:defaultWidth]; [col1 setMinWidth:defaultWidth]; + [col1 setWidth:defaultWidth]; } + [col1 setResizingMask: NSTableColumnNoResizing]; wxCocoaTableColumn* wxcol = new wxCocoaTableColumn( col1, editable ); [col1 setColumn:wxcol]; @@ -471,7 +482,7 @@ void wxListWidgetCocoaImpl::UpdateLineToEnd( unsigned int n) [m_tableView reloadData]; } -void wxListWidgetCocoaImpl::clickedAction(WXWidget slf,void* _cmd, void *sender) +void wxListWidgetCocoaImpl::controlAction(WXWidget slf,void* _cmd, void *sender) { wxListBox *list = static_cast ( GetWXPeer()); wxCHECK_RET( list != NULL , wxT("Listbox expected")); @@ -485,7 +496,7 @@ void wxListWidgetCocoaImpl::clickedAction(WXWidget slf,void* _cmd, void *sender) list->HandleLineEvent( sel, false ); } -void wxListWidgetCocoaImpl::doubleClickedAction(void* _cmd) +void wxListWidgetCocoaImpl::controlDoubleAction(void* _cmd) { wxListBox *list = static_cast ( GetWXPeer()); wxCHECK_RET( list != NULL , wxT("Listbox expected")); @@ -519,13 +530,10 @@ wxWidgetImplType* wxWidgetImpl::CreateListBox( wxWindowMac* wxpeer, [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]; @@ -533,9 +541,16 @@ wxWidgetImplType* wxWidgetImpl::CreateListBox( wxWindowMac* wxpeer, // simple listboxes have no header row [tableview setHeaderView:nil]; - [tableview setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle]; + if ( style & wxLB_HSCROLL ) + [tableview setColumnAutoresizingStyle:NSTableViewNoColumnAutoresizing]; + else + [tableview setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle]; + wxNSTableDataSource* ds = [[ wxNSTableDataSource alloc] init]; [tableview setDataSource:ds]; + [scrollview setDocumentView:tableview]; + [tableview release]; + wxListWidgetCocoaImpl* c = new wxListWidgetCocoaImpl( wxpeer, scrollview, tableview, ds ); // temporary hook for dnd diff --git a/src/osx/cocoa/scrolbar.mm b/src/osx/cocoa/scrolbar.mm index 533f5e92dc..3cac87abdf 100644 --- a/src/osx/cocoa/scrolbar.mm +++ b/src/osx/cocoa/scrolbar.mm @@ -75,7 +75,7 @@ public : return m_maximum; } - virtual void clickedAction(WXWidget slf, void* _cmd, void *sender); + virtual void controlAction(WXWidget slf, void* _cmd, void *sender); virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd); protected: wxInt32 m_maximum; @@ -87,7 +87,7 @@ protected: // to thumbtrack and only after super mouseDown // returns we will call the thumbrelease -void wxOSXScrollBarCocoaImpl::clickedAction( WXWidget slf, void *_cmd, void *sender) +void wxOSXScrollBarCocoaImpl::controlAction( WXWidget slf, void *_cmd, void *sender) { wxEventType scrollEvent = wxEVT_NULL; switch ([(NSScroller*)m_osxView hitPart]) diff --git a/src/osx/cocoa/slider.mm b/src/osx/cocoa/slider.mm index a627ce9feb..6e31a40e43 100644 --- a/src/osx/cocoa/slider.mm +++ b/src/osx/cocoa/slider.mm @@ -47,7 +47,7 @@ public : { } - virtual void clickedAction(WXWidget slf, void* _cmd, void *sender); + virtual void controlAction(WXWidget slf, void* _cmd, void *sender); virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd); }; @@ -57,7 +57,7 @@ public : // to thumbtrack and only after super mouseDown // returns we will call the thumbrelease -void wxSliderCocoaImpl::clickedAction( WXWidget slf, void *_cmd, void *sender) +void wxSliderCocoaImpl::controlAction( WXWidget slf, void *_cmd, void *sender) { wxWindow* wxpeer = (wxWindow*) GetWXPeer(); if ( wxpeer ) diff --git a/src/osx/cocoa/spinbutt.mm b/src/osx/cocoa/spinbutt.mm index 2104c0e7c2..35deb7a89a 100644 --- a/src/osx/cocoa/spinbutt.mm +++ b/src/osx/cocoa/spinbutt.mm @@ -48,7 +48,7 @@ public : { } - virtual void clickedAction(WXWidget slf, void* _cmd, void *sender); + virtual void controlAction(WXWidget slf, void* _cmd, void *sender); virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd); private: int m_formerValue; @@ -66,7 +66,7 @@ void wxSpinButtonCocoaImpl::mouseEvent(WX_NSEvent event, WXWidget slf, void *_cm wxWidgetCocoaImpl::mouseEvent(event, slf, _cmd); } -void wxSpinButtonCocoaImpl::clickedAction( WXWidget slf, void *_cmd, void *sender) +void wxSpinButtonCocoaImpl::controlAction( WXWidget slf, void *_cmd, void *sender) { wxWindow* wxpeer = (wxWindow*) GetWXPeer(); if ( wxpeer ) diff --git a/src/osx/cocoa/srchctrl.mm b/src/osx/cocoa/srchctrl.mm index 861605298e..4ca6328909 100644 --- a/src/osx/cocoa/srchctrl.mm +++ b/src/osx/cocoa/srchctrl.mm @@ -55,12 +55,6 @@ return self; } -// use our common calls -- (void) setTitle:(NSString *) title -{ - [self setStringValue: title]; -} - - (void) searchAction: (id) sender { wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); diff --git a/src/osx/cocoa/textctrl.mm b/src/osx/cocoa/textctrl.mm index a9898bf349..e22ce7b38f 100644 --- a/src/osx/cocoa/textctrl.mm +++ b/src/osx/cocoa/textctrl.mm @@ -49,7 +49,11 @@ #include "wx/osx/private.h" #include "wx/osx/cocoa/private/textimpl.h" -@implementation wxNSTextField +@interface wxNSSecureTextField : NSSecureTextField + +@end + +@implementation wxNSSecureTextField + (void)initialize { @@ -61,20 +65,20 @@ } } -- (id)initWithFrame:(NSRect)frame -{ - [super initWithFrame:frame]; - [self setDelegate: self]; - [self setTarget: self]; -// [self setAction: @selector(enterAction:)]; - return self; -} +@end + +@implementation wxNSTextField -// use our common calls -- (void) setTitle:(NSString *) title ++ (void)initialize { - [self setStringValue: title]; + static BOOL initialized = NO; + if (!initialized) + { + initialized = YES; + wxOSXCocoaClassAddWXMethods( self ); + } } + /* - (void)controlTextDidChange:(NSNotification *)aNotification { @@ -103,25 +107,13 @@ } } } - -- (void) enterAction: (id) sender -{ - if ( impl ) - { - wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer(); - if ( wxpeer && (wxpeer->GetWindowStyle() & wxTE_PROCESS_ENTER) ) { - wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, wxpeer->GetId()); - event.SetEventObject( wxpeer ); - event.SetString( static_cast(wxpeer)->GetValue() ); - wxpeer->HandleWindowEvent( event ); - } - } -} */ @end wxNSTextFieldControl::wxNSTextFieldControl( wxTextCtrl *wxPeer, WXWidget w ) : wxWidgetCocoaImpl(wxPeer, w) { + m_textField = (NSTextField*) w; + [m_textField setDelegate: w]; } wxNSTextFieldControl::~wxNSTextFieldControl() @@ -130,41 +122,68 @@ wxNSTextFieldControl::~wxNSTextFieldControl() wxString wxNSTextFieldControl::GetStringValue() const { - wxCFStringRef cf( (CFStringRef) [[(wxNSTextField*) m_osxView stringValue] retain] ); + wxCFStringRef cf( (CFStringRef) [[m_textField stringValue] retain] ); return cf.AsString(m_wxPeer->GetFont().GetEncoding()); } void wxNSTextFieldControl::SetStringValue( const wxString &str) { - [(wxNSTextField*) m_osxView setStringValue: wxCFStringRef( str , m_wxPeer->GetFont().GetEncoding() ).AsNSString()]; + [m_textField setStringValue: wxCFStringRef( str , m_wxPeer->GetFont().GetEncoding() ).AsNSString()]; } void wxNSTextFieldControl::Copy() { + NSText* editor = [m_textField currentEditor]; + if ( editor ) + { + [editor copy:nil]; + } } void wxNSTextFieldControl::Cut() { + NSText* editor = [m_textField currentEditor]; + if ( editor ) + { + [editor cut:nil]; + } } void wxNSTextFieldControl::Paste() { + NSText* editor = [m_textField currentEditor]; + if ( editor ) + { + [editor paste:nil]; + } } bool wxNSTextFieldControl::CanPaste() const { - return false; + return true; } void wxNSTextFieldControl::SetEditable(bool editable) { - [(wxNSTextField*) m_osxView setEditable:editable]; + [m_textField setEditable:editable]; } void wxNSTextFieldControl::GetSelection( long* from, long* to) const { + NSText* editor = [m_textField currentEditor]; + if ( editor ) + { + NSRange range = [editor selectedRange]; + *from = range.location; + *to = range.location + range.length; + } } void wxNSTextFieldControl::SetSelection( long from , long to ) { + NSText* editor = [m_textField currentEditor]; + if ( editor ) + { + [editor setSelectedRange:NSMakeRange(from, to-from)]; + } } void wxNSTextFieldControl::WriteText(const wxString& str) @@ -174,6 +193,22 @@ void wxNSTextFieldControl::WriteText(const wxString& str) SetStringValue( former + str ); } +void wxNSTextFieldControl::controlAction(WXWidget slf, void* _cmd, void *sender) +{ + wxWindow* wxpeer = (wxWindow*) GetWXPeer(); + if ( wxpeer && (wxpeer->GetWindowStyle() & wxTE_PROCESS_ENTER) ) + { + wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, wxpeer->GetId()); + event.SetEventObject( wxpeer ); + event.SetString( static_cast(wxpeer)->GetValue() ); + wxpeer->HandleWindowEvent( event ); + } +} + +// +// +// + wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer, wxWindowMac* parent, wxWindowID id, @@ -184,7 +219,12 @@ wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer, long extraStyle) { NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ; - wxNSTextField* v = [[wxNSTextField alloc] initWithFrame:r]; + NSTextField* v = nil; + + if ( style & wxTE_PASSWORD ) + v =[[wxNSSecureTextField alloc] initWithFrame:r]; + else + v= [[wxNSTextField alloc] initWithFrame:r]; if ( style & wxNO_BORDER ) { @@ -192,6 +232,8 @@ wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer, [v setBordered:NO]; } + [v setBezeled:NO]; + [v setBordered:NO]; //[v setBezeled:NO]; //[v setEditable:NO]; //[v setDrawsBackground:NO]; diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm index 845f69268f..a11d37eac9 100644 --- a/src/osx/cocoa/window.mm +++ b/src/osx/cocoa/window.mm @@ -316,16 +316,17 @@ void SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEvent ) case NSScrollWheel : { wxevent.SetEventType( wxEVT_MOUSEWHEEL ) ; - wxevent.m_wheelDelta = 1; + wxevent.m_wheelDelta = 10; wxevent.m_linesPerAction = 1; + NSLog(@"deltaX %f, deltaY %f",[nsEvent deltaX], [nsEvent deltaY]); if ( abs([nsEvent deltaX]) > abs([nsEvent deltaY]) ) { wxevent.m_wheelAxis = 1; - wxevent.m_wheelRotation = [nsEvent deltaX] > 0.0 ? 1 : -1; + wxevent.m_wheelRotation = [nsEvent deltaX] * 10.0; } else { - wxevent.m_wheelRotation = [nsEvent deltaY] > 0.0 ? 1 : -1; + wxevent.m_wheelRotation = [nsEvent deltaY] * 10.0; } } break ; @@ -479,22 +480,22 @@ void wxOSX_drawRect(NSView* self, SEL _cmd, NSRect rect) return impl->drawRect(&rect, self, _cmd); } -void wxOSX_clickedAction(NSView* self, SEL _cmd, id sender) +void wxOSX_controlAction(NSView* self, SEL _cmd, id sender) { wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); if (impl == NULL) return; - impl->clickedAction(self, _cmd, sender); + impl->controlAction(self, _cmd, sender); } -void wxOSX_doubleClickedAction(NSView* self, SEL _cmd, id sender) +void wxOSX_controlDoubleAction(NSView* self, SEL _cmd, id sender) { wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); if (impl == NULL) return; - impl->doubleClickedAction(self, _cmd, sender); + impl->controlDoubleAction(self, _cmd, sender); } unsigned int wxWidgetCocoaImpl::draggingEntered(void* s, WXWidget slf, void *_cmd) @@ -774,14 +775,14 @@ void wxWidgetCocoaImpl::drawRect(void* rect, WXWidget slf, void *_cmd) CGContextRestoreGState( context ); } -void wxWidgetCocoaImpl::clickedAction( WXWidget slf, void *_cmd, void *sender) +void wxWidgetCocoaImpl::controlAction( WXWidget slf, void *_cmd, void *sender) { wxWindow* wxpeer = (wxWindow*) GetWXPeer(); if ( wxpeer ) wxpeer->OSXHandleClicked(0); } -void wxWidgetCocoaImpl::doubleClickedAction( WXWidget slf, void *_cmd, void *sender) +void wxWidgetCocoaImpl::controlDoubleAction( WXWidget slf, void *_cmd, void *sender) { } @@ -839,8 +840,8 @@ void wxOSXCocoaClassAddWXMethods(Class c) wxOSX_CLASS_ADD_METHOD(c, @selector(isFlipped), (IMP) wxOSX_isFlipped, "c@:" ) wxOSX_CLASS_ADD_METHOD(c, @selector(drawRect:), (IMP) wxOSX_drawRect, "v@:{_NSRect={_NSPoint=ff}{_NSSize=ff}}" ) - wxOSX_CLASS_ADD_METHOD(c, @selector(clickedAction:), (IMP) wxOSX_clickedAction, "v@:@" ) - wxOSX_CLASS_ADD_METHOD(c, @selector(doubleClickedAction:), (IMP) wxOSX_doubleClickedAction, "v@:@" ) + wxOSX_CLASS_ADD_METHOD(c, @selector(controlAction:), (IMP) wxOSX_controlAction, "v@:@" ) + wxOSX_CLASS_ADD_METHOD(c, @selector(controlDoubleAction:), (IMP) wxOSX_controlDoubleAction, "v@:@" ) #if wxUSE_DRAG_AND_DROP wxOSX_CLASS_ADD_METHOD(c, @selector(draggingEntered:), (IMP) wxOSX_draggingEntered, "I@:@" ) @@ -1046,6 +1047,11 @@ void wxWidgetCocoaImpl::SetLabel( const wxString& title, wxFontEncoding encoding wxCFStringRef cf( title , m_wxPeer->GetFont().GetEncoding() ); [m_osxView setTitle:cf.AsNSString()]; } + else if ( [m_osxView respondsToSelector:@selector(setStringValue:) ] ) + { + wxCFStringRef cf( title , m_wxPeer->GetFont().GetEncoding() ); + [m_osxView setStringValue:cf.AsNSString()]; + } } @@ -1202,10 +1208,10 @@ void wxWidgetCocoaImpl::InstallEventHandler( WXWidget control ) if ([c respondsToSelector:@selector(setAction:)]) { [c setTarget: c]; - [c setAction: @selector(clickedAction:)]; + [c setAction: @selector(controlAction:)]; if ([c respondsToSelector:@selector(setDoubleAction:)]) { - [c setDoubleAction: @selector(doubleClickedAction:)]; + [c setDoubleAction: @selector(controlDoubleAction:)]; } } -- 2.45.2