home *** CD-ROM | disk | FTP | other *** search
/ Global Amiga Experience / globalamigaexperience.iso / text_dtp / editor / turbotext / rexx / organizewindows.ttx < prev    next >
Text File  |  1995-07-10  |  6KB  |  274 lines

  1.  
  2. /** $VER: OrganizeWindows.ttx 2.0 (5.3.94)
  3.  **
  4.  ** Organize all document windows on the same screen as the current document
  5.  ** windows. The argument specifies how the windows are to be organized:
  6.  **
  7.  **   STACK
  8.  **   Puts the windows in horizontal slices, stacked vertically on the screen
  9.  **
  10.  **   CASCADE
  11.  **   Puts the windows in a cascade, one top of the other. All title bars
  12.  **   then become visible.
  13.  **
  14.  **   TILE
  15.  **   Puts all windows in a 2D tile pattern.
  16.  **
  17.  **   ICONIFY
  18.  **   Iconifies all windows, and aligns them on the left side of the screen.
  19.  **/
  20.  
  21.  
  22. OPTIONS RESULTS
  23. OPTIONS FAILAT 11
  24. PARSE ARG style
  25.  
  26.  
  27.   IF style = "" THEN
  28.     style = ICONIFY
  29.   ELSE
  30.     style = UPPER(style)
  31.  
  32.   GetScreenInfo
  33.   PARSE VAR RESULT dummy dummy screenWidth screenHeight dummy '"' screenName '"' .
  34.  
  35.   IF (RC ~= 0) THEN DO
  36.     RETURN
  37.   END
  38.  
  39.   GetDocuments
  40.   docs = RESULT
  41.  
  42.   GetPort
  43.   originalPort = RESULT
  44.  
  45.   numIcons   = 0
  46.   numWindows = 0
  47.   iconHeight = 0
  48.   DO WHILE docs ~= ''
  49.     PARSE VAR docs '"' names.numWindows '" ' ports.numWindows docs
  50.  
  51.     ADDRESS VALUE ports.numWindows
  52.  
  53.     GetWindowInfo
  54.     IF RC = 0 THEN DO
  55.       windowInfo = RESULT
  56.       GetScreenInfo
  57.       IF screenName = Strip(Word(RESULT,8),B,'"') THEN DO
  58.         icons.numWindows = FALSE
  59.  
  60.         IF Word(windowInfo,1) = ON THEN DO
  61.           icons.numWindows = TRUE;
  62.           numIcons         = numIcons + 1
  63.           iconHeight       = Word(windowInfo,5)
  64.         END
  65.  
  66.         numWindows = numWindows + 1
  67.       END
  68.     END
  69.   END
  70.  
  71.   availHeight = (screenHeight - (numIcons * iconHeight))
  72.   numFull     = numWindows - numIcons
  73.   yPos        = 0
  74.  
  75.   /* look ma, a bubble sort... */
  76.   swap = TRUE
  77.   DO WHILE swap = TRUE
  78.     i = 0
  79.     swap = FALSE
  80.     DO WHILE i < numWindows - 1
  81.       j = i + 1
  82.       IF names.i > names.j THEN DO
  83.         swap = TRUE
  84.  
  85.         nswap = names.i
  86.         pswap = ports.i
  87.         iswap = icons.i
  88.  
  89.         names.i = names.j
  90.         ports.i = ports.j
  91.         icons.i = icons.j
  92.  
  93.         names.j = nswap
  94.         ports.j = pswap
  95.         icons.j = iswap
  96.       END
  97.       i = j
  98.     END
  99.   END
  100.  
  101.   IF numFull = 0 THEN DO
  102.     style = ICONIFY
  103.   END
  104.  
  105.   IF style = STACK THEN DO
  106.     wHeight = availHeight % numFull
  107.     winCnt  = 0
  108.  
  109.     ADDRESS VALUE originalPort
  110.     GetWindowInfo
  111.     IF Word(RESULT,1) = OFF THEN DO
  112.       MoveSizeWindow 0 0 screenWidth wHeight
  113.       Window2Front
  114.       yPos = wHeight
  115.       winCnt = 1
  116.     END
  117.  
  118.     DO i = 0 TO numWindows-1
  119.       IF ports.i ~= originalPort THEN DO
  120.         IF icons.i = FALSE THEN DO
  121.           winCnt = winCnt + 1
  122.           IF (winCnt = numFull) THEN DO
  123.             wHeight = wHeight + (availHeight // numFull)
  124.           END
  125.  
  126.           ADDRESS VALUE ports.i
  127.           MoveSizeWindow 0 yPos screenWidth wHeight
  128.           Window2Front
  129.           yPos = yPos+wHeight
  130.         END
  131.       END
  132.     END
  133.   END
  134.  
  135.   IF style = CASCADE THEN DO
  136.     wHeight = availHeight
  137.     yPos    = 0
  138.  
  139.     IF iconHeight = 0 THEN DO
  140.       iconHeight = 15
  141.     END
  142.  
  143.     DO i = 0 TO numWindows-1
  144.       IF ports.i ~= originalPort THEN DO
  145.         ADDRESS VALUE ports.i
  146.         IF icons.i = FALSE THEN DO
  147.           MoveSizeWindow 0 yPos screenWidth wHeight
  148.           Window2Front
  149.           wHeight = wHeight - iconHeight
  150.           yPos    = yPos + iconHeight
  151.         END
  152.       END
  153.     END
  154.  
  155.     ADDRESS VALUE originalPort
  156.     GetWindowInfo
  157.     IF Word(RESULT,1) = OFF THEN DO
  158.       MoveSizeWindow 0 yPos screenWidth wHeight
  159.       Window2Front
  160.       wHeight = wHeight - iconHeight
  161.       yPos    = yPos + iconHeight
  162.     END
  163.  
  164.     yPos = availHeight
  165.   END
  166.  
  167.   IF style = TILE THEN DO
  168.     /* cheezy way of doing a square root... */
  169.     DO i = 2 TO 100
  170.       IF i*i > numFull THEN DO
  171.         i = i - 1
  172.         LEAVE
  173.       END
  174.     END
  175.  
  176.     numW   = i
  177.     numH   = i
  178.     extras = numFull - (i*i)
  179.     IF extras > numH THEN DO
  180.       numH = numH + 1
  181.       extras = extras - numW
  182.     END
  183.     extras = - (numH - extras)
  184.  
  185.     winCnt   = 0
  186.     winInRow = numW + (extras >= 0)
  187.     wWidth   = screenWidth % winInRow
  188.     wHeight  = availHeight % numH
  189.     xPos     = 0;
  190.     yPos     = 0
  191.     rowCnt   = 0;
  192.  
  193.     ADDRESS VALUE originalPort
  194.     GetWindowInfo
  195.     IF Word(RESULT,1) = OFF THEN DO
  196.       winCnt = winCnt + 1
  197.       rowCnt = rowCnt + 1
  198.  
  199.       IF rowCnt // winInRow = 0 THEN DO
  200.         MoveSizeWindow xPos yPos (screenWidth-xPos) wHeight
  201.         xPos     = 0
  202.         yPos     = yPos + wHeight
  203.         extras   = extras + 1
  204.         winInRow = numW + (extras >= 0)
  205.         wWidth   = screenWidth % winInRow
  206.         rowCnt   = 0
  207.  
  208.         IF winCnt + winInRow = numFull THEN DO
  209.           wHeight = availHeight - yPos
  210.         END
  211.  
  212.       END; ELSE DO
  213.         MoveSizeWindow xPos yPos wWidth wHeight
  214.         xPos = xPos + wWidth;
  215.       END;
  216.  
  217.       Window2Front
  218.     END
  219.  
  220.     DO i = 0 TO numWindows-1
  221.       IF ports.i ~= originalPort THEN DO
  222.         IF icons.i = FALSE THEN DO
  223.           ADDRESS VALUE ports.i
  224.           winCnt = winCnt + 1
  225.           rowCnt = rowCnt + 1
  226.  
  227.           IF rowCnt // winInRow = 0 THEN DO
  228.             MoveSizeWindow xPos yPos (screenWidth-xPos) wHeight
  229.             xPos     = 0
  230.             yPos     = yPos + wHeight
  231.             extras   = extras + 1
  232.             winInRow = numW + (extras >= 0)
  233.             wWidth   = screenWidth % winInRow
  234.             rowCnt   = 0
  235.  
  236.             IF winCnt + winInRow = numFull THEN DO
  237.               wHeight = availHeight - yPos
  238.             END
  239.  
  240.           END; ELSE DO
  241.             MoveSizeWindow xPos yPos wWidth wHeight
  242.             xPos = xPos + wWidth;
  243.           END;
  244.  
  245.           Window2Front
  246.         END
  247.       END
  248.     END
  249.   END
  250.  
  251.   IF style = ICONIFY THEN DO
  252.     DO i = 0 TO numWindows-1
  253.       ADDRESS VALUE ports.i
  254.       IconifyWindow ON
  255.  
  256.       GetWindowInfo
  257.       height = Word(RESULT,5)
  258.  
  259.       yPos = yPos + height + 1
  260.       MoveSizeWindow 0 yPos
  261.     END
  262.  
  263.   END; ELSE DO
  264.  
  265.     DO i = 0 TO numWindows-1
  266.       IF icons.i = TRUE THEN DO
  267.         ADDRESS VALUE ports.i
  268.         MoveSizeWindow 0 yPos
  269.         Window2Front
  270.         yPos = yPos + iconHeight
  271.       END
  272.     END
  273.   END
  274.