home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 August / PCWorld_2000-08_cd.bin / Software / TemaCD / xbasic / xbpro.exe / xb / app / editors.x < prev    next >
Text File  |  1999-05-07  |  7KB  |  292 lines

  1. '
  2. ' ####################
  3. ' #####  PROLOG  #####
  4. ' ####################
  5. '
  6. PROGRAM "editors"
  7. VERSION "0.0000"
  8. '
  9. IMPORT  "xst"
  10. IMPORT  "xgr"
  11. IMPORT  "xui"
  12. '
  13. INTERNAL FUNCTION  Entry        ()
  14. INTERNAL FUNCTION  CloseWindow  (grid)
  15. INTERNAL FUNCTION  CreateWindow (grid, v0, v1)
  16. INTERNAL FUNCTION  File         (grid, v0, v1, kid)
  17. INTERNAL FUNCTION  FileLoad     (grid)
  18. INTERNAL FUNCTION  FileSave     (grid)
  19. INTERNAL FUNCTION  FileQuit     (grid)
  20. INTERNAL FUNCTION  Edit         (grid, v0, v1, kid)
  21. INTERNAL FUNCTION  EditCut      (grid)
  22. INTERNAL FUNCTION  EditGrab     (grid)
  23. INTERNAL FUNCTION  EditPaste    (grid)
  24. INTERNAL FUNCTION  EditErase    (grid)
  25. '
  26. '
  27. ' ###################
  28. ' #####  Entry  #####
  29. ' ###################
  30. '
  31. FUNCTION  Entry ()
  32.   SHARED  count
  33. '
  34.   $Edit      =   0  ' kid   0 grid type = XuiMenuTextArea1B
  35.   $Menu      =   1  ' kid   1 grid type = XuiMenu
  36.   $Text      =   2  ' kid   2 grid type = XuiTextArea
  37.   $Button    =   3  ' kid   3 grid type = XuiPushButton
  38.   $UpperKid  =   3  ' kid maximum
  39. '
  40. ' get information about the display, windows, and execution environment
  41. '
  42.   XgrGetDisplaySize ("", @dw, @dh, @wbw, @wth)
  43.     XstGetApplicationEnvironment (@standalone, 0)
  44. '
  45. ' standalone programs don't want the console
  46. '
  47.     IF standalone THEN
  48.         XstGetConsoleGrid (@grid)
  49.         XuiSendStringMessage (grid, "HideWindow", 0, 0, 0, 0, 0, 0)
  50.     END IF
  51. '
  52. ' create an initial "editor" window
  53. '
  54.   CreateWindow (@grid, wbw, wbw+wth)
  55. '
  56. ' convenience function message loop
  57. '
  58.   DO
  59.     XgrProcessMessages (1)
  60.     DO WHILE XuiGetNextCallback (@grid, @message$, @v0, @v1, @v2, @v3, @kid, @r1$)
  61.       GOSUB Callback
  62.     LOOP
  63.   LOOP
  64.   RETURN
  65. '
  66. ' *****  Callback  *****
  67. '
  68. SUB Callback
  69.   win = kid >> 16
  70.   kid = kid AND 0xFF
  71.   SELECT CASE message$
  72.     CASE "CloseWindow" : GOSUB CloseWindow
  73.     CASE "Selection"   : GOSUB Selection
  74.   END SELECT
  75. END SUB
  76. '
  77. '
  78. ' *****  CloseWindow  *****
  79. '
  80. SUB CloseWindow
  81.   DEC count
  82.   XuiSendStringMessage (grid, "DestroyWindow", 0, 0, 0, 0, 0, 0)
  83.   IF (count < 0) THEN QUIT (0)
  84. END SUB
  85. '
  86. '
  87. ' *****  Selection  *****
  88. '
  89. SUB Selection
  90.   SELECT CASE kid
  91.     CASE $Edit    :
  92.     CASE $Menu    : GOSUB Menu
  93.     CASE $Text    :
  94.     CASE $Button  : GOSUB Another
  95.   END SELECT
  96. END SUB
  97. '
  98. '
  99. ' *****  Menu  *****
  100. '
  101. SUB Menu
  102.   SELECT CASE v0
  103.     CASE 1  : File (grid, v0, v1, kid)
  104.     CASE 2  : Edit (grid, v0, v1, kid)
  105.   END SELECT
  106. END SUB
  107. '
  108. '
  109. ' *****  Another  *****
  110. '
  111. SUB Another
  112.   INC count
  113.   XuiSendStringMessage (grid, @"GetWindowSize", @wx, @wy, 0, 0, 0, 0)
  114.   CreateWindow (@g, wx+wbw, wy+wbw+wth)
  115. END SUB
  116. END FUNCTION
  117. '
  118. '
  119. ' ############################
  120. ' #####  CloseWindow ()  #####
  121. ' ############################
  122. '
  123. FUNCTION  CloseWindow (grid)
  124.   SHARED  count
  125. '
  126.   DEC count
  127.   XuiSendStringMessage (grid, "DestroyWindow", 0, 0, 0, 0, 0, 0)
  128.   IF (count < 0) THEN QUIT (0)
  129. END FUNCTION
  130. '
  131. '
  132. ' #############################
  133. ' #####  CreateWindow ()  #####
  134. ' #############################
  135. '
  136. FUNCTION  CreateWindow (grid, v0, v1)
  137. '
  138.   XuiCreateWindow      (@grid, @"XuiMenuTextArea1B", v0, v1, 0, 0, 0, "")
  139.   XuiSendStringMessage ( grid, @"SetCallback", grid, &XuiQueueCallbacks(), -1, -1, 0, -1)
  140.   XuiSendStringMessage ( grid, @"SetWindowTitle", 0, 0, 0, 0, 0, @"Editor")
  141.   XuiSendStringMessage ( grid, @"SetGridName", 0, 0, 0, 0, 0, @"Editor")
  142.   XuiSendStringMessage ( grid, @"DisplayWindow", 0, 0, 0, 0, 0, 0)
  143. END FUNCTION
  144. '
  145. '
  146. ' #####################
  147. ' #####  File ()  #####
  148. ' #####################
  149. '
  150. FUNCTION  File (grid, v0, v1, kid)
  151. '
  152.   SELECT CASE v1
  153.     CASE 0  : FileLoad (grid)
  154.     CASE 1  : FileSave (grid)
  155.     CASE 2  : FileQuit (grid)
  156.   END SELECT
  157. END FUNCTION
  158. '
  159. '
  160. ' #########################
  161. ' #####  FileLoad ()  #####
  162. ' #########################
  163. '
  164. FUNCTION  FileLoad (grid)
  165. '
  166.   gridType$ = "XuiFile"
  167.   title$ = "Select File"
  168.   message$ = ""
  169.   strings$ = ""
  170.   reply$ = ""
  171.   XuiGetResponse (@gridType$, @title$, @message$, @strings$, @v0, @v1, @kid, @reply$)
  172.   IF reply$ THEN
  173.     XstLoadStringArray (@reply$, @text$[])
  174.     XuiSendStringMessage (grid, "SetTextArray", 0, 0, 0, 0, 2, @text$[])
  175.     XuiSendStringMessage (grid, "Redraw", 0, 0, 0, 0, 0, 0)
  176.   END IF
  177. END FUNCTION
  178. '
  179. '
  180. ' #########################
  181. ' #####  FileSave ()  #####
  182. ' #########################
  183. '
  184. FUNCTION  FileSave (grid)
  185. '
  186.   gridType$ = "XuiFile"
  187.   title$ = "Select File"
  188.   message$ = ""
  189.   strings$ = ""
  190.   reply$ = ""
  191.   XuiGetResponse (@gridType$, @title$, @message$, @strings$, @v0, @v1, @kid, @reply$)
  192.   IF reply$ THEN
  193.     XuiSendStringMessage (grid, "GetTextArray", 0, 0, 0, 0, 2, @text$[])
  194.     XstSaveStringArray (@reply$, @text$[])
  195.   END IF
  196. END FUNCTION
  197. '
  198. '
  199. ' #########################
  200. ' #####  FileQuit ()  #####
  201. ' #########################
  202. '
  203. FUNCTION  FileQuit (grid)
  204.   CloseWindow (grid)
  205. END FUNCTION
  206. '
  207. '
  208. ' #####################
  209. ' #####  Edit ()  #####
  210. ' #####################
  211. '
  212. FUNCTION  Edit (grid, v0, v1, kid)
  213. '
  214.   SELECT CASE v1
  215.     CASE 0  : EditCut (grid)
  216.     CASE 1  : EditGrab (grid)
  217.     CASE 2  : EditPaste (grid)
  218.     CASE 3  : EditErase (grid)
  219.   END SELECT
  220. END FUNCTION
  221. '
  222. '
  223. ' ########################
  224. ' #####  EditCut ()  #####
  225. ' ########################
  226. '
  227. FUNCTION  EditCut (grid)
  228.     UBYTE  null[]
  229. '
  230.     XgrGetTextSelectionGrid (@g)
  231.     IF g THEN
  232.         XuiSendStringMessage (g, "GetTextSelection", @begPos, @begLine, @endPos, @endLine, 0, @text$)
  233.         IFZ text$ THEN RETURN
  234.         XgrSetClipboard (0, $$ClipboardTypeText, @text$, @null[])
  235.         XuiSendStringMessage (g, "TextReplace", begPos, begLine, endPos, endLine, 0, "")
  236.         XuiSendStringMessage (g, "RedrawText", 0, 0, 0, 0, 0, 0)
  237.     END IF
  238. END FUNCTION
  239. '
  240. '
  241. ' #########################
  242. ' #####  EditGrab ()  #####
  243. ' #########################
  244. '
  245. FUNCTION  EditGrab (grid)
  246.     UBYTE  null[]
  247. '
  248.     XgrGetTextSelectionGrid (@g)
  249.     IF g THEN
  250.         XuiSendStringMessage (g, "GetTextSelection", 0, 0, 0, 0, 0, @text$)
  251.         XuiSendStringMessage (g, "RedrawText", 0, 0, $$SelectCancel, 0, 0, 0)
  252.         IF text$ THEN XgrSetClipboard (0, $$ClipboardTypeText, @text$, @null[])
  253.     END IF
  254. END FUNCTION
  255. '
  256. '
  257. ' ##########################
  258. ' #####  EditPaste ()  #####
  259. ' ##########################
  260. '
  261. FUNCTION  EditPaste (grid)
  262.     UBYTE  null[]
  263. '
  264.     XgrGetClipboard (0, $$ClipboardTypeText, @text$, @null[])
  265.     IF text$ THEN
  266.         XgrGetSelectedWindow (@window)
  267.         XgrSendStringMessage (window, "WindowGetKeyboardFocusGrid", @g, 0, 0, 0, 0, 0)
  268.         IF g THEN
  269.             XuiSendStringMessage (g, "GetTextCursor", @cursorPos, @cursorLine, 0, 0, 0, 0)
  270.             XuiSendStringMessage (g, "TextReplace", cursorPos, cursorLine, cursorPos, cursorLine, 0, @text$)
  271.             XuiSendStringMessage (g, "RedrawText", 0, 0, 0, 0, 0, 0)
  272.         END IF
  273.     END IF
  274. END FUNCTION
  275. '
  276. '
  277. ' ##########################
  278. ' #####  EditErase ()  #####
  279. ' ##########################
  280. '
  281. FUNCTION  EditErase (grid)
  282. '
  283.     XgrGetTextSelectionGrid (@g)
  284.     IF g THEN
  285.         XuiSendStringMessage (g, "GetTextSelection", @begPos, @begLine, @endPos, @endLine, 0, @text$)
  286.         IFZ text$ THEN RETURN
  287.         XuiSendStringMessage (g, "TextReplace", begPos, begLine, endPos, endLine, 0, "")
  288.         XuiSendStringMessage (g, "RedrawText", 0, 0, 0, 0, 0, 0)
  289.     END IF
  290. END FUNCTION
  291. END PROGRAM
  292.