home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Examples / InterfaceBuilder / ProgressViewPalette / ProgressView.m < prev    next >
Text File  |  1997-01-20  |  3KB  |  120 lines

  1. /*
  2.  * ProgressView.m
  3.  * Copyright (c) 1997 NeXT Software, Inc.
  4.  * All rights reserved.
  5.  *
  6.  * You may freely copy, distribute and reuse the code in this example.
  7.  * NeXT disclaims any warranty of any kind, expressed or implied,
  8.  * as to its fitness for any particular use.
  9.  */
  10.  
  11. #import "ProgressView.h"
  12.  
  13. #define DEFAULT_PERCENTAGE_INCREMENT 5
  14. #define DEFAULT_PERCENTAGE 0
  15.  
  16. @implementation ProgressView
  17.  
  18. + (void)initialize
  19. {
  20.     if (self == [ProgressView class]) {
  21.         [self setVersion:1];
  22.     }
  23. }
  24.  
  25. - (id)initWithFrame:(NSRect)frame
  26. {
  27.     self = [super initWithFrame:frame];
  28.     percentageIncrement = DEFAULT_PERCENTAGE_INCREMENT;
  29.     percentage = DEFAULT_PERCENTAGE;
  30.     return self;
  31. }
  32.  
  33. - (void)drawRect:(NSRect)rect
  34. {
  35.     NSRect    bounds;
  36.     NSRect    r;
  37.  
  38.     [[NSColor controlColor] set];
  39.     NSRectFill(rect);
  40.     
  41.     bounds = [self bounds];
  42.     if (percentage > 0) {
  43.     r = bounds;
  44.         r.size.width = NSWidth(r) * percentage / 100;
  45.     r = NSIntersectionRect(r, rect);
  46.     if (!NSIsEmptyRect(r)) {
  47.         [[NSColor controlShadowColor] set];
  48.         NSRectFill(r);
  49.     }
  50.     }
  51.  
  52.     [[NSColor controlDarkShadowColor] set];
  53.     NSFrameRect(bounds);
  54. }
  55.  
  56. - (float)percentageIncrement
  57. {
  58.     return percentageIncrement;
  59. }
  60.  
  61. - (void)setPercentageIncrement:(float)newPercentageIncrement
  62. {
  63.     percentageIncrement = newPercentageIncrement;
  64. }
  65.  
  66. - (float)percentage
  67. {
  68.     return percentage;
  69. }
  70.  
  71. - (void)setPercentage:(float)newPercentage
  72. {
  73.     if (newPercentage > 100) {
  74.     newPercentage = 100;
  75.     } else if (newPercentage < 0) {
  76.     newPercentage = 0;
  77.     }
  78.     if (percentage != newPercentage) {
  79.         percentage = newPercentage;
  80.         [self setNeedsDisplay:YES];
  81.     }
  82. }
  83.  
  84. - (void)increment:(id)sender
  85. {
  86.     /* Let the above method do bounds checking & redisplay for us. */
  87.     [self setPercentage:(percentage + percentageIncrement)];
  88. }
  89.  
  90. - (id)initWithCoder:(NSCoder *)decoder
  91. {
  92.     int        version;
  93.  
  94.     self = [super initWithCoder:decoder];
  95.  
  96.     version = [decoder versionForClassName:@"ProgressView"];
  97.     switch (version) {
  98.     case 1:
  99.     [decoder decodeValueOfObjCType:@encode(float) at:&percentageIncrement];
  100.     [decoder decodeValueOfObjCType:@encode(float) at:&percentage];
  101.     break;
  102.     default:
  103.     percentageIncrement = DEFAULT_PERCENTAGE_INCREMENT;
  104.     percentage = DEFAULT_PERCENTAGE;
  105.     break;
  106.     }
  107.     return self;
  108. }
  109.  
  110. - (void)encodeWithCoder:(NSCoder *)coder
  111. {
  112.     [super encodeWithCoder:coder];
  113.  
  114.     // Version == 1
  115.     [coder encodeValueOfObjCType:@encode(float) at:&percentageIncrement];
  116.     [coder encodeValueOfObjCType:@encode(float) at:&percentage];
  117. }
  118.  
  119. @end
  120.