Fix drag-n-drop for app. Add drag-n-drop for RCM tab

This commit is contained in:
Dmitry Isaenko 2020-02-11 00:15:19 +03:00
parent 6b6bf8320f
commit 8eb05bb1b5
7 changed files with 134 additions and 64 deletions

View file

@ -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);
}
}
}