Added 'Hide to tray' option
This commit is contained in:
committed by
Laurent Clouet
parent
64a896b5c5
commit
7f475348fc
@@ -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() {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user