KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > util > SendMessageDialog


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

19 package org.columba.mail.gui.util;
20
21 import java.awt.BorderLayout JavaDoc;
22 import java.awt.Dimension JavaDoc;
23 import java.awt.HeadlessException JavaDoc;
24 import java.awt.event.ActionEvent JavaDoc;
25 import java.awt.event.ActionListener JavaDoc;
26
27 import javax.swing.BorderFactory JavaDoc;
28 import javax.swing.JButton JavaDoc;
29 import javax.swing.JDialog JavaDoc;
30 import javax.swing.JFrame JavaDoc;
31 import javax.swing.JLabel JavaDoc;
32 import javax.swing.JPanel JavaDoc;
33 import javax.swing.JProgressBar JavaDoc;
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 /**
43  * Dialog shows progress while sending message.
44  * <p>
45  * Additionally offers the possibility to cancel the operation.
46  * <p>
47  * This is the first example of watching the progress for a specific worker,
48  * using the timestamp attribute, which is created by {@link DefaultProcessor}
49  * when executing the {@link Command}.
50  *
51  * @author fdietz
52  */

53 public class SendMessageDialog extends JDialog JavaDoc implements
54         IWorkerStatusChangeListener, ActionListener JavaDoc {
55     private JProgressBar JavaDoc progressBar;
56
57     private JButton JavaDoc cancelButton;
58
59     private JLabel JavaDoc label;
60
61     private IWorkerStatusController worker;
62
63     /**
64      * @param arg0
65      * @throws java.awt.HeadlessException
66      */

67     public SendMessageDialog(IWorkerStatusController worker)
68             throws HeadlessException JavaDoc {
69         super(new JFrame JavaDoc(), "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 JavaDoc("Sending message...");
82         label.setIcon(MailImageLoader.getIcon("send.png"));
83
84         progressBar = new JProgressBar JavaDoc();
85         progressBar.setPreferredSize(new Dimension JavaDoc(300, 20));
86
87         cancelButton = new ButtonWithMnemonic("&Cancel");
88         cancelButton.setActionCommand("CANCEL");
89         cancelButton.addActionListener(this);
90     }
91
92     protected void layoutComponents() {
93         JPanel JavaDoc panel = new JPanel JavaDoc();
94         panel.setLayout(new BorderLayout JavaDoc());
95         panel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
96
97         getContentPane().add(panel);
98
99         JPanel JavaDoc top = new JPanel JavaDoc();
100         top.setBorder(BorderFactory.createEmptyBorder(0, 12, 6, 0));
101         top.setLayout(new BorderLayout JavaDoc());
102         top.add(label, BorderLayout.WEST);
103
104         panel.add(top, BorderLayout.NORTH);
105
106         panel.add(progressBar, BorderLayout.CENTER);
107
108         JPanel JavaDoc bottom = new JPanel JavaDoc();
109         bottom.setBorder(BorderFactory.createEmptyBorder(12, 0, 0, 0));
110         bottom.add(cancelButton);
111
112         panel.add(bottom, BorderLayout.SOUTH);
113     }
114
115     /** ********************** WorkerStatusListener ************************** */
116 public void workerStatusChanged(WorkerStatusChangedEvent e) {
117         int ts = e.getTimeStamp();
118         final WorkerStatusChangedEvent event = e;
119
120         // only update if timestamp is equal
121
if (worker.getTimeStamp() == ts) {
122             switch (e.getType()) {
123             case WorkerStatusChangedEvent.DISPLAY_TEXT_CHANGED:
124                 javax.swing.SwingUtilities.invokeLater(new Runnable JavaDoc() {
125                     public void run() {
126                          label.setText((String JavaDoc) event.getNewValue());
127                     }
128                 });
129                
130
131                 break;
132
133             case WorkerStatusChangedEvent.DISPLAY_TEXT_CLEARED:
134
135                 // implemented for completeness.
136
// Time-out for clearing text is ignored here.
137
javax.swing.SwingUtilities.invokeLater(new Runnable JavaDoc() {
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 JavaDoc() {
147                     public void run() {
148                          progressBar.setMaximum(((Integer JavaDoc) event.getNewValue()).intValue());
149                     }
150                 });
151                
152
153                 break;
154             }
155
156             case WorkerStatusChangedEvent.PROGRESSBAR_VALUE_CHANGED:
157                 javax.swing.SwingUtilities.invokeLater(new Runnable JavaDoc() {
158                     public void run() {
159                          progressBar.setValue(((Integer JavaDoc) event.getNewValue()).intValue());
160                     }
161                 });
162                
163
164                 break;
165
166                 /*
167                  * case WorkerStatusChangedEvent.FINISHED : setVisible(false);
168                  * break;
169                  */

170             }
171         }
172     }
173     /*
174      * (non-Javadoc)
175      *
176      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
177      */

178     public void actionPerformed(ActionEvent JavaDoc arg0) {
179         if (arg0.getActionCommand().equals("CANCEL")) {
180             // send cancel event to worker
181
worker.cancel();
182             setVisible(false);
183         }
184     }
185
186     /**
187      * @param worker
188      * The worker to set.
189      */

190     public void setWorker(IWorkerStatusController worker) {
191         this.worker = worker;
192
193         worker.addWorkerStatusChangeListener(this);
194     }
195
196     /**
197      * @see java.awt.Component#setVisible(boolean)
198      */

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