From 8f7263d4fc375583b5bf8ef293a9431677944d80 Mon Sep 17 00:00:00 2001
From: tobias <tobias.ullerich@icloud.com>
Date: Thu, 22 Sep 2016 21:48:06 +0200
Subject: [PATCH] Page Mode (DesktopEditMode)

Small Bug fixes
---
 .../tobias/playpad/assets/lang/_de.properties | 12 +++++--
 .../playpad/assets/lang/ui_de.properties      |  3 ++
 .../assets/view/main/desktop/header.fxml      | 34 +++++++++++--------
 PlayWall/src/de/tobias/playpad/Strings.java   |  6 ++++
 .../src/de/tobias/playpad/components/Keys.xml | 11 ++++--
 .../desktop/DesktopColorPickerView.java       |  2 +-
 .../layout/desktop/DesktopEditMode.java       |  2 +-
 .../DesktopMenuToolbarViewController.java     | 24 ++++++++++---
 .../desktop/pad/DesktopPadDragListener.java   |  9 ++---
 .../main/MainViewController.java              |  7 ++++
 .../de/tobias/playpad/project/Project.java    |  4 +++
 .../tobias/playpad/project/page/PadIndex.java |  2 +-
 .../de/tobias/playpad/settings/Profile.java   |  1 +
 .../playpad/settings/ProfileReference.java    |  1 +
 .../main/IMainViewController.java             |  2 ++
 15 files changed, 88 insertions(+), 32 deletions(-)

diff --git a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties
index a27f28f1..7cda7194 100644
--- a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties
+++ b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties
@@ -224,8 +224,8 @@ UI.Dialog.Save.Header=Speichern
 UI.Dialog.Save.Content=M�chten Sie das Projekt speichern?
 UI.Dialog.Save.Title=Speichern
 UI.Dialog.Save.Checkbox=Immer automatisch speichern und diesen Dialog nicht mehr anzeigen.
-UI.Dialog.Save.Button.Yes=Speichern
-UI.Dialog.Save.Button.No=Nicht Speichern
+UI.Dialog.Save.Button.Yes=Ja
+UI.Dialog.Save.Button.No=Nein
 UI.Dialog.Save.Button.Cancel=Abbrechen
 
 # Update Channel - BaseName
@@ -275,4 +275,10 @@ UI.Dialog.Page.Delete.Content=M
 
 # UI - Dialog - Name - Delete
 UI.Dialog.Page.Name.Header=Seite umbenennen
-UI.Dialog.Page.Name.Content=Geben Sie einen neuen Namen f�r die Seite ein. \n(Wenn die das Feld leer lassen, wird ein Standardname verwendet).
\ No newline at end of file
+UI.Dialog.Page.Name.Content=Geben Sie einen neuen Namen f�r die Seite ein. \n(Wenn die das Feld leer lassen, wird ein Standardname verwendet).
+
+# Tooltips
+Tooltip.PlayButton=Wiedergabemodus
+Tooltip.DragButton=Drag'n'Drop Modus
+Tooltip.PageButton=Seiten bearbeiten
+Tooltip.ColorButton=F�rbenmodus
\ No newline at end of file
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 43d85ecf..f3b3b638 100644
--- a/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties
+++ b/PlayWall/assets/de/tobias/playpad/assets/lang/ui_de.properties
@@ -15,9 +15,12 @@ main.menuitem.recentFiles=Zuletzt verwendete Projekte
 main.menuitem.profile=Profile verwalten...
 main.menuitem.print=Drucken...
 main.menuitem.onTop=Fenster im Vordergrund
+#Begin TODO
+main.menu.editmode=Modus
 main.menuitem.play=Wiedergabe
 main.menuitem.drag=Drag and Drop
 main.menuitem.color=F�rben
+#Ende TODO
 main.menuitem.errors=Fehlerbericht anzeigen...
 main.menuitem.plugins=Erweiterungen...
 main.menuitem.projectSettings=Projekteinstellungen...
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 bd2bd266..05ebf66e 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
@@ -39,21 +39,25 @@
       </Menu>
       <Menu mnemonicParsing="false" text="%main.menu.option">
          <items>
-                  <MenuItem fx:id="playMenu" mnemonicParsing="false" onAction="#playMenuHandler" text="%main.menuitem.play">
-                     <accelerator>
-                        <KeyCodeCombination alt="UP" code="L" control="UP" meta="UP" shift="UP" shortcut="DOWN" />
-                     </accelerator>
-                  </MenuItem>
-                  <MenuItem fx:id="dragMenu" mnemonicParsing="false" onAction="#dragMenuHandler" text="%main.menuitem.drag">
-                     <accelerator>
-                        <KeyCodeCombination alt="UP" code="M" control="UP" meta="UP" shift="UP" shortcut="DOWN" />
-                     </accelerator>
-                  </MenuItem>
-                  <MenuItem fx:id="colorMenu" mnemonicParsing="false" onAction="#colorMenuHandler" text="%main.menuitem.color">
-                     <accelerator>
-                        <KeyCodeCombination alt="UP" code="K" control="UP" meta="UP" shift="UP" shortcut="DOWN" />
-                     </accelerator>
-                  </MenuItem>
+                  <Menu mnemonicParsing="false" text="%main.menu.editmode">
+                     <items>
+                        <MenuItem fx:id="playMenu" mnemonicParsing="false" onAction="#playMenuHandler" text="%main.menuitem.play">
+                           <accelerator>
+                              <KeyCodeCombination alt="UP" code="L" control="UP" meta="UP" shift="UP" shortcut="DOWN" />
+                           </accelerator>
+                        </MenuItem>
+                        <MenuItem fx:id="dragMenu" mnemonicParsing="false" onAction="#dragMenuHandler" text="%main.menuitem.drag">
+                           <accelerator>
+                              <KeyCodeCombination alt="UP" code="M" control="UP" meta="UP" shift="UP" shortcut="DOWN" />
+                           </accelerator>
+                        </MenuItem>
+                        <MenuItem fx:id="colorMenu" mnemonicParsing="false" onAction="#colorMenuHandler" text="%main.menuitem.color">
+                           <accelerator>
+                              <KeyCodeCombination alt="UP" code="K" control="UP" meta="UP" shift="UP" shortcut="DOWN" />
+                           </accelerator>
+                        </MenuItem>
+                     </items>
+                  </Menu>
                   <SeparatorMenuItem mnemonicParsing="false" />
             <MenuItem fx:id="errorMenu" mnemonicParsing="false" onAction="#errorMenuHandler" text="%main.menuitem.errors">
                <accelerator>
diff --git a/PlayWall/src/de/tobias/playpad/Strings.java b/PlayWall/src/de/tobias/playpad/Strings.java
index f0e8fb81..2db02c1e 100644
--- a/PlayWall/src/de/tobias/playpad/Strings.java
+++ b/PlayWall/src/de/tobias/playpad/Strings.java
@@ -265,4 +265,10 @@ public class Strings {
 	// UI - Dialog - Page - Name
 	public static final String UI_Dialog_Page_Name_Header = "UI.Dialog.Page.Name.Header";
 	public static final String UI_Dialog_Page_Name_Content = "UI.Dialog.Page.Name.Content";
+	
+	// Tooltip
+	public static final String Tooltip_PlayButton = "Tooltip.PlayButton";
+	public static final String Tooltip_DragButton = "Tooltip.DragButton";
+	public static final String Tooltip_PageButton = "Tooltip.PageButton";
+	public static final String Tooltip_ColorButton = "Tooltip.ColorButton";
 }
diff --git a/PlayWall/src/de/tobias/playpad/components/Keys.xml b/PlayWall/src/de/tobias/playpad/components/Keys.xml
index 2588cefd..589d9d4f 100644
--- a/PlayWall/src/de/tobias/playpad/components/Keys.xml
+++ b/PlayWall/src/de/tobias/playpad/components/Keys.xml
@@ -6,9 +6,9 @@
 		<Key id="save_proj" name="main.menuitem.save" key="S" ctrl="true" alt="false" meta="false" shift="false"/>
 		<Key id="print_proj" name="main.menuitem.print" key="P" ctrl="true" alt="false" meta="false" shift="false"/>
 		
-		<Key id="play" name="main.menuitem.play" key="E" ctrl="true" alt="false" meta="false" shift="false"/>
-		<Key id="drag" name="main.menuitem.drag" key="E" ctrl="true" alt="false" meta="false" shift="false"/>
-		<Key id="color" name="main.menuitem.color" key="E" ctrl="true" alt="false" meta="false" shift="false"/>
+		<Key id="play" name="main.menuitem.play" key="L" ctrl="true" alt="false" meta="false" shift="false"/>
+		<Key id="drag" name="main.menuitem.drag" key="M" ctrl="true" alt="false" meta="false" shift="false"/>
+		<Key id="color" name="main.menuitem.color" key="K" ctrl="true" alt="false" meta="false" shift="false"/>
 
 		<Key id="errors" name="main.menuitem.errors" key="E" ctrl="true" alt="false" meta="false" shift="false"/>
 		
@@ -27,7 +27,12 @@
 		<Key id="save_proj" name="main.menuitem.save" key="S" ctrl="false" alt="false" meta="true" shift="false"/>
 		<Key id="print_proj" name="main.menuitem.print" key="P" ctrl="false" alt="false" meta="true" shift="false"/>
 		
+		<Key id="play" name="main.menuitem.play" key="L" ctrl="false" alt="false" meta="true" shift="false"/>
+		<Key id="drag" name="main.menuitem.drag" key="M" ctrl="false" alt="false" meta="true" shift="false"/>
+		<Key id="color" name="main.menuitem.color" key="K" ctrl="false" alt="false" meta="true" shift="false"/>
+		
 		<Key id="errors" name="main.menuitem.errors" key="E" ctrl="false" alt="false" meta="true" shift="false"/>
+		
 		<Key id="plugins" name="main.menuitem.plugins"/>
 		<Key id="project_settings" name="main.menuitem.projectSettings" key="Comma" ctrl="false" alt="true" meta="true" shift="false"/>
 		<Key id="profile_settings" name="main.menuitem.profileSettings" key="Comma" ctrl="false" alt="false" meta="true" shift="false"/>
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java
index 0d4808fd..ae8537d0 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopColorPickerView.java
@@ -37,7 +37,7 @@ public class DesktopColorPickerView implements Consumer<DisplayableColor>, Event
 		colorChooser.setDetachable(false);
 		colorChooser.setOnHiding(e -> colorChooser = null);
 		colorChooser.setCornerRadius(5);
-		colorChooser.setArrowLocation(ArrowLocation.LEFT_CENTER);
+		colorChooser.setArrowLocation(ArrowLocation.TOP_CENTER);
 	}
 
 	public void show(Node anchorNode) {
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java
index 6a88463f..874ce0c5 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopEditMode.java
@@ -2,5 +2,5 @@ package de.tobias.playpad.layout.desktop;
 
 public enum DesktopEditMode {
 
-	PLAY, DRAG, COLOR;
+	PLAY, DRAG, PAGE, COLOR;
 }
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
index c9366fea..88164893 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
@@ -76,6 +76,7 @@ import javafx.scene.control.MenuItem;
 import javafx.scene.control.Slider;
 import javafx.scene.control.TextField;
 import javafx.scene.control.ToggleButton;
+import javafx.scene.control.Tooltip;
 import javafx.scene.input.KeyCombination;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.HBox;
@@ -85,6 +86,8 @@ import javafx.stage.Stage;
 public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewController
 		implements EventHandler<ActionEvent>, ChangeListener<DesktopEditMode> {
 
+	// TODO Page Buttons gleicher Margin wie pads
+
 	// meuBar
 	@FXML protected MenuBar menuBar;
 
@@ -120,6 +123,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 	protected SegmentedButton editButtons;
 	protected ToggleButton playButton;
 	protected ToggleButton dragButton;
+	protected ToggleButton pageButton;
 	protected ToggleButton colorButton;
 	private Button addPageButton;
 
@@ -160,10 +164,16 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 		// Edit Mode Buttons
 		editButtons = new SegmentedButton();
 		playButton = new ToggleButton("", new FontIcon(FontAwesomeType.PLAY));
+		playButton.setTooltip(new Tooltip(Localization.getString(Strings.Tooltip_PlayButton)));
 		playButton.setFocusTraversable(false);
 		dragButton = new ToggleButton("", new FontIcon(FontAwesomeType.ARROWS));
+		dragButton.setTooltip(new Tooltip(Localization.getString(Strings.Tooltip_DragButton)));
 		dragButton.setFocusTraversable(false);
+		pageButton = new ToggleButton("", new FontIcon(FontAwesomeType.FILES_ALT));
+		pageButton.setTooltip(new Tooltip(Localization.getString(Strings.Tooltip_PageButton)));
+		pageButton.setFocusTraversable(false);
 		colorButton = new ToggleButton("", new FontIcon(FontAwesomeType.PENCIL));
+		colorButton.setTooltip(new Tooltip(Localization.getString(Strings.Tooltip_ColorButton)));
 		colorButton.setFocusTraversable(false);
 		// Zeigt die Farbauswahl
 		colorButton.setOnAction(e ->
@@ -177,13 +187,15 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 				mainViewController.addListenerForPads(colorPickerView, MouseEvent.MOUSE_CLICKED);
 			}
 		});
-		editButtons.getButtons().addAll(playButton, dragButton, colorButton);
+		editButtons.getButtons().addAll(playButton, dragButton, pageButton, colorButton);
 		editButtons.getToggleGroup().selectedToggleProperty().addListener((a, b, c) ->
 		{
 			if (c == playButton) {
 				connect.setEditMode(DesktopEditMode.PLAY);
 			} else if (c == dragButton) {
 				connect.setEditMode(DesktopEditMode.DRAG);
+			} else if (c == pageButton) {
+				connect.setEditMode(DesktopEditMode.PAGE);
 			} else if (c == colorButton) {
 				connect.setEditMode(DesktopEditMode.COLOR);
 			} else if (c == null) {
@@ -213,9 +225,12 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 			for (IPadView view : mainViewController.getPadViews()) {
 				view.enableDragAndDropDesignMode(false);
 			}
+		} else if (oldValue == DesktopEditMode.PAGE) {
+			highlightPageButton(currentSelectedPageButton);
 			iconHbox.getChildren().remove(addPageButton);
 		} else if (oldValue == DesktopEditMode.COLOR) {
 			if (colorPickerView != null) {
+				mainViewController.removeListenerForPads(colorPickerView, MouseEvent.MOUSE_CLICKED);
 				colorPickerView.hide();
 				colorPickerView = null;
 			}
@@ -230,13 +245,14 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 			for (IPadView view : mainViewController.getPadViews()) {
 				view.enableDragAndDropDesignMode(true);
 			}
+		} else if (newValue == DesktopEditMode.PAGE) {
+			pageButton.setSelected(true);
 			iconHbox.getChildren().add(0, addPageButton);
+			highlightPageButton(currentSelectedPageButton);
 		} else if (newValue == DesktopEditMode.COLOR) {
 			colorButton.setSelected(true);
 		}
 
-		// Update Page Button (for Edit/Display)
-		highlightPageButton(currentSelectedPageButton);
 	}
 
 	private void initLayoutMenu() {
@@ -430,7 +446,7 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 				newNode.getStyleClass().add(CURRENT_PAGE_BUTTON);
 				currentSelectedPageButton = index;
 
-				if (newNode instanceof Button && connect.getEditMode() == DesktopEditMode.DRAG) { // Nur bei Drag And Drop mode
+				if (newNode instanceof Button && connect.getEditMode() == DesktopEditMode.PAGE) { // Nur bei Drag And Drop mode
 					Button button = (Button) newNode;
 					DesktopPageEditButtonView editBox = new DesktopPageEditButtonView(this, openProject.getPage(index), button);
 					button.setGraphic(editBox);
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java
index d7d6eb92..63a8d826 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/pad/DesktopPadDragListener.java
@@ -21,6 +21,7 @@ import de.tobias.playpad.settings.GlobalSettings;
 import de.tobias.playpad.settings.Profile;
 import de.tobias.playpad.view.FileDragOptionView;
 import de.tobias.playpad.view.PadDragOptionView;
+import de.tobias.playpad.viewcontroller.main.IMainViewController;
 import de.tobias.utils.util.FileUtils;
 import javafx.scene.SnapshotParameters;
 import javafx.scene.image.WritableImage;
@@ -165,8 +166,8 @@ public class DesktopPadDragListener {
 			mode.handle(padID, sourcePad.getPadIndex(), project);
 			padHud.hide();
 
-			PlayPadPlugin.getImplementation().getMainViewController()
-					.showPage(PlayPadPlugin.getImplementation().getMainViewController().getPage());
+			IMainViewController mainViewController = PlayPadPlugin.getImplementation().getMainViewController();
+			mainViewController.showPage(mainViewController.getPage());
 
 			event.setDropCompleted(success);
 			event.consume();
@@ -191,8 +192,8 @@ public class DesktopPadDragListener {
 			for (int x = 0; x < snapshot.getWidth(); x++) {
 				for (int y = 0; y < snapshot.getHeight(); y++) {
 					Color oldColor = snapshot.getPixelReader().getColor(x, y).darker().darker();
-					snapshot.getPixelWriter().setColor(x, y,
-							new Color(oldColor.getRed(), oldColor.getGreen(), oldColor.getBlue(), oldColor.getOpacity() * 0.5));
+					Color newColor = new Color(oldColor.getRed(), oldColor.getGreen(), oldColor.getBlue(), oldColor.getOpacity() * 0.5);
+					snapshot.getPixelWriter().setColor(x, y, newColor);
 				}
 			}
 
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java
index d15beed3..c16a3acc 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/main/MainViewController.java
@@ -504,6 +504,7 @@ public class MainViewController extends ViewController implements IMainViewContr
 		if (menuToolbarViewController != null) {
 			menuToolbarViewController.highlightPageButton(page);
 		}
+		
 		return true;
 	}
 
@@ -649,6 +650,12 @@ public class MainViewController extends ViewController implements IMainViewContr
 			view.getRootNode().addEventFilter(eventType, handler);
 		}
 	}
+	
+	public <T extends Event> void removeListenerForPads(EventHandler<? super T> handler, EventType<T> eventType) {
+		for (IPadView view : padViews) {
+			view.getRootNode().removeEventFilter(eventType, handler);
+		}
+	}
 
 	@Override
 	public void loadUserCss() {
diff --git a/PlayWallCore/src/de/tobias/playpad/project/Project.java b/PlayWallCore/src/de/tobias/playpad/project/Project.java
index 2825cdeb..d1e273ac 100644
--- a/PlayWallCore/src/de/tobias/playpad/project/Project.java
+++ b/PlayWallCore/src/de/tobias/playpad/project/Project.java
@@ -45,6 +45,7 @@ public class Project {
 	/**
 	 * Pattern für den Namen des Projekts
 	 */
+	// TODO REDO
 	public static final String PROJECT_NAME_PATTERN = "\\w{1}[\\w\\s-_]{0,}";
 	/**
 	 * Dateiendung für eine projekt Datei
@@ -309,6 +310,9 @@ public class Project {
 	}
 
 	public void addPage() {
+		if (pages.size() == ProjectSettings.MAX_PAGES) {
+			return;
+		}
 		int index = pages.size();
 		pages.add(new Page(index, this));
 	}
diff --git a/PlayWallCore/src/de/tobias/playpad/project/page/PadIndex.java b/PlayWallCore/src/de/tobias/playpad/project/page/PadIndex.java
index 11067fee..d8e3e6fd 100644
--- a/PlayWallCore/src/de/tobias/playpad/project/page/PadIndex.java
+++ b/PlayWallCore/src/de/tobias/playpad/project/page/PadIndex.java
@@ -56,7 +56,7 @@ public class PadIndex implements Serializable {
 
 	@Override
 	public String toString() {
-		return "PadIndex [id=" + id + ", page=" + page + "]";
+		return id + "-" + page;
 	}
 
 }
diff --git a/PlayWallCore/src/de/tobias/playpad/settings/Profile.java b/PlayWallCore/src/de/tobias/playpad/settings/Profile.java
index d34f11b2..3baa4a09 100644
--- a/PlayWallCore/src/de/tobias/playpad/settings/Profile.java
+++ b/PlayWallCore/src/de/tobias/playpad/settings/Profile.java
@@ -26,6 +26,7 @@ public class Profile {
 	private static final String MAPPING_XML = "Mapping.xml";
 	private static final String LAYOUT_XML = "Layout.xml";
 
+	// TODO REDO
 	public static final String profileNameEx = "[\\p{L},0-9]{1}[\\p{L}\\s-_]{0,}";
 
 	private static List<ProfileListener> listeners = new ArrayList<>();
diff --git a/PlayWallCore/src/de/tobias/playpad/settings/ProfileReference.java b/PlayWallCore/src/de/tobias/playpad/settings/ProfileReference.java
index 24bb8f34..511f6ca9 100644
--- a/PlayWallCore/src/de/tobias/playpad/settings/ProfileReference.java
+++ b/PlayWallCore/src/de/tobias/playpad/settings/ProfileReference.java
@@ -65,6 +65,7 @@ public class ProfileReference implements Displayable {
 	public ProfileReference(UUID uuid, String name) {
 		this.uuid = uuid;
 		this.name = name;
+		requestedModules = new HashSet<>();
 		updateDisplayProperty();
 	}
 
diff --git a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java
index 680582f3..5451c138 100644
--- a/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java
+++ b/PlayWallCore/src/de/tobias/playpad/viewcontroller/main/IMainViewController.java
@@ -152,4 +152,6 @@ public interface IMainViewController extends NotificationHandler {
 	public NotificationPane getNotificationPane();
 
 	public <T extends Event> void addListenerForPads(EventHandler<? super T> handler, EventType<T> eventType);
+	
+	public <T extends Event> void removeListenerForPads(EventHandler<? super T> handler, EventType<T> eventType);
 }
-- 
GitLab