home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK2.toast / Development Kits (Disc 2) / ScriptX / Draggable ScriptX Folders / utils / DTK / Examples / Custom Classes / conductor.cls < prev    next >
Encoding:
Text File  |  1995-10-27  |  2.6 KB  |  107 lines  |  [TEXT/ttxt]

  1. --<<<
  2. format debug "--  Compiling Conductor Class . . .\n" undefined undefined
  3.  
  4. if (not isDefined Instrument) do (
  5.     format debug "--!! ERROR Instrument must be defined before Conductor !!\n" undefined
  6. )
  7.  
  8. class Conductor (TwoDShape)
  9. inst vars
  10.     myClock
  11.     mouseDown
  12.     loopCB
  13.     state
  14.     duration
  15. end
  16.  
  17. method init self {class Conductor} #rest args #key castNum: currScene: dirInfo:->
  18. (
  19.     local cast := dirInfo[@cast]
  20.     local bmp := cast[castNum].boundary
  21.     apply nextMethod self boundary:bmp args
  22.     local clockObj := new ConductorClock owner:self
  23.     clockObj.scale := 100
  24.     clockObj.rate := 1
  25.     currScene.sceneMasterClock := clockObj
  26.     self.state := @noSync
  27.     self.myClock := clockObj
  28.     self.duration := (0 as time)
  29.     return self
  30. )
  31.  
  32. method mouseDownAction self {class Conductor} theInterest theEvent ->
  33. (
  34.     local myClock := self.myClock
  35.     local cb := self.loopCB
  36.     case self.state of
  37.         @noSync: (
  38.                         if myClock.slaveClocks.size > 0 do (
  39.                             self.state := @sync
  40.                             myClock.rate := 0
  41.                             myClock.time := 0
  42.                             if cb <> undefined do (
  43.                                 cancel cb
  44.                                 cb := undefined
  45.                             )
  46.                             if cb = undefined do (
  47.                                 self.loopCB := addTimeCallback myClock gotoBegin myClock #() (self.duration + (2*myClock.scale)) false
  48.                                 print "Master Callback added"
  49.                             )
  50.                             for sc in myClock.SlaveClocks do (
  51.                                 sc.time := 0
  52.                                 syncYourself sc @sync
  53.                             )
  54.                             myClock.rate := 1
  55.                         )
  56.                         )
  57.         @sync:         (
  58.                         self.state := @noSync
  59.                         if cb <> undefined do (
  60.                             cancel cb
  61.                             print "Master Callback added"
  62.                             self.loopCB = undefined
  63.                         )
  64.                         for sc in myClock.SlaveClocks do syncYourself sc  @noSync                    
  65.                         )
  66.     end --case
  67.     format debug "state  of Master to %2\n" #(undefined, self.state) #(@unadorned,@unadorned)
  68. )
  69.  
  70. method hook self {class Conductor} ->
  71. (
  72.     self.state := @noSync
  73.     local mouseDev := new MouseDevice
  74.     local mdEvnt := self.mouseDown
  75.     if not (isAKindOf mdEvnt MouseDownEvent) do (
  76.         mdEvnt := new MouseDownEvent
  77.         mdEvnt.eventReceiver := mouseDownAction
  78.         mdEvnt.authorData := self
  79.         mdEvnt.device := mouseDev
  80.         mdEvnt.presenter := self
  81.         self.mouseDown := mdEvnt
  82.     )
  83.     if not mdEvnt.advertised do addEventInterest mdEvnt
  84. )
  85.  
  86. method unhook self {class Conductor} ->
  87. (
  88.     local mdEvnt := self.mouseDown
  89.     if mdEvnt.advertised do removeEventInterest mdEvnt
  90.     local cb := self.loopCB
  91.     if cb <> undefined do (
  92.         cancel cb
  93.         self.loopCB := undefined
  94.     )
  95. )
  96.  
  97. method instrumentAdded self {class Conductor} newInstrument->
  98. (
  99.     local myDuration := self.duration
  100.     local newDuration := newInstrument.duration
  101.     if newDuration > myDuration do (
  102.         self.duration := newDuration
  103.     )
  104. )
  105. #(Conductor, #("duration"), #("stateGetter","hook","unhook"))
  106. -->>>
  107.