1 package org.columba.mail.gui.tree.util; 19 20 import java.awt.BorderLayout ; 21 import java.awt.Dimension ; 22 import java.awt.GridLayout ; 23 import java.awt.event.ActionEvent ; 24 import java.awt.event.ActionListener ; 25 import java.awt.event.KeyEvent ; 26 import java.util.Comparator ; 27 28 import javax.swing.BorderFactory ; 29 import javax.swing.JButton ; 30 import javax.swing.JComponent ; 31 import javax.swing.JDialog ; 32 import javax.swing.JFrame ; 33 import javax.swing.JPanel ; 34 import javax.swing.JScrollPane ; 35 import javax.swing.JTree ; 36 import javax.swing.KeyStroke ; 37 import javax.swing.event.TreeSelectionEvent ; 38 import javax.swing.event.TreeSelectionListener ; 39 import javax.swing.tree.TreeModel ; 40 import javax.swing.tree.TreePath ; 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 61 public class SelectFolderDialog extends JDialog implements ActionListener , 62 TreeSelectionListener , ISelectFolderDialog { 63 64 private boolean bool = false; 65 66 protected JTree tree; 67 68 protected JButton okButton; 69 70 protected JButton newButton; 71 72 protected IMailFolder selectedFolder; 73 74 private ButtonWithMnemonic cancelButton; 75 76 private IFrameMediator mediator; 77 78 public SelectFolderDialog(JFrame 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 contentPane = (JPanel ) getContentPane(); 120 contentPane.setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11)); 121 122 JScrollPane scrollPane = new JScrollPane (tree); 123 scrollPane.setPreferredSize(new Dimension (150, 300)); 124 contentPane.add(scrollPane); 125 126 JPanel bottomPanel = new JPanel (new BorderLayout ()); 127 bottomPanel.setBorder(BorderFactory.createEmptyBorder(17, 0, 0, 0)); 128 129 JPanel buttonPanel = new JPanel (new GridLayout (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 141 if (mediator instanceof TreeViewOwner) { 144 145 TreeModel t = ((TreeViewOwner) mediator).getTreeController() 146 .getModel(); 147 if (t instanceof SortedTreeModelDecorator) { 149 SortedTreeModelDecorator treemodel = (SortedTreeModelDecorator) t; 151 Comparator c = treemodel.getSortingComparator(); 152 153 tree = new SortedJTree(FolderTreeModel.getInstance()); 154 SortedTreeModelDecorator m = (SortedTreeModelDecorator) tree 156 .getModel(); 157 m.setSortingComparator(c); 158 } else { 159 tree = new SortedJTree(FolderTreeModel.getInstance()); 161 } 162 } else { 163 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 selectedFolder = FolderTreeModel.getInstance().getFolder("101"); 175 tree.setSelectionPath(new TreePath (selectedFolder.getPath())); 176 177 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 e) { 211 String action = e.getActionCommand(); 212 213 if (action.equals("OK")) { 214 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 name; 227 228 if (dialog.success()) { 229 name = dialog.getName(); 231 } else { 232 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 249 public void valueChanged(TreeSelectionEvent 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 |