home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / EODEV.Z / Studio.m < prev    next >
Encoding:
Text File  |  1996-09-06  |  2.6 KB  |  111 lines

  1. /*
  2.         Copyright (c) 1996, NeXT Software, Inc.
  3.         All rights reserved.
  4.  
  5.         You may freely copy, distribute and reuse the code in this example.
  6.         NeXT disclaims any warranty of any kind, expressed or implied,
  7.         as to its fitness for any particular use.
  8. */
  9. #import "Studio.h"
  10. #import "Talent.h"
  11.  
  12. @implementation Studio
  13.  
  14. - (NSDecimalNumber *)portfolioValue
  15. {
  16.     NSDecimal result = [[NSDecimalNumber zero] decimalValue];
  17.     int i = [movies count];
  18.     while( i-- ) {
  19.         NSDecimalNumber *value = [[movies objectAtIndex:i] valueForKey:@"revenue"];     
  20.         if(value) {
  21.             NSDecimal total = [value decimalValue];
  22.             NSDecimalAdd(&result, &result,  &total, NSRoundBankers);          
  23.         }
  24.     }
  25.     return [NSDecimalNumber decimalNumberWithDecimal:result];
  26.  
  27. }
  28.  
  29. - (void)awakeFromInsertionInEditingContext:(EOEditingContext *)ctx
  30. {
  31.     [super awakeFromInsertionInEditingContext:ctx];
  32.  
  33.     // set default values
  34.     if (!budget) 
  35.     budget = [[NSDecimalNumber decimalNumberWithString:@"1000000.00"] retain];
  36.     if (!movies) movies = [NSMutableArray new];    
  37. }
  38.  
  39. - (NSException *)validateForSave
  40. {
  41.     if ([[self budget] doubleValue] < 0)
  42.     return [NSException validationExceptionWithFormat:@"You're exceeding your budget!"];
  43.    
  44.     return [super validateForSave];  
  45. }
  46.  
  47. - (void)addToMovies:(id)movie
  48. {
  49.     NSDecimalNumber *newBudget;
  50.     [self willChange];
  51.     newBudget = [[self budget] decimalNumberBySubtracting:[movie valueForKey:@"revenue"]];
  52.     [self setBudget:newBudget];
  53.     [movies addObject:movie];
  54. }
  55.  
  56. - (void)removeFromMovies:(id)movie
  57. {
  58.     NSDecimalNumber *newBudget;
  59.     [self willChange];
  60.     newBudget = [[self budget] decimalNumberByAdding:[movie valueForKey:@"revenue"]];
  61.     [self setBudget:newBudget];
  62.     [movies removeObject:movie];
  63. }
  64.  
  65. - (void)buyAllMoviesStarring:(Talent *)talent
  66. {
  67.     NSArray *actorsMovies = [talent moviesStarredIn];
  68.     unsigned i = [actorsMovies count];
  69.     while (i--) {
  70.         id movie = [actorsMovies objectAtIndex:i];
  71.         if (![movies containsObject:movie]) {
  72.         [self addToMovies:movie];
  73.     }
  74.     }
  75. }
  76.  
  77.  
  78. ////////////////////////////// ACCESSORS /////////////////////////////////
  79.  
  80. - (void)setBudget:(NSDecimalNumber *)value
  81. {
  82.     [self willChange];
  83.     [budget autorelease];
  84.     budget = [value retain];
  85. }
  86. - (NSDecimalNumber *)budget { return budget; }
  87.  
  88. - (void)setName:(NSString *)value
  89. {
  90.     [self willChange];
  91.     [name autorelease];
  92.     name = [value retain];
  93. }
  94. - (NSString *)name { return name; }
  95.  
  96.  
  97. - (NSArray *)movies { return movies; }
  98.  
  99.  
  100. - (void)dealloc
  101. {
  102.     [budget release];
  103.     [name release];
  104.     [movies release];
  105.  
  106.     [super dealloc];
  107. }
  108.  
  109.  
  110. @end
  111.