Changeset 13729 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
- Timestamp:
- 2018-05-11T23:39:43+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
r12866 r13729 33 33 import javax.swing.tree.DefaultTreeCellRenderer; 34 34 import javax.swing.tree.DefaultTreeModel; 35 import javax.swing.tree.MutableTreeNode; 35 36 import javax.swing.tree.TreePath; 36 37 import javax.swing.tree.TreeSelectionModel; … … 39 40 import org.openstreetmap.josm.command.Command; 40 41 import org.openstreetmap.josm.command.PseudoCommand; 41 import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueListener; 42 import org.openstreetmap.josm.data.UndoRedoHandler.CommandAddedEvent; 43 import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueCleanedEvent; 44 import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueuePreciseListener; 45 import org.openstreetmap.josm.data.UndoRedoHandler.CommandRedoneEvent; 46 import org.openstreetmap.josm.data.UndoRedoHandler.CommandUndoneEvent; 42 47 import org.openstreetmap.josm.data.osm.DataSet; 43 48 import org.openstreetmap.josm.data.osm.OsmPrimitive; … … 56 61 * @since 94 57 62 */ 58 public class CommandStackDialog extends ToggleDialog implements CommandQueue Listener {63 public class CommandStackDialog extends ToggleDialog implements CommandQueuePreciseListener { 59 64 60 65 private final DefaultTreeModel undoTreeModel = new DefaultTreeModel(new DefaultMutableTreeNode()); … … 63 68 private final JTree undoTree = new JTree(undoTreeModel); 64 69 private final JTree redoTree = new JTree(redoTreeModel); 70 71 private DefaultMutableTreeNode undoRoot; 72 private DefaultMutableTreeNode redoRoot; 65 73 66 74 private final transient UndoRedoSelectionListener undoSelectionListener; … … 229 237 listener.updateEnabledState(); 230 238 } 231 MainApplication.undoRedo.addCommandQueue Listener(this);239 MainApplication.undoRedo.addCommandQueuePreciseListener(this); 232 240 } 233 241 … … 243 251 @Override 244 252 public void hideNotify() { 245 undoTreeModel.setRoot( new DefaultMutableTreeNode());246 redoTreeModel.setRoot( new DefaultMutableTreeNode());247 MainApplication.undoRedo.removeCommandQueue Listener(this);253 undoTreeModel.setRoot(undoRoot = new DefaultMutableTreeNode()); 254 redoTreeModel.setRoot(redoRoot = new DefaultMutableTreeNode()); 255 MainApplication.undoRedo.removeCommandQueuePreciseListener(this); 248 256 } 249 257 … … 254 262 private void buildTrees() { 255 263 setTitle(tr("Command Stack")); 256 if (MainApplication.getLayerManager().getEditLayer() == null) 257 return; 258 264 buildUndoTree(); 265 buildRedoTree(); 266 ensureTreesConsistency(); 267 } 268 269 private void buildUndoTree() { 259 270 List<Command> undoCommands = MainApplication.undoRedo.commands; 260 DefaultMutableTreeNodeundoRoot = new DefaultMutableTreeNode();271 undoRoot = new DefaultMutableTreeNode(); 261 272 for (int i = 0; i < undoCommands.size(); ++i) { 262 273 undoRoot.add(getNodeForCommand(undoCommands.get(i), i)); 263 274 } 264 275 undoTreeModel.setRoot(undoRoot); 265 276 } 277 278 private void buildRedoTree() { 266 279 List<Command> redoCommands = MainApplication.undoRedo.redoCommands; 267 DefaultMutableTreeNoderedoRoot = new DefaultMutableTreeNode();280 redoRoot = new DefaultMutableTreeNode(); 268 281 for (int i = 0; i < redoCommands.size(); ++i) { 269 282 redoRoot.add(getNodeForCommand(redoCommands.get(i), i)); 270 283 } 271 284 redoTreeModel.setRoot(redoRoot); 285 } 286 287 private void ensureTreesConsistency() { 288 List<Command> undoCommands = MainApplication.undoRedo.commands; 289 List<Command> redoCommands = MainApplication.undoRedo.redoCommands; 272 290 if (redoTreeModel.getChildCount(redoRoot) > 0) { 273 291 redoTree.scrollRowToVisible(0); … … 342 360 343 361 @Override 344 public void commandChanged(int queueSize, int redoSize) { 345 if (!isVisible()) 346 return; 347 buildTrees(); 362 public void cleaned(CommandQueueCleanedEvent e) { 363 if (isVisible()) { 364 buildTrees(); 365 } 366 } 367 368 @Override 369 public void commandAdded(CommandAddedEvent e) { 370 if (isVisible()) { 371 undoRoot.add(getNodeForCommand(e.getCommand(), undoRoot.getChildCount())); 372 undoTreeModel.nodeStructureChanged(undoRoot); 373 ensureTreesConsistency(); 374 } 375 } 376 377 @Override 378 public void commandUndone(CommandUndoneEvent e) { 379 if (isVisible()) { 380 swapNode(undoTreeModel, undoRoot, undoRoot.getChildCount() - 1, redoTreeModel, redoRoot, 0); 381 } 382 } 383 384 @Override 385 public void commandRedone(CommandRedoneEvent e) { 386 if (isVisible()) { 387 swapNode(redoTreeModel, redoRoot, 0, undoTreeModel, undoRoot, undoRoot.getChildCount()); 388 } 389 } 390 391 private void swapNode(DefaultTreeModel srcModel, DefaultMutableTreeNode srcRoot, int srcIndex, 392 DefaultTreeModel dstModel, DefaultMutableTreeNode dstRoot, int dstIndex) { 393 MutableTreeNode node = (MutableTreeNode) srcRoot.getChildAt(srcIndex); 394 srcRoot.remove(node); 395 srcModel.nodeStructureChanged(srcRoot); 396 dstRoot.insert(node, dstIndex); 397 dstModel.nodeStructureChanged(dstRoot); 398 ensureTreesConsistency(); 348 399 } 349 400
Note:
See TracChangeset
for help on using the changeset viewer.