1 17 package org.columba.core.gui.statusbar; 18 19 import java.awt.Component ; 20 import java.awt.Insets ; 21 import java.awt.event.ActionEvent ; 22 import java.awt.event.ActionListener ; 23 24 import javax.swing.BorderFactory ; 25 import javax.swing.Icon ; 26 import javax.swing.JButton ; 27 import javax.swing.JLabel ; 28 import javax.swing.JProgressBar ; 29 import javax.swing.Timer ; 30 import javax.swing.event.ChangeEvent ; 31 import javax.swing.event.ChangeListener ; 32 33 import org.columba.api.command.IWorkerStatusController; 34 import org.columba.api.statusbar.IStatusBar; 35 import org.columba.api.statusbar.IStatusBarExtension; 36 import org.columba.core.command.TaskManager; 37 import org.columba.core.command.TaskManagerEvent; 38 import org.columba.core.command.TaskManagerListener; 39 import org.columba.core.command.Worker; 40 import org.columba.core.connectionstate.ConnectionStateImpl; 41 import org.columba.core.gui.base.JStatusBar; 42 import org.columba.core.resourceloader.IconKeys; 43 import org.columba.core.resourceloader.ImageLoader; 44 45 74 public class StatusBar extends JStatusBar implements TaskManagerListener, 75 ActionListener , ChangeListener , IStatusBar { 76 77 80 private static final int UPDATE_TIMER_INTERVAL = 10; 81 82 86 private static final int CLEAR_TIMER_DELAY = 2000; 87 88 91 private static final int ADDWORKER_TIMER_INTERVAL = 2000; 92 93 protected static Icon onlineIcon = ImageLoader.getSmallIcon(IconKeys.ONLINE); 94 95 protected static Icon offlineIcon = ImageLoader.getSmallIcon(IconKeys.OFFLINE); 96 97 100 private JLabel label; 101 102 105 private JProgressBar progressBar; 106 107 108 109 112 114 117 private Worker displayedWorker; 118 119 122 private TaskManager taskManager; 123 124 127 private JButton onlineButton; 128 129 130 private Timer clearTextTimer; 131 132 136 private Timer updateTimer; 137 138 private Timer addWorkerTimer; 139 140 143 private String lastMessage; 144 145 private TaskManagerEvent currentEvent; 146 147 public StatusBar(TaskManager tm) { 148 super(); 149 150 taskManager = tm; 151 tm.addTaskManagerListener(this); 152 ConnectionStateImpl.getInstance().addChangeListener(this); 153 154 156 initComponents(); 157 158 160 stateChanged(null); 162 163 clearTextTimer = new Timer (CLEAR_TIMER_DELAY, this); 164 165 updateTimer = new Timer (UPDATE_TIMER_INTERVAL, this); 167 169 addWorkerTimer = new Timer (ADDWORKER_TIMER_INTERVAL, this); 170 171 } 172 173 176 private void initComponents() { 177 178 label = new JLabel (""); 179 label.setAlignmentX(Component.LEFT_ALIGNMENT); 180 181 onlineButton = new JButton (); 182 onlineButton.setMargin(new Insets (0,0,0,0)); 183 onlineButton.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); 184 onlineButton.setRolloverEnabled(true); 185 onlineButton.setActionCommand("ONLINE"); 186 onlineButton.addActionListener(this); 187 188 progressBar = new JProgressBar (0, 100); 189 190 progressBar.setStringPainted(false); 191 progressBar.setBorderPainted(false); 192 progressBar.setValue(0); 193 194 203 setMainLeftComponent(label); 204 205 addRightComponent(progressBar, 100); 206 addRightComponent(onlineButton, 30); 208 } 209 210 public void addComponent(IStatusBarExtension ext) { 211 if (ext == null) 212 throw new IllegalArgumentException ("extension == null"); 213 214 addRightComponent(ext.getView()); 215 } 216 217 220 278 public void displayTooltipMessage(String message) { 279 label.setText(message); 280 } 281 282 public void workerAdded(TaskManagerEvent e) { 283 284 if (getDisplayedWorker() == null) { 285 286 currentEvent = e; 287 288 if (taskManager.getWorkers().length == 1) { 289 setDisplayedWorker(currentEvent.getWorker()); 290 291 updateTimer.restart(); 293 294 addWorkerTimer.stop(); 295 } else { 296 297 addWorkerTimer.restart(); 298 } 299 300 } 301 } 302 303 public void workerRemoved(TaskManagerEvent e) { 304 305 if (e.getWorker() == displayedWorker) { 306 307 lastMessage = e.getWorker().getDisplayText(); 309 310 313 Worker[] workers = taskManager.getWorkers(); 314 setDisplayedWorker(workers.length > 0 ? workers[0] : null); 315 } 316 317 if (taskManager.getWorkers().length == 0) { 319 320 updateTimer.stop(); 322 323 label.setText(lastMessage); 325 326 clearTextTimer.restart(); 328 } 329 330 } 331 332 public void actionPerformed(ActionEvent e) { 333 if (e.getSource() == updateTimer) { 334 updateGui(); 336 return; 337 } 338 339 if (e.getSource() == clearTextTimer) { 340 341 label.setText(""); 343 344 clearTextTimer.stop(); 346 347 return; 348 } 349 350 if (e.getSource() == addWorkerTimer) { 351 352 if (taskManager.exists(currentEvent.getWorker())) { 353 354 setDisplayedWorker(currentEvent.getWorker()); 355 356 updateTimer.restart(); 358 359 addWorkerTimer.stop(); 360 361 return; 362 } else { 363 364 addWorkerTimer.stop(); 365 return; 366 } 367 } 368 369 String command = e.getActionCommand(); 370 371 if (command.equals("ONLINE")) { 372 ConnectionStateImpl.getInstance().setOnline( 373 !ConnectionStateImpl.getInstance().isOnline()); 374 } else if (command.equals("TASKMANAGER")) { 375 TaskManagerDialog.createInstance(); 376 } else if (command.equals("CANCEL_ACTION")) { 377 displayedWorker.cancel(); 378 } 379 } 380 381 386 private void updateGui() { 387 389 if (displayedWorker != null) { 390 label.setText(displayedWorker.getDisplayText()); 391 progressBar.setValue(displayedWorker.getProgressBarValue()); 392 progressBar.setMaximum(displayedWorker.getProgessBarMaximum()); 393 } 394 395 } 396 397 400 protected void setDisplayedWorker(Worker w) { 401 displayedWorker = w; 402 403 } 404 405 408 public IWorkerStatusController getDisplayedWorker() { 409 return displayedWorker; 410 } 411 412 415 public TaskManager getTaskManager() { 416 return taskManager; 417 } 418 419 public void stateChanged(ChangeEvent e) { 420 if (ConnectionStateImpl.getInstance().isOnline()) { 421 onlineButton.setIcon(onlineIcon); 422 onlineButton.setToolTipText("You are in ONLINE state"); 424 } else { 425 onlineButton.setIcon(offlineIcon); 426 onlineButton.setToolTipText("You are in OFFLINE state"); 428 } 429 } 430 } | Popular Tags |