Skip to content

Commit c2860b9

Browse files
committed
UI bugfixes in Profile tab
- Row selection instead of column selection - Columns in tree table are now resized acording to content
1 parent 54dcafa commit c2860b9

File tree

3 files changed

+49
-25
lines changed

3 files changed

+49
-25
lines changed

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/ui/console/plan/ColumnDefinitions.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,6 @@ public Class<?> getColumnClass() {
5858
public String valueOf(DefaultMutableTreeNode o) {
5959
return ((GraphQueryPlan) o.getUserObject()).getOperatorType();
6060
}
61-
62-
@Override
63-
@NonNls
64-
public String getPreferredStringValue() {
65-
return StringUtil.repeatSymbol('m', 25);
66-
}
6761
};
6862

6963
private static final ColumnInfo<DefaultMutableTreeNode, String> ESTIMATED_ROWS_COL =
@@ -86,12 +80,6 @@ public String valueOf(DefaultMutableTreeNode o) {
8680
.map(Object::toString)
8781
.collect(joining(", "));
8882
}
89-
90-
@Override
91-
@NonNls
92-
public String getPreferredStringValue() {
93-
return StringUtil.repeatSymbol('m', 15);
94-
}
9583
};
9684

9785
private static final ColumnInfo<DefaultMutableTreeNode, String> IDENTIFIERS_COL =
@@ -102,12 +90,6 @@ public String valueOf(DefaultMutableTreeNode o) {
10290
return ((GraphQueryPlan) o.getUserObject()).getIdentifiers().stream()
10391
.collect(joining(", "));
10492
}
105-
106-
@Override
107-
@NonNls
108-
public String getPreferredStringValue() {
109-
return StringUtil.repeatSymbol('m', 12);
110-
}
11193
};
11294

11395
@NotNull
@@ -129,12 +111,6 @@ public String valueOf(DefaultMutableTreeNode o) {
129111
})
130112
.orElse("0");
131113
}
132-
133-
@Override
134-
@NonNls
135-
public String getPreferredStringValue() {
136-
return StringUtil.repeatSymbol('m', 5);
137-
}
138114
};
139115
}
140116
}

ui/jetbrains/src/main/java/com/neueda/jetbrains/plugin/graphdb/jetbrains/ui/console/plan/QueryPlanPanel.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.intellij.ui.treeStructure.treetable.TreeTableModel;
1616
import com.neueda.jetbrains.plugin.graphdb.database.api.query.GraphQueryPlan;
1717
import com.neueda.jetbrains.plugin.graphdb.database.api.query.GraphQueryResult;
18+
import com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.table.DynamicTreeTable;
1819
import com.neueda.jetbrains.plugin.graphdb.platform.ShouldNeverHappenException;
1920
import org.jetbrains.annotations.NotNull;
2021

@@ -55,10 +56,11 @@ public void initialize(Container container) {
5556

5657
ListTreeTableModelOnColumns model = createModel(graphQueryPlan, result.isProfilePlan());
5758

58-
treeTable = new TreeTableView(model);
59+
treeTable = new DynamicTreeTable(model);
5960
treeTable.setAutoCreateColumnsFromModel(true);
6061
treeTable.setRootVisible(true);
6162
treeTable.setCellSelectionEnabled(false);
63+
treeTable.setRowSelectionAllowed(true);
6264
treeTable.setAutoResizeMode(TreeTableView.AUTO_RESIZE_OFF);
6365

6466
treeTable.getTree().setShowsRootHandles(true);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.neueda.jetbrains.plugin.graphdb.jetbrains.ui.console.table;
2+
3+
import com.intellij.ui.dualView.TreeTableView;
4+
import com.intellij.ui.treeStructure.treetable.ListTreeTableModelOnColumns;
5+
import org.jetbrains.annotations.NotNull;
6+
7+
import javax.swing.table.TableCellRenderer;
8+
import javax.swing.table.TableColumn;
9+
import java.awt.*;
10+
11+
/**
12+
* DynamicTreeTable is a TreeTable which implement automatic column resizing depending
13+
* on column content.
14+
*/
15+
public class DynamicTreeTable extends TreeTableView {
16+
17+
private final int minMargin;
18+
19+
public DynamicTreeTable(ListTreeTableModelOnColumns treeTableModel) {
20+
super(treeTableModel);
21+
22+
minMargin = strWidth("ww");
23+
}
24+
25+
@NotNull
26+
@Override
27+
public Component prepareRenderer(@NotNull TableCellRenderer renderer, int row, int column) {
28+
Component component = super.prepareRenderer(renderer, row, column);
29+
30+
int rendererWidth = component.getPreferredSize().width;
31+
TableColumn tableColumn = getColumnModel().getColumn(column);
32+
String header = tableColumn.getHeaderValue().toString();
33+
34+
35+
int width = Math.max(rendererWidth, strWidth(header)) +
36+
Math.max(getIntercellSpacing().width, minMargin);
37+
width = Math.max(width, tableColumn.getPreferredWidth());
38+
39+
tableColumn.setPreferredWidth(width);
40+
return component;
41+
}
42+
43+
private int strWidth(String str) {
44+
return getFontMetrics(getFont()).charsWidth(str.toCharArray(), 0, str.length());
45+
}
46+
}

0 commit comments

Comments
 (0)