X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e181c7a2c32193fc8138cc32ed07984eadd4a21..ab67e8874db324fab5223cc8d5dff8a8de3e2b77:/src/osx/cocoa/srchctrl.mm?ds=sidebyside diff --git a/src/osx/cocoa/srchctrl.mm b/src/osx/cocoa/srchctrl.mm index 0c33e98599..567789a2e9 100644 --- a/src/osx/cocoa/srchctrl.mm +++ b/src/osx/cocoa/srchctrl.mm @@ -1,11 +1,11 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: src/osx/carbon/srchctrl.cpp +// Name: src/osx/cocoa/srchctrl.mm // Purpose: implements mac carbon wxSearchCtrl // Author: Vince Harron // Created: 2006-02-19 -// RCS-ID: $Id: srchctrl.cpp 54820 2008-07-29 20:04:11Z SC $ +// RCS-ID: $Id$ // Copyright: Vince Harron -// License: wxWindows licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx.h". @@ -31,61 +31,58 @@ @interface wxNSSearchField : NSSearchField { - wxWidgetImpl* impl; } @end @implementation wxNSSearchField -- (id)initWithFrame:(NSRect)frame -{ - [super initWithFrame:frame]; - impl = NULL; - [self setTarget: self]; - [self setAction: @selector(searchAction:)]; - return self; -} - -- (void)setImplementation: (wxWidgetImpl *) theImplementation -{ - impl = theImplementation; -} - -- (wxWidgetImpl*) implementation ++ (void)initialize { - return impl; + static BOOL initialized = NO; + if (!initialized) + { + initialized = YES; + wxOSXCocoaClassAddWXMethods( self ); + } } -- (BOOL) isFlipped +- (id)initWithFrame:(NSRect)frame { - return YES; + self = [super initWithFrame:frame]; + return self; } - -// use our common calls -- (void) setTitle:(NSString *) title + +- (void)controlTextDidChange:(NSNotification *)aNotification { - [self setStringValue: title]; + wxUnusedVar(aNotification); + wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); + if ( impl ) + impl->controlTextDidChange(); } -- (void) searchAction: (id) sender +- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words + forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(int*)index { - if ( impl ) - { - wxSearchCtrl* wxpeer = dynamic_cast( impl->GetWXPeer() ); - if ( wxpeer ) - { - NSString *searchString = [self stringValue]; - if ( searchString == nil ) - { - wxpeer->HandleSearchFieldCancelHit(); - } - else - { - wxpeer->HandleSearchFieldSearchHit(); - } - } - } + NSMutableArray* matches = NULL; + NSString* partialString; + + partialString = [[textView string] substringWithRange:charRange]; + matches = [NSMutableArray array]; + + // wxTextWidgetImpl* impl = (wxTextWidgetImpl* ) wxWidgetImpl::FindFromWXWidget( self ); + wxArrayString completions; + + // adapt to whatever strategy we have for getting the strings + // impl->GetTextEntry()->GetCompletions(wxCFStringRef::AsString(partialString), completions); + + for (size_t i = 0; i < completions.GetCount(); ++i ) + [matches addObject: wxCFStringRef(completions[i]).AsNSString()]; + + // [matches sortUsingSelector:@selector(compare:)]; + + + return matches; } @end @@ -113,7 +110,7 @@ public : [m_searchFieldCell setSearchButtonCell:nil]; [m_searchField setNeedsDisplay:YES]; } - + virtual bool IsSearchButtonVisible() const { return [m_searchFieldCell searchButtonCell] != nil; @@ -127,7 +124,7 @@ public : [m_searchFieldCell setCancelButtonCell:nil]; [m_searchField setNeedsDisplay:YES]; } - + virtual bool IsCancelButtonVisible() const { return [m_searchFieldCell cancelButtonCell] != nil; @@ -147,12 +144,29 @@ public : [m_searchFieldCell setPlaceholderString: wxCFStringRef( text , m_wxPeer->GetFont().GetEncoding() ).AsNSString()]; } - + virtual bool SetFocus() { return wxNSTextFieldControl::SetFocus(); } + void controlAction( WXWidget WXUNUSED(slf), void *WXUNUSED(_cmd), void *WXUNUSED(sender)) + { + wxSearchCtrl* wxpeer = (wxSearchCtrl*) GetWXPeer(); + if ( wxpeer ) + { + NSString *searchString = [m_searchField stringValue]; + if ( searchString == nil ) + { + wxpeer->HandleSearchFieldCancelHit(); + } + else + { + wxpeer->HandleSearchFieldSearchHit(); + } + } + } + private: wxNSSearchField* m_searchField; NSSearchFieldCell* m_searchFieldCell; @@ -162,27 +176,24 @@ wxNSSearchFieldControl::~wxNSSearchFieldControl() { } -wxWidgetImplType* wxWidgetImpl::CreateSearchControl( wxTextCtrl* wxpeer, - wxWindowMac* parent, - wxWindowID id, +wxWidgetImplType* wxWidgetImpl::CreateSearchControl( wxSearchCtrl* wxpeer, + wxWindowMac* WXUNUSED(parent), + wxWindowID WXUNUSED(id), const wxString& str, - const wxPoint& pos, + const wxPoint& pos, const wxSize& size, - long style, - long extraStyle) + long WXUNUSED(style), + long WXUNUSED(extraStyle)) { - NSView* sv = (wxpeer->GetParent()->GetHandle() ); - NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ; wxNSSearchField* v = [[wxNSSearchField alloc] initWithFrame:r]; - [sv addSubview:v]; [[v cell] setSendsWholeSearchString:YES]; // per wx default cancel is not shown [[v cell] setCancelButtonCell:nil]; wxNSSearchFieldControl* c = new wxNSSearchFieldControl( wxpeer, v ); + c->SetNeedsFrame( false ); c->SetStringValue( str ); - [v setImplementation:c]; return c; }