Ticket #23482: 23482-auto-adjust.patch
File 23482-auto-adjust.patch, 6.6 KB (added by , 3 months ago) |
---|
-
src/org/openstreetmap/josm/gui/history/HistoryBrowser.java
11 11 import javax.swing.JScrollPane; 12 12 import javax.swing.JSplitPane; 13 13 import javax.swing.JTabbedPane; 14 import javax.swing.event.ChangeEvent; 15 import javax.swing.event.ChangeListener; 14 16 15 17 import org.openstreetmap.josm.data.osm.OsmPrimitive; 16 18 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; … … 22 24 * 23 25 * @since 1709 24 26 */ 25 public class HistoryBrowser extends JPanel implements Destroyable {27 public class HistoryBrowser extends JPanel implements Destroyable, ChangeListener { 26 28 27 29 /** the model */ 28 30 private transient HistoryBrowserModel model; … … 115 117 public void populate(History history) { 116 118 boolean samePrimitive = model.isSamePrimitive(history); // needs to be before setHistory 117 119 model.setHistory(history); 120 model.addChangeListener(this); 118 121 if (samePrimitive) { 119 122 // no need to rebuild the UI 120 123 return; … … 159 162 public void destroy() { 160 163 if (model != null) { 161 164 model.unlinkAsListener(); 165 model.removeChangeListener(this); 162 166 model = null; 163 167 } 164 168 Stream.of(tagInfoViewer, nodeListViewer, relationMemberListViewer, coordinateInfoViewer) … … 168 172 relationMemberListViewer = null; 169 173 coordinateInfoViewer = null; 170 174 } 175 176 @Override 177 public void stateChanged(ChangeEvent e) { 178 tagInfoViewer.adjustWidths(); 179 } 171 180 } -
src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
147 147 HistoryBrowserDialog dialog = new HistoryBrowserDialog(h); 148 148 placeOnScreen(dialog); 149 149 dialog.setVisible(true); 150 dialog.setHistory(h); // we have to do this again to trigger a ChangeEvent 150 151 dialogs.put(h.getId(), dialog); 151 152 } 152 153 } -
src/org/openstreetmap/josm/gui/history/TagInfoViewer.java
1 1 // License: GPL. For details, see LICENSE file. 2 2 package org.openstreetmap.josm.gui.history; 3 3 4 import java.awt.Component; 4 5 import java.awt.event.FocusEvent; 5 6 import java.awt.event.FocusListener; 6 7 import java.util.Collection; … … 12 13 import javax.swing.JPopupMenu; 13 14 import javax.swing.JTable; 14 15 import javax.swing.ListSelectionModel; 16 import javax.swing.table.TableCellRenderer; 17 import javax.swing.table.TableColumn; 15 18 16 19 import org.openstreetmap.josm.actions.RestorePropertyAction; 17 20 import org.openstreetmap.josm.data.osm.OsmPrimitive; … … 35 38 * @since 1709 36 39 */ 37 40 public class TagInfoViewer extends HistoryViewerPanel { 41 private JTable reference; 42 private JTable current; 38 43 private static final class RepaintOnFocusChange implements FocusListener { 39 44 @Override 40 45 public void focusLost(FocusEvent e) { … … 62 67 63 68 @Override 64 69 protected JTable buildReferenceTable() { 65 return buildTable(PointInTimeType.REFERENCE_POINT_IN_TIME); 70 reference = buildTable(PointInTimeType.REFERENCE_POINT_IN_TIME); 71 return reference; 66 72 } 67 73 68 74 @Override 69 75 protected JTable buildCurrentTable() { 70 return buildTable(PointInTimeType.CURRENT_POINT_IN_TIME); 76 current = buildTable(PointInTimeType.CURRENT_POINT_IN_TIME); 77 return current; 71 78 } 72 79 73 80 private JTable buildTable(PointInTimeType pointInTime) { … … 105 112 table.addMouseListener(new PopupMenuLauncher(tagMenu)); 106 113 return table; 107 114 } 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 108 153 } -
src/org/openstreetmap/josm/gui/history/TagTableColumnModel.java
3 3 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 import javax.swing.JLabel; 6 7 import javax.swing.table.DefaultTableColumnModel; 7 8 import javax.swing.table.TableColumn; 8 9 … … 41 42 col.setHeaderValue(tr("Since")); 42 43 col.setCellRenderer(renderer); 43 44 col.setPreferredWidth(10); 45 col.setMaxWidth(new JLabel("v" + Long.MAX_VALUE).getMinimumSize().width); 44 46 addColumn(col); 45 47 } 46 48 }