### 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 | |