source: josm/trunk/src/org/openstreetmap/josm/gui/io/SaveLayerInfoCellRenderer.java@ 4932

Last change on this file since 4932 was 4072, checked in by jttt, 13 years ago

Fix #6301 Check for null mandatory in TableCellRenderer.getTableCellRendererComponent

  • Property svn:eol-style set to native
File size: 5.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Color;
7import java.awt.Component;
8import java.awt.Font;
9import java.io.File;
10
11import javax.swing.JCheckBox;
12import javax.swing.JLabel;
13import javax.swing.JTable;
14import javax.swing.UIManager;
15import javax.swing.table.TableCellRenderer;
16
17import org.openstreetmap.josm.io.OsmApi;
18
19/**
20 * This is a {@see TableCellRenderer} for rendering the various fields of a
21 * {@see SaveLayerInfo} in the table {@see SaveLayersTable}.
22 *
23 *
24 */
25class SaveLayerInfoCellRenderer implements TableCellRenderer {
26 private JLabel lblRenderer;
27 private JCheckBox cbRenderer;
28
29 public SaveLayerInfoCellRenderer() {
30 lblRenderer = new JLabel();
31 cbRenderer = new JCheckBox();
32 }
33
34 protected Component prepareLayerNameRenderer(SaveLayerInfo info) {
35 lblRenderer.setIcon(info.getLayer().getIcon());
36 lblRenderer.setText(info.getName());
37 lblRenderer.setToolTipText(info.getLayer().getToolTipText());
38 return lblRenderer;
39 }
40
41 protected Component prepareUploadRequiredRenderer(SaveLayerInfo info) {
42 lblRenderer.setIcon(null);
43 lblRenderer.setHorizontalAlignment(JLabel.CENTER);
44 String text = info.getLayer().requiresUploadToServer() ? tr("Yes") : tr("No");
45 lblRenderer.setText(text);
46 if (info.getLayer().requiresUploadToServer()) {
47 lblRenderer.setToolTipText(tr("Layer ''{0}'' has modifications which should be uploaded to the server.", info.getName()));
48 } else {
49 lblRenderer.setToolTipText(tr("Layer ''{0}'' has no modifications to be uploaded.", info.getName()));
50 }
51 return lblRenderer;
52 }
53
54 protected Component prepareSaveToFileRequired(SaveLayerInfo info) {
55 lblRenderer.setIcon(null);
56 lblRenderer.setHorizontalAlignment(JLabel.CENTER);
57 String text = info.getLayer().requiresSaveToFile() ? tr("Yes") : tr("No");
58 lblRenderer.setText(text);
59 if (info.getLayer().requiresSaveToFile()) {
60 lblRenderer.setToolTipText(tr("Layer ''{0}'' has modifications which should be saved to its associated file ''{1}''.", info.getName(), info.getFile().toString()));
61 } else {
62 lblRenderer.setToolTipText(tr("Layer ''{0}'' has no modifications to be saved.", info.getName()));
63 }
64 return lblRenderer;
65 }
66
67 protected boolean canWrite(File f) {
68 if (f == null) return false;
69 if (f.isDirectory()) return false;
70 if (f.exists() && f.canWrite()) return true;
71 if (!f.exists() && f.getParentFile() != null && f.getParentFile().canWrite())
72 return true;
73 return false;
74 }
75
76 protected Component prepareFileNameRenderer(SaveLayerInfo info) {
77 lblRenderer.setIcon(null);
78 if (info.getFile() == null) {
79 if (!info.isDoSaveToFile()) {
80 lblRenderer.setText(tr("No file associated with this layer"));
81 } else {
82 lblRenderer.setBackground(new Color(255,197,197));
83 lblRenderer.setText(tr("Please select a file"));
84 }
85 lblRenderer.setFont(lblRenderer.getFont().deriveFont(Font.ITALIC));
86 lblRenderer.setToolTipText(tr("Layer ''{0}'' is not backed by a file", info.getName()));
87 } else {
88 String text = info.getFile().getName();
89 String parent = info.getFile().getParent();
90 if (parent != null) {
91 if (parent.length() <= 10) {
92 text = info.getFile().getPath();
93 } else {
94 text = parent.substring(0, 10) + "..." + File.separator + text;
95 }
96 }
97 lblRenderer.setText(text);
98 lblRenderer.setToolTipText(info.getFile().getAbsolutePath());
99 if (info.isDoSaveToFile() && !canWrite(info.getFile())) {
100 lblRenderer.setBackground(new Color(255,197,197));
101 lblRenderer.setToolTipText(tr("File ''{0}'' is not writable. Please enter another file name.", info.getFile().getPath()));
102 }
103 }
104 return lblRenderer;
105 }
106
107 protected Component prepareUploadRenderer(SaveLayerInfo info){
108 cbRenderer.setSelected(info.isDoUploadToServer());
109 lblRenderer.setToolTipText(tr("Select to upload layer ''{0}'' to the server ''{1}''", info.getName(), OsmApi.getOsmApi().getBaseUrl()));
110 return cbRenderer;
111 }
112
113 protected Component prepareSaveToFileRenderer(SaveLayerInfo info){
114 cbRenderer.setSelected(info.isDoSaveToFile());
115 lblRenderer.setToolTipText(tr("Select to upload layer ''{0}'' to the server ''{1}''", info.getName(), OsmApi.getOsmApi().getBaseUrl()));
116 return cbRenderer;
117 }
118
119 protected void resetRenderers() {
120 lblRenderer.setOpaque(true);
121 lblRenderer.setBackground(UIManager.getColor("Table.background"));
122 lblRenderer.setIcon(null);
123 lblRenderer.setText("");
124 lblRenderer.setFont(UIManager.getFont("Table.font"));
125 lblRenderer.setHorizontalAlignment(JLabel.LEFT);
126
127 cbRenderer.setSelected(false);
128 cbRenderer.setOpaque(true);
129 cbRenderer.setBackground(UIManager.getColor("Table.background"));
130 }
131
132 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
133 boolean hasFocus, int row, int column) {
134
135 resetRenderers();
136 if (value == null)
137 return null;
138
139 SaveLayerInfo info = (SaveLayerInfo)value;
140 switch(column) {
141 case 0: return prepareLayerNameRenderer(info);
142 case 1: return prepareUploadRequiredRenderer(info);
143 case 2: return prepareSaveToFileRequired(info);
144 case 3: return prepareFileNameRenderer(info);
145 case 4: return prepareUploadRenderer(info);
146 case 5: return prepareSaveToFileRenderer(info);
147 }
148 return null;
149 }
150}
Note: See TracBrowser for help on using the repository browser.