diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/listener/PadNewContentListener.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/listener/PadNewContentListener.java new file mode 100644 index 0000000000000000000000000000000000000000..a2470391be71a7117f460051e78c274d269877e8 --- /dev/null +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/listener/PadNewContentListener.java @@ -0,0 +1,86 @@ +package de.tobias.playpad.layout.desktop.listener; + +import de.thecodelabs.utils.application.ApplicationUtils; +import de.thecodelabs.utils.util.Localization; +import de.tobias.playpad.PlayPadPlugin; +import de.tobias.playpad.Strings; +import de.tobias.playpad.layout.desktop.pad.DesktopPadViewController; +import de.tobias.playpad.pad.Pad; +import de.tobias.playpad.pad.content.PadContentFactory; +import de.tobias.playpad.pad.content.PadContentRegistry; +import de.tobias.playpad.registry.NoSuchComponentException; +import de.tobias.playpad.settings.GlobalSettings; +import javafx.event.ActionEvent; +import javafx.scene.Node; +import javafx.stage.FileChooser; + +import java.io.File; +import java.nio.file.Path; +import java.util.Set; + +public class PadNewContentListener { + + private final Pad pad; + + public PadNewContentListener(Pad pad) { + this.pad = pad; + } + + public void onNew(ActionEvent event, PadContentFactory.PadContentTypeChooser padContentTypeChooser) throws NoSuchComponentException { + GlobalSettings settings = PlayPadPlugin.getInstance().getGlobalSettings(); + if (pad.getProject() != null && settings.isLiveMode() && settings.isLiveModeFile() && pad.getProject().getActivePlayers() > 0) { + return; + } + + final FileChooser chooser = new FileChooser(); + PadContentRegistry registry = PlayPadPlugin.getRegistries().getPadContents(); + + // File Extension + final FileChooser.ExtensionFilter extensionFilter = new FileChooser.ExtensionFilter(Localization.getString(Strings.FILE_FILTER_MEDIA), registry.getSupportedFileTypes()); + chooser.getExtensionFilters().add(extensionFilter); + + // Last Folder + final Object openFolder = ApplicationUtils.getApplication().getUserDefaults().getData(DesktopPadViewController.OPEN_FOLDER); + if (openFolder != null) { + File folder = new File(openFolder.toString()); + if (folder.exists()) { + chooser.setInitialDirectory(folder); + } + } + + final File file = chooser.showOpenDialog(((Node) event.getTarget()).getScene().getWindow()); + if (file != null) { + Path path = file.toPath(); + + final Set<PadContentFactory> connects = registry.getPadContentConnectsForFile(file.toPath()); + if (!connects.isEmpty()) { + if (connects.size() > 1) { // Multiple content types possible + padContentTypeChooser.showOptions(connects, padContent -> + { + if (padContent != null) { + setNewPadContent(path, padContent); + } + }); + } else { + PadContentFactory padContent = connects.iterator().next(); + setNewPadContent(path, padContent); + } + } + + ApplicationUtils.getApplication().getUserDefaults().setData(DesktopPadViewController.OPEN_FOLDER, path.getParent().toString()); + } + } + + private void setNewPadContent(Path path, PadContentFactory connect) { + if (pad.getContent() == null || !pad.getContent().getType().equals(connect.getType())) { + this.pad.setContentType(connect.getType()); + } + + if (pad.isPadVisible()) { + pad.getController().getView().showBusyView(true); + } + + pad.setPath(path); + } + +} diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java index 86347f6aa5f964cc26359dbbe7d49bbfdc102ad5..637686246100491b6b093d6fd525637741fcd489 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java @@ -95,7 +95,7 @@ public class DesktopPadDragListener implements EventHandler<DragEvent> { if (fileHud == null) { fileHud = new FileDragOptionView(padView); } - fileHud.showDropOptions(connects); + fileHud.showOptions(connects); event.acceptTransferModes(TransferMode.LINK); return; diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java index 21700d33e55e8d33b0dd52bc5e10075c6f48b331..2c1973d80cd16a167511c4e3f0f371e6fa16e899 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java @@ -1,18 +1,14 @@ package de.tobias.playpad.layout.desktop.pad; import de.thecodelabs.logger.Logger; -import de.thecodelabs.utils.application.ApplicationUtils; import de.thecodelabs.utils.ui.NVCStage; -import de.thecodelabs.utils.util.Localization; import de.tobias.playpad.PlayPadPlugin; -import de.tobias.playpad.Strings; import de.tobias.playpad.layout.desktop.DesktopEditMode; import de.tobias.playpad.layout.desktop.DesktopMainLayoutFactory; +import de.tobias.playpad.layout.desktop.listener.PadNewContentListener; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.pad.TimeMode; -import de.tobias.playpad.pad.content.PadContentFactory; -import de.tobias.playpad.pad.content.PadContentRegistry; import de.tobias.playpad.pad.content.play.Durationable; import de.tobias.playpad.pad.listener.*; import de.tobias.playpad.pad.view.IPadView; @@ -27,16 +23,9 @@ import de.tobias.playpad.viewcontroller.option.pad.PadSettingsViewController; import javafx.beans.value.ChangeListener; import javafx.event.ActionEvent; import javafx.event.EventHandler; -import javafx.scene.Node; -import javafx.stage.FileChooser; -import javafx.stage.FileChooser.ExtensionFilter; import javafx.stage.Stage; import javafx.util.Duration; -import java.io.File; -import java.nio.file.Path; -import java.util.Set; - public class DesktopPadViewController implements IPadViewController, EventHandler<ActionEvent> { public static final String OPEN_FOLDER = "openFolder"; @@ -196,66 +185,9 @@ public class DesktopPadViewController implements IPadViewController, EventHandle } } - private void onNew(ActionEvent event) throws NoSuchComponentException { - GlobalSettings settings = PlayPadPlugin.getInstance().getGlobalSettings(); - if (pad.getProject() != null) { - if (settings.isLiveMode() && settings.isLiveModeFile() && pad.getProject().getActivePlayers() > 0) { - return; - } - } - - FileChooser chooser = new FileChooser(); - PadContentRegistry registry = PlayPadPlugin.getRegistries().getPadContents(); - - // File Extension - ExtensionFilter extensionFilter = new ExtensionFilter(Localization.getString(Strings.FILE_FILTER_MEDIA), - registry.getSupportedFileTypes()); - chooser.getExtensionFilters().add(extensionFilter); - - // Last Folder - Object openFolder = ApplicationUtils.getApplication().getUserDefaults().getData(OPEN_FOLDER); - if (openFolder != null) { - File folder = new File(openFolder.toString()); - if (folder.exists()) { - chooser.setInitialDirectory(folder); - } - } - - File file = chooser.showOpenDialog(((Node) event.getTarget()).getScene().getWindow()); - if (file != null) { - Path path = file.toPath(); - - Set<PadContentFactory> connects = registry.getPadContentConnectsForFile(file.toPath()); - if (!connects.isEmpty()) { - if (connects.size() > 1) { // Multiple content types possible - FileDragOptionView hud = new FileDragOptionView(padView.getRootNode()); - hud.showDropOptions(connects, connect -> - { - if (connect != null) { - setNewPadContent(path, connect); - hud.hide(); - } - }); - } else { - PadContentFactory connect = connects.iterator().next(); - setNewPadContent(path, connect); - } - } - - ApplicationUtils.getApplication().getUserDefaults().setData(OPEN_FOLDER, path.getParent().toString()); - } - } - - private void setNewPadContent(Path path, PadContentFactory connect) { - if (pad.getContent() == null || !pad.getContent().getType().equals(connect.getType())) { - this.pad.setContentType(connect.getType()); - } - - if (pad.isPadVisible()) { - pad.getController().getView().showBusyView(true); - } - - pad.setPath(path); + public void onNew(ActionEvent event) throws NoSuchComponentException { + final PadNewContentListener listener = new PadNewContentListener(pad); + listener.onNew(event, new FileDragOptionView(padView.getRootNode())); } private void onSettings() { diff --git a/PlayWall/src/main/java/de/tobias/playpad/view/FileDragOptionView.java b/PlayWall/src/main/java/de/tobias/playpad/view/FileDragOptionView.java index e04e34fbe511be49ef008abbdd6963f1219026db..1510b4cfe33d5043e00289a547ccae68be45cac2 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/view/FileDragOptionView.java +++ b/PlayWall/src/main/java/de/tobias/playpad/view/FileDragOptionView.java @@ -17,13 +17,13 @@ import javafx.scene.text.TextAlignment; import java.util.Set; import java.util.function.Consumer; -public class FileDragOptionView { +public class FileDragOptionView implements PadContentFactory.PadContentTypeChooser { - private HBox optionPane; - private Pane parent; + private final HBox optionPane; + private final Pane parent; - private Transition inTransition; - private Transition outTransition; + private final Transition inTransition; + private final Transition outTransition; public FileDragOptionView(Pane pane) { parent = pane; @@ -78,7 +78,7 @@ public class FileDragOptionView { private PadContentFactory selectedConnect; - public void showDropOptions(Set<PadContentFactory> options) { + public void showOptions(Set<PadContentFactory> options) { if (!parent.getChildren().contains(optionPane)) { selectedConnect = null; @@ -125,14 +125,16 @@ public class FileDragOptionView { } - public void showDropOptions(Set<PadContentFactory> options, Consumer<PadContentFactory> onFinish) { - showDropOptions(options); + public void showOptions(Set<PadContentFactory> options, Consumer<PadContentFactory> onFinish) { + showOptions(options); for (Node node : optionPane.getChildren()) { if (node instanceof Label) { Label label = (Label) node; - label.setOnMouseClicked(ev -> - onFinish.accept((PadContentFactory) label.getUserData())); + label.setOnMouseClicked(ev -> { + onFinish.accept((PadContentFactory) label.getUserData()); + hide(); + }); label.setOnMouseEntered(e -> label.pseudoClassStateChanged(PseudoClasses.HOVER_CLASS, true)); label.setOnMouseExited(e -> diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/GeneralPadTabViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/GeneralPadTabViewController.java index cd36d822fa42ae26dac33467de7f3b1434e23e7a..a840e2a61794571929f1526de89b3b276c4a146f 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/GeneralPadTabViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/GeneralPadTabViewController.java @@ -1,11 +1,14 @@ package de.tobias.playpad.viewcontroller.option.pad; +import de.thecodelabs.utils.application.system.NativeApplication; import de.thecodelabs.utils.util.Localization; import de.tobias.playpad.Strings; +import de.tobias.playpad.layout.desktop.listener.PadNewContentListener; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadSettings; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.pad.TimeMode; +import de.tobias.playpad.pad.content.PadContentFactory; import de.tobias.playpad.viewcontroller.PadSettingsTabViewController; import de.tobias.playpad.viewcontroller.cell.EnumCell; import javafx.beans.value.ChangeListener; @@ -14,8 +17,13 @@ import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.stage.Stage; +import java.util.Optional; + public class GeneralPadTabViewController extends PadSettingsTabViewController { + @FXML + private Label pathLabel; + @FXML private TextField titleTextField; @FXML @@ -31,12 +39,14 @@ public class GeneralPadTabViewController extends PadSettingsTabViewController { @FXML private Button deleteButton; - private Pad pad; + private final Pad pad; GeneralPadTabViewController(Pad pad) { load("view/option/pad", "GeneralTab", Localization.getBundle()); this.pad = pad; + pathLabel.setText(pad.getPath().toString()); + if (pad.getStatus() == PadStatus.PLAY || pad.getStatus() == PadStatus.PAUSE) { deleteButton.setDisable(true); } @@ -44,7 +54,6 @@ public class GeneralPadTabViewController extends PadSettingsTabViewController { @Override public void init() { - // Init Listener ChangeListener<Number> volumeListener = (a, b, c) -> pad.getPadSettings().setVolume(c.doubleValue() / 100.0); volumeSlider.valueProperty().addListener(volumeListener); @@ -71,16 +80,14 @@ public class GeneralPadTabViewController extends PadSettingsTabViewController { @Override public void loadSettings(Pad pad) { - PadSettings padSettings = pad.getPadSettings(); + final PadSettings padSettings = pad.getPadSettings(); - // Bindings titleTextField.textProperty().bindBidirectional(pad.nameProperty()); repeatCheckBox.selectedProperty().bindBidirectional(padSettings.loopProperty()); timeDisplayComboBox.valueProperty().bindBidirectional(padSettings.timeModeProperty()); volumeSlider.setValue(padSettings.getVolume() * 100); - // is Custom TimeMode Actvie customTimeDisplayCheckBox.setSelected(padSettings.isCustomTimeMode()); if (!padSettings.isCustomTimeMode()) { timeDisplayComboBox.setDisable(true); @@ -96,7 +103,21 @@ public class GeneralPadTabViewController extends PadSettingsTabViewController { timeDisplayComboBox.valueProperty().unbindBidirectional(padSettings.timeModeProperty()); } - // Listener + @FXML + private void showPathButtonHandler() { + NativeApplication.sharedInstance().showFileInFileViewer(pad.getPath()); + } + + @FXML + private void chooseButtonHandler(ActionEvent event) { + final PadNewContentListener listener = new PadNewContentListener(pad); + listener.onNew(event, (options, onSelected) -> { + ChoiceDialog<PadContentFactory> dialog = new ChoiceDialog<>(null, options); + final Optional<PadContentFactory> padContentFactory = dialog.showAndWait(); + padContentFactory.ifPresent(onSelected); + }); + } + @FXML private void deleteButtonHandler(ActionEvent event) { pad.clear(); diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PadSettingsViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PadSettingsViewController.java index 666f040a8f8db89c0b0b34f02815909831afb94e..9cb33f084def3bdefe0a5610a70e8fc4bf146350 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PadSettingsViewController.java +++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PadSettingsViewController.java @@ -10,16 +10,14 @@ import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.pad.content.PadContentFactory; import de.tobias.playpad.pad.content.PadContentRegistry; -import de.tobias.playpad.pad.mediapath.MediaPath; import de.tobias.playpad.registry.NoSuchComponentException; import de.tobias.playpad.viewcontroller.IPadSettingsViewController; import de.tobias.playpad.viewcontroller.PadSettingsTabViewController; -import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; -import javafx.scene.Parent; -import javafx.scene.control.*; -import javafx.scene.layout.AnchorPane; +import javafx.scene.control.Button; +import javafx.scene.control.Tab; +import javafx.scene.control.TabPane; import javafx.stage.Stage; import javafx.stage.Window; @@ -34,8 +32,6 @@ public class PadSettingsViewController extends NVC implements IPadSettingsViewCo private TabPane tabPane; private final List<PadSettingsTabViewController> tabs = new ArrayList<>(); - private Control pathLookupButton; - @FXML private Button finishButton; @@ -64,8 +60,6 @@ public class PadSettingsViewController extends NVC implements IPadSettingsViewCo } } - setupPathLookupButton(); - NVCStage nvcStage = applyViewControllerToStage(); nvcStage.initOwner(owner); nvcStage.addCloseHook(this::onFinish); @@ -76,44 +70,6 @@ public class PadSettingsViewController extends NVC implements IPadSettingsViewCo setTitle(pad); } - private void setupPathLookupButton() { - final PathLookupListener pathLookupListener = new PathLookupListener(); - - if (pad.getContent() != null) { - final ObservableList<MediaPath> paths = pad.getPaths(); - if (paths.size() == 1) { - Button button = new Button(Localization.getString("padSettings.button.path")); - - MediaPath path = paths.get(0); - button.setUserData(path); - button.setOnAction(pathLookupListener); - - pathLookupButton = button; - } else if (paths.size() > 1) { - MenuButton button = new MenuButton(Localization.getString("padSettings.button.path")); - - for (MediaPath path : paths) { - MenuItem item = new MenuItem(path.getFileName()); - button.getItems().add(item); - - item.setUserData(path); - item.setOnAction(pathLookupListener); - } - - pathLookupButton = button; - } - - Parent parent = getParent(); - if (parent instanceof AnchorPane && pathLookupButton != null) { - AnchorPane anchorPane = (AnchorPane) parent; - anchorPane.getChildren().add(pathLookupButton); - - AnchorPane.setLeftAnchor(pathLookupButton, 14.0); - AnchorPane.setBottomAnchor(pathLookupButton, 14.0); - } - } - } - private void setTitle(Pad pad) { String title; if (pad.getStatus() != PadStatus.EMPTY) { diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PathLookupListener.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PathLookupListener.java deleted file mode 100644 index a91ae9ee9808209aad70447610fd5c687048462a..0000000000000000000000000000000000000000 --- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PathLookupListener.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.tobias.playpad.viewcontroller.option.pad; - -import de.thecodelabs.utils.application.system.NativeApplication; -import de.tobias.playpad.pad.mediapath.MediaPath; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; -import javafx.scene.Node; -import javafx.scene.control.Button; - -public class PathLookupListener implements EventHandler<ActionEvent> { - - @Override - public void handle(ActionEvent event) { - Object source = event.getSource(); - if (source instanceof Node) { - Object userData = ((Button) source).getUserData(); - if (userData instanceof MediaPath) { - showPath((MediaPath) userData); - } - } - } - - private void showPath(MediaPath path) { - NativeApplication.sharedInstance().showFileInFileViewer(path.getPath()); - } -} \ No newline at end of file diff --git a/PlayWall/src/main/resources/lang/ui_de.properties b/PlayWall/src/main/resources/lang/ui_de.properties index 4879253468109289fd391d849ab6a4bbcb48cf4e..ede9af49fa40168014889cdc76ae5bd467f64c42 100755 --- a/PlayWall/src/main/resources/lang/ui_de.properties +++ b/PlayWall/src/main/resources/lang/ui_de.properties @@ -116,7 +116,9 @@ midi.button.new=\u00C4ndern keyboard.label.key=Taste (Tastatur): keyboard.button.new=\u00C4ndern padSettings.button.delete=L\u00F6schen -padSettings.button.path=Pfad zeigen +padSettings.button.path.show=Pfad zeigen +padSettings.button.path.choose=Pfad w\u00E4hlen +padSettings.gen.label.media=Medien: padSettings.gen.label.title=Titel: padSettings.gen.label.volume=Lautst\u00E4rke: padSettings.gen.label.timeDisplay=Zeitanzeige: diff --git a/PlayWall/src/main/resources/view/option/pad/GeneralTab.fxml b/PlayWall/src/main/resources/view/option/pad/GeneralTab.fxml index bbbfc204f67a81ad39794136484871888554f9a3..2e1c993fa424f409a09b658bbd6f66276a9cf9a1 100644 --- a/PlayWall/src/main/resources/view/option/pad/GeneralTab.fxml +++ b/PlayWall/src/main/resources/view/option/pad/GeneralTab.fxml @@ -3,48 +3,56 @@ <?import javafx.geometry.Insets?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> -<VBox spacing="14.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> +<VBox spacing="14.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> <children> - <VBox layoutX="14.0" layoutY="14.0" spacing="14.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="14.0" - AnchorPane.topAnchor="14.0"> + <HBox alignment="CENTER_LEFT" spacing="14.0"> <children> - <HBox alignment="CENTER_LEFT" layoutX="14.0" layoutY="14.0" spacing="14.0"> - <children> - <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="19.0" prefWidth="150.0" - text="%padSettings.gen.label.title" AnchorPane.leftAnchor="14.0"/> - <TextField fx:id="titleTextField" layoutX="125.0" layoutY="14.0" prefWidth="250.0" - AnchorPane.leftAnchor="127.0"/> - <VBox HBox.hgrow="ALWAYS"/> - <Button fx:id="deleteButton" mnemonicParsing="false" onAction="#deleteButtonHandler" - text="%padSettings.button.delete"/> - </children> - </HBox> - <HBox alignment="CENTER_LEFT" layoutX="14.0" layoutY="48.0" spacing="14.0"> - <children> - <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="50.0" prefWidth="150.0" - text="%padSettings.gen.label.volume" AnchorPane.leftAnchor="14.0"/> - <Slider fx:id="volumeSlider" layoutX="122.0" layoutY="54.0" prefWidth="250.0" - showTickLabels="true" showTickMarks="true" snapToTicks="true" value="100.0" - AnchorPane.leftAnchor="127.0"/> - <VBox HBox.hgrow="ALWAYS"/> - <CheckBox fx:id="repeatCheckBox" mnemonicParsing="false" text="%padSettings.checkbox.loop"/> - </children> - </HBox> - <HBox alignment="CENTER_LEFT" layoutX="14.0" layoutY="84.0" spacing="14.0"> - <children> - <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="89.0" prefWidth="150.0" - text="%padSettings.gen.label.timeDisplay" AnchorPane.leftAnchor="14.0"/> - <ComboBox fx:id="timeDisplayComboBox" layoutX="127.0" layoutY="84.0" prefWidth="250.0" - AnchorPane.leftAnchor="127.0"/> - <VBox HBox.hgrow="ALWAYS"/> - <CheckBox fx:id="customTimeDisplayCheckBox" layoutX="406.0" layoutY="88.0" - mnemonicParsing="false" text="%padSettings.gen.checkbox.customSettings"/> - </children> - </HBox> + <Label alignment="CENTER_RIGHT" prefWidth="150.0" text="%padSettings.gen.label.media" /> + <Label fx:id="pathLabel" text="Label" textOverrun="CENTER_ELLIPSIS" /> + <VBox HBox.hgrow="ALWAYS" /> + <Button mnemonicParsing="false" text="%padSettings.button.path.show" onAction="#showPathButtonHandler"/> </children> - </VBox> + </HBox> + <HBox spacing="14.0"> + <children> + <Button mnemonicParsing="false" onAction="#chooseButtonHandler" text="%padSettings.button.path.choose" /> + <Button fx:id="deleteButton" mnemonicParsing="false" onAction="#deleteButtonHandler" text="%padSettings.button.delete" /> + </children> + <padding> + <Insets left="164.0" /> + </padding> + </HBox> + <Separator prefWidth="200.0" /> + <HBox alignment="CENTER_LEFT" spacing="14.0"> + <children> + <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="19.0" prefWidth="150.0" text="%padSettings.gen.label.title" AnchorPane.leftAnchor="14.0" /> + <TextField fx:id="titleTextField" layoutX="125.0" layoutY="14.0" prefWidth="250.0" AnchorPane.leftAnchor="127.0" /> + </children> + </HBox> + <HBox alignment="CENTER_LEFT" spacing="14.0"> + <children> + <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="50.0" prefWidth="150.0" text="%padSettings.gen.label.volume" AnchorPane.leftAnchor="14.0" /> + <Slider fx:id="volumeSlider" layoutX="122.0" layoutY="54.0" prefWidth="250.0" showTickLabels="true" showTickMarks="true" snapToTicks="true" value="100.0" AnchorPane.leftAnchor="127.0" /> + <VBox HBox.hgrow="ALWAYS" /> + <CheckBox fx:id="repeatCheckBox" mnemonicParsing="false" text="%padSettings.checkbox.loop" /> + </children> + </HBox> + <HBox alignment="CENTER_LEFT" spacing="14.0"> + <children> + <Label alignment="CENTER_RIGHT" layoutX="14.0" layoutY="89.0" prefWidth="150.0" text="%padSettings.gen.label.timeDisplay" AnchorPane.leftAnchor="14.0" /> + <CheckBox fx:id="customTimeDisplayCheckBox" layoutX="406.0" layoutY="88.0" mnemonicParsing="false" text="%padSettings.gen.checkbox.customSettings" /> + </children> + </HBox> + <HBox> + <children> + <ComboBox fx:id="timeDisplayComboBox" prefWidth="250.0" /> + </children> + <padding> + <Insets left="164.0" /> + </padding> + </HBox> </children> <padding> - <Insets bottom="14.0" left="14.0" right="14.0" top="14.0"/> + <Insets bottom="14.0" left="14.0" right="14.0" top="14.0" /> </padding> </VBox> diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PadContentFactory.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PadContentFactory.java index 5b34c1653f0bd0836507fc4a7af1a4082c48dbd2..d061b3802ff3cdb11ffb679c573213a99c9e4040 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PadContentFactory.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/PadContentFactory.java @@ -9,10 +9,16 @@ import de.tobias.playpad.viewcontroller.option.ProfileSettingsTabViewController; import javafx.scene.layout.Pane; import java.nio.file.Path; +import java.util.Set; +import java.util.function.Consumer; // COMMENT PadContentFactory public abstract class PadContentFactory extends Component implements Comparable<PadContentFactory> { + public interface PadContentTypeChooser { + void showOptions(Set<PadContentFactory> options, Consumer<PadContentFactory> onSelected); + } + public PadContentFactory(String type) { super(type); }