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

Last change on this file since 1331 was 1228, checked in by ulfl, 15 years ago

Improve panels on the right side:
a) add a normal/minimized display mechanism, with "triangle icon"
b) display number of active items in title
c) show title bold if panel has "active items"
d) add close "X" button

(b and c currently not implemented in the various plugins - but easy to do so)

  • Property svn:eol-style set to native
File size: 3.2 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), 100);
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 super.setVisible(v);
59 }
60
61 private void buildList() {
62 if(Main.main.undoRedo.commands.size() != 0) {
63 setTitle(tr("Command Stack: {0}", Main.main.undoRedo.commands.size()), true);
64 } else {
65 setTitle(tr("Command Stack"), false);
66 }
67 if (Main.map == null || Main.map.mapView == null || Main.map.mapView.editLayer == null)
68 return;
69 Collection<Command> commands = Main.main.undoRedo.commands;
70 DefaultMutableTreeNode root = new DefaultMutableTreeNode();
71 for (Command c : commands)
72 root.add(c.description());
73 treeModel.setRoot(root);
74 tree.scrollRowToVisible(treeModel.getChildCount(root)-1);
75 }
76
77 public void commandChanged(int queueSize, int redoSize) {
78 if (!isVisible())
79 return;
80 treeModel.setRoot(new DefaultMutableTreeNode());
81 buildList();
82 }
83}
Note: See TracBrowser for help on using the repository browser.