From 3805baf986a7ea9f4d5d054d72b0af8f0a5c4ff0 Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Sun, 13 Feb 2011 13:08:55 +0000 Subject: [PATCH] Macro systeem veralgemeniseerd naar Sequence. Sequence maakt het mogelijk om de automatische toegevoegde events bij macro's te omzeilen. Hier wordt gebruik van gemaakt bij de Continuous task, want deze moet alle vrijheid hebben. Nu is in de vele shortcut-sequence add functies nog geen beveiliging om oneindige Continuous tasks uit te voeren. De verantwoordelijkheid hiervoor ligt bij de gebruiker of een toekomstige controle. --- java/src/pm/Application.java | 6 ++-- java/src/pm/Device.java | 30 ++++++++++++------- java/src/pm/Macro.java | 20 ++++--------- .../application/iTunes/iTunesApplication.java | 2 +- .../javainput/rumblepad/RumblepadDevice.java | 6 ++-- java/src/pm/macro/Active.java | 16 +++++----- java/src/pm/macro/event/Sequence.java | 20 +++++++++++++ .../SequenceListener.java} | 29 +++++++++--------- java/src/pm/task/Continuous.java | 6 ++++ java/src/pm/task/TaskListener.java | 4 ++- 10 files changed, 86 insertions(+), 53 deletions(-) create mode 100644 java/src/pm/macro/event/Sequence.java rename java/src/pm/macro/{MacroListener.java => event/SequenceListener.java} (52%) diff --git a/java/src/pm/Application.java b/java/src/pm/Application.java index 467bbf4..7d7f604 100644 --- a/java/src/pm/Application.java +++ b/java/src/pm/Application.java @@ -11,7 +11,7 @@ public abstract class Application extends TaskListener { initialise(); super.run(); } catch (ApplicationInitialiseException e) { - e.printStackTrace(); + e.printStackTrace(); // Todo: dit "over" de thread heengooien / loggen? } } @@ -25,10 +25,10 @@ public abstract class Application extends TaskListener { Action action = task.getAction(); if (task instanceof Continuous) { Continuous continuous = (Continuous) task; - int sleep = continuous.getSleep(); do { action(action); - sleep(sleep); + continuous.nextIteration(); + sleep(continuous.getSleep()); } while (run && !continuous.getStop()); continuous.reset(); } else { diff --git a/java/src/pm/Device.java b/java/src/pm/Device.java index d2dcebb..0c84f5a 100644 --- a/java/src/pm/Device.java +++ b/java/src/pm/Device.java @@ -3,32 +3,37 @@ package pm; import pm.exception.device.DeviceExitException; import pm.exception.device.DeviceInitialiseException; import pm.macro.Event; -import pm.macro.MacroListener; import pm.macro.event.Hold; import pm.macro.event.Press; import pm.macro.event.Release; +import pm.macro.event.Sequence; +import pm.macro.event.SequenceListener; import pm.task.Continuous; import pm.task.Stopper; public abstract class Device { - protected MacroListener macroListener; + protected SequenceListener sequenceListener; public Device() { - macroListener = new MacroListener(); + sequenceListener = new SequenceListener(); } /* Register macro's */ - protected void add(Macro macro, Task task) { - macroListener.add(macro, task); + protected void add(Sequence sequence, Task task) { + sequenceListener.add(sequence, task); + } + + protected void add(Press press, Task task) { + add(new Macro(press), task); } protected void add(Event event, Task task) { - add(new Macro(event), task); + add(new Sequence(event), task); } - protected void add(Macro startMacro, Macro stopMacro, Continuous continuous) { - add(startMacro, continuous); - add(stopMacro, new Stopper(continuous)); + protected void add(Sequence startSequence, Sequence stopSequence, Continuous continuous) { + add(startSequence, continuous); + add(stopSequence, new Stopper(continuous)); } protected void add(Event startEvent, Event stopEvent, Continuous continuous) { @@ -36,6 +41,11 @@ public abstract class Device { add(stopEvent, new Stopper(continuous)); } + protected void add(Press startPress, Press stopPress, Continuous continuous) { + add(new Macro(startPress), continuous); + add(new Macro(stopPress), new Stopper(continuous)); + } + protected void add(Hold hold, Continuous continuous) { Button button = hold.getButton(); add(new Press(button), new Release(button), continuous); @@ -43,7 +53,7 @@ public abstract class Device { /* Recognize events */ protected void add(Event event) { - macroListener.add(event); + sequenceListener.add(event); } /* Device default methods */ diff --git a/java/src/pm/Macro.java b/java/src/pm/Macro.java index 9b79d7e..b4e5e06 100644 --- a/java/src/pm/Macro.java +++ b/java/src/pm/Macro.java @@ -5,15 +5,15 @@ import java.util.ArrayList; import pm.exception.MacroException; import pm.exception.macro.MacroEventOrderException; import pm.macro.Event; +import pm.macro.event.Sequence; import pm.macro.event.Hold; import pm.macro.event.Press; import pm.macro.event.Release; -public class Macro { - protected Event[] eventArray; - - public Macro(Event event) { - eventArray = new Event[]{event}; +public class Macro extends Sequence { + public Macro(Press press) { + Button button = press.getButton(); + this.eventArray = new Event[] {press, new Release(button)}; } public Macro(Event... eventArray) throws MacroException { @@ -44,14 +44,6 @@ public class Macro { if (!holdList.isEmpty()) { throw new MacroEventOrderException("One or more buttons are not released."); } - this.eventArray = (Event[]) eventList.toArray(new Event[0]); - } - - public int count() { - return eventArray.length; - } - - public Event get(int i) { - return eventArray[i]; + eventArray = (Event[]) eventList.toArray(new Event[0]); } } \ No newline at end of file diff --git a/java/src/pm/application/iTunes/iTunesApplication.java b/java/src/pm/application/iTunes/iTunesApplication.java index f8ff59f..db44aa1 100644 --- a/java/src/pm/application/iTunes/iTunesApplication.java +++ b/java/src/pm/application/iTunes/iTunesApplication.java @@ -10,7 +10,7 @@ import com.dt.iTunesController.iTunes; import com.dt.iTunesController.iTunesEventsInterface; public class iTunesApplication extends Application implements iTunesEventsInterface { - protected static final int POSTION_CHANGE_RATE = 5; + protected static final int POSTION_CHANGE_RATE = 1; protected static final int VOLUME_CHANGE_RATE = 5; protected static final int SEEK_TIME = 1000; diff --git a/java/src/pm/device/javainput/rumblepad/RumblepadDevice.java b/java/src/pm/device/javainput/rumblepad/RumblepadDevice.java index 1a08e42..3ef232e 100644 --- a/java/src/pm/device/javainput/rumblepad/RumblepadDevice.java +++ b/java/src/pm/device/javainput/rumblepad/RumblepadDevice.java @@ -37,10 +37,12 @@ public class RumblepadDevice extends JavaInputDevice { new Task(Action.PREVIOUS, Target.APPLICATION)); add( new Hold(RumblepadButton.FIVE), - new Continuous(Action.FORWARD, Target.APPLICATION, 300)); + new Continuous(Action.FORWARD, Target.APPLICATION, 200){ + public int getSleep() {return sleep - 30 * iteration;}}); add( new Hold(RumblepadButton.SEVEN), - new Continuous(Action.REWIND, Target.APPLICATION, 300)); + new Continuous(Action.REWIND, Target.APPLICATION, 200){ + public int getSleep() {return sleep - 30 * iteration;}}); add( new Hold(RumblepadButton.NINE), new Continuous(Action.VOLUME_DOWN, Target.APPLICATION, 100)); diff --git a/java/src/pm/macro/Active.java b/java/src/pm/macro/Active.java index f618048..96a203d 100644 --- a/java/src/pm/macro/Active.java +++ b/java/src/pm/macro/Active.java @@ -1,26 +1,26 @@ package pm.macro; -import pm.Macro; +import pm.macro.event.Sequence; public class Active { - protected Macro macro; + protected Sequence sequence; protected int step; - public Active(Macro macro) { - this.macro = macro; + public Active(Sequence sequence) { + this.sequence = sequence; step = -1; } - public Macro getMacro() { - return macro; + public Sequence getSequence() { + return sequence; } public boolean next(Event event) { - Event next = macro.get(++step); + Event next = sequence.get(++step); return next == null ? false : event.equals(next); } public boolean last() { - return step == macro.count() - 1; + return step == sequence.count() - 1; } } diff --git a/java/src/pm/macro/event/Sequence.java b/java/src/pm/macro/event/Sequence.java new file mode 100644 index 0000000..aec8a86 --- /dev/null +++ b/java/src/pm/macro/event/Sequence.java @@ -0,0 +1,20 @@ +package pm.macro.event; + +import pm.macro.Event; + + +public class Sequence { + protected Event[] eventArray; + + public Sequence(Event... eventArray) { + this.eventArray = eventArray; + } + + public int count() { + return eventArray.length; + } + + public Event get(int i) { + return eventArray.length > 0 ? eventArray[i] : null; + } +} diff --git a/java/src/pm/macro/MacroListener.java b/java/src/pm/macro/event/SequenceListener.java similarity index 52% rename from java/src/pm/macro/MacroListener.java rename to java/src/pm/macro/event/SequenceListener.java index ecc6acc..b3dd449 100644 --- a/java/src/pm/macro/MacroListener.java +++ b/java/src/pm/macro/event/SequenceListener.java @@ -1,37 +1,38 @@ -package pm.macro; +package pm.macro.event; import java.util.ArrayList; import java.util.HashMap; -import pm.Macro; import pm.Task; +import pm.macro.Active; +import pm.macro.Event; import pm.task.TaskGatherer; -public class MacroListener { - public ArrayList macroList; - public HashMap taskMap; +public class SequenceListener { + public ArrayList sequenceList; + public HashMap taskMap; public ArrayList activeList; - public MacroListener() { - macroList = new ArrayList(); - taskMap = new HashMap(); + public SequenceListener() { + sequenceList = new ArrayList(); + taskMap = new HashMap(); activeList = new ArrayList(); } - public void add(Macro macro, Task task) { - macroList.add(macro); - taskMap.put(macro, task); + public void add(Sequence sequence, Task task) { + sequenceList.add(sequence); + taskMap.put(sequence, task); } public void add(Event event) { - for (Macro macro : macroList) { - activeList.add(new Active(macro)); + for (Sequence sequence : sequenceList) { + activeList.add(new Active(sequence)); } ArrayList removeList = new ArrayList(); for (Active active : activeList) { if (active.next(event)) { if (active.last()) { - Task task = taskMap.get(active.getMacro()); + Task task = taskMap.get(active.getSequence()); TaskGatherer.add(task); removeList.add(active); } diff --git a/java/src/pm/task/Continuous.java b/java/src/pm/task/Continuous.java index 1ab641a..8d8d303 100644 --- a/java/src/pm/task/Continuous.java +++ b/java/src/pm/task/Continuous.java @@ -6,6 +6,7 @@ import pm.Task; public class Continuous extends Task { protected int sleep; + protected int iteration; protected boolean stop; public Continuous(Action action, Target target, int sleep) { @@ -18,11 +19,16 @@ public class Continuous extends Task { this(action, target, 0); } + public void nextIteration() { + ++iteration; + } + public void stop() { stop = true; } public void reset() { + iteration = 0; stop = false; } diff --git a/java/src/pm/task/TaskListener.java b/java/src/pm/task/TaskListener.java index fbc9d73..a5f7ec7 100644 --- a/java/src/pm/task/TaskListener.java +++ b/java/src/pm/task/TaskListener.java @@ -41,7 +41,9 @@ public abstract class TaskListener implements Runnable { protected void sleep(int time) { try { - Thread.sleep(time); + if (time > 0) { + Thread.sleep(time); + } } catch (InterruptedException e) {} }