From dac5699075be56e9022775a67aeee6319e07756c Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Wed, 15 Dec 2021 10:21:33 +0100
Subject: [PATCH] #184 - prevent to open settings view of one pad multiple
 times

---
 .../desktop/pad/DesktopPadViewController.java | 27 ++++++++++++-------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java
index e9db0c64..4791b906 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/layout/desktop/pad/DesktopPadViewController.java
@@ -34,6 +34,8 @@ public class DesktopPadViewController extends AbstractPadViewController implemen
 	private final DesktopPadView padView;
 	private Pad pad;
 
+	private PadSettingsViewController padSettingsViewController;
+
 	private final PadLockedListener padLockedListener;
 	private final PadStatusListener padStatusListener;
 	private final PadContentListener padContentListener;
@@ -204,21 +206,26 @@ public class DesktopPadViewController extends AbstractPadViewController implemen
 	}
 
 	private void onSettings() {
-		GlobalSettings settings = PlayPadPlugin.getInstance().getGlobalSettings();
-		IMainViewController mvc = PlayPadPlugin.getInstance().getMainViewController();
+		final GlobalSettings globalSettings = PlayPadPlugin.getInstance().getGlobalSettings();
+		final IMainViewController mvc = PlayPadPlugin.getInstance().getMainViewController();
 
 		if (mvc != null) {
-			if (pad.getProject() != null && settings.isLiveMode() && settings.isLiveModeSettings() && pad.getProject().getActivePlayers() > 0) {
+			if (pad.getProject() != null && globalSettings.isLiveMode() && globalSettings.isLiveModeSettings() && pad.getProject().getActivePlayers() > 0) {
 				return;
 			}
 
-			PadSettingsViewController padSettingsViewController = new PadSettingsViewController(pad, mvc);
-			padSettingsViewController.getStageContainer().ifPresent(nvcStage -> nvcStage.addCloseHook(() -> {
-				if (padView != null && pad != null)
-					padView.setTriggerLabelActive(pad.getPadSettings().hasTriggerItems());
-				return true;
-			}));
-			padSettingsViewController.getStageContainer().ifPresent(NVCStage::show);
+			if (padSettingsViewController == null) {
+				padSettingsViewController = new PadSettingsViewController(pad, mvc);
+				padSettingsViewController.getStageContainer().ifPresent(nvcStage -> nvcStage.addCloseHook(() -> {
+					if (padView != null && pad != null)
+						padView.setTriggerLabelActive(pad.getPadSettings().hasTriggerItems());
+					padSettingsViewController = null;
+					return true;
+				}));
+				padSettingsViewController.getStageContainer().ifPresent(NVCStage::show);
+			} else {
+				padSettingsViewController.getStageContainer().ifPresent(stage -> stage.getStage().toFront());
+			}
 		}
 	}
 
-- 
GitLab