}
}
+- (void)textDidChange:(NSNotification *)aNotification
+{
+ wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( [aNotification object] );
+ 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 );
+ }
+ }
+}
+
@end
@implementation wxNSTextField
[m_scrollView setDocumentView: tv];
- [tv setDelegate: w];
+ [tv setDelegate: tv];
InstallEventHandler(tv);
}
bool wxNSTextViewControl::GetStyle(long position, wxTextAttr& style)
{
- if (m_textView && position >=0 && position < [[m_textView string] length]) {
- 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]];
}