1 package org.opentrafficsim.editor.render;
2
3 import java.awt.Component;
4
5 import javax.swing.JLabel;
6 import javax.swing.JTable;
7 import javax.swing.UIManager;
8 import javax.swing.border.Border;
9 import javax.swing.border.EmptyBorder;
10 import javax.swing.border.LineBorder;
11 import javax.swing.table.TableCellRenderer;
12
13 import org.opentrafficsim.editor.OtsEditor;
14 import org.opentrafficsim.editor.XsdTreeNode;
15 import org.opentrafficsim.editor.XsdTreeTableModel;
16
17 import de.javagl.treetable.JTreeTable;
18
19
20
21
22
23
24
25
26
27 public class StringCellRenderer extends JLabel implements TableCellRenderer
28 {
29
30
31 private static final long serialVersionUID = 20230218L;
32
33
34 private final JTreeTable treeTable;
35
36
37
38
39
40 public StringCellRenderer(final JTreeTable treeTable)
41 {
42 this.treeTable = treeTable;
43 setOpaque(true);
44 }
45
46 @Override
47 public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected,
48 final boolean hasFocus, final int row, final int column)
49 {
50 String val = value == null ? "" : value.toString();
51 setText(val);
52 setFont(table.getFont());
53
54 if (isSelected)
55 {
56 setBackground(UIManager.getColor("Table.selectionBackground"));
57 }
58 else
59 {
60 int treeColumn = this.treeTable.convertColumnIndexToView(XsdTreeTableModel.TREE_COLUMN);
61 int idColumn = this.treeTable.convertColumnIndexToView(XsdTreeTableModel.ID_COLUMN);
62 int valueColumn = this.treeTable.convertColumnIndexToView(XsdTreeTableModel.VALUE_COLUMN);
63 XsdTreeNode node = (XsdTreeNode) this.treeTable.getValueAt(row, treeColumn);
64 String message = node.isSelfValid() ? null : (column == idColumn ? node.reportInvalidId().orElse(null)
65 : (column == valueColumn ? node.reportInvalidValue().orElse(null) : null));
66 if (this.treeTable.isCellEditable(row, column))
67 {
68 if (message != null)
69 {
70 setToolTipText(OtsEditor.limitTooltip(message));
71 setBackground(OtsEditor.getInvalidColor());
72 }
73 else
74 {
75 setToolTipText(OtsEditor
76 .limitTooltip(!val.isEmpty() && (column == idColumn || column == valueColumn) ? val : null));
77 boolean expression = column == idColumn ? node.idIsExpression()
78 : (column == valueColumn ? node.valueIsExpression() : false);
79 if (expression)
80 {
81 setBackground(OtsEditor.getExpressionColor());
82 }
83 else
84 {
85 setBackground(UIManager.getColor("Table.background"));
86 }
87 }
88 }
89 else
90 {
91 setToolTipText(null);
92 setBackground(UIManager.getColor("Table.background"));
93 }
94 }
95
96 Border border;
97 if (this.treeTable.isCellEditable(row, column))
98 {
99 border = new LineBorder(UIManager.getColor("Table.gridColor"));
100 }
101 else
102 {
103 border = new EmptyBorder(0, 0, 0, 0);
104 }
105 setBorder(border);
106
107 return this;
108 }
109
110 }