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

Last change on this file since 2657 was 2224, checked in by stoecker, 15 years ago

see #3550 - patch by bastiK - allow resizing right handside dialogs, updated i18n

  • Property svn:eol-style set to native
File size: 3.3 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.gui.dialogs;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.BorderLayout;
7import java.awt.Component;
8import java.awt.event.KeyEvent;
9import java.util.Collection;
10
11import javax.swing.JLabel;
12import javax.swing.JScrollPane;
13import javax.swing.JTree;
14import javax.swing.tree.DefaultMutableTreeNode;
15import javax.swing.tree.DefaultTreeCellRenderer;
16import javax.swing.tree.DefaultTreeModel;
17
18import org.openstreetmap.josm.Main;
19import org.openstreetmap.josm.command.Command;
20import org.openstreetmap.josm.gui.MapFrame;
21import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener;
22import org.openstreetmap.josm.tools.Shortcut;
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(tr("Command Stack"), "commandstack", tr("Open a list of all commands (undo buffer)."),
31 Shortcut.registerShortcut("subwindow:commandstack", tr("Toggle: {0}", tr("Command Stack")), KeyEvent.VK_O, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 100, true);
32 Main.main.undoRedo.listenerCommands.add(this);
33
34 tree.setRootVisible(false);
35 tree.setShowsRootHandles(true);
36 tree.expandRow(0);
37 tree.setCellRenderer(new DefaultTreeCellRenderer(){
38 @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
39 super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
40 DefaultMutableTreeNode v = (DefaultMutableTreeNode)value;
41 if (v.getUserObject() instanceof JLabel) {
42 JLabel l = (JLabel)v.getUserObject();
43 setIcon(l.getIcon());
44 setText(l.getText());
45 }
46 return this;
47 }
48 });
49 tree.setVisibleRowCount(8);
50 add(new JScrollPane(tree), BorderLayout.CENTER);
51 }
52
53 @Override public void setVisible(boolean v) {
54 if (v) {
55 buildList();
56 } else if (tree != null) {
57 treeModel.setRoot(new DefaultMutableTreeNode());
58 }
59 super.setVisible(v);
60 }
61
62 private void buildList() {
63 if(Main.main.undoRedo.commands.size() != 0) {
64 setTitle(tr("Command Stack: {0}", Main.main.undoRedo.commands.size()));
65 } else {
66 setTitle(tr("Command Stack"));
67 }
68 if (Main.map == null || Main.map.mapView == null || Main.map.mapView.getEditLayer() == null)
69 return;
70 Collection<Command> commands = Main.main.undoRedo.commands;
71 DefaultMutableTreeNode root = new DefaultMutableTreeNode();
72 for (Command c : commands) {
73 root.add(c.description());
74 }
75 treeModel.setRoot(root);
76 tree.scrollRowToVisible(treeModel.getChildCount(root)-1);
77 }
78
79 public void commandChanged(int queueSize, int redoSize) {
80 if (!isVisible())
81 return;
82 treeModel.setRoot(new DefaultMutableTreeNode());
83 buildList();
84 }
85}
Note: See TracBrowser for help on using the repository browser.