diff --git a/README.md b/README.md index 0022e35..32ddf0d 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ LogiLedus is a Logitech G513 Carbon GUI driver for adjusting backlight and effects. -![Screenshot 1](https://live.staticflickr.com/65535/48932060697_6f60cc4143_o.png) -![Screenshot 2](https://live.staticflickr.com/65535/48931873171_b00c4fd875_o.png) -![Screenshot 3](https://live.staticflickr.com/65535/48931332563_72de8e93ed_o.png) +![Screenshot 1](screenshots/1.png) +![Screenshot 2](screenshots/2.png) +![Screenshot 3](screenshots/3.png) #### License @@ -52,7 +52,7 @@ Want to support development? Make a donation* (see below): PayPal Logo -[Yandex.Money](https://money.yandex.ru/to/410014301951665) +[ЮMoney](https://yoomoney.ru/to/410014301951665) *Please note: this is non-commercial application. @@ -61,4 +61,4 @@ Want to support development? Make a donation* (see below): * [ ] Tray support: tray icon size checks * [ ] Autoload option in settings * [ ] Headless mode (CLI) -* [ ] Add opened file name to info pane \ No newline at end of file +* [x] Add opened file name to info pane \ No newline at end of file diff --git a/pom.xml b/pom.xml index 104a0b0..e47770b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ loper LogiLedus - 1.3-SNAPSHOT + 1.4-SNAPSHOT diff --git a/screenshots/1.png b/screenshots/1.png new file mode 100644 index 0000000..11cceeb Binary files /dev/null and b/screenshots/1.png differ diff --git a/screenshots/2.png b/screenshots/2.png new file mode 100644 index 0000000..957182a Binary files /dev/null and b/screenshots/2.png differ diff --git a/screenshots/3.png b/screenshots/3.png new file mode 100644 index 0000000..ba51e95 Binary files /dev/null and b/screenshots/3.png differ diff --git a/src/main/java/logiledus/AppPreferences.java b/src/main/java/logiledus/AppPreferences.java index bb8b58b..094cc7c 100644 --- a/src/main/java/logiledus/AppPreferences.java +++ b/src/main/java/logiledus/AppPreferences.java @@ -4,16 +4,17 @@ import java.util.prefs.Preferences; // Rule application settings public class AppPreferences { - - private Preferences preferences; - - public AppPreferences(){ - preferences = Preferences.userRoot().node("LogiLedus"); - } + private static final Preferences preferences = Preferences.userRoot().node("LogiLedus"); public void setUseTray(boolean value){ preferences.putBoolean("USE_TRAY", value); } public boolean getUseTray(){ return preferences.getBoolean("USE_TRAY", true); } public void setTheme(String value){ preferences.put("THEME", value); } public String getTheme(){ return preferences.get("THEME", "/light.css"); } + + public void setRecent(String value){ preferences.put("recent", value); } + public String getRecent(){ return preferences.get("recent", ""); } + + public void setOpenRecentPlaylistOnStart(boolean value){ preferences.putBoolean("auto_open_recent", value); } + public boolean getOpenRecentPlaylistOnStart(){ return preferences.getBoolean("auto_open_recent", true); } } diff --git a/src/main/java/logiledus/Controllers/MainController.java b/src/main/java/logiledus/Controllers/MainController.java index b6abca0..5a2aef9 100644 --- a/src/main/java/logiledus/Controllers/MainController.java +++ b/src/main/java/logiledus/Controllers/MainController.java @@ -7,10 +7,9 @@ import javafx.scene.control.*; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.stage.FileChooser; +import logiledus.*; import logiledus.About.AboutWindow; -import logiledus.MessagesConsumer; import logiledus.Config.SettingsFileFormat; -import logiledus.ServiceWindow; import logiledus.Settings.SettingsWindow; import logiledus.USB.EffectsThread; import logiledus.USB.GameModeThread; @@ -25,10 +24,8 @@ import java.util.ResourceBundle; public class MainController implements Initializable { @FXML private KeysLedsController KeysLedsController; - @FXML private EffectsController EffectsController; - @FXML private GameModeController GameModeController; @@ -52,13 +49,20 @@ public class MainController implements Initializable { @Override public void initialize(URL url, ResourceBundle resourceBundle) { this.rb = resourceBundle; + AppPreferences preferences = new AppPreferences(); + + if (preferences.getOpenRecentPlaylistOnStart()){ + String recentConfigFileAbsPath = FilesValidator.validate(preferences.getRecent()); + if (! recentConfigFileAbsPath.isEmpty()) + openConfig(new File(recentConfigFileAbsPath)); + } aboutBtn.setOnAction(actionEvent -> new AboutWindow()); settingsBtn.setOnAction(actionEvent -> new SettingsWindow()); MessagesConsumer.getInstance().setInstance(infoLbl); MessagesConsumer.getInstance().start(); - openBtn.setOnAction(actionEvent -> openConfig()); + openBtn.setOnAction(actionEvent -> openConfigButtonAction()); saveBtn.setOnAction(ActionEvent -> saveConfig(false)); saveAsBtn.setOnAction(ActionEvent -> saveConfig(true)); @@ -97,12 +101,15 @@ public class MainController implements Initializable { /** * For 'Open' button * */ - private void openConfig(){ + private void openConfigButtonAction(){ File configFile = getOpenFileChooser(); if (configFile == null) return; else recentPath = configFile.getParentFile().getAbsolutePath(); + openConfig(configFile); + } + private void openConfig(File configFile){ ObjectMapper mapper = new ObjectMapper(); SettingsFileFormat setup; try{ @@ -113,6 +120,7 @@ public class MainController implements Initializable { GameModeController.setConfig(setup.getGameModeKeyCodes()); openedConfigFile = configFile; + infoLbl.setText(configFile.getAbsolutePath()); } catch (IOException e){ ServiceWindow.getErrorNotification(rb.getString("error_any_title"), rb.getString("error_any_body")); @@ -216,7 +224,7 @@ public class MainController implements Initializable { FileChooser fileChooser = new FileChooser(); fileChooser.setTitle(rb.getString("btn_save_as")); fileChooser.setInitialFileName("keyboard settings.lcfg"); - fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("LogiLed config (*.lcfg)", "*.lcfg")); + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("LogiLedus config (*.lcfg)", "*.lcfg")); if (recentPath != null){ File stat = new File(recentPath); @@ -226,4 +234,12 @@ public class MainController implements Initializable { return fileChooser.showSaveDialog(applyBtn.getScene().getWindow()); } + + public void exit(){ + AppPreferences preferences = new AppPreferences(); + if (openedConfigFile == null) + preferences.setRecent(""); + else + preferences.setRecent(openedConfigFile.getAbsolutePath()); + } } diff --git a/src/main/java/logiledus/FilesValidator.java b/src/main/java/logiledus/FilesValidator.java new file mode 100644 index 0000000..9462c2f --- /dev/null +++ b/src/main/java/logiledus/FilesValidator.java @@ -0,0 +1,19 @@ +package logiledus; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class FilesValidator { + public static String validate(String fileAbsolutePath){ + try{ + Path locationAsPath = Paths.get(fileAbsolutePath); + if (Files.notExists(locationAsPath) || Files.isDirectory(locationAsPath)) + return ""; + return fileAbsolutePath; + } + catch (Exception ignored){ + return ""; + } + } +} diff --git a/src/main/java/logiledus/MainFx.java b/src/main/java/logiledus/MainFx.java index e0833f6..589b14d 100644 --- a/src/main/java/logiledus/MainFx.java +++ b/src/main/java/logiledus/MainFx.java @@ -7,6 +7,7 @@ import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.stage.Stage; +import logiledus.Controllers.MainController; import javax.imageio.ImageIO; import javax.swing.*; @@ -16,7 +17,7 @@ import java.util.Locale; import java.util.ResourceBundle; public class MainFx extends Application { - public static final String appVersion = "v1.3"; + public static final String appVersion = "v1.4"; private static boolean traySupport = true; @@ -28,6 +29,9 @@ public class MainFx extends Application { @Override public void start(Stage primaryStage) throws Exception{ + //if (! getParameters().getUnnamed().isEmpty()) + // System.out.println(getParameters().getUnnamed().get(0)); + AppPreferences appPreferences = new AppPreferences(); if (traySupport) // By default it's enabled, but in case it disabled from CLI, don't touch. traySupport = appPreferences.getUseTray(); // Otherwise, check against preferences @@ -84,7 +88,11 @@ public class MainFx extends Application { primaryStage.setScene(mainScene); primaryStage.show(); - primaryStage.setOnHidden(e->MessagesConsumer.getInstance().stop()); // Useless? + MainController controller = loader.getController(); + primaryStage.setOnHidden(e->{ + MessagesConsumer.getInstance().stop(); + controller.exit(); + }); // Useless? } private void addAppToTray(){ @@ -144,19 +152,22 @@ public class MainFx extends Application { } public static void main(String[] args) { - if ((args.length > 0)) { - if (args[0].equals("--no-tray")){ - traySupport = false; - launch(args); + if ((args.length > 0) && args[0].startsWith("-")){ + switch (args[0]){ + case "--no-tray": + traySupport = false; + launch(args); + return; + case "-v": + case "--version": + System.out.println("LogiLedus " + appVersion); + return; } - if (args[0].equals("-v") || args[0].equals("--version")) - System.out.println("LogiLedus " + appVersion); - else - System.out.println("Usage: LogiLedus [KEY]\n" + - " -v, --version\tGet application version\n" + - " --no-tray\tDisable tray support"); + System.out.println("Usage: LogiLedus [KEY]\n" + + " -v, --version\tGet application version\n" + + " --no-tray\tDisable tray support"); + return; } - else - launch(args); + launch(args); } } diff --git a/src/main/java/logiledus/Settings/SettingsController.java b/src/main/java/logiledus/Settings/SettingsController.java index 3992ea2..1fb1380 100644 --- a/src/main/java/logiledus/Settings/SettingsController.java +++ b/src/main/java/logiledus/Settings/SettingsController.java @@ -5,6 +5,7 @@ import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.stage.Stage; +import logiledus.AppPreferences; import logiledus.Mediator; import java.net.URL; @@ -16,24 +17,27 @@ public class SettingsController implements Initializable { private Button cancelBtn, okBtn; @FXML - private CheckBox trayCB, drkThemeCB; + private CheckBox trayCB, drkThemeCB, openRecentCB; @Override public void initialize(URL url, ResourceBundle resourceBundle) { - trayCB.setSelected(Mediator.getInstance().getPreferences().getUseTray()); - if (Mediator.getInstance().getPreferences().getTheme().equals("/dark.css")) - drkThemeCB.setSelected(true); + AppPreferences preferences = Mediator.getInstance().getPreferences(); + + trayCB.setSelected(preferences.getUseTray()); + openRecentCB.setSelected(preferences.getOpenRecentPlaylistOnStart()); + drkThemeCB.setSelected(preferences.getTheme().equals("/dark.css")); cancelBtn.setOnAction(actionEvent -> ((Stage) cancelBtn.getScene().getWindow()).close()); okBtn.setOnAction(actionEvent -> { - Mediator.getInstance().getPreferences().setUseTray(trayCB.isSelected()); + preferences.setUseTray(trayCB.isSelected()); + preferences.setOpenRecentPlaylistOnStart(openRecentCB.isSelected()); if (drkThemeCB.isSelected()) { - Mediator.getInstance().getPreferences().setTheme("/dark.css"); + preferences.setTheme("/dark.css"); Mediator.getInstance().setTheme("/dark.css"); } else { - Mediator.getInstance().getPreferences().setTheme("/light.css"); + preferences.setTheme("/light.css"); Mediator.getInstance().setTheme("/light.css"); } ((Stage) cancelBtn.getScene().getWindow()).close(); diff --git a/src/main/resources/SettingsLayout.fxml b/src/main/resources/SettingsLayout.fxml index 36b5d57..b6aa8e9 100644 --- a/src/main/resources/SettingsLayout.fxml +++ b/src/main/resources/SettingsLayout.fxml @@ -21,6 +21,7 @@ + diff --git a/src/main/resources/locale.properties b/src/main/resources/locale.properties index b45ac2c..64c5e4e 100644 --- a/src/main/resources/locale.properties +++ b/src/main/resources/locale.properties @@ -706,3 +706,4 @@ setting_save_and_close=Save and close setting_cancel=Cancel open=Open setting_use_dark_theme=Use dark theme +setting_open_recent_on_start=Open recent configuration file on application start diff --git a/src/main/resources/locale_rus.properties b/src/main/resources/locale_rus.properties index 3a95332..5dd083e 100644 --- a/src/main/resources/locale_rus.properties +++ b/src/main/resources/locale_rus.properties @@ -32,3 +32,4 @@ setting_cancel=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C setting_save_and_close=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0438 \u0437\u0430\u043A\u0440\u044B\u0442\u044C open=\u041E\u0442\u043A\u0440\u044B\u0442\u044C setting_use_dark_theme=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0442\u0451\u043C\u043D\u0443\u044E \u0442\u0435\u043C\u0443 +setting_open_recent_on_start=\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u0444\u0430\u0439\u043B \u043F\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F