Splits the GUI into more components to increase maintainability

This commit is contained in:
2020-08-20 18:33:45 +02:00
parent 52946c9aec
commit 5b15fea7b3
9 changed files with 707 additions and 466 deletions

View File

@ -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();
}
}
}