diff --git a/PlayWall/src/de/tobias/playpad/design/classic/ClassicGlobalDesign.java b/PlayWall/src/de/tobias/playpad/design/classic/ClassicGlobalDesign.java index 76d1ecb40bad3460d5c297150fec084d65b621b3..b58784c1a3027a6a78a5310e77b45eecc9116675 100644 --- a/PlayWall/src/de/tobias/playpad/design/classic/ClassicGlobalDesign.java +++ b/PlayWall/src/de/tobias/playpad/design/classic/ClassicGlobalDesign.java @@ -328,7 +328,7 @@ public class ClassicGlobalDesign extends Design implements GlobalDesign { PadSettings padSettings = pad.getPadSettings(); if (padSettings.isCustomLayout()) { - CartDesign layoutOpt = padSettings.getLayout(); + CartDesign layoutOpt = padSettings.getDesign(); css += "\n" + layoutOpt.convertToCss(String.valueOf(pad.getIndex()), true); } } diff --git a/PlayWall/src/de/tobias/playpad/design/modern/ModernGlobalDesign.java b/PlayWall/src/de/tobias/playpad/design/modern/ModernGlobalDesign.java index 7d2b6c00208fd4b689e9d168a234d42c64cdf840..09d44c5fc3adfc69441307163648c8c9f9ac1157 100644 --- a/PlayWall/src/de/tobias/playpad/design/modern/ModernGlobalDesign.java +++ b/PlayWall/src/de/tobias/playpad/design/modern/ModernGlobalDesign.java @@ -14,7 +14,7 @@ import de.tobias.playpad.design.Design; import de.tobias.playpad.design.DesignColorAssociator; import de.tobias.playpad.design.FadeableColor; import de.tobias.playpad.design.GlobalDesign; -import de.tobias.playpad.design.IColorPickerView; +import de.tobias.playpad.design.ColorModeHandler; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadSettings; import de.tobias.playpad.pad.conntent.play.Durationable; @@ -31,7 +31,7 @@ import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.util.Duration; -public class ModernGlobalDesign extends Design implements GlobalDesign, DesignColorAssociator, IColorPickerView { +public class ModernGlobalDesign extends Design implements GlobalDesign, DesignColorAssociator, ColorModeHandler { public static final String TYPE = "modern"; @@ -318,10 +318,17 @@ public class ModernGlobalDesign extends Design implements GlobalDesign, DesignCo public Color getAssociatedStandardColor() { return Color.web(backgroundColor.getColorHi()); } - + // Color View @Override public Node getColorInterface(Consumer<DisplayableColor> onSelection) { return new ColorPickerView(null, ModernColor.values(), onSelection); } + + @Override + public void setColor(CartDesign design, DisplayableColor color) { + if (design instanceof ModernCartDesign && color instanceof ModernColor) { + ((ModernCartDesign) design).setBackgroundColor((ModernColor) color); + } + } } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java index aa00ed73fd8af4dbdc161e150e9bc814c4ee7911..dd307d3352b25459081ae04c002cba6ac90085c4 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java @@ -3,33 +3,45 @@ package de.tobias.playpad.layout.desktop; import java.util.function.Consumer; import de.tobias.playpad.DisplayableColor; -import de.tobias.playpad.design.IColorPickerView; +import de.tobias.playpad.PlayPadMain; +import de.tobias.playpad.design.CartDesign; +import de.tobias.playpad.design.ColorModeHandler; +import de.tobias.playpad.pad.Pad; +import de.tobias.playpad.pad.PadSettings; import de.tobias.playpad.settings.Profile; +import javafx.event.EventHandler; import javafx.scene.Node; import javafx.scene.Scene; +import javafx.scene.input.MouseEvent; +import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; -public class DesktopColorPickerView implements Consumer<DisplayableColor> { +public class DesktopColorPickerView implements Consumer<DisplayableColor>, EventHandler<MouseEvent> { private Stage stage; - public DesktopColorPickerView(IColorPickerView baseView) { - Node node = baseView.getColorInterface(this); + private ColorModeHandler colorModeHandler; + private DisplayableColor selectedColor; + + public DesktopColorPickerView(ColorModeHandler colorModeHandler) { + this.colorModeHandler = colorModeHandler; + + Node node = colorModeHandler.getColorInterface(this); VBox root = new VBox(node); stage = new Stage(); stage.setScene(new Scene(root)); - + // Init Stage Profile.currentProfile().currentLayout().applyCss(stage); stage.setResizable(false); } - + public void show() { stage.show(); } - + public void hide() { stage.close(); } @@ -37,6 +49,22 @@ public class DesktopColorPickerView implements Consumer<DisplayableColor> { // Handle Selected Color from View. @Override public void accept(DisplayableColor t) { - + selectedColor = t; + } + + @Override + public void handle(MouseEvent event) { + // TODO Rewrite this + if (event.getSource() instanceof StackPane) { + StackPane view = (StackPane) event.getSource(); + if (view.getUserData() instanceof Pad) { + Pad pad = (Pad) view.getUserData(); + PadSettings padSettings = pad.getPadSettings(); + padSettings.setCustomLayout(true); + CartDesign design = padSettings.getDesign(); + colorModeHandler.setColor(design, selectedColor); + PlayPadMain.getProgramInstance().getMainViewController().loadUserCss(); + } + } } } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java index ae58ecf802afaea4b891fcc52ac8efd7b0afafb9..6a88463ffa0a9746221da7b2164c25bbf217a55f 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java @@ -1,7 +1,6 @@ package de.tobias.playpad.layout.desktop; public enum DesktopEditMode { - PLAY, - DRAG, - COLOR; + + PLAY, DRAG, COLOR; } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java index 1ada398838050487912afcb3785c8b25cb332746..6a0a26ed49f1985c563479b8e974c140ba484f91 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java @@ -15,8 +15,8 @@ import de.tobias.playpad.AppUserInfoStrings; import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.PlayPadPlugin; import de.tobias.playpad.Strings; +import de.tobias.playpad.design.ColorModeHandler; import de.tobias.playpad.design.GlobalDesign; -import de.tobias.playpad.design.IColorPickerView; import de.tobias.playpad.midi.Midi; import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; @@ -77,6 +77,7 @@ import javafx.scene.control.Slider; import javafx.scene.control.TextField; import javafx.scene.control.ToggleButton; import javafx.scene.input.KeyCombination; +import javafx.scene.input.MouseEvent; import javafx.scene.layout.HBox; import javafx.stage.Modality; import javafx.stage.Stage; @@ -200,8 +201,12 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro colorButton.setSelected(true); GlobalDesign design = Profile.currentProfile().currentLayout(); - if (design instanceof IColorPickerView) { - colorPickerView = new DesktopColorPickerView((IColorPickerView) design); + if (design instanceof ColorModeHandler) { + colorPickerView = new DesktopColorPickerView((ColorModeHandler) design); + + // Add Listener for Pads + mainViewController.addListenerForPads(colorPickerView, MouseEvent.MOUSE_CLICKED); + colorPickerView.show(); } } diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java index 7902868b72f68b3bba1c49bb8f0761e204943e39..9f8703cfa1cf11e4506b454ff2e3b1059c35393e 100644 --- a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java +++ b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadView.java @@ -126,6 +126,8 @@ public class DesktopPadView implements IPadView { @Override public void setContentView(Pad pad) { + superRoot.setUserData(pad); + if (previewContent != null) { previewContent.deinit(); } diff --git a/PlayWall/src/de/tobias/playpad/pad/listener/PadPositionListener.java b/PlayWall/src/de/tobias/playpad/pad/listener/PadPositionListener.java index f1ddd7d222840089fb73f7f63bbf8a69f6e783e2..e1438baff5ac2aba882efa7c3dce463862b593a6 100644 --- a/PlayWall/src/de/tobias/playpad/pad/listener/PadPositionListener.java +++ b/PlayWall/src/de/tobias/playpad/pad/listener/PadPositionListener.java @@ -91,7 +91,7 @@ public class PadPositionListener implements Runnable, IPadPositionListener { Warning warning = padSettings.getWarning(); if (padSettings.isCustomLayout()) { - padSettings.getLayout().handleWarning(controller, warning, Profile.currentProfile().currentLayout()); + padSettings.getDesign().handleWarning(controller, warning, Profile.currentProfile().currentLayout()); } else { Profile.currentProfile().currentLayout().handleWarning(controller, warning); } @@ -115,7 +115,7 @@ public class PadPositionListener implements Runnable, IPadPositionListener { PadSettings padSettings = pad.getPadSettings(); if (padSettings.isCustomLayout()) { - padSettings.getLayout().stopWarning(controller); + padSettings.getDesign().stopWarning(controller); } else { Profile.currentProfile().currentLayout().stopWarning(controller); } diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java index e7e59ff498246c2e1b99d7463a4711f3f2b708c3..605a0ab07af895cf9871c9b03b72d3ee37ef7eed 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java @@ -45,6 +45,7 @@ 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.Event; import javafx.event.EventHandler; import javafx.event.EventType; import javafx.fxml.FXML; @@ -643,6 +644,12 @@ public class MainViewController extends ViewController implements IMainViewContr public void registerKeyboardListener(EventType<KeyEvent> eventType, EventHandler<KeyEvent> listener) { getParent().getScene().addEventHandler(eventType, listener); } + + public <T extends Event> void addListenerForPads(EventHandler<? super T> handler, EventType<T> eventType) { + for (IPadView view : padViews) { + view.getRootNode().addEventFilter(eventType, handler); + } + } @Override public void loadUserCss() { diff --git a/PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjuster.java b/PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjuster.java index 797118223479d36de28af0802e1c62a1716c61a9..44129b469e5e5bde06b1ff28a40b0ae3582c483d 100644 --- a/PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjuster.java +++ b/PlayWallCore/src/de/tobias/playpad/action/feedback/ColorAdjuster.java @@ -59,7 +59,7 @@ public class ColorAdjuster { Color layoutEvColor = null; if (pad.getPadSettings().isCustomLayout()) { - CartDesign layout = pad.getPadSettings().getLayout(); + CartDesign layout = pad.getPadSettings().getDesign(); if (layout instanceof DesignColorAssociator) { DesignColorAssociator associator = (DesignColorAssociator) layout; layoutStdColor = associator.getAssociatedStandardColor(); diff --git a/PlayWallCore/src/de/tobias/playpad/design/IColorPickerView.java b/PlayWallCore/src/de/tobias/playpad/design/ColorModeHandler.java similarity index 76% rename from PlayWallCore/src/de/tobias/playpad/design/IColorPickerView.java rename to PlayWallCore/src/de/tobias/playpad/design/ColorModeHandler.java index cfeeae7907ac6bfc5276de46ccc7051f5c2e4ce0..b8ddf1a2874624b57c2f166da5e7baaad0fdae97 100644 --- a/PlayWallCore/src/de/tobias/playpad/design/IColorPickerView.java +++ b/PlayWallCore/src/de/tobias/playpad/design/ColorModeHandler.java @@ -11,8 +11,9 @@ import javafx.scene.Node; * @author tobias * */ -public interface IColorPickerView { +public interface ColorModeHandler { public Node getColorInterface(Consumer<DisplayableColor> onSelection); + public void setColor(CartDesign design, DisplayableColor color); } diff --git a/PlayWallCore/src/de/tobias/playpad/pad/PadSettings.java b/PlayWallCore/src/de/tobias/playpad/pad/PadSettings.java index 7c46e1ac6437b3ce2eacdf37ca5da79b62969767..f0fd7b3d1d40c0d058b962947798fff75ba29750 100644 --- a/PlayWallCore/src/de/tobias/playpad/pad/PadSettings.java +++ b/PlayWallCore/src/de/tobias/playpad/pad/PadSettings.java @@ -152,7 +152,7 @@ public class PadSettings { return customLayoutProperty; } - public CartDesign getLayout() { + public CartDesign getDesign() { return getLayout(Profile.currentProfile().getProfileSettings().getLayoutType()); } diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java index 29941d200665aeea35c4eee8d0b4ad4b13c4dda4..680582f37baa8a370c40d3b5a0815fc2eadc7d14 100644 --- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java +++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java @@ -9,6 +9,7 @@ import de.tobias.playpad.view.main.MainLayoutConnect; import de.tobias.playpad.view.main.MainLayoutHandler; import de.tobias.utils.ui.NotificationHandler; import de.tobias.utils.ui.scene.NotificationPane; +import javafx.event.Event; import javafx.event.EventHandler; import javafx.event.EventType; import javafx.scene.Parent; @@ -149,4 +150,6 @@ public interface IMainViewController extends NotificationHandler { * @return NotificationPane */ public NotificationPane getNotificationPane(); + + public <T extends Event> void addListenerForPads(EventHandler<? super T> handler, EventType<T> eventType); }