// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.io; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagLayout; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.DefaultTableColumnModel; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import org.openstreetmap.josm.tools.GBC; import org.openstreetmap.josm.tools.Utils; class SaveLayersTableColumnModel extends DefaultTableColumnModel { /** small renderer class that handles the "should be uploaded/saved" texts. */ private static class RecommendedActionsTableCell implements TableCellRenderer { private final JPanel pnlEmpty = new JPanel(); private final JLabel needsUpload = new JLabel(tr("should be uploaded")); private final JLabel needsSave = new JLabel(tr("should be saved")); private static final GBC defaultCellStyle = GBC.eol().fill(GBC.HORIZONTAL).insets(2, 0, 2, 0); /** * Constructs a new {@code RecommendedActionsTableCell}. */ RecommendedActionsTableCell() { pnlEmpty.setPreferredSize(new Dimension(1, 19)); needsUpload.setPreferredSize(new Dimension(needsUpload.getPreferredSize().width, 19)); needsSave.setPreferredSize(new Dimension(needsSave.getPreferredSize().width, 19)); } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JPanel panel = new JPanel(new GridBagLayout()); SaveLayerInfo info = (SaveLayerInfo) value; StringBuilder sb = new StringBuilder(24); sb.append("<html>"); if (info != null) { String htmlInfoName = Utils.escapeReservedCharactersHTML(info.getName()); if (info.getLayer().requiresUploadToServer() && !info.getLayer().isUploadDiscouraged()) { panel.add(needsUpload, defaultCellStyle); sb.append(tr("Layer ''{0}'' has modifications which should be uploaded to the server.", htmlInfoName)); } else { if (info.isUploadable()) { panel.add(pnlEmpty, defaultCellStyle); } if (info.getLayer().requiresUploadToServer()) { sb.append(tr("Layer ''{0}'' has modifications which are discouraged to be uploaded.", htmlInfoName)); } else { sb.append(tr("Layer ''{0}'' has no modifications to be uploaded.", htmlInfoName)); } } sb.append("<br/>"); if (info.getLayer().requiresSaveToFile()) { panel.add(needsSave, defaultCellStyle); sb.append(tr("Layer ''{0}'' has modifications which should be saved to its associated file ''{1}''.", htmlInfoName, info.getFile().toString())); } else { if (info.isSavable()) { panel.add(pnlEmpty, defaultCellStyle); } sb.append(tr("Layer ''{0}'' has no modifications to be saved.", htmlInfoName)); } } sb.append("</html>"); panel.setToolTipText(sb.toString()); return panel; } } /** * Constructs a new {@code SaveLayersTableColumnModel}. */ SaveLayersTableColumnModel() { build(); } protected void build() { // column 0 - layer name, save path editor LayerNameAndFilePathTableCell lnfpRenderer = new LayerNameAndFilePathTableCell(); LayerNameAndFilePathTableCell lnfpEditor = new LayerNameAndFilePathTableCell(); TableColumn col = new TableColumn(0); // keep in sync with SaveLayersModel#columnFilename col.setHeaderValue(tr("Layer Name and File Path")); col.setResizable(true); col.setCellRenderer(lnfpRenderer); col.setCellEditor(lnfpEditor); col.setPreferredWidth(324); addColumn(col); // column 1 - actions required col = new TableColumn(1); col.setHeaderValue(tr("Recommended Actions")); col.setResizable(true); col.setCellRenderer(new RecommendedActionsTableCell()); col.setPreferredWidth(150); addColumn(col); // column 2- actions to take ActionFlagsTableCell aftc = new ActionFlagsTableCell(); col = new TableColumn(2); // keep in sync with SaveLayersModel#columnActions col.setHeaderValue(tr("Actions To Take")); col.setResizable(true); col.setCellRenderer(aftc); col.setCellEditor(aftc); col.setPreferredWidth(100); addColumn(col); } }