source: josm/trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java@ 7018

Last change on this file since 7018 was 7018, checked in by Don-vip, 10 years ago

refactor duplicated code

  • Property svn:eol-style set to native
File size: 5.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.conflict.pair.relation;
3
4import java.awt.Color;
5import java.awt.Component;
6
7import javax.swing.BorderFactory;
8import javax.swing.JLabel;
9import javax.swing.JTable;
10import javax.swing.border.Border;
11import javax.swing.table.TableCellRenderer;
12
13import org.openstreetmap.josm.data.osm.Node;
14import org.openstreetmap.josm.data.osm.RelationMember;
15import org.openstreetmap.josm.gui.DefaultNameFormatter;
16import org.openstreetmap.josm.gui.conflict.ConflictColors;
17import org.openstreetmap.josm.gui.conflict.pair.ListMergeModel;
18import org.openstreetmap.josm.tools.ImageProvider;
19
20/**
21 * This is the {@link TableCellRenderer} used in the tables of {@link RelationMemberMerger}.
22 *
23 */
24public class RelationMemberTableCellRenderer extends JLabel implements TableCellRenderer {
25 private Border rowNumberBorder = null;
26
27 /**
28 * constructor
29 */
30 public RelationMemberTableCellRenderer() {
31 setIcon(null);
32 setOpaque(true);
33 rowNumberBorder = BorderFactory.createEmptyBorder(0,4,0,0);
34 }
35
36 /**
37 * reset the renderer
38 */
39 protected void reset() {
40 setBackground(ConflictColors.BGCOLOR.get());
41 setForeground(ConflictColors.FGCOLOR.get());
42 setBorder(null);
43 setIcon(null);
44 setToolTipText(null);
45 }
46
47 protected void renderBackground(ListMergeModel<Node>.EntriesTableModel model, RelationMember member, int row, int col, boolean isSelected) {
48 Color bgc = ConflictColors.BGCOLOR.get();
49 if (col == 0) {
50 if (model.getListMergeModel().isFrozen()) {
51 bgc = ConflictColors.BGCOLOR_FROZEN.get();
52 } else if (model.isParticipatingInCurrentComparePair()) {
53 bgc = ConflictColors.BGCOLOR_PARTICIPATING_IN_COMPARISON.get();
54 } else if (isSelected) {
55 bgc = ConflictColors.BGCOLOR_SELECTED.get();
56 }
57 } else {
58 if (model.getListMergeModel().isFrozen()) {
59 bgc = ConflictColors.BGCOLOR_FROZEN.get();
60 } else if (member == null) {
61 bgc = ConflictColors.BGCOLOR_EMPTY_ROW.get();
62 } else if (isSelected) {
63 bgc = ConflictColors.BGCOLOR_SELECTED.get();
64 } else {
65 if (model.isParticipatingInCurrentComparePair()) {
66 if (model.isSamePositionInOppositeList(row)) {
67 bgc = ConflictColors.BGCOLOR_SAME_POSITION_IN_OPPOSITE.get();
68 } else if (model.isIncludedInOppositeList(row)) {
69 bgc = ConflictColors.BGCOLOR_IN_OPPOSITE.get();
70 } else {
71 bgc = ConflictColors.BGCOLOR_NOT_IN_OPPOSITE.get();
72 }
73 }
74 }
75 }
76 setBackground(bgc);
77 }
78
79 protected void renderForeground(ListMergeModel<Node>.EntriesTableModel model, RelationMember member, int row, int col, boolean isSelected) {
80 Color fgc = ConflictColors.FGCOLOR.get();
81 if (col == 0 && model.isParticipatingInCurrentComparePair() && ! model.getListMergeModel().isFrozen()) {
82 fgc = ConflictColors.FGCOLOR_PARTICIPATING_IN_COMPARISON.get();
83 }
84 setForeground(fgc);
85 }
86
87 protected void renderRole(RelationMember member) {
88 setText(member.getRole());
89 setToolTipText(member.getRole());
90 }
91
92 protected void renderPrimitive(RelationMember member) {
93 String displayName = member.getMember().getDisplayName(DefaultNameFormatter.getInstance());
94 setText(displayName);
95 setToolTipText(DefaultNameFormatter.getInstance().buildDefaultToolTip(member.getMember()));
96 setIcon(ImageProvider.get(member.getDisplayType()));
97 }
98
99 /**
100 * render the row id
101 * @param row the row index
102 */
103 protected void renderRowId(int row) {
104 setBorder(rowNumberBorder);
105 setText(Integer.toString(row+1));
106 }
107
108 protected void renderEmptyRow() {
109 setIcon(null);
110 setBackground(ConflictColors.BGCOLOR_EMPTY_ROW.get());
111 setText("");
112 }
113
114 @Override
115 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
116 int row, int column) {
117
118 RelationMember member = (RelationMember)value;
119 reset();
120 if (member == null) {
121 renderEmptyRow();
122 } else {
123 renderBackground(getModel(table), member, row, column, isSelected);
124 renderForeground(getModel(table), member, row, column, isSelected);
125 switch(column) {
126 case 0:
127 renderRowId(row);
128 break;
129 case 1:
130 renderRole(member);
131 break;
132 case 2:
133 renderPrimitive(member);
134 break;
135 default:
136 // should not happen
137 }
138 }
139 return this;
140 }
141
142 /**
143 * replies the model
144 * @param table the table
145 * @return the table model
146 */
147 @SuppressWarnings("unchecked")
148 protected ListMergeModel<Node>.EntriesTableModel getModel(JTable table) {
149 return (ListMergeModel.EntriesTableModel)table.getModel();
150 }
151}
Note: See TracBrowser for help on using the repository browser.