001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.gui.io;
003
004 import static org.openstreetmap.josm.tools.I18n.tr;
005
006 import java.awt.Component;
007 import java.awt.Dimension;
008 import java.awt.GridBagLayout;
009
010 import javax.swing.JLabel;
011 import javax.swing.JPanel;
012 import javax.swing.JTable;
013 import javax.swing.table.DefaultTableColumnModel;
014 import javax.swing.table.TableCellRenderer;
015 import javax.swing.table.TableColumn;
016
017 import org.openstreetmap.josm.tools.GBC;
018
019 class SaveLayersTableColumnModel extends DefaultTableColumnModel {
020 /** small renderer class that handles the "should be uploaded/saved" texts. */
021 private static class RecommendedActionsTableCell implements TableCellRenderer {
022 private final JPanel pnlEmpty = new JPanel();
023 private final JLabel needsUpload = new JLabel(tr("should be uploaded"));
024 private final JLabel needsSave = new JLabel(tr("should be saved"));
025 private final static GBC defaultCellStyle = GBC.eol().fill(GBC.HORIZONTAL).insets(2, 0, 2, 0);
026
027 public RecommendedActionsTableCell() {
028 pnlEmpty.setPreferredSize(new Dimension(1, 19));
029 needsUpload.setPreferredSize(new Dimension(needsUpload.getPreferredSize().width, 19));
030 needsSave.setPreferredSize(new Dimension(needsSave.getPreferredSize().width, 19));
031 }
032
033 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
034 boolean hasFocus, int row, int column) {
035 JPanel panel = new JPanel(new GridBagLayout());
036 SaveLayerInfo info = (SaveLayerInfo)value;
037 StringBuilder sb = new StringBuilder();
038 sb.append("<html>");
039 if (info.getLayer().requiresUploadToServer() && !info.getLayer().isUploadDiscouraged()) {
040 panel.add(needsUpload, defaultCellStyle);
041 sb.append(tr("Layer ''{0}'' has modifications which should be uploaded to the server.", info.getName()));
042
043 } else {
044 panel.add(pnlEmpty, defaultCellStyle);
045 if (info.getLayer().requiresUploadToServer()) {
046 sb.append(tr("Layer ''{0}'' has modifications which are discouraged to be uploaded.", info.getName()));
047 } else {
048 sb.append(tr("Layer ''{0}'' has no modifications to be uploaded.", info.getName()));
049 }
050 }
051 sb.append("<br/>");
052
053 if (info.getLayer().requiresSaveToFile()) {
054 panel.add(needsSave, defaultCellStyle);
055 sb.append(tr("Layer ''{0}'' has modifications which should be saved to its associated file ''{1}''.", info.getName(), info.getFile().toString()));
056 } else {
057 panel.add(pnlEmpty, defaultCellStyle);
058 sb.append(tr("Layer ''{0}'' has no modifications to be saved.", info.getName()));
059 }
060 sb.append("</html>");
061 panel.setToolTipText(sb.toString());
062 return panel;
063 }
064 }
065
066 protected void build() {
067 TableColumn col = null;
068
069 // column 0 - layer name, save path editor
070 LayerNameAndFilePathTableCell lnafptc = new LayerNameAndFilePathTableCell();
071 col = new TableColumn(0); // keep in sync with SaveLayersModel#columnFilename
072 col.setHeaderValue(tr("Layer Name and File Path"));
073 col.setResizable(true);
074 col.setCellRenderer(lnafptc);
075 col.setCellEditor(lnafptc);
076 col.setPreferredWidth(324);
077 addColumn(col);
078
079 // column 1 - actions required
080 col = new TableColumn(1);
081 col.setHeaderValue(tr("Recommended Actions"));
082 col.setResizable(true);
083 col.setCellRenderer(new RecommendedActionsTableCell());
084 col.setPreferredWidth(150);
085 addColumn(col);
086
087 // column 2- actions to take
088 ActionFlagsTableCell aftc = new ActionFlagsTableCell();
089 col = new TableColumn(2); // keep in sync with SaveLayersModel#columnActions
090 col.setHeaderValue(tr("Actions To Take"));
091 col.setResizable(true);
092 col.setCellRenderer(aftc);
093 col.setCellEditor(aftc);
094 col.setPreferredWidth(100);
095
096 addColumn(col);
097 }
098
099 public SaveLayersTableColumnModel() {
100 build();
101 }
102 }