From 694ef5870cbea6804cf2ceb8257080a5dd1977ec Mon Sep 17 00:00:00 2001 From: tobias <tobias.ullerich@icloud.com> Date: Fri, 5 Aug 2016 22:03:00 +0200 Subject: [PATCH] Code Cleaning Performance Issue on MainLayout Switching fixed add Comments --- .../playpad/action/cartaction/CartAction.java | 4 +- .../desktop/DesktopMainLayoutConnect.java | 16 +++ .../DesktopMenuToolbarViewController.java | 17 +-- .../layout/touch/TouchMainLayoutConnect.java | 16 +++ .../touch/TouchMenuToolbarViewController.java | 24 +--- .../pad/listener/PadContentListener.java | 9 +- .../main/MainViewControllerV2.java | 44 +++---- .../main/VolumeChangeListener.java | 2 +- .../option/MappingTabViewController.java | 3 +- .../viewcontroller/pad/PadDragListener.java | 1 - .../src/de/tobias/playpad/action/Mapping.java | 6 + .../action/feedback/ColorAdjustable.java | 9 ++ .../action/feedback}/ColorAdjuster.java | 27 +++-- .../playpad/view/main/MainLayoutConnect.java | 8 ++ .../playpad/view/main/MainLayoutHandler.java | 5 +- .../main/IMainViewController.java | 110 ++++++++++++++++-- .../main/MenuToolbarViewController.java | 73 +++++++----- 17 files changed, 256 insertions(+), 118 deletions(-) create mode 100644 PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjustable.java rename {PlayWall/src/de/tobias/playpad/viewcontroller/main => PlayWallCore/src/de/tobias/playpad/action/feedback}/ColorAdjuster.java (70%) diff --git a/PlayWall/src/de/tobias/playpad/action/cartaction/CartAction.java b/PlayWall/src/de/tobias/playpad/action/cartaction/CartAction.java index 9d15775c..4c3f5c71 100644 --- a/PlayWall/src/de/tobias/playpad/action/cartaction/CartAction.java +++ b/PlayWall/src/de/tobias/playpad/action/cartaction/CartAction.java @@ -6,6 +6,7 @@ import de.tobias.playpad.Strings; import de.tobias.playpad.action.Action; import de.tobias.playpad.action.InputType; import de.tobias.playpad.action.connect.CartActionConnect; +import de.tobias.playpad.action.feedback.ColorAdjustable; import de.tobias.playpad.action.feedback.FeedbackType; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; @@ -18,7 +19,7 @@ import de.tobias.utils.util.Localization; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; -public class CartAction extends Action { +public class CartAction extends Action implements ColorAdjustable { public enum ControlMode { PLAY_PAUSE, @@ -63,6 +64,7 @@ public class CartAction extends Action { this.mode = mode; } + @Override public boolean isAutoFeedbackColors() { return autoFeedbackColors; } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java index 9ef7c735..e39b0662 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMainLayoutConnect.java @@ -1,5 +1,7 @@ package de.tobias.playpad.layout.desktop; +import java.util.Stack; + import de.tobias.playpad.pad.view.IPadViewV2; import de.tobias.playpad.view.main.MainLayoutConnect; import de.tobias.playpad.viewcontroller.main.IMainViewController; @@ -9,6 +11,12 @@ public class DesktopMainLayoutConnect implements MainLayoutConnect { private DesktopMenuToolbarViewController desktopMenuToolbarViewController; + private Stack<IPadViewV2> recyclingStack; + + public DesktopMainLayoutConnect() { + recyclingStack = new Stack<>(); + } + @Override public String getType() { return "Desktop"; @@ -29,9 +37,17 @@ public class DesktopMainLayoutConnect implements MainLayoutConnect { @Override public IPadViewV2 createPadView() { + if (!recyclingStack.isEmpty()) { + return recyclingStack.pop(); + } return new DesktopPadView(); } + @Override + public void recyclePadView(IPadViewV2 padView) { + recyclingStack.push(padView); + } + @Override public String getStylesheet() { return null; diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java index c8e5b424..94adf0b7 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java @@ -56,7 +56,6 @@ import javafx.scene.control.MenuItem; import javafx.scene.control.RadioMenuItem; import javafx.scene.control.Slider; import javafx.scene.control.ToggleGroup; -import javafx.scene.image.Image; import javafx.scene.input.KeyCombination; import javafx.stage.Modality; import javafx.stage.Stage; @@ -90,7 +89,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro toolbarHBox.prefWidthProperty().bind(toolbar.widthProperty().subtract(25)); toolbarHBox.prefHeightProperty().bind(toolbar.minHeightProperty()); - showLiveLabel(false); + showLiveInfo(false); initLayoutMenu(); } @@ -167,16 +166,6 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro fullScreenMenuItem.setSelected(fullScreenActive); } - @Override - public void addToolbarIcon(Image icon) { - // TODO Implement - } - - @Override - public void removeToolbarIcon(Image icon) { - // TODO Implement - } - @Override public void addToolbarItem(Node node) { iconHbox.getChildren().add(node); @@ -229,7 +218,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro } @Override - public void showLiveLabel(boolean show) { + public void showLiveInfo(boolean show) { liveLabel.setVisible(show); } @@ -333,7 +322,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro ProfileViewController controller = new ProfileViewController(mainViewController.getStage(), currentProject); controller.getStage().showAndWait(); - mainViewController.setTitle(); + mainViewController.updateWindowTitle(); }); } diff --git a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java index 5616af4a..be191f56 100644 --- a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java +++ b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMainLayoutConnect.java @@ -1,5 +1,7 @@ package de.tobias.playpad.layout.touch; +import java.util.Stack; + import de.tobias.playpad.pad.view.IPadViewV2; import de.tobias.playpad.view.main.MainLayoutConnect; import de.tobias.playpad.viewcontroller.main.IMainViewController; @@ -9,6 +11,12 @@ public class TouchMainLayoutConnect implements MainLayoutConnect { private TouchMenuToolbarViewController touchMainLayoutConnect; + private Stack<IPadViewV2> recyclingStack; + + public TouchMainLayoutConnect() { + recyclingStack = new Stack<>(); + } + @Override public String getType() { return "Touch"; @@ -30,9 +38,17 @@ public class TouchMainLayoutConnect implements MainLayoutConnect { @Override public IPadViewV2 createPadView() { + if (!recyclingStack.isEmpty()) { + return recyclingStack.pop(); + } return new TouchPadView(); } + @Override + public void recyclePadView(IPadViewV2 padView) { + recyclingStack.push(padView); + } + @Override public String getStylesheet() { return "de/tobias/playpad/assets/style/touch.css"; diff --git a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java index c976d00a..34f32b4c 100644 --- a/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/touch/TouchMenuToolbarViewController.java @@ -37,7 +37,7 @@ public class TouchMenuToolbarViewController extends BasicMenuToolbarViewControll toolbarHBox.prefWidthProperty().bind(toolbar.widthProperty().subtract(25)); toolbarHBox.prefHeightProperty().bind(toolbar.minHeightProperty()); - showLiveLabel(false); + showLiveInfo(false); } @Override @@ -70,16 +70,6 @@ public class TouchMenuToolbarViewController extends BasicMenuToolbarViewControll fullScreenMenuItem.setSelected(fullScreenActive); } - @Override - public void addToolbarIcon(Image icon) { - // TODO Implement - } - - @Override - public void removeToolbarIcon(Image icon) { - // TODO Implement - } - @Override public void addToolbarItem(Node node) { iconHbox.getChildren().add(node); @@ -91,21 +81,19 @@ public class TouchMenuToolbarViewController extends BasicMenuToolbarViewControll } @Override - public void addMenuItem(MenuItem item, MenuType type) { - } + public void addMenuItem(MenuItem item, MenuType type) {} @Override - public void removeMenuItem(MenuItem item) { - } + public void removeMenuItem(MenuItem item) {} @Override public boolean isAlwaysOnTopActive() { - return false; // TODO + return alwaysOnTopItem.isSelected(); } @Override public boolean isFullscreenActive() { - return false; // TODO + return fullScreenMenuItem.isSelected(); } @Override @@ -115,7 +103,7 @@ public class TouchMenuToolbarViewController extends BasicMenuToolbarViewControll } @Override - public void showLiveLabel(boolean show) { + public void showLiveInfo(boolean show) { liveLabel.setVisible(show); } diff --git a/PlayWall/src/de/tobias/playpad/pad/listener/PadContentListener.java b/PlayWall/src/de/tobias/playpad/pad/listener/PadContentListener.java index 728e1590..98135071 100644 --- a/PlayWall/src/de/tobias/playpad/pad/listener/PadContentListener.java +++ b/PlayWall/src/de/tobias/playpad/pad/listener/PadContentListener.java @@ -29,15 +29,14 @@ public class PadContentListener implements ChangeListener<PadContent> { controller.updateButtonDisable(); controller.updateTimeLabel(); - // TODO PadContentListener - // // Remove old listener + // Remove old listener if (oldValue != null && oldValue instanceof Durationable) { Durationable oldDurationable = (Durationable) oldValue; oldDurationable.durationProperty().removeListener(controller.getPadDurationListener()); oldDurationable.positionProperty().removeListener(controller.getPadPositionListener()); } - // - // // set new content listener / bindings + + // set new content listener / bindings if (newValue instanceof Durationable) { controller.getView().setPlaybarVisible(true); @@ -45,7 +44,7 @@ public class PadContentListener implements ChangeListener<PadContent> { durationable.durationProperty().addListener(controller.getPadDurationListener()); durationable.positionProperty().addListener(controller.getPadPositionListener()); - // // Init Duration + // Init Duration controller.getPadDurationListener().changed(null, null, durationable.getDuration()); } else { controller.getView().setPlaybarVisible(false); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java index 6e9a67e6..29fb2c9b 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewControllerV2.java @@ -75,7 +75,6 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon private List<IPadViewV2> padViews; private MenuToolbarViewController menuToolbarViewController; - private MainLayoutConnect mainLayout; private Project openProject; private int currentPageShowing = -1; @@ -89,6 +88,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon private Color gridColor; // Layout + private MainLayoutConnect mainLayout; private List<MainLayoutHandler> layoutActions; // Listener @@ -197,6 +197,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon } removePadsFromView(); + removePadViews(); headerBox.getChildren().clear(); MenuToolbarViewController newMenuToolbarViewController = mainLayout.createMenuToolbar(this); @@ -377,7 +378,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon showPage(FIRST_PAGE); loadUserCss(); - setTitle(); + updateWindowTitle(); } // Pad, Pages @@ -402,9 +403,9 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon padGridPane.getRowConstraints().add(c); } - // Pads - Remove Old PadViews - padViews.forEach(view -> padGridPane.getChildren().remove(view.getRootNode())); - padViews.clear(); + // Pads - Remove alte PadViews, falls noch welche vorhanden + if (!padViews.isEmpty()) + removePadViews(); // Neue PadViews for (int y = 0; y < profileSettings.getRows(); y++) { @@ -430,6 +431,15 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon menuToolbarViewController.initPageButtons(); } + private void removePadViews() { + padViews.forEach(view -> + { + padGridPane.getChildren().remove(view.getRootNode()); + mainLayout.recyclePadView(view); + }); + padViews.clear(); + } + /** * Zeigt die aktuellen Pads von einem Profil zu einer Seite in den entsprechenden Views an. */ @@ -482,7 +492,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon } @Override - public void setPadVolume(double volume) { + public void setGlobalVolume(double volume) { if (openProject != null) { for (Pad pad : openProject.getPads().values()) { if (pad != null) @@ -496,18 +506,17 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon @Override public void showLiveInfo() { if (!shown && menuToolbarViewController != null) { - menuToolbarViewController.showLiveLabel(true); + menuToolbarViewController.showLiveInfo(true); shown = true; Worker.runLater(() -> { try { Thread.sleep(PlayPadMain.displayTimeMillis * 2); - } catch (Exception e) { - } + } catch (Exception e) {} Platform.runLater(() -> { if (menuToolbarViewController != null) - menuToolbarViewController.showLiveLabel(false); + menuToolbarViewController.showLiveInfo(false); shown = false; }); }); @@ -549,8 +558,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon Worker.runLater(() -> { loadMidiDevice(profileSettings.getMidiDevice()); - - applyColorsToMappers(); + Profile.currentProfile().getMappings().getActiveMapping().adjustPadColorToMapper(openProject); Platform.runLater(() -> { @@ -656,7 +664,8 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon if (openProject != null) { Profile.currentProfile().currentLayout().applyCssMainView(this, getStage(), openProject); } - applyColorsToMappers(); + + Profile.currentProfile().getMappings().getActiveMapping().adjustPadColorToMapper(openProject); } /** @@ -679,14 +688,7 @@ public class MainViewControllerV2 extends ViewController implements IMainViewCon } } - @Override - public void applyColorsToMappers() { - if (openProject != null) { - ColorAdjuster.applyColorsToMappers(openProject); - } - } - - public void setTitle() { + public void updateWindowTitle() { if (openProject != null && Profile.currentProfile() != null) { getStage().setTitle(Localization.getString(Strings.UI_Window_Main_Title, openProject.getRef().getName(), Profile.currentProfile().getRef().getName())); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/VolumeChangeListener.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/VolumeChangeListener.java index 4549271b..2d017c45 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/VolumeChangeListener.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/VolumeChangeListener.java @@ -13,6 +13,6 @@ public class VolumeChangeListener implements ChangeListener<Number> { @Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { - mainViewController.setPadVolume(newValue.doubleValue()); + mainViewController.setGlobalVolume(newValue.doubleValue()); } } diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/MappingTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/MappingTabViewController.java index 670083cb..c58323cb 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/MappingTabViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/MappingTabViewController.java @@ -160,7 +160,8 @@ public class MappingTabViewController extends SettingsTabViewController implemen @Override public void reload(Profile profile, Project project, IMainViewController controller) { - controller.applyColorsToMappers(); + Project currentProject = PlayPadMain.getProgramInstance().getCurrentProject(); + Profile.currentProfile().getMappings().getActiveMapping().adjustPadColorToMapper(currentProject); Mapping activeMapping = Profile.currentProfile().getMappings().getActiveMapping(); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java b/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java index 4c3df054..2dc9956d 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java @@ -91,7 +91,6 @@ public class PadDragListener { // Drag and Drop von Pads if (event.getDragboard().hasString() && event.getDragboard().getString().trim().matches(REGEX)) { int padID = Integer.valueOf(event.getDragboard().getString()); - // TODO Pad Drag and Drop if (padID != sourcePad.getIndex()) { Collection<PadDragMode> connects = PlayPadPlugin.getRegistryCollection().getDragModes().getComponents(); diff --git a/PlayWallCore/src/de/tobias/playpad/action/Mapping.java b/PlayWallCore/src/de/tobias/playpad/action/Mapping.java index f7c1fd11..718327a1 100644 --- a/PlayWallCore/src/de/tobias/playpad/action/Mapping.java +++ b/PlayWallCore/src/de/tobias/playpad/action/Mapping.java @@ -7,6 +7,8 @@ import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; +import com.sun.scenario.effect.ColorAdjust; + import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.action.mapper.Mapper; import de.tobias.playpad.action.mapper.MapperConnect; @@ -176,6 +178,10 @@ public class Mapping implements Cloneable, ActionDisplayable { } getActions().forEach(action -> action.clearFeedback()); } + + public void adjustPadColorToMapper(Project project) { + + } @Override public Mapping clone() throws CloneNotSupportedException { diff --git a/PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjustable.java b/PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjustable.java new file mode 100644 index 00000000..4a851b77 --- /dev/null +++ b/PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjustable.java @@ -0,0 +1,9 @@ +package de.tobias.playpad.action.feedback; + +public interface ColorAdjustable { + + public boolean isAutoFeedbackColors(); + + public int getCart(); + +} diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/ColorAdjuster.java b/PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjuster.java similarity index 70% rename from PlayWall/src/de/tobias/playpad/viewcontroller/main/ColorAdjuster.java rename to PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjuster.java index 9ba8fb78..aa16d884 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/ColorAdjuster.java +++ b/PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjuster.java @@ -1,12 +1,8 @@ -package de.tobias.playpad.viewcontroller.main; +package de.tobias.playpad.action.feedback; -import java.util.List; +import java.util.Set; -import de.tobias.playpad.action.cartaction.CartAction; -import de.tobias.playpad.action.connect.CartActionConnect; -import de.tobias.playpad.action.feedback.ColorAssociator; -import de.tobias.playpad.action.feedback.DisplayableFeedbackColor; -import de.tobias.playpad.action.feedback.FeedbackMessage; +import de.tobias.playpad.action.Action; import de.tobias.playpad.action.mapper.Mapper; import de.tobias.playpad.action.mapper.MapperFeedbackable; import de.tobias.playpad.design.CartDesign; @@ -21,19 +17,22 @@ public class ColorAdjuster { public static void applyColorsToMappers(Project project) { // Apply Layout to Mapper - List<CartAction> actions = Profile.currentProfile().getMappings().getActiveMapping().getActions(CartActionConnect.TYPE); - for (CartAction cartAction : actions) { - if (cartAction.isAutoFeedbackColors()) { - for (Mapper mapper : cartAction.getMappers()) { - if (mapper instanceof MapperFeedbackable) { - mapColorForMapper(cartAction, mapper, project); + Set<Action> actions = Profile.currentProfile().getMappings().getActiveMapping().getActions(); + for (Action action : actions) { + if (action instanceof ColorAdjustable) { + ColorAdjustable adjustable = (ColorAdjustable) action; + if (adjustable.isAutoFeedbackColors()) { + for (Mapper mapper : action.getMappers()) { + if (mapper instanceof MapperFeedbackable) { + mapColorForMapper(adjustable, mapper, project); + } } } } } } - private static void mapColorForMapper(CartAction cartAction, Mapper mapper, Project project) { + private static void mapColorForMapper(ColorAdjustable cartAction, Mapper mapper, Project project) { MapperFeedbackable feedbackable = (MapperFeedbackable) mapper; if (feedbackable.supportFeedback() && mapper instanceof ColorAssociator) { ColorAssociator colorAssociator = (ColorAssociator) mapper; diff --git a/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutConnect.java b/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutConnect.java index 92bd7dbe..c81e610e 100644 --- a/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutConnect.java +++ b/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutConnect.java @@ -45,6 +45,14 @@ public interface MainLayoutConnect { */ public IPadViewV2 createPadView(); + /** + * Recycelt eine PadView, damit nicht immer neue erstellt werden müssen. + * + * @param padView + * alte PadView + */ + public void recyclePadView(IPadViewV2 padView); + /** * Gibt das Layout sepzifische Stylesheet zurück. * diff --git a/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutHandler.java b/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutHandler.java index 23d1d5b7..4c94753b 100644 --- a/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutHandler.java +++ b/PlayWallCore/src/de/tobias/playpad/view/main/MainLayoutHandler.java @@ -4,10 +4,11 @@ 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. + * Schnittstelle für das Handle einer neunen Toolbar. Diese Methode wird vom MainView automatisch bei einem neuen Layout aufgeführt. * * @author tobias + * + * @since 5.1.0 * * @see IMainViewController#performLayoutDependendAction(MainLayoutHandler) * @see MainLayoutConnect diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java index 2d58a59e..54550f4d 100644 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java @@ -15,20 +15,79 @@ import javafx.scene.paint.Color; import javafx.stage.Screen; import javafx.stage.Stage; +/** + * Schnittstelle für das Hautpfenster von PlayWall. + * + * @author tobias + * + * @since 5.1.0 + * + */ public interface IMainViewController extends NotificationHandler { + /** + * Setzt die Grid Farbe. + * + * @param color + * Neue Farbe + */ public void setGridColor(Color color); + /** + * Gibt die Stage des ViewControllers zurück. + * + * @return Stage + */ public Stage getStage(); - public int getPage(); - + /** + * Gibt den Root Node der View zurück. + * + * @return root node + */ public Parent getParent(); + /** + * Registriert ein KeyEvent Listener für das Fenster. + * + * @param eventType + * Event Type + * @param listener + * Listener für Event + */ public void registerKeyboardListener(EventType<KeyEvent> eventType, EventHandler<KeyEvent> listener); + /** + * Aktualisiert den Title des Fenster. + */ + public void updateWindowTitle(); + + /** + * Gibt den aktiven MenuToolbarController des Hauptfensters zurück. Dieser basiert auf dem aktuellen MainLayout. + * + * @return Controller + */ + public MenuToolbarViewController getMenuToolbarController(); + + /** + * Gibt den Bildschirm zurück, wo das Fenster aktiv ist, + * + * @return Screen + */ + public Screen getScreen(); + + /** + * Erstellt die Pad Views. + */ public void createPadViews(); + /** + * Gibt die Nummer Aktuelle Seite zurück. (0, n) + * + * @return Nummer der Seite + */ + public int getPage(); + /** * Zeigt eine Seite. Sollte die Seite bereits offen sien, passiert nichts. * @@ -37,25 +96,54 @@ public interface IMainViewController extends NotificationHandler { */ public void showPage(int page); + /** + * Lädt die CSS Files neu. + */ public void loadUserCss(); - public void applyColorsToMappers(); - + /** + * Zeigt einen Hinweis, wenn eine Aktion versucht wird zu machen, wie während der Wiedergabe eines Pads nicht erlaubt ist. Die Methode + * delegiert an die Toolbar weiter. + * + * @see MenuToolbarViewController#showLiveInfo(boolean) + */ public void showLiveInfo(); - public void setTitle(); - + /** + * Gibt die PadViews zurück. + * + * @return Liste der PadViews + */ List<IPadViewV2> getPadViews(); - public Screen getScreen(); - + /** + * Gibt den MIDI Handler des Hauptfensters für die Kacheln zurück. + * + * @return MIDI Handler + */ public MidiListener getMidiHandler(); - public MenuToolbarViewController getMenuToolbarController(); - - public void setPadVolume(double doubleValue); + /** + * Setzt das Globale Volume bei den Kacheln des aktuellen Projekts. + * + * @param doubleValue + * [0..1] + */ + public void setGlobalVolume(double doubleValue); + /** + * Setzt das MainLayout des Hauptfensters. + * + * @param mainLayoutConnect + */ public void setMainLayout(MainLayoutConnect mainLayoutConnect); + /** + * Führt eine Aktion für das Hauptfenster aus. Beispielsweise MenuItem in MenuToolbarController hinzufügen. Zudem wird diese Aktion + * gespeichert und bei einem Layoutwechsel erneut ausgeführt. + * + * @param runnable + * Funktion + */ public void performLayoutDependendAction(MainLayoutHandler runnable); } diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java index 61a34d54..9e2c066a 100644 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/MenuToolbarViewController.java @@ -8,11 +8,9 @@ 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 * @@ -21,7 +19,7 @@ import javafx.scene.image.Image; public abstract class MenuToolbarViewController extends ContentViewController { protected static final String CURRENT_PAGE_BUTTON = "current-page-button"; - + /** * Erstellt einen neuen ViewController ohne Localization * @@ -49,18 +47,18 @@ 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(); /* - * + * Handling Actions from MainViewController */ /** - * 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 @@ -69,30 +67,30 @@ public abstract class MenuToolbarViewController extends ContentViewController { */ public abstract void setLocked(boolean looked); - // Icons /** - * Fügt ein Info Icon zur GUI hinzu. + * Setzt das Menü für die Einstellung Always On Top. * - * @param icon - * icon + * @param alwaysOnTopActive + * <code>true</code> Menu Aktiv */ - public abstract void addToolbarIcon(Image icon); + public abstract void setAlwaysOnTopActive(boolean alwaysOnTopActive); /** - * Fügt ein Node zur Toolbar hinzu. + * Setzt das Menü für die Einstellung FullScreen. * - * @param node - * node + * @param fullScreenActive + * <code>true</code> FullScreen */ - public abstract void addToolbarItem(Node node); + public abstract void setFullScreenActive(boolean fullScreenActive); + // Icons /** - * Entfernt ein spezielles Icon von der GUI. + * Fügt ein Node zur Toolbar hinzu. * - * @param icon - * Remove Icon + * @param node + * node */ - public abstract void removeToolbarIcon(Image icon); + public abstract void addToolbarItem(Node node); /** * Entfernt das Toolbar Item. @@ -145,13 +143,30 @@ public abstract class MenuToolbarViewController extends ContentViewController { */ public abstract void deinit(); + /** + * Gibt den Global Volume Slider zurück. Jede Toolbar muss einen solchen für das Global Layout enthalten. + * + * @return Slider + */ public abstract Slider getVolumeSlider(); - public abstract void setAlwaysOnTopActive(boolean alwaysOnTopActive); - - public abstract void setFullScreenActive(boolean fullScreenActive); - - public abstract void showLiveLabel(boolean show); - - public abstract void hilightPageButton(int index); + // Utils + + /** + * Zeigt den Hinweis LiveModus, und signalisiert dem Nutzer, das eine Aktion blokciert ist. + * + * @param show + * <code>true</code> Hinweis Aktiv + */ + public abstract void showLiveInfo(boolean show); + + /** + * Hebt dem Page Button der Aktiv ist hervor. Gleichzeitig wird der vorherige Button nicht mehr Hervorgehebt. + * + * @param page + * Neue Seite + * + * @see IMainViewController#showPage(int) + */ + public abstract void hilightPageButton(int page); } -- GitLab