1 17 package org.columba.core.gui.statusbar; 18 19 import java.awt.BorderLayout ; 20 import java.awt.Color ; 21 import java.awt.Component ; 22 import java.awt.Dimension ; 23 import java.awt.GridBagConstraints ; 24 import java.awt.GridBagLayout ; 25 import java.awt.GridLayout ; 26 import java.awt.event.ActionEvent ; 27 import java.awt.event.ActionListener ; 28 import java.awt.event.KeyEvent ; 29 30 import javax.swing.BorderFactory ; 31 import javax.swing.Box ; 32 import javax.swing.DefaultListModel ; 33 import javax.swing.JButton ; 34 import javax.swing.JComponent ; 35 import javax.swing.JDialog ; 36 import javax.swing.JFrame ; 37 import javax.swing.JList ; 38 import javax.swing.JPanel ; 39 import javax.swing.JScrollPane ; 40 import javax.swing.KeyStroke ; 41 import javax.swing.SwingConstants ; 42 import javax.swing.SwingUtilities ; 43 import javax.swing.event.ListSelectionEvent ; 44 import javax.swing.event.ListSelectionListener ; 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 64 public class TaskManagerDialog extends JDialog implements TaskManagerListener, 65 ActionListener , IWorkerStatusChangeListener, ListSelectionListener { 66 67 private static TaskManagerDialog instance; 68 69 private TaskManager taskManager; 70 71 private JButton cancelButton; 72 73 private JButton killButton; 74 75 private JList list; 76 77 public TaskManagerDialog(TaskManager tm) { 78 super((JFrame ) 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 mainPanel = new JPanel (new BorderLayout ()); 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 gridBagLayout = new GridBagLayout (); 117 GridBagConstraints c = new GridBagConstraints (); 118 119 JPanel eastPanel = new JPanel (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 137 138 Component 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 JPanel centerPanel = new JPanel (new BorderLayout ()); 147 centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 6)); 148 DefaultListModel model = new DefaultListModel (); 149 Worker[] workers = taskManager.getWorkers(); 150 for (int i = 0; i < workers.length; i++) { 151 model.addElement(workers[i]); 152 } 153 list = new JList (model); 154 list.setCellRenderer(new TaskRenderer()); 155 list.getSelectionModel().addListSelectionListener(this); 156 157 JScrollPane scrollPane = new JScrollPane (list); 158 scrollPane.setPreferredSize(new Dimension (300, 250)); 159 scrollPane.getViewport().setBackground(Color.white); 160 centerPanel.add(scrollPane); 161 162 mainPanel.add(centerPanel); 163 164 JPanel bottomPanel = new JPanel (new BorderLayout ()); 165 bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 166 167 JPanel buttonPanel = new JPanel (new GridLayout (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"); 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 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 e) { 194 String 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 () { 209 public void run() { 210 Worker worker = e.getWorker(); 211 212 worker.addWorkerStatusChangeListener(TaskManagerDialog.this); 213 214 ((DefaultListModel ) list.getModel()).addElement(e.getWorker()); 215 } 216 }); 217 } 218 219 public void workerRemoved(final TaskManagerEvent e) { 220 SwingUtilities.invokeLater(new Runnable () { 221 public void run() { 222 Worker worker = e.getWorker(); 223 224 ((DefaultListModel ) 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 () { 250 public void run() { 251 DefaultListModel m = ((DefaultListModel ) 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 265 public void valueChanged(ListSelectionEvent 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 |