respect default browser

This commit is contained in:
Vladimir Krivosheev
2014-02-10 18:26:48 +01:00
parent 78b379e218
commit 7c3e5b9f04
6 changed files with 100 additions and 42 deletions
@@ -53,6 +53,11 @@ public abstract class AbstractCollectionComboBoxModel<T> extends AbstractListMod
return mySelection;
}
@Nullable
public T getSelected() {
return mySelection;
}
public void update() {
super.fireContentsChanged(this, -1, -1);
}
@@ -47,4 +47,13 @@ public class MutableCollectionComboBoxModel<T> extends AbstractCollectionComboBo
myItems = items;
super.update();
}
public void addItem(T item) {
myItems.add(item);
fireIntervalAdded(this, myItems.size() - 1, myItems.size() - 1);
if (myItems.size() == 1 && getSelectedItem() == null && item != null) {
setSelectedItem(item);
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2012 JetBrains s.r.o.
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,11 +17,13 @@ package com.intellij.ide.browsers;
import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.IconLoader;
import com.intellij.ui.ComboboxWithBrowseButton;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ui.MutableCollectionComboBoxModel;
import com.intellij.util.PlatformIcons;
import org.jdesktop.swingx.combobox.ListComboBoxModel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -32,9 +34,20 @@ import java.util.List;
public class BrowserSelector {
private final ComboboxWithBrowseButton myBrowserComboWithBrowse;
private MutableCollectionComboBoxModel<WebBrowser> myModel;
public BrowserSelector(final boolean allowDefaultBrowser) {
myBrowserComboWithBrowse = new ComboboxWithBrowseButton(new ComboBox(createBrowsersComboModel(allowDefaultBrowser)));
this(new Condition<WebBrowser>() {
@Override
public boolean value(WebBrowser browser) {
return allowDefaultBrowser || browser != null;
}
});
}
public BrowserSelector(@NotNull final Condition<WebBrowser> browserCondition) {
myModel = createBrowsersComboModel(browserCondition);
myBrowserComboWithBrowse = new ComboboxWithBrowseButton(new ComboBox(myModel));
myBrowserComboWithBrowse.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@@ -44,8 +57,9 @@ public class BrowserSelector {
WebBrowser selectedItem = getSelected();
if (modificationCount != browserManager.getModificationCount()) {
myModel = createBrowsersComboModel(browserCondition);
//noinspection unchecked
myBrowserComboWithBrowse.getComboBox().setModel(createBrowsersComboModel(allowDefaultBrowser));
myBrowserComboWithBrowse.getComboBox().setModel(myModel);
}
if (selectedItem != null) {
setSelected(selectedItem);
@@ -61,7 +75,14 @@ public class BrowserSelector {
int index,
boolean selected,
boolean hasFocus) {
Icon baseIcon = value != null ? value.getIcon() : PlatformIcons.WEB_ICON;
Icon baseIcon;
if (value == null) {
WebBrowser defaultBrowser = WebBrowserManager.getInstance().getDefaultBrowser();
baseIcon = defaultBrowser == null ? PlatformIcons.WEB_ICON : defaultBrowser.getIcon();
}
else {
baseIcon = value.getIcon();
}
setIcon(myBrowserComboWithBrowse.isEnabled() ? baseIcon : IconLoader.getDisabledIcon(baseIcon));
setText(value != null ? value.getName() : "Default");
}
@@ -72,30 +93,18 @@ public class BrowserSelector {
return myBrowserComboWithBrowse;
}
@SuppressWarnings("Since15")
private static ListComboBoxModel<WebBrowser> createBrowsersComboModel(boolean allowDefaultBrowser) {
List<WebBrowser> activeBrowsers = new ArrayList<WebBrowser>();
if (allowDefaultBrowser) {
activeBrowsers.add(null);
private static MutableCollectionComboBoxModel<WebBrowser> createBrowsersComboModel(@NotNull Condition<WebBrowser> browserCondition) {
List<WebBrowser> list = new ArrayList<WebBrowser>();
if (browserCondition.value(null)) {
list.add(null);
}
activeBrowsers.addAll(WebBrowserManager.getInstance().getActiveBrowsers());
return new ListComboBoxModel<WebBrowser>(activeBrowsers);
}
@SuppressWarnings({"deprecation", "UnusedDeclaration"})
@Nullable
@Deprecated
/**
* @deprecated to remove in IDEA 14
*/
public BrowserFamily getSelectedBrowser() {
WebBrowser selected = getSelected();
return selected == null ? null : selected.getFamily();
list.addAll(WebBrowserManager.getInstance().getBrowsers(browserCondition));
return new MutableCollectionComboBoxModel<WebBrowser>(list);
}
@Nullable
public WebBrowser getSelected() {
return (WebBrowser)myBrowserComboWithBrowse.getComboBox().getSelectedItem();
return myModel.getSelected();
}
@Nullable
@@ -104,16 +113,20 @@ public class BrowserSelector {
return browser != null ? browser.getId().toString() : null;
}
@SuppressWarnings("UnusedDeclaration")
@Deprecated
/**
* @deprecated to remove in IDEA 14
*/
public void setSelectedBrowser(@SuppressWarnings("deprecation") @Nullable BrowserFamily selectedItem) {
setSelected(selectedItem == null ? null : WebBrowserManager.getInstance().findBrowser(selectedItem));
}
public void setSelected(@Nullable WebBrowser selectedItem) {
myBrowserComboWithBrowse.getComboBox().setSelectedItem(selectedItem);
}
public boolean addAndSelect(@NotNull WebBrowser browser) {
if (myModel.contains(browser)) {
return false;
}
myModel.addItem(browser);
return true;
}
public int getSize() {
return myModel.getSize();
}
}
@@ -309,7 +309,7 @@ final class BrowserSettingsPanel {
GeneralSettings generalSettings = GeneralSettings.getInstance();
DefaultBrowser defaultBrowser = getDefaultBrowser();
if (browserManager.getDefaultBrowser() != defaultBrowser || generalSettings.isConfirmExtractFiles() != confirmExtractFiles.isSelected()) {
if (browserManager.getDefaultBrowserMode() != defaultBrowser || generalSettings.isConfirmExtractFiles() != confirmExtractFiles.isSelected()) {
return true;
}
@@ -344,7 +344,7 @@ final class BrowserSettingsPanel {
public void reset() {
GeneralSettings settings = GeneralSettings.getInstance();
DefaultBrowser defaultBrowser = WebBrowserManager.getInstance().getDefaultBrowser();
DefaultBrowser defaultBrowser = WebBrowserManager.getInstance().getDefaultBrowserMode();
defaultBrowserComboBox.setSelectedItem(defaultBrowser);
confirmExtractFiles.setSelected(settings.isConfirmExtractFiles());
@@ -17,6 +17,8 @@ package com.intellij.ide.browsers;
import com.intellij.openapi.components.*;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Conditions;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.ModificationTracker;
import com.intellij.openapi.util.text.StringUtil;
@@ -75,7 +77,8 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
SYSTEM, FIRST, ALTERNATIVE
}
public DefaultBrowser getDefaultBrowser() {
@NotNull
public DefaultBrowser getDefaultBrowserMode() {
return defaultBrowser;
}
@@ -246,9 +249,19 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
@NotNull
public List<WebBrowser> getActiveBrowsers() {
return getBrowsers(Conditions.<WebBrowser>alwaysTrue(), true);
}
@NotNull
public List<WebBrowser> getBrowsers(@NotNull Condition<WebBrowser> condition) {
return getBrowsers(condition, true);
}
@NotNull
public List<WebBrowser> getBrowsers(@NotNull Condition<WebBrowser> condition, boolean onlyActive) {
List<WebBrowser> result = new SmartList<WebBrowser>();
for (ConfigurableWebBrowser browser : browsers) {
if (browser.isActive()) {
if ((!onlyActive || browser.isActive()) && condition.value(browser)) {
result.add(browser);
}
}
@@ -311,6 +324,12 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
@Nullable
public WebBrowser findBrowser(@NotNull BrowserFamily family) {
for (ConfigurableWebBrowser browser : browsers) {
if (browser.isActive() && family.equals(browser.getFamily())) {
return browser;
}
}
for (ConfigurableWebBrowser browser : browsers) {
if (family.equals(browser.getFamily())) {
return browser;
@@ -324,6 +343,16 @@ public class WebBrowserManager implements PersistentStateComponent<Element>, Mod
return !(browser instanceof ConfigurableWebBrowser) || ((ConfigurableWebBrowser)browser).isActive();
}
@Nullable
public WebBrowser getDefaultBrowser() {
for (ConfigurableWebBrowser browser : browsers) {
if (browser.isActive()) {
return browser;
}
}
return null;
}
@Override
public long getModificationCount() {
return modificationCount;
@@ -16,14 +16,16 @@
package com.intellij.ide.browsers.actions;
import com.intellij.ide.GeneralSettings;
import com.intellij.ide.browsers.*;
import com.intellij.ide.browsers.OpenInBrowserRequest;
import com.intellij.ide.browsers.WebBrowser;
import com.intellij.ide.browsers.WebBrowserManager;
import com.intellij.ide.browsers.WebBrowserUrlProvider;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.xml.util.HtmlUtil;
import org.jetbrains.annotations.Nullable;
@@ -66,10 +68,10 @@ public class OpenFileInDefaultBrowserAction extends DumbAwareAction {
@Nullable
private static WebBrowser findUsingBrowser() {
WebBrowserManager browserManager = WebBrowserManager.getInstance();
if (browserManager.getDefaultBrowser() == WebBrowserManager.DefaultBrowser.FIRST) {
return ContainerUtil.getFirstItem(browserManager.getActiveBrowsers());
if (browserManager.getDefaultBrowserMode() == WebBrowserManager.DefaultBrowser.FIRST) {
return browserManager.getDefaultBrowser();
}
else if (browserManager.getDefaultBrowser() == WebBrowserManager.DefaultBrowser.ALTERNATIVE) {
else if (browserManager.getDefaultBrowserMode() == WebBrowserManager.DefaultBrowser.ALTERNATIVE) {
String path = GeneralSettings.getInstance().getBrowserPath();
if (!StringUtil.isEmpty(path)) {
WebBrowser browser = browserManager.findBrowserById(path);