summaryrefslogtreecommitdiff
path: root/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java
diff options
context:
space:
mode:
Diffstat (limited to 'xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java')
-rw-r--r--xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java216
1 files changed, 116 insertions, 100 deletions
diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java
index 477d527ecbac..f43c0f6f4929 100644
--- a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java
+++ b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java
@@ -23,7 +23,6 @@ import com.intellij.openapi.options.ShowSettingsUtil;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.util.Comparing;
-import com.intellij.ui.EnumComboBoxModel;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ui.TitledSeparator;
import com.intellij.util.Function;
@@ -34,6 +33,7 @@ import com.intellij.util.ui.LocalPathCellEditor;
import com.intellij.util.ui.UIUtil;
import com.intellij.util.ui.table.IconTableCellRenderer;
import com.intellij.util.ui.table.TableModelEditor;
+import org.jdesktop.swingx.combobox.ListComboBoxModel;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -46,9 +46,9 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
+import java.util.ArrayList;
import java.util.UUID;
-import static com.intellij.ide.browsers.WebBrowserManager.DefaultBrowser;
import static com.intellij.util.ui.table.TableModelEditor.EditableColumnInfo;
final class BrowserSettingsPanel {
@@ -73,7 +73,7 @@ final class BrowserSettingsPanel {
}
};
- private static final ColumnInfo[] COLUMNS = {new EditableColumnInfo<ConfigurableWebBrowser, Boolean>() {
+ private static final EditableColumnInfo<ConfigurableWebBrowser, Boolean> ACTIVE_COLUMN_INFO = new EditableColumnInfo<ConfigurableWebBrowser, Boolean>() {
@Override
public Class getColumnClass() {
return Boolean.class;
@@ -88,44 +88,49 @@ final class BrowserSettingsPanel {
public void setValue(ConfigurableWebBrowser item, Boolean value) {
item.setActive(value);
}
- }, new EditableColumnInfo<ConfigurableWebBrowser, String>("Name") {
- @Override
- public String valueOf(ConfigurableWebBrowser item) {
- return item.getName();
- }
+ };
- @Override
- public void setValue(ConfigurableWebBrowser item, String value) {
- item.setName(value);
- }
- }, new ColumnInfo<ConfigurableWebBrowser, BrowserFamily>("Family") {
- @Override
- public Class getColumnClass() {
- return BrowserFamily.class;
- }
+ private static final ColumnInfo[] COLUMNS = {ACTIVE_COLUMN_INFO,
+ new EditableColumnInfo<ConfigurableWebBrowser, String>("Name") {
+ @Override
+ public String valueOf(ConfigurableWebBrowser item) {
+ return item.getName();
+ }
- @Override
- public BrowserFamily valueOf(ConfigurableWebBrowser item) {
- return item.getFamily();
- }
+ @Override
+ public void setValue(ConfigurableWebBrowser item, String value) {
+ item.setName(value);
+ }
+ },
+ new ColumnInfo<ConfigurableWebBrowser, BrowserFamily>("Family") {
+ @Override
+ public Class getColumnClass() {
+ return BrowserFamily.class;
+ }
- @Override
- public void setValue(ConfigurableWebBrowser item, BrowserFamily value) {
- item.setFamily(value);
- item.setSpecificSettings(value.createBrowserSpecificSettings());
- }
+ @Override
+ public BrowserFamily valueOf(ConfigurableWebBrowser item) {
+ return item.getFamily();
+ }
- @Nullable
- @Override
- public TableCellRenderer getRenderer(ConfigurableWebBrowser item) {
- return IconTableCellRenderer.ICONABLE;
- }
+ @Override
+ public void setValue(ConfigurableWebBrowser item, BrowserFamily value) {
+ item.setFamily(value);
+ item.setSpecificSettings(value.createBrowserSpecificSettings());
+ }
- @Override
- public boolean isCellEditable(ConfigurableWebBrowser item) {
- return !WebBrowserManager.getInstance().isPredefinedBrowser(item);
- }
- }, PATH_COLUMN_INFO};
+ @Nullable
+ @Override
+ public TableCellRenderer getRenderer(ConfigurableWebBrowser item) {
+ return IconTableCellRenderer.ICONABLE;
+ }
+
+ @Override
+ public boolean isCellEditable(ConfigurableWebBrowser item) {
+ return !WebBrowserManager.getInstance().isPredefinedBrowser(item);
+ }
+ },
+ PATH_COLUMN_INFO};
private JPanel root;
@@ -138,7 +143,7 @@ final class BrowserSettingsPanel {
@SuppressWarnings("UnusedDeclaration")
private JComponent browsersTable;
- private ComboBox defaultBrowserComboBox;
+ private ComboBox defaultBrowserPolicyComboBox;
private TableModelEditor<ConfigurableWebBrowser> browsersEditor;
@@ -148,53 +153,55 @@ final class BrowserSettingsPanel {
alternativeBrowserPathField.addBrowseFolderListener(IdeBundle.message("title.select.path.to.browser"), null, null, APP_FILE_CHOOSER_DESCRIPTOR);
defaultBrowserPanel.setBorder(TitledSeparator.EMPTY_BORDER);
- //noinspection unchecked
- defaultBrowserComboBox.setModel(new EnumComboBoxModel<DefaultBrowser>(DefaultBrowser.class));
- if (BrowserLauncherAppless.canStartDefaultBrowser()) {
- defaultBrowserComboBox.addItemListener(new ItemListener() {
- @Override
- public void itemStateChanged(ItemEvent e) {
- boolean customPathEnabled = e.getItem() == DefaultBrowser.ALTERNATIVE;
- if (e.getStateChange() == ItemEvent.DESELECTED) {
- if (customPathEnabled) {
- customPathValue = alternativeBrowserPathField.getText();
- }
- }
- else if (e.getStateChange() == ItemEvent.SELECTED) {
- alternativeBrowserPathField.setEnabled(customPathEnabled);
- updateCustomPathTextFieldValue((DefaultBrowser)e.getItem());
- }
- }
- });
+ ArrayList<DefaultBrowserPolicy> defaultBrowserPolicies = new ArrayList<DefaultBrowserPolicy>();
+ if (BrowserLauncherAppless.canUseSystemDefaultBrowserPolicy()) {
+ defaultBrowserPolicies.add(DefaultBrowserPolicy.SYSTEM);
+ }
+ defaultBrowserPolicies.add(DefaultBrowserPolicy.FIRST);
+ defaultBrowserPolicies.add(DefaultBrowserPolicy.ALTERNATIVE);
- defaultBrowserComboBox.setRenderer(new ListCellRendererWrapper<DefaultBrowser>() {
- @Override
- public void customize(JList list, DefaultBrowser value, int index, boolean selected, boolean hasFocus) {
- String name;
- switch (value) {
- case SYSTEM:
- name = "System default";
- break;
- case FIRST:
- name = "First listed";
- break;
- case ALTERNATIVE:
- name = "Custom path";
- break;
- default:
- throw new IllegalStateException();
+ //noinspection Since15,unchecked
+ defaultBrowserPolicyComboBox.setModel(new ListComboBoxModel<DefaultBrowserPolicy>(defaultBrowserPolicies));
+ defaultBrowserPolicyComboBox.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ boolean customPathEnabled = e.getItem() == DefaultBrowserPolicy.ALTERNATIVE;
+ if (e.getStateChange() == ItemEvent.DESELECTED) {
+ if (customPathEnabled) {
+ customPathValue = alternativeBrowserPathField.getText();
}
+ }
+ else if (e.getStateChange() == ItemEvent.SELECTED) {
+ alternativeBrowserPathField.setEnabled(customPathEnabled);
+ updateCustomPathTextFieldValue((DefaultBrowserPolicy)e.getItem());
+ }
+ }
+ });
- setText(name);
+ defaultBrowserPolicyComboBox.setRenderer(new ListCellRendererWrapper<DefaultBrowserPolicy>() {
+ @Override
+ public void customize(JList list, DefaultBrowserPolicy value, int index, boolean selected, boolean hasFocus) {
+ String name;
+ switch (value) {
+ case SYSTEM:
+ name = "System default";
+ break;
+ case FIRST:
+ name = "First listed";
+ break;
+ case ALTERNATIVE:
+ name = "Custom path";
+ break;
+ default:
+ throw new IllegalStateException();
}
- });
- if (UIUtil.isUnderAquaLookAndFeel()) {
- defaultBrowserComboBox.setBorder(new EmptyBorder(3, 0, 0, 0));
+ setText(name);
}
- }
- else {
- defaultBrowserComboBox.setVisible(false);
+ });
+
+ if (UIUtil.isUnderAquaLookAndFeel()) {
+ defaultBrowserPolicyComboBox.setBorder(new EmptyBorder(3, 0, 0, 0));
}
clearExtractedFiles.addActionListener(new ActionListener() {
@@ -205,11 +212,11 @@ final class BrowserSettingsPanel {
});
}
- private void updateCustomPathTextFieldValue(DefaultBrowser browser) {
- if (browser == DefaultBrowser.ALTERNATIVE) {
+ private void updateCustomPathTextFieldValue(@NotNull DefaultBrowserPolicy browser) {
+ if (browser == DefaultBrowserPolicy.ALTERNATIVE) {
alternativeBrowserPathField.setText(customPathValue);
}
- else if (browser == DefaultBrowser.FIRST) {
+ else if (browser == DefaultBrowserPolicy.FIRST) {
setCustomPathToFirstListed();
}
else {
@@ -272,18 +279,18 @@ final class BrowserSettingsPanel {
.modelListener(new TableModelEditor.DataChangedListener<ConfigurableWebBrowser>() {
@Override
public void tableChanged(TableModelEvent event) {
- update(event.getFirstRow());
+ update();
}
@Override
public void dataChanged(@NotNull ColumnInfo<ConfigurableWebBrowser, ?> columnInfo, int rowIndex) {
- if (columnInfo == PATH_COLUMN_INFO) {
- update(rowIndex);
+ if (columnInfo == PATH_COLUMN_INFO || columnInfo == ACTIVE_COLUMN_INFO) {
+ update();
}
}
- private void update(int rowIndex) {
- if (rowIndex == 0 && getDefaultBrowser() == DefaultBrowser.FIRST) {
+ private void update() {
+ if (getDefaultBrowser() == DefaultBrowserPolicy.FIRST) {
setCustomPathToFirstListed();
}
}
@@ -293,7 +300,15 @@ final class BrowserSettingsPanel {
private void setCustomPathToFirstListed() {
ListTableModel<ConfigurableWebBrowser> model = browsersEditor.getModel();
- alternativeBrowserPathField.setText(model.getRowCount() == 0 ? "" : model.getRowValue(0).getPath());
+ for (int i = 0, n = model.getRowCount(); i < n; i++) {
+ ConfigurableWebBrowser browser = model.getRowValue(i);
+ if (browser.isActive() && browser.getPath() != null) {
+ alternativeBrowserPathField.setText(browser.getPath());
+ return;
+ }
+ }
+
+ alternativeBrowserPathField.setText("");
}
@NotNull
@@ -305,12 +320,12 @@ final class BrowserSettingsPanel {
WebBrowserManager browserManager = WebBrowserManager.getInstance();
GeneralSettings generalSettings = GeneralSettings.getInstance();
- DefaultBrowser defaultBrowser = getDefaultBrowser();
- if (browserManager.getDefaultBrowserMode() != defaultBrowser || generalSettings.isConfirmExtractFiles() != confirmExtractFiles.isSelected()) {
+ DefaultBrowserPolicy defaultBrowserPolicy = getDefaultBrowser();
+ if (browserManager.getDefaultBrowserPolicy() != defaultBrowserPolicy || generalSettings.isConfirmExtractFiles() != confirmExtractFiles.isSelected()) {
return true;
}
- if (defaultBrowser == DefaultBrowser.ALTERNATIVE &&
+ if (defaultBrowserPolicy == DefaultBrowserPolicy.ALTERNATIVE &&
!Comparing.strEqual(generalSettings.getBrowserPath(), alternativeBrowserPathField.getText())) {
return true;
}
@@ -321,7 +336,7 @@ final class BrowserSettingsPanel {
public void apply() {
GeneralSettings settings = GeneralSettings.getInstance();
- settings.setUseDefaultBrowser(getDefaultBrowser() == DefaultBrowser.SYSTEM);
+ settings.setUseDefaultBrowser(getDefaultBrowser() == DefaultBrowserPolicy.SYSTEM);
if (alternativeBrowserPathField.isEnabled()) {
settings.setBrowserPath(alternativeBrowserPathField.getText());
@@ -330,26 +345,27 @@ final class BrowserSettingsPanel {
settings.setConfirmExtractFiles(confirmExtractFiles.isSelected());
WebBrowserManager browserManager = WebBrowserManager.getInstance();
- browserManager.defaultBrowser = getDefaultBrowser();
+ browserManager.defaultBrowserPolicy = getDefaultBrowser();
browserManager.setList(browsersEditor.apply());
}
- private DefaultBrowser getDefaultBrowser() {
- return (DefaultBrowser)defaultBrowserComboBox.getSelectedItem();
+ private DefaultBrowserPolicy getDefaultBrowser() {
+ return (DefaultBrowserPolicy)defaultBrowserPolicyComboBox.getSelectedItem();
}
public void reset() {
- GeneralSettings settings = GeneralSettings.getInstance();
-
- DefaultBrowser defaultBrowser = WebBrowserManager.getInstance().getDefaultBrowserMode();
- defaultBrowserComboBox.setSelectedItem(defaultBrowser);
+ DefaultBrowserPolicy defaultBrowserPolicy = WebBrowserManager.getInstance().getDefaultBrowserPolicy();
+ DefaultBrowserPolicy effectiveDefaultBrowserPolicy = defaultBrowserPolicy == DefaultBrowserPolicy.SYSTEM && !BrowserLauncherAppless.canUseSystemDefaultBrowserPolicy()
+ ? DefaultBrowserPolicy.ALTERNATIVE : defaultBrowserPolicy;
+ defaultBrowserPolicyComboBox.setSelectedItem(effectiveDefaultBrowserPolicy);
+ GeneralSettings settings = GeneralSettings.getInstance();
confirmExtractFiles.setSelected(settings.isConfirmExtractFiles());
browsersEditor.reset(WebBrowserManager.getInstance().getList());
customPathValue = settings.getBrowserPath();
- alternativeBrowserPathField.setEnabled(defaultBrowser == DefaultBrowser.ALTERNATIVE);
- updateCustomPathTextFieldValue(defaultBrowser);
+ alternativeBrowserPathField.setEnabled(effectiveDefaultBrowserPolicy == DefaultBrowserPolicy.ALTERNATIVE);
+ updateCustomPathTextFieldValue(effectiveDefaultBrowserPolicy);
}
public void selectBrowser(@NotNull WebBrowser browser) {