home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / DEV.Z / ToDoCell.m < prev    next >
Encoding:
Text File  |  1996-07-30  |  2.4 KB  |  115 lines

  1. /*
  2.   You may freely copy, distribute, and reuse the code in this example.
  3.   NeXT disclaims any warranty of any kind, expressed or implied, as to its
  4.   fitness for any particular use.
  5. */
  6.  
  7. #import "ToDoCell.h"
  8.  
  9. @interface ToDoCell (PrivateMethods)
  10. - (void)TD_setImage:(ToDoButtonState)aState;
  11. @end
  12.  
  13. @implementation ToDoCell
  14.  
  15. - (id)init
  16. {
  17.     NSString *path;
  18.     [super initTextCell:@""];
  19.  
  20.     triState = notDone;
  21.     [self setButtonType:NSToggleButton];
  22.     [self setImagePosition:NSImageLeft];
  23.     [self setBezeled:YES];
  24.     [self setFont:[NSFont userFontOfSize:12]];
  25.     [self setAlignment:NSRightTextAlignment];
  26.     path = [[NSBundle mainBundle] pathForImageResource:@"X.tiff"];
  27.     doneImage = [[NSImage alloc] initByReferencingFile:path];
  28.     path = [[NSBundle mainBundle] pathForImageResource:@"checkMark.tiff"];
  29.     deferredImage = [[NSImage alloc] initByReferencingFile:path];
  30.  
  31.     return self;
  32. }
  33.  
  34. - (void)dealloc
  35. {
  36.     [doneImage release];
  37.     [deferredImage release];
  38.     if (timeDue) [timeDue release];
  39.  
  40.     [super dealloc];
  41. }
  42.    
  43. - (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView
  44. {
  45.     return YES;
  46. }
  47.  
  48. - (void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag
  49. {
  50.     if (flag == YES) {
  51.         [self setTriState:([self triState]+1)];
  52.     }
  53. }
  54.  
  55. - (void)setTriState:(ToDoButtonState)newState
  56. {
  57.     if (newState == deferred+1)
  58.         triState = notDone;
  59.     else
  60.         triState = newState;
  61.     [self TD_setImage:triState];
  62.  }
  63.  
  64.  
  65. - (void)TD_setImage:(ToDoButtonState)aState
  66. {
  67.     switch(aState) {
  68.        case notDone: {
  69.            [self setImage:nil];
  70.            break;
  71.        }
  72.        case done: {
  73.            [self setImage:doneImage];
  74.            break;
  75.        }
  76.        case deferred: {
  77.            [self setImage:deferredImage];
  78.            break;
  79.        }
  80.      }
  81.      [(NSControl *)[self controlView] updateCell:self];
  82. }
  83.  
  84. - (ToDoButtonState)triState {return triState;}
  85.  
  86. - (void)setState:(int)val
  87. {
  88. }
  89.  
  90.  
  91. - (int)state
  92. {
  93.     if (triState == deferred)
  94.         return done;
  95.     else
  96.         return (int)triState;
  97. }
  98.  
  99. - (void)setTimeDue:(NSDate *)newTime
  100. {
  101.     if (timeDue)
  102.         [timeDue autorelease];
  103.     if (newTime) {
  104.         timeDue = [newTime copy];
  105.         [self setTitle:[timeDue descriptionWithCalendarFormat:@"%I:%M%p" timeZone:[NSTimeZone localTimeZone] locale:nil]];
  106.     } else {
  107.         timeDue = nil;
  108.         [self setTitle:@"-->"];
  109.     }
  110. }
  111.  
  112. - (NSDate *)timeDue {return timeDue;}
  113.    
  114. @end
  115.