source: josm/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java@ 99

Last change on this file since 99 was 99, checked in by imi, 18 years ago
  • added GeoImage feature (showing images on a tracklog)
  • added zoom slider
  • added Escape cancels selection rectangle
  • added "Save password" option to Auth-dialog
  • fixed that redo/undo buttons were not enabled
  • fixed hotkeys beeing inaccessible when no data is loaded
File size: 3.0 KB
Line 
1package org.openstreetmap.josm.gui.dialogs;
2
3import java.awt.BorderLayout;
4import java.awt.Component;
5import java.awt.Dimension;
6import java.awt.event.KeyEvent;
7import java.util.Collection;
8
9import javax.swing.JLabel;
10import javax.swing.JScrollPane;
11import javax.swing.JTree;
12import javax.swing.tree.DefaultMutableTreeNode;
13import javax.swing.tree.DefaultTreeCellRenderer;
14import javax.swing.tree.DefaultTreeModel;
15
16import org.openstreetmap.josm.Main;
17import org.openstreetmap.josm.command.Command;
18import org.openstreetmap.josm.gui.MapFrame;
19import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
20import org.openstreetmap.josm.gui.layer.Layer;
21import org.openstreetmap.josm.gui.layer.OsmDataLayer;
22import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
23
24public class CommandStackDialog extends ToggleDialog implements CommandQueueListener {
25
26 private DefaultTreeModel treeModel = new DefaultTreeModel(new DefaultMutableTreeNode());
27 private JTree tree = new JTree(treeModel);
28
29 public CommandStackDialog(final MapFrame mapFrame) {
30 super("Command Stack", "commandstack", "Open a list of all commands (undo buffer).", KeyEvent.VK_C);
31 setPreferredSize(new Dimension(320,100));
32 mapFrame.mapView.addLayerChangeListener(new LayerChangeListener(){
33 public void activeLayerChange(Layer oldLayer, Layer newLayer) {}
34 public void layerAdded(Layer newLayer) {
35 if (newLayer instanceof OsmDataLayer)
36 Main.main.editLayer().listenerCommands.add(CommandStackDialog.this);
37 }
38 public void layerRemoved(Layer oldLayer) {}
39 });
40 if (mapFrame.mapView.editLayer != null)
41 mapFrame.mapView.editLayer.listenerCommands.add(this);
42
43 tree.setRootVisible(false);
44 tree.setShowsRootHandles(true);
45 tree.expandRow(0);
46 tree.setCellRenderer(new DefaultTreeCellRenderer(){
47 @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
48 super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
49 DefaultMutableTreeNode v = (DefaultMutableTreeNode)value;
50 if (v.getUserObject() instanceof JLabel) {
51 JLabel l = (JLabel)v.getUserObject();
52 setIcon(l.getIcon());
53 setText(l.getText());
54 }
55 return this;
56 }
57 });
58 tree.setVisibleRowCount(8);
59 add(new JScrollPane(tree), BorderLayout.CENTER);
60 }
61
62 @Override public void setVisible(boolean v) {
63 if (v)
64 buildList();
65 else if (tree != null)
66 treeModel.setRoot(new DefaultMutableTreeNode());
67 super.setVisible(v);
68 }
69
70 private void buildList() {
71 Collection<Command> commands = Main.main.editLayer().commands;
72 DefaultMutableTreeNode root = new DefaultMutableTreeNode();
73 for (Command c : commands)
74 root.add(c.description());
75 treeModel.setRoot(root);
76 }
77
78 public void commandChanged(int queueSize, int redoSize) {
79 if (!isVisible())
80 return;
81 treeModel.setRoot(new DefaultMutableTreeNode());
82 buildList();
83 }
84}
Note: See TracBrowser for help on using the repository browser.