mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
respect default browser
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user