Minimize to tray on-close
This commit is contained in:
parent
d7a47ce9f4
commit
8de2e05af1
4 changed files with 84 additions and 6 deletions
|
@ -53,6 +53,9 @@ Want to support development? Make a donation* (see below):
|
||||||
* [RU] Пожалуйста обратите внимание! Это некоммерческое приложение. Перечисляя средства вы совершаете дарение.
|
* [RU] Пожалуйста обратите внимание! Это некоммерческое приложение. Перечисляя средства вы совершаете дарение.
|
||||||
|
|
||||||
#### TODO
|
#### TODO
|
||||||
[ ] Tray support
|
|
||||||
[ ] Headless mode (CLI)
|
* [x] Tray support
|
||||||
[ ] Dark theme
|
* [ ] Configuration files support
|
||||||
|
* [ ] Settings
|
||||||
|
* [ ] Headless mode (CLI)
|
||||||
|
* [ ] Dark theme
|
|
@ -1,20 +1,37 @@
|
||||||
package logiled;
|
package logiled;
|
||||||
|
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
|
import javafx.application.Platform;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.Parent;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class MainFx extends Application {
|
public class MainFx extends Application {
|
||||||
public static final String appVersion = "v0.3";
|
public static final String appVersion = "v0.3";
|
||||||
|
|
||||||
|
private static boolean traySupport = true;
|
||||||
|
|
||||||
|
private Stage stage;
|
||||||
|
private ResourceBundle rb;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) throws Exception{
|
public void start(Stage primaryStage) throws Exception{
|
||||||
|
//-----------------------Tray support---------------------
|
||||||
|
this.stage = primaryStage;
|
||||||
|
if (traySupport){
|
||||||
|
Platform.setImplicitExit(false);
|
||||||
|
SwingUtilities.invokeLater(this::addAppToTray);
|
||||||
|
}
|
||||||
|
//--------------------------------------------------------
|
||||||
Mediator.getInstance().setInstance(getHostServices());
|
Mediator.getInstance().setInstance(getHostServices());
|
||||||
|
|
||||||
FXMLLoader loader = new FXMLLoader(getClass().getResource("/Main.fxml"));
|
FXMLLoader loader = new FXMLLoader(getClass().getResource("/Main.fxml"));
|
||||||
|
@ -22,7 +39,7 @@ public class MainFx extends Application {
|
||||||
Locale locale = new Locale(Locale.getDefault().getISO3Language());
|
Locale locale = new Locale(Locale.getDefault().getISO3Language());
|
||||||
Locale.setDefault(locale);
|
Locale.setDefault(locale);
|
||||||
|
|
||||||
ResourceBundle rb = ResourceBundle.getBundle("locale", locale);
|
rb = ResourceBundle.getBundle("locale", locale);
|
||||||
|
|
||||||
loader.setResources(rb);
|
loader.setResources(rb);
|
||||||
|
|
||||||
|
@ -34,6 +51,9 @@ public class MainFx extends Application {
|
||||||
new Image(getClass().getResourceAsStream("/ico/appIcon_64.png")),
|
new Image(getClass().getResourceAsStream("/ico/appIcon_64.png")),
|
||||||
new Image(getClass().getResourceAsStream("/ico/appIcon_128.png"))
|
new Image(getClass().getResourceAsStream("/ico/appIcon_128.png"))
|
||||||
);
|
);
|
||||||
|
// NOTE: tray leftovers
|
||||||
|
if (traySupport)
|
||||||
|
primaryStage.setOnCloseRequest(windowEvent -> primaryStage.hide());
|
||||||
|
|
||||||
primaryStage.setTitle("LogiLed "+appVersion);
|
primaryStage.setTitle("LogiLed "+appVersion);
|
||||||
primaryStage.setMinWidth(1215);
|
primaryStage.setMinWidth(1215);
|
||||||
|
@ -46,9 +66,62 @@ public class MainFx extends Application {
|
||||||
primaryStage.setOnHidden(e->MessagesConsumer.getInstance().stop()); // Useless?
|
primaryStage.setOnHidden(e->MessagesConsumer.getInstance().stop()); // Useless?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addAppToTray(){
|
||||||
|
try {
|
||||||
|
Toolkit.getDefaultToolkit(); // ???
|
||||||
|
|
||||||
|
if (! SystemTray.isSupported()){
|
||||||
|
System.out.println("No system tray support. Please try executing this application wit '--no-tray' key.");
|
||||||
|
Platform.exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemTray tray = SystemTray.getSystemTray();
|
||||||
|
|
||||||
|
TrayIcon trayIcon = new TrayIcon(ImageIO.read(getClass().getResourceAsStream("/ico/appIcon_32.png")));
|
||||||
|
|
||||||
|
trayIcon.addActionListener(ActionEvent -> Platform.runLater(this::showStage));
|
||||||
|
|
||||||
|
MenuItem closeItem = new MenuItem(rb.getString("tray_close"));
|
||||||
|
closeItem.addActionListener(actionEvent -> {
|
||||||
|
Platform.exit();
|
||||||
|
tray.remove(trayIcon);
|
||||||
|
});
|
||||||
|
|
||||||
|
java.awt.Font defaultFont = java.awt.Font.decode(null);
|
||||||
|
java.awt.Font boldFont = defaultFont.deriveFont(java.awt.Font.BOLD);
|
||||||
|
closeItem.setFont(boldFont);
|
||||||
|
|
||||||
|
final PopupMenu popupMenu = new PopupMenu();
|
||||||
|
popupMenu.add(closeItem);
|
||||||
|
trayIcon.setPopupMenu(popupMenu);
|
||||||
|
tray.add(trayIcon);
|
||||||
|
}
|
||||||
|
catch (IOException | AWTException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
System.out.println("Something wrong with tray support. Please try executing this application wit '--no-tray' key.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showStage() {
|
||||||
|
if (stage != null) {
|
||||||
|
stage.show();
|
||||||
|
stage.toFront();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
if ((args.length == 1) && (args[0].equals("-v") || args[0].equals("--version")))
|
if ((args.length > 0)) {
|
||||||
|
if (args[0].equals("--no-tray")){
|
||||||
|
traySupport = false;
|
||||||
|
launch(args);
|
||||||
|
}
|
||||||
|
if (args[0].equals("-v") || args[0].equals("--version"))
|
||||||
System.out.println("LogiLed " + appVersion);
|
System.out.println("LogiLed " + appVersion);
|
||||||
|
else
|
||||||
|
System.out.println("Usage: LogiLed [KEY]\n" +
|
||||||
|
" -v, --version\tGet application version\n" +
|
||||||
|
" --no-tray\tDisable tray support");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
launch(args);
|
launch(args);
|
||||||
}
|
}
|
||||||
|
|
|
@ -694,3 +694,4 @@ effect_wave_horizontal_reverse=Wave horizontal (reverse)
|
||||||
effect_wave_vertical_reverse=Wave vertical (reverse)
|
effect_wave_vertical_reverse=Wave vertical (reverse)
|
||||||
effect_wave_edge_to_center=Wave from edges to center
|
effect_wave_edge_to_center=Wave from edges to center
|
||||||
btn_reset=Reset
|
btn_reset=Reset
|
||||||
|
tray_close=Close
|
||||||
|
|
|
@ -20,3 +20,4 @@ effect_wave_vertical_reverse=Волна вертикальная (обратна
|
||||||
effect_wave_center_to_edge=Волна от центра к краям
|
effect_wave_center_to_edge=Волна от центра к краям
|
||||||
effect_wave_edge_to_center=Волна от краёв к центру
|
effect_wave_edge_to_center=Волна от краёв к центру
|
||||||
btn_reset=Сбросить
|
btn_reset=Сбросить
|
||||||
|
tray_close=Закрыть
|
||||||
|
|
Loading…
Reference in a new issue