Ignore:
Timestamp:
2010-06-01T17:31:06+02:00 (14 years ago)
Author:
stoecker
Message:

better support for relation handling in selection list

File:
1 edited

Legend:

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

    r3286 r3290  
    5353import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    5454import org.openstreetmap.josm.data.osm.Relation;
     55import org.openstreetmap.josm.data.osm.RelationMember;
    5556import org.openstreetmap.josm.data.osm.Way;
    5657import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
     
    7374import org.openstreetmap.josm.gui.MapView.EditLayerChangeListener;
    7475import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationMemberTask;
     76import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
    7577import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    7678import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
     
    9395    private ZoomToJOSMSelectionAction actZoomToJOSMSelection;
    9496    private ZoomToListSelection actZoomToListSelection;
     97    private SetRelationSelection actSetRelationSelection;
     98    private EditRelationSelection actEditRelationSelection;
    9599    private DownloadSelectedIncompleteMembersAction actDownloadSelectedIncompleteMembers;
    96100    private InspectAction actInspect;
     
    174178        lstPrimitives.getSelectionModel().addListSelectionListener(actZoomToListSelection);
    175179
     180        actSetRelationSelection = new SetRelationSelection();
     181        lstPrimitives.getSelectionModel().addListSelectionListener(actSetRelationSelection);
     182
     183        actEditRelationSelection = new EditRelationSelection();
     184        lstPrimitives.getSelectionModel().addListSelectionListener(actEditRelationSelection);
     185
    176186        actDownloadSelectedIncompleteMembers = new DownloadSelectedIncompleteMembersAction();
    177187        lstPrimitives.getSelectionModel().addListSelectionListener(actDownloadSelectedIncompleteMembers);
     
    251261            add(actZoomToListSelection);
    252262            addSeparator();
     263            add(actSetRelationSelection);
     264            add(actEditRelationSelection);
     265            addSeparator();
    253266            add(actDownloadSelectedIncompleteMembers);
    254267            addSeparator();
     
    391404        public void updateEnabledState() {
    392405            setEnabled(!model.getSelected().isEmpty());
     406        }
     407
     408        public void valueChanged(ListSelectionEvent e) {
     409            updateEnabledState();
     410        }
     411    }
     412
     413    /**
     414     * The action for setting and editing a relation in relation list dialog
     415     *
     416     */
     417    class EditRelationSelection extends SetRelationSelection {
     418        public EditRelationSelection() {
     419            putValue(NAME, tr("Call editor for relation"));
     420            putValue(SHORT_DESCRIPTION, tr("Call relation editor for selected relation"));
     421            putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
     422            updateEnabledState();
     423        }
     424
     425        public void actionPerformed(ActionEvent e) {
     426            Relation relation = (Relation)model.getSelected().toArray()[0];
     427            Collection<RelationMember> members = new HashSet<RelationMember>();
     428            Collection<OsmPrimitive> selection = model.getAllElements();
     429            for (RelationMember member: relation.getMembers()) {
     430                if (selection.contains(member.getMember()))
     431                    members.add(member);
     432            }
     433            Main.map.relationListDialog.selectRelation(relation);
     434            RelationEditor.getEditor(Main.map.mapView.getEditLayer(), relation,
     435                members).setVisible(true);
     436        }
     437    }
     438
     439    /**
     440     * The action for setting a relation in relation list dialog
     441     *
     442     */
     443    class SetRelationSelection extends AbstractAction implements ListSelectionListener{
     444        public SetRelationSelection() {
     445            putValue(NAME, tr("Select in relation list"));
     446            putValue(SHORT_DESCRIPTION, tr("Select relation in relation list."));
     447            putValue(SMALL_ICON, ImageProvider.get("dialogs", "selectionlist"));
     448            updateEnabledState();
     449        }
     450
     451        public void actionPerformed(ActionEvent e) {
     452            Relation relation = (Relation)model.getSelected().toArray()[0];
     453            Main.map.relationListDialog.selectRelation(relation);
     454        }
     455
     456        public void updateEnabledState() {
     457            Object[] sel = model.getSelected().toArray();
     458            setEnabled(sel.length == 1 && sel[0] instanceof Relation);
    393459        }
    394460
     
    497563            }
    498564            return sel;
     565        }
     566
     567        /**
     568         * Replies the collection of OSM primitives in the view
     569         * of this model
     570         *
     571         * @return
     572         */
     573        public Collection<OsmPrimitive> getAllElements() {
     574            return selection;
    499575        }
    500576
Note: See TracChangeset for help on using the changeset viewer.