Add 'open recent configuration file on start' option.
Add opened file name to the main pane information label. Update screenshots Correct readme
This commit is contained in:
parent
9ed015db4d
commit
6e251348f3
13 changed files with 94 additions and 40 deletions
10
README.md
10
README.md
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
LogiLedus is a Logitech G513 Carbon GUI driver for adjusting backlight and effects.
|
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 1](screenshots/1.png)
|
||||||
![Screenshot 2](https://live.staticflickr.com/65535/48931873171_b00c4fd875_o.png)
|
![Screenshot 2](screenshots/2.png)
|
||||||
![Screenshot 3](https://live.staticflickr.com/65535/48931332563_72de8e93ed_o.png)
|
![Screenshot 3](screenshots/3.png)
|
||||||
|
|
||||||
#### License
|
#### License
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ Want to support development? Make a donation* (see below):
|
||||||
|
|
||||||
<a href="https://paypal.me/developersu" title="PayPal"><img src="https://www.paypalobjects.com/webstatic/mktg/Logo/pp-logo-100px.png" border="0" alt="PayPal Logo" /></a>
|
<a href="https://paypal.me/developersu" title="PayPal"><img src="https://www.paypalobjects.com/webstatic/mktg/Logo/pp-logo-100px.png" border="0" alt="PayPal Logo" /></a>
|
||||||
|
|
||||||
[Yandex.Money](https://money.yandex.ru/to/410014301951665)
|
[ЮMoney](https://yoomoney.ru/to/410014301951665)
|
||||||
|
|
||||||
*Please note: this is non-commercial application.
|
*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
|
* [ ] Tray support: tray icon size checks
|
||||||
* [ ] Autoload option in settings
|
* [ ] Autoload option in settings
|
||||||
* [ ] Headless mode (CLI)
|
* [ ] Headless mode (CLI)
|
||||||
* [ ] Add opened file name to info pane
|
* [x] Add opened file name to info pane
|
2
pom.xml
2
pom.xml
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>loper</groupId>
|
<groupId>loper</groupId>
|
||||||
<artifactId>LogiLedus</artifactId>
|
<artifactId>LogiLedus</artifactId>
|
||||||
<version>1.3-SNAPSHOT</version>
|
<version>1.4-SNAPSHOT</version>
|
||||||
|
|
||||||
<!-- <url></url> -->
|
<!-- <url></url> -->
|
||||||
<description>
|
<description>
|
||||||
|
|
BIN
screenshots/1.png
Normal file
BIN
screenshots/1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 100 KiB |
BIN
screenshots/2.png
Normal file
BIN
screenshots/2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
BIN
screenshots/3.png
Normal file
BIN
screenshots/3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 69 KiB |
|
@ -4,16 +4,17 @@ import java.util.prefs.Preferences;
|
||||||
|
|
||||||
// Rule application settings
|
// Rule application settings
|
||||||
public class AppPreferences {
|
public class AppPreferences {
|
||||||
|
private static final Preferences preferences = Preferences.userRoot().node("LogiLedus");
|
||||||
private Preferences preferences;
|
|
||||||
|
|
||||||
public AppPreferences(){
|
|
||||||
preferences = Preferences.userRoot().node("LogiLedus");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUseTray(boolean value){ preferences.putBoolean("USE_TRAY", value); }
|
public void setUseTray(boolean value){ preferences.putBoolean("USE_TRAY", value); }
|
||||||
public boolean getUseTray(){ return preferences.getBoolean("USE_TRAY", true); }
|
public boolean getUseTray(){ return preferences.getBoolean("USE_TRAY", true); }
|
||||||
|
|
||||||
public void setTheme(String value){ preferences.put("THEME", value); }
|
public void setTheme(String value){ preferences.put("THEME", value); }
|
||||||
public String getTheme(){ return preferences.get("THEME", "/light.css"); }
|
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); }
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,9 @@ import javafx.scene.control.*;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
|
import logiledus.*;
|
||||||
import logiledus.About.AboutWindow;
|
import logiledus.About.AboutWindow;
|
||||||
import logiledus.MessagesConsumer;
|
|
||||||
import logiledus.Config.SettingsFileFormat;
|
import logiledus.Config.SettingsFileFormat;
|
||||||
import logiledus.ServiceWindow;
|
|
||||||
import logiledus.Settings.SettingsWindow;
|
import logiledus.Settings.SettingsWindow;
|
||||||
import logiledus.USB.EffectsThread;
|
import logiledus.USB.EffectsThread;
|
||||||
import logiledus.USB.GameModeThread;
|
import logiledus.USB.GameModeThread;
|
||||||
|
@ -25,10 +24,8 @@ import java.util.ResourceBundle;
|
||||||
public class MainController implements Initializable {
|
public class MainController implements Initializable {
|
||||||
@FXML
|
@FXML
|
||||||
private KeysLedsController KeysLedsController;
|
private KeysLedsController KeysLedsController;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private EffectsController EffectsController;
|
private EffectsController EffectsController;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private GameModeController GameModeController;
|
private GameModeController GameModeController;
|
||||||
|
|
||||||
|
@ -52,13 +49,20 @@ public class MainController implements Initializable {
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle resourceBundle) {
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||||
this.rb = 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());
|
aboutBtn.setOnAction(actionEvent -> new AboutWindow());
|
||||||
settingsBtn.setOnAction(actionEvent -> new SettingsWindow());
|
settingsBtn.setOnAction(actionEvent -> new SettingsWindow());
|
||||||
MessagesConsumer.getInstance().setInstance(infoLbl);
|
MessagesConsumer.getInstance().setInstance(infoLbl);
|
||||||
MessagesConsumer.getInstance().start();
|
MessagesConsumer.getInstance().start();
|
||||||
|
|
||||||
openBtn.setOnAction(actionEvent -> openConfig());
|
openBtn.setOnAction(actionEvent -> openConfigButtonAction());
|
||||||
|
|
||||||
saveBtn.setOnAction(ActionEvent -> saveConfig(false));
|
saveBtn.setOnAction(ActionEvent -> saveConfig(false));
|
||||||
saveAsBtn.setOnAction(ActionEvent -> saveConfig(true));
|
saveAsBtn.setOnAction(ActionEvent -> saveConfig(true));
|
||||||
|
@ -97,12 +101,15 @@ public class MainController implements Initializable {
|
||||||
/**
|
/**
|
||||||
* For 'Open' button
|
* For 'Open' button
|
||||||
* */
|
* */
|
||||||
private void openConfig(){
|
private void openConfigButtonAction(){
|
||||||
File configFile = getOpenFileChooser();
|
File configFile = getOpenFileChooser();
|
||||||
if (configFile == null)
|
if (configFile == null)
|
||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
recentPath = configFile.getParentFile().getAbsolutePath();
|
recentPath = configFile.getParentFile().getAbsolutePath();
|
||||||
|
openConfig(configFile);
|
||||||
|
}
|
||||||
|
private void openConfig(File configFile){
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
SettingsFileFormat setup;
|
SettingsFileFormat setup;
|
||||||
try{
|
try{
|
||||||
|
@ -113,6 +120,7 @@ public class MainController implements Initializable {
|
||||||
GameModeController.setConfig(setup.getGameModeKeyCodes());
|
GameModeController.setConfig(setup.getGameModeKeyCodes());
|
||||||
|
|
||||||
openedConfigFile = configFile;
|
openedConfigFile = configFile;
|
||||||
|
infoLbl.setText(configFile.getAbsolutePath());
|
||||||
}
|
}
|
||||||
catch (IOException e){
|
catch (IOException e){
|
||||||
ServiceWindow.getErrorNotification(rb.getString("error_any_title"), rb.getString("error_any_body"));
|
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 fileChooser = new FileChooser();
|
||||||
fileChooser.setTitle(rb.getString("btn_save_as"));
|
fileChooser.setTitle(rb.getString("btn_save_as"));
|
||||||
fileChooser.setInitialFileName("keyboard settings.lcfg");
|
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){
|
if (recentPath != null){
|
||||||
File stat = new File(recentPath);
|
File stat = new File(recentPath);
|
||||||
|
@ -226,4 +234,12 @@ public class MainController implements Initializable {
|
||||||
|
|
||||||
return fileChooser.showSaveDialog(applyBtn.getScene().getWindow());
|
return fileChooser.showSaveDialog(applyBtn.getScene().getWindow());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void exit(){
|
||||||
|
AppPreferences preferences = new AppPreferences();
|
||||||
|
if (openedConfigFile == null)
|
||||||
|
preferences.setRecent("");
|
||||||
|
else
|
||||||
|
preferences.setRecent(openedConfigFile.getAbsolutePath());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
19
src/main/java/logiledus/FilesValidator.java
Normal file
19
src/main/java/logiledus/FilesValidator.java
Normal file
|
@ -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 "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ 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 logiledus.Controllers.MainController;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
|
@ -16,7 +17,7 @@ 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 = "v1.3";
|
public static final String appVersion = "v1.4";
|
||||||
|
|
||||||
private static boolean traySupport = true;
|
private static boolean traySupport = true;
|
||||||
|
|
||||||
|
@ -28,6 +29,9 @@ public class MainFx extends Application {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) throws Exception{
|
public void start(Stage primaryStage) throws Exception{
|
||||||
|
//if (! getParameters().getUnnamed().isEmpty())
|
||||||
|
// System.out.println(getParameters().getUnnamed().get(0));
|
||||||
|
|
||||||
AppPreferences appPreferences = new AppPreferences();
|
AppPreferences appPreferences = new AppPreferences();
|
||||||
if (traySupport) // By default it's enabled, but in case it disabled from CLI, don't touch.
|
if (traySupport) // By default it's enabled, but in case it disabled from CLI, don't touch.
|
||||||
traySupport = appPreferences.getUseTray(); // Otherwise, check against preferences
|
traySupport = appPreferences.getUseTray(); // Otherwise, check against preferences
|
||||||
|
@ -84,7 +88,11 @@ public class MainFx extends Application {
|
||||||
primaryStage.setScene(mainScene);
|
primaryStage.setScene(mainScene);
|
||||||
primaryStage.show();
|
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(){
|
private void addAppToTray(){
|
||||||
|
@ -144,19 +152,22 @@ public class MainFx extends Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
if ((args.length > 0)) {
|
if ((args.length > 0) && args[0].startsWith("-")){
|
||||||
if (args[0].equals("--no-tray")){
|
switch (args[0]){
|
||||||
traySupport = false;
|
case "--no-tray":
|
||||||
launch(args);
|
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("Usage: LogiLedus [KEY]\n" +
|
||||||
System.out.println("LogiLedus " + appVersion);
|
" -v, --version\tGet application version\n" +
|
||||||
else
|
" --no-tray\tDisable tray support");
|
||||||
System.out.println("Usage: LogiLedus [KEY]\n" +
|
return;
|
||||||
" -v, --version\tGet application version\n" +
|
|
||||||
" --no-tray\tDisable tray support");
|
|
||||||
}
|
}
|
||||||
else
|
launch(args);
|
||||||
launch(args);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import javafx.fxml.Initializable;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.CheckBox;
|
import javafx.scene.control.CheckBox;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
import logiledus.AppPreferences;
|
||||||
import logiledus.Mediator;
|
import logiledus.Mediator;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
@ -16,24 +17,27 @@ public class SettingsController implements Initializable {
|
||||||
private Button cancelBtn, okBtn;
|
private Button cancelBtn, okBtn;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private CheckBox trayCB, drkThemeCB;
|
private CheckBox trayCB, drkThemeCB, openRecentCB;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize(URL url, ResourceBundle resourceBundle) {
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||||
trayCB.setSelected(Mediator.getInstance().getPreferences().getUseTray());
|
AppPreferences preferences = Mediator.getInstance().getPreferences();
|
||||||
if (Mediator.getInstance().getPreferences().getTheme().equals("/dark.css"))
|
|
||||||
drkThemeCB.setSelected(true);
|
trayCB.setSelected(preferences.getUseTray());
|
||||||
|
openRecentCB.setSelected(preferences.getOpenRecentPlaylistOnStart());
|
||||||
|
drkThemeCB.setSelected(preferences.getTheme().equals("/dark.css"));
|
||||||
|
|
||||||
cancelBtn.setOnAction(actionEvent -> ((Stage) cancelBtn.getScene().getWindow()).close());
|
cancelBtn.setOnAction(actionEvent -> ((Stage) cancelBtn.getScene().getWindow()).close());
|
||||||
|
|
||||||
okBtn.setOnAction(actionEvent -> {
|
okBtn.setOnAction(actionEvent -> {
|
||||||
Mediator.getInstance().getPreferences().setUseTray(trayCB.isSelected());
|
preferences.setUseTray(trayCB.isSelected());
|
||||||
|
preferences.setOpenRecentPlaylistOnStart(openRecentCB.isSelected());
|
||||||
if (drkThemeCB.isSelected()) {
|
if (drkThemeCB.isSelected()) {
|
||||||
Mediator.getInstance().getPreferences().setTheme("/dark.css");
|
preferences.setTheme("/dark.css");
|
||||||
Mediator.getInstance().setTheme("/dark.css");
|
Mediator.getInstance().setTheme("/dark.css");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Mediator.getInstance().getPreferences().setTheme("/light.css");
|
preferences.setTheme("/light.css");
|
||||||
Mediator.getInstance().setTheme("/light.css");
|
Mediator.getInstance().setTheme("/light.css");
|
||||||
}
|
}
|
||||||
((Stage) cancelBtn.getScene().getWindow()).close();
|
((Stage) cancelBtn.getScene().getWindow()).close();
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
<children>
|
<children>
|
||||||
<CheckBox fx:id="trayCB" mnemonicParsing="false" text="%setting_tray_support" />
|
<CheckBox fx:id="trayCB" mnemonicParsing="false" text="%setting_tray_support" />
|
||||||
<CheckBox fx:id="drkThemeCB" mnemonicParsing="false" text="%setting_use_dark_theme" />
|
<CheckBox fx:id="drkThemeCB" mnemonicParsing="false" text="%setting_use_dark_theme" />
|
||||||
|
<CheckBox fx:id="openRecentCB" mnemonicParsing="false" text="%setting_open_recent_on_start" />
|
||||||
</children>
|
</children>
|
||||||
</VBox>
|
</VBox>
|
||||||
</center>
|
</center>
|
||||||
|
|
|
@ -706,3 +706,4 @@ setting_save_and_close=Save and close
|
||||||
setting_cancel=Cancel
|
setting_cancel=Cancel
|
||||||
open=Open
|
open=Open
|
||||||
setting_use_dark_theme=Use dark theme
|
setting_use_dark_theme=Use dark theme
|
||||||
|
setting_open_recent_on_start=Open recent configuration file on application start
|
||||||
|
|
|
@ -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
|
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
|
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_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
|
||||||
|
|
Loading…
Reference in a new issue