mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
update path field on data changed
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user