package io.loli.sc.system;
import java.util.ArrayList;
import java.util.List;
import javax.swing.KeyStroke;
import com.tulskiy.keymaster.common.Provider;
interface SimpleHotKeyListener {
void onHotKey(int index);
}
class SimpleHotKeyProvider {
private static SimpleHotKeyProvider shp;
private SimpleHotKeyProvider() {
}
public static SimpleHotKeyProvider getInstance() {
if (shp == null) {
shp = new SimpleHotKeyProvider();
}
return shp;
}
private static Provider provider = Provider.getCurrentProvider(true);
private List<Integer[]> hotKeyList = new ArrayList<>();
public void registerHotKey(int index, int mask, int key) {
Integer[] hotKey = new Integer[] { index, mask, key };
hotKeyList.add(hotKey);
}
public void addHotKeyListener(SimpleHotKeyListener listener) {
hotKeyList.forEach(hotKey -> provider.register(
KeyStroke.getKeyStroke(hotKey[2], hotKey[1]), key -> {
listener.onHotKey(hotKey[0]);
}));
}
public void stop() {
provider.reset();
provider.stop();
}
}
public class SimpleHotKeyRegister implements HotKeyRegister{
private HotKeyTask task;
public SimpleHotKeyRegister(HotKeyTask task){
this.task = task;
}
private SimpleHotKeyProvider getHotKey(){
return SimpleHotKeyProvider.getInstance();
}
@Override
public boolean canRegister(int index, int mask, int key) {
return true;
}
@Override
public void register(int index, int mask, int key) {
getHotKey().registerHotKey(index, mask, key);
}
@Override
public void stop() {
getHotKey().stop();
}
@Override
public void startListen() {
getHotKey().addHotKeyListener(index->{
task.run(index);
});
}
}