Makes it possible to load a controller without generating a GUI, for better testing Makes sure not to try and parse empty profile lines Saves controller settings in a more readable and appendable format Adds code for using the correct java version for the occasion Adds a new function for writing to files
137 lines
4.5 KiB
Java
137 lines
4.5 KiB
Java
package net.knarcraft.minecraftserverlauncher.userinterface;
|
|
|
|
import net.knarcraft.minecraftserverlauncher.Main;
|
|
import net.knarcraft.minecraftserverlauncher.profile.ServerLauncherController;
|
|
import net.knarcraft.minecraftserverlauncher.utility.CommonFunctions;
|
|
|
|
import javax.imageio.ImageIO;
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.MouseAdapter;
|
|
import java.awt.event.MouseEvent;
|
|
import java.awt.event.WindowAdapter;
|
|
import java.awt.event.WindowEvent;
|
|
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 final ServerLauncherController controller;
|
|
private final ServerLauncherGUI serverLauncherGUI;
|
|
private final 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();
|
|
}
|
|
}
|
|
|
|
}
|