diff --git a/msi.gama.core/src/msi/gama/common/interfaces/IGui.java b/msi.gama.core/src/msi/gama/common/interfaces/IGui.java index e1150eebf6..587821cee7 100644 --- a/msi.gama.core/src/msi/gama/common/interfaces/IGui.java +++ b/msi.gama.core/src/msi/gama/common/interfaces/IGui.java @@ -99,6 +99,9 @@ public interface IGui { Map openUserInputDialog(IScope scope, String title, List parameters, GamaFont font); + public Boolean openUserInputDialogConfirm(final IScope scope, final String title,final String message) ; + + void openUserControlPanel(IScope scope, UserPanelStatement panel); void closeDialogs(IScope scope); diff --git a/msi.gama.core/src/msi/gama/runtime/HeadlessListener.java b/msi.gama.core/src/msi/gama/runtime/HeadlessListener.java index 30a7ae5b83..9b3282afc0 100644 --- a/msi.gama.core/src/msi/gama/runtime/HeadlessListener.java +++ b/msi.gama.core/src/msi/gama/runtime/HeadlessListener.java @@ -10,6 +10,7 @@ ********************************************************************************************************/ package msi.gama.runtime; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -80,6 +81,11 @@ public Map openUserInputDialog(final IScope scope, final String }); return initialValues; } + + @Override + public Boolean openUserInputDialogConfirm(final IScope scope, final String title,final String message) { + return true; + } // See #2996: simplification of the logging done in this class // public void registerJob(final BufferedWriter w) { diff --git a/msi.gama.core/src/msi/gaml/operators/System.java b/msi.gama.core/src/msi/gaml/operators/System.java index b1e31b7f89..8e54a57321 100644 --- a/msi.gama.core/src/msi/gaml/operators/System.java +++ b/msi.gama.core/src/msi/gaml/operators/System.java @@ -273,6 +273,20 @@ public static IMap userInput(final IScope scope, final String ti }); return userInput(scope, title, parameters,font); } + + @operator ( + value = IKeyword.USER_CONFIRM, + category = { IOperatorCategory.SYSTEM, IOperatorCategory.USER_CONTROL }, + concept = {}) + @doc ( + value = "Asks the user to confirm a choice. The two string are used to specify the title and the message of the dialog box. ", + examples = + + { @example ("bool confirm <- user_confirm(\"Confirm\",\"Please confirm\";") }) + @no_test + public static Boolean userConfirmDialog(final IScope scope, final String title, final String message) { + return scope.getGui().openUserInputDialogConfirm(scope, title,message); + } @SuppressWarnings ("unchecked") @operator ( diff --git a/ummisco.gama.annotations/src/msi/gama/common/interfaces/IKeyword.java b/ummisco.gama.annotations/src/msi/gama/common/interfaces/IKeyword.java index 79098cc54d..af9178e40f 100644 --- a/ummisco.gama.annotations/src/msi/gama/common/interfaces/IKeyword.java +++ b/ummisco.gama.annotations/src/msi/gama/common/interfaces/IKeyword.java @@ -431,6 +431,7 @@ public interface IKeyword { String USER_CONTROLLED = "user_controlled"; String USER_COMMAND = "user_command"; String USER_INPUT = "user_input"; + String USER_CONFIRM = "user_confirm"; String USER_ONLY = "user_only"; String USER_FIRST = "user_first"; String USER_LAST = "user_last"; diff --git a/ummisco.gama.ui.shared/src/ummisco/gama/ui/utils/SwtGui.java b/ummisco.gama.ui.shared/src/ummisco/gama/ui/utils/SwtGui.java index a4612a6182..153060cf5e 100644 --- a/ummisco.gama.ui.shared/src/ummisco/gama/ui/utils/SwtGui.java +++ b/ummisco.gama.ui.shared/src/ummisco/gama/ui/utils/SwtGui.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.Map; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.window.Window; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; @@ -278,6 +279,15 @@ public Map openUserInputDialog(final IScope scope, final String }); return result; } + + @Override + public Boolean openUserInputDialogConfirm(final IScope scope, final String title,final String message) { + final List result = new ArrayList<>(); + WorkbenchHelper.run(() -> { + result.add(MessageDialog.openConfirm(WorkbenchHelper.getShell(), title, message)); + }); + return result.isEmpty() ? false : result.get(0); + } @Override public void openUserControlPanel(final IScope scope, final UserPanelStatement panel) {