Ticket #11413: josm_patch_advanced_info.diff
| File josm_patch_advanced_info.diff, 4.1 KB (added by , 11 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java
6 6 7 7 import java.awt.Dimension; 8 8 import java.awt.GridBagLayout; 9 import java.util.ArrayList; 10 import java.util.Collection; 11 import java.util.Collections; 12 import java.util.List; 9 import java.util.*; 13 10 import java.util.Map.Entry; 14 11 15 12 import javax.swing.JPanel; … … 63 60 protected transient OsmDataLayer layer; 64 61 private JosmTextArea txtMappaint; 65 62 private boolean mappaintTabLoaded; 63 private boolean editcountTabLoaded; 66 64 65 private static final String NL = "\n"; 66 67 67 public InspectPrimitiveDialog(Collection<OsmPrimitive> primitives, OsmDataLayer layer) { 68 68 super(Main.parent, tr("Advanced object info"), new String[] {tr("Close")}); 69 69 this.primitives = new ArrayList<>(primitives); … … 73 73 74 74 setButtonIcons(new String[]{"ok.png"}); 75 75 final JTabbedPane tabs = new JTabbedPane(); 76 76 77 JPanel pData = buildDataPanel(); 77 78 tabs.addTab(tr("data"), pData); 79 78 80 final JPanel pMapPaint = new JPanel(); 79 81 tabs.addTab(tr("map style"), pMapPaint); 80 82 tabs.getModel().addChangeListener(new ChangeListener() { … … 88 90 } 89 91 } 90 92 }); 93 94 final JPanel pEditCounts = new JPanel(); 95 tabs.addTab(tr("edit counts"), pEditCounts); 96 tabs.getModel().addChangeListener(new ChangeListener() { 97 98 @Override 99 public void stateChanged(ChangeEvent e) { 100 if (!editcountTabLoaded && ((SingleSelectionModel) e.getSource()).getSelectedIndex() == 2) { 101 editcountTabLoaded = true; 102 genericMonospacePanel(pEditCounts, buildListOfEditorsText()); 103 } 104 } 105 }); 106 91 107 setContent(tabs, false); 92 108 } 93 109 110 /* editor count tab */ 111 protected void genericMonospacePanel(JPanel p, String s) { 112 p.setLayout(new GridBagLayout()); 113 JosmTextArea jte = new JosmTextArea(); 114 jte.setFont(GuiHelper.getMonospacedFont(jte)); 115 jte.setEditable(false); 116 jte.append(s); 117 p.add(new JScrollPane(jte), GBC.std().fill()); 118 } 119 120 /* Future Ideas: 121 Calculate the most recent edit date from o.getTimestamp(). 122 Sort by the count for presentation, so the most active editors are on top. 123 Count only tagged nodes (so empty way nodes don't inflate counts). 124 */ 125 protected String buildListOfEditorsText() { 126 StringBuilder s = new StringBuilder(); 127 Map<String, Integer> sm = new TreeMap<>(); 128 Integer oldCount; 129 130 131 // Count who edited each selected object 132 for (OsmPrimitive o : primitives) { 133 if (o.getUser() != null) { 134 String username = o.getUser().getName(); 135 oldCount = sm.get(username); 136 if (oldCount == null) 137 sm.put(username, 1); 138 else 139 sm.put(username, oldCount + 1); 140 } 141 } 142 143 // Print the count in sorted order 144 s.append(tr("{0} unique users last edited these features:", sm.size())); 145 s.append(NL); 146 for(Map.Entry<String,Integer> entry : sm.entrySet()) { 147 String username = entry.getKey(); 148 Integer edit_count = entry.getValue(); 149 s.append(username); 150 s.append(' '); 151 s.append(edit_count); 152 s.append(NL); 153 } 154 return s.toString(); 155 } 156 157 158 /* data tab */ 94 159 protected JPanel buildDataPanel() { 95 160 JPanel p = new JPanel(new GridBagLayout()); 96 161 JosmTextArea txtData = new JosmTextArea(); … … 321 386 } 322 387 } 323 388 389 /* map paint tab */ 324 390 protected void buildMapPaintPanel(JPanel p) { 325 391 p.setLayout(new GridBagLayout()); 326 392 txtMappaint = new JosmTextArea();
