Ticket #11413: josm_patch_advanced_info.diff

File josm_patch_advanced_info.diff, 4.1 KB (added by brycenesbitt, 9 years ago)

Add tab to "Advanced Info" panel

  • src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDialog.java

     
    66
    77import java.awt.Dimension;
    88import java.awt.GridBagLayout;
    9 import java.util.ArrayList;
    10 import java.util.Collection;
    11 import java.util.Collections;
    12 import java.util.List;
     9import java.util.*;
    1310import java.util.Map.Entry;
    1411
    1512import javax.swing.JPanel;
     
    6360    protected transient OsmDataLayer layer;
    6461    private JosmTextArea txtMappaint;
    6562    private boolean mappaintTabLoaded;
     63    private boolean editcountTabLoaded;
    6664
     65    private static final String NL = "\n";
     66
    6767    public InspectPrimitiveDialog(Collection<OsmPrimitive> primitives, OsmDataLayer layer) {
    6868        super(Main.parent, tr("Advanced object info"), new String[] {tr("Close")});
    6969        this.primitives = new ArrayList<>(primitives);
     
    7373
    7474        setButtonIcons(new String[]{"ok.png"});
    7575        final JTabbedPane tabs = new JTabbedPane();
     76
    7677        JPanel pData = buildDataPanel();
    7778        tabs.addTab(tr("data"), pData);
     79
    7880        final JPanel pMapPaint = new JPanel();
    7981        tabs.addTab(tr("map style"), pMapPaint);
    8082        tabs.getModel().addChangeListener(new ChangeListener() {
     
    8890                }
    8991            }
    9092        });
     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
    91107        setContent(tabs, false);
    92108    }
    93109
     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 */
    94159    protected JPanel buildDataPanel() {
    95160        JPanel p = new JPanel(new GridBagLayout());
    96161        JosmTextArea txtData = new JosmTextArea();
     
    321386        }
    322387    }
    323388
     389    /* map paint tab */
    324390    protected void buildMapPaintPanel(JPanel p) {
    325391        p.setLayout(new GridBagLayout());
    326392        txtMappaint = new JosmTextArea();