Changeset 4408 in josm


Ignore:
Timestamp:
Sep 8, 2011 12:08:02 AM (21 months 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.