KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > core > gui > statusbar > TaskManagerDialog


1 //The contents of this file are subject to the Mozilla Public License Version 1.1
2
//(the "License"); you may not use this file except in compliance with the
3
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
4
//
5
//Software distributed under the License is distributed on an "AS IS" basis,
6
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7
//for the specific language governing rights and
8
//limitations under the License.
9
//
10
//The Original Code is "The Columba Project"
11
//
12
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14
//
15
//All Rights Reserved.
16

17 package org.columba.core.gui.statusbar;
18
19 import java.awt.BorderLayout JavaDoc;
20 import java.awt.Color JavaDoc;
21 import java.awt.Component JavaDoc;
22 import java.awt.Dimension JavaDoc;
23 import java.awt.GridBagConstraints JavaDoc;
24 import java.awt.GridBagLayout JavaDoc;
25 import java.awt.GridLayout JavaDoc;
26 import java.awt.event.ActionEvent JavaDoc;
27 import java.awt.event.ActionListener JavaDoc;
28 import java.awt.event.KeyEvent JavaDoc;
29
30 import javax.swing.BorderFactory JavaDoc;
31 import javax.swing.Box JavaDoc;
32 import javax.swing.DefaultListModel JavaDoc;
33 import javax.swing.JButton JavaDoc;
34 import javax.swing.JComponent JavaDoc;
35 import javax.swing.JDialog JavaDoc;
36 import javax.swing.JFrame JavaDoc;
37 import javax.swing.JList JavaDoc;
38 import javax.swing.JPanel JavaDoc;
39 import javax.swing.JScrollPane JavaDoc;
40 import javax.swing.KeyStroke JavaDoc;
41 import javax.swing.SwingConstants JavaDoc;
42 import javax.swing.SwingUtilities JavaDoc;
43 import javax.swing.event.ListSelectionEvent JavaDoc;
44 import javax.swing.event.ListSelectionListener JavaDoc;
45
46 import org.columba.api.command.IWorkerStatusChangeListener;
47 import org.columba.api.command.WorkerStatusChangedEvent;
48 import org.columba.core.command.TaskManager;
49 import org.columba.core.command.TaskManagerEvent;
50 import org.columba.core.command.TaskManagerListener;
51 import org.columba.core.command.Worker;
52 import org.columba.core.gui.base.ButtonWithMnemonic;
53 import org.columba.core.gui.base.SingleSideEtchedBorder;
54 import org.columba.core.help.HelpManager;
55 import org.columba.core.resourceloader.GlobalResourceLoader;
56
57 /**
58  * Dialog showing all running tasks.
59  * <p>
60  * Lets the user cancel or kill tasks.
61  *
62  * @author fdietz
63  */

64 public class TaskManagerDialog extends JDialog JavaDoc implements TaskManagerListener,
65         ActionListener JavaDoc, IWorkerStatusChangeListener, ListSelectionListener JavaDoc {
66
67     private static TaskManagerDialog instance;
68
69     private TaskManager taskManager;
70
71     private JButton JavaDoc cancelButton;
72
73     private JButton JavaDoc killButton;
74
75     private JList JavaDoc list;
76
77     public TaskManagerDialog(TaskManager tm) {
78         super((JFrame JavaDoc) null, "Task Manager", false);
79         this.taskManager = tm;
80
81         initComponents();
82         pack();
83         setLocationRelativeTo(null);
84
85         tm.addTaskManagerListener(this);
86     }
87
88     public static TaskManagerDialog createInstance() {
89         if (instance == null) {
90             instance = new TaskManagerDialog(TaskManager.getInstance());
91         }
92
93         if (!instance.isVisible()) {
94             instance.setVisible(true);
95         }
96         instance.toFront();
97
98         return instance;
99     }
100
101     public void initComponents() {
102         JPanel JavaDoc mainPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
103         mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
104         getContentPane().add(mainPanel);
105
106         cancelButton = new ButtonWithMnemonic("Cancel &Task");
107         cancelButton.setEnabled(false);
108         cancelButton.setActionCommand("CANCEL");
109         cancelButton.addActionListener(this);
110
111         killButton = new ButtonWithMnemonic("Kill");
112         killButton.setActionCommand("KILL");
113         killButton.setEnabled(false);
114         killButton.addActionListener(this);
115
116         GridBagLayout JavaDoc gridBagLayout = new GridBagLayout JavaDoc();
117         GridBagConstraints JavaDoc c = new GridBagConstraints JavaDoc();
118
119         JPanel JavaDoc eastPanel = new JPanel JavaDoc(gridBagLayout);
120         eastPanel.setLayout(gridBagLayout);
121         mainPanel.add(eastPanel, BorderLayout.EAST);
122
123         c.fill = GridBagConstraints.HORIZONTAL;
124         c.weightx = 1.0;
125         c.gridwidth = GridBagConstraints.REMAINDER;
126         gridBagLayout.setConstraints(cancelButton, c);
127         eastPanel.add(cancelButton);
128
129         // disabled Kill button, because feature is not supported
130
/*
131          * Component strut1 = Box.createRigidArea(new Dimension(30, 6));
132          * gridBagLayout.setConstraints(strut1, c); eastPanel.add(strut1);
133          *
134          * gridBagLayout.setConstraints(killButton, c);
135          * eastPanel.add(killButton);
136          */

137
138         Component JavaDoc glue = Box.createVerticalGlue();
139         glue = Box.createVerticalGlue();
140         c.fill = GridBagConstraints.BOTH;
141         c.weighty = 1.0;
142         gridBagLayout.setConstraints(glue, c);
143         eastPanel.add(glue);
144
145         // centerpanel
146
JPanel JavaDoc centerPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
147         centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 6));
148         DefaultListModel JavaDoc model = new DefaultListModel JavaDoc();
149         Worker[] workers = taskManager.getWorkers();
150         for (int i = 0; i < workers.length; i++) {
151             model.addElement(workers[i]);
152         }
153         list = new JList JavaDoc(model);
154         list.setCellRenderer(new TaskRenderer());
155         list.getSelectionModel().addListSelectionListener(this);
156
157         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(list);
158         scrollPane.setPreferredSize(new Dimension JavaDoc(300, 250));
159         scrollPane.getViewport().setBackground(Color.white);
160         centerPanel.add(scrollPane);
161
162         mainPanel.add(centerPanel);
163
164         JPanel JavaDoc bottomPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
165         bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
166
167         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(new GridLayout JavaDoc(1, 2, 6, 0));
168         buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
169
170         ButtonWithMnemonic closeButton = new ButtonWithMnemonic(
171                 GlobalResourceLoader.getString("", "global", "close"));
172         closeButton.setActionCommand("CLOSE"); //$NON-NLS-1$
173
closeButton.addActionListener(this);
174         buttonPanel.add(closeButton);
175
176         ButtonWithMnemonic helpButton = new ButtonWithMnemonic(
177                 GlobalResourceLoader.getString("", "global", "help"));
178         buttonPanel.add(helpButton);
179         bottomPanel.add(buttonPanel, BorderLayout.EAST);
180         getContentPane().add(bottomPanel, BorderLayout.SOUTH);
181         getRootPane().setDefaultButton(closeButton);
182         getRootPane().registerKeyboardAction(this, "CLOSE",
183                 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
184                 JComponent.WHEN_IN_FOCUSED_WINDOW);
185
186         // associate with JavaHelp
187
HelpManager.getInstance().enableHelpOnButton(helpButton,
188                 "organising_and_managing_your_email_3");
189         HelpManager.getInstance().enableHelpKey(getRootPane(),
190                 "organising_and_managing_your_email_3");
191     }
192
193     public void actionPerformed(ActionEvent JavaDoc e) {
194         String JavaDoc action = e.getActionCommand();
195
196         if (action.equals("CLOSE")) {
197             setVisible(false);
198         } else if (action.equals("CANCEL")) {
199             Worker worker = (Worker) list.getSelectedValue();
200             worker.setCancel(true);
201
202         } else if (action.equals("KILL")) {
203
204         }
205     }
206
207     public void workerAdded(final TaskManagerEvent e) {
208         SwingUtilities.invokeLater(new Runnable JavaDoc() {
209             public void run() {
210                 Worker worker = e.getWorker();
211
212                 worker.addWorkerStatusChangeListener(TaskManagerDialog.this);
213
214                 ((DefaultListModel JavaDoc) list.getModel()).addElement(e.getWorker());
215             }
216         });
217     }
218
219     public void workerRemoved(final TaskManagerEvent e) {
220         SwingUtilities.invokeLater(new Runnable JavaDoc() {
221             public void run() {
222                 Worker worker = e.getWorker();
223
224                 ((DefaultListModel JavaDoc) list.getModel()).removeElement(worker);
225             }
226         });
227     }
228
229     public void workerStatusChanged(WorkerStatusChangedEvent e) {
230         final WorkerStatusChangedEvent event = e;
231
232         switch (e.getType()) {
233
234         case WorkerStatusChangedEvent.DISPLAY_TEXT_CHANGED:
235             break;
236
237         case WorkerStatusChangedEvent.DISPLAY_TEXT_CLEARED:
238             break;
239
240         case WorkerStatusChangedEvent.PROGRESSBAR_MAX_CHANGED:
241             break;
242
243         case WorkerStatusChangedEvent.PROGRESSBAR_VALUE_CHANGED:
244             break;
245
246         case WorkerStatusChangedEvent.FINISHED:
247         }
248
249         SwingUtilities.invokeLater(new Runnable JavaDoc() {
250             public void run() {
251                 // force repaint
252
DefaultListModel JavaDoc m = ((DefaultListModel JavaDoc) list.getModel());
253                 int index = m.indexOf(event.getSource());
254                 if (index != -1)
255                     m.setElementAt(event.getSource(), index);
256
257             }
258         });
259
260     }
261
262     /**
263      * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
264      */

265     public void valueChanged(ListSelectionEvent JavaDoc ev) {
266         if (ev.getValueIsAdjusting())
267             return;
268
269         if (list.getSelectedIndex() != -1)
270             cancelButton.setEnabled(true);
271         else
272             cancelButton.setEnabled(false);
273
274     }
275 }
Popular Tags