1 19 package org.columba.mail.gui.util; 20 21 import java.awt.BorderLayout ; 22 import java.awt.Dimension ; 23 import java.awt.HeadlessException ; 24 import java.awt.event.ActionEvent ; 25 import java.awt.event.ActionListener ; 26 27 import javax.swing.BorderFactory ; 28 import javax.swing.JButton ; 29 import javax.swing.JDialog ; 30 import javax.swing.JFrame ; 31 import javax.swing.JLabel ; 32 import javax.swing.JPanel ; 33 import javax.swing.JProgressBar ; 34 35 import org.columba.api.command.IWorkerStatusChangeListener; 36 import org.columba.api.command.IWorkerStatusController; 37 import org.columba.api.command.WorkerStatusChangedEvent; 38 import org.columba.core.command.Command; 39 import org.columba.core.gui.base.ButtonWithMnemonic; 40 import org.columba.mail.resourceloader.MailImageLoader; 41 42 53 public class SendMessageDialog extends JDialog implements 54 IWorkerStatusChangeListener, ActionListener { 55 private JProgressBar progressBar; 56 57 private JButton cancelButton; 58 59 private JLabel label; 60 61 private IWorkerStatusController worker; 62 63 67 public SendMessageDialog(IWorkerStatusController worker) 68 throws HeadlessException { 69 super(new JFrame (), "Sending message...", false); 70 71 setWorker(worker); 72 73 initComponents(); 74 layoutComponents(); 75 pack(); 76 setLocationRelativeTo(null); 77 setVisible(true); 78 } 79 80 protected void initComponents() { 81 label = new JLabel ("Sending message..."); 82 label.setIcon(MailImageLoader.getIcon("send.png")); 83 84 progressBar = new JProgressBar (); 85 progressBar.setPreferredSize(new Dimension (300, 20)); 86 87 cancelButton = new ButtonWithMnemonic("&Cancel"); 88 cancelButton.setActionCommand("CANCEL"); 89 cancelButton.addActionListener(this); 90 } 91 92 protected void layoutComponents() { 93 JPanel panel = new JPanel (); 94 panel.setLayout(new BorderLayout ()); 95 panel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 96 97 getContentPane().add(panel); 98 99 JPanel top = new JPanel (); 100 top.setBorder(BorderFactory.createEmptyBorder(0, 12, 6, 0)); 101 top.setLayout(new BorderLayout ()); 102 top.add(label, BorderLayout.WEST); 103 104 panel.add(top, BorderLayout.NORTH); 105 106 panel.add(progressBar, BorderLayout.CENTER); 107 108 JPanel bottom = new JPanel (); 109 bottom.setBorder(BorderFactory.createEmptyBorder(12, 0, 0, 0)); 110 bottom.add(cancelButton); 111 112 panel.add(bottom, BorderLayout.SOUTH); 113 } 114 115 116 public void workerStatusChanged(WorkerStatusChangedEvent e) { 117 int ts = e.getTimeStamp(); 118 final WorkerStatusChangedEvent event = e; 119 120 if (worker.getTimeStamp() == ts) { 122 switch (e.getType()) { 123 case WorkerStatusChangedEvent.DISPLAY_TEXT_CHANGED: 124 javax.swing.SwingUtilities.invokeLater(new Runnable () { 125 public void run() { 126 label.setText((String ) event.getNewValue()); 127 } 128 }); 129 130 131 break; 132 133 case WorkerStatusChangedEvent.DISPLAY_TEXT_CLEARED: 134 135 javax.swing.SwingUtilities.invokeLater(new Runnable () { 138 public void run() { 139 label.setText(""); 140 } 141 }); 142 143 break; 144 145 case WorkerStatusChangedEvent.PROGRESSBAR_MAX_CHANGED: { 146 javax.swing.SwingUtilities.invokeLater(new Runnable () { 147 public void run() { 148 progressBar.setMaximum(((Integer ) event.getNewValue()).intValue()); 149 } 150 }); 151 152 153 break; 154 } 155 156 case WorkerStatusChangedEvent.PROGRESSBAR_VALUE_CHANGED: 157 javax.swing.SwingUtilities.invokeLater(new Runnable () { 158 public void run() { 159 progressBar.setValue(((Integer ) event.getNewValue()).intValue()); 160 } 161 }); 162 163 164 break; 165 166 170 } 171 } 172 } 173 178 public void actionPerformed(ActionEvent arg0) { 179 if (arg0.getActionCommand().equals("CANCEL")) { 180 worker.cancel(); 182 setVisible(false); 183 } 184 } 185 186 190 public void setWorker(IWorkerStatusController worker) { 191 this.worker = worker; 192 193 worker.addWorkerStatusChangeListener(this); 194 } 195 196 199 public void setVisible(boolean b) { 200 super.setVisible(b); 201 202 if( !b && worker != null ) { 203 worker.removeWorkerStatusChangeListener(this); 204 } 205 } 206 } | Popular Tags |