Selectors aanzienlijk algemener gemaakt en alle bijbehorende aanpassingen gemaakt. Devices en applications zijn Activatable's. Ze worden eenmalig geïnitialiseerd. Hierbij worden alleen broodnodige dingen gedaan, maar applicaties worden nog niet gestart en er wordt nog niet naar devices gezocht. Dat gebeurd pas als er wordt geactiveerd. Als er wordt gedeactiveerd moet het object beschikbaar blijven, alleen moet de verbinding met de applicatie of het device tijdelijk worden onderbroken, om vervolgens weer opnieuw geactiveerd te kunnen worden. Pas als de exit methode wordt aangeroepen, dan moet er definitief worden verbroken. Deze methodiek moet overal nog worden ingevoerd! Er moet nog worden gewerkt aan een systeem zodat de selector ziet of een applicatie of device actief is. Het liefst met zo'n wait notify achtige truck.

This commit is contained in:
2011-05-15 20:39:59 +00:00
parent ccfa301750
commit 436348757c
33 changed files with 266 additions and 499 deletions

View File

@@ -1,14 +1,35 @@
package pm;
import pm.event.EventHandler;
import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException;
import pm.selector.Selectable;
import pm.selector.Activatable;
public abstract class Application extends EventHandler implements Selectable {
public void initialise() throws ApplicationInitialiseException {}
public abstract class Application extends EventHandler implements Activatable {
protected String title;
protected boolean active;
public void exit() throws ApplicationExitException {
public Application(String title) {
this.title = title;
active = false;
}
public String title() {
return title;
}
public boolean active() {
return active;
}
public void activate() {
start();
}
public void deactivate() {
stop();
}
public void exit() {
deactivate();
stop();
}
}

View File

@@ -1,7 +1,6 @@
package pm;
import pm.event.spreader.NetworkSpreader;
import pm.exception.device.DeviceInitialiseException;
import pm.exception.event.spreader.NetworkSpreaderException;
public class Client extends Manager {
@@ -19,10 +18,7 @@ public class Client extends Manager {
}
public void start() {
log.info("LocalManager!");
try {
initialise();
} catch (DeviceInitialiseException e) {}
initialise();
super.start(false);
}

View File

@@ -1,28 +1,29 @@
package pm;
import pm.event.Task;
import pm.event.EventHandler;
import pm.event.Task;
import pm.event.task.Continuous;
import pm.event.task.Stopper;
import pm.exception.InitialiseException;
import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException;
import pm.macro.Sequence;
import pm.macro.SequenceListener;
import pm.macro.State;
import pm.macro.state.Hold;
import pm.macro.state.Press;
import pm.macro.state.Release;
import pm.selector.Activatable;
public abstract class Device extends EventHandler {
public abstract class Device extends EventHandler implements Activatable {
protected String title;
protected boolean active;
protected SequenceListener sequenceListener;
static {
SequenceListener.initialise(eventSpreader);
}
public Device() {
super();
public Device(String title) {
this.title = title;
active = false;
sequenceListener = new SequenceListener(this);
}
@@ -78,12 +79,24 @@ public abstract class Device extends EventHandler {
sequenceListener.add(state);
}
/* Device default methods */
public void initialise() throws InitialiseException {
super.initialise();
public String title() {
return title;
}
public boolean active() {
return active;
}
public void activate() {
start();
}
public void exit() throws DeviceExitException {
public void deactivate() {
stop();
}
public void exit() {
deactivate();
stop();
}
}

View File

@@ -1,33 +1,30 @@
package pm;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import pm.application.ApplicationSelector;
import pm.application.cmd.windows.gomplayer.GomPlayerApplication;
import pm.application.cmd.windows.winamp.WinampApplication;
import pm.application.cmd.windows.wmp.WMPApplication;
import pm.application.itunes.iTunesApplication;
import pm.application.mpc.MPCApplication;
import pm.application.vlc.VLCApplication;
import pm.application.winamp.WinampApplication;
import pm.event.spreader.LocalSpreader;
import pm.exception.device.DeviceInitialiseException;
import pm.selector.ApplicationSelector;
import pm.util.ArrayCycle;
import pm.value.Action;
public class Main extends Manager {
public static final String TITLE = "Mimis Main";
protected Log log = LogFactory.getLog(getClass());
protected ArrayCycle<Application> applicationCycle;
protected ApplicationSelector applicationSelector;
public Main() {
super(new LocalSpreader());
applicationCycle = new ArrayCycle<Application>();
addApplications();
applicationSelector = new ApplicationSelector(applicationCycle);
eventSpreader.set(applicationCycle.current());
}
protected void action(Action action) {
System.out.println("Manager: " + action);
log.debug(String.format("action(%s)", action));
switch (action) {
case NEXT:
eventSpreader.set(applicationCycle.next());
@@ -43,75 +40,29 @@ public class Main extends Manager {
}
}
public void initialise() throws DeviceInitialiseException {
super.initialise();
//add(new iTunesApplication());
//log.error("main init");
//startApplications();
public void start() {
super.start();
Application[] applicationArray = new Application[] {
new iTunesApplication(),
new GomPlayerApplication(),
new WMPApplication(),
new MPCApplication(),
new VLCApplication(),
new WinampApplication()};
applicationSelector = new ApplicationSelector(applicationArray);
applicationCycle = new ArrayCycle<Application>(applicationArray);
eventSpreader.set(applicationCycle.current());
super.start(false);
}
public void exit() {
exitDevices();
stop();
}
protected void addApplications() {
applicationCycle.add(new GomPlayerApplication());
applicationCycle.add(new WMPApplication());
applicationCycle.add(new iTunesApplication());
applicationCycle.add(new MPCApplication());
applicationCycle.add(new VLCApplication());
applicationCycle.add(new WinampApplication());
}
/*protected void startApplications() {
ArrayList<Application> removeList = new ArrayList<Application>();
for (Application application : applicationCycle) {
try {
application.initialise();
application.start();
log.debug(application);
} catch (ApplicationInitialiseException e) {
removeList.add(application);
}
}
for (Application application : removeList) {
remove(application);
}
eventSpreader.set(applicationCycle.current());
}*/
/*protected void exitApplications() {
System.out.println("Exit applications...");
for (Application application : applicationCycle) {
try {
application.exit();
} catch (ApplicationExitException e) {}
}
System.out.println("Exit main...");
}*/
/*protected void add(Application application) {
applicationCycle.add(application);
}*/
/*protected void remove(Application application) {
applicationCycle.remove(application);
}*/
public void start() {
log.info("LocalManager!");
try {
initialise();
} catch (DeviceInitialiseException e) {}
super.start(false);
application.exit();
}
}
public static void main(String[] args) {
new Main().start();
}
public String title() {
return TITLE;
}
}

View File

@@ -5,78 +5,46 @@ import java.util.ArrayList;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import pm.device.DeviceSelector;
import pm.device.javainput.extreme3d.Extreme3DDevice;
import pm.device.javainput.rumblepad.RumblepadDevice;
import pm.device.jintellitype.JIntellitypeDevice;
import pm.device.network.NetworkDevice;
import pm.device.panel.PanelDevice;
import pm.device.player.PlayerDevice;
import pm.device.wiimote.WiimoteDevice;
import pm.event.EventHandler;
import pm.event.EventSpreader;
import pm.exception.InitialiseException;
import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException;
public abstract class Manager extends EventHandler {
protected Log log = LogFactory.getLog(Main.class);
protected Log log = LogFactory.getLog(getClass());
protected DeviceSelector deviceSelector;
protected ArrayList<Device> deviceList;
public Manager(EventSpreader eventSpreader) {
EventHandler.initialise(eventSpreader);
deviceList = new ArrayList<Device>();
eventSpreader.start();
}
public void initialise() throws DeviceInitialiseException {
//add(new JIntellitypeDevice());
//add(new PlayerDevice());
//add(new RumblepadDevice());
add(new WiimoteDevice());
//add(new GUIDevice());
//add(new TextDevice());
add(new PanelDevice());
//add(new LanTextDevice());
//add(new Extreme3DDevice());
//add(new NetworkDevice());
startDevices();
public void start() {
initialise();
Device[] deviceArray = new Device[] {
new WiimoteDevice(),
new PanelDevice(),
new JIntellitypeDevice(),
new PlayerDevice(),
new RumblepadDevice(),
new Extreme3DDevice(),
new NetworkDevice()};
deviceSelector = new DeviceSelector(deviceArray);
}
public void exit() {
exitDevices();
log.debug("Exit devices...");
for (Device device : deviceList) {
device.exit();
}
stop();
}
protected void startDevices() {
ArrayList<Device> removeList = new ArrayList<Device>();
for (Device device : deviceList) {
try {
device.initialise();
device.start();
System.out.println("Device started: " + device);
} catch (InitialiseException e) {
removeList.add(device);
}
}
for (Device device : removeList) {
remove(device);
}
}
protected void exitDevices() {
System.out.println("Exit devices...");
for (Device device : deviceList) {
try {
device.exit();
} catch (DeviceExitException e) {
e.printStackTrace();
}
}
}
protected void add(Device device) {
deviceList.add(device);
}
protected void remove(Device device) {
deviceList.remove(device);
}
}

41
java/src/pm/Selector.java Normal file
View File

@@ -0,0 +1,41 @@
package pm;
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import pm.selector.Activatable;
import pm.selector.SelectButton;
public class Selector<T extends Activatable> extends JFrame {
protected Log log = LogFactory.getLog(getClass());
protected static final long serialVersionUID = 1L;
protected ArrayList<Activatable> activatableArray;
public Selector(Activatable[] activatableArray) {
createPanel(activatableArray);
//setUndecorated(true);
pack();
setResizable(false);
setVisible(true);
log.debug("Selector constructed");
}
protected void createPanel(Activatable[] activatableArray) {
JPanel panel = new JPanel(new GridLayout(0, 1));
for (Activatable activatable : activatableArray) {
String title = activatable.title();
SelectButton<Activatable> button = new SelectButton<Activatable>(activatable);
button.setText(title);
panel.add(button);
log.debug(String.format("Item added: %s", title));
}
add(panel);
}
}

View File

@@ -6,14 +6,13 @@ import java.net.URL;
import java.util.Enumeration;
public class Test {
public void start() throws IOException {
Class<Application> application = Application.class;
Class<?> test = application.getEnclosingClass();
System.out.println(test);
}
public static void main(String[] argv) throws IOException {
new Test().start(); }
public static void main(String[] argv) throws IOException {
new Test().start();
}
}

View File

@@ -1,16 +1,14 @@
package pm.selector;
import java.util.ArrayList;
package pm.application;
import pm.Application;
import pm.Selector;
public class ApplicationSelector extends Selector<Application> {
protected static final long serialVersionUID = 1L;
protected final static String TITLE = "MIMIS Application Selector";
public ApplicationSelector(ArrayList<Application> items) {
super(items);
public ApplicationSelector(Application[] applicationArray) {
super(applicationArray);
}
}

View File

@@ -3,8 +3,6 @@ package pm.application.cmd;
import java.io.IOException;
import pm.Application;
import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException;
import pm.util.Native;
public abstract class CMDApplication extends Application {
@@ -15,11 +13,12 @@ public abstract class CMDApplication extends Application {
protected Process process;
public CMDApplication(String program, String title) {
super(title);
this.program = program;
this.title = title;
}
public void initialise() throws ApplicationInitialiseException {
public void initialise() {
String key = String.format("%s\\%s", REGISTRY, program);
// Check of naam is gevonden in register
String path = Native.getValue(key);
@@ -29,16 +28,14 @@ public abstract class CMDApplication extends Application {
process = Runtime.getRuntime().exec(command);
} catch (IOException e) {
e.printStackTrace();
throw new ApplicationInitialiseException();
//throw new ApplicationInitialiseException();
}
}
public void exit() throws ApplicationExitException {
public void exit() {
if (process != null) {
process.destroy();
}
super.exit();
}
abstract public String title();
}

View File

@@ -1,14 +1,12 @@
package pm.application.cmd.windows;
import pm.application.cmd.CMDApplication;
import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException;
import pm.util.Windows;
import pm.value.Command;
import pm.value.Key;
import pm.value.Type;
abstract public class WindowsApplication extends CMDApplication {
public abstract class WindowsApplication extends CMDApplication {
protected final static int TERMINATE_SLEEP = 500;
protected final static int START_SLEEP = 500;
@@ -23,7 +21,7 @@ abstract public class WindowsApplication extends CMDApplication {
handle = -1;
}
public void initialise() throws ApplicationInitialiseException {
public void initialise() {
handle = Windows.findWindow(name, null);
if (handle < 1) {
super.initialise();
@@ -31,7 +29,7 @@ abstract public class WindowsApplication extends CMDApplication {
handle = Windows.findWindow(name, null);
}
if (handle < 1) {
throw new ApplicationInitialiseException();
//throw new ApplicationInitialiseException();
}
}

View File

@@ -35,8 +35,4 @@ public class GomPlayerApplication extends WindowsApplication {
break;
}
}
public String title() {
return TITLE;
}
}

View File

@@ -1,4 +1,4 @@
package pm.application.windows.winamp;
package pm.application.cmd.windows.winamp;
import pm.application.cmd.windows.WindowsApplication;
import pm.value.Action;

View File

@@ -2,7 +2,6 @@ package pm.application.cmd.windows.wmp;
import pm.application.cmd.windows.WindowsApplication;
import pm.value.Action;
import pm.value.Command;
public class WMPApplication extends WindowsApplication {
protected final static String PROGRAM = "wmplayer.exe";
@@ -49,8 +48,4 @@ public class WMPApplication extends WindowsApplication {
break;
}
}
public String title() {
return TITLE;
}
}

View File

@@ -1,10 +0,0 @@
package pm.application.example;
import pm.Application;
import pm.value.Action;
public class ExampleApplication extends Application {
protected void action(Action action) {
System.out.println("ExampleApplication: " + action);
}
}

View File

@@ -2,7 +2,6 @@ package pm.application.itunes;
import pm.Application;
import pm.event.Feedback;
import pm.exception.application.ApplicationExitException;
import pm.value.Action;
import com.dt.iTunesController.ITCOMDisabledReason;
@@ -11,7 +10,7 @@ import com.dt.iTunesController.iTunes;
import com.dt.iTunesController.iTunesEventsInterface;
public class iTunesApplication extends Application implements iTunesEventsInterface {
protected static final String NAME = "iTunes";
protected static final String TITLE = "iTunes";
protected static final int POSTION_CHANGE_RATE = 1;
protected static final int VOLUME_CHANGE_RATE = 5;
@@ -21,22 +20,22 @@ public class iTunesApplication extends Application implements iTunesEventsInterf
protected iTunes iTunes;
public iTunesApplication() {
super();
super(TITLE);
iTunes = new iTunes();
}
public void initialise() {
public void activate() {
iTunes.connect();
iTunes.addEventHandler(this);
}
public void exit() throws ApplicationExitException {
public void exit() {
System.out.println("Exit iTunesApplication");
super.exit();
try {
iTunes.quit(); // Todo: wachten totdat ook daadwerkelijk gestart? Anders wordt iTunes niet afgesloten.
} catch (Exception e) {
throw new ApplicationExitException();
//throw new ApplicationExitException();
}
}
@@ -91,12 +90,16 @@ public class iTunesApplication extends Application implements iTunesEventsInterf
/* iTunesEventInterface => naar eigen class? */
public void onDatabaseChangedEvent(int[][] deletedObjectIDs, int[][] changedObjectIDs) {}
public void onPlayerPlayEvent(ITTrack iTrack) {
System.out.println("iTunes play");
eventSpreader.add(new Feedback());
if (active) {
System.out.println("iTunes play");
eventSpreader.add(new Feedback());
}
}
public void onPlayerStopEvent(ITTrack iTrack) {
System.out.println("iTunes stop");
eventSpreader.add(new Feedback());
if (active) {
System.out.println("iTunes stop");
eventSpreader.add(new Feedback());
}
}
public void onPlayerPlayingTrackChangedEvent(ITTrack iTrack) {}
public void onCOMCallsDisabledEvent(ITCOMDisabledReason reason) {}
@@ -104,8 +107,4 @@ public class iTunesApplication extends Application implements iTunesEventsInterf
public void onQuittingEvent() {}
public void onAboutToPromptUserToQuitEvent() {}
public void onSoundVolumeChangedEvent(int newVolume) {}
public String title() {
return NAME;
}
}

View File

@@ -6,7 +6,6 @@ import java.net.MalformedURLException;
import java.net.URL;
import pm.application.cmd.CMDApplication;
import pm.exception.application.ApplicationInitialiseException;
import pm.value.Action;
public class VLCApplication extends CMDApplication {
@@ -26,16 +25,11 @@ public class VLCApplication extends CMDApplication {
super(PROGRAM, TITLE);
}
public void initialise() throws ApplicationInitialiseException {
super.initialise();
}
public void command(String command) {
String request = "http://" + HOST + ":" + PORT + "/requests/status.xml?command=" + command;
try {
int response = ((HttpURLConnection)(new URL(request)).openConnection()).getResponseCode();
//System.out.printf("Response: %d\n", response);
System.out.printf("Response: %d\n", response);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {

View File

@@ -1,82 +0,0 @@
package pm.application.winamp;
import pm.Application;
import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException;
import pm.value.Action;
import com.qotsa.exception.InvalidHandle;
import com.qotsa.exception.InvalidParameter;
import com.qotsa.jni.controller.WinampController;
public class WinampApplication extends Application {
protected static final String TITLE = "Winamp";
protected boolean muted;
protected int volume;
public void initialise() throws ApplicationInitialiseException {
try {
WinampController.run();
volume = 0; // UnsatisfiedLinkError: com.qotsa.jni.controller.JNIWinamp.getVolume()I
muted = volume == 0;
} catch (Exception e) {
throw new ApplicationInitialiseException();
}
}
public void exit() throws ApplicationExitException {
System.out.println("Exit WinampApplication");
super.exit();
try {
WinampController.exit(); // Todo: wachten totdat ook daadwerkelijk gestart? Anders crashed Winamp.
} catch (InvalidHandle e) {
throw new ApplicationExitException();
}
}
protected void action(Action action) {
System.out.println("WinampApplication: " + action);
try {
switch (action) {
case PLAY:
WinampController.play();
case NEXT:
WinampController.nextTrack();
break;
case PREVIOUS:
WinampController.previousTrack();
break;
case FORWARD:
WinampController.fwd5Secs();
break;
case REWIND:
WinampController.rew5Secs();
break;
case MUTE:
toggleMute();
break;
case VOLUME_UP:
WinampController.increaseVolume();
break;
case VOLUME_DOWN:
WinampController.decreaseVolume();
break;
}
} catch (InvalidHandle e) {}
}
protected void toggleMute() throws InvalidHandle {
if (!muted) {
volume = WinampController.getVolume();
}
try {
WinampController.setVolume(muted ? volume : 0);
} catch (InvalidParameter e) {}
muted = !muted;
}
public String title() {
return TITLE;
}
}

View File

@@ -0,0 +1,14 @@
package pm.device;
import pm.Device;
import pm.Selector;
public class DeviceSelector extends Selector<Device> {
protected static final long serialVersionUID = 1L;
protected final static String TITLE = "MIMIS Device Selector";
public DeviceSelector(Device[] deviceArray) {
super(deviceArray);
}
}

View File

@@ -1,18 +0,0 @@
package pm.device.example;
import pm.Device;
import pm.value.Action;
import pm.value.Target;
public class ExampleDevice extends Device {
public void initialise() {
//System.out.println("Ik hoef niets te starten");
//addAction(Action.START, Target.APPLICATION);
//addAction(Action.TEST, Target.APPLICATION);
//addAction(Action.EXIT, Target.MAIN);
}
public void exit() {
}
}

View File

@@ -17,6 +17,10 @@ import pm.macro.state.Press;
import pm.macro.state.Release;
public abstract class JavaInputDevice extends Device {
public JavaInputDevice(String title) {
super(title);
}
protected JavaInputListener javaInputListener;
protected Button previousDirectionalButton;

View File

@@ -20,8 +20,16 @@ import de.hardcode.jxinput.event.JXInputDirectionalEvent;
public class Extreme3DDevice extends JavaInputDevice {
protected static final String NAME = "Logitech Extreme 3D";
public void initialise() throws DeviceInitialiseException {
super.initialise(NAME);
public Extreme3DDevice() {
super(NAME);
}
public void initialise() {
try {
super.initialise(NAME);
} catch (DeviceInitialiseException e) {
e.printStackTrace();
}
try {
add(
new Press(Extreme3DButton.TWELVE),

View File

@@ -19,8 +19,16 @@ import de.hardcode.jxinput.event.JXInputDirectionalEvent;
public class RumblepadDevice extends JavaInputDevice {
protected static final String NAME = "Logitech RumblePad 2 USB";
public void initialise() throws DeviceInitialiseException {
super.initialise(NAME);
public RumblepadDevice() {
super(NAME);
}
public void initialise(){
try {
super.initialise(NAME);
} catch (DeviceInitialiseException e) {
e.printStackTrace();
}
add(
new Press(RumblepadButton.ONE),
new Task(Target.APPLICATION, Action.PLAY));

View File

@@ -9,8 +9,6 @@ import com.melloware.jintellitype.JIntellitype;
import pm.Device;
import pm.event.Task;
import pm.exception.button.UnknownButtonException;
import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException;
import pm.macro.state.Press;
import pm.macro.state.Release;
import pm.value.Action;
@@ -18,16 +16,19 @@ import pm.value.Key;
import pm.value.Target;
public class JIntellitypeDevice extends Device implements HotkeyListener, IntellitypeListener {
protected static final String TITLE = "JIntellitype";
protected ArrayList<Hotkey> hotkeyList;
protected JIntellitype jit;
public JIntellitypeDevice() {
super(TITLE);
hotkeyList = new ArrayList<Hotkey>();
jit = JIntellitype.getInstance();
Hotkey.initialise(hotkeyList, jit);
}
public void initialise() throws DeviceInitialiseException {
public void initialise() {
jit.addHotKeyListener(this);
jit.addIntellitypeListener(this);
add(
@@ -80,7 +81,7 @@ public class JIntellitypeDevice extends Device implements HotkeyListener, Intell
add(new Release(hotkey));
}
public void exit() throws DeviceExitException {
public void exit() {
super.exit();
jit.removeHotKeyListener(this);
jit.removeIntellitypeListener(this);

View File

@@ -6,6 +6,7 @@ import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -13,9 +14,9 @@ import pm.Device;
import pm.Event;
import pm.Worker;
import pm.event.Feedback;
import pm.exception.device.DeviceInitialiseException;
public class NetworkDevice extends Device {
protected static final String TITLE = "Network";
public static final int PORT = 6789;
protected Log log = LogFactory.getLog(NetworkDevice.class);
@@ -24,6 +25,7 @@ public class NetworkDevice extends Device {
protected ArrayList<Client> clientList;
public NetworkDevice(int port) {
super(TITLE);
this.port = port;
}
@@ -31,12 +33,12 @@ public class NetworkDevice extends Device {
this(PORT);
}
public void initialise() throws DeviceInitialiseException {
public void initialise() {
try {
server = new Server(port);
server.start();
} catch (IOException e) {
throw new DeviceInitialiseException();
//throw new DeviceInitialiseException();
}
}

View File

@@ -8,9 +8,13 @@ import pm.value.Action;
import pm.value.Target;
public class PanelDevice extends Device implements PanelButtonListener {
protected static final String TITLE = "Panel";
protected Panel panel;
public PanelDevice() {
super(TITLE);
}
public void initialise() {
panel = new Panel(this);
//panel.updateTime(12342398);

View File

@@ -2,10 +2,15 @@ package pm.device.player;
import javazoom.jlgui.player.amp.StandalonePlayer;
import pm.Device;
import pm.exception.device.DeviceExitException;
public class PlayerDevice extends Device {
protected static final String TITLE = "Player";
StandalonePlayer standalonePlayer;
public PlayerDevice() {
super(TITLE);
}
public void initialise() {
standalonePlayer = new StandalonePlayer();
@@ -15,8 +20,4 @@ public class PlayerDevice extends Device {
//standalonePlayer.
System.out.println("niets!");
}
public void exit() throws DeviceExitException {
super.exit();
}
}

View File

@@ -6,30 +6,23 @@ import org.wiigee.util.Log;
import pm.Button;
import pm.Device;
import pm.Macro;
import pm.device.wiimote.gesture.GestureDevice;
import pm.event.Feedback;
import pm.event.Task;
import pm.event.task.Continuous;
import pm.event.task.Dynamic;
import pm.exception.InitialiseException;
import pm.exception.button.UnknownButtonException;
import pm.exception.device.DeviceExitException;
import pm.exception.macro.StateOrderException;
import pm.exception.device.DeviceNotFoundException;
import pm.macro.state.Hold;
import pm.macro.state.Press;
import pm.macro.state.Release;
import pm.value.Action;
import pm.value.Target;
import wiiusej.Wiimote;
import wiiusej.values.Acceleration;
import wiiusej.values.Calibration;
import wiiusej.values.RawAcceleration;
import wiiusej.wiiusejevents.physicalevents.MotionSensingEvent;
import wiiusej.wiiusejevents.physicalevents.WiimoteButtonsEvent;
public class WiimoteDevice extends Device implements GestureListener {
protected static final String TITLE = "Wiimote";
protected static final int CONNECT_MAX = 10;
protected static final int RUMBLE = 150;
@@ -46,14 +39,12 @@ public class WiimoteDevice extends Device implements GestureListener {
}
public WiimoteDevice() {
super(TITLE);
gestureDevice = new GestureDevice();
gestureDevice.add(this);
}
public void initialise() throws InitialiseException {
super.initialise();
wiimote = wiimoteService.getDevice(this);
wiimote.activateMotionSensing();
public void initialise() {
add(
new Hold(WiimoteButton.A),
new Task(Action.TRAIN),
@@ -117,12 +108,6 @@ public class WiimoteDevice extends Device implements GestureListener {
} catch (StateOrderException e) {}*/
}
public void exit() throws DeviceExitException {
super.exit();
wiimote.deactivateMotionSensing();
wiimoteService.exit();
}
public void action(Action action) {
switch (action) {
case TRAIN:
@@ -180,4 +165,23 @@ public class WiimoteDevice extends Device implements GestureListener {
System.out.println("Wiimote feedback");
wiimote.rumble(RUMBLE);
}
public void activate() {
try {
wiimote = wiimoteService.getDevice(this);
} catch (DeviceNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
wiimote.activateMotionSensing();
}
public void deactivate() {
wiimote.deactivateMotionSensing();
}
public void exit() {
wiimoteService.exit();
super.exit();
}
}

View File

@@ -2,18 +2,16 @@ package pm.event;
import pm.Event;
import pm.event.task.Continuous;
import pm.exception.InitialiseException;
import pm.selector.Selectable;
import pm.value.Action;
public abstract class EventHandler extends EventListener implements Selectable {
public abstract class EventHandler extends EventListener {
protected static EventSpreader eventSpreader;
public static void initialise(EventSpreader eventSpreader) {
EventHandler.eventSpreader = eventSpreader;
}
public void initialise() throws InitialiseException {
protected void initialise() {
eventSpreader.add(this);
}

View File

@@ -25,43 +25,6 @@ public abstract class EventListener extends Worker {
}
}
/*public Event get(Target target) {
while (eventQueue.isEmpty()) {
synchronized (available) {
try {
available.await();
} catch (InterruptedException e) {}
}
}
Event event = eventQueue.peek();
if (event instanceof Task) {
Task task = (Task) event;
if (task.getTarget() == target) {
return eventQueue.poll();
} else {
return null;
}
} else {
return eventQueue.poll();
}
}
public Event gett(Target target) {
while (true) {
Event event = eventQueue.peek();
if (event instanceof Task) {
Task task = (Task) event;
if (task.getTarget() == target) {
return get();
}
}
}
}
public Event get() {
return get(Target.ALL);
}*/
public final void run() {
while (run) {
while (eventQueue.isEmpty()) {
@@ -76,52 +39,4 @@ public abstract class EventListener extends Worker {
}
public abstract void event(Event event);
/*public static void add(Feedback feedback) {
for (EventListener eventListener : eventListenerList) {
eventListener.add(feedback);
}
}*/
/*public static void add(EventListener self, Task task) {
if (task instanceof Stopper) {
((Stopper) task).stop();
} else {
Target target = task.getTarget();
switch (target) {
case SELF:
self.add(task);
break;
case APPLICATION:
if (applicationCycle.size() > 0) {
applicationCycle.current().add(task);
}
break;
default: {
for (EventListener eventListener : eventListenerList) {
switch (target) {
case ALL:
eventListener.add(task);
break;
case MAIN:
if (eventListener instanceof Main) {
eventListener.add(task);
}
break;
case DEVICES:
if (eventListener instanceof Device) {
eventListener.add(task);
}
break;
case APPLICATIONS:
if (eventListener instanceof Application) {
eventListener.add(task);
}
break;
}
}
}
}
}
}*/
}

View File

@@ -0,0 +1,8 @@
package pm.selector;
public interface Activatable {
public String title();
public boolean active();
public void activate();
public void deactivate();
}

View File

@@ -2,21 +2,15 @@ package pm.selector;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import javax.swing.JToggleButton;
import pm.event.EventHandler;
import pm.exception.InitialiseException;
public class SelectButton<T extends EventHandler> extends JToggleButton implements ItemListener {
public class SelectButton<T extends Activatable> extends JToggleButton implements ItemListener {
protected static final long serialVersionUID = 1L;
protected EventHandler eventHandler;
protected T activatable;
public SelectButton(EventHandler eventHandler) {
this.eventHandler = eventHandler;
public SelectButton(T activatable) {
this.activatable = activatable;
addItemListener(this);
}
@@ -24,15 +18,10 @@ public class SelectButton<T extends EventHandler> extends JToggleButton implemen
int state = itemEvent.getStateChange();
if (state == ItemEvent.SELECTED) {
System.out.println("Selected");
try {
eventHandler.initialise();
eventHandler.start();
} catch (InitialiseException e) {
e.printStackTrace();
}
activatable.activate();
} else {
System.out.println("Deselected");
eventHandler.stop();
activatable.deactivate();
}
//System.out.println(itemEvent.getSource());
}

View File

@@ -1,5 +0,0 @@
package pm.selector;
public interface Selectable {
public String title();
}

View File

@@ -1,40 +0,0 @@
package pm.selector;
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JPanel;
import pm.event.EventHandler;
public class Selector<T extends EventHandler> extends JFrame {
protected static final long serialVersionUID = 1L;
protected final static String TITLE = "MIMIS <T> Selector";
private ArrayList<T> items;
public Selector(ArrayList<T> items) {
super(TITLE);
this.items = items;
System.out.println("Selector started");
createPanel();
pack();
setResizable(false);
setVisible(true);
}
protected void createPanel() {
JPanel panel = new JPanel(new GridLayout(0, 1));
for (T t : items) {
String name = t.title();
SelectButton<T> button = new SelectButton<T>(t);
button.setText(name);
panel.add(button);
System.out.println("Item added");
}
add(panel);
}
}