essential-actions

Clone or download

[hotkeyaction] - Clean up, refactored to use new Action API

Modified Files

.idea/
.idea/
HotkeyAction.iml
*.iml
target/
target/
.settings/
.settings/
.project
.project
.factorypath
.factorypath
.classpath
.classpath
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>hotkeyaction</artifactId>
<artifactId>hotkeyaction</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<properties>
<properties>
<ActionAPIVersion>1.0.0-SNAPSHOT</ActionAPIVersion>
<ActionAPIVersion>1.0.0-SNAPSHOT</ActionAPIVersion>
<UtilVersion>1.0.0-SNAPSHOT</UtilVersion>
<UtilVersion>1.0.0-SNAPSHOT</UtilVersion>
<JavaFXVersion>16</JavaFXVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<IkonliVersion>11.5.0</IkonliVersion>
<IkonliFA5PackVersion>11.5.0</IkonliFA5PackVersion>
</properties>
</properties>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${UtilVersion}</version>
<version>${UtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${ActionAPIVersion}</version>
<version>${ActionAPIVersion}</version>
</dependency>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-fontawesome5-pack</artifactId>
<version>${IkonliFA5PackVersion}</version>
</dependency>
<dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-javafx</artifactId>
<version>${IkonliVersion}</version>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
package com.stream_pi.hotkeyaction;
package com.stream_pi.hotkeyaction;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import javafx.application.Platform;
import javafx.application.Platform;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCode;
import javafx.scene.robot.Robot;
import javafx.scene.robot.Robot;
import java.util.ArrayList;
import java.util.ArrayList;
import static javafx.scene.input.KeyCode.*;
import static javafx.scene.input.KeyCode.*;
public class HotkeyAction extends NormalAction {
public class HotkeyAction extends NormalAction {
public HotkeyAction()
public HotkeyAction()
{
{
setName("Hotkey");
setName("Hotkey");
setCategory("Essentials");
setCategory("Essentials");
setAuthor("rnayabed");
setAuthor("rnayabed");
setServerButtonGraphic("far-keyboard");
setServerButtonGraphic("far-keyboard");
setHelpLink("https://github.com/stream-pi/essentialactions/blob/master/hotkeyaction/README.md");
setHelpLink("https://github.com/stream-pi/essentialactions/blob/master/hotkeyaction/README.md");
setVersion(new Version(2,0,0));
setVersion(new Version(2,0,1));
}
}
@Override
@Override
public void initProperties() throws Exception {
public void initProperties()
{
Property keyCombination = new Property("key_comb", Type.STRING);
Property keyCombination = new Property("key_comb", Type.STRING);
keyCombination.setDisplayName("Key combination (Separate using comma)");
keyCombination.setDisplayName("Key combination (Separate using comma)");
addClientProperties(keyCombination);
addClientProperties(keyCombination);
}
}
private Robot robot;
private Robot robot;
@Override
@Override
public void initAction() throws Exception {
public void initAction()
{
Platform.runLater(()->robot = new Robot());
Platform.runLater(()->robot = new Robot());
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws MinorException
{
{
Property keyCombination = getClientProperties().getSingleProperty("key_comb");
Property keyCombination = getClientProperties().getSingleProperty("key_comb");
if(keyCombination.getStringValue().isBlank())
if(keyCombination.getStringValue().isBlank())
{
{
throw new MinorException("No key specified");
throw new MinorException("No key specified");
}
}
press(keyCombination.getStringValue()
try
.toUpperCase()
{
.replace("?","SHIFT,/")
press(keyCombination.getStringValue()
.replace("|","SHIFT,\\")
.toUpperCase()
.split(",")
.replace("?","SHIFT,/")
);
.replace("|","SHIFT,\\")
.split(",")
);
}
catch (InterruptedException e)
{
e.printStackTrace();
throw new MinorException("Interrupted while press called. \n"+e.getMessage());
}
}
}
public void press(String[] characters) throws InterruptedException {
public void press(String[] characters) throws InterruptedException
{
ArrayList<KeyCode> pressedChars = new ArrayList<>();
ArrayList<KeyCode> pressedChars = new ArrayList<>();
try{
try{
for (String s : characters) {
for (String s : characters) {
KeyCode vkValue = getKeyCodeValue(s.trim());
KeyCode vkValue = getKeyCodeValue(s.trim());
press(vkValue);
press(vkValue);
Thread.sleep(50);
Thread.sleep(50);
pressedChars.add(vkValue);
pressedChars.add(vkValue);
}
}
}
}
finally
finally
{
{
releaseCharacters(pressedChars);
releaseCharacters(pressedChars);
}
}
}
}
private void releaseCharacters(ArrayList<KeyCode> chars) throws InterruptedException
private void releaseCharacters(ArrayList<KeyCode> chars) throws InterruptedException
{
{
for(KeyCode c : chars)
for(KeyCode c : chars)
{
{
release(c);
release(c);
Thread.sleep(50);
Thread.sleep(50);
}
}
}
}
public KeyCode getKeyCodeValue(String character) throws IllegalArgumentException
public KeyCode getKeyCodeValue(String character) throws IllegalArgumentException
{
{
switch (character) {
switch (character) {
case "A": return A;
case "A": return A;
case "B": return B;
case "B": return B;
case "C": return C;
case "C": return C;
case "D": return D;
case "D": return D;
case "E": return E;
case "E": return E;
case "F": return F;
case "F": return F;
case "G": return G;
case "G": return G;
case "H": return H;
case "H": return H;
case "I": return I;
case "I": return I;
case "J": return J;
case "J": return J;
case "K": return K;
case "K": return K;
case "L": return L;
case "L": return L;
case "M": return M;
case "M": return M;
case "N": return N;
case "N": return N;
case "O": return O;
case "O": return O;
case "P": return P;
case "P": return P;
case "Q": return Q;
case "Q": return Q;
case "R": return R;
case "R": return R;
case "S": return S;
case "S": return S;
case "T": return T;
case "T": return T;
case "U": return U;
case "U": return U;
case "V": return V;
case "V": return V;
case "W": return W;
case "W": return W;
case "X": return X;
case "X": return X;
case "Y": return Y;
case "Y": return Y;
case "Z": return Z;
case "Z": return Z;
case "`": return BACK_QUOTE;
case "`":
case "~":
return BACK_QUOTE;
case "0": return DIGIT0;
case "0": return DIGIT0;
case "1": return DIGIT1;
case "1": return DIGIT1;
case "2": return DIGIT2;
case "2": return DIGIT2;
case "3": return DIGIT3;
case "3": return DIGIT3;
case "4": return DIGIT4;
case "4": return DIGIT4;
case "5": return DIGIT5;
case "5": return DIGIT5;
case "6": return DIGIT6;
case "6": return DIGIT6;
case "7": return DIGIT7;
case "7": return DIGIT7;
case "8": return DIGIT8;
case "8": return DIGIT8;
case "9": return DIGIT9;
case "9": return DIGIT9;
case "-": return MINUS;
case "-": return MINUS;
case "=": return EQUALS;
case "=": return EQUALS;
case "~": return BACK_QUOTE;
case "!": return EXCLAMATION_MARK;
case "!": return EXCLAMATION_MARK;
case "@": return AT;
case "@": return AT;
case "#": return NUMBER_SIGN;
case "#": return NUMBER_SIGN;
case "$": return DOLLAR;
case "$": return DOLLAR;
case "^": return CIRCUMFLEX;
case "^": return CIRCUMFLEX;
case "&": return AMPERSAND;
case "&": return AMPERSAND;
case "*": return ASTERISK;
case "*": return ASTERISK;
case "(": return LEFT_PARENTHESIS;
case "(": return LEFT_PARENTHESIS;
case ")": return RIGHT_PARENTHESIS;
case ")": return RIGHT_PARENTHESIS;
case "_": return UNDERSCORE;
case "_": return UNDERSCORE;
case "+": return PLUS;
case "+": return PLUS;
case "TAB": return TAB;
case "TAB": return TAB;
case "[": return OPEN_BRACKET;
case "[": case "{" : return OPEN_BRACKET;
case "]": return CLOSE_BRACKET;
case "]": case "}" : return CLOSE_BRACKET;
case "{": return OPEN_BRACKET;
case "}": return CLOSE_BRACKET;
case ";": return SEMICOLON;
case ";": return SEMICOLON;
case ":": return COLON;
case ":": return COLON;
case "\\": return BACK_SLASH;
case "\\": return BACK_SLASH;
case "\"": return QUOTE;
case "\"": return QUOTE;
case ",": return COMMA;
case ",": return COMMA;
case "<": return LESS;
case "<": return LESS;
case ".": return PERIOD;
case ".": return PERIOD;
case ">": return GREATER;
case ">": return GREATER;
case "/": return SLASH;
case "/": return SLASH;
case "SPACE": return SPACE;
case "SPACE": return SPACE;
case "WIN":
case "WIN":
case "WINDOWS":
case "WINDOWS":
case "SUPER":
case "SUPER":
case "COMMAND":
case "COMMAND":
return WINDOWS;
return WINDOWS;
case "META":
case "META":
return META;
return META;
case "SHIFT":
case "SHIFT":
return SHIFT;
return SHIFT;
case "ALT": return ALT;
case "ALT": return ALT;
case "F1": return F1;
case "F1": return F1;
case "F2": return F2;
case "F2": return F2;
case "F3": return F3;
case "F3": return F3;
case "F4": return F4;
case "F4": return F4;
case "F5": return F5;
case "F5": return F5;
case "F6": return F6;
case "F6": return F6;
case "F7": return F7;
case "F7": return F7;
case "F8": return F8;
case "F8": return F8;
case "F9": return F9;
case "F9": return F9;
case "F10": return F10;
case "F10": return F10;
case "F11": return F11;
case "F11": return F11;
case "F12": return F12;
case "F12": return F12;
case "F13": return F13;
case "F13": return F13;
case "F14": return F14;
case "F14": return F14;
case "F15": return F15;
case "F15": return F15;
case "F16": return F16;
case "F16": return F16;
case "F17": return F17;
case "F17": return F17;
case "F18": return F18;
case "F18": return F18;
case "F19": return F19;
case "F19": return F19;
case "F20": return F20;
case "F20": return F20;
case "F21": return F21;
case "F21": return F21;
case "F22": return F22;
case "F22": return F22;
case "F23": return F23;
case "F23": return F23;
case "F24": return F24;
case "F24": return F24;
case "NUMPAD 0":
case "NUMPAD 0":
case "NUM 0":
case "NUM 0":
case "N0":
case "N0":
return NUMPAD0;
return NUMPAD0;
case "NUMPAD 1":
case "NUMPAD 1":
case "NUM 1":
case "NUM 1":
case "N1":
case "N1":
return NUMPAD1;
return NUMPAD1;
case "NUMPAD 2":
case "NUMPAD 2":
case "NUM 2":
case "NUM 2":
case "N2":
case "N2":
return NUMPAD2;
return NUMPAD2;
case "NUMPAD 3":
case "NUMPAD 3":
case "NUM 3":
case "NUM 3":
case "N3":
case "N3":
return NUMPAD3;
return NUMPAD3;
case "NUMPAD 4":
case "NUMPAD 4":
case "NUM 4":
case "NUM 4":
case "N4":
case "N4":
return NUMPAD4;
return NUMPAD4;
case "NUMPAD 5":
case "NUMPAD 5":
case "NUM 5":
case "NUM 5":
case "N5":
case "N5":
return NUMPAD5;
return NUMPAD5;
case "NUMPAD 6":
case "NUMPAD 6":
case "NUM 6":
case "NUM 6":
case "N6":
case "N6":
return NUMPAD6;
return NUMPAD6;
case "NUMPAD 7":
case "NUMPAD 7":
case "NUM 7":
case "NUM 7":
case "N7":
case "N7":
return NUMPAD7;
return NUMPAD7;
case "NUMPAD 8":
case "NUMPAD 8":
case "NUM 8":
case "NUM 8":
case "N8":
case "N8":
return NUMPAD8;
return NUMPAD8;
case "NUMPAD 9":
case "NUMPAD 9":
case "NUM 9":
case "NUM 9":
case "N9":
case "N9":
return NUMPAD9;
return NUMPAD9;
case "HOME": return HOME;
case "HOME": return HOME;
case "INSERT": return INSERT;
case "INSERT": return INSERT;
case "PAGE UP": return PAGE_UP;
case "PAGE UP": return PAGE_UP;
case "PAGE DOWN": return PAGE_DOWN;
case "PAGE DOWN": return PAGE_DOWN;
case "END": return END;
case "END": return END;
case "ENTER": return ENTER;
case "ENTER": return ENTER;
case "DELETE": return DELETE;
case "DELETE": return DELETE;
case "SCROLL LOCK": return SCROLL_LOCK;
case "SCROLL LOCK": return SCROLL_LOCK;
case "PRINT SCREEN": return PRINTSCREEN;
case "PRINT SCREEN": return PRINTSCREEN;
case "PAUSE": return PAUSE;
case "PAUSE": return PAUSE;
case "NUM LOCK": return NUM_LOCK;
case "NUM LOCK": return NUM_LOCK;
case "CONTROL": return CONTROL;
case "CONTROL": return CONTROL;
case "CAPS LOCK": return CAPS;
case "CAPS LOCK": return CAPS;
case "ESCAPE":
case "ESCAPE":
case "ESC":
case "ESC":
return ESCAPE;
return ESCAPE;
case "NUM UP": return KP_UP;
case "NUM UP": return KP_UP;
case "UP": return UP;
case "UP": return UP;
case "NUM LEFT": return KP_LEFT;
case "NUM LEFT": return KP_LEFT;
case "LEFT": return LEFT;
case "LEFT": return LEFT;
case "ALT GRAPH": return ALT_GRAPH;
case "ALT GRAPH": return ALT_GRAPH;
case "NUM RIGHT": return KP_RIGHT;
case "NUM RIGHT": return KP_RIGHT;
case "RIGHT": return RIGHT;
case "RIGHT": return RIGHT;
case "NUM DOWN": return KP_DOWN;
case "NUM DOWN": return KP_DOWN;
case "DOWN": return DOWN;
case "DOWN": return DOWN;
default:
default:
throw new IllegalArgumentException("Cannot press character " + character);
throw new IllegalArgumentException("Cannot press character " + character);
}
}
}
}
private void press(KeyCode keyCode)
private void press(KeyCode keyCode)
{
{
Platform.runLater(()->robot.keyPress(keyCode));
Platform.runLater(()->robot.keyPress(keyCode));
}
}
private void release(KeyCode keyCode)
private void release(KeyCode keyCode)
{
{
Platform.runLater(()->robot.keyRelease(keyCode));
Platform.runLater(()->robot.keyRelease(keyCode));
}
}
@Override
public void onShutDown() throws Exception {
// TODO Auto-generated method stub
}
}
}