From 4b3922203baa19edd7ae20f96c907e40c0dc7720 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 30 Dec 2014 17:01:24 +0300 Subject: [PATCH] fixed PY-14819 IPython Notebook: invalid link to settings in popup for missing configuration --- .../configuration/IpnbConnectionManager.java | 58 +++++++++++++------ 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConnectionManager.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConnectionManager.java index 00084eec52cf..0e9287625699 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConnectionManager.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConnectionManager.java @@ -12,6 +12,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.ProjectComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; +import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.ProjectFileIndex; @@ -24,6 +25,7 @@ import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.ui.HyperlinkAdapter; import com.intellij.util.Alarm; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.packaging.PyPackage; @@ -37,6 +39,7 @@ import org.jetbrains.plugins.ipnb.format.cells.output.IpnbOutputCell; import org.jetbrains.plugins.ipnb.protocol.IpnbConnection; import org.jetbrains.plugins.ipnb.protocol.IpnbConnectionListenerBase; +import javax.swing.event.HyperlinkEvent; import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; @@ -69,7 +72,13 @@ public final class IpnbConnectionManager implements ProjectComponent { if (!myKernels.containsKey(path)) { String url = IpnbSettings.getInstance(myProject).getURL(); if (StringUtil.isEmptyOrSpaces(url)) { - showWarning(fileEditor, "Please, specify IPython Notebook URL in Settings->IPython Notebook"); + showWarning(fileEditor, "Please, specify IPython Notebook URL in Settings->Tools->IPython Notebook", + new HyperlinkAdapter() { + @Override + protected void hyperlinkActivated(HyperlinkEvent e) { + ShowSettingsUtil.getInstance().showSettingsDialog(myProject, "IPython Notebook"); + } + }); return; } if (startConnection(codePanel, path, url, false)) { @@ -119,23 +128,23 @@ public final class IpnbConnectionManager implements ProjectComponent { private static String showDialogUrl(@NotNull final String initialUrl) { final String url = Messages.showInputDialog("IPython Notebook URL:", "Start IPython Notebook", null, initialUrl, - new InputValidator() { - @Override - public boolean checkInput(String inputString) { - try { - new URL(inputString); + new InputValidator() { + @Override + public boolean checkInput(String inputString) { + try { + new URL(inputString); + } + catch (MalformedURLException e) { + return false; + } + return !inputString.isEmpty(); } - catch (MalformedURLException e) { - return false; - } - return !inputString.isEmpty(); - } - @Override - public boolean canClose(String inputString) { - return true; - } - }); + @Override + public boolean canClose(String inputString) { + return true; + } + }); return url == null ? null : StringUtil.trimEnd(url, "/"); } @@ -164,7 +173,13 @@ public final class IpnbConnectionManager implements ProjectComponent { } catch (URISyntaxException e) { if (showNotification) - showWarning(codePanel.getFileEditor(), "Please, check IPython Notebook URL in Settings->IPython Notebook"); + showWarning(codePanel.getFileEditor(), "Please, check IPython Notebook URL in Settings->Tools->IPython Notebook", + new HyperlinkAdapter() { + @Override + protected void hyperlinkActivated(HyperlinkEvent e) { + ShowSettingsUtil.getInstance().showSettingsDialog(myProject, "IPython Notebook"); + } + }); LOG.warn("IPython Notebook URI Syntax Error: " + e.getMessage()); return false; } @@ -177,13 +192,18 @@ public final class IpnbConnectionManager implements ProjectComponent { return true; } - private static void showWarning(@NotNull final IpnbFileEditor fileEditor, @NotNull final String message) { + private static void showWarning(@NotNull final IpnbFileEditor fileEditor, @NotNull final String message, + @Nullable final HyperlinkAdapter listener) { BalloonBuilder balloonBuilder = JBPopupFactory.getInstance().createHtmlTextBalloonBuilder( - message, null, MessageType.WARNING.getPopupBackground(), null); + message, null, MessageType.WARNING.getPopupBackground(), listener); final Balloon balloon = balloonBuilder.createBalloon(); balloon.showInCenterOf(fileEditor.getRunCellButton()); } + private static void showWarning(@NotNull final IpnbFileEditor fileEditor, @NotNull final String message) { + showWarning(fileEditor, message, null); + } + private boolean startIpythonServer(@NotNull final String url, @NotNull final IpnbFileEditor fileEditor) { final Module module = ProjectFileIndex.SERVICE.getInstance(myProject).getModuleForFile(fileEditor.getVirtualFile()); if (module == null) return false;