]> git.saurik.com Git - wxWidgets.git/blob - src/osx/cocoa/textctrl.mm
Use wxMarkupParser in wxStaticText for dealing with markup.
[wxWidgets.git] / src / osx / cocoa / textctrl.mm
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/osx/cocoa/textctrl.mm
3 // Purpose: wxTextCtrl
4 // Author: Stefan Csomor
5 // Modified by: Ryan Norton (MLTE GetLineLength and GetLineText)
6 // Created: 1998-01-01
7 // RCS-ID: $Id: textctrl.cpp 54820 2008-07-29 20:04:11Z SC $
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #include "wx/wxprec.h"
13
14 #if wxUSE_TEXTCTRL
15
16 #include "wx/textctrl.h"
17
18 #ifndef WX_PRECOMP
19 #include "wx/intl.h"
20 #include "wx/app.h"
21 #include "wx/utils.h"
22 #include "wx/dc.h"
23 #include "wx/button.h"
24 #include "wx/menu.h"
25 #include "wx/settings.h"
26 #include "wx/msgdlg.h"
27 #include "wx/toplevel.h"
28 #endif
29
30 #ifdef __DARWIN__
31 #include <sys/types.h>
32 #include <sys/stat.h>
33 #else
34 #include <stat.h>
35 #endif
36
37 #if wxUSE_STD_IOSTREAM
38 #if wxUSE_IOSTREAMH
39 #include <fstream.h>
40 #else
41 #include <fstream>
42 #endif
43 #endif
44
45 #include "wx/filefn.h"
46 #include "wx/sysopt.h"
47 #include "wx/thread.h"
48
49 #include "wx/osx/private.h"
50 #include "wx/osx/cocoa/private/textimpl.h"
51
52 @interface NSView(EditableView)
53 - (BOOL)isEditable;
54 - (void)setEditable:(BOOL)flag;
55 - (BOOL)isSelectable;
56 - (void)setSelectable:(BOOL)flag;
57 @end
58
59 class wxMacEditHelper
60 {
61 public :
62 wxMacEditHelper( NSView* textView )
63 {
64 m_textView = textView;
65 m_formerEditable = YES;
66 if ( textView )
67 {
68 m_formerEditable = [textView isEditable];
69 m_formerSelectable = [textView isSelectable];
70 [textView setEditable:YES];
71 }
72 }
73
74 ~wxMacEditHelper()
75 {
76 if ( m_textView )
77 {
78 [m_textView setEditable:m_formerEditable];
79 [m_textView setSelectable:m_formerSelectable];
80 }
81 }
82
83 protected :
84 BOOL m_formerEditable ;
85 BOOL m_formerSelectable;
86 NSView* m_textView;
87 } ;
88
89 @implementation wxNSSecureTextField
90
91 + (void)initialize
92 {
93 static BOOL initialized = NO;
94 if (!initialized)
95 {
96 initialized = YES;
97 wxOSXCocoaClassAddWXMethods( self );
98 }
99 }
100
101 - (void)controlTextDidChange:(NSNotification *)aNotification
102 {
103 wxUnusedVar(aNotification);
104 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
105 if ( impl )
106 impl->controlTextDidChange();
107 }
108
109 - (void)controlTextDidEndEditing:(NSNotification *)aNotification
110 {
111 wxUnusedVar(aNotification);
112 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
113 if ( impl )
114 {
115 impl->DoNotifyFocusEvent( false, NULL );
116 }
117 }
118
119 @end
120
121 @interface wxNSTextScrollView : NSScrollView
122 {
123 }
124 @end
125
126 @implementation wxNSTextScrollView
127
128 + (void)initialize
129 {
130 static BOOL initialized = NO;
131 if (!initialized)
132 {
133 initialized = YES;
134 wxOSXCocoaClassAddWXMethods( self );
135 }
136 }
137
138 @end
139
140 @implementation wxNSTextFieldEditor
141
142 - (void) keyDown:(NSEvent*) event
143 {
144 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( (WXWidget) [self delegate] );
145 lastKeyDownEvent = event;
146 if ( impl == NULL || !impl->DoHandleKeyEvent(event) )
147 [super keyDown:event];
148 lastKeyDownEvent = nil;
149 }
150
151 - (void) keyUp:(NSEvent*) event
152 {
153 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( (WXWidget) [self delegate] );
154 if ( impl == NULL || !impl->DoHandleKeyEvent(event) )
155 [super keyUp:event];
156 }
157
158 - (void) flagsChanged:(NSEvent*) event
159 {
160 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( (WXWidget) [self delegate] );
161 if ( impl == NULL || !impl->DoHandleKeyEvent(event) )
162 [super flagsChanged:event];
163 }
164
165 - (BOOL) performKeyEquivalent:(NSEvent*) event
166 {
167 BOOL retval = [super performKeyEquivalent:event];
168 return retval;
169 }
170
171 - (void) insertText:(id) str
172 {
173 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( (WXWidget) [self delegate] );
174 if ( impl == NULL || lastKeyDownEvent==nil || !impl->DoHandleCharEvent(lastKeyDownEvent, str) )
175 {
176 [super insertText:str];
177 }
178 }
179
180 @end
181
182 @implementation wxNSTextView
183
184 + (void)initialize
185 {
186 static BOOL initialized = NO;
187 if (!initialized)
188 {
189 initialized = YES;
190 wxOSXCocoaClassAddWXMethods( self );
191 }
192 }
193
194 - (void)textDidChange:(NSNotification *)aNotification
195 {
196 wxUnusedVar(aNotification);
197 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
198 if ( impl )
199 impl->controlTextDidChange();
200 }
201
202 - (void) setEnabled:(BOOL) flag
203 {
204 // from Technical Q&A QA1461
205 if (flag) {
206 [self setTextColor: [NSColor controlTextColor]];
207
208 } else {
209 [self setTextColor: [NSColor disabledControlTextColor]];
210 }
211
212 [self setSelectable: flag];
213 [self setEditable: flag];
214 }
215
216 - (BOOL) isEnabled
217 {
218 return [self isEditable];
219 }
220
221 @end
222
223 @implementation wxNSTextField
224
225 + (void)initialize
226 {
227 static BOOL initialized = NO;
228 if (!initialized)
229 {
230 initialized = YES;
231 wxOSXCocoaClassAddWXMethods( self );
232 }
233 }
234
235 - (id) initWithFrame:(NSRect) frame
236 {
237 self = [super initWithFrame:frame];
238 fieldEditor = nil;
239 return self;
240 }
241
242 - (void) dealloc
243 {
244 [fieldEditor release];
245 [super dealloc];
246 }
247
248 - (void) setFieldEditor:(wxNSTextFieldEditor*) editor
249 {
250 fieldEditor = editor;
251 }
252
253 - (wxNSTextFieldEditor*) fieldEditor
254 {
255 return fieldEditor;
256 }
257
258 - (void) setEnabled:(BOOL) flag
259 {
260 [super setEnabled: flag];
261
262 if (![self drawsBackground]) {
263 // Static text is drawn incorrectly when disabled.
264 // For an explanation, see
265 // http://www.cocoabuilder.com/archive/message/cocoa/2006/7/21/168028
266 if (flag) {
267 [self setTextColor: [NSColor controlTextColor]];
268 } else {
269 [self setTextColor: [NSColor secondarySelectedControlColor]];
270 }
271 }
272 }
273
274 - (void)controlTextDidChange:(NSNotification *)aNotification
275 {
276 wxUnusedVar(aNotification);
277 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
278 if ( impl )
279 impl->controlTextDidChange();
280 }
281
282 - (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector
283 {
284 wxUnusedVar(textView);
285 wxUnusedVar(control);
286
287 BOOL handled = NO;
288
289 // send back key events wx' common code knows how to handle
290
291 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
292 if ( impl )
293 {
294 wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
295 if ( wxpeer )
296 {
297 if (commandSelector == @selector(insertNewline:))
298 {
299 [textView insertNewlineIgnoringFieldEditor:self];
300 handled = YES;
301 }
302 else if ( commandSelector == @selector(insertTab:))
303 {
304 [textView insertTabIgnoringFieldEditor:self];
305 handled = YES;
306 }
307 else if ( commandSelector == @selector(insertBacktab:))
308 {
309 [textView insertTabIgnoringFieldEditor:self];
310 handled = YES;
311 }
312 }
313 }
314
315 return handled;
316 }
317
318 - (void)controlTextDidEndEditing:(NSNotification *)aNotification
319 {
320 wxUnusedVar(aNotification);
321 wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
322 if ( impl )
323 {
324 impl->DoNotifyFocusEvent( false, NULL );
325 }
326 }
327 @end
328
329 // wxNSTextViewControl
330
331 wxNSTextViewControl::wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w )
332 : wxWidgetCocoaImpl(wxPeer, w),
333 wxTextWidgetImpl(wxPeer)
334 {
335 wxNSTextScrollView* sv = (wxNSTextScrollView*) w;
336 m_scrollView = sv;
337
338 [m_scrollView setHasVerticalScroller:YES];
339 [m_scrollView setHasHorizontalScroller:NO];
340 [m_scrollView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
341 NSSize contentSize = [m_scrollView contentSize];
342
343 wxNSTextView* tv = [[wxNSTextView alloc] initWithFrame: NSMakeRect(0, 0,
344 contentSize.width, contentSize.height)];
345 m_textView = tv;
346 [tv setVerticallyResizable:YES];
347 [tv setHorizontallyResizable:NO];
348 [tv setAutoresizingMask:NSViewWidthSizable];
349
350 [m_scrollView setDocumentView: tv];
351
352 [tv setDelegate: tv];
353
354 InstallEventHandler(tv);
355 }
356
357 wxNSTextViewControl::~wxNSTextViewControl()
358 {
359 if (m_textView)
360 [m_textView setDelegate: nil];
361 }
362
363 bool wxNSTextViewControl::CanFocus() const
364 {
365 // since this doesn't work (return false), we hardcode
366 // if (m_textView)
367 // return [m_textView canBecomeKeyView];
368 return true;
369 }
370
371 wxString wxNSTextViewControl::GetStringValue() const
372 {
373 if (m_textView)
374 {
375 wxString result = wxCFStringRef::AsString([m_textView string], m_wxPeer->GetFont().GetEncoding());
376 wxMacConvertNewlines13To10( &result ) ;
377 return result;
378 }
379 return wxEmptyString;
380 }
381 void wxNSTextViewControl::SetStringValue( const wxString &str)
382 {
383 wxString st = str;
384 wxMacConvertNewlines10To13( &st );
385 wxMacEditHelper helper(m_textView);
386
387 if (m_textView)
388 [m_textView setString: wxCFStringRef( st , m_wxPeer->GetFont().GetEncoding() ).AsNSString()];
389 }
390
391 void wxNSTextViewControl::Copy()
392 {
393 if (m_textView)
394 [m_textView copy:nil];
395
396 }
397
398 void wxNSTextViewControl::Cut()
399 {
400 if (m_textView)
401 [m_textView cut:nil];
402 }
403
404 void wxNSTextViewControl::Paste()
405 {
406 if (m_textView)
407 [m_textView paste:nil];
408 }
409
410 bool wxNSTextViewControl::CanPaste() const
411 {
412 return true;
413 }
414
415 void wxNSTextViewControl::SetEditable(bool editable)
416 {
417 if (m_textView)
418 [m_textView setEditable: editable];
419 }
420
421 void wxNSTextViewControl::GetSelection( long* from, long* to) const
422 {
423 if (m_textView)
424 {
425 NSRange range = [m_textView selectedRange];
426 *from = range.location;
427 *to = range.location + range.length;
428 }
429 }
430
431 void wxNSTextViewControl::SetSelection( long from , long to )
432 {
433 long textLength = [[m_textView string] length];
434 if ((from == -1) && (to == -1))
435 {
436 from = 0 ;
437 to = textLength ;
438 }
439 else
440 {
441 from = wxMin(textLength,wxMax(from,0)) ;
442 if ( to == -1 )
443 to = textLength;
444 else
445 to = wxMax(0,wxMin(textLength,to)) ;
446 }
447
448 NSRange selrange = NSMakeRange(from, to-from);
449 [m_textView setSelectedRange:selrange];
450 [m_textView scrollRangeToVisible:selrange];
451 }
452
453 void wxNSTextViewControl::WriteText(const wxString& str)
454 {
455 wxString st = str;
456 wxMacConvertNewlines10To13( &st );
457 wxMacEditHelper helper(m_textView);
458 NSEvent* formerEvent = m_lastKeyDownEvent;
459 m_lastKeyDownEvent = nil;
460 [m_textView insertText:wxCFStringRef( st , m_wxPeer->GetFont().GetEncoding() ).AsNSString()];
461 m_lastKeyDownEvent = formerEvent;
462 }
463
464 void wxNSTextViewControl::SetFont( const wxFont & font , const wxColour& WXUNUSED(foreground) , long WXUNUSED(windowStyle), bool WXUNUSED(ignoreBlack) )
465 {
466 if ([m_textView respondsToSelector:@selector(setFont:)])
467 [m_textView setFont: font.OSXGetNSFont()];
468 }
469
470 bool wxNSTextViewControl::GetStyle(long position, wxTextAttr& style)
471 {
472 if (m_textView && position >=0)
473 {
474 NSFont* font = NULL;
475 NSColor* bgcolor = NULL;
476 NSColor* fgcolor = NULL;
477 // NOTE: It appears that other platforms accept GetStyle with the position == length
478 // but that NSTextStorage does not accept length as a valid position.
479 // Therefore we return the default control style in that case.
480 if (position < [[m_textView string] length])
481 {
482 NSTextStorage* storage = [m_textView textStorage];
483 font = [[storage attribute:NSFontAttributeName atIndex:position effectiveRange:NULL] autorelease];
484 bgcolor = [[storage attribute:NSBackgroundColorAttributeName atIndex:position effectiveRange:NULL] autorelease];
485 fgcolor = [[storage attribute:NSForegroundColorAttributeName atIndex:position effectiveRange:NULL] autorelease];
486 }
487 else
488 {
489 NSDictionary* attrs = [m_textView typingAttributes];
490 font = [[attrs objectForKey:NSFontAttributeName] autorelease];
491 bgcolor = [[attrs objectForKey:NSBackgroundColorAttributeName] autorelease];
492 fgcolor = [[attrs objectForKey:NSForegroundColorAttributeName] autorelease];
493 }
494
495 if (font)
496 style.SetFont(wxFont(font));
497
498 if (bgcolor)
499 style.SetBackgroundColour(wxColour(bgcolor));
500
501 if (fgcolor)
502 style.SetTextColour(wxColour(fgcolor));
503 return true;
504 }
505
506 return false;
507 }
508
509 void wxNSTextViewControl::SetStyle(long start,
510 long end,
511 const wxTextAttr& style)
512 {
513 if (m_textView) {
514 NSRange range = NSMakeRange(start, end-start);
515 if (start == -1 && end == -1)
516 range = [m_textView selectedRange];
517
518 NSTextStorage* storage = [m_textView textStorage];
519
520 wxFont font = style.GetFont();
521 if (style.HasFont() && font.IsOk())
522 [storage addAttribute:NSFontAttributeName value:font.OSXGetNSFont() range:range];
523
524 wxColour bgcolor = style.GetBackgroundColour();
525 if (style.HasBackgroundColour() && bgcolor.IsOk())
526 [storage addAttribute:NSBackgroundColorAttributeName value:bgcolor.OSXGetNSColor() range:range];
527
528 wxColour fgcolor = style.GetTextColour();
529 if (style.HasTextColour() && fgcolor.IsOk())
530 [storage addAttribute:NSForegroundColorAttributeName value:fgcolor.OSXGetNSColor() range:range];
531 }
532 }
533
534 void wxNSTextViewControl::CheckSpelling(bool check)
535 {
536 if (m_textView)
537 [m_textView setContinuousSpellCheckingEnabled: check];
538 }
539
540 wxSize wxNSTextViewControl::GetBestSize() const
541 {
542 if (m_textView && [m_textView layoutManager])
543 {
544 NSRect rect = [[m_textView layoutManager] usedRectForTextContainer: [m_textView textContainer]];
545 return wxSize((int)(rect.size.width + [m_textView textContainerInset].width),
546 (int)(rect.size.height + [m_textView textContainerInset].height));
547 }
548 return wxSize(0,0);
549 }
550
551 // wxNSTextFieldControl
552
553 wxNSTextFieldControl::wxNSTextFieldControl( wxTextCtrl *text, WXWidget w )
554 : wxWidgetCocoaImpl(text, w),
555 wxTextWidgetImpl(text)
556 {
557 Init(w);
558 }
559
560 wxNSTextFieldControl::wxNSTextFieldControl(wxWindow *wxPeer,
561 wxTextEntry *entry,
562 WXWidget w)
563 : wxWidgetCocoaImpl(wxPeer, w),
564 wxTextWidgetImpl(entry)
565 {
566 Init(w);
567 }
568
569 void wxNSTextFieldControl::Init(WXWidget w)
570 {
571 NSTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>) *tf = (NSTextField*) w;
572 m_textField = tf;
573 [m_textField setDelegate: tf];
574 m_selStart = m_selEnd = 0;
575 m_hasEditor = [w isKindOfClass:[NSTextField class]];
576 }
577
578 wxNSTextFieldControl::~wxNSTextFieldControl()
579 {
580 if (m_textField)
581 [m_textField setDelegate: nil];
582 }
583
584 wxString wxNSTextFieldControl::GetStringValue() const
585 {
586 return wxCFStringRef::AsString([m_textField stringValue], m_wxPeer->GetFont().GetEncoding());
587 }
588
589 void wxNSTextFieldControl::SetStringValue( const wxString &str)
590 {
591 wxMacEditHelper helper(m_textField);
592 [m_textField setStringValue: wxCFStringRef( str , m_wxPeer->GetFont().GetEncoding() ).AsNSString()];
593 }
594
595 void wxNSTextFieldControl::Copy()
596 {
597 NSText* editor = [m_textField currentEditor];
598 if ( editor )
599 {
600 [editor copy:nil];
601 }
602 }
603
604 void wxNSTextFieldControl::Cut()
605 {
606 NSText* editor = [m_textField currentEditor];
607 if ( editor )
608 {
609 [editor cut:nil];
610 }
611 }
612
613 void wxNSTextFieldControl::Paste()
614 {
615 NSText* editor = [m_textField currentEditor];
616 if ( editor )
617 {
618 [editor paste:nil];
619 }
620 }
621
622 bool wxNSTextFieldControl::CanPaste() const
623 {
624 return true;
625 }
626
627 void wxNSTextFieldControl::SetEditable(bool editable)
628 {
629 [m_textField setEditable:editable];
630 }
631
632 void wxNSTextFieldControl::GetSelection( long* from, long* to) const
633 {
634 NSText* editor = [m_textField currentEditor];
635 if ( editor )
636 {
637 NSRange range = [editor selectedRange];
638 *from = range.location;
639 *to = range.location + range.length;
640 }
641 else
642 {
643 *from = m_selStart;
644 *to = m_selEnd;
645 }
646 }
647
648 void wxNSTextFieldControl::SetSelection( long from , long to )
649 {
650 long textLength = [[m_textField stringValue] length];
651 if ((from == -1) && (to == -1))
652 {
653 from = 0 ;
654 to = textLength ;
655 }
656 else
657 {
658 from = wxMin(textLength,wxMax(from,0)) ;
659 if ( to == -1 )
660 to = textLength;
661 else
662 to = wxMax(0,wxMin(textLength,to)) ;
663 }
664
665 NSText* editor = [m_textField currentEditor];
666 if ( editor )
667 {
668 [editor setSelectedRange:NSMakeRange(from, to-from)];
669 }
670 else
671 {
672 m_selStart = from;
673 m_selEnd = to;
674 }
675 }
676
677 void wxNSTextFieldControl::WriteText(const wxString& str)
678 {
679 NSEvent* formerEvent = m_lastKeyDownEvent;
680 m_lastKeyDownEvent = nil;
681 NSText* editor = [m_textField currentEditor];
682 if ( editor )
683 {
684 wxMacEditHelper helper(m_textField);
685 [editor insertText:wxCFStringRef( str , m_wxPeer->GetFont().GetEncoding() ).AsNSString()];
686 }
687 else
688 {
689 wxString val = GetStringValue() ;
690 long start , end ;
691 GetSelection( &start , &end ) ;
692 val.Remove( start , end - start ) ;
693 val.insert( start , str ) ;
694 SetStringValue( val ) ;
695 SetSelection( start + str.length() , start + str.length() ) ;
696 }
697 m_lastKeyDownEvent = formerEvent;
698 }
699
700 void wxNSTextFieldControl::controlAction(WXWidget WXUNUSED(slf),
701 void* WXUNUSED(_cmd), void *WXUNUSED(sender))
702 {
703 wxWindow* wxpeer = (wxWindow*) GetWXPeer();
704 if ( wxpeer && (wxpeer->GetWindowStyle() & wxTE_PROCESS_ENTER) )
705 {
706 wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, wxpeer->GetId());
707 event.SetEventObject( wxpeer );
708 event.SetString( GetTextEntry()->GetValue() );
709 wxpeer->HandleWindowEvent( event );
710 }
711 }
712
713 bool wxNSTextFieldControl::SetHint(const wxString& hint)
714 {
715 wxCFStringRef hintstring(hint);
716 [[m_textField cell] setPlaceholderString:hintstring.AsNSString()];
717 return true;
718 }
719
720 //
721 //
722 //
723
724 wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer,
725 wxWindowMac* WXUNUSED(parent),
726 wxWindowID WXUNUSED(id),
727 const wxString& WXUNUSED(str),
728 const wxPoint& pos,
729 const wxSize& size,
730 long style,
731 long WXUNUSED(extraStyle))
732 {
733 NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
734 wxWidgetCocoaImpl* c = NULL;
735
736 if ( style & wxTE_MULTILINE || style & wxTE_RICH || style & wxTE_RICH2 )
737 {
738 wxNSTextScrollView* v = nil;
739 v = [[wxNSTextScrollView alloc] initWithFrame:r];
740 c = new wxNSTextViewControl( wxpeer, v );
741 }
742 else
743 {
744 NSTextField* v = nil;
745 if ( style & wxTE_PASSWORD )
746 v = [[wxNSSecureTextField alloc] initWithFrame:r];
747 else
748 v = [[wxNSTextField alloc] initWithFrame:r];
749
750 if ( style & wxNO_BORDER )
751 {
752 // FIXME: How can we remove the native control's border?
753 // setBordered is separate from the text ctrl's border.
754 }
755
756 NSTextFieldCell* cell = [v cell];
757 [cell setScrollable:YES];
758 // TODO: Remove if we definitely are sure, it's not needed
759 // as setting scrolling to yes, should turn off any wrapping
760 // [cell setLineBreakMode:NSLineBreakByClipping];
761
762 [v setBezeled:NO];
763 [v setBordered:NO];
764
765 c = new wxNSTextFieldControl( wxpeer, wxpeer, v );
766 }
767
768 return c;
769 }
770
771
772 #endif // wxUSE_TEXTCTRL