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; package com.sheepit.client.standalone;
import java.awt.Color; import java.awt.AWTException;
import java.awt.GridBagConstraints; import java.awt.GridBagConstraints;
import java.awt.GridBagLayout; 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 java.net.URL;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLabel; import javax.swing.JLabel;
@@ -45,9 +52,12 @@ public class GuiSwing extends JFrame implements Gui {
WORKING, SETTINGS WORKING, SETTINGS
} }
private static final SystemTray TRAY = SystemTray.getSystemTray();
private JPanel panel; private JPanel panel;
private Working activityWorking; private Working activityWorking;
private Settings activitySettings; private Settings activitySettings;
private TrayIcon trayIcon;
private int framesRendered; private int framesRendered;
@@ -202,6 +212,80 @@ public class GuiSwing extends JFrame implements Gui {
panel.repaint(); 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 { public class ThreadClient extends Thread {
@Override @Override
public void run() { public void run() {

View File

@@ -1,7 +1,7 @@
package com.sheepit.client.standalone.swing.activity; package com.sheepit.client.standalone.swing.activity;
import java.awt.Color;
import java.awt.GridBagConstraints; import java.awt.GridBagConstraints;
import java.awt.SystemTray;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
@@ -131,6 +131,14 @@ public class Working implements Activity {
constraints.gridx = 2; constraints.gridx = 2;
parent.getContentPane().add(pauseButton, constraints); parent.getContentPane().add(pauseButton, constraints);
//Add hide button if os supports it
if (SystemTray.isSupported()) {
JButton hideButton = new JButton("Hide window");
hideButton.addActionListener(new HideAction());
constraints.gridx = 3;
parent.getContentPane().add(hideButton, constraints);
}
parent.addPadding(1, ++currentRow, 2, 1); parent.addPadding(1, ++currentRow, 2, 1);
parent.addPadding(0, 0, 1, currentRow + 1); parent.addPadding(0, 0, 1, currentRow + 1);
parent.addPadding(3, 0, 1, currentRow + 1); parent.addPadding(3, 0, 1, currentRow + 1);
@@ -212,4 +220,13 @@ public class Working implements Activity {
} }
} }
class HideAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (parent != null) {
parent.hideToTray();
}
}
}
} }