From 3c438727d0c42dc855b0c8ff3add1a115af483f8 Mon Sep 17 00:00:00 2001
From: tobias <tobias.ullerich@icloud.com>
Date: Wed, 21 Sep 2016 14:25:46 +0200
Subject: [PATCH] Changed Color Picker for Colormode

---
 .../desktop/DesktopColorPickerView.java       | 43 ++++++++++++-------
 .../DesktopMenuToolbarViewController.java     | 25 +++++------
 2 files changed, 40 insertions(+), 28 deletions(-)

diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java
index dd307d33..0d4808fd 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java
@@ -2,56 +2,62 @@ package de.tobias.playpad.layout.desktop;
 
 import java.util.function.Consumer;
 
+import org.controlsfx.control.PopOver;
+import org.controlsfx.control.PopOver.ArrowLocation;
+
 import de.tobias.playpad.DisplayableColor;
 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.MouseButton;
 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>, EventHandler<MouseEvent> {
 
-	private Stage stage;
-
 	private ColorModeHandler colorModeHandler;
 	private DisplayableColor selectedColor;
 
+	private PopOver colorChooser;
+
 	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);
+		colorChooser = new PopOver();
+		colorChooser.setContentNode(root);
+		colorChooser.setDetachable(false);
+		colorChooser.setOnHiding(e -> colorChooser = null);
+		colorChooser.setCornerRadius(5);
+		colorChooser.setArrowLocation(ArrowLocation.LEFT_CENTER);
 	}
 
-	public void show() {
-		stage.show();
+	public void show(Node anchorNode) {
+		colorChooser.show(anchorNode);
 	}
 
 	public void hide() {
-		stage.close();
+		if (colorChooser != null) {
+			colorChooser.hide();
+		}
 	}
 
 	// Handle Selected Color from View.
 	@Override
 	public void accept(DisplayableColor t) {
 		selectedColor = t;
+		colorChooser.hide();
 	}
 
+	// Listener, wenn auf ein Pad Geclicked wurde, zum färben
 	@Override
 	public void handle(MouseEvent event) {
 		// TODO Rewrite this
@@ -60,9 +66,14 @@ public class DesktopColorPickerView implements Consumer<DisplayableColor>, Event
 			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);
+
+				if (event.getButton() == MouseButton.PRIMARY) {
+					padSettings.setCustomLayout(true);
+					CartDesign design = padSettings.getDesign();
+					colorModeHandler.setColor(design, selectedColor);
+				} else if (event.getButton() == MouseButton.SECONDARY) {
+					padSettings.setCustomLayout(false);
+				}
 				PlayPadMain.getProgramInstance().getMainViewController().loadUserCss();
 			}
 		}
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
index d4f2ddac..f1b44216 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
@@ -158,7 +158,6 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 		helpMenu.getItems().add(new HelpMenuItem(helpMenu));
 
 		// Edit Mode Buttons
-		// TODO MenuItems for Buttons -> KeyCodes
 		editButtons = new SegmentedButton();
 		playButton = new ToggleButton("", new FontIcon(FontAwesomeType.PLAY));
 		playButton.setFocusTraversable(false);
@@ -166,6 +165,18 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 		dragButton.setFocusTraversable(false);
 		colorButton = new ToggleButton("", new FontIcon(FontAwesomeType.PENCIL));
 		colorButton.setFocusTraversable(false);
+		// Zeigt die Farbauswahl
+		colorButton.setOnAction(e ->
+		{
+			GlobalDesign design = Profile.currentProfile().currentLayout();
+			if (design instanceof ColorModeHandler) {
+				colorPickerView = new DesktopColorPickerView((ColorModeHandler) design);
+				colorPickerView.show(colorButton);
+
+				// Add Listener for Pads
+				mainViewController.addListenerForPads(colorPickerView, MouseEvent.MOUSE_CLICKED);
+			}
+		});
 		editButtons.getButtons().addAll(playButton, dragButton, colorButton);
 		editButtons.getToggleGroup().selectedToggleProperty().addListener((a, b, c) ->
 		{
@@ -222,16 +233,6 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 			iconHbox.getChildren().add(0, addPageButton);
 		} else if (newValue == DesktopEditMode.COLOR) {
 			colorButton.setSelected(true);
-
-			GlobalDesign design = Profile.currentProfile().currentLayout();
-			if (design instanceof ColorModeHandler) {
-				colorPickerView = new DesktopColorPickerView((ColorModeHandler) design);
-
-				// Add Listener for Pads
-				mainViewController.addListenerForPads(colorPickerView, MouseEvent.MOUSE_CLICKED);
-
-				colorPickerView.show();
-			}
 		}
 
 		// Update Page Button (for Edit/Display)
@@ -402,7 +403,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 		alwaysOnTopItem.setDisable(true);
 		searchPadMenuItem.setDisable(true);
 
-		connect.setEditMode(DesktopEditMode.PLAY); // TODO -> Button Mit wecheln
+		connect.setEditMode(DesktopEditMode.PLAY);
 	}
 
 	@Override
-- 
GitLab