fpc/packages/amunits/examples/otherlibs/linklib.pas
marco 88851f7852 * amunits moved
git-svn-id: trunk@10043 -
2008-01-27 13:16:04 +00:00

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.