/**
Returns the color used to draw the background
See Also: -setBackgroundColor:
*/ - (NSColor *) backgroundColor { return _background_color; } /**Sets whether the NSTextFieldCell draw its background color
See Also: -drawsBackground
*/ - (void) setDrawsBackground: (BOOL)flag { _textfieldcell_draws_background = flag; _textfieldcell_is_opaque = [self _isOpaque]; if (_control_view) if ([_control_view isKindOfClass: [NSControl class]]) [(NSControl *)_control_view updateCell: self]; } /**Returns whether the NSTextFieldCell draw its background color
See Also: -setBackgroundColor:
*/ - (BOOL) drawsBackground { return _textfieldcell_draws_background; } /**Sets the text color to aColor
See Also: -textColor
*/ - (void) setTextColor: (NSColor *)aColor { ASSIGN (_text_color, aColor); if (_control_view) if ([_control_view isKindOfClass: [NSControl class]]) [(NSControl *)_control_view updateCell: self]; } /**Returns the text color
See Also: -setTextColor:
*/ - (NSColor *) textColor { return _text_color; } - (void) setBezelStyle: (NSTextFieldBezelStyle)style { _bezelStyle = style; } - (NSTextFieldBezelStyle) bezelStyle { return _bezelStyle; } - (NSAttributedString*) placeholderAttributedString { if (_textfieldcell_placeholder_is_attributed_string == YES) { return (NSAttributedString*)_placeholder; } else { return nil; } } - (NSString*) placeholderString { if (_textfieldcell_placeholder_is_attributed_string == YES) { return nil; } else { return (NSString*)_placeholder; } } - (void) setPlaceholderAttributedString: (NSAttributedString*)string { ASSIGN(_placeholder, string); _textfieldcell_placeholder_is_attributed_string = YES; } - (void) setPlaceholderString: (NSString*)string { ASSIGN(_placeholder, string); _textfieldcell_placeholder_is_attributed_string = NO; } - (NSText *) setUpFieldEditorAttributes: (NSText *)textObject { textObject = [super setUpFieldEditorAttributes: textObject]; [textObject setDrawsBackground: _textfieldcell_draws_background]; [textObject setBackgroundColor: _background_color]; [textObject setTextColor: _text_color]; return textObject; } - (void) drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView*)controlView { /* Do nothing if there is already a text editor doing the drawing; * otherwise, we draw everything twice. That is bad if there are * any transparency involved (eg, even an anti-alias font!) because * if the semi-transparent pixels are drawn over themselves they * become less transparent (eg, an anti-alias font becomes darker * and gives the impression of being bold). */ if (([controlView respondsToSelector: @selector(currentEditor)] == NO) || ([(NSTextField *)controlView currentEditor] == nil)) { if (_textfieldcell_draws_background) { if ([self isEnabled]) { [_background_color set]; } else { [[NSColor controlBackgroundColor] set]; } NSRectFill([self drawingRectForBounds: cellFrame]); } [super drawInteriorWithFrame: cellFrame inView: controlView]; } } /* Attributed string that will be displayed. */ - (NSAttributedString*)_drawAttributedString { NSAttributedString *attrStr; attrStr = [super _drawAttributedString]; if (attrStr == nil) { attrStr = [self placeholderAttributedString]; if (attrStr == nil) { NSString *string; NSDictionary *attributes; NSMutableDictionary *newAttribs; string = [self placeholderString]; if (string == nil) { return nil; } attributes = [self _nonAutoreleasedTypingAttributes]; newAttribs = [NSMutableDictionary dictionaryWithDictionary: attributes]; [newAttribs setObject: [NSColor disabledControlTextColor] forKey: NSForegroundColorAttributeName]; return AUTORELEASE([[NSAttributedString alloc] initWithString: string attributes: newAttribs]); } else { return attrStr; } } else { return attrStr; } } - (BOOL) isOpaque { return _textfieldcell_is_opaque; } // // NSCoding protocol // - (void) encodeWithCoder: (NSCoder*)aCoder { BOOL tmp; [super encodeWithCoder: aCoder]; if ([aCoder allowsKeyedCoding]) { [aCoder encodeObject: [self backgroundColor] forKey: @"NSBackgroundColor"]; [aCoder encodeObject: [self textColor] forKey: @"NSTextColor"]; [aCoder encodeBool: [self drawsBackground] forKey: @"NSDrawsBackground"]; } else { [aCoder encodeValueOfObjCType: @encode(id) at: &_background_color]; [aCoder encodeValueOfObjCType: @encode(id) at: &_text_color]; tmp = _textfieldcell_draws_background; [aCoder encodeValueOfObjCType: @encode(BOOL) at: &tmp]; } } - (id) initWithCoder: (NSCoder*)aDecoder { self = [super initWithCoder: aDecoder]; if ([aDecoder allowsKeyedCoding]) { id textColor = RETAIN([aDecoder decodeObjectForKey: @"NSTextColor"]); id backColor = RETAIN([aDecoder decodeObjectForKey: @"NSBackgroundColor"]); [self setBackgroundColor: backColor]; [self setTextColor: textColor]; if ([aDecoder containsValueForKey: @"NSDrawsBackground"]) { [self setDrawsBackground: [aDecoder decodeBoolForKey: @"NSDrawsBackground"]]; } } else { BOOL tmp; if ([aDecoder versionForClassName:@"NSTextFieldCell"] < 2) { /* Replace the old default _action_mask with the new default one if it's set. There isn't really a way to modify this value on an NSTextFieldCell encoded in a .gorm file. The old default value causes problems with newer NSTableViews which uses this to discern whether it should trackMouse:inRect:ofView:untilMouseUp: or not. This also disables the action from being sent on an uneditable and unselectable text fields. */ if (_action_mask == NSLeftMouseUpMask) { _action_mask = NSKeyUpMask | NSKeyDownMask; } } [aDecoder decodeValueOfObjCType: @encode(id) at: &_background_color]; [aDecoder decodeValueOfObjCType: @encode(id) at: &_text_color]; [aDecoder decodeValueOfObjCType: @encode(BOOL) at: &tmp]; _textfieldcell_draws_background = tmp; _textfieldcell_is_opaque = [self _isOpaque]; } return self; } @end