From 57e74c4c6682f7aa1967c0a457285df87096a30e Mon Sep 17 00:00:00 2001 From: tobias <tobias.ullerich@icloud.com> Date: Fri, 5 Aug 2016 20:04:14 +0200 Subject: [PATCH] Continue on main view --- .../main/LayoutChangedListener.java | 8 +-- .../main/MainViewControllerV2.java | 53 ++++++++++--------- .../playpad/view/main/MainLayoutHandler.java | 28 ++++++++++ .../AudioTypeViewController.java | 26 ++++++++- .../main/IMainViewController.java | 3 +- .../actionsplugin/impl/ActionsPluginImpl.java | 22 ++++---- .../awakeplugin/impl/AwakePluginImpl.java | 21 +++++--- .../main/impl/EqualizerPluginImpl.java | 13 +++-- 8 files changed, 122 insertions(+), 52 deletions(-) create mode 100644 PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutHandler.java diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/LayoutChangedListener.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/LayoutChangedListener.java index a170a777..ba475861 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/LayoutChangedListener.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/LayoutChangedListener.java @@ -2,11 +2,13 @@ package de.tobias.playpad.viewcontroller.main; import java.util.List; +import de.tobias.playpad.view.main.MainLayoutHandler; + public class LayoutChangedListener { - public void handle(List<Runnable> runnables) { - for (Runnable run : runnables) { - run.run(); + public void handle(List<MainLayoutHandler> runnables, MenuToolbarViewController oldToolbar, MenuToolbarViewController newToolbar) { + for (MainLayoutHandler run : runnables) { + run.handle(oldToolbar, newToolbar); } } } diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java index 7f9db22c..6e9a67e6 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java @@ -27,6 +27,7 @@ import de.tobias.playpad.settings.Profile; import de.tobias.playpad.settings.ProfileListener; import de.tobias.playpad.settings.ProfileSettings; import de.tobias.playpad.view.main.MainLayoutConnect; +import de.tobias.playpad.view.main.MainLayoutHandler; import de.tobias.playpad.viewcontroller.pad.PadDragListener; import de.tobias.utils.ui.BasicControllerSettings; import de.tobias.utils.ui.NotificationHandler; @@ -61,7 +62,6 @@ import javafx.stage.Modality; import javafx.stage.Screen; import javafx.stage.Stage; -// TODO Extract Color Adjust methodes public class MainViewControllerV2 extends ViewController implements IMainViewController, NotificationHandler, ProfileListener { private static final int FIRST_PAGE = 0; @@ -89,7 +89,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon private Color gridColor; // Layout - private List<Runnable> layoutActions; + private List<MainLayoutHandler> layoutActions; // Listener private VolumeChangeListener volumeChangeListener; @@ -116,7 +116,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon // Wenn sich die Toolbar ändert werden die Button neu erstellt. Das ist hier, weil es nur einmal als Listener da // sein muss. Die // Methode wird aber an unterschiedlichen stellen mehrmals aufgerufen - performLayoutDependendAction(() -> + performLayoutDependendAction((oldToolbar, newToolbar) -> { if (menuToolbarViewController != null) menuToolbarViewController.initPageButtons(); @@ -187,8 +187,13 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon } private void initMainLayout() { + ProfileSettings settings = Profile.currentProfile().getProfileSettings(); + if (menuToolbarViewController != null) { menuToolbarViewController.deinit(); + + menuToolbarViewController.getVolumeSlider().valueProperty().unbindBidirectional(settings.volumeProperty()); + menuToolbarViewController.getVolumeSlider().valueProperty().removeListener(volumeChangeListener); } removePadsFromView(); @@ -203,9 +208,12 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon newMenuToolbarViewController.setFullScreenActive(this.menuToolbarViewController.isFullscreenActive()); } + layoutChangedListener.handle(layoutActions, this.menuToolbarViewController, newMenuToolbarViewController); this.menuToolbarViewController = newMenuToolbarViewController; - layoutChangedListener.handle(layoutActions); + menuToolbarViewController.getVolumeSlider().valueProperty().bindBidirectional(settings.volumeProperty()); + menuToolbarViewController.getVolumeSlider().valueProperty().addListener(volumeChangeListener); + createPadViews(); showPage(currentPageShowing); @@ -462,7 +470,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon // New addPadsToView(); } - + if (menuToolbarViewController != null) { menuToolbarViewController.hilightPageButton(page); } @@ -487,26 +495,23 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon @Override public void showLiveInfo() { - if (!shown) { - if (menuToolbarViewController != null) { - menuToolbarViewController.showLiveLabel(true); - shown = true; - Worker.runLater(() -> + if (!shown && menuToolbarViewController != null) { + menuToolbarViewController.showLiveLabel(true); + shown = true; + Worker.runLater(() -> + { + try { + Thread.sleep(PlayPadMain.displayTimeMillis * 2); + } catch (Exception e) { + } + Platform.runLater(() -> { - try { - Thread.sleep(PlayPadMain.displayTimeMillis * 2); - } catch (Exception e) { - } - Platform.runLater(() -> - { - if (menuToolbarViewController != null) - menuToolbarViewController.showLiveLabel(false); - shown = false; - }); + if (menuToolbarViewController != null) + menuToolbarViewController.showLiveLabel(false); + shown = false; }); - } + }); } - } // Settings @@ -706,8 +711,8 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon } @Override - public void performLayoutDependendAction(Runnable runnable) { - runnable.run(); + public void performLayoutDependendAction(MainLayoutHandler runnable) { + runnable.handle(null, menuToolbarViewController); layoutActions.add(runnable); } } diff --git a/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutHandler.java b/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutHandler.java new file mode 100644 index 00000000..23d1d5b7 --- /dev/null +++ b/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutHandler.java @@ -0,0 +1,28 @@ +package de.tobias.playpad.view.main; + +import de.tobias.playpad.viewcontroller.main.IMainViewController; +import de.tobias.playpad.viewcontroller.main.MenuToolbarViewController; + +/** + * Schnittstelle für das Handle einer neunen Toolbar. Diese Methode wird vom MainView automatisch bei einem neuen Layout + * aufgeführt. + * + * @author tobias + * + * @see IMainViewController#performLayoutDependendAction(MainLayoutHandler) + * @see MainLayoutConnect + */ +@FunctionalInterface +public interface MainLayoutHandler { + + /** + * Listener Methode für den Wechsel der Toolbar. + * + * @param oldToolbar + * Alte Toolbar + * @param newToolbar + * Neue Toolbar + */ + public void handle(MenuToolbarViewController oldToolbar, MenuToolbarViewController newToolbar); + +} diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java index e1f32c78..ee065a8d 100644 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/AudioTypeViewController.java @@ -2,14 +2,36 @@ package de.tobias.playpad.viewcontroller; import java.util.ResourceBundle; +import de.tobias.playpad.audio.AudioHandlerConnect; import de.tobias.utils.ui.ContentViewController; - +/** + * Einstellungen ViewController für einen sAudio Handler. + * + * @author tobias + * + * @see AudioHandlerConnect + */ public abstract class AudioTypeViewController extends ContentViewController { + /** + * Neuer ViewController. + * + * @param name + * Name der FXML + * @param path + * Path zur FXML (ohne Dateiname) + * @param localization + * Localization + */ public AudioTypeViewController(String name, String path, ResourceBundle localization) { super(name, path, localization); } - + + /** + * Prüft ob die Einstellungen geändert wurden. + * + * @return <code>true</code> Audio Einstellungen für Pads werden automatisch neu geladen + */ public abstract boolean isChanged(); } diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java index b735be99..2d58a59e 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.view.main.MainLayoutConnect; +import de.tobias.playpad.view.main.MainLayoutHandler; import de.tobias.utils.ui.NotificationHandler; import javafx.event.EventHandler; import javafx.event.EventType; @@ -56,5 +57,5 @@ public interface IMainViewController extends NotificationHandler { public void setMainLayout(MainLayoutConnect mainLayoutConnect); - public void performLayoutDependendAction(Runnable runnable); + public void performLayoutDependendAction(MainLayoutHandler runnable); } diff --git a/PlayWallPlugins/actionsplugin/de/tobias/playpad/actionsplugin/impl/ActionsPluginImpl.java b/PlayWallPlugins/actionsplugin/de/tobias/playpad/actionsplugin/impl/ActionsPluginImpl.java index 3fe6c239..e698c264 100644 --- a/PlayWallPlugins/actionsplugin/de/tobias/playpad/actionsplugin/impl/ActionsPluginImpl.java +++ b/PlayWallPlugins/actionsplugin/de/tobias/playpad/actionsplugin/impl/ActionsPluginImpl.java @@ -65,20 +65,24 @@ public class ActionsPluginImpl implements ActionsPlugin, ChangeListener<Boolean> muteHUD.setMinHeight(100); }); + ChangeListener<Boolean> listener = (a, b, c) -> + { + if (c && volume == -1 && Profile.currentProfile().getProfileSettings().getVolume() != 0) { + volume = Profile.currentProfile().getProfileSettings().getVolume(); + } else { + volume = -1; + } + }; + PlayPadPlugin.getImplementation().addMainViewListener(new WindowListener<IMainViewController>() { @Override public void onInit(IMainViewController t) { - t.performLayoutDependendAction(() -> + t.performLayoutDependendAction((oldToolbar, newToolbar) -> { - t.getMenuToolbarController().getVolumeSlider().valueChangingProperty().addListener((a, b, c) -> - { - if (c && volume == -1 && Profile.currentProfile().getProfileSettings().getVolume() != 0) { - volume = Profile.currentProfile().getProfileSettings().getVolume(); - } else { - volume = -1; - } - }); + if (oldToolbar != null) + oldToolbar.getVolumeSlider().valueChangingProperty().removeListener(listener); + newToolbar.getVolumeSlider().valueChangingProperty().addListener(listener); }); } }); diff --git a/PlayWallPlugins/awakeplugin/de/tobias/playpad/awakeplugin/impl/AwakePluginImpl.java b/PlayWallPlugins/awakeplugin/de/tobias/playpad/awakeplugin/impl/AwakePluginImpl.java index 91bd1d0a..7d6d1646 100644 --- a/PlayWallPlugins/awakeplugin/de/tobias/playpad/awakeplugin/impl/AwakePluginImpl.java +++ b/PlayWallPlugins/awakeplugin/de/tobias/playpad/awakeplugin/impl/AwakePluginImpl.java @@ -143,19 +143,24 @@ public class AwakePluginImpl implements AwakePlugin, WindowListener<IMainViewCon @Override public void onInit(IMainViewController t) { - t.performLayoutDependendAction(() -> + activeMenu = new CheckMenuItem(); + activeMenu.setOnAction(this); + activeMenu.setText(bundle.getString("menutitle")); + activeMenu.setSelected(settings.active); + + t.performLayoutDependendAction((oldToolbar, newToolbar) -> { - activeMenu = new CheckMenuItem(); - activeMenu.setOnAction(this); - activeMenu.setText(bundle.getString("menutitle")); - activeMenu.setSelected(settings.active); - t.getMenuToolbarController().addMenuItem(activeMenu, MenuType.EXTENSION); + if (oldToolbar != null) + oldToolbar.removeMenuItem(activeMenu); + newToolbar.addMenuItem(activeMenu, MenuType.EXTENSION); if (iconLabel != null) { if (settings.active) { - t.getMenuToolbarController().addToolbarItem(iconLabel); + if (oldToolbar != null) + oldToolbar.removeToolbarItem(iconLabel); + newToolbar.addToolbarItem(iconLabel); } else { - t.getMenuToolbarController().removeToolbarItem(iconLabel); + newToolbar.removeToolbarItem(iconLabel); } } }); diff --git a/PlayWallPlugins/equalizerplugin/de/tobias/playpad/equalizerplugin/main/impl/EqualizerPluginImpl.java b/PlayWallPlugins/equalizerplugin/de/tobias/playpad/equalizerplugin/main/impl/EqualizerPluginImpl.java index c8ff9867..92c52557 100644 --- a/PlayWallPlugins/equalizerplugin/de/tobias/playpad/equalizerplugin/main/impl/EqualizerPluginImpl.java +++ b/PlayWallPlugins/equalizerplugin/de/tobias/playpad/equalizerplugin/main/impl/EqualizerPluginImpl.java @@ -69,12 +69,15 @@ public class EqualizerPluginImpl implements EqualizerPlugin, WindowListener<IMai public void onInit(IMainViewController t) { mainStage = t.getStage(); - t.performLayoutDependendAction(() -> + eqMenuItem = new MenuItem(); + eqMenuItem.setText(bundle.getString("eq.menuitem.name")); + eqMenuItem.setOnAction(this); + + t.performLayoutDependendAction((oldToolbar, newToolbar) -> { - eqMenuItem = new MenuItem(); - eqMenuItem.setText(bundle.getString("eq.menuitem.name")); - eqMenuItem.setOnAction(this); - t.getMenuToolbarController().addMenuItem(eqMenuItem, MenuType.EXTENSION); + if (oldToolbar != null) + oldToolbar.removeMenuItem(eqMenuItem); + newToolbar.addMenuItem(eqMenuItem, MenuType.EXTENSION); }); } -- GitLab