home *** CD-ROM | disk | FTP | other *** search
/ TestDrive Super Store 3.0 / TESTDRIVE_3.ISO / realizer / lib / animate.rlz < prev    next >
Encoding:
Text File  |  1992-09-30  |  7.0 KB  |  264 lines

  1. '***********************************************************************
  2. '    Animate.rlz                              
  3. '
  4. '    Realizer Animation Library
  5. '
  6. '    Copyright ⌐ 1991-1992 Computer Associates International, Inc.
  7. '    All rights reserved.
  8. '
  9. '***********************************************************************
  10.  
  11. IF QVar(%%AnimateFlag, _Defined) THEN
  12.     EXIT MACRO
  13. END IF
  14. %%AnimateFlag = 1
  15.  
  16. RUN "StdError"
  17.  
  18. EXTERNAL "Animate" CUSTOMCONTROLS
  19.  
  20. %AnimateCurrItem = 0
  21. %AnimateCurrForm = 0
  22. _Animate = "Animate"
  23. _SetOffset = _CCM + 7
  24. _SetSpeed = 11
  25. _Pause = 10
  26. _Restart = 12
  27.  
  28. PROC %AnimateSetup
  29.     IF Not(FormQ(_Exists; %AnimateCurrForm)) THEN
  30.         STOP USING "No animation window is selected.", 2
  31.     END IF
  32.     %AnimateTemp = FormQ(_Selected)
  33.     FormSelect(%AnimateCurrForm)
  34.     IF FormQObject(%AnimateCurrItem)[_FQO_ItemNum] = 0 THEN
  35.         FormSelect(%AnimateTemp)
  36.         STOP USING "No animation window is selected..", 2
  37.     END IF
  38. END PROC
  39.  
  40. PROC %AnimateCleanup
  41.     IF %AnimateTemp THEN
  42.         FormSelect(%AnimateTemp)
  43.     END IF
  44. END PROC
  45.  
  46. PROC AnimateSelect(id, ..)
  47.     LOCAL formT, formT2
  48.  
  49.     ECType(id, _Real + _Scalar, 1)
  50.     ECRange(id, 1, 32767, 1)
  51.     ECProto(QNOptParams, 1, "AnimateSelect(rsAnimateID [, rsFormNum])")
  52.     formT = %AnimateCurrForm
  53.     IF QNOptParams THEN
  54.         ECType(QOptParam(1), _Real + _Scalar, 2)
  55.         ECRange(QOptParam(1), 1, 32767, 2)
  56.         %AnimateCurrForm = QOptParam(1)
  57.     ELSE
  58.         %AnimateCurrForm = FormQ(_Selected)
  59.     END IF
  60.     IF Not(FormQ(_Exists; %AnimateCurrForm)) THEN
  61.         %AnimateCurrForm = formT
  62.         STOP USING "Unable to find animate window in form.", 1
  63.     END IF
  64.     formT2 = FormQ(_Selected)
  65.     FormSelect(%AnimateCurrForm)
  66.     IF FormQObject(id)[_FQO_ItemNum] = 0 THEN
  67.         IF formT2 THEN
  68.             FormSelect(formT2)
  69.         END IF
  70.         %AnimateCurrForm = formT
  71.         STOP USING "Unable to find animate window in form.", 1
  72.     END IF 
  73.     IF formT2 THEN
  74.         FormSelect(formT2)
  75.     END IF
  76.     %AnimateCurrItem = id
  77. END PROC
  78.  
  79. PROC %AnimDefineCell (name, num)
  80.     LoCAL    scratch
  81.     IF num < 0 OR num > 200 THEN
  82.         %AnimateCleanup
  83.         STOP USING "Cell number out of range 1..200", 2
  84.     END IF
  85.     scratch = 19001
  86.     WHILE FormQObject(scratch)[_Hwnd]
  87.         scratch = scratch + 1
  88.     END WHILE
  89.     FormSetObject(scratch, _Bitmap, name, 10000, 10000)
  90.     FormModifyObject(%AnimateCurrItem; 1, num, FormQObject(scratch)[_Hwnd])
  91.     FormModifyObject(scratch, _Close)
  92. END PROC
  93.  
  94. PROC AnimateCells(names, ..)
  95.     LOCAL i, fname, cellnums, firstcellnum, formT
  96.  
  97.     ECType(names, _Alpha, 1)
  98.     ECProto(QNOptParams, 3, "AnimateCells(agNames [, rgCellNums]  |  asFormat, rsStart, rsEnd [, rsFirstCellNum])")
  99.     IF QNOptParams = 1 THEN
  100.         ECType(QOptParam(1), _Real, 2)
  101.         cellnums = QOptParam(1)
  102.     ELSEIF QNOptParams >= 2 THEN
  103.         ECType(names, _Alpha + _Scalar, 1)
  104.         ECType(QOptParam(1), _Real + _Scalar, 2)
  105.         ECType(QOptParam(2), _Real + _Scalar, 3)
  106.         startval = QOptParam(1)
  107.         endval = QOptParam(2)
  108.         ECRange(startval, 0, 999, 2)
  109.         ECRange(endval, 0, 999, 2)
  110.         IF startval > endval THEN
  111.             STOP USING "rsStart must be <= rsEnd", 1
  112.         END IF
  113.         IF QNOptParams >= 3 THEN
  114.             ECType(QOptParam(3), _Real + _Scalar, 4)
  115.             firstcellnum = QOptParam(3)
  116.         ELSE
  117.             firstcellnum = startval
  118.         END IF
  119.         fmt = SubStr$(names, "#", "P(0)")
  120.         IF fmt = names THEN
  121.             STOP USING "asFormat must contain a # sign.", 1
  122.         END IF
  123.         fmt = SubStr$(fmt, "\", "_\")
  124.         CLEAR names
  125.         FOR i = startval TO endval
  126.             names[i - startval + 1] = sprint(fmt, i)
  127.             cellnums[i - startval + 1] = firstcellnum + i - startval
  128.         NEXT i
  129.     ELSE
  130.         IF (QVar(names, _Array)) THEN
  131.             cellnums = index(EndValid(names))
  132.         ELSE
  133.             cellnums = 1
  134.         END IF
  135.     END IF
  136.     %AnimateSetup
  137.     IF QVar(cellnums, _Array) THEN
  138.         IF EndValid(cellnums) <> EndValid(names) THEN
  139.             %AnimateCleanup
  140.             STOP USING "Unequal number of cell names and cell numbers", 1
  141.         END IF
  142.         FOR i = 1 to EndValid(cellnums)
  143.             %AnimDefineCell(names[i], cellnums[i])
  144.         NEXT
  145.     ELSE
  146.         %AnimDefineCell(names, cellnums)
  147.     END IF
  148.     %AnimateCleanup
  149. END PROC
  150.         
  151. PROC AnimateFrame(cell, x, y, msTime)
  152.     ECType(cell, _Real + _Scalar, 1)
  153.     ECRange(cell, 0, 200, 1)
  154.     ECType(x, _Real + _Scalar, 2)
  155.     ECRange(x, -10000, 10000, 2)
  156.     ECType(y, _Real + _Scalar, 3)
  157.     ECRange(y, -10000, 10000, 3)
  158.     ECType(msTime, _Real + _Scalar, 4)
  159.     IF msTime < 0 THEN
  160.         STOP USING "msTime must be a positive value", 1
  161.     END IF
  162.     %AnimateSetup
  163.     FormModifyObject(%AnimateCurrItem; 2, cell, x, y, msTime)
  164.     %AnimateCleanup
  165. END PROC
  166.  
  167. PROC AnimateSpecialFrame(cmd; ..)
  168.     ECType(cmd, _Real + _Scalar, 1)
  169.     SELECT CASE cmd
  170.         CASE _Pause
  171.             IF QNOptMods = 1 THEN
  172.                 ECType(QOptMod(1), _Real + _Scalar, -1)
  173.                 IF QOptMod(1) < 0 THEN
  174.                     STOP USING "rsDelay must be a positive value", 1
  175.                 END IF
  176.                 %AnimateSetup
  177.                 FormModifyObject(%AnimateCurrItem; 2, 0, 0, 0, QOptMod(1))
  178.                 %AnimateCleanup
  179.             ELSE
  180.                 STOP USING "Syntax: AnimateSpecialFrame(_Pause; rsDelay)", 1
  181.             END IF
  182.         CASE _Stop
  183.             ECMods(QNOptMods, 0, "AnimateSpecialFrame(_Stop)")
  184.             %AnimateSetup
  185.             FormModifyObject(%AnimateCurrItem; 2, 0, 1, 0, 0)
  186.             %AnimateCleanup
  187.         CASE _Notify
  188.             ECMods(QNOptMods, 0, "AnimateSpecialFrame(_Notify)")
  189.             %AnimateSetup
  190.             FormModifyObject(%AnimateCurrItem; 2, 0, 2, 0, 0)
  191.             %AnimateCleanup
  192.         CASE ELSE
  193.             STOP USING "Unknown frame type", 1
  194.     END SELECT
  195. END PROC
  196.  
  197. PROC AnimateControl(action; ..)
  198.     ECType(action, _Real + _Scalar, 1)
  199.     SELECT CASE action
  200.         CASE _Start
  201.             ECMods(QNOptMods, 0, "AnimateControl(_Start)")
  202.             %AnimateSetup
  203.             FormModifyObject(%AnimateCurrItem; 3)
  204.             %AnimateCleanup
  205.         CASE _Stop
  206.             ECMods(QNOptMods, 0, "AnimateControl(_Stop)")
  207.             %AnimateSetup
  208.             FormModifyObject(%AnimateCurrItem; 4)
  209.             %AnimateCleanup
  210.         CASE _Restart
  211.             ECMods(QNOptMods, 0, "AnimateControl(_Restart)")
  212.             %AnimateSetup
  213.             FormModifyObject(%AnimateCurrItem; 12)
  214.             %AnimateCleanup
  215.         CASE _Clear
  216.             IF QNOptMods THEN
  217.                 ECType(QOptMod(1), _Real + _Scalar, -1)
  218.                 ECMods(QNOptMods, 1, "AnimateControl(_Clear [; _All  |  _Frame])")
  219.                 SELECT CASE QOptMod(1)
  220.                     CASE _All
  221.                         %AnimateSetup
  222.                         FormModifyObject(%AnimateCurrItem; 5)
  223.                         %AnimateCleanup
  224.                     CASE _Frame
  225.                         %AnimateSetup
  226.                         FormModifyObject(%AnimateCurrItem; 6)
  227.                         %AnimateCleanup
  228.                     CASE ELSE
  229.                         STOP USING "Unknown modifier for AnimateControl(_Clear).", 1
  230.                 END SELECT
  231.             ELSE
  232.                 %AnimateSetup
  233.                 FormModifyObject(%AnimateCurrItem; 5)
  234.                 %AnimateCleanup
  235.             END IF
  236.         CASE _SetOffset
  237.             IF QNOptMods <> 2 THEN
  238.                 STOP USING "Syntax: AnimateControl(_SetOffset; rsX, rsY)", 1
  239.             ELSE
  240.                 ECType(QOptMod(1), _Real + _Scalar, -1)
  241.                 ECType(QOptMod(2), _Real + _Scalar, -2)
  242.                 ECRange(QOptMod(1), 0, 10000, -1)
  243.                 ECRange(QOptMod(2), 0, 10000, -2)
  244.                 %AnimateSetup
  245.                 FormModifyObject(%AnimateCurrItem; 7, QOptMod(1), QOptMod(2))
  246.                 %AnimateCleanup
  247.             END IF
  248.         CASE _SetSpeed
  249.             IF QNOptMods <> 1 THEN
  250.                 STOP USING "Syntax: AnimateControl(_SetSpeed; rsSpeed)", 1
  251.             ELSE
  252.                 ECType(QOptMod(1), _Real + _Scalar, -1)
  253.                 ECRange(QOptMod(1), 1, 10000, -1)
  254.                 %AnimateSetup
  255.                 FormModifyObject(%AnimateCurrItem; 8, QOptMod(1))
  256.                 %AnimateCleanup
  257.             END IF
  258.         CASE ELSE
  259.             STOP USING "Unknown control code", 1
  260.     END SELECT
  261. END PROC
  262.  
  263.  
  264.