PROGRAM InputEventDemo
?
? Program demonstrates F-Basic's Event Trapping facilities. Two windows
? are opened, and each event in each window is reported to the user. The
? events possible in each window are a WINDOW_CLOSE event, an INKEY
? (keyboard strike) event, a MENU_SELECT event, a SINGLE_CLICK event, and
? finally, a DOUBLE_CLICK event.
?
? To use, perform an event (one of the above) in the desired window and
? watch for it to report the occurence of the event to you.
?
INTEGER TotalEvents,M,EventFlag,W1,W2
INTEGER M1,M2,M3,M4,M5,M6,M7
TEXT*12 STR1(4),STR2(4),STR3(3),STR4(9)
TEXT*12 TEXT1(3),TEXT2(4),TEXT3(3),TEXT4(5)

DATA (STR1,"MainMenu1","Option1","Option2","Option3")
DATA (STR2,"MainMenu2","OPTION 1","OPTION 2","OPTION 3")
DATA (STR3,"MainMenu3","Opt1","Opt2")
DATA (STR4,"MainMenu4","opt1","opt2","opt3")
DATA ("opt4","opt5","opt6","opt7","opt8")

DATA (TEXT1,"2ndMenu1","SOption1","SOption2")
DATA (TEXT2,"2ndMenu2","SOPTION 1","SOPTION 2","SOPTION 3")
DATA (TEXT3,"2ndMenu3","SOpt1","SOpt2")
DATA (TEXT4,"2ndMenu4","soption1","soption2","soption3","soption4")

SUBPROGRAM
   SUBROUTINE ReportSingleClick,ReportWindowClose,ReportMenu
   SUBROUTINE ReportInKey,ReportDoubleClick

PRINT "How Many Events Do You Want To Trap Before Quitting "
INPUT "Example: 25 " TotalEvents
M=0

W1=WINDOW #1(0,0,600,90,10,10,640,200,-1,-1,31,@"This Is Window1",-1)

&MENUWIDTH 100   ; ? Enlarge The Pixel Width Of MenuBar Entry (Default is 80)

M1=MENU #1 (@STR1,3)  ; ? Define And Display Menu For Window #1
M2=MENU #2 (@STR2,3)
M3=MENU #3 (@STR3,2)
M4=MENU #4 (@STR4,8)
MENU_ON

W2=WINDOW #2 (100,105,500,90,10,10,600,120,-1,-1,31,@"This Is Window 2",-1)

M5=MENU #1 (@TEXT1,2)  ; ? Define And Display Menu For Window #2
M6=MENU #2 (@TEXT2,3)
M7=MENU #3 (@TEXT3,2)
MENU_ON

ON WINDOW_CLOSE EVENT
   CALL ReportWindowClose(WINDOW_NUMBER)
   EventFlag=TRUE
END EVENT
ON SINGLE_CLICK EVENT
   CALL ReportSingleClick(WINDOW_NUMBER,MOUSE_X1,MOUSE_Y1,MOUSE_X2,MOUSE_Y2)
   EventFlag=TRUE
END EVENT
ON DOUBLE_CLICK EVENT
   CALL ReportDoubleClick(WINDOW_NUMBER,MOUSE_X1,MOUSE_Y1,MOUSE_X2,MOUSE_Y2)
   EventFlag=TRUE
END EVENT
ON MENU_SELECT EVENT
   CALL ReportMenu(WINDOW_NUMBER,MENU_NUMBER,ITEM_NUMBER)
   EventFlag=TRUE
END EVENT
ON INKEY EVENT
   CALL ReportInKey(WINDOW_NUMBER,KEY_NUMBER)
   EventFlag=TRUE
END EVENT

{CheckForEvent}
SLEEP
IF EventFlag THEN GOTO TryAgain
GOTO CheckForEvent

{TryAgain}
EventFlag=FALSE
INC(M)
IF M<TotalEvents THEN GOTO CheckForEvent

MENU_CLOSE
WINDOW_CLOSE #1
WINDOW_CLOSE #2
END

SUBROUTINE ReportWindowClose
PARAMETER
   INTEGER Window
IF Window=1 THEN
   WINDOW_OUTPUT #1
ELSE
   WINDOW_OUTPUT #2
ENDIF
PRINT "Window Close Event Reported For Window #",Window[1]
GRETURN
END

SUBROUTINE ReportSingleClick
PARAMETER
   INTEGER Window,Mx1,My1,Mx2,My2
IF Window=1 THEN
   WINDOW_OUTPUT #1
ELSE
   WINDOW_OUTPUT #2
ENDIF
PRINT "Mouse Single Click Event Reported For Window #",Window[1]
PRINT "Starting Coordinates (X,Y): ",Mx1[3],",",My1[3]
PRINT "Ending Coordinates (X,Y):   ",Mx2[3],",",My2[3]
GRETURN
END

SUBROUTINE ReportMenu
PARAMETER
   INTEGER Window,Menu,Item
IF Window=1 THEN
   WINDOW_OUTPUT #1
ELSE
   WINDOW_OUTPUT #2
ENDIF
PRINT "Menu Selection Event Reported For Window #",Window[1]
PRINT "Menu Title Number: ",Menu[1]
PRINT "Menu Item Number:  ",Item[1]
GRETURN
END

SUBROUTINE ReportInKey
PARAMETER
   INTEGER Window,KeyClick
PRINT "InKey Event Reported For Window #",Window[1]
PRINT "Character Struck Was: ",CHAR(KeyClick)
GRETURN
END


SUBROUTINE ReportDoubleClick
PARAMETER
   INTEGER Window,Mx1,My1,Mx2,My2
IF Window=1 THEN
   WINDOW_OUTPUT #1
ELSE
   WINDOW_OUTPUT #2
ENDIF
PRINT "Mouse Double Click Event Reported For Window #",Window[1]
PRINT "Starting Coordinates (X,Y): ",Mx1[3],",",My1[3]
PRINT "Ending Coordinates (X,Y):   ",Mx2[3],",",My2[3]
GRETURN
END

