diff --git a/platform/platform-impl/src/com/intellij/util/ui/table/TableModelEditor.java b/platform/platform-impl/src/com/intellij/util/ui/table/TableModelEditor.java index f632c9dcee5b..10e1975df9af 100644 --- a/platform/platform-impl/src/com/intellij/util/ui/table/TableModelEditor.java +++ b/platform/platform-impl/src/com/intellij/util/ui/table/TableModelEditor.java @@ -39,6 +39,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; @@ -68,7 +69,8 @@ public class TableModelEditor implements ElementProducer { } table.getEmptyText().setText(emptyText); - toolbarDecorator = ToolbarDecorator.createDecorator(table, this); + MyRemoveAction removeAction = new MyRemoveAction(); + toolbarDecorator = ToolbarDecorator.createDecorator(table, this).setRemoveAction(removeAction).setRemoveActionUpdater(removeAction); if (itemEditor instanceof DialogItemEditor) { toolbarDecorator.setEditAction(new AnActionButtonRunnable() { @@ -129,6 +131,10 @@ public class TableModelEditor implements ElementProducer { * Class must have empty constructor. */ public abstract Class getItemClass(); + + public boolean isRemovable(@NotNull T item) { + return true; + } } public static abstract class DialogItemEditor extends ItemEditor { @@ -331,4 +337,30 @@ public class TableModelEditor implements ElementProducer { public void reset(@NotNull List items) { model.setItems(new ArrayList(items)); } + + private class MyRemoveAction implements AnActionButtonRunnable, AnActionButtonUpdater, TableUtil.ItemChecker { + @Override + public void run(AnActionButton button) { + if (TableUtil.doRemoveSelectedItems(table, model, this)) { + table.requestFocus(); + TableUtil.updateScroller(table, false); + } + } + + @Override + public boolean isOperationApplyable(@NotNull TableModel ignored, int row) { + T item = model.getItem(row); + return item != null && itemEditor.isRemovable(item); + } + + @Override + public boolean isEnabled(AnActionEvent e) { + for (T item : table.getSelectedObjects()) { + if (itemEditor.isRemovable(item)) { + return true; + } + } + return false; + } + } } \ No newline at end of file diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java index 3eaa1336ed36..0b009cff9a9f 100644 --- a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java +++ b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java @@ -265,6 +265,11 @@ public class BrowserSettingsPanel { public void applyEdited(@NotNull ConfigurableWebBrowser oldItem, @NotNull ConfigurableWebBrowser newItem) { oldItem.setSpecificSettings(newItem.getSpecificSettings()); } + + @Override + public boolean isRemovable(@NotNull ConfigurableWebBrowser item) { + return !WebBrowserManager.isPredefinedBrowser(item); + } }; browsersEditor = new TableModelEditor(Collections.emptyList(), COLUMNS, itemEditor, "No web browsers configured" diff --git a/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java b/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java index 87dab7d8f07d..097bd571ab2b 100644 --- a/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java +++ b/xml/impl/src/com/intellij/ide/browsers/WebBrowserManager.java @@ -64,6 +64,15 @@ public class WebBrowserManager implements PersistentStateComponent, Mod return ServiceManager.getService(WebBrowserManager.class); } + static boolean isPredefinedBrowser(@NotNull ConfigurableWebBrowser browser) { + UUID id = browser.getId(); + return id.equals(DEFAULT_CHROME_ID) || + id.equals(DEFAULT_FIREFOX_ID) || + id.equals(DEFAULT_SAFARI_ID) || + id.equals(DEFAULT_OPERA_ID) || + id.equals(DEFAULT_EXPLORER_ID); + } + public enum DefaultBrowser { SYSTEM, FIRST, ALTERNATIVE }