package org.squidy.designer.behavior;
import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.Point;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import org.squidy.designer.Designer;
import org.squidy.designer.prefs.PreferencesManager;
/**
* <code>DesignerTrayIconBehavior</code>.
*
* <pre>
* Date: Oct 25, 2010
* Time: 2:30:05 PM
* </pre>
*
* @author <pre>
* Roman Rädle
* <a href="mailto:Roman.Raedle@uni-konstanz.de">Roman.Raedle@uni-konstanz.de</a>
* Human-Computer Interaction Group
* University of Konstanz
* </pre>
* @version $Id: Designer.java 426 2010-09-30 13:17:46Z raedle $
* @since 1.0.0
*/
public class DesignerTrayIconBehavior implements Behavior {
private static final String TRAY_ICON_ACTIVATED_PROPERTY = "TRAY_ICON_ACTIVATED_PROPERTY";
private boolean trayIconActivated = false;
private Designer designer;
private TrayIcon trayIcon;
public DesignerTrayIconBehavior(Designer designer) {
this.designer = designer;
}
/* (non-Javadoc)
* @see org.squidy.designer.behavior.Behavior#enable()
*/
public void enable() {
if (SystemTray.isSupported()) {
initializeSystemTray();
if (PreferencesManager.getBoolean(TRAY_ICON_ACTIVATED_PROPERTY)) {
minimizeToSystemTray();
}
}
}
/* (non-Javadoc)
* @see org.squidy.designer.behavior.Behavior#disable()
*/
public void disable() {
}
protected void initializeSystemTray() {
SystemTray systemTray = SystemTray.getSystemTray();
URL imageUrl = Designer.class.getResource("/tray-icon.png");
PopupMenu popup = new PopupMenu();
MenuItem resetWindowMenuItem = new MenuItem("Reset Window Location");
resetWindowMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Point location = new Point(0, 0);
PreferencesManager.putPoint(Designer.WINDOW_LOCATION, location);
designer.setLocation(location);
}
});
popup.add(resetWindowMenuItem);
popup.addSeparator();
MenuItem exitMenuItem = new MenuItem("Exit");
exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
popup.add(exitMenuItem);
try {
trayIcon = new TrayIcon(ImageIO.read(imageUrl), "Squidy Interaction Library", popup);
trayIcon.setImageAutoSize(true);
trayIcon.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if (e.getClickCount() == 2) {
designer.setVisible0(true);
designer.requestFocus();
designer.toFront();
PreferencesManager.putBoolean(TRAY_ICON_ACTIVATED_PROPERTY, false);
}
}
});
// trayIcon.addActionListener(actionListener);
// trayIcon.addMouseListener(mouseListener);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
if (trayIcon != null) {
systemTray.add(trayIcon);
}
} catch (AWTException e) {
System.err.println("TrayIcon could not be added.");
}
designer.addWindowListener(new WindowAdapter() {
/* (non-Javadoc)
* @see java.awt.event.WindowAdapter#windowIconified(java.awt.event.WindowEvent)
*/
public void windowIconified(WindowEvent e) {
super.windowIconified(e);
minimizeToSystemTray();
}
});
}
/**
* Minimizes the designer window to the system tray.
*/
private void minimizeToSystemTray() {
designer.setVisible0(false);
trayIcon.displayMessage("Squidy minimized",
"Squidy has been minimized to system tray.",
TrayIcon.MessageType.INFO);
PreferencesManager.putBoolean(TRAY_ICON_ACTIVATED_PROPERTY, true);
}
}