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