3 import java.awt.FlowLayout;
4 import java.awt.BorderLayout;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
7 import javax.swing.BorderFactory;
8 import javax.swing.JButton;
9 import javax.swing.JDialog;
10 import javax.swing.JFrame;
11 import javax.swing.JLabel;
12 import javax.swing.JList;
13 import javax.swing.JPanel;
14 import javax.swing.JScrollPane;
15 import javax.swing.ListSelectionModel;
16 import javax.swing.event.ListSelectionEvent;
17 import javax.swing.event.ListSelectionListener;
20 import tim.prune.I18nManager;
21 import tim.prune.undo.UndoStack;
24 * Class to manage the selection of actions to undo
26 public class UndoManager
28 private App _app = null;
29 private JFrame _parentFrame = null;
30 private JDialog _dialog = null;
31 private JList<String> _actionList = null;
36 * @param inApp App object
37 * @param inFrame parent frame
39 public UndoManager(App inApp, JFrame inFrame)
42 _parentFrame = inFrame;
46 * Show the dialog to select which actions to undo
50 _dialog = new JDialog(_parentFrame, I18nManager.getText("dialog.undo.title"), true);
51 _dialog.setLocationRelativeTo(_parentFrame);
52 JPanel mainPanel = new JPanel();
53 mainPanel.setLayout(new BorderLayout(3, 3));
54 mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
55 UndoStack undoStack = _app.getUndoStack();
56 mainPanel.add(new JLabel(I18nManager.getText("dialog.undo.pretext")), BorderLayout.NORTH);
58 String[] undoActions = new String[undoStack.size()];
59 for (int i=0; i<undoStack.size(); i++)
61 undoActions[i] = undoStack.getOperationAt(undoStack.size()-1-i).getDescription();
63 _actionList = new JList<String>(undoActions);
64 _actionList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
65 _actionList.setSelectedIndex(0);
66 _actionList.addListSelectionListener(new ListSelectionListener()
68 public void valueChanged(ListSelectionEvent e)
70 if (_actionList.getMinSelectionIndex() > 0)
72 _actionList.setSelectionInterval(0, _actionList.getMaxSelectionIndex());
76 mainPanel.add(new JScrollPane(_actionList), BorderLayout.CENTER);
78 JPanel buttonPanel = new JPanel();
79 buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
80 JButton okButton = new JButton(I18nManager.getText("button.ok"));
81 okButton.addActionListener(new ActionListener()
83 public void actionPerformed(ActionEvent e)
85 _app.undoActions(_actionList.getMaxSelectionIndex() + 1);
89 buttonPanel.add(okButton);
90 JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
91 cancelButton.addActionListener(new ActionListener()
93 public void actionPerformed(ActionEvent e)
98 buttonPanel.add(cancelButton);
99 mainPanel.add(buttonPanel, BorderLayout.SOUTH);
100 _dialog.getContentPane().add(mainPanel);
102 _dialog.setVisible(true);