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

Last change on this file since 100 was 100, checked in by imi, 18 years ago
  • fixed JOSM crash when importing GeoImages on layers without timestamp
  • fixed merging: incomplete segments do not overwrite complete on ways
  • fixed focus when entering the popups from PropertyDialog
  • fixed broken "draw lines between gps points"
  • added doubleclick on bookmarklist
  • added background color configuration
  • added GpxImport to import 1.0 and 1.1 GPX files

This is release JOSM 1.3

File size: 3.3 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 if (oldLayer instanceof OsmDataLayer)
40 Main.main.editLayer().listenerCommands.remove(CommandStackDialog.this);
41 }
42 });
43 if (mapFrame.mapView.editLayer != null)
44 mapFrame.mapView.editLayer.listenerCommands.add(this);
45
46 tree.setRootVisible(false);
47 tree.setShowsRootHandles(true);
48 tree.expandRow(0);
49 tree.setCellRenderer(new DefaultTreeCellRenderer(){
50 @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
51 super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
52 DefaultMutableTreeNode v = (DefaultMutableTreeNode)value;
53 if (v.getUserObject() instanceof JLabel) {
54 JLabel l = (JLabel)v.getUserObject();
55 setIcon(l.getIcon());
56 setText(l.getText());
57 }
58 return this;
59 }
60 });
61 tree.setVisibleRowCount(8);
62 add(new JScrollPane(tree), BorderLayout.CENTER);
63 }
64
65 @Override public void setVisible(boolean v) {
66 if (v)
67 buildList();
68 else if (tree != null)
69 treeModel.setRoot(new DefaultMutableTreeNode());
70 super.setVisible(v);
71 }
72
73 private void buildList() {
74 if (Main.map == null || Main.map.mapView == null || Main.map.mapView.editLayer == null)
75 return;
76 Collection<Command> commands = Main.main.editLayer().commands;
77 DefaultMutableTreeNode root = new DefaultMutableTreeNode();
78 for (Command c : commands)
79 root.add(c.description());
80 treeModel.setRoot(root);
81 tree.scrollRowToVisible(treeModel.getChildCount(root)-1);
82 }
83
84 public void commandChanged(int queueSize, int redoSize) {
85 if (!isVisible())
86 return;
87 treeModel.setRoot(new DefaultMutableTreeNode());
88 buildList();
89 }
90}
Note: See TracBrowser for help on using the repository browser.