wxUnusedVar(aNotification);
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
if ( impl )
- {
- wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
- if ( wxpeer ) {
- wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, wxpeer->GetId());
- event.SetEventObject( wxpeer );
- event.SetString( static_cast<wxTextCtrl*>(wxpeer)->GetValue() );
- wxpeer->HandleWindowEvent( event );
- }
- }
+ impl->controlTextDidChange();
}
- (void)controlTextDidEndEditing:(NSNotification *)aNotification
}
}
+- (void)textDidChange:(NSNotification *)aNotification
+{
+ wxUnusedVar(aNotification);
+ wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
+ if ( impl )
+ impl->controlTextDidChange();
+}
+
@end
@implementation wxNSTextField
return fieldEditor;
}
-
- (void) setEnabled:(BOOL) flag
{
[super setEnabled: flag];
wxUnusedVar(aNotification);
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
if ( impl )
- {
- wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer();
- if ( wxpeer ) {
- wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, wxpeer->GetId());
- event.SetEventObject( wxpeer );
- event.SetString( static_cast<wxTextCtrl*>(wxpeer)->GetValue() );
- wxpeer->HandleWindowEvent( event );
- }
- }
+ impl->controlTextDidChange();
}
typedef BOOL (*wxOSX_insertNewlineHandlerPtr)(NSView* self, SEL _cmd, NSControl *control, NSTextView* textView, SEL commandSelector);
[m_scrollView setDocumentView: tv];
- [tv setDelegate: w];
+ [tv setDelegate: tv];
InstallEventHandler(tv);
}
[m_textView setDelegate: nil];
}
+bool wxNSTextViewControl::CanFocus() const
+{
+ // since this doesn't work (return false), we hardcode
+ // if (m_textView)
+ // return [m_textView canBecomeKeyView];
+ return true;
+}
+
wxString wxNSTextViewControl::GetStringValue() const
{
if (m_textView)
bool wxNSTextViewControl::GetStyle(long position, wxTextAttr& style)
{
- if (m_textView) {
- NSTextStorage* storage = [m_textView textStorage];
- NSFont* font = [storage attribute:NSFontAttributeName atIndex:position effectiveRange:NULL];
+ if (m_textView && position >=0)
+ {
+ NSFont* font = NULL;
+ NSColor* bgcolor = NULL;
+ NSColor* fgcolor = NULL;
+ // NOTE: It appears that other platforms accept GetStyle with the position == length
+ // but that NSTextStorage does not accept length as a valid position.
+ // Therefore we return the default control style in that case.
+ if (position < [[m_textView string] length])
+ {
+ NSTextStorage* storage = [m_textView textStorage];
+ font = [[storage attribute:NSFontAttributeName atIndex:position effectiveRange:NULL] autorelease];
+ bgcolor = [[storage attribute:NSBackgroundColorAttributeName atIndex:position effectiveRange:NULL] autorelease];
+ fgcolor = [[storage attribute:NSForegroundColorAttributeName atIndex:position effectiveRange:NULL] autorelease];
+ }
+ else
+ {
+ NSDictionary* attrs = [m_textView typingAttributes];
+ font = [[attrs objectForKey:NSFontAttributeName] autorelease];
+ bgcolor = [[attrs objectForKey:NSBackgroundColorAttributeName] autorelease];
+ fgcolor = [[attrs objectForKey:NSForegroundColorAttributeName] autorelease];
+ }
+
if (font)
style.SetFont(wxFont(font));
- NSColor* bgcolor = [storage attribute:NSBackgroundColorAttributeName atIndex:position effectiveRange:NULL];
+
if (bgcolor)
style.SetBackgroundColour(wxColour(bgcolor));
- NSColor* fgcolor = [storage attribute:NSForegroundColorAttributeName atIndex:position effectiveRange:NULL];
- style.SetTextColour(wxColour(fgcolor));
+
+ if (fgcolor)
+ style.SetTextColour(wxColour(fgcolor));
return true;
}
{
if (m_textView) {
NSRange range = NSMakeRange(start, end-start);
+ if (start == -1 && end == -1)
+ range = [m_textView selectedRange];
+
NSTextStorage* storage = [m_textView textStorage];
wxFont font = style.GetFont();
- if (font.IsOk())
- [storage addAttribute:NSFontAttributeName value:style.GetFont().OSXGetNSFont() range:range];
+ if (style.HasFont() && font.IsOk())
+ [storage addAttribute:NSFontAttributeName value:font.OSXGetNSFont() range:range];
wxColour bgcolor = style.GetBackgroundColour();
- if (bgcolor.IsOk())
+ if (style.HasBackgroundColour() && bgcolor.IsOk())
[storage addAttribute:NSBackgroundColorAttributeName value:bgcolor.OSXGetNSColor() range:range];
wxColour fgcolor = style.GetTextColour();
- if (fgcolor.IsOk())
+ if (style.HasTextColour() && fgcolor.IsOk())
[storage addAttribute:NSForegroundColorAttributeName value:fgcolor.OSXGetNSColor() range:range];
}
}
+void wxNSTextViewControl::CheckSpelling(bool check)
+{
+ if (m_textView)
+ [m_textView setContinuousSpellCheckingEnabled: check];
+}
+
+wxSize wxNSTextViewControl::GetBestSize() const
+{
+ if (m_textView && [m_textView layoutManager])
+ {
+ NSRect rect = [[m_textView layoutManager] usedRectForTextContainer: [m_textView textContainer]];
+ wxSize size = wxSize(rect.size.width, rect.size.height);
+ size.x += [m_textView textContainerInset].width;
+ size.y += [m_textView textContainerInset].height;
+ return size;
+ }
+ return wxSize(0,0);
+}
+
// wxNSTextFieldControl
-wxNSTextFieldControl::wxNSTextFieldControl( wxTextCtrl *wxPeer, WXWidget w ) : wxWidgetCocoaImpl(wxPeer, w)
+wxNSTextFieldControl::wxNSTextFieldControl( wxWindow *wxPeer, WXWidget w ) : wxWidgetCocoaImpl(wxPeer, w)
{
- m_textField = (NSTextField*) w;
- [m_textField setDelegate: w];
+ NSTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>) *tf = (NSTextField*) w;
+ m_textField = tf;
+ [m_textField setDelegate: tf];
m_selStart = m_selEnd = 0;
m_hasEditor = [w isKindOfClass:[NSTextField class]];
}