### Eclipse Workspace Patch 1.0
#P JOSM
|
|
|
21 | 21 | import java.util.Iterator; |
22 | 22 | import java.util.LinkedList; |
23 | 23 | import java.util.Set; |
| 24 | import java.util.Timer; |
| 25 | import java.util.TimerTask; |
24 | 26 | |
25 | 27 | import javax.swing.JOptionPane; |
| 28 | import javax.swing.SwingUtilities; |
26 | 29 | |
27 | 30 | import org.openstreetmap.josm.Main; |
28 | 31 | import org.openstreetmap.josm.actions.MergeNodesAction; |
… |
… |
|
193 | 196 | removeHighlighting(); |
194 | 197 | } |
195 | 198 | |
| 199 | private int saved = 0; |
| 200 | private final Timer requestRepaintTimer = new Timer(); |
| 201 | private final Runnable repaintRunnable = new Runnable() { |
| 202 | @Override |
| 203 | public void run() { |
| 204 | mv.repaint(); |
| 205 | saved--; |
| 206 | System.out.println("repaint!" + saved); |
| 207 | } |
| 208 | }; |
| 209 | |
| 210 | class RequestRepaintTimerTask extends TimerTask { |
| 211 | @Override |
| 212 | public void run() { |
| 213 | |
| 214 | SwingUtilities.invokeLater(repaintRunnable); |
| 215 | |
| 216 | } |
| 217 | } |
| 218 | private TimerTask requestRepaintTimerTask = null; |
| 219 | private void requestRepaint() { |
| 220 | if(requestRepaintTimerTask != null) { |
| 221 | requestRepaintTimerTask.cancel(); |
| 222 | } |
| 223 | saved++; |
| 224 | requestRepaintTimer.purge(); |
| 225 | requestRepaintTimerTask = new RequestRepaintTimerTask(); |
| 226 | requestRepaintTimer.schedule(requestRepaintTimerTask, 25); |
| 227 | } |
| 228 | |
| 229 | private synchronized void requestRepaintNow() { |
| 230 | if(requestRepaintTimerTask != null) { |
| 231 | requestRepaintTimerTask.cancel(); |
| 232 | } |
| 233 | requestRepaintTimer.purge(); |
| 234 | System.out.println("repaint now!"); |
| 235 | mv.repaint(); |
| 236 | } |
| 237 | |
196 | 238 | /** |
197 | 239 | * works out which cursor should be displayed for most of SelectAction's |
198 | 240 | * features. The only exception is the "move" cursor when actually dragging |
… |
… |
|
354 | 396 | // We don't have a mouse event, so we pass the old mouse event but the |
355 | 397 | // new modifiers. |
356 | 398 | if(giveUserFeedback(oldEvent, ((InputEvent) e).getModifiers())) { |
357 | | mv.repaint(); |
| 399 | requestRepaintNow(); |
358 | 400 | } |
359 | 401 | } |
360 | 402 | |
… |
… |
|
403 | 445 | // when dragging a node onto another one and then press CTRL to merge |
404 | 446 | oldEvent = e; |
405 | 447 | if(needsRepaint) { |
406 | | mv.repaint(); |
| 448 | requestRepaintNow(); |
407 | 449 | } |
408 | 450 | } |
409 | 451 | |
… |
… |
|
461 | 503 | return; |
462 | 504 | |
463 | 505 | Command c = !Main.main.undoRedo.commands.isEmpty() |
464 | | ? Main.main.undoRedo.commands.getLast() : null; |
| 506 | ? Main.main.undoRedo.commands.getLast() : null; |
465 | 507 | if (c instanceof SequenceCommand) { |
466 | 508 | c = ((SequenceCommand) c).getLastCommand(); |
467 | 509 | } |
… |
… |
|
503 | 545 | } |
504 | 546 | } |
505 | 547 | |
506 | | mv.repaint(); |
| 548 | requestRepaintNow(); |
507 | 549 | if (mode != Mode.scale) { |
508 | 550 | lastMousePos = e.getPoint(); |
509 | 551 | } |
… |
… |
|
520 | 562 | } |
521 | 563 | oldEvent = e; |
522 | 564 | if(giveUserFeedback(e)) { |
523 | | mv.repaint(); |
| 565 | requestRepaint(); |
524 | 566 | } |
525 | 567 | } |
526 | 568 | |
527 | 569 | @Override |
528 | 570 | public void mouseExited(MouseEvent e) { |
529 | 571 | if(removeHighlighting()) { |
530 | | mv.repaint(); |
| 572 | requestRepaint(); |
531 | 573 | } |
532 | 574 | } |
533 | 575 | |
… |
… |
|
731 | 773 | break; |
732 | 774 | } |
733 | 775 | giveUserFeedback(e); |
734 | | mv.repaint(); |
| 776 | requestRepaintNow(); |
735 | 777 | updateStatusLine(); |
736 | 778 | } |
737 | 779 | |