v0.4.1:
Code refactoring Updating checks functionality changes: avoid new version pop-ups for special builds (versions that have -DEV postfixes)
This commit is contained in:
parent
5fdeb7910f
commit
ee40d2f6ce
8 changed files with 204 additions and 147 deletions
122
src/main/java/nsusbloader/Controllers/FrontController.java
Normal file
122
src/main/java/nsusbloader/Controllers/FrontController.java
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
package nsusbloader.Controllers;
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.fxml.Initializable;
|
||||||
|
import javafx.scene.control.*;
|
||||||
|
import javafx.scene.layout.Pane;
|
||||||
|
import javafx.scene.layout.Region;
|
||||||
|
import nsusbloader.AppPreferences;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
|
public class FrontController implements Initializable {
|
||||||
|
@FXML
|
||||||
|
private Pane specialPane;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private ChoiceBox<String> choiceProtocol, choiceNetUsb;
|
||||||
|
@FXML
|
||||||
|
private Label nsIpLbl;
|
||||||
|
@FXML
|
||||||
|
private TextField nsIpTextField;
|
||||||
|
@FXML
|
||||||
|
private Button switchThemeBtn;
|
||||||
|
@FXML
|
||||||
|
public NSTableViewController tableFilesListController; // Accessible from Mediator
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(URL url, ResourceBundle resourceBundle) {
|
||||||
|
specialPane.getStyleClass().add("special-pane-as-border"); // UI hacks
|
||||||
|
|
||||||
|
ObservableList<String> choiceProtocolList = FXCollections.observableArrayList("TinFoil", "GoldLeaf");
|
||||||
|
choiceProtocol.setItems(choiceProtocolList);
|
||||||
|
choiceProtocol.getSelectionModel().select(AppPreferences.getInstance().getProtocol());
|
||||||
|
choiceProtocol.setOnAction(e-> {
|
||||||
|
tableFilesListController.setNewProtocol(choiceProtocol.getSelectionModel().getSelectedItem());
|
||||||
|
if (choiceProtocol.getSelectionModel().getSelectedItem().equals("GoldLeaf")) {
|
||||||
|
choiceNetUsb.setDisable(true);
|
||||||
|
choiceNetUsb.getSelectionModel().select("USB");
|
||||||
|
nsIpLbl.setVisible(false);
|
||||||
|
nsIpTextField.setVisible(false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
choiceNetUsb.setDisable(false);
|
||||||
|
if (choiceNetUsb.getSelectionModel().getSelectedItem().equals("NET")) {
|
||||||
|
nsIpLbl.setVisible(true);
|
||||||
|
nsIpTextField.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}); // Add listener to notify tableView controller
|
||||||
|
tableFilesListController.setNewProtocol(choiceProtocol.getSelectionModel().getSelectedItem()); // Notify tableView controller
|
||||||
|
|
||||||
|
ObservableList<String> choiceNetUsbList = FXCollections.observableArrayList("USB", "NET");
|
||||||
|
choiceNetUsb.setItems(choiceNetUsbList);
|
||||||
|
choiceNetUsb.getSelectionModel().select(AppPreferences.getInstance().getNetUsb());
|
||||||
|
if (choiceProtocol.getSelectionModel().getSelectedItem().equals("GoldLeaf")) {
|
||||||
|
choiceNetUsb.setDisable(true);
|
||||||
|
choiceNetUsb.getSelectionModel().select("USB");
|
||||||
|
}
|
||||||
|
choiceNetUsb.setOnAction(e->{
|
||||||
|
if (choiceNetUsb.getSelectionModel().getSelectedItem().equals("NET")){
|
||||||
|
nsIpLbl.setVisible(true);
|
||||||
|
nsIpTextField.setVisible(true);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
nsIpLbl.setVisible(false);
|
||||||
|
nsIpTextField.setVisible(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Set and configure NS IP field behavior
|
||||||
|
nsIpTextField.setText(AppPreferences.getInstance().getNsIp());
|
||||||
|
if (choiceProtocol.getSelectionModel().getSelectedItem().equals("TinFoil") && choiceNetUsb.getSelectionModel().getSelectedItem().equals("NET")){
|
||||||
|
nsIpLbl.setVisible(true);
|
||||||
|
nsIpTextField.setVisible(true);
|
||||||
|
}
|
||||||
|
nsIpTextField.setTextFormatter(new TextFormatter<>(change -> {
|
||||||
|
if (change.getControlNewText().contains(" ") | change.getControlNewText().contains("\t"))
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
return change;
|
||||||
|
}));
|
||||||
|
// Set and configure switch theme button
|
||||||
|
Region btnSwitchImage = new Region();
|
||||||
|
btnSwitchImage.getStyleClass().add("regionLamp");
|
||||||
|
switchThemeBtn.setGraphic(btnSwitchImage);
|
||||||
|
this.switchThemeBtn.setOnAction(e->switchTheme());
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Changes UI theme on the go
|
||||||
|
* */
|
||||||
|
private void switchTheme(){
|
||||||
|
if (switchThemeBtn.getScene().getStylesheets().get(0).equals("/res/app_dark.css")) {
|
||||||
|
switchThemeBtn.getScene().getStylesheets().remove("/res/app_dark.css");
|
||||||
|
switchThemeBtn.getScene().getStylesheets().add("/res/app_light.css");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
switchThemeBtn.getScene().getStylesheets().remove("/res/app_light.css");
|
||||||
|
switchThemeBtn.getScene().getStylesheets().add("/res/app_dark.css");
|
||||||
|
}
|
||||||
|
AppPreferences.getInstance().setTheme(switchThemeBtn.getScene().getStylesheets().get(0));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get selected protocol (GL/TF)
|
||||||
|
* */
|
||||||
|
String getSelectedProtocol(){
|
||||||
|
return choiceProtocol.getSelectionModel().getSelectedItem();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get selected protocol (USB/NET)
|
||||||
|
* */
|
||||||
|
String getSelectedNetUsb(){
|
||||||
|
return choiceNetUsb.getSelectionModel().getSelectedItem();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get NS IP address
|
||||||
|
* */
|
||||||
|
String getNsIp(){
|
||||||
|
return nsIpTextField.getText();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,15 +1,12 @@
|
||||||
package nsusbloader.Controllers;
|
package nsusbloader.Controllers;
|
||||||
|
|
||||||
import javafx.application.HostServices;
|
import javafx.application.HostServices;
|
||||||
import javafx.collections.FXCollections;
|
|
||||||
import javafx.collections.ObservableList;
|
|
||||||
import javafx.concurrent.Task;
|
import javafx.concurrent.Task;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
import javafx.scene.input.DragEvent;
|
import javafx.scene.input.DragEvent;
|
||||||
import javafx.scene.input.TransferMode;
|
import javafx.scene.input.TransferMode;
|
||||||
import javafx.scene.layout.Pane;
|
|
||||||
import javafx.scene.layout.Region;
|
import javafx.scene.layout.Region;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import nsusbloader.*;
|
import nsusbloader.*;
|
||||||
|
@ -36,22 +33,11 @@ public class NSLMainController implements Initializable {
|
||||||
private Region btnUpStopImage;
|
private Region btnUpStopImage;
|
||||||
@FXML
|
@FXML
|
||||||
public ProgressBar progressBar; // Accessible from Mediator
|
public ProgressBar progressBar; // Accessible from Mediator
|
||||||
@FXML
|
|
||||||
private ChoiceBox<String> choiceProtocol, choiceNetUsb;
|
|
||||||
@FXML
|
|
||||||
private Button switchThemeBtn;
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
private Pane specialPane;
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
public NSTableViewController tableFilesListController; // Accessible from Mediator
|
|
||||||
@FXML
|
@FXML
|
||||||
private SettingsController SettingsTabController;
|
private SettingsController SettingsTabController;
|
||||||
@FXML
|
@FXML
|
||||||
private TextField nsIpTextField;
|
public FrontController FrontTabController; // Accessible from Mediator | todo: incapsulate
|
||||||
@FXML
|
|
||||||
private Label nsIpLbl;
|
|
||||||
|
|
||||||
private Task<Void> usbNetCommunications;
|
private Task<Void> usbNetCommunications;
|
||||||
private Thread workThread;
|
private Thread workThread;
|
||||||
|
@ -70,8 +56,6 @@ public class NSLMainController implements Initializable {
|
||||||
|
|
||||||
MediatorControl.getInstance().setController(this);
|
MediatorControl.getInstance().setController(this);
|
||||||
|
|
||||||
specialPane.getStyleClass().add("special-pane-as-border"); // UI hacks
|
|
||||||
|
|
||||||
uploadStopBtn.setDisable(true);
|
uploadStopBtn.setDisable(true);
|
||||||
selectNspBtn.setOnAction(e->{ selectFilesBtnAction(); });
|
selectNspBtn.setOnAction(e->{ selectFilesBtnAction(); });
|
||||||
uploadStopBtn.setOnAction(e->{ uploadBtnAction(); });
|
uploadStopBtn.setOnAction(e->{ uploadBtnAction(); });
|
||||||
|
@ -80,67 +64,11 @@ public class NSLMainController implements Initializable {
|
||||||
|
|
||||||
this.btnUpStopImage = new Region();
|
this.btnUpStopImage = new Region();
|
||||||
btnUpStopImage.getStyleClass().add("regionUpload");
|
btnUpStopImage.getStyleClass().add("regionUpload");
|
||||||
//uploadStopBtn.getStyleClass().remove("button");
|
|
||||||
uploadStopBtn.getStyleClass().add("buttonUp");
|
uploadStopBtn.getStyleClass().add("buttonUp");
|
||||||
uploadStopBtn.setGraphic(btnUpStopImage);
|
uploadStopBtn.setGraphic(btnUpStopImage);
|
||||||
|
|
||||||
ObservableList<String> choiceProtocolList = FXCollections.observableArrayList("TinFoil", "GoldLeaf");
|
this.previouslyOpenedPath = AppPreferences.getInstance().getRecent();
|
||||||
choiceProtocol.setItems(choiceProtocolList);
|
|
||||||
choiceProtocol.getSelectionModel().select(AppPreferences.getInstance().getProtocol());
|
|
||||||
choiceProtocol.setOnAction(e-> {
|
|
||||||
tableFilesListController.setNewProtocol(choiceProtocol.getSelectionModel().getSelectedItem());
|
|
||||||
if (choiceProtocol.getSelectionModel().getSelectedItem().equals("GoldLeaf")) {
|
|
||||||
choiceNetUsb.setDisable(true);
|
|
||||||
choiceNetUsb.getSelectionModel().select("USB");
|
|
||||||
nsIpLbl.setVisible(false);
|
|
||||||
nsIpTextField.setVisible(false);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
choiceNetUsb.setDisable(false);
|
|
||||||
if (choiceNetUsb.getSelectionModel().getSelectedItem().equals("NET")) {
|
|
||||||
nsIpLbl.setVisible(true);
|
|
||||||
nsIpTextField.setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}); // Add listener to notify tableView controller
|
|
||||||
tableFilesListController.setNewProtocol(choiceProtocol.getSelectionModel().getSelectedItem()); // Notify tableView controller
|
|
||||||
|
|
||||||
ObservableList<String> choiceNetUsbList = FXCollections.observableArrayList("USB", "NET");
|
|
||||||
choiceNetUsb.setItems(choiceNetUsbList);
|
|
||||||
choiceNetUsb.getSelectionModel().select(AppPreferences.getInstance().getNetUsb());
|
|
||||||
if (choiceProtocol.getSelectionModel().getSelectedItem().equals("GoldLeaf")) {
|
|
||||||
choiceNetUsb.setDisable(true);
|
|
||||||
choiceNetUsb.getSelectionModel().select("USB");
|
|
||||||
}
|
|
||||||
choiceNetUsb.setOnAction(e->{
|
|
||||||
if (choiceNetUsb.getSelectionModel().getSelectedItem().equals("NET")){
|
|
||||||
nsIpLbl.setVisible(true);
|
|
||||||
nsIpTextField.setVisible(true);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
nsIpLbl.setVisible(false);
|
|
||||||
nsIpTextField.setVisible(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
nsIpTextField.setText(AppPreferences.getInstance().getNsIp());
|
|
||||||
if (choiceProtocol.getSelectionModel().getSelectedItem().equals("TinFoil") && choiceNetUsb.getSelectionModel().getSelectedItem().equals("NET")){
|
|
||||||
nsIpLbl.setVisible(true);
|
|
||||||
nsIpTextField.setVisible(true);
|
|
||||||
}
|
|
||||||
nsIpTextField.setTextFormatter(new TextFormatter<>(change -> {
|
|
||||||
if (change.getControlNewText().contains(" ") | change.getControlNewText().contains("\t"))
|
|
||||||
return null;
|
|
||||||
else
|
|
||||||
return change;
|
|
||||||
}));
|
|
||||||
this.previouslyOpenedPath = null;
|
|
||||||
|
|
||||||
Region btnSwitchImage = new Region();
|
|
||||||
btnSwitchImage.getStyleClass().add("regionLamp");
|
|
||||||
switchThemeBtn.setGraphic(btnSwitchImage);
|
|
||||||
this.switchThemeBtn.setOnAction(e->switchTheme());
|
|
||||||
|
|
||||||
previouslyOpenedPath = AppPreferences.getInstance().getRecent();
|
|
||||||
|
|
||||||
if (AppPreferences.getInstance().getAutoCheckUpdates()){
|
if (AppPreferences.getInstance().getAutoCheckUpdates()){
|
||||||
Task<List<String>> updTask = new UpdatesChecker();
|
Task<List<String>> updTask = new UpdatesChecker();
|
||||||
|
@ -164,20 +92,7 @@ public class NSLMainController implements Initializable {
|
||||||
* Provide hostServices to Settings tab
|
* Provide hostServices to Settings tab
|
||||||
* */
|
* */
|
||||||
public void setHostServices(HostServices hs ){ SettingsTabController.registerHostServices(hs);}
|
public void setHostServices(HostServices hs ){ SettingsTabController.registerHostServices(hs);}
|
||||||
/**
|
|
||||||
* Changes UI theme on the go
|
|
||||||
* */
|
|
||||||
private void switchTheme(){
|
|
||||||
if (switchThemeBtn.getScene().getStylesheets().get(0).equals("/res/app_dark.css")) {
|
|
||||||
switchThemeBtn.getScene().getStylesheets().remove("/res/app_dark.css");
|
|
||||||
switchThemeBtn.getScene().getStylesheets().add("/res/app_light.css");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
switchThemeBtn.getScene().getStylesheets().remove("/res/app_light.css");
|
|
||||||
switchThemeBtn.getScene().getStylesheets().add("/res/app_dark.css");
|
|
||||||
}
|
|
||||||
AppPreferences.getInstance().setTheme(switchThemeBtn.getScene().getStylesheets().get(0));
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Functionality for selecting NSP button.
|
* Functionality for selecting NSP button.
|
||||||
* Uses setReady and setNotReady to simplify code readability.
|
* Uses setReady and setNotReady to simplify code readability.
|
||||||
|
@ -189,15 +104,15 @@ public class NSLMainController implements Initializable {
|
||||||
|
|
||||||
File validator = new File(previouslyOpenedPath);
|
File validator = new File(previouslyOpenedPath);
|
||||||
if (validator.exists())
|
if (validator.exists())
|
||||||
fileChooser.setInitialDirectory(validator); // TODO: read from prefs
|
fileChooser.setInitialDirectory(validator);
|
||||||
else
|
else
|
||||||
fileChooser.setInitialDirectory(new File(System.getProperty("user.home"))); // TODO: read from prefs
|
fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));
|
||||||
|
|
||||||
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("NSP ROM", "*.nsp"));
|
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("NSP ROM", "*.nsp"));
|
||||||
|
|
||||||
filesList = fileChooser.showOpenMultipleDialog(logArea.getScene().getWindow());
|
filesList = fileChooser.showOpenMultipleDialog(logArea.getScene().getWindow());
|
||||||
if (filesList != null && !filesList.isEmpty()) {
|
if (filesList != null && !filesList.isEmpty()) {
|
||||||
tableFilesListController.setFiles(filesList);
|
FrontTabController.tableFilesListController.setFiles(filesList);
|
||||||
uploadStopBtn.setDisable(false);
|
uploadStopBtn.setDisable(false);
|
||||||
previouslyOpenedPath = filesList.get(0).getParent();
|
previouslyOpenedPath = filesList.get(0).getParent();
|
||||||
}
|
}
|
||||||
|
@ -209,7 +124,7 @@ public class NSLMainController implements Initializable {
|
||||||
if ((workThread == null || !workThread.isAlive())){
|
if ((workThread == null || !workThread.isAlive())){
|
||||||
// Collect files
|
// Collect files
|
||||||
List<File> nspToUpload;
|
List<File> nspToUpload;
|
||||||
if ((nspToUpload = tableFilesListController.getFilesForUpload()) == null) {
|
if ((nspToUpload = FrontTabController.tableFilesListController.getFilesForUpload()) == null) {
|
||||||
logArea.setText(resourceBundle.getString("logsNoFolderFileSelected"));
|
logArea.setText(resourceBundle.getString("logsNoFolderFileSelected"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -219,23 +134,23 @@ public class NSLMainController implements Initializable {
|
||||||
logArea.appendText(" "+item.getAbsolutePath()+"\n");
|
logArea.appendText(" "+item.getAbsolutePath()+"\n");
|
||||||
}
|
}
|
||||||
// If USB selected
|
// If USB selected
|
||||||
if (choiceProtocol.getSelectionModel().getSelectedItem().equals("GoldLeaf") ||
|
if (FrontTabController.getSelectedProtocol().equals("GoldLeaf") ||
|
||||||
(
|
(
|
||||||
choiceProtocol.getSelectionModel().getSelectedItem().equals("TinFoil")
|
FrontTabController.getSelectedProtocol().equals("TinFoil")
|
||||||
&& choiceNetUsb.getSelectionModel().getSelectedItem().equals("USB")
|
&& FrontTabController.getSelectedNetUsb().equals("USB")
|
||||||
)
|
)
|
||||||
){
|
){
|
||||||
usbNetCommunications = new UsbCommunications(nspToUpload, choiceProtocol.getSelectionModel().getSelectedItem());
|
usbNetCommunications = new UsbCommunications(nspToUpload, FrontTabController.getSelectedProtocol());
|
||||||
workThread = new Thread(usbNetCommunications);
|
workThread = new Thread(usbNetCommunications);
|
||||||
workThread.setDaemon(true);
|
workThread.setDaemon(true);
|
||||||
workThread.start();
|
workThread.start();
|
||||||
}
|
}
|
||||||
else { // NET INSTALL OVER TINFOIL
|
else { // NET INSTALL OVER TINFOIL
|
||||||
if (SettingsTabController.isNsIpValidate() && !nsIpTextField.getText().matches("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"))
|
if (SettingsTabController.isNsIpValidate() && ! FrontTabController.getNsIp().matches("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"))
|
||||||
if (!ServiceWindow.getConfirmationWindow(resourceBundle.getString("windowTitleBadIp"),resourceBundle.getString("windowBodyBadIp")))
|
if (!ServiceWindow.getConfirmationWindow(resourceBundle.getString("windowTitleBadIp"),resourceBundle.getString("windowBodyBadIp")))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
String nsIP = nsIpTextField.getText();
|
String nsIP = FrontTabController.getNsIp();
|
||||||
|
|
||||||
if (!SettingsTabController.getExpertModeSelected())
|
if (!SettingsTabController.getExpertModeSelected())
|
||||||
usbNetCommunications = new NETCommunications(nspToUpload, nsIP, false, "", "", "");
|
usbNetCommunications = new NETCommunications(nspToUpload, nsIP, false, "", "", "");
|
||||||
|
@ -261,7 +176,7 @@ public class NSLMainController implements Initializable {
|
||||||
* */
|
* */
|
||||||
private void stopBtnAction(){
|
private void stopBtnAction(){
|
||||||
if (workThread != null && workThread.isAlive()){
|
if (workThread != null && workThread.isAlive()){
|
||||||
usbNetCommunications.cancel(false); // TODO: add something abstract to use also for network
|
usbNetCommunications.cancel(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -332,19 +247,19 @@ public class NSLMainController implements Initializable {
|
||||||
se.printStackTrace();
|
se.printStackTrace();
|
||||||
}
|
}
|
||||||
if (!filesDropped.isEmpty())
|
if (!filesDropped.isEmpty())
|
||||||
tableFilesListController.setFiles(filesDropped);
|
FrontTabController.tableFilesListController.setFiles(filesDropped);
|
||||||
|
|
||||||
event.setDropCompleted(true);
|
event.setDropCompleted(true);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Save preferences before exit
|
* Save preferences before exit
|
||||||
* */
|
* */
|
||||||
public void exit(){ // TODO: add method to set all in AppPreferences
|
public void exit(){
|
||||||
AppPreferences.getInstance().setAll(
|
AppPreferences.getInstance().setAll(
|
||||||
choiceProtocol.getSelectionModel().getSelectedItem(),
|
FrontTabController.getSelectedProtocol(),
|
||||||
previouslyOpenedPath,
|
previouslyOpenedPath,
|
||||||
choiceNetUsb.getSelectionModel().getSelectedItem(),
|
FrontTabController.getSelectedNetUsb(),
|
||||||
nsIpTextField.getText().trim(),
|
FrontTabController.getNsIp(),
|
||||||
SettingsTabController.isNsIpValidate(),
|
SettingsTabController.isNsIpValidate(),
|
||||||
SettingsTabController.getExpertModeSelected(),
|
SettingsTabController.getExpertModeSelected(),
|
||||||
SettingsTabController.getAutoIpSelected(),
|
SettingsTabController.getAutoIpSelected(),
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class MessagesConsumer extends AnimationTimer {
|
||||||
this.progressBar = MediatorControl.getInstance().getContoller().progressBar;
|
this.progressBar = MediatorControl.getInstance().getContoller().progressBar;
|
||||||
|
|
||||||
this.statusMap = statusMap;
|
this.statusMap = statusMap;
|
||||||
this.tableViewController = MediatorControl.getInstance().getContoller().tableFilesListController;
|
this.tableViewController = MediatorControl.getInstance().getContoller().FrontTabController.tableFilesListController;
|
||||||
|
|
||||||
progressBar.setProgress(0.0);
|
progressBar.setProgress(0.0);
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,14 @@ public class UpdatesChecker extends Task<List<String>> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String currentVersion;
|
||||||
|
if (NSLMain.appVersion.matches("^v(([0-9])+?\\.)+[0-9]+(-.+)$")) // if current version have postfix like v0.1-Experimental
|
||||||
|
currentVersion = NSLMain.appVersion.replaceAll("(-.*$)", ""); // cut postfix
|
||||||
|
else
|
||||||
|
currentVersion = NSLMain.appVersion;
|
||||||
|
|
||||||
List<String> returningValue = new ArrayList<>();
|
List<String> returningValue = new ArrayList<>();
|
||||||
if (!newVersion.equals(NSLMain.appVersion)) { // if latest noted version in GitHub is different to this version
|
if (!newVersion.equals(currentVersion)) { // if latest noted version in GitHub is different to this version
|
||||||
returningValue.add(newVersion);
|
returningValue.add(newVersion);
|
||||||
returningValue.add(changeLog);
|
returningValue.add(changeLog);
|
||||||
return returningValue;
|
return returningValue;
|
||||||
|
|
|
@ -12,7 +12,7 @@ import java.util.Locale;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
public class NSLMain extends Application {
|
public class NSLMain extends Application {
|
||||||
public static final String appVersion = "v0.4";
|
public static final String appVersion = "v0.4.1";
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) throws Exception{
|
public void start(Stage primaryStage) throws Exception{
|
||||||
|
|
||||||
|
|
|
@ -456,7 +456,7 @@ public class UsbCommunications extends Task<Void> {
|
||||||
* GoldLeaf processing
|
* GoldLeaf processing
|
||||||
* */
|
* */
|
||||||
private class GoldLeaf{
|
private class GoldLeaf{
|
||||||
// CMD G L U C ID 0 0 0
|
// CMD G L U C
|
||||||
private final byte[] CMD_GLUC = new byte[]{0x47, 0x4c, 0x55, 0x43};
|
private final byte[] CMD_GLUC = new byte[]{0x47, 0x4c, 0x55, 0x43};
|
||||||
private final byte[] CMD_ConnectionRequest = new byte[]{0x00, 0x00, 0x00, 0x00}; // Write-only command
|
private final byte[] CMD_ConnectionRequest = new byte[]{0x00, 0x00, 0x00, 0x00}; // Write-only command
|
||||||
private final byte[] CMD_NSPName = new byte[]{0x02, 0x00, 0x00, 0x00}; // Write-only command
|
private final byte[] CMD_NSPName = new byte[]{0x02, 0x00, 0x00, 0x00}; // Write-only command
|
||||||
|
|
51
src/main/resources/FrontTab.fxml
Normal file
51
src/main/resources/FrontTab.fxml
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.geometry.Insets?>
|
||||||
|
<?import javafx.scene.control.Button?>
|
||||||
|
<?import javafx.scene.control.ChoiceBox?>
|
||||||
|
<?import javafx.scene.control.Label?>
|
||||||
|
<?import javafx.scene.control.TextField?>
|
||||||
|
<?import javafx.scene.control.ToolBar?>
|
||||||
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
|
<?import javafx.scene.layout.ColumnConstraints?>
|
||||||
|
<?import javafx.scene.layout.GridPane?>
|
||||||
|
<?import javafx.scene.layout.HBox?>
|
||||||
|
<?import javafx.scene.layout.Pane?>
|
||||||
|
<?import javafx.scene.layout.RowConstraints?>
|
||||||
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
|
||||||
|
<AnchorPane xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="nsusbloader.Controllers.FrontController">
|
||||||
|
<children>
|
||||||
|
<VBox layoutX="10.0" layoutY="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
|
<children>
|
||||||
|
<ToolBar>
|
||||||
|
<items>
|
||||||
|
<ChoiceBox fx:id="choiceProtocol" prefWidth="120.0" />
|
||||||
|
<ChoiceBox fx:id="choiceNetUsb" prefWidth="75.0" />
|
||||||
|
<Label fx:id="nsIpLbl" text="%NSIPlable" visible="false" />
|
||||||
|
<TextField fx:id="nsIpTextField" prefWidth="135.0" promptText="XXX.XXX.XXX.XXX" visible="false" />
|
||||||
|
<Pane HBox.hgrow="ALWAYS" />
|
||||||
|
<Button fx:id="switchThemeBtn" mnemonicParsing="false" />
|
||||||
|
</items>
|
||||||
|
</ToolBar>
|
||||||
|
<GridPane>
|
||||||
|
<columnConstraints>
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" percentWidth="90.0" />
|
||||||
|
<ColumnConstraints hgrow="SOMETIMES" />
|
||||||
|
</columnConstraints>
|
||||||
|
<rowConstraints>
|
||||||
|
<RowConstraints vgrow="SOMETIMES" />
|
||||||
|
</rowConstraints>
|
||||||
|
<children>
|
||||||
|
<Pane fx:id="specialPane" GridPane.columnIndex="1" />
|
||||||
|
</children>
|
||||||
|
<VBox.margin>
|
||||||
|
<Insets bottom="2.0" />
|
||||||
|
</VBox.margin>
|
||||||
|
</GridPane>
|
||||||
|
<fx:include fx:id="tableFilesList" source="TableView.fxml" />
|
||||||
|
</children>
|
||||||
|
</VBox>
|
||||||
|
</children>
|
||||||
|
</AnchorPane>
|
|
@ -2,20 +2,13 @@
|
||||||
|
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.control.Button?>
|
<?import javafx.scene.control.Button?>
|
||||||
<?import javafx.scene.control.ChoiceBox?>
|
|
||||||
<?import javafx.scene.control.Label?>
|
|
||||||
<?import javafx.scene.control.ProgressBar?>
|
<?import javafx.scene.control.ProgressBar?>
|
||||||
<?import javafx.scene.control.Tab?>
|
<?import javafx.scene.control.Tab?>
|
||||||
<?import javafx.scene.control.TabPane?>
|
<?import javafx.scene.control.TabPane?>
|
||||||
<?import javafx.scene.control.TextArea?>
|
<?import javafx.scene.control.TextArea?>
|
||||||
<?import javafx.scene.control.TextField?>
|
|
||||||
<?import javafx.scene.control.ToolBar?>
|
|
||||||
<?import javafx.scene.layout.AnchorPane?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
<?import javafx.scene.layout.ColumnConstraints?>
|
|
||||||
<?import javafx.scene.layout.GridPane?>
|
|
||||||
<?import javafx.scene.layout.HBox?>
|
<?import javafx.scene.layout.HBox?>
|
||||||
<?import javafx.scene.layout.Pane?>
|
<?import javafx.scene.layout.Pane?>
|
||||||
<?import javafx.scene.layout.RowConstraints?>
|
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
<?import javafx.scene.shape.SVGPath?>
|
<?import javafx.scene.shape.SVGPath?>
|
||||||
|
|
||||||
|
@ -27,37 +20,7 @@
|
||||||
<tabs>
|
<tabs>
|
||||||
<Tab closable="false">
|
<Tab closable="false">
|
||||||
<content>
|
<content>
|
||||||
<VBox prefHeight="200.0" prefWidth="100.0">
|
<fx:include fx:id="FrontTab" source="FrontTab.fxml" VBox.vgrow="ALWAYS" />
|
||||||
<children>
|
|
||||||
<ToolBar>
|
|
||||||
<items>
|
|
||||||
<ChoiceBox fx:id="choiceProtocol" prefWidth="120.0" />
|
|
||||||
<ChoiceBox fx:id="choiceNetUsb" prefWidth="75.0" />
|
|
||||||
<Label fx:id="nsIpLbl" text="%NSIPlable" visible="false" />
|
|
||||||
<TextField fx:id="nsIpTextField" prefWidth="135.0" promptText="XXX.XXX.XXX.XXX" visible="false" />
|
|
||||||
<Pane HBox.hgrow="ALWAYS" />
|
|
||||||
<Button fx:id="switchThemeBtn" mnemonicParsing="false" />
|
|
||||||
</items>
|
|
||||||
</ToolBar>
|
|
||||||
<GridPane>
|
|
||||||
<columnConstraints>
|
|
||||||
<ColumnConstraints hgrow="SOMETIMES" />
|
|
||||||
<ColumnConstraints hgrow="SOMETIMES" percentWidth="90.0" />
|
|
||||||
<ColumnConstraints hgrow="SOMETIMES" />
|
|
||||||
</columnConstraints>
|
|
||||||
<rowConstraints>
|
|
||||||
<RowConstraints vgrow="SOMETIMES" />
|
|
||||||
</rowConstraints>
|
|
||||||
<children>
|
|
||||||
<Pane fx:id="specialPane" GridPane.columnIndex="1" />
|
|
||||||
</children>
|
|
||||||
<VBox.margin>
|
|
||||||
<Insets bottom="2.0" />
|
|
||||||
</VBox.margin>
|
|
||||||
</GridPane>
|
|
||||||
<fx:include fx:id="tableFilesList" source="TableView.fxml" VBox.vgrow="ALWAYS" />
|
|
||||||
</children>
|
|
||||||
</VBox>
|
|
||||||
</content>
|
</content>
|
||||||
<graphic>
|
<graphic>
|
||||||
<SVGPath content="M21,19V17H8V19H21M21,13V11H8V13H21M8,7H21V5H8V7M4,5V7H6V5H4M3,5A1,1 0 0,1 4,4H6A1,1 0 0,1 7,5V7A1,1 0 0,1 6,8H4A1,1 0 0,1 3,7V5M4,11V13H6V11H4M3,11A1,1 0 0,1 4,10H6A1,1 0 0,1 7,11V13A1,1 0 0,1 6,14H4A1,1 0 0,1 3,13V11M4,17V19H6V17H4M3,17A1,1 0 0,1 4,16H6A1,1 0 0,1 7,17V19A1,1 0 0,1 6,20H4A1,1 0 0,1 3,19V17Z" />
|
<SVGPath content="M21,19V17H8V19H21M21,13V11H8V13H21M8,7H21V5H8V7M4,5V7H6V5H4M3,5A1,1 0 0,1 4,4H6A1,1 0 0,1 7,5V7A1,1 0 0,1 6,8H4A1,1 0 0,1 3,7V5M4,11V13H6V11H4M3,11A1,1 0 0,1 4,10H6A1,1 0 0,1 7,11V13A1,1 0 0,1 6,14H4A1,1 0 0,1 3,13V11M4,17V19H6V17H4M3,17A1,1 0 0,1 4,16H6A1,1 0 0,1 7,17V19A1,1 0 0,1 6,20H4A1,1 0 0,1 3,19V17Z" />
|
||||||
|
|
Loading…
Reference in a new issue