Ticket #3780: fix-shift-selection-1.patch
File fix-shift-selection-1.patch, 16.6 KB (added by , 14 years ago) |
---|
-
(a) core/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java~fix-shift-selection vs. (b) core-dave/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
--- core-dave/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java | 40 +++++----- core-dave/src/org/openstreetmap/josm/data/osm/DataSet.java | 34 +++++--- 2 files changed, 43 insertions(+), 31 deletions(-) diff -puN src/org/openstreetmap/josm/gui/SelectionManager.java~fix-shift-selection src/org/openstreetmap/josm/gui/SelectionManager.java diff -puN src/org/openstreetmap/josm/actions/mapmode/SelectAction.java~fix-shift-selection src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
a b public class SelectAction extends MapMod 498 498 } 499 499 } 500 500 } 501 DataSet.fireSelectionChanged(selection);501 getCurrentDataSet().fireSelectionChanged(); 502 502 } 503 503 } 504 504 … … public class SelectAction extends MapMod 514 514 515 515 public void selectPrims(Collection<OsmPrimitive> selectionList, boolean shift, 516 516 boolean ctrl, boolean released, boolean area) { 517 DataSet ds = getCurrentDataSet(); 517 518 if ((shift && ctrl) || (ctrl && !released)) 518 519 return; // not allowed together 519 520 520 Collection<OsmPrimitive> curSel; 521 if (!ctrl && !shift) { 522 curSel = new LinkedList<OsmPrimitive>(); // new selection will replace the old. 521 // plain clicks with no modifiers clear the selection 522 if (!ctrl && !shift) 523 ds.clearSelection(); 524 525 if (ctrl) { 526 // Ctrl on an item toggles its selection status, 527 // but Ctrl on an *area* just clears those items 528 // out of the selection. 529 if (area) 530 ds.clearSelection(selectionList); 531 else 532 ds.toggleSelected(selectionList); 523 533 } else { 524 curSel = getCurrentDataSet().getSelected(); 534 // This is either a plain click (which means we 535 // previously cleared the selection), or a 536 // shift-click where we are adding things to an 537 // existing selection. 538 ds.addSelected(selectionList); 525 539 } 526 527 for (OsmPrimitive osm : selectionList) 528 { 529 if (ctrl) 530 { 531 if(curSel.contains(osm)) { 532 curSel.remove(osm); 533 } else if(!area) { 534 curSel.add(osm); 535 } 536 } else { 537 curSel.add(osm); 538 } 539 } 540 getCurrentDataSet().setSelected(curSel); 540 ds.fireSelectionChanged(); 541 541 Main.map.mapView.repaint(); 542 542 } 543 543 -
(a) core/src/org/openstreetmap/josm/data/osm/DataSet.java~fix-shift-selection vs. (b) core-dave/src/org/openstreetmap/josm/data/osm/DataSet.java
diff -puN src/org/openstreetmap/josm/data/osm/DataSet.java~fix-shift-selection src/org/openstreetmap/josm/data/osm/DataSet.java
a b public class DataSet implements Cloneabl 241 241 242 242 LinkedHashSet<OsmPrimitive> selectedPrimitives = new LinkedHashSet<OsmPrimitive>(); 243 243 244 public boolean toggleSelected(OsmPrimitive osm) { 244 public boolean toggleSelected(Collection<OsmPrimitive> osm) { 245 for (OsmPrimitive o : osm) 246 this.__toggleSelected(o); 247 fireSelectionChanged(); 248 return true; 249 } 250 public boolean toggleSelected(OsmPrimitive... osm) { 251 return this.toggleSelected(Arrays.asList(osm)); 252 } 253 private boolean __toggleSelected(OsmPrimitive osm) { 245 254 if (!selectedPrimitives.remove(osm)) { 246 255 selectedPrimitives.add(osm); 247 256 } … … public class DataSet implements Cloneabl 275 284 public void setSelected(Collection<? extends OsmPrimitive> selection, boolean fireSelectionChangeEvent) { 276 285 selectedPrimitives = new LinkedHashSet<OsmPrimitive>(selection); 277 286 if (fireSelectionChangeEvent) { 278 fireSelectionChanged( selection);287 fireSelectionChanged(); 279 288 } 280 289 } 281 290 … … public class DataSet implements Cloneabl 313 322 public void addSelected(Collection<? extends OsmPrimitive> selection, boolean fireSelectionChangeEvent) { 314 323 selectedPrimitives.addAll(selection); 315 324 if (fireSelectionChangeEvent) { 316 fireSelectionChanged( selection);325 fireSelectionChanged(); 317 326 } 318 327 } 319 328 … … public class DataSet implements Cloneabl 325 334 } 326 335 List<OsmPrimitive> list = Arrays.asList(osm); 327 336 setSelected(list); 328 fireSelectionChanged( list);337 fireSelectionChanged(); 329 338 } 330 339 331 340 /** … … public class DataSet implements Cloneabl 358 367 public void clearSelection(OsmPrimitive... osm) { 359 368 clearSelection(Arrays.asList(osm)); 360 369 } 361 p rivatevoid clearSelection(Collection<? extends OsmPrimitive> list) {370 public void clearSelection(Collection<? extends OsmPrimitive> list) { 362 371 if (list == null) 363 372 return; 364 373 selectedPrimitives.removeAll(list); 365 374 } 375 public void clearSelection() { 376 selectedPrimitives = new LinkedHashSet<OsmPrimitive>(); 377 } 366 378 367 379 /** 368 380 * Return all selected items in the collection. … … public class DataSet implements Cloneabl 379 391 return sel; 380 392 } 381 393 382 /**383 * Remember to fire an selection changed event. A call to this will not fire the event384 * immediately. For more,385 * @see SelectionChangedListener386 */ 387 public static void fireSelectionChanged(Collection<? extends OsmPrimitive> sel) {394 public void fireSelectionChanged() 395 { 396 __fireSelectionChanged(selectedPrimitives); 397 } 398 399 public static void __fireSelectionChanged(Collection<? extends OsmPrimitive> sel) { 388 400 for (SelectionChangedListener l : selListeners) { 389 401 l.selectionChanged(sel); 390 402 } -
src/org/openstreetmap/josm/actions/ReverseWayAction.java
_
old new 80 80 } 81 81 Main.main.undoRedo.add(new SequenceCommand(tr("Reverse ways"), c)); 82 82 if (propertiesUpdated) { 83 DataSet.fireSelectionChanged(getCurrentDataSet().getSelected());83 getCurrentDataSet().fireSelectionChanged(); 84 84 } 85 85 Main.map.repaint(); 86 86 } -
src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
old new 244 244 // when exiting we let everybody know about the currently selected 245 245 // primitives 246 246 // 247 DataSet.fireSelectionChanged(getCurrentDataSet().getSelected());247 getCurrentDataSet().fireSelectionChanged(); 248 248 } 249 249 250 250 /** … … 271 271 272 272 private void tryAgain(MouseEvent e) { 273 273 getCurrentDataSet().setSelected(); 274 DataSet.fireSelectionChanged(getCurrentDataSet().getSelected());274 Main.main.getCurrentDataSet().fireSelectionChanged(); 275 275 mouseClicked(e); 276 276 } 277 277 … … 283 283 private void finishDrawing() { 284 284 // let everybody else know about the current selection 285 285 // 286 DataSet.fireSelectionChanged(getCurrentDataSet().getSelected());286 Main.main.getCurrentDataSet().fireSelectionChanged(); 287 287 lastUsedNode = null; 288 288 wayIsFinished = true; 289 289 Main.map.selectSelectTool(true); … … 584 584 (posn0 >= 1 && targetNode.equals(selectedWay.getNode(posn0-1))) || // previous node 585 585 (posn0 < selectedWay.getNodesCount()-1) && targetNode.equals(selectedWay.getNode(posn0+1))) { // next node 586 586 getCurrentDataSet().setSelected(targetNode); 587 DataSet.fireSelectionChanged(getCurrentDataSet().getSelected());587 getCurrentDataSet().fireSelectionChanged(); 588 588 lastUsedNode = targetNode; 589 589 return true; 590 590 } -
src/org/openstreetmap/josm/actions/UploadAction.java
old new 687 687 // partially uploaded 688 688 // 689 689 layer.cleanupAfterUpload(processedPrimitives); 690 DataSet.fireSelectionChanged(layer.data.getSelected());690 layer.data.fireSelectionChanged(); 691 691 layer.fireDataChange(); 692 692 if (lastException != null) { 693 693 handleFailedUpload(lastException); -
src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
old new 516 516 selection.add(model.getRelation(i)); 517 517 } 518 518 Main.map.mapView.getEditLayer().data.setSelected(selection); 519 DataSet.fireSelectionChanged(selection);519 Main.map.mapView.getEditLayer().data.fireSelectionChanged(); 520 520 } 521 521 522 522 public void valueChanged(ListSelectionEvent e) { … … 544 544 members.addAll(r.getMemberPrimitives()); 545 545 } 546 546 Main.map.mapView.getEditLayer().data.setSelected(members); 547 DataSet.fireSelectionChanged(members);548 547 } 549 548 550 549 protected void updateEnabledState() { -
src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
old new 266 266 commands)); 267 267 } 268 268 269 DataSet.fireSelectionChanged(sel);269 Main.main.getCurrentDataSet().fireSelectionChanged(); 270 270 selectionChanged(sel); // update whole table 271 271 Main.parent.repaint(); // repaint all - drawing could have been changed 272 272 … … 354 354 if (value.equals("")) 355 355 return; 356 356 Main.main.undoRedo.add(new ChangePropertyCommand(sel, key, value)); 357 DataSet.fireSelectionChanged(sel);357 Main.main.getCurrentDataSet().fireSelectionChanged(); 358 358 selectionChanged(sel); // update table 359 359 Main.parent.repaint(); // repaint all - drawing could have been changed 360 360 } … … 825 825 String key = propertyData.getValueAt(row, 0).toString(); 826 826 Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected(); 827 827 Main.main.undoRedo.add(new ChangePropertyCommand(sel, key, null)); 828 DataSet.fireSelectionChanged(sel);828 Main.main.getCurrentDataSet().fireSelectionChanged(); 829 829 selectionChanged(sel); // update table 830 830 831 831 int rowCount = propertyTable.getRowCount(); … … 851 851 rel.removeMembersFor(primitive); 852 852 } 853 853 Main.main.undoRedo.add(new ChangeCommand(cur, rel)); 854 DataSet.fireSelectionChanged(sel);854 Main.main.getCurrentDataSet().fireSelectionChanged(); 855 855 selectionChanged(sel); // update whole table 856 856 } 857 857 -
src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
old new 203 203 int row = rows[0]; 204 204 OsmPrimitive primitive = getMemberTableModel().getReferredPrimitive(row); 205 205 layer.data.setSelected(primitive); 206 DataSet.fireSelectionChanged(layer.data.getSelected());207 206 AutoScaleAction action = new AutoScaleAction("selection"); 208 207 action.autoScale(); 209 208 } -
src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
old new 882 882 883 883 public void actionPerformed(ActionEvent e) { 884 884 getLayer().data.setSelected(memberTableModel.getSelectedChildPrimitives()); 885 DataSet.fireSelectionChanged(getLayer().data.getSelected());886 885 } 887 886 888 887 public void valueChanged(ListSelectionEvent e) { … … 1005 1004 1006 1005 // make sure everybody is notified about the changes 1007 1006 // 1008 DataSet.fireSelectionChanged(getLayer().data.getSelected());1007 getLayer().data.fireSelectionChanged(); 1009 1008 getLayer().fireDataChange(); 1010 1009 GenericRelationEditor.this.setRelation(newRelation); 1011 1010 RelationDialogManager.getRelationDialogManager().updateContext( … … 1038 1037 tagEditorPanel.getModel().applyToPrimitive(editedRelation); 1039 1038 memberTableModel.applyToRelation(editedRelation); 1040 1039 Main.main.undoRedo.add(new ChangeCommand(getRelation(), editedRelation)); 1041 DataSet.fireSelectionChanged(getLayer().data.getSelected());1040 getLayer().data.fireSelectionChanged(); 1042 1041 getLayer().fireDataChange(); 1043 1042 // this will refresh the snapshot and update the dialog title 1044 1043 // -
src/org/openstreetmap/josm/gui/MapView.java
old new 502 502 if (! (layer instanceof OsmDataLayer)) { 503 503 if (getCurrentDataSet() != null) { 504 504 getCurrentDataSet().setSelected(); 505 DataSet.fireSelectionChanged(getCurrentDataSet().getSelected());505 getCurrentDataSet().fireSelectionChanged(); 506 506 } 507 507 } 508 508 Layer old = activeLayer; -
src/org/openstreetmap/josm/gui/MapStatus.java
old new 332 332 ds.addSelected(nextSelected); 333 333 } 334 334 } 335 DataSet.fireSelectionChanged(ds.getSelected());335 ds.fireSelectionChanged(); 336 336 } 337 337 338 338 /** … … 462 462 DataSet ds = Main.main.getCurrentDataSet(); 463 463 // Let the user toggle the selection 464 464 ds.toggleSelected(osm); 465 DataSet.fireSelectionChanged(ds.getSelected());466 465 l.validate(); 467 466 } 468 467 }); -
src/org/openstreetmap/josm/gui/io/UploadLayerTask.java
old new 143 143 if (isCancelled()) 144 144 return; 145 145 layer.cleanupAfterUpload(processedPrimitives); 146 DataSet.fireSelectionChanged(layer.data.getSelected());146 layer.data.fireSelectionChanged();; 147 147 layer.fireDataChange(); 148 148 layer.onPostUploadToServer(); 149 149 … … 158 158 writer.cancel(); 159 159 } 160 160 } 161 } 162 No newline at end of file 161 } -
src/org/openstreetmap/josm/data/UndoRedoHandler.java
old new 49 49 fireCommandsChanged(); 50 50 51 51 // the command may have changed the selection so tell the listeners about the current situation 52 DataSet.fireSelectionChanged(Main.main.getCurrentDataSet().getSelected());52 Main.main.getCurrentDataSet().fireSelectionChanged(); 53 53 } 54 54 55 55 /**