linklib.pas 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. PROGRAM LinkLib;
  2. uses exec, triton, tritonmacros, linklist,
  3. amigautils,strings, easyasl, utility;
  4. {
  5. A demo in FPC Pascal using triton.library
  6. Updated for fpc 1.0.7
  7. 09 Jan 2003.
  8. [email protected]
  9. }
  10. VAR
  11. Project : pTR_Project;
  12. mylist : pList;
  13. llist : pList;
  14. pdummy : ARRAY [0..108] OF Char;
  15. path : PChar;
  16. Triton_App : pTR_App;
  17. const
  18. LibListGadID = 1;
  19. AddGadID = 2;
  20. RemoveGadID = 3;
  21. RemAllGadID = 4;
  22. UpGadID = 5;
  23. DownGadID = 6;
  24. OkButton = 7;
  25. CancelButton = 8;
  26. PROCEDURE CleanExit(errstring : STRING; rc : Longint);
  27. BEGIN
  28. IF assigned(Project) THEN TR_CloseProject(Project);
  29. IF Assigned(mylist) THEN DestroyList(mylist);
  30. IF Assigned(llist) THEN DestroyList(llist);
  31. IF errstring <> '' THEN WriteLn(errstring);
  32. Halt(rc)
  33. END;
  34. PROCEDURE disablegads;
  35. VAR
  36. dummy : Longint;
  37. BEGIN
  38. IF NodesInList(mylist) > 0 THEN dummy := 0
  39. ELSE dummy := 1;
  40. TR_SetAttribute(Project,RemoveGadID,TRAT_Disabled,dummy);
  41. TR_SetAttribute(Project,RemAllGadID,TRAT_Disabled,dummy);
  42. TR_SetAttribute(Project,UpGadID,TRAT_Disabled,dummy);
  43. TR_SetAttribute(Project,DownGadID,TRAT_Disabled,dummy);
  44. END;
  45. PROCEDURE readinlist;
  46. VAR
  47. dummy : BOOLEAN;
  48. temp : pFPCNode;
  49. BEGIN
  50. dummy := FileToList('ram:fpclistoffiles',mylist);
  51. IF dummy THEN BEGIN
  52. temp := GetFirstNode(mylist);
  53. IF temp <> NIL THEN StrCopy(path,PathOf(GetNodeData(temp)));
  54. temp := GetLastNode(mylist);
  55. IF StrLen(GetNodeData(temp)) = 0 THEN RemoveLastNode(mylist);
  56. END;
  57. END;
  58. PROCEDURE addfiles;
  59. VAR
  60. dummy : BOOLEAN;
  61. mynode,tempnode : pFPCNode;
  62. temp : Longint;
  63. BEGIN
  64. dummy := GetMultiAsl('Pick a file or two :)',path,llist,NIL,NIL);
  65. IF dummy THEN BEGIN
  66. mynode := GetFirstNode(llist);
  67. FOR temp := 1 TO NodesInList(llist) DO BEGIN
  68. tempnode := AddNewNode(mylist,(PathAndFile(path,GetNodeData(mynode))));
  69. mynode := GetNextNode(mynode);
  70. END;
  71. TR_UpdateListView(Project,LibListGadID,mylist);
  72. TR_SetValue(Project,LibListGadID,0);
  73. disablegads;
  74. ClearList(llist);
  75. END;
  76. END;
  77. PROCEDURE removelib;
  78. VAR
  79. num : Longint;
  80. mynode : pFPCNode;
  81. strbuf : ARRAY [0..255] OF Char;
  82. buffer : PChar;
  83. dummy : Longint;
  84. BEGIN
  85. buffer := @strbuf;
  86. num := TR_GetValue(Project,LibListGadID);
  87. mynode := GetNodeNumber(mylist,num);
  88. dummy := TR_EasyRequestTags(Triton_App,'Sure you want to delete'+#10+
  89. strpas(GetNodeData(mynode)),'_Remove|_Cancel',[
  90. TREZ_LockProject, AsTag(Project),
  91. TREZ_Title, AsTag('Delete this file?'),
  92. TREZ_Activate,1,
  93. TAG_END]);
  94. IF dummy = 1 THEN BEGIN
  95. DeleteNode(mynode);
  96. TR_UpdateListView(Project,LibListGadID,mylist);
  97. TR_SetValue(Project,LibListGadID,0);
  98. disablegads;
  99. END;
  100. END;
  101. PROCEDURE removeall;
  102. VAR
  103. dummy : Longint;
  104. BEGIN
  105. dummy := TR_EasyRequestTags(Triton_App,'Sure you want to remove all files?',
  106. '_Remove|_Cancel',[
  107. TREZ_LockProject, AsTag(Project),
  108. TREZ_Title, AsTag('Delete all?'),
  109. TREZ_Activate,1,
  110. TAG_END]);
  111. IF dummy = 1 THEN BEGIN
  112. ClearList(mylist);
  113. TR_UpdateListView(Project,LibListGadID,mylist);
  114. disablegads;
  115. END;
  116. END;
  117. PROCEDURE savethelist;
  118. VAR
  119. dummy : BOOLEAN;
  120. BEGIN
  121. dummy := ListToFile('Ram:fpclistoffiles',mylist);
  122. END;
  123. PROCEDURE movedown;
  124. VAR
  125. num : INTEGER;
  126. mynode : pFPCNode;
  127. BEGIN
  128. num := TR_GetValue(project,LibListGadID);
  129. IF num < (NodesInList(mylist)-1) THEN BEGIN
  130. mynode := GetNodeNumber(mylist,num);
  131. IF mynode <> NIL THEN BEGIN
  132. MoveNodeDown(mylist,mynode);
  133. TR_UpdateListView(Project,LibListGadID,mylist);
  134. TR_SetValue(Project,LibListGadID,num + 1);
  135. END;
  136. END;
  137. END;
  138. PROCEDURE moveup;
  139. VAR
  140. num : Longint;
  141. mynode : pFPCNode;
  142. BEGIN
  143. num := TR_GetValue(project,LibListGadID);
  144. IF num > 0 THEN BEGIN
  145. mynode := GetNodeNumber(mylist,num);
  146. IF mynode <> NIL THEN BEGIN
  147. MoveNodeUp(mylist,mynode);
  148. TR_UpdateListView(Project,LibListGadID,mylist);
  149. TR_SetValue(Project,LibListGadID,num-1);
  150. END;
  151. END;
  152. END;
  153. PROCEDURE do_demo;
  154. VAR
  155. close_me : BOOLEAN;
  156. trmsg : pTR_Message;
  157. dummy : Longint;
  158. BEGIN
  159. ProjectStart;
  160. WindowID(1);
  161. WindowPosition(TRWP_CENTERDISPLAY);
  162. WindowTitle('TritonListViewDemo in FPC Pascal');
  163. HorizGroupAC;
  164. Space;
  165. VertGroupAC;
  166. Space;
  167. NamedSeparator('List of files');
  168. Space;
  169. ListSSM(mylist,LibListGadID,0,0,25);
  170. Space;
  171. EndGroup;
  172. Space;
  173. VertSeparator;
  174. Space;
  175. SetTRTag(TRGR_Vert, TRGR_ALIGN OR TRGR_FIXHORIZ);
  176. Space;
  177. Button('_Add...',AddGadID);
  178. SpaceS;
  179. Button('_Remove...',RemoveGadID);
  180. SpaceS;
  181. Button('Re_move All...',RemAllGadID);
  182. SpaceS;
  183. Button('_Up',UpGadID);
  184. SpaceS;
  185. Button('_Down',DownGadID);
  186. VertGroupS;Space;EndGroup;
  187. Button('_Ok',OkButton);
  188. SpaceS;
  189. Button('_Cancel',CancelButton);
  190. Space;
  191. EndGroup;
  192. Space;
  193. EndGroup;
  194. EndProject;
  195. Project := TR_OpenProject(Triton_App,@tritontags);
  196. IF Project <> NIL THEN BEGIN
  197. disablegads;
  198. close_me := FALSE;
  199. WHILE NOT close_me DO BEGIN
  200. dummy := TR_Wait(Triton_App,0);
  201. REPEAT
  202. trmsg := TR_GetMsg(Triton_App);
  203. IF trmsg <> NIL THEN BEGIN
  204. IF (trmsg^.trm_Project = Project) THEN BEGIN
  205. CASE trmsg^.trm_Class OF
  206. TRMS_CLOSEWINDOW : close_me := True;
  207. TRMS_ERROR: WriteLN(TR_GetErrorString(trmsg^.trm_Data));
  208. TRMS_ACTION :
  209. BEGIN
  210. CASE trmsg^.trm_ID OF
  211. AddGadID : addfiles;
  212. UpGadID : moveup;
  213. DownGadID : movedown;
  214. RemoveGadID : removelib;
  215. RemAllGadID : removeall;
  216. OkButton : BEGIN savethelist; close_me := True; END;
  217. CancelButton : close_me := True;
  218. END;
  219. END;
  220. ELSE
  221. END;
  222. END;
  223. TR_ReplyMsg(trmsg);
  224. END
  225. UNTIL close_me OR (trmsg = NIL);
  226. END;
  227. END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(Triton_App)));
  228. END;
  229. BEGIN { Main }
  230. if not Assigned(TritonBase) then
  231. begin
  232. writeln('cannot open ' + TRITONNAME);
  233. Halt(5);
  234. end;
  235. Triton_App := TR_CreateAppTags([
  236. TRCA_Name, AsTag('Triton ListView Demo'),
  237. TRCA_LongName, AsTag('Demo of ListView in Triton, made in FPC Pascal'),
  238. TRCA_Version, AsTag('0.01'),
  239. TRCA_Info, AsTag('Uses tritonsupport'),
  240. TRCA_Release, AsTag('11'),
  241. TRCA_Date, AsTag('03-02-1998'),
  242. TAG_END]);
  243. if Triton_App <> nil then begin
  244. path := @pdummy;
  245. StrpCopy(path,'sys:');
  246. CreateList(mylist);
  247. CreateList(llist);
  248. readinlist;
  249. do_demo;
  250. CleanExit('',0);
  251. END
  252. ELSE CleanExit('Can''t create application',20);
  253. END.