Changeset 4408 in josm


Ignore:
Timestamp:
2011-09-08T00:08:02+02:00 (10 years ago)
Author:
simon04
Message:

fix #6773 - shortcuts for History and Advanced info dialog

Location:
trunk/src/org/openstreetmap/josm
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java

    r4139 r4408  
    22package org.openstreetmap.josm.actions;
    33
    4 import static org.openstreetmap.josm.tools.I18n.tr;
    5 
     4import java.awt.event.ActionEvent;
    65import java.awt.event.KeyEvent;
     6import java.util.Collection;
    77
    88import org.openstreetmap.josm.Main;
     9import org.openstreetmap.josm.data.osm.DataSet;
    910import org.openstreetmap.josm.data.osm.OsmPrimitive;
    10 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     11import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager;
    1112import org.openstreetmap.josm.tools.Shortcut;
     13
     14import static org.openstreetmap.josm.tools.I18n.tr;
    1215import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    1316
    14 public class HistoryInfoAction extends AbstractInfoAction {
     17public class HistoryInfoAction extends JosmAction {
    1518
    16     public HistoryInfoAction() {
    17         super(tr("Object history"), "about",
    18                 tr("Display history information about OSM ways, nodes, or relations."),
    19                 Shortcut.registerShortcut("core:history",
    20                         tr("Object history"), KeyEvent.VK_H, Shortcut.GROUP_HOTKEY), false);
    21         putValue("help", ht("/Action/ObjectHistory"));
    22         putValue("toolbar", "action/historyinfo");
    23         Main.toolbar.register(this);
    24     }
     19        public HistoryInfoAction() {
     20                super(tr("History"), "about",
     21                                tr("Display history information about OSM ways, nodes, or relations."),
     22                                Shortcut.registerShortcut("core:historyinfo",
     23                                tr("History"), KeyEvent.VK_H, Shortcut.GROUP_HOTKEY), false);
     24                putValue("help", ht("/Action/ObjectHistory"));
     25                putValue("toolbar", "action/historyinfo");
     26                Main.toolbar.register(this);
     27        }
    2528
    26     @Override
    27     protected  String createInfoUrl(Object infoObject) {
    28         OsmPrimitive primitive = (OsmPrimitive)infoObject;
    29         return getBaseBrowseUrl() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.getId() + "/history";
    30     }
     29        @Override
     30        public void actionPerformed(ActionEvent ae) {
     31                DataSet set = getCurrentDataSet();
     32                if (set != null) {
     33                        HistoryBrowserDialogManager.getInstance().showHistory(set.getSelected());
     34                }
     35        }
     36
     37        @Override
     38        public void updateEnabledState() {
     39                if (getCurrentDataSet() == null) {
     40                        setEnabled(false);
     41                } else {
     42                        updateEnabledState(getCurrentDataSet().getSelected());
     43                }
     44        }
     45
     46        @Override
     47        protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
     48                setEnabled(!selection.isEmpty());
     49        }
    3150}
  • trunk/src/org/openstreetmap/josm/actions/InfoAction.java

    r4139 r4408  
    22package org.openstreetmap.josm.actions;
    33
     4import java.awt.event.ActionEvent;
    45import static org.openstreetmap.josm.tools.I18n.tr;
    56import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
     
    78import java.awt.event.KeyEvent;
    89
     10import java.util.Collection;
    911import org.openstreetmap.josm.Main;
     12import org.openstreetmap.josm.data.osm.DataSet;
    1013import org.openstreetmap.josm.data.osm.OsmPrimitive;
    11 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     14import org.openstreetmap.josm.gui.dialogs.InspectPrimitiveDialog;
    1215import org.openstreetmap.josm.tools.Shortcut;
    1316
    14 public class InfoAction extends AbstractInfoAction {
     17public class InfoAction extends JosmAction {
    1518
    1619    public InfoAction() {
    17         super(tr("Info about Element"), "about",
    18                 tr("Display object information about OSM nodes, ways, or relations."),
    19                 Shortcut.registerShortcut("core:information",
    20                         tr("Info about Element"), KeyEvent.VK_I, Shortcut.GROUP_HOTKEY), false);
     20        super(tr("Advanced info"), "about",
     21                tr("Display advanced object information about OSM nodes, ways, or relations."),
     22                Shortcut.registerShortcut("core:info",
     23                tr("Advanced info"), KeyEvent.VK_I, Shortcut.GROUP_HOTKEY), false);
    2124        putValue("help", ht("/Action/InfoAboutElements"));
    2225        putValue("toolbar", "action/info");
     
    2528
    2629    @Override
    27     protected  String createInfoUrl(Object infoObject) {
    28         OsmPrimitive primitive = (OsmPrimitive)infoObject;
    29         return getBaseBrowseUrl() + "/" + OsmPrimitiveType.from(primitive).getAPIName() + "/" + primitive.getId();
     30    public void actionPerformed(ActionEvent ae) {
     31        DataSet set = getCurrentDataSet();
     32                if (set != null) {
     33                        new InspectPrimitiveDialog(set.getSelected(), Main.map.mapView.getEditLayer()).showDialog();
     34                }
     35    }
     36
     37    @Override
     38    public void updateEnabledState() {
     39        if (getCurrentDataSet() == null) {
     40            setEnabled(false);
     41        } else {
     42            updateEnabledState(getCurrentDataSet().getSelected());
     43        }
     44    }
     45
     46    @Override
     47    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
     48        setEnabled(!selection.isEmpty());
    3049    }
    3150}
  • trunk/src/org/openstreetmap/josm/gui/MainMenu.java

    r4380 r4408  
    3939import org.openstreetmap.josm.actions.HelpAction;
    4040import org.openstreetmap.josm.actions.HistoryInfoAction;
     41import org.openstreetmap.josm.actions.HistoryInfoWebAction;
    4142import org.openstreetmap.josm.actions.InfoAction;
     43import org.openstreetmap.josm.actions.InfoWebAction;
    4244import org.openstreetmap.josm.actions.JoinAreasAction;
    4345import org.openstreetmap.josm.actions.JoinNodeWayAction;
     
    143145    public final JosmAction toggleGPXLines = new ToggleGPXLinesAction();
    144146    public final InfoAction info = new InfoAction();
     147    public final InfoWebAction infoweb = new InfoWebAction();
    145148    public final HistoryInfoAction historyinfo = new HistoryInfoAction();
     149    public final HistoryInfoWebAction historyinfoweb = new HistoryInfoWebAction();
    146150
    147151    /* Tools menu */
     
    317321        viewMenu.addSeparator();
    318322        add(viewMenu, info);
     323        add(viewMenu, infoweb);
    319324        add(viewMenu, historyinfo);
     325                add(viewMenu, historyinfoweb);
    320326
    321327        add(presetsMenu, presetSearchAction);
  • trunk/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java

    r4363 r4408  
    2222import javax.swing.JTable;
    2323import javax.swing.ListSelectionModel;
    24 import javax.swing.SwingUtilities;
    2524import javax.swing.event.ListSelectionEvent;
    2625import javax.swing.event.ListSelectionListener;
     
    3635import org.openstreetmap.josm.data.osm.OsmPrimitive;
    3736import org.openstreetmap.josm.data.osm.PrimitiveId;
    38 import org.openstreetmap.josm.data.osm.history.History;
    3937import org.openstreetmap.josm.data.osm.history.HistoryDataSet;
    4038import org.openstreetmap.josm.data.osm.history.HistoryDataSetListener;
     
    4442import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager;
    4543import org.openstreetmap.josm.gui.history.HistoryLoadTask;
    46 import org.openstreetmap.josm.tools.BugReportExceptionHandler;
    4744import org.openstreetmap.josm.tools.ImageProvider;
    4845import org.openstreetmap.josm.tools.Shortcut;
     
    290287            if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
    291288                int row = historyTable.rowAtPoint(e.getPoint());
    292                 new ShowHistoryAction().showHistory(Collections.singletonList(model.getPrimitive(row)));
     289                HistoryBrowserDialogManager.getInstance().showHistory(Collections.singletonList(model.getPrimitive(row)));
    293290            }
    294291        }
     
    306303        }
    307304
    308         protected List<OsmPrimitive> filterPrimitivesWithUnloadedHistory(Collection<OsmPrimitive> primitives) {
    309             ArrayList<OsmPrimitive> ret = new ArrayList<OsmPrimitive>(primitives.size());
    310             HistoryDataSet hds = HistoryDataSet.getInstance();
    311             for (OsmPrimitive p: primitives) {
    312                 if (hds.getHistory(p.getPrimitiveId()) == null) {
    313                     // reload if the history is not in the cache yet
    314                     ret.add(p);
    315                 } else if (!p.isNew() && hds.getHistory(p.getPrimitiveId()).getByVersion(p.getUniqueId()) == null) {
    316                     // reload if the history object of the selected object is not in the cache
    317                     // yet
    318                     ret.add(p);
    319                 }
    320             }
    321             return ret;
    322         }
    323 
    324         public void showHistory(final List<OsmPrimitive> primitives) {
    325             List<OsmPrimitive> toLoad = filterPrimitivesWithUnloadedHistory(primitives);
    326             if (!toLoad.isEmpty()) {
    327                 HistoryLoadTask task = new HistoryLoadTask();
    328                 task.add(primitives);
    329                 Main.worker.submit(task);
    330             }
    331 
    332             Runnable r = new Runnable() {
    333                 public void run() {
    334                     try {
    335                         for (OsmPrimitive p : primitives) {
    336                             History h = HistoryDataSet.getInstance().getHistory(p.getPrimitiveId());
    337                             if (h == null) {
    338                                 continue;
    339                             }
    340                             HistoryBrowserDialogManager.getInstance().show(h);
    341                         }
    342                     } catch (final Exception e) {
    343                         SwingUtilities.invokeLater(new Runnable() {
    344                             public void run() {
    345                                 BugReportExceptionHandler.handleException(e);
    346                             }
    347                         });
    348                     }
    349 
    350                 }
    351             };
    352             Main.worker.submit(r);
    353         }
    354 
    355305        public void actionPerformed(ActionEvent e) {
    356306            int [] rows = historyTable.getSelectedRows();
    357307            if (rows == null || rows.length == 0) return;
    358             showHistory(model.getPrimitives(rows));
     308            HistoryBrowserDialogManager.getInstance().showHistory(model.getPrimitives(rows));
    359309        }
    360310
  • trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java

    r4357 r4408  
    1717import java.util.Collections;
    1818import java.util.Comparator;
    19 import java.util.HashMap;
    2019import java.util.HashSet;
    2120import java.util.LinkedList;
     
    2625import javax.swing.AbstractListModel;
    2726import javax.swing.DefaultListSelectionModel;
    28 import javax.swing.JButton;
    2927import javax.swing.JList;
    3028import javax.swing.JMenuItem;
     
    8886    private EditRelationSelection actEditRelationSelection;
    8987    private DownloadSelectedIncompleteMembersAction actDownloadSelectedIncompleteMembers;
    90     private InspectAction actInspect;
    9188
    9289    /**
     
    147144        actDownloadSelectedIncompleteMembers = new DownloadSelectedIncompleteMembersAction();
    148145        lstPrimitives.getSelectionModel().addListSelectionListener(actDownloadSelectedIncompleteMembers);
    149 
    150         actInspect = new InspectAction();
    151         lstPrimitives.getSelectionModel().addListSelectionListener(actInspect);
    152146
    153147        lstPrimitives.addMouseListener(new SelectionPopupMenuLauncher());
     
    221215            addSeparator();
    222216            add(actDownloadSelectedIncompleteMembers);
    223             addSeparator();
    224             add(actInspect);
    225217        }
    226218    }
     
    851843    }
    852844
    853     class InspectAction extends AbstractAction implements ListSelectionListener {
    854         public InspectAction() {
    855             putValue(SHORT_DESCRIPTION, tr("Get detailed information on the internal state of the objects."));
    856             putValue(NAME, tr("Inspect"));
    857             updateEnabledState();
    858         }
    859 
    860         public void actionPerformed(ActionEvent e) {
    861             Collection<OsmPrimitive> sel = model.getSelected();
    862             if (sel.isEmpty()) return;
    863             InspectPrimitiveDialog inspectDialog = new InspectPrimitiveDialog(sel, Main.map.mapView.getEditLayer());
    864             inspectDialog.showDialog();
    865         }
    866 
    867         public void updateEnabledState() {
    868             setEnabled(!model.getSelected().isEmpty());
    869         }
    870 
    871         public void valueChanged(ListSelectionEvent e) {
    872             updateEnabledState();
    873         }
    874     }
    875 
    876845    /** Quicker comparator, comparing just by type and ID's */
    877846    static private class OsmPrimitiveQuickComparator implements Comparator<OsmPrimitive> {
  • trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java

    r3083 r4408  
    11// License: GPL. For details, see LICENSE file.
    22package org.openstreetmap.josm.gui.history;
     3
     4import static org.openstreetmap.josm.tools.I18n.tr;
    35
    46import java.awt.Dimension;
    57import java.awt.Point;
    68import java.util.ArrayList;
     9import java.util.Collection;
    710import java.util.HashMap;
    811import java.util.Map;
     12import javax.swing.JOptionPane;
     13import javax.swing.SwingUtilities;
    914
    1015import org.openstreetmap.josm.Main;
     16import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1117import org.openstreetmap.josm.data.osm.history.History;
     18import org.openstreetmap.josm.data.osm.history.HistoryDataSet;
    1219import org.openstreetmap.josm.gui.MapView;
    1320import org.openstreetmap.josm.gui.layer.Layer;
     21import org.openstreetmap.josm.tools.BugReportExceptionHandler;
     22import org.openstreetmap.josm.tools.Predicate;
     23import org.openstreetmap.josm.tools.Utils;
    1424import org.openstreetmap.josm.tools.WindowGeometry;
    1525
     
    123133        }
    124134    }
     135
     136        public void showHistory(final Collection<OsmPrimitive> primitives) {
     137                final Collection<OsmPrimitive> notNewPrimitives = Utils.filter(primitives, notNewPredicate);
     138                if (notNewPrimitives.isEmpty()) {
     139                        JOptionPane.showMessageDialog(
     140                                        Main.parent,
     141                                        tr("Please select at least one already uploaded node, way, or relation."),
     142                                        tr("Warning"),
     143                                        JOptionPane.WARNING_MESSAGE);
     144                        return;
     145                }
     146                Collection<OsmPrimitive> toLoad = Utils.filter(primitives, unloadedHistoryPredicate);
     147                if (!toLoad.isEmpty()) {
     148                        HistoryLoadTask task = new HistoryLoadTask();
     149                        task.add(notNewPrimitives);
     150                        Main.worker.submit(task);
     151                }
     152
     153                Runnable r = new Runnable() {
     154
     155                        @Override
     156                        public void run() {
     157                                try {
     158                                        for (OsmPrimitive p : notNewPrimitives) {
     159                                                History h = HistoryDataSet.getInstance().getHistory(p.getPrimitiveId());
     160                                                if (h == null) {
     161                                                        continue;
     162                                                }
     163                                                show(h);
     164                                        }
     165                                } catch (final Exception e) {
     166                                        SwingUtilities.invokeLater(new Runnable() {
     167
     168                                                @Override
     169                                                public void run() {
     170                                                        BugReportExceptionHandler.handleException(e);
     171                                                }
     172                                        });
     173                                }
     174
     175                        }
     176                };
     177                Main.worker.submit(r);
     178        }
     179
     180        private final Predicate<OsmPrimitive> unloadedHistoryPredicate = new Predicate<OsmPrimitive>() {
     181
     182                HistoryDataSet hds = HistoryDataSet.getInstance();
     183
     184                @Override
     185                public boolean evaluate(OsmPrimitive p) {
     186                        if (hds.getHistory(p.getPrimitiveId()) == null) {
     187                                // reload if the history is not in the cache yet
     188                                return true;
     189                        } else if (!p.isNew() && hds.getHistory(p.getPrimitiveId()).getByVersion(p.getUniqueId()) == null) {
     190                                // reload if the history object of the selected object is not in the cache yet
     191                                return true;
     192                        } else {
     193                                return false;
     194                        }
     195                }
     196        };
     197
     198        private final Predicate<OsmPrimitive> notNewPredicate = new Predicate<OsmPrimitive>() {
     199
     200                @Override
     201                public boolean evaluate(OsmPrimitive p) {
     202                        return !p.isNew();
     203                }
     204        };
     205
    125206}
  • trunk/src/org/openstreetmap/josm/tools/Utils.java

    r4403 r4408  
    5858        return null;
    5959    }
     60
     61        public static <T> Collection<T> filter(Collection<? extends T> collection, Predicate<? super T> predicate) {
     62                return new FilteredCollection<T>(collection, predicate);
     63        }
    6064   
    6165    /**
Note: See TracChangeset for help on using the changeset viewer.