RAMSES | Systems Ecology | |
Examples (Less Simple)
Documentation
Reference
Downloads
Contact
MacMETH DM AuxLib SciLib EasyMW MW ISIS RMS Shell RMS Extras RASS |
||
Example: LessSimple Screen DumpSource CodeMODULE LessSimple; (*A.Fischlin, Mai 86*) (**************************************************************) (* Sample program module demonstrating the installation *) (* of menus, the window management, inclusive content *) (* restoration and some drawing within the window as *) (* supported by the "Dialog Machine" *) (**************************************************************) FROM DMMenus IMPORT Menu, Command, AccessStatus, Marking, InstallMenu, InstallCommand, InstallAliasChar, Separator, InstallSeparator, DisableCommand, EnableCommand, ChangeCommandText; FROM DMWindows IMPORT Window, WindowsDone, notExistingWindow, WindowKind, ScrollBars, CloseAttr, ZoomAttr, WFFixPoint, WindowFrame, CreateWindow, SetRestoreProc, DummyRestoreProc, AutoRestoreProc, GetWindowFrame; FROM DMWindIO IMPORT SelectForOutput, Circle, Pattern; FROM DMMaster IMPORT MouseHandlers, AddMouseHandler, AddSetupProc, RunDialogMachine; TYPE MachineStates = (myWindowDoesNotExist, myWindowExistsButNoAutomaticUpdating, myWindowExistsWithRestoreUpdating, myWindowExistsWithAutoRestoreUpdating); VAR myMenu: Menu; makeWindow, drawCircle, ordUpdating, autoUpdating: Command; myWindow: Window; wf: WindowFrame; curDMState: MachineStates; PROCEDURE CircleRestoreProc(u: Window); VAR radius: INTEGER; filled: BOOLEAN; dummyPat: Pattern; PROCEDURE Minimum(x,y: CARDINAL): CARDINAL; BEGIN (*Minimum*) IF x < y THEN RETURN x ELSE RETURN y END END Minimum; BEGIN (*CircleRestoreProc*) GetWindowFrame(u,wf); radius:= Minimum(wf.h DIV 3,wf.w DIV 3); filled:= FALSE; Circle(wf.w DIV 2,wf.h DIV 2,radius,filled,dummyPat) END CircleRestoreProc; PROCEDURE DrawCircle; BEGIN SelectForOutput(myWindow); CircleRestoreProc(myWindow); END DrawCircle; CONST clRPStr = "Install your own restore procedure"; auRPStr = "Install DM's automatic restoring mechanism (AutoRestoreProc)"; rmClRPStr = "Remove your own restore procedure"; rmAuRPStr = "Remove automatic restoring"; PROCEDURE SetDMState(s: MachineStates); BEGIN CASE s OF myWindowDoesNotExist: myWindow:= notExistingWindow; EnableCommand(myMenu, makeWindow); DisableCommand(myMenu, drawCircle); DisableCommand(myMenu, ordUpdating); DisableCommand(myMenu, autoUpdating); | myWindowExistsButNoAutomaticUpdating: DisableCommand(myMenu, makeWindow); EnableCommand(myMenu, drawCircle); EnableCommand(myMenu, ordUpdating); EnableCommand(myMenu, autoUpdating); SetRestoreProc(myWindow,DummyRestoreProc); ChangeCommandText(myMenu,ordUpdating,clRPStr); ChangeCommandText(myMenu,autoUpdating,auRPStr); | myWindowExistsWithRestoreUpdating: DisableCommand(myMenu, makeWindow); DisableCommand(myMenu, drawCircle); EnableCommand(myMenu, ordUpdating); DisableCommand(myMenu, autoUpdating); SetRestoreProc(myWindow,CircleRestoreProc); ChangeCommandText(myMenu,ordUpdating,rmClRPStr); ChangeCommandText(myMenu,autoUpdating,rmAuRPStr); | myWindowExistsWithAutoRestoreUpdating: DisableCommand(myMenu, makeWindow); EnableCommand(myMenu, drawCircle); DisableCommand(myMenu, ordUpdating); EnableCommand(myMenu, autoUpdating); SetRestoreProc(myWindow,AutoRestoreProc); ChangeCommandText(myMenu,ordUpdating,rmClRPStr); ChangeCommandText(myMenu,autoUpdating,rmAuRPStr); END(*CASE*); curDMState:= s; END SetDMState; PROCEDURE MakeWindow; BEGIN wf.x:= 50; wf.y:= 50; wf.w:= 200; wf.h:= 200; CreateWindow(myWindow, GrowOrShrinkOrDrag, WithoutScrollBars, WithCloseBox, WithoutZoomBox, bottomLeft, wf, "My Window", DummyRestoreProc); IF WindowsDone THEN SetDMState(myWindowExistsButNoAutomaticUpdating) END(*IF*); END MakeWindow; PROCEDURE EnableMenuIfWindowCloses(u: Window); BEGIN SetDMState(myWindowDoesNotExist); END EnableMenuIfWindowCloses; PROCEDURE ToggleUpdtInstallation; BEGIN IF curDMState = myWindowExistsButNoAutomaticUpdating THEN SetDMState(myWindowExistsWithRestoreUpdating); ELSIF curDMState = myWindowExistsWithRestoreUpdating THEN SetDMState(myWindowExistsButNoAutomaticUpdating); END(*IF*); END ToggleUpdtInstallation; PROCEDURE ToggleAutoUpdtInstallation; BEGIN IF curDMState = myWindowExistsButNoAutomaticUpdating THEN SetDMState(myWindowExistsWithAutoRestoreUpdating); ELSIF curDMState = myWindowExistsWithAutoRestoreUpdating THEN SetDMState(myWindowExistsButNoAutomaticUpdating); END(*IF*); END ToggleAutoUpdtInstallation; PROCEDURE SettingUp; (* Menus are now installed in the "Dialog Machine", since this procedure will be called automatically after you have activated it by calling DMMaster.RunDialogMachine. Any menu command texts etc. may now be changed the same way as during the ordinary running of the "Dialog Machine" *) BEGIN SetDMState(myWindowDoesNotExist); END SettingUp; PROCEDURE DMInitialization; (* This procedure is called in order to install menus etc. into the "Dialog Machine" before it is actually activated by calling procedure DMMaster.RunDialogMachine *) BEGIN InstallMenu(myMenu,"Control",enabled); InstallCommand(myMenu, makeWindow,"Open Window", MakeWindow, enabled, unchecked); InstallCommand(myMenu,drawCircle,"Draw Circle", DrawCircle, disabled,unchecked); InstallAliasChar(myMenu, drawCircle,"D"); InstallSeparator(myMenu,line); InstallCommand(myMenu,ordUpdating,clRPStr, ToggleUpdtInstallation,disabled,unchecked); InstallCommand(myMenu,autoUpdating, auRPStr, ToggleAutoUpdtInstallation,disabled,unchecked); AddSetupProc(SettingUp, 0); AddMouseHandler(CloseWindow,EnableMenuIfWindowCloses, 0); END DMInitialization; BEGIN DMInitialization; RunDialogMachine END LessSimple. |
||
|
||
RAMSES@env.ethz.ch | Last modified 1/12/22 | [Top of page] |