Splits the GUI into more components to increase maintainability
This commit is contained in:
@ -0,0 +1,132 @@
|
||||
package net.knarcraft.minecraftserverlauncher.userinterface;
|
||||
|
||||
import net.knarcraft.minecraftserverlauncher.Main;
|
||||
import net.knarcraft.minecraftserverlauncher.profile.Controller;
|
||||
import net.knarcraft.minecraftserverlauncher.utility.CommonFunctions;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import static java.awt.Frame.NORMAL;
|
||||
|
||||
/**
|
||||
* This class adds a tray to the GUI
|
||||
*/
|
||||
public class Tray {
|
||||
|
||||
private SystemTray tray;
|
||||
private TrayIcon trayIcon;
|
||||
private Controller controller;
|
||||
private ServerLauncherGUI serverLauncherGUI;
|
||||
private JFrame mainFrame;
|
||||
|
||||
/**
|
||||
* Instantiates a new tray
|
||||
*
|
||||
* @param mainFrame <p>The main frame of the GUI</p>
|
||||
* @param serverLauncherGUI <p>The server launcher GUI to use</p>
|
||||
*/
|
||||
public Tray(JFrame mainFrame, ServerLauncherGUI serverLauncherGUI) {
|
||||
this.controller = Main.getController();
|
||||
this.mainFrame = mainFrame;
|
||||
this.serverLauncherGUI = serverLauncherGUI;
|
||||
initializeTray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares the system tray if available
|
||||
*/
|
||||
private void initializeTray() {
|
||||
if (SystemTray.isSupported()) {
|
||||
tray = SystemTray.getSystemTray();
|
||||
InputStream imageStream = CommonFunctions.getResourceAsStream("GUIIcon.png");
|
||||
Image trayImage;
|
||||
try {
|
||||
trayImage = ImageIO.read(imageStream);
|
||||
} catch (IOException e) {
|
||||
trayImage = Toolkit.getDefaultToolkit().getImage("resources/GUIIcon.png");
|
||||
e.printStackTrace();
|
||||
}
|
||||
PopupMenu popup = new PopupMenu();
|
||||
trayIcon = new TrayIcon(trayImage, "Minecraft Server Launcher", popup);
|
||||
trayIcon.setImageAutoSize(true);
|
||||
ActionListener exitListener = e -> {
|
||||
serverLauncherGUI.stopServers();
|
||||
controller.saveState();
|
||||
System.exit(0);
|
||||
};
|
||||
|
||||
MenuItem restoreItem = new MenuItem("Restore");
|
||||
popup.add(restoreItem);
|
||||
restoreItem.addActionListener(e -> {
|
||||
mainFrame.setExtendedState(NORMAL);
|
||||
tray.remove(trayIcon);
|
||||
mainFrame.setVisible(true);
|
||||
});
|
||||
MenuItem exitItem = new MenuItem("Exit");
|
||||
exitItem.addActionListener(exitListener);
|
||||
popup.add(exitItem);
|
||||
mainFrame.addWindowStateListener(e -> {
|
||||
if (e.getNewState() == NORMAL) {
|
||||
tray.remove(trayIcon);
|
||||
mainFrame.setVisible(true);
|
||||
}
|
||||
});
|
||||
|
||||
mainFrame.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
if (controller.getRunInBackground()) {
|
||||
try {
|
||||
tray.add(trayIcon);
|
||||
mainFrame.setVisible(false);
|
||||
} catch (AWTException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
serverLauncherGUI.stopServers();
|
||||
controller.saveState();
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
trayIcon.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (e.getClickCount() >= 1 && e.getButton() == MouseEvent.BUTTON1) {
|
||||
mainFrame.setExtendedState(NORMAL);
|
||||
tray.remove(trayIcon);
|
||||
mainFrame.setVisible(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mainFrame.addWindowListener(new WindowAdapter() {
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e) {
|
||||
controller.saveState();
|
||||
serverLauncherGUI.stopServers();
|
||||
System.exit(0);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides the gui to the tray
|
||||
*/
|
||||
public void hideToTray() {
|
||||
mainFrame.setVisible(false);
|
||||
try {
|
||||
tray.add(trayIcon);
|
||||
} catch (AWTException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user