KickJava   Java API By Example, From Geeks To Geeks.

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


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.Container JavaDoc;
22 import java.awt.Dimension JavaDoc;
23 import java.awt.GridLayout JavaDoc;
24 import java.awt.event.ActionEvent JavaDoc;
25 import java.awt.event.ActionListener JavaDoc;
26 import java.awt.event.KeyEvent JavaDoc;
27 import java.util.Comparator JavaDoc;
28 import java.util.Iterator JavaDoc;
29 import java.util.List JavaDoc;
30
31 import javax.swing.BorderFactory JavaDoc;
32 import javax.swing.DefaultComboBoxModel JavaDoc;
33 import javax.swing.JButton JavaDoc;
34 import javax.swing.JComboBox JavaDoc;
35 import javax.swing.JComponent JavaDoc;
36 import javax.swing.JDialog JavaDoc;
37 import javax.swing.JLabel JavaDoc;
38 import javax.swing.JOptionPane JavaDoc;
39 import javax.swing.JPanel JavaDoc;
40 import javax.swing.JScrollPane JavaDoc;
41 import javax.swing.JTextField JavaDoc;
42 import javax.swing.JTree JavaDoc;
43 import javax.swing.KeyStroke JavaDoc;
44 import javax.swing.SwingConstants JavaDoc;
45 import javax.swing.event.TreeSelectionEvent JavaDoc;
46 import javax.swing.event.TreeSelectionListener JavaDoc;
47 import javax.swing.tree.TreeModel JavaDoc;
48 import javax.swing.tree.TreePath JavaDoc;
49 import javax.swing.tree.TreeSelectionModel JavaDoc;
50
51 import org.columba.api.gui.frame.IFrameMediator;
52 import org.columba.core.gui.base.ButtonWithMnemonic;
53 import org.columba.core.gui.base.SingleSideEtchedBorder;
54 import org.columba.mail.folder.FolderFactory;
55 import org.columba.mail.folder.IMailFolder;
56 import org.columba.mail.gui.frame.TreeViewOwner;
57 import org.columba.mail.gui.tree.FolderTreeModel;
58 import org.columba.mail.util.MailResourceLoader;
59 import org.frapuccino.swing.SortedJTree;
60 import org.frapuccino.swing.SortedTreeModelDecorator;
61
62 import com.jgoodies.forms.builder.DefaultFormBuilder;
63 import com.jgoodies.forms.layout.FormLayout;
64
65
66 public class CreateFolderDialog extends JDialog JavaDoc implements ActionListener JavaDoc {
67     protected boolean bool = false;
68
69     protected JTextField JavaDoc textField;
70
71     protected JButton JavaDoc okButton;
72
73     protected JButton JavaDoc cancelButton;
74
75     protected JButton JavaDoc helpButton;
76
77     protected JComboBox JavaDoc typeBox;
78
79     protected JTree JavaDoc tree;
80
81     protected String JavaDoc name;
82
83     protected TreePath JavaDoc selected;
84
85     protected IFrameMediator mediator;
86
87     public CreateFolderDialog(IFrameMediator mediator, TreePath JavaDoc selected) {
88         super(mediator.getView().getFrame(), MailResourceLoader.getString(
89                 "dialog", "folder", "edit_name"), true);
90
91         this.mediator = mediator;
92
93         name = MailResourceLoader.getString("dialog", "folder",
94                 "new_folder_name");
95
96         this.selected = selected;
97
98         initComponents();
99         layoutComponents();
100         // try to set selection
101
if (selected != null) {
102             tree.setSelectionPath(selected);
103         }
104
105         pack();
106         setLocationRelativeTo(null);
107         setVisible(true);
108     }
109
110     protected void layoutComponents() {
111         Container JavaDoc contentPane = getContentPane();
112         contentPane.setLayout(new BorderLayout JavaDoc());
113
114         // layout center panel
115
FormLayout layout = new FormLayout(
116                 "left:max(20dlu;pref), 3dlu, 80dlu:grow", "");
117
118         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
119
120         // create EmptyBorder between components and dialog-frame
121
builder.setDefaultDialogBorder();
122
123         // skip the first column
124
// builder.setLeadingColumnOffset(1);
125
// Add components to the panel:
126
builder.append(new JLabel JavaDoc(MailResourceLoader.getString("dialog",
127                 "folder", "name")));
128         builder.append(textField);
129         builder.nextLine();
130
131         builder.append(new JLabel JavaDoc("Type:"));
132         builder.append(typeBox);
133
134         builder.appendRow("3dlu");
135         builder.appendRow("fill:d:grow");
136         builder.nextLine(2);
137
138         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(tree);
139         scrollPane.setPreferredSize(new Dimension JavaDoc(200, 300));
140         builder.append(scrollPane, 3);
141
142         contentPane.add(builder.getPanel(), BorderLayout.CENTER);
143
144         // init bottom panel with OK, Cancel buttons
145
JPanel JavaDoc bottomPanel = new JPanel JavaDoc(new BorderLayout JavaDoc(0, 0));
146         bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
147
148         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(new GridLayout JavaDoc(1, 2, 5, 0));
149         buttonPanel.setBorder(BorderFactory.createEmptyBorder(11, 11, 11, 11));
150
151         buttonPanel.add(okButton);
152
153         buttonPanel.add(cancelButton);
154         bottomPanel.add(buttonPanel, BorderLayout.EAST);
155         contentPane.add(bottomPanel, BorderLayout.SOUTH);
156
157         getRootPane().setDefaultButton(okButton);
158         getRootPane().registerKeyboardAction(this, "CANCEL",
159                 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
160                 JComponent.WHEN_IN_FOCUSED_WINDOW);
161     }
162
163     protected void initComponents() {
164         // Init components
165
textField = new JTextField JavaDoc(name, 15);
166         textField.setSelectionStart(0);
167         textField.setSelectionEnd(name.length());
168
169         typeBox = new JComboBox JavaDoc();
170
171         // get global sorting state
172
TreeModel JavaDoc t = ((TreeViewOwner) mediator).getTreeController().getModel();
173
174         if (t instanceof SortedTreeModelDecorator) {
175             // sorting is enabled
176
SortedTreeModelDecorator treemodel = (SortedTreeModelDecorator) t;
177             Comparator JavaDoc c = treemodel.getSortingComparator();
178
179             tree = new SortedJTree(FolderTreeModel.getInstance());
180             // apply sorting state
181
SortedTreeModelDecorator m = (SortedTreeModelDecorator) tree
182                     .getModel();
183             m.setSortingComparator(c);
184         } else {
185             // sorting is disabled
186
tree = new SortedJTree(FolderTreeModel.getInstance());
187         }
188
189         tree.setCellRenderer(new FolderTreeCellRenderer());
190         tree.setRootVisible(false);
191         tree.getSelectionModel().setSelectionMode(
192                 TreeSelectionModel.SINGLE_TREE_SELECTION);
193         tree.expandRow(0);
194         tree.expandRow(1);
195
196         tree.addTreeSelectionListener(new TreeSelectionListener JavaDoc() {
197             public void valueChanged(TreeSelectionEvent JavaDoc arg0) {
198                 selectionChanged();
199             }
200         });
201
202         // button panel
203
okButton = new ButtonWithMnemonic(MailResourceLoader.getString(
204                 "global", "ok"));
205         okButton.setActionCommand("OK");
206         okButton.addActionListener(this);
207         cancelButton = new ButtonWithMnemonic(MailResourceLoader.getString(
208                 "global", "cancel"));
209         cancelButton.setActionCommand("CANCEL");
210         cancelButton.addActionListener(this);
211         helpButton = new ButtonWithMnemonic(MailResourceLoader.getString(
212                 "global", "help"));
213         helpButton.setActionCommand("HELP");
214         helpButton.addActionListener(this);
215
216     }
217
218     protected void selectionChanged() {
219         IMailFolder selected = getSelected();
220         if (selected != null) {
221             List JavaDoc childs = FolderFactory.getInstance().getPossibleChilds(
222                     selected);
223             Iterator JavaDoc it = childs.iterator();
224             while (it.hasNext()) {
225                 String JavaDoc type = (String JavaDoc) it.next();
226                 if (!selected.supportsAddFolder(type)) {
227                     it.remove();
228                 }
229
230                 // We have a special Command for VFolders
231
if (type.equals("VirtualFolder")) {
232                     it.remove();
233                 }
234             }
235
236             if (childs.size() > 0) {
237                 typeBox.setModel(new DefaultComboBoxModel JavaDoc(childs.toArray()));
238
239                 okButton.setEnabled(true);
240                 typeBox.setEnabled(true);
241             } else {
242                 okButton.setEnabled(false);
243                 typeBox.setEnabled(false);
244             }
245         } else {
246             okButton.setEnabled(false);
247             typeBox.setEnabled(false);
248         }
249     }
250
251     public String JavaDoc getName() {
252         return name;
253     }
254
255     public IMailFolder getSelected() {
256         if ( tree.getSelectionPath() == null ) return null;
257
258         return (IMailFolder) tree.getSelectionPath().getLastPathComponent();
259     }
260
261     public boolean success() {
262         return bool;
263     }
264
265     public void actionPerformed(ActionEvent JavaDoc e) {
266         String JavaDoc action = e.getActionCommand();
267
268         if (action.equals("OK")) {
269             name = textField.getText().trim();
270
271             // fixing bug with id 553176
272
if (name.indexOf('/') != -1) {
273                 // if the character / is found shows the user a error message
274
JOptionPane.showMessageDialog(this, MailResourceLoader
275                         .getString("dialog", "folder", "error_char_text"),
276                         MailResourceLoader.getString("dialog", "folder",
277                                 "error_title"), JOptionPane.ERROR_MESSAGE);
278
279                 return;
280             }
281
282             bool = true;
283             setVisible(false);
284         } else if (action.equals("CANCEL")) {
285             bool = false;
286
287             dispose();
288         }
289     }
290
291     /**
292      * @return
293      */

294     public String JavaDoc getType() {
295         return (String JavaDoc) typeBox.getSelectedItem();
296     }
297 }
Popular Tags