Changeset 32395 in osm for applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/AddRemoveMemberAction.java
- Timestamp:
- 2016-06-24T09:10:57+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/reltoolbox/src/relcontext/actions/AddRemoveMemberAction.java
r31662 r32395 1 // License: GPL. For details, see LICENSE file. 1 2 package relcontext.actions; 2 3 … … 36 37 private SortAndFixAction sortAndFix; 37 38 38 public AddRemoveMemberAction( 39 public AddRemoveMemberAction(ChosenRelation rel, SortAndFixAction sortAndFix) { 39 40 super(null, "relcontext/addremove", tr("Add/remove members from the chosen relation"), 40 41 Shortcut.registerShortcut("reltoolbox:addremove", tr("Relation Toolbox: {0}", tr("Add/remove members from the chosen relation")), 41 KeyEvent.VK_EQUALS, Shortcut.DIRECT), false); 42 KeyEvent.VK_EQUALS, Shortcut.DIRECT), false); 42 43 this.rel = rel; 43 44 this.sortAndFix = sortAndFix; … … 46 47 } 47 48 48 public void actionPerformed( ActionEvent e ) { 49 if( rel.get() == null ) 49 @Override 50 public void actionPerformed(ActionEvent e) { 51 if (rel.get() == null ) 50 52 return; 51 53 … … 63 65 64 66 // 2. add all new members 65 for (OsmPrimitive p : toAdd67 for (OsmPrimitive p : toAdd) { 66 68 int pos = -1; //p instanceof Way ? findAdjacentMember(p, r) : -1; 67 if (pos < 0 )69 if (pos < 0 ) { 68 70 r.addMember(new RelationMember("", p)); 69 else71 } else { 70 72 r.addMember(pos, new RelationMember("", p)); 73 } 71 74 } 72 75 73 76 // 3. check for roles again (temporary) 74 77 Command roleFix = !isBroken && sortAndFix.needsFixing(r) ? sortAndFix.fixRelation(r) : null; 75 if (roleFix != null )78 if (roleFix != null ) { 76 79 roleFix.executeCommand(); 80 } 77 81 78 if (!r.getMemberPrimitives().equals(rel.get().getMemberPrimitives()) )82 if (!r.getMemberPrimitives().equals(rel.get().getMemberPrimitives()) ) { 79 83 Main.main.undoRedo.add(new ChangeCommand(rel.get(), r)); 84 } 80 85 } 81 86 … … 84 89 * @see org.openstreetmap.josm.gui.dialogs.relation.MemberTableModel#determineDirection 85 90 */ 86 protected int findAdjacentMember( 91 protected int findAdjacentMember(Way w, Relation r) { 87 92 Node firstNode = w.firstNode(); 88 93 Node lastNode = w.lastNode(); 89 94 90 if (firstNode != null && !firstNode.equals(lastNode)91 for (int i = 0; i < r.getMembersCount(); i++92 if (r.getMember(i).getType().equals(OsmPrimitiveType.WAY)95 if (firstNode != null && !firstNode.equals(lastNode)) { 96 for (int i = 0; i < r.getMembersCount(); i++) { 97 if (r.getMember(i).getType().equals(OsmPrimitiveType.WAY)) { 93 98 Way rw = (Way)r.getMember(i).getMember(); 94 99 Node firstNodeR = rw.firstNode(); 95 100 Node lastNodeR = rw.lastNode(); 96 if (firstNode.equals(firstNodeR) || firstNode.equals(lastNodeR) || lastNode.equals(firstNodeR) || lastNode.equals(lastNodeR) )101 if (firstNode.equals(firstNodeR) || firstNode.equals(lastNodeR) || lastNode.equals(firstNodeR) || lastNode.equals(lastNodeR) ) 97 102 return i + 1; 98 103 } … … 102 107 } 103 108 104 public void chosenRelationChanged( Relation oldRelation, Relation newRelation ) { 109 @Override 110 public void chosenRelationChanged(Relation oldRelation, Relation newRelation) { 105 111 updateEnabledState(); 106 112 } … … 112 118 113 119 @Override 114 protected void updateEnabledState( 120 protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) { 115 121 updateIcon(); 116 if (rel == null || rel.get() == null || selection == null || selection.isEmpty()122 if (rel == null || rel.get() == null || selection == null || selection.isEmpty()) { 117 123 setEnabled(false); 118 124 return; 119 125 } 120 if (selection.size() == 1 && selection.contains(rel.get())126 if (selection.size() == 1 && selection.contains(rel.get())) { 121 127 setEnabled(false); 122 128 return; … … 128 134 // todo: change icon based on selection 129 135 final int state; // 0=unknown, 1=add, 2=remove, 3=both 130 if (getCurrentDataSet() == null || getCurrentDataSet().getSelected() == null131 || getCurrentDataSet().getSelected().isEmpty() || rel == null || rel.get() == null ) 136 if (getCurrentDataSet() == null || getCurrentDataSet().getSelected() == null 137 || getCurrentDataSet().getSelected().isEmpty() || rel == null || rel.get() == null ) { 132 138 state = 0; 133 else { 139 } else { 134 140 Collection<OsmPrimitive> toAdd = new ArrayList<>(getCurrentDataSet().getSelected()); 135 141 toAdd.remove(rel.get()); 136 142 int selectedSize = toAdd.size(); 137 if (selectedSize == 0 )143 if (selectedSize == 0 ) { 138 144 state = 0; 139 else { 145 } else { 140 146 toAdd.removeAll(rel.get().getMemberPrimitives()); 141 if (toAdd.isEmpty() )147 if (toAdd.isEmpty() ) { 142 148 state = 2; 143 else if (toAdd.size() < selectedSize )149 } else if (toAdd.size() < selectedSize ) { 144 150 state = 3; 145 else151 } else { 146 152 state = 1; 153 } 147 154 } 148 155 } … … 150 157 @Override 151 158 public void run() { 152 // String name = state == 0 ? "?" : state == 1 ? "+" : state == 2 ? "-" : "±"; 153 // putValue(Action.NAME, name); 159 // String name = state == 0 ? "?" : state == 1 ? "+" : state == 2 ? "-" : "±"; 160 // putValue(Action.NAME, name); 154 161 if (state == 0) { 155 // putValue(NAME, "?"); 162 // putValue(NAME, "?"); 156 163 putValue(LARGE_ICON_KEY, ImageProvider.get("relcontext", "addremove")); 157 164 } else {
Note:
See TracChangeset
for help on using the changeset viewer.