Files
Minecraft-Server-Launcher/src/main/java/net/knarcraft/minecraftserverlauncher/userinterface/Tray.java
EpicKnarvik97 f1eead3807 Adds various fixes to make the two java versions work as expected
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
2021-08-02 21:06:22 +02:00

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