Ignore:
Timestamp:
2018-06-18T21:53:59+02:00 (6 years ago)
Author:
Don-vip
Message:

use IRelation in RelationListDialog and *RelationActions

File:
1 edited

Legend:

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

    r13926 r13957  
    3535import org.openstreetmap.josm.Main;
    3636import org.openstreetmap.josm.actions.ExpertToggleAction;
    37 import org.openstreetmap.josm.actions.OsmPrimitiveAction;
     37import org.openstreetmap.josm.actions.IPrimitiveAction;
    3838import org.openstreetmap.josm.actions.relation.AddSelectionToRelations;
    3939import org.openstreetmap.josm.actions.relation.DeleteRelationsAction;
     
    5050import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
    5151import org.openstreetmap.josm.data.osm.IPrimitive;
     52import org.openstreetmap.josm.data.osm.IRelation;
     53import org.openstreetmap.josm.data.osm.OsmData;
    5254import org.openstreetmap.josm.data.osm.OsmPrimitive;
    5355import org.openstreetmap.josm.data.osm.Relation;
     
    7274import org.openstreetmap.josm.gui.SideButton;
    7375import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
    74 import org.openstreetmap.josm.gui.layer.Layer;
    7576import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
    7677import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
     
    7980import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
    8081import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
    81 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    8282import org.openstreetmap.josm.gui.util.HighlightHelper;
    8383import org.openstreetmap.josm.gui.widgets.CompileSearchTextDecorator;
     
    9090import org.openstreetmap.josm.tools.Shortcut;
    9191import org.openstreetmap.josm.tools.SubclassFilteredCollection;
     92import org.openstreetmap.josm.tools.Utils;
    9293
    9394/**
     
    100101        implements DataSetListener, NavigatableComponent.ZoomChangeListener, ExpertToggleAction.ExpertModeChangeListener {
    101102    /** The display list. */
    102     private final JList<Relation> displaylist;
     103    private final JList<IRelation<?>> displaylist;
    103104    /** the list model used */
    104105    private final RelationListModel model;
     
    222223    // inform all actions about list of relations they need
    223224    private void updateActionsRelationLists() {
    224         List<Relation> sel = model.getSelectedRelations();
     225        List<IRelation<?>> sel = model.getSelectedRelations();
    225226        popupMenuHandler.setPrimitives(sel);
    226227
     
    228229
    229230        //update highlights
    230         if (highlightEnabled && focused == displaylist && MainApplication.isDisplayingMapView() && highlightHelper.highlightOnly(sel)) {
     231        if (highlightEnabled && focused == displaylist && MainApplication.isDisplayingMapView()
     232                && highlightHelper.highlightOnly(Utils.filteredCollection(sel, Relation.class))) {
    231233            MainApplication.getMap().mapView.repaint();
    232234        }
     
    261263
    262264    /**
    263      * Initializes the relation list dialog from a layer. If <code>layer</code> is null
    264      * or if it isn't an {@link OsmDataLayer} the dialog is reset to an empty dialog.
     265     * Initializes the relation list dialog from a dataset. If <code>data</code> is null
     266     * the dialog is reset to an empty dialog.
    265267     * Otherwise it is initialized with the list of non-deleted and visible relations
    266      * in the layer's dataset.
     268     * in the dataset.
    267269     *
    268      * @param layer the layer. May be null.
    269      */
    270     protected void initFromLayer(Layer layer) {
    271         if (!(layer instanceof OsmDataLayer)) {
     270     * @param data the dataset. May be null.
     271     * @since 13957
     272     */
     273    protected void initFromData(OsmData<?, ?, ?, ?> data) {
     274        if (data == null) {
    272275            model.setRelations(null);
    273276            return;
    274277        }
    275         OsmDataLayer l = (OsmDataLayer) layer;
    276         model.setRelations(l.data.getRelations());
     278        model.setRelations(data.getRelations());
    277279        model.updateTitle();
    278280        updateActionsRelationLists();
     
    282284     * @return The selected relation in the list
    283285     */
    284     private Relation getSelected() {
     286    private IRelation<?> getSelected() {
    285287        if (model.getSize() == 1) {
    286288            displaylist.setSelectedIndex(0);
     
    301303     * Selects the relations in the list of relations.
    302304     * @param relations  the relations to be selected
    303      */
    304     public void selectRelations(Collection<Relation> relations) {
     305     * @since 13957 (signature)
     306     */
     307    public void selectRelations(Collection<? extends IRelation<?>> relations) {
    305308        if (relations == null || relations.isEmpty()) {
    306309            model.setSelectedRelations(null);
     
    348351
    349352        protected void editCurrentRelation() {
    350             EditRelationAction.launchEditor(getSelected());
     353            IRelation<?> rel = getSelected();
     354            if (rel instanceof Relation) {
     355                EditRelationAction.launchEditor((Relation) rel);
     356            }
    351357        }
    352358
     
    412418     * The list model for the list of relations displayed in the relation list dialog.
    413419     */
    414     private class RelationListModel extends AbstractListModel<Relation> {
    415         private final transient List<Relation> relations = new ArrayList<>();
    416         private transient List<Relation> filteredRelations;
     420    private class RelationListModel extends AbstractListModel<IRelation<?>> {
     421        private final transient List<IRelation<?>> relations = new ArrayList<>();
     422        private transient List<IRelation<?>> filteredRelations;
    417423        private final DefaultListSelectionModel selectionModel;
    418424        private transient SearchCompiler.Match filter;
     
    439445        }
    440446
    441         private boolean isValid(Relation r) {
     447        private boolean isValid(IRelation<?> r) {
    442448            return !r.isDeleted() && !r.isIncomplete();
    443449        }
    444450
    445         public void setRelations(Collection<Relation> relations) {
    446             List<Relation> sel = getSelectedRelations();
     451        public void setRelations(Collection<? extends IRelation<?>> relations) {
     452            List<IRelation<?>> sel = getSelectedRelations();
    447453            this.relations.clear();
    448454            this.filteredRelations = null;
     
    452458                return;
    453459            }
    454             for (Relation r: relations) {
     460            for (IRelation<?> r: relations) {
    455461                if (isValid(r)) {
    456462                    this.relations.add(r);
     
    487493            }
    488494            if (added) {
    489                 List<Relation> sel = getSelectedRelations();
     495                List<IRelation<?>> sel = getSelectedRelations();
    490496                sort();
    491497                updateFilteredRelations();
     
    520526            }
    521527            if (size != relations.size()) {
    522                 List<Relation> sel = getSelectedRelations();
     528                List<IRelation<?>> sel = getSelectedRelations();
    523529                sort();
    524530                fireContentsChanged(this, 0, getSize());
     
    538544            this.filter = filter;
    539545            updateFilteredRelations();
    540             List<Relation> sel = getSelectedRelations();
     546            List<IRelation<?>> sel = getSelectedRelations();
    541547            fireContentsChanged(this, 0, getSize());
    542548            setSelectedRelations(sel);
     
    544550        }
    545551
    546         private List<Relation> getVisibleRelations() {
     552        private List<IRelation<?>> getVisibleRelations() {
    547553            return filteredRelations == null ? relations : filteredRelations;
    548554        }
    549555
    550         private Relation getVisibleRelation(int index) {
     556        private IRelation<?> getVisibleRelation(int index) {
    551557            if (index < 0 || index >= getVisibleRelations().size()) return null;
    552558            return getVisibleRelations().get(index);
     
    554560
    555561        @Override
    556         public Relation getElementAt(int index) {
     562        public IRelation<?> getElementAt(int index) {
    557563            return getVisibleRelation(index);
    558564        }
     
    568574         *
    569575         * @return the list of selected, non-new relations.
     576         * @since 13957 (signature)
    570577         */
    571         public List<Relation> getSelectedRelations() {
    572             List<Relation> ret = new ArrayList<>();
     578        public List<IRelation<?>> getSelectedRelations() {
     579            List<IRelation<?>> ret = new ArrayList<>();
    573580            for (int i = 0; i < getSize(); i++) {
    574581                if (!selectionModel.isSelectedIndex(i)) {
     
    584591         *
    585592         * @param sel the list of selected relations
     593         * @since 13957 (signature)
    586594         */
    587         public void setSelectedRelations(Collection<Relation> sel) {
     595        public void setSelectedRelations(Collection<? extends IRelation<?>> sel) {
    588596            selectionModel.setValueIsAdjusting(true);
    589597            selectionModel.clearSelection();
     
    592600                    resetFilter();
    593601                }
    594                 for (Relation r: sel) {
     602                for (IRelation<?> r: sel) {
    595603                    Integer i = getVisibleRelationIndex(r);
    596604                    if (i != null) {
     
    602610        }
    603611
    604         private Integer getVisibleRelationIndex(Relation rel) {
     612        private Integer getVisibleRelationIndex(IRelation<?> rel) {
    605613            int i = getVisibleRelations().indexOf(rel);
    606614            if (i < 0)
     
    655663            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
    656664                for (JMenuItem mi: checkDisabled) {
    657                     mi.setVisible(((OsmPrimitiveAction) mi.getAction()).isEnabled());
     665                    mi.setVisible(((IPrimitiveAction) mi.getAction()).isEnabled());
    658666
    659667                    Component sep = popupMenu.getComponent(
     
    692700     * Replies the list of selected relations. Empty list, if there are no selected relations.
    693701     * @return the list of selected, non-new relations.
    694      */
    695     public Collection<Relation> getSelectedRelations() {
     702     * @since 13957 (signature)
     703     */
     704    public Collection<IRelation<?>> getSelectedRelations() {
    696705        return model.getSelectedRelations();
    697706    }
     
    725734    @Override
    726735    public void relationMembersChanged(final RelationMembersChangedEvent event) {
    727         List<Relation> sel = model.getSelectedRelations();
     736        List<IRelation<?>> sel = model.getSelectedRelations();
    728737        model.sort();
    729738        model.setSelectedRelations(sel);
     
    737746            return;
    738747        // trigger a sort of the relation list because the display name may have changed
    739         List<Relation> sel = model.getSelectedRelations();
     748        List<IRelation<?>> sel = model.getSelectedRelations();
    740749        model.sort();
    741750        model.setSelectedRelations(sel);
     
    745754    @Override
    746755    public void dataChanged(DataChangedEvent event) {
    747         initFromLayer(MainApplication.getLayerManager().getActiveDataLayer());
     756        initFromData(MainApplication.getLayerManager().getActiveData());
    748757    }
    749758
Note: See TracChangeset for help on using the changeset viewer.