diff --git a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java index 9a996c2a503bc5ffc3200710b304619f6460d687..5b293810c01492b41bc75d75ec3fa3f0d8ca012c 100644 --- a/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java +++ b/PlayWall/src/de/tobias/playpad/view/MapperOverviewViewController.java @@ -71,7 +71,13 @@ public class MapperOverviewViewController implements IMapperOverviewViewControll // Adds a mapper to the action try { MapperViewController controller = onAddMapper(item); - controller.showInputMapperUI(); + boolean result = controller.showInputMapperUI(); + + // Delete Mapper wenn Eingabe abgebrochen wurde + if (!result) { + mappingView.getChildren().removeAll(controller.getParent().getParent()); + action.removeMapper(controller.getMapper()); + } } catch (NoSuchComponentException ex) { // TODO Error Handling ex.printStackTrace(); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/KeyboardMapperInputDialog.java b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/KeyboardMapperInputDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..4028874c48522a6c6ce3c6cda59b2b8d1c376928 --- /dev/null +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/KeyboardMapperInputDialog.java @@ -0,0 +1,41 @@ +package de.tobias.playpad.viewcontroller.mapper; + +import java.util.Optional; + +import de.tobias.playpad.action.mapper.KeyboardMapper; +import de.tobias.utils.util.StringUtils; +import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; +import javafx.stage.Stage; + +public class KeyboardMapperInputDialog extends Alert { + + public KeyboardMapperInputDialog(KeyboardMapper mapper) { + super(AlertType.NONE); + + Scene scene = getDialogPane().getScene(); + + scene.setOnKeyPressed(ev -> + { + mapper.setKey(ev.getCode().getName()); + mapper.setCode(ev.getCode()); + }); + scene.setOnKeyReleased(ev -> + { + // Close on Finish (alert.close() does not work) + ((Stage) scene.getWindow()).close(); + }); + scene.setOnKeyTyped(ev -> + { + if (!StringUtils.isStringNotVisable(ev.getCharacter())) { + mapper.setKey(ev.getCharacter().toUpperCase()); + } + }); + } + + public boolean showInputDialog() { + Optional<ButtonType> result = showAndWait(); + return !result.isPresent(); + } +} diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/KeyboardMapperViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/KeyboardMapperViewController.java index 580f84d0f31c897f9b92d2262839ddf9c4a57fe3..4ff8e5f9bcacbd0dce17985eaea7930f08273a20 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/KeyboardMapperViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/KeyboardMapperViewController.java @@ -6,16 +6,11 @@ import de.tobias.playpad.action.mapper.KeyboardMapper; import de.tobias.playpad.action.mapper.Mapper; import de.tobias.playpad.action.mapper.MapperViewController; import de.tobias.utils.util.Localization; -import de.tobias.utils.util.StringUtils; import javafx.event.ActionEvent; import javafx.fxml.FXML; -import javafx.scene.Scene; -import javafx.scene.control.Alert; -import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.Label; -import javafx.stage.Stage; public class KeyboardMapperViewController extends MapperViewController { @@ -34,10 +29,12 @@ public class KeyboardMapperViewController extends MapperViewController { } @Override - public void hideFeedback() {} + public void hideFeedback() { + } @Override - public void showFeedback() {} + public void showFeedback() { + } private void setLabel() { keyLabel.setText(mapper.getReadableName()); @@ -45,38 +42,22 @@ public class KeyboardMapperViewController extends MapperViewController { @FXML private void mappingButtonHandler(ActionEvent event) { - Alert alert = new Alert(AlertType.NONE); + inputDialog(); + } + + private boolean inputDialog() { + KeyboardMapperInputDialog alert = new KeyboardMapperInputDialog(mapper); alert.setTitle(Localization.getString(Strings.Mapper_Keyboard_Name)); alert.setContentText(Localization.getString(Strings.Info_Mapper_PressKey)); - Scene scene = alert.getDialogPane().getScene(); - - scene.setOnKeyPressed(ev -> - { - mapper.setKey(ev.getCode().getName()); - mapper.setCode(ev.getCode()); - setLabel(); - }); - scene.setOnKeyReleased(ev -> - { - // Close on Finish (alert.close() does not work) - ((Stage) scene.getWindow()).close(); - }); - scene.setOnKeyTyped(ev -> - { - if (!StringUtils.isStringNotVisable(ev.getCharacter())) { - mapper.setKey(ev.getCharacter().toUpperCase()); - setLabel(); - } - }); alert.getButtonTypes().add(ButtonType.CANCEL); alert.initOwner(getWindow()); - alert.showAndWait(); + return alert.showInputDialog(); } @Override - public void showInputMapperUI() { - mappingButton.fire(); + public boolean showInputMapperUI() { + return inputDialog(); } public void setMapper(KeyboardMapper keyboardMapper) { diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java index c6f06e4b1d82e9cd421063505ebf0313f11cfc38..126dc8164e89e64ef7937a0d5145827f208af573 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/mapper/MidiMapperViewController.java @@ -74,9 +74,13 @@ public class MidiMapperViewController extends MapperViewController implements Mi * Current Alert for mapping. */ private Alert alert; + // Hilfsvariable um zu speichern, ob der Input Dialog abgebrochen wurde + private boolean canceled = false; @FXML private void midiInputRecordButtonHandler(ActionEvent event) { + canceled = false; + currentListener = Midi.getInstance().getListener(); Midi.getInstance().setListener(this); @@ -91,6 +95,7 @@ public class MidiMapperViewController extends MapperViewController implements Mi Midi.getInstance().setListener(currentListener); currentListener = null; alert = null; + canceled = true; } }); } @@ -117,8 +122,9 @@ public class MidiMapperViewController extends MapperViewController implements Mi } @Override - public void showInputMapperUI() { - midiInputRecordButton.fire(); + public boolean showInputMapperUI() { + midiInputRecordButtonHandler(null); + return canceled; // TEST Ob das funktioniert mit dem Return } public void setMapper(MidiMapper midiMapper) { diff --git a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperViewController.java b/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperViewController.java index 0725142845fadb9fead0d3f5ff819aef15c6a36c..d4592c558d7a11a716a53ef8bcb7c9b838eb22cc 100644 --- a/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/action/mapper/MapperViewController.java @@ -4,6 +4,14 @@ import java.util.ResourceBundle; import de.tobias.utils.ui.ContentViewController; +/** + * Übersicht über die Mapper zu einer Action.s + * + * @author tobias + * + * @since 5.0.0 + * + */ public abstract class MapperViewController extends ContentViewController { public MapperViewController(String name, String path, ResourceBundle localization) { @@ -16,5 +24,10 @@ public abstract class MapperViewController extends ContentViewController { public abstract Mapper getMapper(); - public abstract void showInputMapperUI(); + /** + * Zeigt einen Dialog für die Eingabe des Mappers. + * + * @return <code>true</code> Erfolgreiche Einageb, <code>false</code> Abbruch oder Fehler. + */ + public abstract boolean showInputMapperUI(); }