From 72fc2edcaa589fd37cff8b6b3d036a77b30364b2 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 21 Jan 2014 15:16:23 +0100 Subject: [PATCH] update path field on data changed --- .../util/ui/table/TableModelEditor.java | 16 +++++- .../ide/browsers/BrowserSettingsPanel.java | 54 +++++++++++-------- 2 files changed, 48 insertions(+), 22 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 7703cc183c66..f632c9dcee5b 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 @@ -37,6 +37,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import java.lang.reflect.Constructor; import java.util.ArrayList; @@ -96,7 +97,16 @@ public class TableModelEditor implements ElementProducer { } } - public TableModelEditor modelListener(@NotNull TableModelListener listener) { + public static abstract class DataChangedListener implements TableModelListener { + public abstract void dataChanged(@NotNull ColumnInfo columnInfo, int rowIndex); + + @Override + public void tableChanged(TableModelEvent e) { + } + } + + public TableModelEditor modelListener(@NotNull DataChangedListener listener) { + model.dataChangedListener = listener; model.addTableModelListener(listener); return this; } @@ -140,6 +150,7 @@ public class TableModelEditor implements ElementProducer { private List items; private final TableModelEditor editor; private final THashMap modifiedToOriginal = new THashMap(); + private DataChangedListener dataChangedListener; public MyListTableModel(@NotNull ColumnInfo[] columns, @NotNull List items, @NotNull TableModelEditor editor) { super(columns, items); @@ -173,6 +184,9 @@ public class TableModelEditor implements ElementProducer { : !Comparing.equal(oldValue, newValue)) { column.setValue(getMutable(rowIndex, item), newValue); + if (dataChangedListener != null) { + dataChangedListener.dataChanged(column, rowIndex); + } } } } diff --git a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java index b7466055d98f..3eaa1336ed36 100644 --- a/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java +++ b/xml/impl/src/com/intellij/ide/browsers/BrowserSettingsPanel.java @@ -42,7 +42,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.TableModelEvent; -import javax.swing.event.TableModelListener; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import java.awt.event.ActionEvent; @@ -65,6 +64,25 @@ public class BrowserSettingsPanel { } } : FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor(); + private static final EditableColumnInfo PATH_COLUMN_INFO = + new EditableColumnInfo("Path") { + @Override + public String valueOf(ConfigurableWebBrowser item) { + return item.getPath(); + } + + @Override + public void setValue(ConfigurableWebBrowser item, String value) { + item.setPath(value); + } + + @Nullable + @Override + public TableCellEditor getEditor(ConfigurableWebBrowser item) { + return new LocalPathCellEditor().fileChooserDescriptor(APP_FILE_CHOOSER_DESCRIPTOR); + } + }; + private static final ColumnInfo[] COLUMNS = {new EditableColumnInfo() { @Override public Class getColumnClass() { @@ -117,23 +135,7 @@ public class BrowserSettingsPanel { public TableCellEditor getEditor(ConfigurableWebBrowser item) { return ComboBoxTableCellEditor.INSTANCE; } - }, new EditableColumnInfo("Path") { - @Override - public String valueOf(ConfigurableWebBrowser item) { - return item.getPath(); - } - - @Override - public void setValue(ConfigurableWebBrowser item, String value) { - item.setPath(value); - } - - @Nullable - @Override - public TableCellEditor getEditor(ConfigurableWebBrowser item) { - return new LocalPathCellEditor().fileChooserDescriptor(APP_FILE_CHOOSER_DESCRIPTOR); - } - }}; + }, PATH_COLUMN_INFO}; private JPanel root; @@ -266,11 +268,21 @@ public class BrowserSettingsPanel { }; browsersEditor = new TableModelEditor(Collections.emptyList(), COLUMNS, itemEditor, "No web browsers configured" - ).modelListener(new TableModelListener() { + ).modelListener(new TableModelEditor.DataChangedListener() { @Override public void tableChanged(TableModelEvent event) { - // todo support inline editing (TableModelEvent is not triggered in this case) - if (event.getFirstRow() == 0 && getDefaultBrowser() == DefaultBrowser.FIRST) { + update(event.getFirstRow()); + } + + @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(); } }