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/RelationListDialog.java

    r5799 r5821  
    1616import java.util.Collections;
    1717import java.util.HashSet;
    18 import java.util.Iterator;
    1918import java.util.List;
    2019import java.util.Set;
     
    2221import javax.swing.AbstractAction;
    2322import javax.swing.AbstractListModel;
    24 import javax.swing.Action;
    2523import javax.swing.DefaultListSelectionModel;
    2624import javax.swing.JComponent;
    2725import javax.swing.JList;
    28 import javax.swing.JMenuItem;
    2926import javax.swing.JPanel;
    3027import javax.swing.JPopupMenu;
     
    3936import javax.swing.event.ListSelectionEvent;
    4037import javax.swing.event.ListSelectionListener;
    41 import javax.swing.event.PopupMenuListener;
    4238
    4339import org.openstreetmap.josm.Main;
     
    6965import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    7066import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
     67import org.openstreetmap.josm.gui.PopupMenuHandler;
    7168import org.openstreetmap.josm.gui.SideButton;
    7269import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
     
    9592    private final NewAction newAction;
    9693   
    97     /** the popup menu */
    98     private final RelationDialogPopupMenu popupMenu;
     94    /** the popup menu and its handler */
     95    private final JPopupMenu popupMenu = new JPopupMenu();
     96    private final PopupMenuHandler popupMenuHandler = new PopupMenuHandler(popupMenu);
    9997
    10098    private final JTextField filter;
     
    109107    private final DownloadMembersAction downloadMembersAction = new DownloadMembersAction();
    110108    private final DownloadSelectedIncompleteMembersAction downloadSelectedIncompleteMembersAction = new DownloadSelectedIncompleteMembersAction();
    111     private final SelectMembersAction selectMemebersAction = new SelectMembersAction(false);
     109    private final SelectMembersAction selectMembersAction = new SelectMembersAction(false);
    112110    private final SelectMembersAction addMembersToSelectionAction = new SelectMembersAction(true);
    113111    private final SelectRelationAction selectRelationAction = new SelectRelationAction(false);
    114112    private final SelectRelationAction addRelationToSelectionAction = new SelectRelationAction(true);
    115     /** add all selected primitives to the given realtions */
     113    /** add all selected primitives to the given relations */
    116114    private final AddSelectionToRelations addSelectionToRelations = new AddSelectionToRelations();
    117115   
     
    154152            }
    155153        });
     154
     155        // Setup popup menu handler
     156        setupPopupMenuHandler();
    156157       
    157158        JPanel pane = new JPanel(new BorderLayout());
     
    175176        InputMapUtils.addEnterAction(displaylist, selectRelationAction);
    176177
    177         popupMenu = new RelationDialogPopupMenu();
    178 
    179178        // Edit relation on Ctrl-Enter
    180179        displaylist.getActionMap().put("edit", editAction);
     
    186185    // inform all actions about list of relations they need
    187186    private void updateActionsRelationLists() {
    188         List<Relation> rels;
    189         rels = model.getSelectedNonNewRelations();
    190         downloadMembersAction.setRelations(rels);
    191 
    192         rels = model.getSelectedRelationsWithIncompleteMembers();
    193         downloadSelectedIncompleteMembersAction.setRelations(rels);
    194 
    195         rels = model.getSelectedRelations();
    196         editAction.setRelations(rels);
    197         deleteRelationsAction.setRelations(rels);
    198         addSelectionToRelations.setRelations(rels);
    199         selectMemebersAction.setRelations(rels);
    200         addMembersToSelectionAction.setRelations(rels);
    201         selectRelationAction.setRelations(rels);
    202         addRelationToSelectionAction.setRelations(rels);
    203         duplicateAction.setRelations(rels);
     187        popupMenuHandler.setPrimitives(model.getSelectedRelations());
    204188    }
    205189   
     
    509493            }
    510494        }
    511 
    512         /**
    513          * Replies the list of selected relations with incomplete members
    514          *
    515          * @return the list of selected relations with incomplete members
    516          */
    517         public List<Relation> getSelectedRelationsWithIncompleteMembers() {
    518             List<Relation> ret = getSelectedNonNewRelations();
    519             Iterator<Relation> it = ret.iterator();
    520             while(it.hasNext()) {
    521                 Relation r = it.next();
    522                 if (!r.hasIncompleteMembers()) {
    523                     it.remove();
    524                 }
    525             }
    526             return ret;
    527         }
    528495       
    529496        private void updateFilteredRelations() {
     
    569536
    570537        /**
    571          * Replies the list of selected, non-new relations. Empty list,
    572          * if there are no selected, non-new relations.
    573          *
    574          * @return the list of selected, non-new relations.
    575          */
    576         public List<Relation> getSelectedNonNewRelations() {
    577             ArrayList<Relation> ret = new ArrayList<Relation>();
    578             for (int i=0; i<getSize();i++) {
    579                 if (!selectionModel.isSelectedIndex(i)) {
    580                     continue;
    581                 }
    582                 if (getVisibleRelation(i).isNew()) {
    583                     continue;
    584                 }
    585                 ret.add(getVisibleRelation(i));
    586             }
    587             return ret;
    588         }
    589 
    590         /**
    591538         * Replies the list of selected relations. Empty list,
    592539         * if there are no selected relations.
     
    656603    }
    657604
    658     class RelationDialogPopupMenu extends JPopupMenu {
    659 
    660         public RelationDialogPopupMenu() {
    661             // -- download members action
    662             add(downloadMembersAction);
    663 
    664             // -- download incomplete members action
    665             add(downloadSelectedIncompleteMembersAction);
    666 
    667             addSeparator();
    668 
    669             // -- select members action
    670             add(selectMemebersAction);
    671             add(addMembersToSelectionAction);
    672 
    673             // -- select action
    674             add(selectRelationAction);
    675             add(addRelationToSelectionAction);
    676 
    677             addSeparator();
    678 
    679             add(addSelectionToRelations);
    680         }
    681     }
    682 
     605    private final void setupPopupMenuHandler() {
     606       
     607        // -- download members action
     608        popupMenuHandler.addAction(downloadMembersAction);
     609
     610        // -- download incomplete members action
     611        popupMenuHandler.addAction(downloadSelectedIncompleteMembersAction);
     612
     613        popupMenuHandler.addSeparator();
     614
     615        // -- select members action
     616        popupMenuHandler.addAction(selectMembersAction);
     617        popupMenuHandler.addAction(addMembersToSelectionAction);
     618
     619        // -- select action
     620        popupMenuHandler.addAction(selectRelationAction);
     621        popupMenuHandler.addAction(addRelationToSelectionAction);
     622
     623        popupMenuHandler.addSeparator();
     624
     625        popupMenuHandler.addAction(addSelectionToRelations);
     626    }
     627   
    683628    /* ---------------------------------------------------------------------------------- */
    684     /* Methods that can be called from plugins                                                                    */
     629    /* Methods that can be called from plugins                                            */
    685630    /* ---------------------------------------------------------------------------------- */
    686631
    687     public void addPopupMenuSeparator() {
    688         popupMenu.addSeparator();
    689     }
    690 
    691     public JMenuItem addPopupMenuAction(Action a) {
    692         return popupMenu.add(a);
    693     }
    694 
    695     public void addPopupMenuListener(PopupMenuListener l) {
    696         popupMenu.addPopupMenuListener(l);
    697     }
    698 
    699     public void removePopupMenuListener(PopupMenuListener l) {
    700         popupMenu.addPopupMenuListener(l);
     632    /**
     633     * Replies the popup menu handler.
     634     * @return The popup menu handler
     635     */
     636    public PopupMenuHandler getPopupMenuHandler() {
     637        return popupMenuHandler;
    701638    }
    702639
Note: See TracChangeset for help on using the changeset viewer.