From b63b70364f2d62dceb7934bb59b1d36fce14d3c8 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 13 May 2014 11:59:14 +0200 Subject: [PATCH] continue WEB-11775 'Do Not Step Into' groupings --- .../util/ui/table/TableModelEditor.java | 104 +++++++++++++----- .../ide/browsers/BrowserSettingsPanel.java | 44 ++++---- 2 files changed, 98 insertions(+), 50 deletions(-) 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 23f49f699b7f..dd41a33a9d15 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 @@ -20,6 +20,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.Ref; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.*; import com.intellij.ui.table.TableView; import com.intellij.util.Function; @@ -43,6 +44,7 @@ import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import java.lang.reflect.Constructor; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class TableModelEditor implements ElementProducer { @@ -53,6 +55,10 @@ public class TableModelEditor implements ElementProducer { private final MyListTableModel model; + public TableModelEditor(@NotNull ColumnInfo[] columns, @NotNull ItemEditor itemEditor, @NotNull String emptyText) { + this(Collections.emptyList(), columns, itemEditor, emptyText); + } + /** * source will be copied, passed list will not be used directly * @@ -70,43 +76,85 @@ public class TableModelEditor implements ElementProducer { TableUtil.setupCheckboxColumn(table.getColumnModel().getColumn(0)); } + boolean needTableHeader = false; + for (ColumnInfo column : columns) { + if (!StringUtil.isEmpty(column.getName())) { + needTableHeader = true; + break; + } + } + + if (!needTableHeader) { + table.setTableHeader(null); + } + table.getEmptyText().setText(emptyText); MyRemoveAction removeAction = new MyRemoveAction(); toolbarDecorator = ToolbarDecorator.createDecorator(table, this).setRemoveAction(removeAction).setRemoveActionUpdater(removeAction); if (itemEditor instanceof DialogItemEditor) { - toolbarDecorator.setEditAction(new AnActionButtonRunnable() { + addDialogActions(); + } + } + + private void addDialogActions() { + toolbarDecorator.setEditAction(new AnActionButtonRunnable() { + @Override + public void run(AnActionButton button) { + T item = table.getSelectedObject(); + if (item != null) { + Function mutator; + if (model.isMutable(item)) { + mutator = FunctionUtil.id(); + } + else { + final int selectedRow = table.getSelectedRow(); + mutator = new Function() { + @Override + public T fun(T item) { + return model.getMutable(selectedRow, item); + } + }; + } + ((DialogItemEditor)itemEditor).edit(item, mutator, false); + table.requestFocus(); + } + } + }).setEditActionUpdater(new AnActionButtonUpdater() { + @Override + public boolean isEnabled(AnActionEvent e) { + T item = table.getSelectedObject(); + return item != null && ((DialogItemEditor)itemEditor).isEditable(item); + } + }); + + if (((DialogItemEditor)itemEditor).isUseDialogToAdd()) { + toolbarDecorator.setAddAction(new AnActionButtonRunnable() { @Override public void run(AnActionButton button) { - T item = table.getSelectedObject(); - if (item != null) { - Function mutator; - if (model.isMutable(item)) { - mutator = FunctionUtil.id(); + T item = createElement(); + ((DialogItemEditor)itemEditor).edit(item, new Function() { + @Override + public T fun(T item) { + model.addRow(item); + return item; } - else { - final int selectedRow = table.getSelectedRow(); - mutator = new Function() { - @Override - public T fun(T item) { - return model.getMutable(selectedRow, item); - } - }; - } - ((DialogItemEditor)TableModelEditor.this.itemEditor).edit(item, mutator); - table.requestFocus(); - } - } - }).setEditActionUpdater(new AnActionButtonUpdater() { - @Override - public boolean isEnabled(AnActionEvent e) { - T item = table.getSelectedObject(); - return item != null && ((DialogItemEditor)TableModelEditor.this.itemEditor).isEditable(item); + }, true); } }); } } + public TableModelEditor disableUpDownActions() { + toolbarDecorator.disableUpDownActions(); + return this; + } + + public TableModelEditor enabled(boolean value) { + table.setEnabled(value); + return this; + } + public static abstract class DataChangedListener implements TableModelListener { public abstract void dataChanged(@NotNull ColumnInfo columnInfo, int rowIndex); @@ -146,13 +194,17 @@ public class TableModelEditor implements ElementProducer { } public static abstract class DialogItemEditor extends ItemEditor { - public abstract void edit(@NotNull T item, @NotNull Function mutator); + public abstract void edit(@NotNull T item, @NotNull Function mutator, boolean isAdd); public abstract void applyEdited(@NotNull T oldItem, @NotNull T newItem); public boolean isEditable(@NotNull T item) { return true; } + + public boolean isUseDialogToAdd() { + return false; + } } @NotNull @@ -322,7 +374,7 @@ public class TableModelEditor implements ElementProducer { try { constructor.setAccessible(true); } - catch (SecurityException e) { + catch (SecurityException ignored) { return itemEditor.getItemClass().newInstance(); } return constructor.newInstance(); diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java index 7e8c1897ecb1..477d527ecbac 100644 --- a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java +++ b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java @@ -46,7 +46,6 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; -import java.util.Collections; import java.util.UUID; import static com.intellij.ide.browsers.WebBrowserManager.DefaultBrowser; @@ -139,16 +138,14 @@ final class BrowserSettingsPanel { @SuppressWarnings("UnusedDeclaration") private JComponent browsersTable; - private ComboBox defaultBrowserComboBox; + private ComboBox defaultBrowserComboBox; private TableModelEditor browsersEditor; private String customPathValue; public BrowserSettingsPanel() { - alternativeBrowserPathField.addBrowseFolderListener(IdeBundle.message("title.select.path.to.browser"), null, null, - APP_FILE_CHOOSER_DESCRIPTOR); - + alternativeBrowserPathField.addBrowseFolderListener(IdeBundle.message("title.select.path.to.browser"), null, null, APP_FILE_CHOOSER_DESCRIPTOR); defaultBrowserPanel.setBorder(TitledSeparator.EMPTY_BORDER); //noinspection unchecked @@ -236,7 +233,7 @@ final class BrowserSettingsPanel { } @Override - public void edit(@NotNull ConfigurableWebBrowser browser, @NotNull Function mutator) { + public void edit(@NotNull ConfigurableWebBrowser browser, @NotNull Function mutator, boolean isAdd) { BrowserSpecificSettings settings = cloneSettings(browser); if (settings != null && ShowSettingsUtil.getInstance().editConfigurable(browsersTable, settings.createConfigurable())) { mutator.fun(browser).setSpecificSettings(settings); @@ -271,27 +268,26 @@ final class BrowserSettingsPanel { return !WebBrowserManager.getInstance().isPredefinedBrowser(item); } }; - browsersEditor = new TableModelEditor(Collections.emptyList(), COLUMNS, - itemEditor, "No web browsers configured" - ).modelListener(new TableModelEditor.DataChangedListener() { - @Override - public void tableChanged(TableModelEvent event) { - update(event.getFirstRow()); - } - - @Override - public void dataChanged(@NotNull ColumnInfo columnInfo, int rowIndex) { - if (columnInfo == PATH_COLUMN_INFO) { - update(rowIndex); + browsersEditor = new TableModelEditor(COLUMNS, itemEditor, "No web browsers configured") + .modelListener(new TableModelEditor.DataChangedListener() { + @Override + public void tableChanged(TableModelEvent event) { + update(event.getFirstRow()); } - } - private void update(int rowIndex) { - if (rowIndex == 0 && getDefaultBrowser() == DefaultBrowser.FIRST) { - setCustomPathToFirstListed(); + @Override + public void dataChanged(@NotNull ColumnInfo columnInfo, int rowIndex) { + if (columnInfo == PATH_COLUMN_INFO) { + update(rowIndex); + } } - } - }); + + private void update(int rowIndex) { + if (rowIndex == 0 && getDefaultBrowser() == DefaultBrowser.FIRST) { + setCustomPathToFirstListed(); + } + } + }); browsersTable = browsersEditor.createComponent(); }