home *** CD-ROM | disk | FTP | other *** search
/ Altsys Virtuoso 2.0K / virtuoso_20k.iso / DemoApps / Graphics / Viewers / Movie / Source / Controller.m < prev    next >
Encoding:
Text File  |  1994-06-08  |  3.4 KB  |  167 lines

  1. #import "Controller.h"
  2.  
  3. /* Controller
  4.  * by Patrick J. Flynn (flynn@eecs.wsu.edu)
  5.  * This class is part of the Movie application, version 2.0.
  6.  * 1/15/92
  7.  */
  8.  
  9. @implementation Controller
  10.  
  11. - init
  12. {
  13.   static NXDefaultsVector MovieDefaults = {
  14.          {"DefaultDepth","0"},
  15.          {NULL}
  16.          };
  17.   NXRegisterDefaults("Movie",MovieDefaults);
  18.   self = [super init];
  19.   projectionists = [[List alloc] init];
  20.   prefsPanel=nil;
  21.   return self;
  22. }
  23.  
  24. - (MovieView *)currentMovieView
  25. {
  26.   int i;
  27.   Window *w=[NXApp mainWindow];
  28.   
  29.   if ((!w)||(![projectionists count])) return nil;
  30.   for(i=0;i<[projectionists count];i++) {
  31.     Projectionist *p=[projectionists objectAt:i];
  32.     if ((w == [p window])||(w==[p panel])) return [p movieView];
  33.     };
  34.   return nil;
  35. }
  36.  
  37. - open:sender
  38. {
  39.   Projectionist *newProjectionist;
  40.   newProjectionist = [[Projectionist alloc] init];
  41.   if (![newProjectionist open:sender])
  42.     [newProjectionist free];
  43.   else
  44.     [projectionists addObject:newProjectionist];
  45.  
  46.   return self;
  47. }
  48.  
  49. - play:sender
  50. {
  51.   Projectionist *newProjectionist;
  52.   newProjectionist = [[Projectionist alloc] init];
  53.   if (![newProjectionist play:sender])
  54.     [newProjectionist free];
  55.   else
  56.     [projectionists addObject:newProjectionist];
  57.  
  58.   return self;
  59. }
  60.  
  61. #define DOIT(msg) { [[self currentMovieView] msg:self]; return self; }
  62.  
  63. - save:sender DOIT(save)
  64. - copy:sender DOIT(copy)
  65. - expand2x:sender DOIT(expand2x)
  66. - reduce50pct:sender DOIT(reduce50pct)
  67. - restore:sender DOIT(restore)
  68. - revStep:sender DOIT(revStep)
  69. - rev:sender DOIT(rev)
  70. - stop:sender DOIT(stop)
  71. - fwd:sender DOIT(fwd)
  72. - fwdStep:sender DOIT(fwdStep)
  73.  
  74. - print:sender DOIT(printPSCode)
  75.  
  76. - setVersion:anObject
  77. {
  78.   [(version = anObject) setStringValue:VERSION];
  79.   return self;
  80. }
  81.  
  82. // preferences handler (Yappish style)
  83.  
  84. - prefs:sender
  85. {
  86.   if (!prefsPanel) {
  87.     [NXApp loadNibSection:"Prefs.nib" owner:self withNames:NO];
  88.     [self updatePrefs:sender];
  89.     };
  90.   [prefsPanel makeKeyAndOrderFront:sender];
  91.   return self;
  92. }
  93.  
  94. - updatePrefs:sender
  95. {
  96.   int def;
  97.   const char *x = NXGetDefaultValue("Movie","DefaultDepth");
  98.   if (x) def=atoi(x);
  99.   else def=0;
  100.   switch(def) {
  101.     default:
  102.     case 0: [defDepthMatrix selectCellAt:0:0]; break;
  103.     case 2: [defDepthMatrix selectCellAt:1:0]; break;
  104.     case 8: [defDepthMatrix selectCellAt:2:0]; break;
  105.     case 12: [defDepthMatrix selectCellAt:3:0]; break;
  106.     case 24: [defDepthMatrix selectCellAt:4:0]; break;
  107.     };
  108.   return self;
  109. }
  110.  
  111. - okPrefs:sender
  112. {
  113.   int d=[defDepthMatrix selectedRow];
  114.   char buf[5];
  115.   switch(d) {
  116.     default:
  117.     case 0: sprintf(buf,"0"); break;
  118.     case 1: sprintf(buf,"2"); break;
  119.     case 2: sprintf(buf,"8"); break;
  120.     case 3: sprintf(buf,"12"); break;
  121.     case 4: sprintf(buf,"24"); break;
  122.     };
  123.   NXWriteDefault("Movie","DefaultDepth",buf);
  124.   [[sender window] orderOut:sender];
  125.   return self;
  126. }
  127.  
  128. - cancelPrefs:sender
  129. {
  130.   [[sender window] orderOut:sender];
  131.   return self;
  132. }
  133.  
  134. // Application's delegate methods
  135.  
  136. - (BOOL)appAcceptsAnotherFile:sender
  137. {
  138.   return YES;
  139. }
  140.  
  141. - (int)app:sender openFile:(const char *)filename type:(const char *)type
  142. {
  143.   Projectionist *newProjectionist;
  144.   newProjectionist = [[Projectionist alloc] init];
  145.   if (![[newProjectionist movieView] openFile:(char *)filename]) {
  146.     [newProjectionist free];
  147.     return NO;
  148.     }
  149.   else {
  150.     [projectionists addObject:newProjectionist];
  151.     return YES;
  152.     }
  153. }
  154.  
  155. - appDidInit:sender
  156. {
  157.   return self;
  158. }
  159.  
  160. // Window's delegate methods
  161. - windowDidBecomeMain:sender
  162. {
  163.   return self;
  164. }
  165.  
  166. @end
  167.