Ticket #23482: 23482-auto-adjust.patch

File 23482-auto-adjust.patch, 6.6 KB (added by GerdP, 3 months ago)

compute minimun column based on the data

  • src/org/openstreetmap/josm/gui/history/HistoryBrowser.java

     
    1111import javax.swing.JScrollPane;
    1212import javax.swing.JSplitPane;
    1313import javax.swing.JTabbedPane;
     14import javax.swing.event.ChangeEvent;
     15import javax.swing.event.ChangeListener;
    1416
    1517import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1618import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     
    2224 *
    2325 * @since 1709
    2426 */
    25 public class HistoryBrowser extends JPanel implements Destroyable {
     27public class HistoryBrowser extends JPanel implements Destroyable, ChangeListener {
    2628
    2729    /** the model */
    2830    private transient HistoryBrowserModel model;
     
    115117    public void populate(History history) {
    116118        boolean samePrimitive = model.isSamePrimitive(history); // needs to be before setHistory
    117119        model.setHistory(history);
     120        model.addChangeListener(this);
    118121        if (samePrimitive) {
    119122            // no need to rebuild the UI
    120123            return;
     
    159162    public void destroy() {
    160163        if (model != null) {
    161164            model.unlinkAsListener();
     165            model.removeChangeListener(this);
    162166            model = null;
    163167        }
    164168        Stream.of(tagInfoViewer, nodeListViewer, relationMemberListViewer, coordinateInfoViewer)
     
    168172        relationMemberListViewer = null;
    169173        coordinateInfoViewer = null;
    170174    }
     175
     176    @Override
     177    public void stateChanged(ChangeEvent e) {
     178        tagInfoViewer.adjustWidths();
     179    }
    171180}
  • src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java

     
    147147            HistoryBrowserDialog dialog = new HistoryBrowserDialog(h);
    148148            placeOnScreen(dialog);
    149149            dialog.setVisible(true);
     150            dialog.setHistory(h); // we have to do this again to trigger a ChangeEvent
    150151            dialogs.put(h.getId(), dialog);
    151152        }
    152153    }
  • src/org/openstreetmap/josm/gui/history/TagInfoViewer.java

     
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.gui.history;
    33
     4import java.awt.Component;
    45import java.awt.event.FocusEvent;
    56import java.awt.event.FocusListener;
    67import java.util.Collection;
     
    1213import javax.swing.JPopupMenu;
    1314import javax.swing.JTable;
    1415import javax.swing.ListSelectionModel;
     16import javax.swing.table.TableCellRenderer;
     17import javax.swing.table.TableColumn;
    1518
    1619import org.openstreetmap.josm.actions.RestorePropertyAction;
    1720import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    3538 * @since 1709
    3639 */
    3740public class TagInfoViewer extends HistoryViewerPanel {
     41    private JTable reference;
     42    private JTable current;
    3843    private static final class RepaintOnFocusChange implements FocusListener {
    3944        @Override
    4045        public void focusLost(FocusEvent e) {
     
    6267
    6368    @Override
    6469    protected JTable buildReferenceTable() {
    65         return buildTable(PointInTimeType.REFERENCE_POINT_IN_TIME);
     70        reference = buildTable(PointInTimeType.REFERENCE_POINT_IN_TIME);
     71        return reference;
    6672    }
    6773
    6874    @Override
    6975    protected JTable buildCurrentTable() {
    70         return buildTable(PointInTimeType.CURRENT_POINT_IN_TIME);
     76        current = buildTable(PointInTimeType.CURRENT_POINT_IN_TIME);
     77        return current;
    7178    }
    7279
    7380    private JTable buildTable(PointInTimeType pointInTime) {
     
    105112        table.addMouseListener(new PopupMenuLauncher(tagMenu));
    106113        return table;
    107114    }
     115
     116    /**
     117     * Use current data to adjust preferredWidth for both tables
     118     */
     119    public void adjustWidths() {
     120        adjustWidths(reference);
     121        adjustWidths(current);
     122    }
     123
     124    private void adjustWidths(JTable table) {
     125        int maxWidth = this.getWidth() / 4;
     126        if (maxWidth == 0)
     127            maxWidth = Integer.MAX_VALUE;
     128        for (int column = 0; column < table.getColumnCount(); column++) {
     129            TableColumn tableColumn = table.getColumnModel().getColumn(column);
     130            int preferredWidth = tableColumn.getMinWidth();
     131            for (int row = 0; row < table.getRowCount(); row++) {
     132                TableCellRenderer cellRenderer = table.getCellRenderer(row, column);
     133                Component c = table.prepareRenderer(cellRenderer, row, column);
     134                int width = c.getPreferredSize().width + table.getIntercellSpacing().width;
     135                preferredWidth = Math.max(preferredWidth, width);
     136                if (preferredWidth >= maxWidth) {
     137                    //  We've exceeded the maximum width, no need to check other rows
     138                    preferredWidth = maxWidth;
     139                    break;
     140                }
     141            }
     142            TableCellRenderer renderer = tableColumn.getHeaderRenderer();
     143            if (renderer == null)
     144                renderer = table.getTableHeader().getDefaultRenderer();
     145            Component h = renderer.getTableCellRendererComponent(table, tableColumn.getHeaderValue(), false, false, -1, column);
     146            int headerWidth = h.getPreferredSize().width;
     147            if (headerWidth > preferredWidth)
     148                preferredWidth = headerWidth;
     149            tableColumn.setPreferredWidth(preferredWidth);
     150        }
     151    }
     152
    108153}
  • src/org/openstreetmap/josm/gui/history/TagTableColumnModel.java

     
    33
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import javax.swing.JLabel;
    67import javax.swing.table.DefaultTableColumnModel;
    78import javax.swing.table.TableColumn;
    89
     
    4142        col.setHeaderValue(tr("Since"));
    4243        col.setCellRenderer(renderer);
    4344        col.setPreferredWidth(10);
     45        col.setMaxWidth(new JLabel("v" + Long.MAX_VALUE).getMinimumSize().width);
    4446        addColumn(col);
    4547    }
    4648}