packages feed

language-Modula2-0.1: examples/Modula-2_Libraries/PMOS/sources/demo/uitest.mod

MODULE UITest;

	(****************************************************************)
	(*								*)
	(*		Test of module UserInterface			*)
	(*								*)
	(*	Programmer:	M. Walsh				*)
	(*	Modifications:	P. Moylan				*)
	(*	Last edited:	26 July 1994				*)
	(*	Status:		Working					*)
	(*								*)
	(****************************************************************)

FROM Conversions IMPORT
    (* proc *)	CardinalToString;

FROM TaskControl IMPORT
    (* proc *)	CreateTask;

FROM Timer IMPORT
    (* proc *)	Sleep;

FROM SoundEffects IMPORT Beep;

FROM Mouse IMPORT
    (* type *)	Buttons, ButtonSet,
    (* proc *)	GetTextMouseStatus, GetTextMousePosition,
		ShowMouseCursor, HideMouseCursor;

FROM Windows IMPORT
    (* type *)	Window,Colour,FrameType,DividerType,
		MaxRowNumber,MaxColumnNumber, ColumnRange,RowRange,
    (* proc *)	OpenWindow, WriteString, SetCursor;

FROM UserInterface IMPORT
    (* type *)	UIWindow, Capability, CapabilitySet,
    (* proc *)	AllowMouseControl, AddActiveRegion;

CONST
    LeftOnly = ButtonSet {LeftButton};
    RightOnly = ButtonSet {RightButton};

(************************************************************************)

PROCEDURE BEEP (w: Window;  r: RowRange;  c: ColumnRange);

    BEGIN
	Beep;
    END BEEP;

(************************************************************************)

PROCEDURE BEEPBEEP (w: Window;  r: RowRange;  c: ColumnRange);

    BEGIN
	Beep;  Beep;
    END BEEPBEEP;

(************************************************************************)

PROCEDURE Spawned;

    VAR w: Window;  Test: UIWindow;

    BEGIN
	OpenWindow (w,white,black,1,12,1,18,doubleframe,nodivider);
	Test := AllowMouseControl (w, "Spawned",
					CapabilitySet{wmove, whide, wshow});
	AddActiveRegion(Test,1,10,1,16,LeftOnly,BEEP);
	AddActiveRegion(Test,1,10,1,16,RightOnly,BEEPBEEP);
	LOOP
	    WriteString(w,'Testing and it appears to work - Amazing');
	    Sleep(100);
	END (*LOOP*);
    END Spawned;

(************************************************************************)

PROCEDURE Spawned2;

    VAR w: Window;  Test: UIWindow;

    BEGIN
	OpenWindow (w,white,black,14,23,1,18,doubleframe,nodivider);
	Test := AllowMouseControl (w, "Spawned as well",
				CapabilitySet {wmove, whide, wshow});
	AddActiveRegion(Test,1,8,1,16,LeftOnly,BEEP);
	LOOP
	    WriteString (w,'Testing and also working ---------- !!!!!!!!!');
	    Sleep(100);
	END (*LOOP*);
    END Spawned2;

(************************************************************************)

PROCEDURE MouseWindow;

    VAR w: Window;  MousePos: UIWindow;
	X: ColumnRange;  Y: RowRange;  LastX, LastY: CARDINAL;
	string: ARRAY [0..2] OF CHAR;

    BEGIN
	OpenWindow (w,black,white,15,18,20,27,doubleframe,nodivider);
	MousePos := AllowMouseControl (w, "MousePos",
				CapabilitySet {wmove, whide, wshow});
	SetCursor (w, 1, 2);  WriteString (w, "X");
	SetCursor (w, 2, 2);  WriteString (w, "Y");
	AddActiveRegion(MousePos,1,2,1,6,LeftOnly,BEEP);
	LastX := MAX(ColumnRange) + 1;
	LOOP
	    GetTextMousePosition (X, Y);
	    IF (LastX <> X) OR (LastY <> Y) THEN
		HideMouseCursor;
		CardinalToString (X, string, 3);
		SetCursor (w, 1, 3);  WriteString (w, string);
		CardinalToString (Y, string, 3);
		SetCursor (w, 2, 3);  WriteString (w, string);
		ShowMouseCursor;
		LastX := X;
		LastY := Y;
	    END (*IF*);
	    Sleep(50);
	END (*LOOP*);
    END MouseWindow;

(************************************************************************)

PROCEDURE ScrollWindowtask;

    VAR w: Window;  LoopCount:CARDINAL;  ScrollWindow: UIWindow;

    BEGIN
	OpenWindow (w,intensewhite,red,2,12,40,75,doubleframe,nodivider);
	ScrollWindow := AllowMouseControl (w, "ScrollWindow",
				CapabilitySet {wmove, whide, wshow});
	AddActiveRegion(ScrollWindow,1,9,1,34,LeftOnly,BEEP);
	Sleep(100);
	LOOP
	    FOR LoopCount := 1 TO 10 DO
		WriteString(w,"Scrolling Text Is Fast. Faster than you can read !");
	    END (*FOR*);
	    Sleep(100);
	END (*LOOP*);

    END ScrollWindowtask;

(************************************************************************)

PROCEDURE ScrollWindow2task;

    VAR LoopCount:CARDINAL;  ScrollWindow2: UIWindow;  w: Window;

    BEGIN
	OpenWindow (w,blue,black,14,20,40,75,doubleframe,nodivider);
	ScrollWindow2 := AllowMouseControl (w, "ScrollWindow Too",
				CapabilitySet {wmove, whide, wshow});
	AddActiveRegion(ScrollWindow2,1,5,1,34,LeftOnly,BEEP);
	Sleep(100);
	LOOP
	    FOR LoopCount := 1 TO 10 DO
		WriteString(w,"Scrolling Text Is Fast. Faster than you can read !");
	    END (*FOR*);
	    Sleep(100);
	END (*LOOP*);

    END ScrollWindow2task;

(************************************************************************)
(*				MAIN PROGRAM				*)
(************************************************************************)

VAR buttons: ButtonSet;  X:ColumnRange;  Y:RowRange;

BEGIN
    CreateTask(MouseWindow,5,"Mouse");
    CreateTask(ScrollWindowtask,2,"SW");
    CreateTask(ScrollWindow2task,3,"SW2");
    CreateTask(Spawned,2,"Spawned");
    CreateTask(Spawned2,2,"Spawned2");
    REPEAT
        Sleep(40);
        GetTextMouseStatus(buttons, X, Y);
    UNTIL ButtonSet{LeftButton,RightButton} <= buttons;

END UITest.