123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- MODULE HotKeysCommands; (** AUTHOR "staubesv"; PURPOSE "Useful hot key commands"; *)
- (**
- * This modules contains some commands considered being useful for execution via hot keys.
- *
- * Overview/Usage:
- *
- * HotKeysCommands.SimulateMouse MouseX|MouseY|MouseButtons|MouseWheel value ~ generates mouse messages
- *
- * HotKeysCommands.EnterCommand ~ opens a window that queries a command string that is executed on enter
- * HotKeysCommands.ClearLog ~ clears the kernel log
- *
- *)
- IMPORT
- SYSTEM,
- KernelLog, Modules, Commands, Streams, Strings,
- Inputs, KernelLogger,
- WMWindowManager, WMComponents, WMEditors, WMGraphics;
- CONST
- (* Command window constants *)
- DefaultWidth = 400; DefaultHeight = 40;
- DefaultTextColor = WMGraphics.White;
- DefaultTextBgColor = 00008080H;
- (* Mouse simulator constants *)
- MouseX = "MouseX";
- MouseY = "MouseY";
- MouseButtons = "MouseButtons";
- MouseWheel = "MouseWheel";
- TYPE
- (* Window that queries a command string and executes it when pressing enter. Pressing the escape key closes the window. The
- * window is also closed when it looses the focus *)
- Window = OBJECT (WMComponents.FormWindow)
- VAR
- editor : WMEditors.Editor;
- PROCEDURE HandleEnter(sender, data : ANY);
- VAR commandString : ARRAY 4096 OF CHAR; msg : ARRAY 128 OF CHAR; res : LONGINT;
- BEGIN
- editor.GetAsString(commandString);
- IF commandString # "" THEN
- Commands.Call(commandString, {}, res, msg);
- IF res # Commands.Ok THEN
- KernelLog.String("HotKeysCommands: Failed to execute '"); KernelLog.String(commandString);
- KernelLog.String("', res: "); KernelLog.Int(res, 0);
- KernelLog.String(" ("); KernelLog.String(msg); KernelLog.String(")");
- KernelLog.Ln;
- END;
- END;
- Close;
- END HandleEnter;
- PROCEDURE HandleEscape(sender, data : ANY);
- BEGIN
- Close;
- END HandleEscape;
- PROCEDURE FocusLost*;
- BEGIN
- Close;
- END FocusLost;
- PROCEDURE Close*;
- BEGIN
- Close^; window := NIL;
- END Close;
- PROCEDURE CreateForm() : WMComponents.VisualComponent;
- BEGIN
- NEW(editor);
- editor.alignment.Set(WMComponents.AlignClient);
- editor.onEnter.Add(HandleEnter);
- editor.onEscape.Add(HandleEscape);
- editor.allowScrollbars.Set(FALSE);
- editor.multiLine.Set(FALSE);
- editor.tv.textAlignV.Set(WMGraphics.AlignCenter);
- editor.tv.defaultTextColor.Set(DefaultTextColor);
- editor.tv.defaultTextBgColor.Set(0);
- editor.fillColor.Set(DefaultTextBgColor);
- RETURN editor;
- END CreateForm;
- PROCEDURE &New*;
- VAR manager : WMWindowManager.WindowManager;
- BEGIN
- Init(DefaultWidth, DefaultHeight, TRUE);
- SetContent(CreateForm());
- SetTitle(Strings.NewString("Enter command: "));
- WMWindowManager.ExtAddWindow(SELF, 200, 100, {});
- manager := WMWindowManager.GetDefaultManager();
- manager.SetFocus(SELF);
- editor.SetFocus;
- END New;
- END Window;
- VAR
- window : Window;
- (** Generate mouse message *)
- PROCEDURE SimulateMouse*(context : Commands.Context); (** MouseX|MouseY|MouseButtons|MouseWheel value ~ *)
- VAR
- string : ARRAY 32 OF CHAR; value : LONGINT;
- msg : Inputs.MouseMsg;
- doHandle : BOOLEAN;
- BEGIN
- IF context.arg.GetString(string) THEN
- IF context.arg.GetInteger(value, FALSE) THEN
- doHandle := TRUE;
- IF Strings.Match(string, MouseX) THEN msg.dx := value;
- ELSIF Strings.Match(string, MouseY) THEN msg.dy := value;
- ELSIF Strings.Match(string, MouseWheel) THEN msg.dz := value;
- ELSIF Strings.Match(string, MouseButtons) THEN msg.keys := SYSTEM.VAL(SET, value);
- ELSE
- doHandle := FALSE;
- END;
- IF doHandle THEN Inputs.mouse.Handle(msg); END;
- END;
- END;
- END SimulateMouse;
- (** Opens a window that queries a command string and executes it on enter *)
- PROCEDURE EnterCommand*; (** ~ *)
- BEGIN {EXCLUSIVE}
- IF window = NIL THEN NEW(window); END;
- END EnterCommand;
- (** Clear kernel log *)
- PROCEDURE ClearLog*; (** ~ *)
- BEGIN
- KernelLogger.kernelLog.AcquireWrite;
- KernelLogger.kernelLog.Delete(0, KernelLogger.kernelLog.GetLength());
- KernelLogger.kernelLog.ReleaseWrite;
- END ClearLog;
- PROCEDURE Cleanup;
- BEGIN {EXCLUSIVE}
- IF window # NIL THEN window.Close; window := NIL; END;
- END Cleanup;
- BEGIN
- Modules.InstallTermHandler(Cleanup);
- END HotKeysCommands.
- HotKeysCommands.ClearLog ~
- HotKeysCommands.EnterCommand ~
- HotKeysCommands.SimulateMouse MouseWheel -3 ~
- SystemTools.Free HotKeysCommands ~
|