Skip to content

Commit f1a12b0

Browse files
authored
Merge pull request #155 from SeeSharpSoft/master
Release 2.6.4
2 parents 0fc5289 + 5fc3f7a commit f1a12b0

File tree

6 files changed

+36
-19
lines changed

6 files changed

+36
-19
lines changed

CHANGELOG

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
2.6.4
2+
Aug 30, 2019
3+
4+
FIX: scrollable table cells
5+
FIX: auto cell height computation
6+
17
2.6.3
28
Aug 25, 2019
39

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# https://www.jetbrains.com/intellij-repository/snapshots
44

55
name='CSV Plugin'
6-
pluginVersion=2.6.3
6+
pluginVersion=2.6.4
77
javaVersion=1.8
88
javaTargetVersion=1.8
99
downloadIntellijSources=false

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,10 @@ private void updateRowHeights(int first, int last) {
251251
int columnCount = table.getColumnCount();
252252
int actualFirst = Math.min(first, table.getRowCount());
253253
int actualLast = Math.min(last, table.getRowCount());
254+
boolean isCalculated = getFileEditorState().getRowLines() == 0;
254255
for (int row = actualFirst; row < actualLast; row++) {
255256
int rowHeight = getPreferredRowHeight();
256-
if (rowHeight == 0) {
257+
if (isCalculated) {
257258
for (int column = 0; column < columnCount; column++) {
258259
Component comp = table.prepareRenderer(table.getCellRenderer(row, column), row, column);
259260
rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
@@ -500,7 +501,6 @@ public void changeFontSize(int changeAmount) {
500501
int oldSize = getTable().getFont().getSize();
501502
int newSize = oldSize + changeAmount;
502503
setFontSize(newSize);
503-
setTableRowHeight(getPreferredRowHeight());
504504
updateEditorLayout();
505505
}
506506

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

+24-14
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.intellij.openapi.editor.markup.TextAttributes;
44
import com.intellij.openapi.util.UserDataHolder;
5+
import com.intellij.ui.components.JBScrollPane;
56
import net.seesharpsoft.intellij.plugins.csv.editor.CsvEditorSettingsExternalizable;
67
import net.seesharpsoft.intellij.plugins.csv.settings.CsvColorSettings;
78

@@ -18,22 +19,28 @@
1819
import java.util.Set;
1920
import java.util.concurrent.CopyOnWriteArraySet;
2021

21-
public class MultiLineCellRenderer extends JTextArea implements TableCellRenderer, TableCellEditor {
22+
public class MultiLineCellRenderer extends JBScrollPane implements TableCellRenderer, TableCellEditor {
2223

2324
private Set<CellEditorListener> cellEditorListenerSet = new CopyOnWriteArraySet<>();
24-
private final UserDataHolder userDataHolder;
25+
private final UserDataHolder myUserDataHolder;
26+
27+
private JTextArea myTextArea;
2528

2629
public MultiLineCellRenderer(CsvTableEditorKeyListener keyListener, UserDataHolder userDataHolderParam) {
27-
setLineWrap(true);
28-
setWrapStyleWord(true);
29-
setOpaque(true);
30-
addKeyListener(keyListener);
31-
this.userDataHolder = userDataHolderParam;
30+
this.myUserDataHolder = userDataHolderParam;
31+
myTextArea = new JTextArea();
32+
myTextArea.setLineWrap(true);
33+
myTextArea.setWrapStyleWord(true);
34+
myTextArea.setOpaque(true);
35+
myTextArea.setBorder(null);
36+
myTextArea.addKeyListener(keyListener);
37+
this.setOpaque(true);
38+
this.setViewportView(myTextArea);
3239
}
3340

3441
private TextAttributes getColumnTextAttributes(int column) {
3542
if (CsvEditorSettingsExternalizable.getInstance().isTableColumnHighlightingEnabled()) {
36-
return CsvColorSettings.getTextAttributesOfColumn(column, userDataHolder);
43+
return CsvColorSettings.getTextAttributesOfColumn(column, myUserDataHolder);
3744
}
3845
return null;
3946
}
@@ -48,6 +55,7 @@ private Color getColumnBackgroundColor(int column, Color fallback) {
4855
return textAttributes == null || textAttributes.getBackgroundColor() == null ? fallback : textAttributes.getBackgroundColor();
4956
}
5057

58+
@Override
5159
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
5260
if (isSelected) {
5361
setForeground(table.getSelectionForeground());
@@ -56,7 +64,6 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole
5664
setForeground(getColumnForegroundColor(column, table.getForeground()));
5765
setBackground(getColumnBackgroundColor(column, table.getBackground()));
5866
}
59-
setFont(table.getFont());
6067
if (hasFocus) {
6168
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
6269
if (table.isCellEditable(row, column)) {
@@ -66,24 +73,27 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole
6673
} else {
6774
setBorder(new EmptyBorder(1, 2, 1, 2));
6875
}
69-
setText((value == null) ? "" : value.toString());
7076

7177
final int columnWidth = table.getColumnModel().getColumn(column).getWidth();
7278
final int rowHeight = table.getRowHeight(row);
79+
this.setFont(table.getFont());
7380
this.setSize(columnWidth, rowHeight);
7481
this.validate();
82+
myTextArea.setText((value == null) ? "" : value.toString());
83+
myTextArea.setFont(table.getFont());
84+
myTextArea.setSize(columnWidth, rowHeight);
85+
myTextArea.validate();
7586

7687
return this;
7788
}
7889

7990
@Override
8091
public Dimension getPreferredSize() {
8192
try {
82-
final Rectangle rectangle = this.modelToView(getDocument().getLength());
93+
final Rectangle rectangle = myTextArea.modelToView(myTextArea.getDocument().getLength());
8394
if (rectangle != null) {
8495
return new Dimension(this.getWidth(),
85-
this.getInsets().top + rectangle.y + rectangle.height +
86-
this.getInsets().bottom);
96+
this.getInsets().top + rectangle.y + rectangle.height + this.getInsets().bottom);
8797
}
8898
} catch (BadLocationException e) {
8999
e.printStackTrace();
@@ -99,7 +109,7 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean
99109

100110
@Override
101111
public Object getCellEditorValue() {
102-
return this.getText();
112+
return myTextArea.getText();
103113
}
104114

105115
@Override

src/main/resources/META-INF/plugin.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646

4747
<change-notes><![CDATA[
4848
<pre style="font-family: sans-serif">
49-
FIX: Index out of bound error on multi line clear cells #151
49+
FIX: scrollable table cells
50+
FIX: auto cell height computation
5051
</pre>
5152
]]>
5253
</change-notes>

src/test/java/net/seesharpsoft/intellij/plugins/csv/editor/table/swing/MultiLineCellRendererTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public void testCellRendererUsage() {
1414
}
1515

1616
public void testPreferredSize() {
17-
JTextArea jTextArea = (JTextArea)fileEditor.getTable().getCellRenderer(0, 0);
17+
JScrollPane jTextArea = (JScrollPane)fileEditor.getTable().getCellRenderer(0, 0);
1818

1919
assertNotNull(jTextArea.getPreferredSize());
2020
}

0 commit comments

Comments
 (0)