Revision: 18270
          http://bibdesk.svn.sourceforge.net/bibdesk/?rev=18270&view=rev
Author:   hofman
Date:     2011-12-02 17:50:33 +0000 (Fri, 02 Dec 2011)
Log Message:
-----------
Set formatter and if needed icon for icon+text cell in base class, so we only 
need to give the formatter class in the subclasses

Modified Paths:
--------------
    trunk/bibdesk/BDSKFilePathCell.m
    trunk/bibdesk/BDSKIconTextFieldCell.h
    trunk/bibdesk/BDSKIconTextFieldCell.m
    trunk/bibdesk/BDSKTextWithIconCell.m

Modified: trunk/bibdesk/BDSKFilePathCell.m
===================================================================
--- trunk/bibdesk/BDSKFilePathCell.m    2011-12-02 15:56:44 UTC (rev 18269)
+++ trunk/bibdesk/BDSKFilePathCell.m    2011-12-02 17:50:33 UTC (rev 18270)
@@ -43,34 +43,17 @@
 
 @implementation BDSKFilePathCell
 
-static BDSKFilePathFormatter *filePathFormatter = nil;
-
-+ (void)initialize {
-    BDSKINITIALIZE;
-    
-    filePathFormatter = [[BDSKFilePathFormatter alloc] init];
++ (Class)formatterClass {
+    return [BDSKFilePathFormatter class];
 }
 
-- (id)initTextCell:(NSString *)aString {
-    self = [super initTextCell:aString];
-    if (self) {
-        [self setFormatter:filePathFormatter];
-    }
-    return self;
-}
+@end
 
-- (id)initWithCoder:(NSCoder *)coder {
-    self = [super initWithCoder:coder];
-    if (self) {
-        if ([self formatter] == nil)
-            [self setFormatter:filePathFormatter];
-    }
-    return self;
-}
+#pragma mark -
 
-- (void)setObjectValue:(id <NSCopying>)obj {
-    [super setObjectValue:obj];
-    
+@implementation BDSKFilePathFormatter
+
+- (NSImage *)imageForObjectValue:(id)obj {
     NSImage *image = nil;
     if ([(id)obj isKindOfClass:[NSString class]]) {
         NSString *path = [(NSString *)obj stringByStandardizingPath];
@@ -81,15 +64,9 @@
         if([[NSFileManager defaultManager] objectExistsAtFileURL:fileURL])
             image = [NSImage imageForURL:fileURL];
     }
-    [self setIcon:image];
+    return image;
 }
 
-@end
-
-#pragma mark -
-
-@implementation BDSKFilePathFormatter
-
 - (NSString *)stringForObjectValue:(id)obj {
     NSString *path = [obj isKindOfClass:[NSURL class]] ? [obj path] : [obj 
description];
     return [path stringByAbbreviatingWithTildeInPath];

Modified: trunk/bibdesk/BDSKIconTextFieldCell.h
===================================================================
--- trunk/bibdesk/BDSKIconTextFieldCell.h       2011-12-02 15:56:44 UTC (rev 
18269)
+++ trunk/bibdesk/BDSKIconTextFieldCell.h       2011-12-02 17:50:33 UTC (rev 
18270)
@@ -43,6 +43,8 @@
     NSImageCell *imageCell;
 }
 
++ (Class)formatterClass;
+
 - (NSImage *)icon;
 - (void)setIcon:(NSImage *)newIcon;
 
@@ -50,3 +52,8 @@
 - (NSRect)iconRectForBounds:(NSRect)aRect;
 
 @end
+
+
+@interface NSFormatter (BDSKIconTextFieldCell)
+- (NSImage *)imageForObjectValue:(id)obj;
+@end

Modified: trunk/bibdesk/BDSKIconTextFieldCell.m
===================================================================
--- trunk/bibdesk/BDSKIconTextFieldCell.m       2011-12-02 15:56:44 UTC (rev 
18269)
+++ trunk/bibdesk/BDSKIconTextFieldCell.m       2011-12-02 17:50:33 UTC (rev 
18270)
@@ -51,11 +51,15 @@
 #define BORDER_BETWEEN_IMAGE_AND_TEXT_BEZELED (-2.0)
 #define IMAGE_OFFSET (1.0)
 
++ (Class)formatterClass { return Nil; }
+
 - (id)initTextCell:(NSString *)aString {
     self = [super initTextCell:aString];
     if (self) {
         imageCell = [[NSImageCell alloc] init];
         [imageCell setImageScaling:NSImageScaleProportionallyUpOrDown];
+        if ([[self class] formatterClass])
+            [self setFormatter:[[[[[self class] formatterClass] alloc] init] 
autorelease]];
     }
     return self;
 }
@@ -68,6 +72,8 @@
             imageCell = [[NSImageCell alloc] init];
             [imageCell setImageScaling:NSImageScaleProportionallyUpOrDown];
         }
+        if ([self formatter] == nil && [[self class] formatterClass])
+            [self setFormatter:[[[[[self class] formatterClass] alloc] init] 
autorelease]];
     }
     return self;
 }
@@ -168,6 +174,12 @@
     }
 }
 
+- (void)setObjectValue:(id <NSCopying>)obj {
+    [super setObjectValue:obj];
+    if ([[self formatter] respondsToSelector:@selector(imageForObjectValue:)])
+        [self setIcon:[[self formatter] imageForObjectValue:obj]];
+}
+
 - (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView 
editor:(NSText *)textObj delegate:(id)anObject start:(NSInteger)selStart 
length:(NSInteger)selLength {
     [super selectWithFrame:[self textRectForBounds:aRect] inView:controlView 
editor:textObj delegate:anObject start:selStart length:selLength];
 }
@@ -183,4 +195,8 @@
     return hit;
 }
 
+- (NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView 
*)controlView {
+    return nil;
+}
+
 @end

Modified: trunk/bibdesk/BDSKTextWithIconCell.m
===================================================================
--- trunk/bibdesk/BDSKTextWithIconCell.m        2011-12-02 15:56:44 UTC (rev 
18269)
+++ trunk/bibdesk/BDSKTextWithIconCell.m        2011-12-02 17:50:33 UTC (rev 
18270)
@@ -41,62 +41,31 @@
 NSString *BDSKTextWithIconCellStringKey = @"string";
 NSString *BDSKTextWithIconCellImageKey = @"image";
 
-static id nonNullObjectValueForKey(id object, NSString *key) {
+static id nonNullObjectValueForKey(id object, id stringObject, NSString *key) {
+    if ([object isKindOfClass:[NSString class]])
+        return stringObject;
     id value = [object valueForKey:key];
     return [value isEqual:[NSNull null]] ? nil : value;
 }
 
 @implementation BDSKTextWithIconCell
 
-static BDSKTextWithIconFormatter *textWithIconFormatter = nil;
-
-+ (void)initialize {
-    BDSKINITIALIZE;
-    textWithIconFormatter = [[BDSKTextWithIconFormatter alloc] init];
++ (Class)formatterClass {
+    return [BDSKTextWithIconFormatter class];
 }
 
-- (id)initTextCell:(NSString *)aString {
-    self = [super initTextCell:aString];
-    if (self) {
-        [self setFormatter:textWithIconFormatter];
-    }
-    return self;
-}
-
-- (id)initWithCoder:(NSCoder *)coder {
-    self = [super initWithCoder:coder];
-    if (self) {
-        if ([self formatter] == nil)
-            [self setFormatter:textWithIconFormatter];
-    }
-    return self;
-}
-
-- (NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView 
*)controlView {
-    return nil;
-}
-
-- (void)setObjectValue:(id <NSCopying>)obj {
-    // the objectValue should be an object that's KVC compliant for the 
"string" and "image" keys
-    
-    // this can happen initially from the init, as there's no initializer 
passing an objectValue
-    if ([(id)obj isKindOfClass:[NSString class]])
-        obj = [NSDictionary dictionaryWithObjectsAndKeys:obj, 
BDSKTextWithIconCellStringKey, nil];
-    
-    // we should not set a derived value such as the string here, otherwise 
NSTableView will call tableView:setObjectValue:forTableColumn:row: whenever a 
cell is selected
-    [super setObjectValue:obj];
-    
-    [self setIcon:nonNullObjectValueForKey(obj, BDSKTextWithIconCellImageKey)];
-}
-
 @end
 
 #pragma mark -
 
 @implementation BDSKTextWithIconFormatter
 
+- (NSImage *)imageForObjectValue:(id)obj {
+    return nonNullObjectValueForKey(obj, nil, BDSKTextWithIconCellImageKey);
+}
+
 - (NSString *)stringForObjectValue:(id)obj {
-    return [obj isKindOfClass:[NSString class]] ? obj : 
nonNullObjectValueForKey(obj, BDSKTextWithIconCellStringKey);
+    return nonNullObjectValueForKey(obj, obj, BDSKTextWithIconCellStringKey);
 }
 
 - (BOOL)getObjectValue:(id *)obj forString:(NSString *)string 
errorDescription:(NSString **)error {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to