///////////////////////////////////////////////////////////////////////////////
-// 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".
@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<wxSearchCtrl*>( 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
[m_searchFieldCell setSearchButtonCell:nil];
[m_searchField setNeedsDisplay:YES];
}
-
+
virtual bool IsSearchButtonVisible() const
{
return [m_searchFieldCell searchButtonCell] != nil;
[m_searchFieldCell setCancelButtonCell:nil];
[m_searchField setNeedsDisplay:YES];
}
-
+
virtual bool IsCancelButtonVisible() const
{
return [m_searchFieldCell cancelButtonCell] != nil;
[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;
{
}
-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;
}