diff --git a/PlayWall/assets/de/tobias/playpad/assets/view/main/mainViewV2.fxml b/PlayWall/assets/de/tobias/playpad/assets/view/main/mainViewV2.fxml index 37c5902fa8d157f440bc0b97d720b35cc2249012..dbb3ca375d05f004c8b2d2ee7fa5e56651d5c719 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/view/main/mainViewV2.fxml +++ b/PlayWall/assets/de/tobias/playpad/assets/view/main/mainViewV2.fxml @@ -13,7 +13,7 @@ <VBox fx:id="headerBox" /> <AnchorPane fx:id="gridContainer" VBox.vgrow="ALWAYS"> <children> - <GridPane fx:id="padGridPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" VBox.vgrow="ALWAYS"> + <GridPane fx:id="padGridPane" gridLinesVisible="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" VBox.vgrow="ALWAYS"> </GridPane> </children> </AnchorPane> diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/BasicMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/BasicMenuToolbarViewController.java index 428eb6400ff7ad3bcb3ee63295defcf5fd38df75..40506594ff84fae081f337b7821715e11b5a5cc4 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/BasicMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/BasicMenuToolbarViewController.java @@ -120,6 +120,11 @@ public abstract class BasicMenuToolbarViewController extends MenuToolbarViewCont volumeSlider.setValue(volumeSlider.getValue() - ev.getDeltaY() * 0.001); volumeSlider.setValue(volumeSlider.getValue() + ev.getDeltaX() * 0.001); }); + + volumeSlider.valueProperty().addListener((a, b, c) -> + { + mainViewController.setPadVolume(c.doubleValue()); + }); } // Profile Listener diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java index 20026f81c2079b458fe153ec1ee2e0d108227149..2b9352380dd3ca2addf045b8381dfbdf91283275 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java @@ -16,6 +16,7 @@ import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.Button; import javafx.scene.control.MenuItem; +import javafx.scene.control.Slider; import javafx.scene.image.Image; public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewController implements EventHandler<ActionEvent> { @@ -39,6 +40,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro for (int i = 0; i < settings.getPageCount(); i++) { Button button = new Button(Localization.getString(Strings.UI_Window_Main_PageButton, (i + 1))); button.setUserData(i); + button.setFocusTraversable(false); button.setOnAction(this); pageHBox.getChildren().add(button); } @@ -85,6 +87,11 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro public void deinit() { // TODO Implement } + + @Override + public Slider getVolumeSlider() { + return volumeSlider; + } @Override public void handle(ActionEvent event) { diff --git a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java index a34ba1a0fa3febd6f83086fd2e9af7569fda39c5..ed5995a8e00b133464174fc9c3968efe8d99e726 100644 --- a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java @@ -6,6 +6,7 @@ import de.tobias.playpad.view.main.MenuType; import de.tobias.playpad.viewcontroller.main.IMainViewController; import javafx.event.ActionEvent; import javafx.scene.control.MenuItem; +import javafx.scene.control.Slider; import javafx.scene.image.Image; public class TouchMenuToolbarViewController extends BasicMenuToolbarViewController { @@ -59,10 +60,14 @@ public class TouchMenuToolbarViewController extends BasicMenuToolbarViewControll } + @Override + public Slider getVolumeSlider() { + return null; + } + @Override public void handle(ActionEvent event) { - // TODO Auto-generated method stub - + } } \ No newline at end of file diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java index eb5df8819fa89e747083d812f22ae8bf78307af7..9b2537d7a4460e35280f456428a888cd46e7e7e6 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java @@ -185,7 +185,7 @@ public class MainViewController extends ViewController implements IMainViewContr }); } - private void setPadVolume(double volume) { + public void setPadVolume(double volume) { for (Pad pad : project.getPads().values()) { if (pad != null) pad.setMasterVolume(volume); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java index 044444c2adde47d016450ac2f7930c7ad3474037..752fb052d3b21c0d3132a31394179b02cc11d0aa 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java @@ -9,6 +9,7 @@ import javax.sound.midi.MidiUnavailableException; import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.Strings; +import de.tobias.playpad.action.Mapping; import de.tobias.playpad.action.mapper.listener.KeyboardHandler; import de.tobias.playpad.action.mapper.listener.MidiHandler; import de.tobias.playpad.design.GlobalDesign; @@ -31,7 +32,9 @@ import de.tobias.utils.ui.scene.NotificationPane; import de.tobias.utils.util.Localization; import de.tobias.utils.util.OS; import de.tobias.utils.util.OS.OSType; +import de.tobias.utils.util.Worker; import javafx.application.Platform; +import javafx.beans.property.DoubleProperty; import javafx.event.EventHandler; import javafx.event.EventType; import javafx.fxml.FXML; @@ -88,6 +91,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon setMainLayout(new DesktopMainLayoutConnect()); // DEBUG Profile.registerListener(this); + reloadSettings(null, Profile.currentProfile()); /* * Gridline Color @@ -297,9 +301,11 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon * neues Project */ public void openProject(Project project) { + removePadsFromView(); + if (project != null) removePadsFromView(); - createPadViews(); // TODO Weg hier, nur wenn sich profile ändert + // createPadViews(); // TODO Weg hier, nur wenn sich profile ändert openProject = project; @@ -409,10 +415,60 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon return currentPageShowing; } + @Override + public void setPadVolume(double volume) { + if (openProject != null) { + for (Pad pad : openProject.getPads().values()) { + if (pad != null) + pad.setMasterVolume(volume); + } + } + } + // Settings @Override - public void reloadSettings(Profile oldProfile, Profile currentProfile) { + public void reloadSettings(Profile old, Profile currentProfile) { createPadViews(); + + final DoubleProperty valueProperty = menuToolbarViewController.getVolumeSlider().valueProperty(); + + if (old != null) { + // Unbind Volume Slider + valueProperty.unbindBidirectional(old.getProfileSettings().volumeProperty()); + // Clear Feedback on Devie (LaunchPad Light off) + old.getMappings().getActiveMapping().getActions().forEach(action -> action.clearFeedback()); + } + + // Volume + valueProperty.bindBidirectional(currentProfile.getProfileSettings().volumeProperty()); + + final ProfileSettings profilSettings = currentProfile.getProfileSettings(); + final Mapping activeMapping = currentProfile.getMappings().getActiveMapping(); + + // MIDI + if (profilSettings.isMidiActive() && profilSettings.getMidiDevice() != null) { + // Load known MIDI Device + Worker.runLater(() -> + { + loadMidiDevice(profilSettings.getMidiDevice()); + + applyColorsToMappers(); + + Platform.runLater(() -> + { + // Handle Mapper + if (Profile.currentProfile() != null) { + activeMapping.initFeedback(); + activeMapping.showFeedback(openProject); + } + }); + }); + } + + loadUserCss(); + if (old != null && currentProfile != null) { + showPage(currentPageShowing); + } } @Override @@ -484,6 +540,26 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon applyColorsToMappers(); } + /** + * Init MIDI Device by using the Midi Class and show some feedback the user. + * + * @param name + * Device Name + * + * @see Midi#lookupMidiDevice(String) + */ + private void loadMidiDevice(String name) { + try { + midi.lookupMidiDevice(name); + notificationPane.showAndHide(Localization.getString(Strings.Info_Midi_Device_Connected, name), PlayPadMain.displayTimeMillis); + } catch (NullPointerException e) { + showError(Localization.getString(Strings.Error_Midi_Device_Unavailible, name)); + } catch (IllegalArgumentException | MidiUnavailableException e) { + showError(Localization.getString(Strings.Error_Midi_Device_Busy, e.getLocalizedMessage())); + e.printStackTrace(); + } + } + @Override public void applyColorsToMappers() { @@ -507,7 +583,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon public MidiListener getMidiHandler() { return midiHandler; } - + @Override public MenuToolbarViewController getMenuToolbarController() { return menuToolbarViewController; diff --git a/PlayWallCore/src/de/tobias/playpad/action/MappingList.java b/PlayWallCore/src/de/tobias/playpad/action/MappingList.java index 542f990dd43b94f82651f87c102881f3ff40cd0c..bd9774d15abb108db63b4c1063fd9060894c77a9 100644 --- a/PlayWallCore/src/de/tobias/playpad/action/MappingList.java +++ b/PlayWallCore/src/de/tobias/playpad/action/MappingList.java @@ -93,6 +93,12 @@ public class MappingList extends ArrayList<Mapping> { XMLHandler<Mapping> handler = new XMLHandler<>(rootElement); handler.saveElements(MAPPING, this, new MappingSerializer()); + + if (Files.notExists(path)) { + Files.createDirectories(path.getParent()); + Files.createFile(path); + } + XMLHandler.save(path, document); } diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java index c294f988e95d9cb20e92bad25c88f7a4070ad403..8727d7b22a7c2121f96ed64972dd42986b05751c 100644 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java @@ -71,4 +71,6 @@ public interface IMainViewController extends NotificationHandler { public MidiListener getMidiHandler(); public MenuToolbarViewController getMenuToolbarController(); + + public void setPadVolume(double doubleValue); } diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java index 4eaedb401f6f12fd4d3a2b296155f8d92bd5da54..b28e343d23d923315f125c2ac7e88d1db25788a9 100644 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java @@ -6,6 +6,7 @@ import de.tobias.playpad.settings.ProfileSettings; import de.tobias.playpad.view.main.MenuType; import de.tobias.utils.ui.ContentViewController; import javafx.scene.control.MenuItem; +import javafx.scene.control.Slider; import javafx.scene.image.Image; /** @@ -122,4 +123,6 @@ public abstract class MenuToolbarViewController extends ContentViewController { * Deinitialisiert den Controller. */ public abstract void deinit(); + + public abstract Slider getVolumeSlider(); }