// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.io; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.io.File; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.table.TableCellRenderer; import org.openstreetmap.josm.io.OsmApi; /** * This is a {@see TableCellRenderer} for rendering the various fields of a * {@see SaveLayerInfo} in the table {@see SaveLayersTable}. * * */ class SaveLayerInfoCellRenderer implements TableCellRenderer { private JLabel lblRenderer; private JCheckBox cbRenderer; public SaveLayerInfoCellRenderer() { lblRenderer = new JLabel(); cbRenderer = new JCheckBox(); } protected Component prepareLayerNameRenderer(SaveLayerInfo info) { lblRenderer.setIcon(info.getLayer().getIcon()); lblRenderer.setText(info.getName()); lblRenderer.setToolTipText(info.getLayer().getToolTipText()); return lblRenderer; } protected Component prepareUploadRequiredRenderer(SaveLayerInfo info) { lblRenderer.setIcon(null); lblRenderer.setHorizontalAlignment(JLabel.CENTER); String text = info.getLayer().requiresUploadToServer() ? tr("Yes") : tr("No"); lblRenderer.setText(text); if (info.getLayer().requiresUploadToServer()) { lblRenderer.setToolTipText(tr("Layer ''{0}'' has modifications which should be uploaded to the server.", info.getName())); } else { lblRenderer.setToolTipText(tr("Layer ''{0}'' has no modifications to be uploaded.", info.getName())); } return lblRenderer; } protected Component prepareSaveToFileRequired(SaveLayerInfo info) { lblRenderer.setIcon(null); lblRenderer.setHorizontalAlignment(JLabel.CENTER); String text = info.getLayer().requiresSaveToFile() ? tr("Yes") : tr("No"); lblRenderer.setText(text); if (info.getLayer().requiresSaveToFile()) { lblRenderer.setToolTipText(tr("Layer ''{0}'' has modifications which should be saved to its associated file ''{1}''.", info.getName(), info.getFile().toString())); } else { lblRenderer.setToolTipText(tr("Layer ''{0}'' has no modifications to be saved.", info.getName())); } return lblRenderer; } protected boolean canWrite(File f) { if (f == null) return false; if (f.isDirectory()) return false; if (f.exists() && f.canWrite()) return true; if (!f.exists() && f.getParentFile() != null && f.getParentFile().canWrite()) return true; return false; } protected Component prepareFileNameRenderer(SaveLayerInfo info) { lblRenderer.setIcon(null); if (info.getFile() == null) { if (!info.isDoSaveToFile()) { lblRenderer.setText(tr("No file associated with this layer")); } else { lblRenderer.setBackground(new Color(255,197,197)); lblRenderer.setText(tr("Please select a file")); } lblRenderer.setFont(lblRenderer.getFont().deriveFont(Font.ITALIC)); lblRenderer.setToolTipText(tr("Layer ''{0}'' is not backed by a file", info.getName())); } else { String text = info.getFile().getName(); String parent = info.getFile().getParent(); if (parent != null) { if (parent.length() <= 10) { text = info.getFile().getPath(); } else { text = parent.substring(0, 10) + "..." + File.separator + text; } } lblRenderer.setText(text); lblRenderer.setToolTipText(info.getFile().getAbsolutePath()); if (info.isDoSaveToFile() && !canWrite(info.getFile())) { lblRenderer.setBackground(new Color(255,197,197)); lblRenderer.setToolTipText(tr("File ''{0}'' is not writable. Please enter another file name.", info.getFile().getPath())); } } return lblRenderer; } protected Component prepareUploadRenderer(SaveLayerInfo info){ cbRenderer.setSelected(info.isDoUploadToServer()); lblRenderer.setToolTipText(tr("Select to upload layer ''{0}'' to the server ''{1}''", info.getName(), OsmApi.getOsmApi().getBaseUrl())); return cbRenderer; } protected Component prepareSaveToFileRenderer(SaveLayerInfo info){ cbRenderer.setSelected(info.isDoSaveToFile()); lblRenderer.setToolTipText(tr("Select to upload layer ''{0}'' to the server ''{1}''", info.getName(), OsmApi.getOsmApi().getBaseUrl())); return cbRenderer; } protected void resetRenderers() { lblRenderer.setOpaque(true); lblRenderer.setBackground(UIManager.getColor("Table.background")); lblRenderer.setIcon(null); lblRenderer.setText(""); lblRenderer.setFont(UIManager.getFont("Table.font")); lblRenderer.setHorizontalAlignment(JLabel.LEFT); cbRenderer.setSelected(false); cbRenderer.setOpaque(true); cbRenderer.setBackground(UIManager.getColor("Table.background")); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { resetRenderers(); SaveLayerInfo info = (SaveLayerInfo)value; switch(column) { case 0: return prepareLayerNameRenderer(info); case 1: return prepareUploadRequiredRenderer(info); case 2: return prepareSaveToFileRequired(info); case 3: return prepareFileNameRenderer(info); case 4: return prepareUploadRenderer(info); case 5: return prepareSaveToFileRenderer(info); } return null; } }