/**
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; 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) _drawBackgroundWithFrame: (NSRect)cellFrame inView: (NSView*)controlView { if (_textfieldcell_draws_background) { if ([self isEnabled]) { [_background_color set]; } else { [[NSColor controlBackgroundColor] set]; } NSRectFill([self drawingRectForBounds: cellFrame]); } } - (void) _drawBorderAndBackgroundWithFrame: (NSRect)cellFrame inView: (NSView*)controlView { // FIXME: Should use the bezel style if set. [super _drawBorderAndBackgroundWithFrame: cellFrame inView: controlView]; [self _drawBackgroundWithFrame: cellFrame inView: controlView]; } - (void) drawInteriorWithFrame: (NSRect)cellFrame inView: (NSView*)controlView { if (_cell.in_editing) [self _drawEditorWithFrame: cellFrame inView: controlView]; else { NSRect titleRect; /* Make sure we are a text cell; titleRect might return an incorrect rectangle otherwise. Note that the type could be different if the user has set an image on us, which we just ignore (OS X does so as well). */ _cell.type = NSTextCellType; titleRect = [self titleRectForBounds: cellFrame]; [[self _drawAttributedString] drawInRect: titleRect]; } } /* Attributed string that will be displayed. */ - (NSAttributedString*) _drawAttributedString { NSAttributedString *attrStr; attrStr = [super _drawAttributedString]; if ((attrStr == nil) || ([[attrStr string] length] == 0)) { attrStr = [self placeholderAttributedString]; if ((attrStr == nil) || ([[attrStr string] length] == 0)) { 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 { if (_textfieldcell_draws_background == NO || _background_color == nil || [_background_color alphaComponent] < 1.0) return NO; else return YES; } // // 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"]; if ([self isBezeled]) { [aCoder encodeInt: [self bezelStyle] forKey: @"NSTextBezelStyle"]; } } 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 (self == nil) return self; if ([aDecoder allowsKeyedCoding]) { if ([aDecoder containsValueForKey: @"NSBackgroundColor"]) { [self setBackgroundColor: [aDecoder decodeObjectForKey: @"NSBackgroundColor"]]; } if ([aDecoder containsValueForKey: @"NSTextColor"]) { [self setTextColor: [aDecoder decodeObjectForKey: @"NSTextColor"]]; } if ([aDecoder containsValueForKey: @"NSDrawsBackground"]) { [self setDrawsBackground: [aDecoder decodeBoolForKey: @"NSDrawsBackground"]]; } if ([aDecoder containsValueForKey: @"NSTextBezelStyle"]) { [self setBezelStyle: [aDecoder decodeIntForKey: @"NSTextBezelStyle"]]; } if ([aDecoder containsValueForKey: @"NSPlaceholderString"]) { [self setPlaceholderString: [aDecoder decodeObjectForKey: @"NSPlaceholderString"]]; } } 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; } return self; } @end