Changeset 1831 in josm


Ignore:
Timestamp:
2009-07-25T12:02:51+02:00 (15 years ago)
Author:
Gubaer
Message:

fixed #3079: "Remove selected members from relation" button should be made inactive when none of the currently selected objects exists in the relation

Location:
trunk/src/org/openstreetmap/josm/gui/dialogs/relation
Files:
2 edited

Legend:

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

    r1830 r1831  
    723723                    KeyEvent.VK_S, Shortcut.GROUP_MNEMONIC);
    724724
     725            updateEnabledState();
     726        }
     727
     728        protected void updateEnabledState() {
    725729            DataSet ds = getLayer().data;
    726             setEnabled(ds != null && !ds.getSelected().isEmpty());
     730            if (ds == null || ds.getSelected().isEmpty()) {
     731                setEnabled(false);
     732                return;
     733            }
     734            // only enable the action if we have members referring to the
     735            // selected primitives
     736            //
     737            setEnabled(memberTableModel.hasMembersReferringTo(ds.getSelected()));
    727738        }
    728739
     
    732743
    733744        public void tableChanged(TableModelEvent e) {
    734             setEnabled(selectionTableModel.getRowCount() > 0);
     745            updateEnabledState();
    735746        }
    736747    }
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java

    r1830 r1831  
    66import java.util.Collection;
    77import java.util.Collections;
     8import java.util.HashSet;
    89import java.util.Iterator;
    910import java.util.LinkedList;
     
    403404        return !r.incomplete;
    404405    }
     406
     407    /**
     408     * Replies true if there is at least one relation member in this model
     409     * which refers to at least on the primitives in <code>primitives</code>.
     410     *
     411     * @param primitives the collection of primitives
     412     * @return true if there is at least one relation member in this model
     413     * which refers to at least on the primitives in <code>primitives</code>; false
     414     * otherwise
     415     */
     416    public boolean hasMembersReferringTo(Collection<OsmPrimitive> primitives) {
     417        if (primitives == null || primitives.isEmpty())
     418            return false;
     419        HashSet<OsmPrimitive> referrers = new HashSet<OsmPrimitive>();
     420        for(RelationMember member : members) {
     421            referrers.add(member.member);
     422        }
     423        Iterator<OsmPrimitive> it = primitives.iterator();
     424        while(it.hasNext()) {
     425            OsmPrimitive referred = it.next();
     426            if (referrers.contains(referred))
     427                return true;
     428        }
     429        return false;
     430    }
     431
    405432
    406433    void sort() {
Note: See TracChangeset for help on using the changeset viewer.