update path field on data changed

This commit is contained in:
Vladimir Krivosheev
2014-01-21 15:19:04 +01:00
parent 0f41580845
commit 72fc2edcaa
2 changed files with 48 additions and 22 deletions
@@ -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<T> implements ElementProducer<T> {
}
}
public TableModelEditor<T> modelListener(@NotNull TableModelListener listener) {
public static abstract class DataChangedListener<T> implements TableModelListener {
public abstract void dataChanged(@NotNull ColumnInfo<T, ?> columnInfo, int rowIndex);
@Override
public void tableChanged(TableModelEvent e) {
}
}
public TableModelEditor<T> modelListener(@NotNull DataChangedListener<T> listener) {
model.dataChangedListener = listener;
model.addTableModelListener(listener);
return this;
}
@@ -140,6 +150,7 @@ public class TableModelEditor<T> implements ElementProducer<T> {
private List<T> items;
private final TableModelEditor<T> editor;
private final THashMap<T, T> modifiedToOriginal = new THashMap<T, T>();
private DataChangedListener<T> dataChangedListener;
public MyListTableModel(@NotNull ColumnInfo[] columns, @NotNull List<T> items, @NotNull TableModelEditor<T> editor) {
super(columns, items);
@@ -173,6 +184,9 @@ public class TableModelEditor<T> implements ElementProducer<T> {
: !Comparing.equal(oldValue, newValue)) {
column.setValue(getMutable(rowIndex, item), newValue);
if (dataChangedListener != null) {
dataChangedListener.dataChanged(column, rowIndex);
}
}
}
}
@@ -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<ConfigurableWebBrowser, String> PATH_COLUMN_INFO =
new EditableColumnInfo<ConfigurableWebBrowser, String>("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<ConfigurableWebBrowser, Boolean>() {
@Override
public Class getColumnClass() {
@@ -117,23 +135,7 @@ public class BrowserSettingsPanel {
public TableCellEditor getEditor(ConfigurableWebBrowser item) {
return ComboBoxTableCellEditor.INSTANCE;
}
}, new EditableColumnInfo<ConfigurableWebBrowser, String>("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<ConfigurableWebBrowser>(Collections.<ConfigurableWebBrowser>emptyList(), COLUMNS,
itemEditor, "No web browsers configured"
).modelListener(new TableModelListener() {
).modelListener(new TableModelEditor.DataChangedListener<ConfigurableWebBrowser>() {
@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<ConfigurableWebBrowser, ?> columnInfo, int rowIndex) {
if (columnInfo == PATH_COLUMN_INFO) {
update(rowIndex);
}
}
private void update(int rowIndex) {
if (rowIndex == 0 && getDefaultBrowser() == DefaultBrowser.FIRST) {
setCustomPathToFirstListed();
}
}