From 8eb05bb1b5bd2fd521bcd1ff7f2fcae604504bdc Mon Sep 17 00:00:00 2001 From: Dmitry Isaenko Date: Tue, 11 Feb 2020 00:15:19 +0300 Subject: [PATCH] Fix drag-n-drop for app. Add drag-n-drop for RCM tab --- .../Controllers/FrontController.java | 35 ++++++ .../Controllers/NSLMainController.java | 35 ------ .../Controllers/RcmController.java | 112 ++++++++++++++---- .../java/nsusbloader/Utilities/RcmTask.java | 2 +- src/main/resources/FrontTab.fxml | 2 +- src/main/resources/NSLMain.fxml | 2 +- src/main/resources/RcmTab.fxml | 10 +- 7 files changed, 134 insertions(+), 64 deletions(-) diff --git a/src/main/java/nsusbloader/Controllers/FrontController.java b/src/main/java/nsusbloader/Controllers/FrontController.java index d98727c..f686b23 100644 --- a/src/main/java/nsusbloader/Controllers/FrontController.java +++ b/src/main/java/nsusbloader/Controllers/FrontController.java @@ -6,6 +6,8 @@ import javafx.concurrent.Task; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; +import javafx.scene.input.DragEvent; +import javafx.scene.input.TransferMode; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Region; import javafx.stage.DirectoryChooser; @@ -285,6 +287,39 @@ public class FrontController implements Initializable { usbNetCommunications.cancel(false); } } + /** + * Drag-n-drop support (dragOver consumer) + * */ + @FXML + private void handleDragOver(DragEvent event){ + if (event.getDragboard().hasFiles()) + event.acceptTransferModes(TransferMode.ANY); + event.consume(); + } + /** + * Drag-n-drop support (drop consumer) + * */ + @FXML + private void handleDrop(DragEvent event){ + if (MediatorControl.getInstance().getTransferActive()) { + event.setDropCompleted(true); + return; + } + List filesDropped = event.getDragboard().getFiles(); + + if (getSelectedProtocol().equals("TinFoil") && MediatorControl.getInstance().getContoller().getSettingsCtrlr().getTfXciNszXczSupport()) + filesDropped.removeIf(file -> ! file.getName().toLowerCase().matches("(.*\\.nsp$)|(.*\\.xci$)|(.*\\.nsz$)|(.*\\.xcz$)")); + else if (getSelectedProtocol().equals("GoldLeaf") && (! MediatorControl.getInstance().getContoller().getSettingsCtrlr().getNSPFileFilterForGL())) + filesDropped.removeIf(file -> (file.isDirectory() && ! file.getName().toLowerCase().matches(".*\\.nsp$"))); + else + filesDropped.removeIf(file -> ! file.getName().toLowerCase().matches(".*\\.nsp$")); + + if ( ! filesDropped.isEmpty() ) + tableFilesListController.setFiles(filesDropped); + + event.setDropCompleted(true); + event.consume(); + } /** * This thing modify UI for reusing 'Upload to NS' button and make functionality set for "Stop transmission" * Called from mediator diff --git a/src/main/java/nsusbloader/Controllers/NSLMainController.java b/src/main/java/nsusbloader/Controllers/NSLMainController.java index f621f5c..e60015e 100644 --- a/src/main/java/nsusbloader/Controllers/NSLMainController.java +++ b/src/main/java/nsusbloader/Controllers/NSLMainController.java @@ -5,12 +5,9 @@ import javafx.concurrent.Task; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; -import javafx.scene.input.DragEvent; -import javafx.scene.input.TransferMode; import nsusbloader.*; import nsusbloader.ModelControllers.UpdatesChecker; -import java.io.File; import java.net.*; import java.util.List; import java.util.ResourceBundle; @@ -78,38 +75,6 @@ public class NSLMainController implements Initializable { * */ public void setHostServices(HostServices hs ){ SettingsTabController.registerHostServices(hs);} - - /** - * Drag-n-drop support (dragOver consumer) - * */ - @FXML - private void handleDragOver(DragEvent event){ - if (event.getDragboard().hasFiles()) - event.acceptTransferModes(TransferMode.ANY); - } - /** - * Drag-n-drop support (drop consumer) - * */ - @FXML - private void handleDrop(DragEvent event){ - if (MediatorControl.getInstance().getTransferActive()) { - event.setDropCompleted(true); - return; - } - List filesDropped = event.getDragboard().getFiles(); - - if (FrontTabController.getSelectedProtocol().equals("TinFoil") && SettingsTabController.getTfXciNszXczSupport()) - filesDropped.removeIf(file -> ! file.getName().toLowerCase().matches("(.*\\.nsp$)|(.*\\.xci$)|(.*\\.nsz$)|(.*\\.xcz$)")); - else if (FrontTabController.getSelectedProtocol().equals("GoldLeaf") && (! SettingsTabController.getNSPFileFilterForGL())) - filesDropped.removeIf(file -> (file.isDirectory() && ! file.getName().toLowerCase().matches(".*\\.nsp$"))); - else - filesDropped.removeIf(file -> ! file.getName().toLowerCase().matches(".*\\.nsp$")); - - if ( ! filesDropped.isEmpty() ) - FrontTabController.tableFilesListController.setFiles(filesDropped); - - event.setDropCompleted(true); - } /** * Get 'Settings' controller * Used by FrontController diff --git a/src/main/java/nsusbloader/Controllers/RcmController.java b/src/main/java/nsusbloader/Controllers/RcmController.java index 0ddb2c5..2ebfd39 100644 --- a/src/main/java/nsusbloader/Controllers/RcmController.java +++ b/src/main/java/nsusbloader/Controllers/RcmController.java @@ -9,7 +9,9 @@ import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.RadioButton; import javafx.scene.control.ToggleGroup; +import javafx.scene.input.DragEvent; import javafx.scene.input.MouseEvent; +import javafx.scene.input.TransferMode; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; import nsusbloader.AppPreferences; @@ -50,7 +52,7 @@ public class RcmController implements Initializable { private Label statusLbl; private ResourceBundle rb; - + private String myRegexp; @Override public void initialize(URL url, ResourceBundle resourceBundle) { this.rb = resourceBundle; @@ -66,12 +68,11 @@ public class RcmController implements Initializable { String recentRcm3 = AppPreferences.getInstance().getRecentRcm(3); String recentRcm4 = AppPreferences.getInstance().getRecentRcm(4); String recentRcm5 = AppPreferences.getInstance().getRecentRcm(5); - - String myRegexp; + if (File.separator.equals("/")) - myRegexp = "^.+/"; + this.myRegexp = "^.+/"; else - myRegexp = "^.+\\\\"; + this.myRegexp = "^.+\\\\"; if (! recentRcm1.isEmpty()) { payloadFNameLbl1.setText(recentRcm1.replaceAll(myRegexp, "")); @@ -98,6 +99,81 @@ public class RcmController implements Initializable { injectPldBtn.setOnAction(actionEvent -> smash()); } + /** + * Drag-n-drop support (dragOver consumer) + * */ + @FXML + private void handleDragOver(DragEvent event){ + if (event.getDragboard().hasFiles()) + event.acceptTransferModes(TransferMode.ANY); + event.consume(); + } + /** + * Drag-n-drop support (drop consumer) + * */ + @FXML + private void handleDrop(DragEvent event){ + Node sourceNode = (Node) event.getSource(); + File fileDrpd = event.getDragboard().getFiles().get(0); + + if (fileDrpd.isDirectory()){ + event.setDropCompleted(true); + event.consume(); + return; + } + + String fileNameDrpd = fileDrpd.getAbsolutePath(); + + switch (sourceNode.getId()){ + case "plHbox1": + setPayloadFile( 1, fileNameDrpd); + break; + case "plHbox2": + setPayloadFile( 2, fileNameDrpd); + break; + case "plHbox3": + setPayloadFile( 3, fileNameDrpd); + break; + case "plHbox4": + setPayloadFile( 4, fileNameDrpd); + break; + case "plHbox5": + setPayloadFile( 5, fileNameDrpd); + } + event.setDropCompleted(true); + event.consume(); + } + + private void setPayloadFile(int RcmBoxNo, String fileName){ + String fileNameShort = fileName.replaceAll(myRegexp, ""); + switch (RcmBoxNo){ + case 1: + payloadFNameLbl1.setText(fileNameShort); + payloadFPathLbl1.setText(fileName); + rcmToggleGrp.selectToggle(pldrRadio1); + break; + case 2: + payloadFNameLbl2.setText(fileNameShort); + payloadFPathLbl2.setText(fileName); + rcmToggleGrp.selectToggle(pldrRadio2); + break; + case 3: + payloadFNameLbl3.setText(fileNameShort); + payloadFPathLbl3.setText(fileName); + rcmToggleGrp.selectToggle(pldrRadio3); + break; + case 4: + payloadFNameLbl4.setText(fileNameShort); + payloadFPathLbl4.setText(fileName); + rcmToggleGrp.selectToggle(pldrRadio4); + break; + case 5: + payloadFNameLbl5.setText(fileNameShort); + payloadFPathLbl5.setText(fileName); + rcmToggleGrp.selectToggle(pldrRadio5); + } + } + private void smash(){ statusLbl.setText(""); if (MediatorControl.getInstance().getTransferActive()) { @@ -149,37 +225,31 @@ public class RcmController implements Initializable { else fileChooser.setInitialDirectory(new File(System.getProperty("user.home"))); - fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("bin", "*.bin")); + fileChooser.getExtensionFilters().addAll( + new FileChooser.ExtensionFilter("bin", "*.bin"), + new FileChooser.ExtensionFilter("Any file", "*.*") + ); File payloadFile = fileChooser.showOpenDialog(payloadFPathLbl1.getScene().getWindow()); if (payloadFile != null) { + final String fullFileName = payloadFile.getAbsolutePath(); final Node btn = (Node)event.getSource(); switch (btn.getId()){ case "selPldBtn1": - payloadFNameLbl1.setText(payloadFile.getName()); - payloadFPathLbl1.setText(payloadFile.getAbsolutePath()); - rcmToggleGrp.selectToggle(pldrRadio1); + setPayloadFile(1, fullFileName); break; case "selPldBtn2": - payloadFNameLbl2.setText(payloadFile.getName()); - payloadFPathLbl2.setText(payloadFile.getAbsolutePath()); - rcmToggleGrp.selectToggle(pldrRadio2); + setPayloadFile(2, fullFileName); break; case "selPldBtn3": - payloadFNameLbl3.setText(payloadFile.getName()); - payloadFPathLbl3.setText(payloadFile.getAbsolutePath()); - rcmToggleGrp.selectToggle(pldrRadio3); + setPayloadFile(3, fullFileName); break; case "selPldBtn4": - payloadFNameLbl4.setText(payloadFile.getName()); - payloadFPathLbl4.setText(payloadFile.getAbsolutePath()); - rcmToggleGrp.selectToggle(pldrRadio4); + setPayloadFile(4, fullFileName); break; case "selPldBtn5": - payloadFNameLbl5.setText(payloadFile.getName()); - payloadFPathLbl5.setText(payloadFile.getAbsolutePath()); - rcmToggleGrp.selectToggle(pldrRadio5); + setPayloadFile(5, fullFileName); } } } diff --git a/src/main/java/nsusbloader/Utilities/RcmTask.java b/src/main/java/nsusbloader/Utilities/RcmTask.java index fd07994..887f506 100644 --- a/src/main/java/nsusbloader/Utilities/RcmTask.java +++ b/src/main/java/nsusbloader/Utilities/RcmTask.java @@ -179,7 +179,7 @@ public class RcmTask extends Task { totalSize += 4096; // Double-check if (totalSize > 0x30298){ - logPrinter.print("File size of the payload is too bit. Comparing to maximum size, it's greater to "+(totalSize - 0x30298)+" bytes!"+ + logPrinter.print("File size of the payload is too big. Comparing to maximum size, it's greater to "+(totalSize - 0x30298)+" bytes!"+ "\n 1. Double-check that you're using the right payload." + "\n 2. Please report this issue in case you're sure that you're doing everything right." + "\n\n Nothing has been sent to NS. Execution stopped.", EMsgType.FAIL); // Occurs: never. I'm too lazy to check. diff --git a/src/main/resources/FrontTab.fxml b/src/main/resources/FrontTab.fxml index 287f202..24a1a75 100644 --- a/src/main/resources/FrontTab.fxml +++ b/src/main/resources/FrontTab.fxml @@ -16,7 +16,7 @@ - + diff --git a/src/main/resources/NSLMain.fxml b/src/main/resources/NSLMain.fxml index 8c5282f..017fe2f 100644 --- a/src/main/resources/NSLMain.fxml +++ b/src/main/resources/NSLMain.fxml @@ -9,7 +9,7 @@ - + diff --git a/src/main/resources/RcmTab.fxml b/src/main/resources/RcmTab.fxml index 6bee399..ea765c2 100644 --- a/src/main/resources/RcmTab.fxml +++ b/src/main/resources/RcmTab.fxml @@ -44,7 +44,7 @@