LEDControl/src/main/java/de/zuim/ledcontrol/EffectManager.java

87 lines
1.8 KiB
Java

package de.zuim.ledcontrol;
import de.zuim.ledcontrol.effects.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class EffectManager {
private boolean sweep = false;
private final LEDEffect[] effects = new LEDEffect[]{new ClockEffect(), new AnalogClockEffect(), new NetworkSpeedEffect(), new AudioVolumeEffect(), new AudioFFTEffect(), new SineEffect(), new ColorSweepEffect()};
private int activeId = 0;
private final TrayIcon trayIcon;
public EffectManager() {
final SystemTray tray = SystemTray.getSystemTray();
trayIcon = new TrayIcon(new ImageIcon(getClass().getResource("/icon.png")).getImage(), "LEDEffects");
trayIcon.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
switch (e.getButton()) {
case MouseEvent.BUTTON1 -> loadNext();
case MouseEvent.BUTTON2 -> {
sweep = !sweep;
loadNext();
}
case MouseEvent.BUTTON3 -> System.exit(0);
}
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
try {
tray.add(trayIcon);
} catch (AWTException e) {
e.printStackTrace();
}
new Timer(30 * 1000, e -> {
if (sweep)
loadNext();
}).start();
loadNext(true);
}
private void loadNext() {
loadNext(false);
}
private void loadNext(boolean first) {
if (!first) {
getActiveEffect().unload();
activeId++;
if (activeId == effects.length)
activeId = 0;
}
getActiveEffect().load();
trayIcon.setToolTip("LEDEffects - " + getActiveEffect().getDescription() + (sweep ? " (autoswitch)" : ""));
}
public LEDEffect getActiveEffect() {
return effects[activeId];
}
}