/** * Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.ui.dialogs; import java.util.Arrays; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.widgets.Shell; import org.python.pydev.plugin.PydevPlugin; import org.python.pydev.shared_ui.EditorUtils; import org.python.pydev.shared_ui.dialogs.DialogHelpers; import org.python.pydev.ui.interpreters.AbstractInterpreterManager; import org.python.pydev.ui.pythonpathconf.InterpreterConfigHelpers; import org.python.pydev.ui.pythonpathconf.InterpreterGeneralPreferencesPage; /** * @author fabioz * */ public class PyDialogHelpers { public static void openWarning(String title, String message) { DialogHelpers.openWarning(title, message); } public static void openCritical(String title, String message) { DialogHelpers.openCritical(title, message); } public static boolean openQuestion(String title, String message) { return DialogHelpers.openQuestion(title, message); } public static Integer openAskInt(String title, String message, int initial) { return DialogHelpers.openAskInt(title, message, initial); } public static int openWarningWithIgnoreToggle(String title, String message, String key) { Shell shell = EditorUtils.getShell(); IPreferenceStore store = PydevPlugin.getDefault().getPreferenceStore(); String val = store.getString(key); if (val.trim().length() == 0) { val = MessageDialogWithToggle.PROMPT; //Initial value if not specified } if (!val.equals(MessageDialogWithToggle.ALWAYS)) { MessageDialogWithToggle.openWarning(shell, title, message, "Don't show this message again", false, store, key); } return MessageDialog.OK; } /** * @return the index chosen or -1 if it was canceled. */ public static int openCriticalWithChoices(String title, String message, String[] choices) { Shell shell = EditorUtils.getShell(); MessageDialog dialog = new MessageDialog(shell, title, null, message, MessageDialog.ERROR, choices, 0); return dialog.open(); } public final static int INTERPRETER_CANCEL_CONFIG = -1; private static MessageDialog dialog = null; private static int enableAskInterpreter = 0; /** * Use this to disable/try to enable displaying a "configure interpreter" dialog when an interpreter * cannot be found. Disabling it is useful for when it shouldn't be displayed on top of exisitng dialogs. * @param enable Set to <code>false</code> to disable the dialogs from appearing, or <code>true</code> * to try to re-enable them. The dialogs will only be enabled once all "disable" calls have been negated * by an equal number of "enable" calls. */ public static void enableAskInterpreterStep(boolean enable) { enableAskInterpreter = Math.min(enableAskInterpreter + (enable ? 1 : -1), 0); if (enableAskInterpreter < 0 && dialog != null) { dialog.close(); dialog = null; } } public static int openQuestionConfigureInterpreter(AbstractInterpreterManager m) { IPreferenceStore store = PydevPlugin.getDefault().getPreferenceStore(); String key = InterpreterGeneralPreferencesPage.NOTIFY_NO_INTERPRETER + m.getInterpreterType(); boolean val = store.getBoolean(key); if (val) { String title = m.getInterpreterUIName() + " not configured"; String message = "It seems that the " + m.getInterpreterUIName() + " interpreter is not currently configured.\n\nHow do you want to proceed?"; Shell shell = EditorUtils.getShell(); String[] dialogButtonLabels = Arrays.copyOf(InterpreterConfigHelpers.CONFIG_NAMES, InterpreterConfigHelpers.NUM_CONFIG_TYPES + 1); dialogButtonLabels[dialogButtonLabels.length - 1] = "Don't ask again"; dialog = new MessageDialog(shell, title, null, message, MessageDialog.QUESTION, dialogButtonLabels, 0); int open = dialog.open(); //If dialog is null now, it was forcibly closed by a "disable" call of enableAskInterpreterStep. if (dialog != null) { dialog = null; // "Don't ask again" button is the final button in the list if (open == dialogButtonLabels.length - 1) { store.setValue(key, false); return INTERPRETER_CANCEL_CONFIG; } return open; } } return INTERPRETER_CANCEL_CONFIG; } /** * @param abstractInterpreterManager */ public static boolean getAskAgainInterpreter(AbstractInterpreterManager m) { if (enableAskInterpreter < 0) { return false; } IPreferenceStore store = PydevPlugin.getDefault().getPreferenceStore(); return store.getBoolean(InterpreterGeneralPreferencesPage.NOTIFY_NO_INTERPRETER + m.getInterpreterType()); } }