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    }