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