diff --git a/platform/platform-resources/src/META-INF/XmlActions.xml b/platform/platform-resources/src/META-INF/XmlActions.xml index c403d2edd8e9..76fc1b31cb6e 100644 --- a/platform/platform-resources/src/META-INF/XmlActions.xml +++ b/platform/platform-resources/src/META-INF/XmlActions.xml @@ -73,16 +73,22 @@ - - + + + + diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/BaseWebBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/BaseWebBrowserAction.java index a5aa565896ce..ed373314c355 100644 --- a/xml/impl/src/com/intellij/ide/browsers/actions/BaseWebBrowserAction.java +++ b/xml/impl/src/com/intellij/ide/browsers/actions/BaseWebBrowserAction.java @@ -1,6 +1,9 @@ package com.intellij.ide.browsers.actions; -import com.intellij.ide.browsers.*; +import com.intellij.ide.browsers.BrowsersConfiguration; +import com.intellij.ide.browsers.OpenInBrowserRequest; +import com.intellij.ide.browsers.WebBrowser; +import com.intellij.ide.browsers.WebBrowserUrlProvider; import com.intellij.openapi.actionSystem.ActionPlaces; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Shortcut; @@ -11,7 +14,7 @@ import com.intellij.openapi.util.Pair; import com.intellij.xml.util.HtmlUtil; import org.jetbrains.annotations.NotNull; -public class BaseWebBrowserAction extends DumbAwareAction { +final class BaseWebBrowserAction extends DumbAwareAction { private final WebBrowser browser; public BaseWebBrowserAction(@NotNull WebBrowser browser) { @@ -20,10 +23,6 @@ public class BaseWebBrowserAction extends DumbAwareAction { this.browser = browser; } - public BaseWebBrowserAction(@NotNull BrowsersConfiguration.BrowserFamily family) { - this(WebBrowser.getStandardBrowser(family)); - } - @Override public void update(final AnActionEvent e) { if (!BrowsersConfiguration.getInstance().getBrowserSettings(browser.getFamily()).isActive()) { @@ -32,7 +31,7 @@ public class BaseWebBrowserAction extends DumbAwareAction { return; } - Pair result = OpenFileInDefaultBrowserAction.doUpdate(e); + Pair result = OpenInBrowserBaseGroupAction.doUpdate(e); if (result == null) { return; } diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java index 48086f1e808a..e78f3c15e125 100644 --- a/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java +++ b/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java @@ -18,7 +18,6 @@ package com.intellij.ide.browsers.actions; import com.intellij.icons.AllIcons; import com.intellij.ide.GeneralSettings; import com.intellij.ide.browsers.*; -import com.intellij.ide.browsers.impl.WebBrowserServiceImpl; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; @@ -34,7 +33,6 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; -import com.intellij.testFramework.LightVirtualFile; import com.intellij.ui.ColoredListCellRenderer; import com.intellij.ui.components.JBList; import com.intellij.util.Consumer; @@ -53,30 +51,11 @@ import java.util.Collection; public class OpenFileInDefaultBrowserAction extends DumbAwareAction { private static final Logger LOG = Logger.getInstance(OpenFileInDefaultBrowserAction.class); - @Nullable - public static Pair doUpdate(AnActionEvent event) { - OpenInBrowserRequest request = createRequest(event.getDataContext()); - boolean applicable = false; - WebBrowserUrlProvider provider = null; - if (request != null) { - applicable = HtmlUtil.isHtmlFile(request.getFile()) && !(request.getVirtualFile() instanceof LightVirtualFile); - if (!applicable) { - provider = WebBrowserServiceImpl.getProvider(request); - applicable = provider != null; - } - } - - Presentation presentation = event.getPresentation(); - presentation.setVisible(applicable); - presentation.setVisible(applicable); - return applicable ? Pair.create(request, provider) : null; - } - @Override public void update(AnActionEvent e) { Presentation presentation = e.getPresentation(); - Pair result = doUpdate(e); + Pair result = OpenInBrowserBaseGroupAction.doUpdate(e); if (result == null) { return; } diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java new file mode 100644 index 000000000000..90c956cc0cce --- /dev/null +++ b/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserBaseGroupAction.java @@ -0,0 +1,96 @@ +package com.intellij.ide.browsers.actions; + +import com.intellij.icons.AllIcons; +import com.intellij.ide.browsers.BrowsersConfiguration; +import com.intellij.ide.browsers.OpenInBrowserRequest; +import com.intellij.ide.browsers.WebBrowser; +import com.intellij.ide.browsers.WebBrowserUrlProvider; +import com.intellij.ide.browsers.impl.WebBrowserServiceImpl; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.util.Pair; +import com.intellij.testFramework.LightVirtualFile; +import com.intellij.xml.util.HtmlUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public abstract class OpenInBrowserBaseGroupAction extends ActionGroup implements DumbAware { + public static final DataKey OPEN_IN_BROWSER_REQUEST = DataKey.create("OPEN_IN_BROWSER_REQUEST"); + + private OpenFileInDefaultBrowserAction myDefaultBrowserAction; + + protected OpenInBrowserBaseGroupAction(boolean popup) { + super(null, popup); + } + + @Nullable + public static Pair doUpdate(@NotNull AnActionEvent event) { + OpenInBrowserRequest request = OpenFileInDefaultBrowserAction.createRequest(event.getDataContext()); + boolean applicable = false; + WebBrowserUrlProvider provider = null; + if (request != null) { + applicable = HtmlUtil.isHtmlFile(request.getFile()) && !(request.getVirtualFile() instanceof LightVirtualFile); + if (!applicable) { + provider = WebBrowserServiceImpl.getProvider(request); + applicable = provider != null; + } + } + + Presentation presentation = event.getPresentation(); + presentation.setVisible(applicable); + presentation.setVisible(applicable); + return applicable ? Pair.create(request, provider) : null; + } + + @NotNull + @Override + public AnAction[] getChildren(@Nullable AnActionEvent e) { + if (e == null) { + return EMPTY_ARRAY; + } + + Pair result = doUpdate(e); + if (result == null) { + return EMPTY_ARRAY; + } + + return computeActions(); + } + + @NotNull + private AnAction[] computeActions() { + List browsers = BrowsersConfiguration.getInstance().getActive(); + boolean addDefaultBrowser = isPopup(); + int offset = addDefaultBrowser ? 1 : 0; + AnAction[] actions = new AnAction[browsers.size() + offset]; + + if (addDefaultBrowser) { + if (myDefaultBrowserAction == null) { + myDefaultBrowserAction = new OpenFileInDefaultBrowserAction(); + myDefaultBrowserAction.getTemplatePresentation().setText("Default"); + myDefaultBrowserAction.getTemplatePresentation().setIcon(AllIcons.Nodes.PpWeb); + } + actions[0] = myDefaultBrowserAction; + } + + for (int i = 0, size = browsers.size(); i < size; i++) { + WebBrowser browser = browsers.get(i); + actions[i + offset] = new BaseWebBrowserAction(browser); + } + return actions; + } + + public static final class OpenInBrowserGroupAction extends OpenInBrowserBaseGroupAction implements DumbAware { + public OpenInBrowserGroupAction() { + super(true); + } + } + + public static final class OpenInBrowserEditorContextBarGroupAction extends OpenInBrowserBaseGroupAction { + public OpenInBrowserEditorContextBarGroupAction() { + super(false); + } + } +} \ No newline at end of file diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserGroupAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserGroupAction.java deleted file mode 100644 index c4039948921b..000000000000 --- a/xml/impl/src/com/intellij/ide/browsers/actions/OpenInBrowserGroupAction.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.intellij.ide.browsers.actions; - -import com.intellij.ide.browsers.BrowsersConfiguration; -import com.intellij.ide.browsers.WebBrowser; -import com.intellij.openapi.actionSystem.ActionGroup; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.project.DumbAware; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -public final class OpenInBrowserGroupAction extends ActionGroup implements DumbAware { - private AnAction[] myActions; - - public OpenInBrowserGroupAction() { - super(null, true); - } - - @NotNull - @Override - public AnAction[] getChildren(@Nullable AnActionEvent e) { - if (myActions == null) { - myActions = computeActions(); - } - return myActions; - } - - @NotNull - private static AnAction[] computeActions() { - List browsers = BrowsersConfiguration.getInstance().getActive(); - AnAction[] actions = new AnAction[browsers.size()]; - for (int i = 0, size = browsers.size(); i < size; i++) { - WebBrowser browser = browsers.get(i); - actions[i] = new BaseWebBrowserAction(browser); - } - return actions; - } -} \ No newline at end of file