Skip to content

Commit 142bd64

Browse files
committed
[FIX] keep changed header values when switching fixed header option
1 parent b656691 commit 142bd64

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/table/CsvTableEditor.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ public abstract class CsvTableEditor implements FileEditor, FileEditorLocation {
4747
private Object[][] initialState = null;
4848
private CsvTableEditorState storedState = null;
4949

50-
protected CsvColumnInfoMap<PsiElement> columnInfoMap;
5150
protected boolean tableIsEditable = true;
5251

5352
public CsvTableEditor(@NotNull Project projectArg, @NotNull VirtualFile fileArg) {
@@ -74,15 +73,15 @@ public CsvTableEditor(@NotNull Project projectArg, @NotNull VirtualFile fileArg)
7473

7574
protected abstract void beforeTableComponentUpdate();
7675

77-
protected abstract void afterTableComponentUpdate();
76+
protected abstract void afterTableComponentUpdate(Object[][] values);
7877

7978
public final void updateTableComponentData(Object[][] values) {
8079
beforeTableComponentUpdate();
8180
try {
8281
setTableComponentData(values);
8382
saveChanges();
8483
} finally {
85-
afterTableComponentUpdate();
84+
afterTableComponentUpdate(values);
8685
}
8786
}
8887

@@ -99,7 +98,13 @@ public boolean isEditable() {
9998
return this.tableIsEditable && !this.hasErrors();
10099
}
101100

101+
public CsvColumnInfoMap<PsiElement> getColumnInfoMap() {
102+
CsvFile csvFile = getCsvFile();
103+
return csvFile == null ? null : csvFile.getMyColumnInfoMap();
104+
}
105+
102106
public boolean hasErrors() {
107+
CsvColumnInfoMap columnInfoMap = getColumnInfoMap();
103108
return !isValid() || (columnInfoMap != null && columnInfoMap.hasErrors());
104109
}
105110

src/main/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/CsvTableEditorSwing.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public class CsvTableEditorSwing extends CsvTableEditor implements TableDataChan
6161

6262
private boolean listenerApplied = false;
6363

64+
private CsvColumnInfoMap lastColumnInfoMap;
65+
6466
public CsvTableEditorSwing(@NotNull Project projectArg, @NotNull VirtualFile fileArg) {
6567
super(projectArg, fileArg);
6668

@@ -102,8 +104,9 @@ private void initializedUIComponents() {
102104
});
103105

104106
cbFixedHeaders.addActionListener(e -> {
107+
Object[][] values = storeCurrentState();
105108
getFileEditorState().setFixedHeaders(cbFixedHeaders.isSelected());
106-
updateTableComponentData(getDataHandler().getCurrentState());
109+
updateTableComponentData(values);
107110
});
108111

109112
tblEditor.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
@@ -159,12 +162,12 @@ public void setTableRowHeight(int rowHeight) {
159162
this.getTable().setRowHeight(rowHeight == 0 ? ROW_LINE_HEIGHT : rowHeight);
160163
}
161164

162-
private Object[] generateColumnIdentifiers(TableModel tableModel) {
165+
private Object[] generateColumnIdentifiers(Object[][] values) {
163166
if (getFileEditorState().getFixedHeaders()) {
164-
return getFixedHeaderValues();
167+
return values[0];
165168
}
166169

167-
int columnCount = tableModel.getColumnCount();
170+
int columnCount = values[0].length;
168171
int columnOffset = CsvEditorSettingsExternalizable.getInstance().isZeroBasedColumnNumbering() ? 0 : 1;
169172
Object[] identifiers = new Object[columnCount];
170173
for (int i = 0; i < columnCount; ++i) {
@@ -249,10 +252,10 @@ protected void beforeTableComponentUpdate() {
249252
}
250253

251254
@Override
252-
protected void afterTableComponentUpdate() {
255+
protected void afterTableComponentUpdate(Object[][] values) {
253256
try {
254257
DefaultTableModel tableModel = this.getTableModel();
255-
tableModel.setColumnIdentifiers(generateColumnIdentifiers(tableModel));
258+
tableModel.setColumnIdentifiers(generateColumnIdentifiers(values));
256259
this.updateEditorLayout();
257260
} finally {
258261
this.applyTableChangeListener();
@@ -314,12 +317,12 @@ protected void updateUIComponents() {
314317
return;
315318
}
316319

317-
CsvColumnInfoMap<PsiElement> newColumnInfoMap = csvFile.getMyColumnInfoMap();
318-
if (Objects.equals(columnInfoMap, newColumnInfoMap)) {
320+
CsvColumnInfoMap<PsiElement> columnInfoMap = csvFile.getMyColumnInfoMap();
321+
if (Objects.equals(lastColumnInfoMap, columnInfoMap)) {
319322
return;
320323
}
321324

322-
columnInfoMap = newColumnInfoMap;
325+
lastColumnInfoMap = columnInfoMap;
323326
updateInteractionElements();
324327
DefaultTableModel tableModel = new DefaultTableModel(0, 0);
325328
if (!columnInfoMap.hasErrors()) {
@@ -385,6 +388,7 @@ protected int[] getCurrentColumnsWidths() {
385388
}
386389

387390
private Object[] getFixedHeaderValues() {
391+
CsvColumnInfoMap columnInfoMap = getColumnInfoMap();
388392
Object[] headerValues = new Object[columnInfoMap.getColumnInfos().size()];
389393
if (!columnInfoMap.hasErrors()) {
390394
for (int i = 0; i < columnInfoMap.getColumnInfos().size(); ++i) {

0 commit comments

Comments
 (0)