aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/Lib/com/AutoRepeatButton.m
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/Lib/com/AutoRepeatButton.m')
-rw-r--r--Src/Wasabi/Lib/com/AutoRepeatButton.m100
1 files changed, 100 insertions, 0 deletions
diff --git a/Src/Wasabi/Lib/com/AutoRepeatButton.m b/Src/Wasabi/Lib/com/AutoRepeatButton.m
new file mode 100644
index 00000000..155ca387
--- /dev/null
+++ b/Src/Wasabi/Lib/com/AutoRepeatButton.m
@@ -0,0 +1,100 @@
+//--------------------------------------------------------------------------------------------------
+// AutoRepeatButton.m Orginal Code By Will Fisher, Concept By Eric Moore, Rewritten By Will Fisher
+//
+// Use like this:
+// #include </lib/AutoRepeatButton.m>
+// Global AutoRepeatButton MyButton, MyOtherButton;
+//
+// Fill in the buttons function into MyButton.OnLeftClick() as normal.
+//
+// Use AutoRepeat_ClickType to find the type of call to MyButton.onLeftClick() where
+// AutoRepeat_ClickType==1 is the first call to onLeftClick
+// AutoRepeat_ClickType==2 is a subsequent call to onLeftClick
+// AutoRepeat_ClickType==0 is an erronious call to onLeftClick, you should usually ignore
+// MyButton.onLeftClick() in this case
+// See other functions below:
+//--------------------------------------------------------------------------------------------------
+
+Function AutoRepeat_Load(); // ALWAYS call this in System.OnScriptLoaded()
+Function AutoRepeat_Unload(); // ALWAYS call this in System.OnScriptUnloading()
+Function AutoRepeat_Stop(); // stop the current button from autorepeating
+
+Function Button AutoRepeat_GetCurrentButton(); /* returns the currently autorepeating button,
+ returns NULL if no button is autorepeating */
+
+Function AutoRepeat_SetInitalDelay(int millis); /* set this for the first delay when the button is
+ pressed, defaults to 800ms (no need to use this
+ unless other delay is required) */
+
+Function AutoRepeat_SetRepeatDelay(int millis); /* set this for the subsequent delay, defaults to
+ 80ms (no need to use this unless other delay is
+ required) */
+
+Function Int AutoRepeat_GetInitalDelay(); // get the first delay length in millisecs
+Function Int AutoRepeat_GetRepeatDelay(); // get the subsequent delay in millisecs
+
+Class Button AutoRepeatButton;
+
+Global Timer _autorepeatTimer;
+Global Int _InitialDelay;
+Global Int _RepeatDelay;
+Global Int AutoRepeat_ClickType;
+Global Button _Latched;
+
+AutoRepeatButton.onLeftButtonDown(int x, int y) {
+ _Latched = AutoRepeatButton;
+ AutoRepeat_ClickType = 1; // first click
+ AutoRepeatButton.leftClick();
+ AutoRepeat_ClickType = 0; // no click
+ _autorepeatTimer.setDelay(_InitialDelay);
+ _autorepeatTimer.start();
+}
+
+AutoRepeatButton.onLeftButtonUp(int x, int y) {
+ _AutoRepeatTimer.Stop();
+ _Latched = NULL;
+}
+
+_AutoRepeatTimer.onTimer() {
+ if(_autorepeatTimer.getDelay() != _RepeatDelay) _autorepeatTimer.setDelay(_RepeatDelay);
+ AutoRepeat_ClickType = 2; // AutoRepeat
+ _Latched.LeftClick();
+ AutoRepeat_ClickType = 0; // no click
+}
+
+AutoRepeat_Load() {
+ _autoRepeatTimer = new Timer;
+ _InitialDelay = 800;
+ _RepeatDelay = 80;
+ AutoRepeat_ClickType = 0;
+}
+
+AutoRepeat_Unload() {
+ delete _autoRepeatTimer;
+}
+
+AutoRepeat_SetInitalDelay(int millis) {
+ _InitialDelay = millis;
+}
+
+
+AutoRepeat_SetRepeatDelay(int millis) {
+ _RepeatDelay = millis;
+}
+
+AutoRepeat_GetInitalDelay() {
+ return _InitialDelay;
+}
+
+AutoRepeat_GetRepeatDelay() {
+ return _repeatDelay;
+}
+
+AutoRepeat_Stop() {
+ _autorepeatTimer.stop();
+ _Latched = NULL;
+}
+
+AutoRepeat_GetCurrentButton() {
+ return _Latched;
+}