Ignore:
Timestamp:
2013-04-02T00:55:56+02:00 (11 years ago)
Author:
Don-vip
Message:

see #7846 - Large code refactorization in management of popup menus to simplify interactions with plugins (needed at least for imagery-xml-bounds and tag2link plugins)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java

    r5806 r5821  
    2424import javax.swing.AbstractAction;
    2525import javax.swing.AbstractListModel;
    26 import javax.swing.Action;
    2726import javax.swing.DefaultListSelectionModel;
    2827import javax.swing.JList;
     
    3534import javax.swing.event.ListSelectionEvent;
    3635import javax.swing.event.ListSelectionListener;
    37 import javax.swing.event.PopupMenuListener;
    3836
    3937import org.openstreetmap.josm.Main;
     
    6765import org.openstreetmap.josm.gui.MapView.EditLayerChangeListener;
    6866import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
     67import org.openstreetmap.josm.gui.PopupMenuHandler;
    6968import org.openstreetmap.josm.gui.SideButton;
    7069import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     
    9291    private DownloadSelectedIncompleteMembersAction actDownloadSelectedIncompleteMembers;
    9392
    94     private SelectionPopup popupMenu;
     93    /** the popup menu and its handler */
     94    private final ListPopupMenu popupMenu;
     95    private final PopupMenuHandler popupMenuHandler;
    9596
    9697    /**
     
    148149        actDownloadSelectedIncompleteMembers = new DownloadSelectedIncompleteMembersAction();
    149150
     151        popupMenu = new ListPopupMenu(lstPrimitives);
     152        popupMenuHandler = setupPopupMenuHandler();
     153
    150154        lstPrimitives.addListSelectionListener(new ListSelectionListener() {
    151155            @Override
    152156            public void valueChanged(ListSelectionEvent e) {
    153157                actZoomToListSelection.valueChanged(e);
    154                 List<Relation> rels;
    155                 rels = model.getSelectedRelationsWithIncompleteMembers();
    156                 actDownloadSelectedIncompleteMembers.setRelations(rels);
    157                 rels = OsmPrimitive.getFilteredList(model.getSelected(), Relation.class);
    158                 actSetRelationSelection.setRelations(rels);
    159                 actEditRelationSelection.setRelations(rels);
     158                popupMenuHandler.setPrimitives(model.getSelected());
    160159            }
    161160        });
     
    164163        lstPrimitives.addMouseListener(new DblClickHandler());
    165164
    166         popupMenu = new SelectionPopup(lstPrimitives);
    167165        InputMapUtils.addEnterAction(lstPrimitives, actZoomToListSelection);
    168166    }
     
    221219    }
    222220
    223     /**
    224      * The popup menu for the selection list
    225      */
    226     class SelectionPopup extends ListPopupMenu {
    227         public SelectionPopup(JList list) {
    228             super(list);
    229             add(actZoomToJOSMSelection);
    230             add(actZoomToListSelection);
    231             addSeparator();
    232             add(actSetRelationSelection);
    233             add(actEditRelationSelection);
    234             addSeparator();
    235             add(actDownloadSelectedIncompleteMembers);
    236         }
    237     }
    238 
    239     public void addPopupMenuSeparator() {
    240         popupMenu.addSeparator();
    241     }
    242 
    243     public JMenuItem addPopupMenuAction(Action a) {
    244         return popupMenu.add(a);
    245     }
    246 
    247     public void addPopupMenuListener(PopupMenuListener l) {
    248         popupMenu.addPopupMenuListener(l);
    249     }
    250 
    251     public void removePopupMenuListener(PopupMenuListener l) {
    252         popupMenu.addPopupMenuListener(l);
     221    private final PopupMenuHandler setupPopupMenuHandler() {
     222        PopupMenuHandler handler = new PopupMenuHandler(popupMenu);
     223        handler.addAction(actZoomToJOSMSelection);
     224        handler.addAction(actZoomToListSelection);
     225        handler.addSeparator();
     226        handler.addAction(actSetRelationSelection);
     227        handler.addAction(actEditRelationSelection);
     228        handler.addSeparator();
     229        handler.addAction(actDownloadSelectedIncompleteMembers);
     230        return handler;
     231    }
     232
     233    /**
     234     * Replies the popup menu handler.
     235     * @return The popup menu handler
     236     */
     237    public PopupMenuHandler getPopupMenuHandler() {
     238        return popupMenuHandler;
    253239    }
    254240
     
    596582            }
    597583            setSelected(sel);
    598         }
    599 
    600         /**
    601          * Replies the list of selected relations with incomplete members
    602          *
    603          * @return the list of selected relations with incomplete members
    604          */
    605         public List<Relation> getSelectedRelationsWithIncompleteMembers() {
    606             List<Relation> ret = new LinkedList<Relation>();
    607             for(int i=0; i<getSize(); i++) {
    608                 if (!selectionModel.isSelectedIndex(i)) {
    609                     continue;
    610                 }
    611                 OsmPrimitive p = selection.get(i);
    612                 if (! (p instanceof Relation)) {
    613                     continue;
    614                 }
    615                 if (p.isNew()) {
    616                     continue;
    617                 }
    618                 Relation r = (Relation)p;
    619                 if (r.hasIncompleteMembers()) {
    620                     ret.add(r);
    621                 }
    622             }
    623             return ret;
    624584        }
    625585
Note: See TracChangeset for help on using the changeset viewer.