KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > tree > util > SelectFolderDialog


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.tree.util;
19
20 import java.awt.BorderLayout JavaDoc;
21 import java.awt.Dimension JavaDoc;
22 import java.awt.GridLayout JavaDoc;
23 import java.awt.event.ActionEvent JavaDoc;
24 import java.awt.event.ActionListener JavaDoc;
25 import java.awt.event.KeyEvent JavaDoc;
26 import java.util.Comparator JavaDoc;
27
28 import javax.swing.BorderFactory JavaDoc;
29 import javax.swing.JButton JavaDoc;
30 import javax.swing.JComponent JavaDoc;
31 import javax.swing.JDialog JavaDoc;
32 import javax.swing.JFrame JavaDoc;
33 import javax.swing.JPanel JavaDoc;
34 import javax.swing.JScrollPane JavaDoc;
35 import javax.swing.JTree JavaDoc;
36 import javax.swing.KeyStroke JavaDoc;
37 import javax.swing.event.TreeSelectionEvent JavaDoc;
38 import javax.swing.event.TreeSelectionListener JavaDoc;
39 import javax.swing.tree.TreeModel JavaDoc;
40 import javax.swing.tree.TreePath JavaDoc;
41
42 import org.columba.api.gui.frame.IFrameMediator;
43 import org.columba.core.command.CommandProcessor;
44 import org.columba.core.folder.api.IFolder;
45 import org.columba.core.gui.base.ButtonWithMnemonic;
46 import org.columba.mail.command.MailFolderCommandReference;
47 import org.columba.mail.folder.IMailFolder;
48 import org.columba.mail.gui.frame.TreeViewOwner;
49 import org.columba.mail.gui.tree.FolderTreeModel;
50 import org.columba.mail.gui.tree.ISelectFolderDialog;
51 import org.columba.mail.gui.tree.command.CreateAndSelectSubFolderCommand;
52 import org.columba.mail.util.MailResourceLoader;
53 import org.frapuccino.swing.SortedJTree;
54 import org.frapuccino.swing.SortedTreeModelDecorator;
55
56 /**
57  * Select folder dialog.
58  *
59  * @author fdietz
60  */

61 public class SelectFolderDialog extends JDialog JavaDoc implements ActionListener JavaDoc,
62         TreeSelectionListener JavaDoc, ISelectFolderDialog {
63
64     private boolean bool = false;
65
66     protected JTree JavaDoc tree;
67
68     protected JButton JavaDoc okButton;
69
70     protected JButton JavaDoc newButton;
71
72     protected IMailFolder selectedFolder;
73
74     private ButtonWithMnemonic cancelButton;
75
76     private IFrameMediator mediator;
77
78     public SelectFolderDialog(JFrame JavaDoc parent) {
79         super(parent, true);
80
81         setTitle(MailResourceLoader.getString("dialog", "folder",
82                 "select_folder"));
83
84         initComponents();
85
86         layoutComponents();
87
88         getRootPane().setDefaultButton(okButton);
89         getRootPane().registerKeyboardAction(this, "CANCEL",
90                 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
91                 JComponent.WHEN_IN_FOCUSED_WINDOW);
92         pack();
93         setLocationRelativeTo(null);
94         setVisible(true);
95     }
96
97     public SelectFolderDialog(IFrameMediator mediator) {
98         super(mediator.getView().getFrame(), true);
99
100         this.mediator = mediator;
101
102         setTitle(MailResourceLoader.getString("dialog", "folder",
103                 "select_folder"));
104
105         initComponents();
106
107         layoutComponents();
108
109         getRootPane().setDefaultButton(okButton);
110         getRootPane().registerKeyboardAction(this, "CANCEL",
111                 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
112                 JComponent.WHEN_IN_FOCUSED_WINDOW);
113         pack();
114         setLocationRelativeTo(null);
115         setVisible(true);
116     }
117
118     protected void layoutComponents() {
119         JPanel JavaDoc contentPane = (JPanel JavaDoc) getContentPane();
120         contentPane.setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11));
121
122         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(tree);
123         scrollPane.setPreferredSize(new Dimension JavaDoc(150, 300));
124         contentPane.add(scrollPane);
125
126         JPanel JavaDoc bottomPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
127         bottomPanel.setBorder(BorderFactory.createEmptyBorder(17, 0, 0, 0));
128
129         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(new GridLayout JavaDoc(1, 3, 5, 0));
130         buttonPanel.add(okButton);
131         buttonPanel.add(newButton);
132
133         buttonPanel.add(cancelButton);
134         bottomPanel.add(buttonPanel, BorderLayout.EAST);
135         contentPane.add(bottomPanel, BorderLayout.SOUTH);
136     }
137
138     protected void initComponents() {
139         // get global sorting state
140

141         // bug #999969 (fdietz): classcast exception
142
// if mediator contains a JTree
143
if (mediator instanceof TreeViewOwner) {
144
145             TreeModel JavaDoc t = ((TreeViewOwner) mediator).getTreeController()
146                     .getModel();
147             // if mediator contains a sortable treemodel
148
if (t instanceof SortedTreeModelDecorator) {
149                 // sorting is enabled
150
SortedTreeModelDecorator treemodel = (SortedTreeModelDecorator) t;
151                 Comparator JavaDoc c = treemodel.getSortingComparator();
152
153                 tree = new SortedJTree(FolderTreeModel.getInstance());
154                 // apply sorting state
155
SortedTreeModelDecorator m = (SortedTreeModelDecorator) tree
156                         .getModel();
157                 m.setSortingComparator(c);
158             } else {
159                 // sorting is disabled
160
tree = new SortedJTree(FolderTreeModel.getInstance());
161             }
162         } else {
163             // sorting is disabled
164
tree = new SortedJTree(FolderTreeModel.getInstance());
165         }
166
167         tree.expandRow(0);
168         tree.expandRow(1);
169         tree.putClientProperty("JTree.lineStyle", "Angled");
170         tree.setShowsRootHandles(true);
171         tree.setRootVisible(false);
172
173         // default selection is local Inbox
174
selectedFolder = FolderTreeModel.getInstance().getFolder("101");
175         tree.setSelectionPath(new TreePath JavaDoc(selectedFolder.getPath()));
176
177         // add selection listener
178
tree.addTreeSelectionListener(this);
179
180         FolderTreeCellRenderer renderer = new FolderTreeCellRenderer();
181         tree.setCellRenderer(renderer);
182
183         okButton = new ButtonWithMnemonic(MailResourceLoader
184                 .getString("", "ok"));
185         okButton.setEnabled(true);
186         okButton.setActionCommand("OK");
187         okButton.addActionListener(this);
188
189         newButton = new ButtonWithMnemonic(MailResourceLoader.getString(
190                 "dialog", "folder", "new_folder"));
191         newButton.setEnabled(true);
192         newButton.setActionCommand("NEW");
193         newButton.addActionListener(this);
194
195         cancelButton = new ButtonWithMnemonic(MailResourceLoader.getString("",
196                 "cancel"));
197         cancelButton.setActionCommand("CANCEL");
198         cancelButton.addActionListener(this);
199
200     }
201
202     public boolean success() {
203         return bool;
204     }
205
206     public IFolder getSelectedFolder() {
207         return selectedFolder;
208     }
209
210     public void actionPerformed(ActionEvent JavaDoc e) {
211         String JavaDoc action = e.getActionCommand();
212
213         if (action.equals("OK")) {
214             // name = textField.getText();
215
bool = true;
216
217             dispose();
218         } else if (action.equals("CANCEL")) {
219             bool = false;
220
221             dispose();
222         } else if (action.equals("NEW")) {
223             CreateFolderDialog dialog = new CreateFolderDialog(mediator, tree
224                     .getSelectionPath());
225
226             String JavaDoc name;
227
228             if (dialog.success()) {
229                 // ok pressed
230
name = dialog.getName();
231             } else {
232                 // cancel pressed
233
return;
234             }
235
236             MailFolderCommandReference r = new MailFolderCommandReference(
237                     dialog.getSelected());
238             r.setFolderName(name);
239
240             CommandProcessor.getInstance().addOp(
241                     new CreateAndSelectSubFolderCommand(tree, r));
242         }
243     }
244
245     /**
246      * ***************************** tree selection listener
247      * *******************************
248      */

249     public void valueChanged(TreeSelectionEvent JavaDoc e) {
250         IMailFolder node = (IMailFolder) tree.getLastSelectedPathComponent();
251
252         if (node == null) {
253             return;
254         }
255
256         selectedFolder = node;
257
258         if (node.supportsAddMessage()) {
259             okButton.setEnabled(true);
260         } else {
261             okButton.setEnabled(false);
262         }
263     }
264 }
Popular Tags