Added 'Hide to tray' option

This commit is contained in:
Casper van Battum
2015-08-05 19:35:13 +01:00
committed by Laurent Clouet
parent 64a896b5c5
commit 7f475348fc
2 changed files with 104 additions and 3 deletions

View File

@@ -19,12 +19,19 @@
package com.sheepit.client.standalone;
import java.awt.Color;
import java.awt.AWTException;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
@@ -45,9 +52,12 @@ public class GuiSwing extends JFrame implements Gui {
WORKING, SETTINGS
}
private static final SystemTray TRAY = SystemTray.getSystemTray();
private JPanel panel;
private Working activityWorking;
private Settings activitySettings;
private TrayIcon trayIcon;
private int framesRendered;
@@ -202,6 +212,80 @@ public class GuiSwing extends JFrame implements Gui {
panel.repaint();
}
public void hideToTray() {
if (SystemTray.isSupported() == false) {
System.out.println("GuiSwing::hideToTray SystemTray not supported!");
return;
}
try {
trayIcon = getTrayIcon();
TRAY.add(trayIcon);
}
catch (AWTException e) {
System.out.println("GuiSwing::hideToTray an error occured while trying to add system tray icon (exception: " + e + ")");
return;
}
setVisible(false);
}
public void restoreFromTray() {
TRAY.remove(trayIcon);
setVisible(true);
}
public TrayIcon getTrayIcon() {
final PopupMenu trayMenu = new PopupMenu();
URL iconUrl = getClass().getResource("/icon.png");
Image img = Toolkit.getDefaultToolkit().getImage(iconUrl);
final TrayIcon icon = new TrayIcon(img);
MenuItem exit = new MenuItem("Exit");
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
trayMenu.add(exit);
MenuItem open = new MenuItem("Open...");
open.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
restoreFromTray();
}
});
trayMenu.add(open);
MenuItem settings = new MenuItem("Settings...");
settings.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
restoreFromTray();
showActivity(ActivityType.SETTINGS);
}
});
trayMenu.add(settings);
icon.setPopupMenu(trayMenu);
icon.setImageAutoSize(true);
icon.setToolTip("SheepIt! Client");
icon.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
restoreFromTray();
}
});
return icon;
}
public class ThreadClient extends Thread {
@Override
public void run() {