mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-07-09 19:57:16 +02:00
277 lines
7.7 KiB
ObjectPascal
277 lines
7.7 KiB
ObjectPascal
PROGRAM LinkLib;
|
|
|
|
uses exec, triton, tritonmacros, linklist,
|
|
amigautils,strings, easyasl, utility;
|
|
|
|
{
|
|
A demo in FPC Pascal using triton.library
|
|
|
|
Updated for fpc 1.0.7
|
|
09 Jan 2003.
|
|
|
|
nils.sjoholm@mailbox.swipnet.se
|
|
}
|
|
|
|
|
|
|
|
VAR
|
|
Project : pTR_Project;
|
|
mylist : pList;
|
|
llist : pList;
|
|
pdummy : ARRAY [0..108] OF Char;
|
|
path : PChar;
|
|
Triton_App : pTR_App;
|
|
|
|
const
|
|
|
|
LibListGadID = 1;
|
|
AddGadID = 2;
|
|
RemoveGadID = 3;
|
|
RemAllGadID = 4;
|
|
UpGadID = 5;
|
|
DownGadID = 6;
|
|
OkButton = 7;
|
|
CancelButton = 8;
|
|
|
|
|
|
PROCEDURE CleanExit(errstring : STRING; rc : Longint);
|
|
BEGIN
|
|
IF assigned(Project) THEN TR_CloseProject(Project);
|
|
IF Assigned(mylist) THEN DestroyList(mylist);
|
|
IF Assigned(llist) THEN DestroyList(llist);
|
|
IF errstring <> '' THEN WriteLn(errstring);
|
|
Halt(rc)
|
|
END;
|
|
|
|
PROCEDURE disablegads;
|
|
VAR
|
|
dummy : Longint;
|
|
BEGIN
|
|
IF NodesInList(mylist) > 0 THEN dummy := 0
|
|
ELSE dummy := 1;
|
|
|
|
TR_SetAttribute(Project,RemoveGadID,TRAT_Disabled,dummy);
|
|
TR_SetAttribute(Project,RemAllGadID,TRAT_Disabled,dummy);
|
|
TR_SetAttribute(Project,UpGadID,TRAT_Disabled,dummy);
|
|
TR_SetAttribute(Project,DownGadID,TRAT_Disabled,dummy);
|
|
END;
|
|
|
|
PROCEDURE readinlist;
|
|
VAR
|
|
dummy : BOOLEAN;
|
|
temp : pFPCNode;
|
|
BEGIN
|
|
dummy := FileToList('ram:fpclistoffiles',mylist);
|
|
IF dummy THEN BEGIN
|
|
temp := GetFirstNode(mylist);
|
|
IF temp <> NIL THEN StrCopy(path,PathOf(GetNodeData(temp)));
|
|
temp := GetLastNode(mylist);
|
|
IF StrLen(GetNodeData(temp)) = 0 THEN RemoveLastNode(mylist);
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE addfiles;
|
|
|
|
VAR
|
|
dummy : BOOLEAN;
|
|
mynode,tempnode : pFPCNode;
|
|
temp : Longint;
|
|
|
|
BEGIN
|
|
dummy := GetMultiAsl('Pick a file or two :)',path,llist,NIL,NIL);
|
|
IF dummy THEN BEGIN
|
|
mynode := GetFirstNode(llist);
|
|
FOR temp := 1 TO NodesInList(llist) DO BEGIN
|
|
tempnode := AddNewNode(mylist,(PathAndFile(path,GetNodeData(mynode))));
|
|
mynode := GetNextNode(mynode);
|
|
END;
|
|
TR_UpdateListView(Project,LibListGadID,mylist);
|
|
TR_SetValue(Project,LibListGadID,0);
|
|
disablegads;
|
|
ClearList(llist);
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE removelib;
|
|
VAR
|
|
num : Longint;
|
|
mynode : pFPCNode;
|
|
strbuf : ARRAY [0..255] OF Char;
|
|
buffer : PChar;
|
|
dummy : Longint;
|
|
BEGIN
|
|
buffer := @strbuf;
|
|
num := TR_GetValue(Project,LibListGadID);
|
|
mynode := GetNodeNumber(mylist,num);
|
|
|
|
dummy := TR_EasyRequestTags(Triton_App,'Sure you want to delete'+#10+
|
|
strpas(GetNodeData(mynode)),'_Remove|_Cancel',[
|
|
TREZ_LockProject,Project,
|
|
TREZ_Title,'Delete this file?',
|
|
TREZ_Activate,1,
|
|
TAG_END]);
|
|
IF dummy = 1 THEN BEGIN
|
|
DeleteNode(mynode);
|
|
TR_UpdateListView(Project,LibListGadID,mylist);
|
|
TR_SetValue(Project,LibListGadID,0);
|
|
disablegads;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE removeall;
|
|
VAR
|
|
dummy : Longint;
|
|
BEGIN
|
|
dummy := TR_EasyRequestTags(Triton_App,'Sure you want to remove all files?',
|
|
'_Remove|_Cancel',[
|
|
TREZ_LockProject,Project,
|
|
TREZ_Title,'Delete all?',
|
|
TREZ_Activate,1,
|
|
TAG_END]);
|
|
IF dummy = 1 THEN BEGIN
|
|
ClearList(mylist);
|
|
TR_UpdateListView(Project,LibListGadID,mylist);
|
|
disablegads;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE savethelist;
|
|
VAR
|
|
dummy : BOOLEAN;
|
|
BEGIN
|
|
dummy := ListToFile('Ram:fpclistoffiles',mylist);
|
|
END;
|
|
|
|
PROCEDURE movedown;
|
|
VAR
|
|
num : INTEGER;
|
|
mynode : pFPCNode;
|
|
BEGIN
|
|
num := TR_GetValue(project,LibListGadID);
|
|
IF num < (NodesInList(mylist)-1) THEN BEGIN
|
|
mynode := GetNodeNumber(mylist,num);
|
|
IF mynode <> NIL THEN BEGIN
|
|
MoveNodeDown(mylist,mynode);
|
|
TR_UpdateListView(Project,LibListGadID,mylist);
|
|
TR_SetValue(Project,LibListGadID,num + 1);
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE moveup;
|
|
VAR
|
|
num : Longint;
|
|
mynode : pFPCNode;
|
|
BEGIN
|
|
num := TR_GetValue(project,LibListGadID);
|
|
IF num > 0 THEN BEGIN
|
|
mynode := GetNodeNumber(mylist,num);
|
|
IF mynode <> NIL THEN BEGIN
|
|
MoveNodeUp(mylist,mynode);
|
|
TR_UpdateListView(Project,LibListGadID,mylist);
|
|
TR_SetValue(Project,LibListGadID,num-1);
|
|
END;
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE do_demo;
|
|
VAR
|
|
close_me : BOOLEAN;
|
|
trmsg : pTR_Message;
|
|
dummy : Longint;
|
|
|
|
BEGIN
|
|
ProjectStart;
|
|
WindowID(1);
|
|
WindowPosition(TRWP_CENTERDISPLAY);
|
|
WindowTitle('TritonListViewDemo in FPC Pascal');
|
|
HorizGroupAC;
|
|
Space;
|
|
VertGroupAC;
|
|
Space;
|
|
NamedSeparator('List of files');
|
|
Space;
|
|
ListSSM(mylist,LibListGadID,0,0,25);
|
|
Space;
|
|
EndGroup;
|
|
Space;
|
|
VertSeparator;
|
|
Space;
|
|
SetTRTag(TRGR_Vert, TRGR_ALIGN OR TRGR_FIXHORIZ);
|
|
Space;
|
|
Button('_Add...',AddGadID);
|
|
SpaceS;
|
|
Button('_Remove...',RemoveGadID);
|
|
SpaceS;
|
|
Button('Re_move All...',RemAllGadID);
|
|
SpaceS;
|
|
Button('_Up',UpGadID);
|
|
SpaceS;
|
|
Button('_Down',DownGadID);
|
|
VertGroupS;Space;EndGroup;
|
|
Button('_Ok',OkButton);
|
|
SpaceS;
|
|
Button('_Cancel',CancelButton);
|
|
Space;
|
|
EndGroup;
|
|
Space;
|
|
EndGroup;
|
|
EndProject;
|
|
|
|
Project := TR_OpenProject(Triton_App,@tritontags);
|
|
IF Project <> NIL THEN BEGIN
|
|
disablegads;
|
|
close_me := FALSE;
|
|
WHILE NOT close_me DO BEGIN
|
|
dummy := TR_Wait(Triton_App,0);
|
|
REPEAT
|
|
trmsg := TR_GetMsg(Triton_App);
|
|
IF trmsg <> NIL THEN BEGIN
|
|
IF (trmsg^.trm_Project = Project) THEN BEGIN
|
|
CASE trmsg^.trm_Class OF
|
|
TRMS_CLOSEWINDOW : close_me := True;
|
|
TRMS_ERROR: WriteLN(TR_GetErrorString(trmsg^.trm_Data));
|
|
TRMS_ACTION :
|
|
BEGIN
|
|
CASE trmsg^.trm_ID OF
|
|
AddGadID : addfiles;
|
|
UpGadID : moveup;
|
|
DownGadID : movedown;
|
|
RemoveGadID : removelib;
|
|
RemAllGadID : removeall;
|
|
OkButton : BEGIN savethelist; close_me := True; END;
|
|
CancelButton : close_me := True;
|
|
END;
|
|
END;
|
|
ELSE
|
|
END;
|
|
END;
|
|
TR_ReplyMsg(trmsg);
|
|
END
|
|
UNTIL close_me OR (trmsg = NIL);
|
|
END;
|
|
END ELSE WriteLN(TR_GetErrorString(TR_GetLastError(Triton_App)));
|
|
END;
|
|
|
|
|
|
BEGIN { Main }
|
|
Triton_App := TR_CreateAppTags([
|
|
TRCA_Name,'Triton ListView Demo',
|
|
TRCA_LongName,'Demo of ListView in Triton, made in FPC Pascal',
|
|
TRCA_Version,'0.01',
|
|
TRCA_Info,'Uses tritonsupport',
|
|
TRCA_Release,'11',
|
|
TRCA_Date,'03-02-1998',
|
|
TAG_END]);
|
|
if Triton_App <> nil then begin
|
|
path := @pdummy;
|
|
StrpCopy(path,'sys:');
|
|
CreateList(mylist);
|
|
CreateList(llist);
|
|
readinlist;
|
|
do_demo;
|
|
CleanExit('',0);
|
|
END
|
|
ELSE CleanExit('Can''t create application',20);
|
|
END.
|