1 package org.columba.mail.gui.tree.util; 19 20 import java.awt.BorderLayout ; 21 import java.awt.Container ; 22 import java.awt.Dimension ; 23 import java.awt.GridLayout ; 24 import java.awt.event.ActionEvent ; 25 import java.awt.event.ActionListener ; 26 import java.awt.event.KeyEvent ; 27 import java.util.Comparator ; 28 import java.util.Iterator ; 29 import java.util.List ; 30 31 import javax.swing.BorderFactory ; 32 import javax.swing.DefaultComboBoxModel ; 33 import javax.swing.JButton ; 34 import javax.swing.JComboBox ; 35 import javax.swing.JComponent ; 36 import javax.swing.JDialog ; 37 import javax.swing.JLabel ; 38 import javax.swing.JOptionPane ; 39 import javax.swing.JPanel ; 40 import javax.swing.JScrollPane ; 41 import javax.swing.JTextField ; 42 import javax.swing.JTree ; 43 import javax.swing.KeyStroke ; 44 import javax.swing.SwingConstants ; 45 import javax.swing.event.TreeSelectionEvent ; 46 import javax.swing.event.TreeSelectionListener ; 47 import javax.swing.tree.TreeModel ; 48 import javax.swing.tree.TreePath ; 49 import javax.swing.tree.TreeSelectionModel ; 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 implements ActionListener { 67 protected boolean bool = false; 68 69 protected JTextField textField; 70 71 protected JButton okButton; 72 73 protected JButton cancelButton; 74 75 protected JButton helpButton; 76 77 protected JComboBox typeBox; 78 79 protected JTree tree; 80 81 protected String name; 82 83 protected TreePath selected; 84 85 protected IFrameMediator mediator; 86 87 public CreateFolderDialog(IFrameMediator mediator, TreePath 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 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 contentPane = getContentPane(); 112 contentPane.setLayout(new BorderLayout ()); 113 114 FormLayout layout = new FormLayout( 116 "left:max(20dlu;pref), 3dlu, 80dlu:grow", ""); 117 118 DefaultFormBuilder builder = new DefaultFormBuilder(layout); 119 120 builder.setDefaultDialogBorder(); 122 123 builder.append(new JLabel (MailResourceLoader.getString("dialog", 127 "folder", "name"))); 128 builder.append(textField); 129 builder.nextLine(); 130 131 builder.append(new JLabel ("Type:")); 132 builder.append(typeBox); 133 134 builder.appendRow("3dlu"); 135 builder.appendRow("fill:d:grow"); 136 builder.nextLine(2); 137 138 JScrollPane scrollPane = new JScrollPane (tree); 139 scrollPane.setPreferredSize(new Dimension (200, 300)); 140 builder.append(scrollPane, 3); 141 142 contentPane.add(builder.getPanel(), BorderLayout.CENTER); 143 144 JPanel bottomPanel = new JPanel (new BorderLayout (0, 0)); 146 bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 147 148 JPanel buttonPanel = new JPanel (new GridLayout (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 textField = new JTextField (name, 15); 166 textField.setSelectionStart(0); 167 textField.setSelectionEnd(name.length()); 168 169 typeBox = new JComboBox (); 170 171 TreeModel t = ((TreeViewOwner) mediator).getTreeController().getModel(); 173 174 if (t instanceof SortedTreeModelDecorator) { 175 SortedTreeModelDecorator treemodel = (SortedTreeModelDecorator) t; 177 Comparator c = treemodel.getSortingComparator(); 178 179 tree = new SortedJTree(FolderTreeModel.getInstance()); 180 SortedTreeModelDecorator m = (SortedTreeModelDecorator) tree 182 .getModel(); 183 m.setSortingComparator(c); 184 } else { 185 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 () { 197 public void valueChanged(TreeSelectionEvent arg0) { 198 selectionChanged(); 199 } 200 }); 201 202 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 childs = FolderFactory.getInstance().getPossibleChilds( 222 selected); 223 Iterator it = childs.iterator(); 224 while (it.hasNext()) { 225 String type = (String ) it.next(); 226 if (!selected.supportsAddFolder(type)) { 227 it.remove(); 228 } 229 230 if (type.equals("VirtualFolder")) { 232 it.remove(); 233 } 234 } 235 236 if (childs.size() > 0) { 237 typeBox.setModel(new DefaultComboBoxModel (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 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 e) { 266 String action = e.getActionCommand(); 267 268 if (action.equals("OK")) { 269 name = textField.getText().trim(); 270 271 if (name.indexOf('/') != -1) { 273 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 294 public String getType() { 295 return (String ) typeBox.getSelectedItem(); 296 } 297 } | Popular Tags |