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 }