KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > config > subscribe > SubscribeDialog


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
package org.columba.mail.gui.config.subscribe;
19
20 import java.awt.BorderLayout JavaDoc;
21 import java.awt.Color JavaDoc;
22 import java.awt.Component JavaDoc;
23 import java.awt.Dimension JavaDoc;
24 import java.awt.GridBagConstraints JavaDoc;
25 import java.awt.GridBagLayout JavaDoc;
26 import java.awt.GridLayout JavaDoc;
27 import java.awt.event.ActionEvent JavaDoc;
28 import java.awt.event.ActionListener JavaDoc;
29 import java.awt.event.KeyEvent JavaDoc;
30
31 import javax.swing.BorderFactory JavaDoc;
32 import javax.swing.Box JavaDoc;
33 import javax.swing.BoxLayout JavaDoc;
34 import javax.swing.JButton JavaDoc;
35 import javax.swing.JComponent JavaDoc;
36 import javax.swing.JDialog JavaDoc;
37 import javax.swing.JFrame JavaDoc;
38 import javax.swing.JPanel JavaDoc;
39 import javax.swing.JScrollPane JavaDoc;
40 import javax.swing.JTree JavaDoc;
41 import javax.swing.KeyStroke JavaDoc;
42 import javax.swing.SwingConstants JavaDoc;
43 import javax.swing.event.TreeSelectionEvent JavaDoc;
44 import javax.swing.event.TreeSelectionListener JavaDoc;
45 import javax.swing.tree.DefaultTreeModel JavaDoc;
46
47 import org.columba.core.command.Command;
48 import org.columba.core.command.CommandProcessor;
49 import org.columba.core.gui.base.ButtonWithMnemonic;
50 import org.columba.core.gui.base.SingleSideEtchedBorder;
51 import org.columba.core.help.HelpManager;
52 import org.columba.mail.command.MailFolderCommandReference;
53 import org.columba.mail.folder.imap.IMAPRootFolder;
54 import org.columba.mail.gui.config.filter.FilterTransferHandler;
55 import org.columba.mail.imap.FetchSubFolderListCommand;
56 import org.columba.mail.util.MailResourceLoader;
57 import org.frapuccino.checkabletree.CheckableTree;
58
59 /**
60  * Subscribe dialog used by IMAP accounts.
61  *
62  * @author fdietz
63  */

64 public class SubscribeDialog extends JDialog JavaDoc implements ActionListener JavaDoc,
65         TreeSelectionListener JavaDoc {
66     private JButton JavaDoc subscribeButton;
67
68     private JButton JavaDoc syncButton;
69
70     private JButton JavaDoc unsubscribeButton;
71
72     private JTree JavaDoc tree;
73
74     private ListInfoTreeNode selection;
75
76     private IMAPRootFolder root;
77
78     private DefaultTreeModel JavaDoc treeModel;
79
80     public SubscribeDialog(JFrame JavaDoc parent, IMAPRootFolder rootFolder) {
81         super(parent, true);
82
83         setTitle(MailResourceLoader.getString("dialog", "subscribe",
84                 "dialog_title"));
85         root = rootFolder;
86
87         initComponents();
88         pack();
89         setLocationRelativeTo(null);
90
91         syncFolderList();
92
93         setVisible(true);
94     }
95
96     private void syncFolderList() {
97         setEnabled(false);
98
99         Command c = new SynchronizeFolderListCommand(
100                 new SubscribeCommandReference(root, this));
101         CommandProcessor.getInstance().addOp(c);
102     }
103
104     private void subscribe() {
105         setEnabled(false);
106
107         Command c = new SubscribeFolderCommand(new SubscribeCommandReference(
108                 root, this, selection.getMailbox()));
109         CommandProcessor.getInstance().addOp(c);
110     }
111
112     private void unsubscribe() {
113         setEnabled(false);
114
115         Command c = new UnsubscribeFolderCommand(new SubscribeCommandReference(
116                 root, this, selection.getMailbox()));
117         CommandProcessor.getInstance().addOp(c);
118     }
119
120     /**
121      * Inits the GUI components.
122      */

123     private void initComponents() {
124         JPanel JavaDoc mainPanel = new JPanel JavaDoc();
125         mainPanel.setLayout(new BorderLayout JavaDoc());
126         mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
127         getContentPane().add(mainPanel);
128
129         subscribeButton = new ButtonWithMnemonic(MailResourceLoader.getString(
130                 "dialog", "subscribe", "subscribe"));
131         subscribeButton.setActionCommand("SUBSCRIBE");
132         subscribeButton.addActionListener(this);
133         subscribeButton.setEnabled(false);
134
135         syncButton = new ButtonWithMnemonic(MailResourceLoader.getString(
136                 "dialog", "subscribe", "sync"));
137         syncButton.setActionCommand("SYNC");
138         syncButton.setEnabled(false);
139         syncButton.addActionListener(this);
140
141         unsubscribeButton = new ButtonWithMnemonic(MailResourceLoader
142                 .getString("dialog", "subscribe", "unsubscribe"));
143         unsubscribeButton.setActionCommand("UNSUBSCRIBE");
144         unsubscribeButton.setEnabled(false);
145         unsubscribeButton.addActionListener(this);
146
147         // top panel
148
JPanel JavaDoc topPanel = new JPanel JavaDoc();
149         topPanel.setLayout(new BoxLayout JavaDoc(topPanel, BoxLayout.X_AXIS));
150
151         GridBagLayout JavaDoc gridBagLayout = new GridBagLayout JavaDoc();
152         GridBagConstraints JavaDoc c = new GridBagConstraints JavaDoc();
153
154         // topPanel.setLayout( );
155
JPanel JavaDoc topBorderPanel = new JPanel JavaDoc();
156         topBorderPanel.setLayout(new BorderLayout JavaDoc());
157
158         Component JavaDoc glue = Box.createVerticalGlue();
159         c.anchor = GridBagConstraints.EAST;
160         c.gridwidth = GridBagConstraints.REMAINDER;
161
162         // c.fill = GridBagConstraints.HORIZONTAL;
163
gridBagLayout.setConstraints(glue, c);
164
165         gridBagLayout = new GridBagLayout JavaDoc();
166         c = new GridBagConstraints JavaDoc();
167
168         JPanel JavaDoc eastPanel = new JPanel JavaDoc(gridBagLayout);
169         mainPanel.add(eastPanel, BorderLayout.EAST);
170
171         c.fill = GridBagConstraints.HORIZONTAL;
172         c.weightx = 1.0;
173         c.gridwidth = GridBagConstraints.REMAINDER;
174         gridBagLayout.setConstraints(subscribeButton, c);
175         eastPanel.add(subscribeButton);
176
177         Component JavaDoc strut1 = Box.createRigidArea(new Dimension JavaDoc(30, 6));
178         gridBagLayout.setConstraints(strut1, c);
179         eastPanel.add(strut1);
180
181         gridBagLayout.setConstraints(unsubscribeButton, c);
182         eastPanel.add(unsubscribeButton);
183
184         Component JavaDoc strut = Box.createRigidArea(new Dimension JavaDoc(30, 12));
185         gridBagLayout.setConstraints(strut, c);
186         eastPanel.add(strut);
187
188         gridBagLayout.setConstraints(syncButton, c);
189         eastPanel.add(syncButton);
190
191         glue = Box.createVerticalGlue();
192         c.fill = GridBagConstraints.BOTH;
193         c.weighty = 1.0;
194         gridBagLayout.setConstraints(glue, c);
195         eastPanel.add(glue);
196
197         // centerpanel
198
JPanel JavaDoc centerPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
199         centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 6));
200         tree = new CheckableTree();
201         tree.addTreeSelectionListener(this);
202         tree.setRootVisible(false);
203
204         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(tree);
205         scrollPane.setPreferredSize(new Dimension JavaDoc(300, 250));
206         scrollPane.getViewport().setBackground(Color.white);
207         scrollPane.setTransferHandler(new FilterTransferHandler());
208         centerPanel.add(scrollPane);
209
210         mainPanel.add(centerPanel);
211
212         JPanel JavaDoc bottomPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
213         bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
214
215         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(new GridLayout JavaDoc(1, 2, 6, 0));
216         buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
217
218         ButtonWithMnemonic closeButton = new ButtonWithMnemonic(
219                 MailResourceLoader.getString("global", "close"));
220         closeButton.setActionCommand("CLOSE"); //$NON-NLS-1$
221
closeButton.addActionListener(this);
222         buttonPanel.add(closeButton);
223
224         ButtonWithMnemonic helpButton = new ButtonWithMnemonic(
225                 MailResourceLoader.getString("global", "help"));
226         buttonPanel.add(helpButton);
227         bottomPanel.add(buttonPanel, BorderLayout.EAST);
228         getContentPane().add(bottomPanel, BorderLayout.SOUTH);
229         getRootPane().setDefaultButton(closeButton);
230         getRootPane().registerKeyboardAction(this, "CLOSE",
231                 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
232                 JComponent.WHEN_IN_FOCUSED_WINDOW);
233
234         // associate with JavaHelp
235
HelpManager.getInstance().enableHelpOnButton(helpButton,
236                 "organising_and_managing_your_email_3");
237         HelpManager.getInstance().enableHelpKey(getRootPane(),
238                 "organising_and_managing_your_email_3");
239     }
240
241     public void actionPerformed(ActionEvent JavaDoc e) {
242         String JavaDoc action = e.getActionCommand();
243
244         if (action.equals("CLOSE")) {
245             syncAndExit();
246         } else if (action.equals("SUBSCRIBE")) {
247             subscribe();
248         } else if (action.equals("UNSUBSCRIBE")) {
249             unsubscribe();
250         } else if (action.equals("SYNC")) {
251             syncFolderList();
252         }
253     }
254
255     private void syncAndExit() {
256         setEnabled(false);
257
258         Command c = new FetchSubFolderListCommand(
259                 new MailFolderCommandReference(root));
260         CommandProcessor.getInstance().addOp(c);
261
262         setVisible(false);
263     }
264
265     /** ********************** TreeSelectionListener ******************** */
266     /**
267      * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
268      */

269     public void valueChanged(TreeSelectionEvent JavaDoc arg0) {
270         selection = (ListInfoTreeNode) arg0.getPath().getLastPathComponent();
271
272         updateButtons();
273     }
274
275     /**
276      *
277      */

278     private void updateButtons() {
279         if (selection != null) {
280             subscribeButton.setEnabled(!selection.isSelected());
281             unsubscribeButton.setEnabled(selection.isSelected());
282         } else {
283             subscribeButton.setEnabled(false);
284             unsubscribeButton.setEnabled(false);
285         }
286
287         syncButton.setEnabled(true);
288         tree.setEnabled(true);
289     }
290
291     /**
292      * @param model
293      */

294     public void syncFolderListDone(DefaultTreeModel JavaDoc model) {
295         tree.setModel(model);
296         tree.setRootVisible(true);
297         tree.expandRow(0);
298
299         treeModel = model;
300
301         updateButtons();
302     }
303
304     public void setEnabled(boolean value) {
305         subscribeButton.setEnabled(value);
306         unsubscribeButton.setEnabled(value);
307         syncButton.setEnabled(value);
308
309         tree.setEnabled(value);
310     }
311
312     /**
313      *
314      */

315     public void subscribeDone() {
316         selection.setSelected(true);
317         treeModel.nodeChanged(selection);
318
319         updateButtons();
320     }
321
322     /**
323      *
324      */

325     public void unsubscribeDone() {
326         selection.setSelected(false);
327         treeModel.nodeChanged(selection);
328
329         updateButtons();
330     }
331 }
Popular Tags