diff --git a/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties b/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties index 1ad02a367c7a457e081958a4693bd4964f761953..f241aa5b02bf8f45962edc1c81b78279efcc3c39 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties +++ b/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties @@ -21,6 +21,7 @@ main.menuitem.about= main.menuitem.website=Webseite besuchen... main.menuitem.senderror=Fehler senden... main.menuitem.fullScreen=Vollbild +main.menuitem.layout=Layout main.label.live=Live diff --git a/PlayWall/assets/de/tobias/playpad/assets/view/main/desktop/header.fxml b/PlayWall/assets/de/tobias/playpad/assets/view/main/desktop/header.fxml index b4012e7bca10de9bd6c952530f19e84091e153ae..a46415f06e9ba5bea9ef83657e28d61e9a18dee0 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/view/main/desktop/header.fxml +++ b/PlayWall/assets/de/tobias/playpad/assets/view/main/desktop/header.fxml @@ -61,6 +61,7 @@ </Menu> <Menu mnemonicParsing="false" text="%main.menu.view"> <items> + <Menu fx:id="layoutMenu" mnemonicParsing="false" text="%main.menuitem.layout" /> <CheckMenuItem fx:id="alwaysOnTopItem" mnemonicParsing="false" onAction="#alwaysOnTopItemHandler" text="%main.menuitem.onTop" /> <CheckMenuItem fx:id="fullScreenMenuItem" mnemonicParsing="false" onAction="#fullScreenMenuItemHandler" text="%main.menuitem.fullScreen"> <accelerator> diff --git a/PlayWall/assets/de/tobias/playpad/assets/view/main/touch/header.fxml b/PlayWall/assets/de/tobias/playpad/assets/view/main/touch/header.fxml index b2c6aada340f2af7f12bb425ed9960707314ff58..6bfb1a31f55408e838d5f8bb5d506aefb4f7077b 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/view/main/touch/header.fxml +++ b/PlayWall/assets/de/tobias/playpad/assets/view/main/touch/header.fxml @@ -6,7 +6,6 @@ <?import javafx.scene.input.*?> <?import javafx.scene.text.*?> - <HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <children> <MenuBar fx:id="menuBar" maxHeight="1.7976931348623157E308" prefWidth="600.0" HBox.hgrow="ALWAYS"> @@ -63,6 +62,7 @@ </Menu> <Menu mnemonicParsing="false" text="%main.menu.view"> <items> + <Menu fx:id="layoutMenu" mnemonicParsing="false" text="%main.menuitem.layout" /> <CheckMenuItem fx:id="alwaysOnTopItem" mnemonicParsing="false" onAction="#alwaysOnTopItemHandler" text="%main.menuitem.onTop" /> <CheckMenuItem fx:id="fullScreenMenuItem" mnemonicParsing="false" onAction="#fullScreenMenuItemHandler" text="%main.menuitem.fullScreen"> <accelerator> diff --git a/PlayWall/src/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/de/tobias/playpad/PlayPadMain.java index 191db4720c2d3ca11aaf8e0d5f1c28679619f0ae..dbf437a19b17e708d86a77cc6fb249076d25a634 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadMain.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadMain.java @@ -253,6 +253,7 @@ public class PlayPadMain extends Application implements LocalizationDelegate, Pr registryCollection.getMappers().loadComponentsFromFile("de/tobias/playpad/components/Mapper.xml"); registryCollection.getPadContents().loadComponentsFromFile("de/tobias/playpad/components/PadContent.xml"); registryCollection.getTriggerItems().loadComponentsFromFile("de/tobias/playpad/components/Trigger.xml"); + registryCollection.getMainLayouts().loadComponentsFromFile("de/tobias/playpad/components/Layout.xml"); // Set Default registryCollection.getAudioHandlers().setDefaultID(JavaFXAudioHandler.NAME); diff --git a/PlayWall/src/de/tobias/playpad/RegistryCollectionImpl.java b/PlayWall/src/de/tobias/playpad/RegistryCollectionImpl.java index adbf609507f9911b26550ad8face01e7ed85959a..672126602794356c2ed5400a396c02301adb8f41 100644 --- a/PlayWall/src/de/tobias/playpad/RegistryCollectionImpl.java +++ b/PlayWall/src/de/tobias/playpad/RegistryCollectionImpl.java @@ -11,6 +11,7 @@ import de.tobias.playpad.registry.DefaultComponentRegistry; import de.tobias.playpad.registry.DefaultRegistry; import de.tobias.playpad.registry.Registry; import de.tobias.playpad.tigger.TriggerItemConnect; +import de.tobias.playpad.view.main.MainLayoutConnect; public class RegistryCollectionImpl implements RegistryCollection { @@ -21,6 +22,7 @@ public class RegistryCollectionImpl implements RegistryCollection { private Registry<MapperConnect> mapperRegistry; private PadContentRegistry padContentRegistry; private Registry<TriggerItemConnect> triggerItemRegistry; + private Registry<MainLayoutConnect> mainLayoutRegistry; public RegistryCollectionImpl() { actionRegistry = new ComponentRegistry<>("Action"); @@ -30,62 +32,47 @@ public class RegistryCollectionImpl implements RegistryCollection { mapperRegistry = new ComponentRegistry<>("Mapper"); padContentRegistry = new PadContentRegistry("PadContent"); triggerItemRegistry = new ComponentRegistry<>("Trigger"); + mainLayoutRegistry = new ComponentRegistry<>("MainLayout"); } - /* (non-Javadoc) - * @see de.tobias.playpad.RegistryCollection#getActionRegistry() - */ @Override public Registry<ActionConnect> getActions() { return actionRegistry; } - /* (non-Javadoc) - * @see de.tobias.playpad.RegistryCollection#getAudioHandlerRegistry() - */ @Override public AudioRegistry getAudioHandlers() { return audioHandlerRegistry; } - /* (non-Javadoc) - * @see de.tobias.playpad.RegistryCollection#getDragModeRegistry() - */ @Override public Registry<PadDragMode> getDragModes() { return dragModeRegistry; } - /* (non-Javadoc) - * @see de.tobias.playpad.RegistryCollection#getLayoutRegistry() - */ @Override public DefaultRegistry<DesignConnect> getDesigns() { return layoutRegistry; } - /* (non-Javadoc) - * @see de.tobias.playpad.RegistryCollection#getMapperRegistry() - */ @Override public Registry<MapperConnect> getMappers() { return mapperRegistry; } - /* (non-Javadoc) - * @see de.tobias.playpad.RegistryCollection#getPadContentRegistry() - */ @Override public PadContentRegistry getPadContents() { return padContentRegistry; } - /* (non-Javadoc) - * @see de.tobias.playpad.RegistryCollection#getTriggerItemRegistry() - */ @Override public Registry<TriggerItemConnect> getTriggerItems() { return triggerItemRegistry; } + + @Override + public Registry<MainLayoutConnect> getMainLayouts() { + return mainLayoutRegistry; + } } diff --git a/PlayWall/src/de/tobias/playpad/components/Layout.xml b/PlayWall/src/de/tobias/playpad/components/Layout.xml new file mode 100644 index 0000000000000000000000000000000000000000..8829c91086e0ec442b99b8deb875e8cd24952de8 --- /dev/null +++ b/PlayWall/src/de/tobias/playpad/components/Layout.xml @@ -0,0 +1,4 @@ +<Actions> + <Component id="Desktop">de.tobias.playpad.layout.desktop.DesktopMainLayoutConnect</Component> + <Component id="Touch">de.tobias.playpad.layout.touch.TouchMainLayoutConnect</Component> +</Actions> \ No newline at end of file diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java index 1fe791e98f5879311fe8bae04c53aae6d4b404a4..ab47b0db75b41ca03ed53f0977481eb6d350216b 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java @@ -14,7 +14,7 @@ public class DesktopMainLayoutConnect implements MainLayoutConnect { @Override public String name() { - return null; + return "Desktop Modus"; // TODO Localize } @Override diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java index 2b9352380dd3ca2addf045b8381dfbdf91283275..d053ee3719343657172ebc40c99edea966a26b08 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java @@ -10,10 +10,12 @@ import de.tobias.playpad.settings.ProfileNotFoundException; import de.tobias.playpad.settings.ProfileSettings; import de.tobias.playpad.view.main.MenuType; import de.tobias.playpad.viewcontroller.dialog.ImportDialog; +import de.tobias.playpad.viewcontroller.main.BasicMenuToolbarViewController; import de.tobias.playpad.viewcontroller.main.IMainViewController; import de.tobias.utils.util.Localization; import javafx.event.ActionEvent; import javafx.event.EventHandler; +import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.MenuItem; import javafx.scene.control.Slider; @@ -48,7 +50,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro @Override public void setLocked(boolean looked) { - // TODO Implement + dndModeMenuItem.setDisable(looked); } @Override @@ -60,32 +62,49 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro public void removeToolbarIcon(Image icon) { // TODO Implement } + + @Override + public void addToolbarItem(Node node) { + iconHbox.getChildren().add(node); + } + + @Override + public void removeToolbarItem(Node node) { + iconHbox.getChildren().remove(node); + } @Override public void addMenuItem(MenuItem item, MenuType type) { - // TODO Implement + if (type == MenuType.EXTENSION) { + extensionMenu.getItems().add(item); + } else if (type == MenuType.SETTINGS) { + // TODO Implement + } } @Override public void removeMenuItem(MenuItem item) { + if (extensionMenu.getItems().contains(item)) + extensionMenu.getItems().remove(item); + // TODO Implement } @Override public boolean isAlwaysOnTopActive() { - // TODO Imeplement - return false; + return alwaysOnTopItem.isSelected(); } @Override public boolean isFullscreenActive() { - //TODO Implement - return false; + return fullScreenMenuItem.isSelected(); } @Override public void deinit() { - // TODO Implement + super.deinit(); + toolbarHBox.prefWidthProperty().unbind(); + toolbarHBox.prefHeightProperty().unbind(); } @Override diff --git a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java index 7a4351cfdc65841020a1da47e4f6f0193b5de484..8b231ae891e57d9da36367c854c5757f55ccb307 100644 --- a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java +++ b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java @@ -14,7 +14,7 @@ public class TouchMainLayoutConnect implements MainLayoutConnect { @Override public String name() { - return null; + return "Touch Modus"; // TODO Localize } @Override diff --git a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java index ed5995a8e00b133464174fc9c3968efe8d99e726..eea53c7dd3d9abe8fc3c625901b9b0379a5777a7 100644 --- a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java @@ -1,10 +1,11 @@ package de.tobias.playpad.layout.touch; import de.tobias.playpad.PlayPadMain; -import de.tobias.playpad.layout.desktop.BasicMenuToolbarViewController; import de.tobias.playpad.view.main.MenuType; +import de.tobias.playpad.viewcontroller.main.BasicMenuToolbarViewController; import de.tobias.playpad.viewcontroller.main.IMainViewController; import javafx.event.ActionEvent; +import javafx.scene.Node; import javafx.scene.control.MenuItem; import javafx.scene.control.Slider; import javafx.scene.image.Image; @@ -35,6 +36,18 @@ public class TouchMenuToolbarViewController extends BasicMenuToolbarViewControll } + @Override + public void addToolbarItem(Node node) { + // TODO Auto-generated method stub + + } + + @Override + public void removeToolbarItem(Node node) { + // TODO Auto-generated method stub + + } + @Override public void addMenuItem(MenuItem item, MenuType type) { diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/BasicMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/BasicMenuToolbarViewController.java similarity index 86% rename from PlayWall/src/de/tobias/playpad/layout/desktop/BasicMenuToolbarViewController.java rename to PlayWall/src/de/tobias/playpad/viewcontroller/main/BasicMenuToolbarViewController.java index 40506594ff84fae081f337b7821715e11b5a5cc4..7f6a66274c4f2a69a75e48bd5e691ba5daf8f9dc 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/BasicMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/BasicMenuToolbarViewController.java @@ -1,4 +1,4 @@ -package de.tobias.playpad.layout.desktop; +package de.tobias.playpad.viewcontroller.main; import java.awt.Desktop; import java.io.IOException; @@ -9,16 +9,19 @@ import java.util.ResourceBundle; import de.tobias.playpad.AppUserInfoStrings; import de.tobias.playpad.PlayPadMain; +import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.Strings; import de.tobias.playpad.midi.Midi; import de.tobias.playpad.pad.view.IPadViewV2; import de.tobias.playpad.project.Project; import de.tobias.playpad.project.ProjectNotFoundException; import de.tobias.playpad.project.ProjectReference; +import de.tobias.playpad.registry.NoSuchComponentException; +import de.tobias.playpad.registry.Registry; import de.tobias.playpad.settings.Profile; -import de.tobias.playpad.settings.ProfileListener; import de.tobias.playpad.settings.ProfileNotFoundException; import de.tobias.playpad.settings.ProfileSettings; +import de.tobias.playpad.view.main.MainLayoutConnect; import de.tobias.playpad.viewcontroller.SettingsTabViewController; import de.tobias.playpad.viewcontroller.dialog.ImportDialog; import de.tobias.playpad.viewcontroller.dialog.NewProjectDialog; @@ -26,8 +29,6 @@ import de.tobias.playpad.viewcontroller.dialog.PluginViewController; import de.tobias.playpad.viewcontroller.dialog.PrintDialog; import de.tobias.playpad.viewcontroller.dialog.ProfileViewController; import de.tobias.playpad.viewcontroller.dialog.ProjectManagerDialog; -import de.tobias.playpad.viewcontroller.main.IMainViewController; -import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController; import de.tobias.playpad.viewcontroller.option.SettingsViewController; import de.tobias.playpad.viewcontroller.pad.PadDragListener; import de.tobias.utils.application.ApplicationInfo; @@ -40,8 +41,6 @@ import de.tobias.utils.util.Localization; import de.tobias.utils.util.Worker; import de.tobias.utils.util.net.FileUpload; import javafx.application.Platform; -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; @@ -52,13 +51,15 @@ import javafx.scene.control.Label; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; +import javafx.scene.control.RadioMenuItem; import javafx.scene.control.Slider; +import javafx.scene.control.ToggleGroup; import javafx.scene.control.ToolBar; import javafx.scene.layout.HBox; import javafx.stage.Modality; import javafx.stage.Stage; -public abstract class BasicMenuToolbarViewController extends MenuToolbarViewController implements ProfileListener, EventHandler<ActionEvent> { +public abstract class BasicMenuToolbarViewController extends MenuToolbarViewController implements EventHandler<ActionEvent> { // Menu @FXML protected Label volumeUpLabel; @@ -78,11 +79,7 @@ public abstract class BasicMenuToolbarViewController extends MenuToolbarViewCont @FXML protected Label volumeDownLabel; @FXML protected CheckMenuItem dndModeMenuItem; @FXML protected CheckMenuItem alwaysOnTopItem; - - // Toolbar - private Label lockedLabel; - - private ChangeListener<Boolean> lockedListener; + @FXML protected Menu layoutMenu; // window references private IMainViewController mainViewController; @@ -91,27 +88,10 @@ public abstract class BasicMenuToolbarViewController extends MenuToolbarViewCont public BasicMenuToolbarViewController(String name, String path, ResourceBundle localization, IMainViewController mainViewController) { super(name, path, localization); this.mainViewController = mainViewController; + } - ProfileSettings profileSettings = Profile.currentProfile().getProfileSettings(); - Profile.registerListener(this); // Update, wenn sich das Profil ändert (remove Listener & add Listener) - - // Listener - lockedListener = new ChangeListener<Boolean>() { - - @Override - public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { - dndModeMenuItem.setDisable(newValue); - } - }; - profileSettings.lockedProperty().addListener(lockedListener); - lockedListener.changed(profileSettings.lockedProperty(), null, profileSettings.isLocked()); - - // Info Icons - lockedLabel = new Label(); - lockedLabel.setGraphic(new FontIcon(FontAwesomeType.LOCK)); - lockedListener.changed(profileSettings.lockedProperty(), null, profileSettings.isLocked()); - - // Icons Volume + @Override + public void init() { volumeDownLabel.setGraphic(new FontIcon("volume-item", FontAwesomeType.VOLUME_DOWN)); volumeUpLabel.setGraphic(new FontIcon("volume-item", FontAwesomeType.VOLUME_UP)); @@ -120,22 +100,29 @@ 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()); - }); + + Registry<MainLayoutConnect> mainLayouts = PlayPadPlugin.getRegistryCollection().getMainLayouts(); + ToggleGroup group = new ToggleGroup(); + + for (String layoutType : mainLayouts.getTypes()) { + try { + MainLayoutConnect connect = mainLayouts.getComponent(layoutType); + + RadioMenuItem item = new RadioMenuItem(connect.name()); + group.getToggles().add(item); + item.setOnAction((e) -> + { + mainViewController.setMainLayout(connect); + }); + layoutMenu.getItems().add(item); + } catch (NoSuchComponentException e) { + e.printStackTrace(); + } + } } - // Profile Listener @Override - public void reloadSettings(Profile oldProfile, Profile currentProfile) { - if (oldProfile != null) { - oldProfile.getProfileSettings().lockedProperty().removeListener(lockedListener); - } - ProfileSettings profileSettings = currentProfile.getProfileSettings(); - profileSettings.lockedProperty().addListener(lockedListener); - lockedListener.changed(profileSettings.lockedProperty(), null, profileSettings.isLocked()); + public void deinit() { } // Basic Event Handler diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/LockedListener.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/LockedListener.java new file mode 100644 index 0000000000000000000000000000000000000000..d7b8dbacdc22c070b2a5601f1c8b08876c78cfd4 --- /dev/null +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/LockedListener.java @@ -0,0 +1,34 @@ +package de.tobias.playpad.viewcontroller.main; + +import de.tobias.utils.ui.icon.FontAwesomeType; +import de.tobias.utils.ui.icon.FontIcon; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.scene.control.Label; + +public class LockedListener implements ChangeListener<Boolean> { + + private IMainViewController mainViewController; + + private Label lockedLabel; + + public LockedListener(IMainViewController mainViewController) { + this.mainViewController = mainViewController; + + lockedLabel = new Label(); + lockedLabel.setGraphic(new FontIcon(FontAwesomeType.LOCK)); + } + + @Override + public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { + if (mainViewController.getMenuToolbarController() != null) { + MenuToolbarViewController menuToolbarViewController = mainViewController.getMenuToolbarController(); + menuToolbarViewController.setLocked(newValue); + if (newValue) { + menuToolbarViewController.addToolbarItem(lockedLabel); + } else { + menuToolbarViewController.removeToolbarItem(lockedLabel); + } + } + } +} diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java index 9b2537d7a4460e35280f456428a888cd46e7e7e6..6cc641e9b9b0f28a0e591a06c1889cf232382184 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java @@ -33,6 +33,7 @@ import de.tobias.playpad.settings.Profile; import de.tobias.playpad.settings.ProfileListener; import de.tobias.playpad.settings.ProfileSettings; import de.tobias.playpad.view.PadView; +import de.tobias.playpad.view.main.MainLayoutConnect; import de.tobias.playpad.viewcontroller.IPadView; import de.tobias.playpad.viewcontroller.dialog.ErrorSummaryDialog; import de.tobias.playpad.viewcontroller.pad.PadDragListener; @@ -609,7 +610,8 @@ public class MainViewController extends ViewController implements IMainViewContr { try { Thread.sleep(PlayPadMain.displayTimeMillis * 2); - } catch (Exception e) {} + } catch (Exception e) { + } Platform.runLater(() -> { toolbarController.getToolbarHBox().setOpacity(1); @@ -731,4 +733,10 @@ public class MainViewController extends ViewController implements IMainViewContr // TODO Auto-generated method stub return null; } + + @Override + public void setMainLayout(MainLayoutConnect mainLayoutConnect) { + // TODO Auto-generated method stub + + } } diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java index 752fb052d3b21c0d3132a31394179b02cc11d0aa..ed2fa39868b0897924f5a00085734f73871b2922 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java @@ -84,12 +84,20 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon // Style private Color gridColor; + // Listener + private VolumeChangeListener volumeChangeListener; + private LockedListener lockedListener; + public MainViewControllerV2(List<WindowListener<IMainViewController>> listener) { super("mainViewV2", "de/tobias/playpad/assets/view/main/", null, PlayPadMain.getUiResourceBundle()); padViews = new ArrayList<>(); setMainLayout(new DesktopMainLayoutConnect()); // DEBUG + // Init Listener + volumeChangeListener = new VolumeChangeListener(this); + lockedListener = new LockedListener(this); + Profile.registerListener(this); reloadSettings(null, Profile.currentProfile()); @@ -430,27 +438,36 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon public void reloadSettings(Profile old, Profile currentProfile) { createPadViews(); - final DoubleProperty valueProperty = menuToolbarViewController.getVolumeSlider().valueProperty(); + final DoubleProperty volumeFaderValueProperty = menuToolbarViewController.getVolumeSlider().valueProperty(); if (old != null) { // Unbind Volume Slider - valueProperty.unbindBidirectional(old.getProfileSettings().volumeProperty()); + volumeFaderValueProperty.unbindBidirectional(old.getProfileSettings().volumeProperty()); + volumeFaderValueProperty.removeListener(volumeChangeListener); + // Clear Feedback on Devie (LaunchPad Light off) old.getMappings().getActiveMapping().getActions().forEach(action -> action.clearFeedback()); + + // LockedListener + old.getProfileSettings().lockedProperty().removeListener(lockedListener); } // Volume - valueProperty.bindBidirectional(currentProfile.getProfileSettings().volumeProperty()); + volumeFaderValueProperty.bindBidirectional(currentProfile.getProfileSettings().volumeProperty()); + volumeFaderValueProperty.addListener(volumeChangeListener); - final ProfileSettings profilSettings = currentProfile.getProfileSettings(); + final ProfileSettings profileSettings = currentProfile.getProfileSettings(); final Mapping activeMapping = currentProfile.getMappings().getActiveMapping(); + + // LockedListener + profileSettings.lockedProperty().addListener(lockedListener); // MIDI - if (profilSettings.isMidiActive() && profilSettings.getMidiDevice() != null) { + if (profileSettings.isMidiActive() && profileSettings.getMidiDevice() != null) { // Load known MIDI Device Worker.runLater(() -> { - loadMidiDevice(profilSettings.getMidiDevice()); + loadMidiDevice(profileSettings.getMidiDevice()); applyColorsToMappers(); @@ -464,7 +481,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon }); }); } - + loadUserCss(); if (old != null && currentProfile != null) { showPage(currentPageShowing); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/VolumeChangeListener.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/VolumeChangeListener.java new file mode 100644 index 0000000000000000000000000000000000000000..4549271bf4fcc3fdee3d56e6af04d85b76a54af7 --- /dev/null +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/VolumeChangeListener.java @@ -0,0 +1,18 @@ +package de.tobias.playpad.viewcontroller.main; + +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; + +public class VolumeChangeListener implements ChangeListener<Number> { + + private IMainViewController mainViewController; + + public VolumeChangeListener(IMainViewController mainViewController) { + this.mainViewController = mainViewController; + } + + @Override + public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { + mainViewController.setPadVolume(newValue.doubleValue()); + } +} diff --git a/PlayWallCore/src/de/tobias/playpad/RegistryCollection.java b/PlayWallCore/src/de/tobias/playpad/RegistryCollection.java index 43f0017afa74b66f6087534c57355b6cc7f90784..3030315552ee1c4f37f28b1f96518a76e9e9b79e 100644 --- a/PlayWallCore/src/de/tobias/playpad/RegistryCollection.java +++ b/PlayWallCore/src/de/tobias/playpad/RegistryCollection.java @@ -9,6 +9,7 @@ import de.tobias.playpad.pad.drag.PadDragMode; import de.tobias.playpad.registry.DefaultRegistry; import de.tobias.playpad.registry.Registry; import de.tobias.playpad.tigger.TriggerItemConnect; +import de.tobias.playpad.view.main.MainLayoutConnect; /** * Schnittstelle für die einzelen Registry. Hier sind alle Registries gesammelt, damit Komponenten registriert werden können. Die @@ -34,4 +35,5 @@ public interface RegistryCollection { public Registry<TriggerItemConnect> getTriggerItems(); + public Registry<MainLayoutConnect> getMainLayouts(); } \ No newline at end of file diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java index 8727d7b22a7c2121f96ed64972dd42986b05751c..52582987afb9676152faca61a6cca2a09302220d 100644 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java @@ -5,6 +5,7 @@ import java.util.List; import de.tobias.playpad.midi.MidiListener; import de.tobias.playpad.pad.view.IPadViewV2; import de.tobias.playpad.project.Project; +import de.tobias.playpad.view.main.MainLayoutConnect; import de.tobias.utils.ui.NotificationHandler; import javafx.event.EventHandler; import javafx.event.EventType; @@ -73,4 +74,6 @@ public interface IMainViewController extends NotificationHandler { public MenuToolbarViewController getMenuToolbarController(); public void setPadVolume(double doubleValue); + + public void setMainLayout(MainLayoutConnect mainLayoutConnect); } diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java index b28e343d23d923315f125c2ac7e88d1db25788a9..1bd8bf92067a6042a0394334ca7d8b99ad15256e 100644 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java @@ -5,12 +5,14 @@ import java.util.ResourceBundle; import de.tobias.playpad.settings.ProfileSettings; import de.tobias.playpad.view.main.MenuType; import de.tobias.utils.ui.ContentViewController; +import javafx.scene.Node; import javafx.scene.control.MenuItem; import javafx.scene.control.Slider; import javafx.scene.image.Image; /** - * Abstrakter ViewController für das Menu und die Toolbar des Hauptfenster. Jede Implementierung kann die GUI selbst bestimmen. + * Abstrakter ViewController für das Menu und die Toolbar des Hauptfenster. Jede Implementierung kann die GUI selbst + * bestimmen. * * @author tobias * @@ -45,8 +47,8 @@ public abstract class MenuToolbarViewController extends ContentViewController { } /** - * Wird von MainViwController aufgerufen, wenn die Buttons für die einzelnen Seiten neu erstellt werden müssen. Das ist der Fall beim - * laden eines Projektes und bei Änderungen an den Einstellungen. + * Wird von MainViwController aufgerufen, wenn die Buttons für die einzelnen Seiten neu erstellt werden müssen. Das + * ist der Fall beim laden eines Projektes und bei Änderungen an den Einstellungen. */ public abstract void initPageButtons(); @@ -55,8 +57,8 @@ public abstract class MenuToolbarViewController extends ContentViewController { */ /** - * Mit dieser Methode werden mögliche Eingaben vom Nutzer geblocked (Beispiel: GUI Element disable). Diese Methode wird bei Änderung der - * Einstellung aufgerufen. + * Mit dieser Methode werden mögliche Eingaben vom Nutzer geblocked (Beispiel: GUI Element disable). Diese Methode + * wird bei Änderung der Einstellung aufgerufen. * * @param looked * true locked, false unlocked @@ -74,6 +76,14 @@ public abstract class MenuToolbarViewController extends ContentViewController { */ public abstract void addToolbarIcon(Image icon); + /** + * Fügt ein Node zur Toolbar hinzu. + * + * @param node + * node + */ + public abstract void addToolbarItem(Node node); + /** * Entfernt ein spezielles Icon von der GUI. * @@ -82,6 +92,15 @@ public abstract class MenuToolbarViewController extends ContentViewController { */ public abstract void removeToolbarIcon(Image icon); + /** + * Entfernt das Toolbar Item. + * + * @param node + * node + * @see MenuToolbarViewController#addToolbarItem(Node) + */ + public abstract void removeToolbarItem(Node node); + // Menu Item /** * Fügt ein MenuItem zu einem speziellen Menu hinzu.