1 17 package org.columba.mail.gui.config.export; 18 19 import java.awt.BorderLayout ; 20 import java.awt.Dimension ; 21 import java.awt.GridLayout ; 22 import java.awt.event.ActionEvent ; 23 import java.awt.event.ActionListener ; 24 import java.awt.event.KeyEvent ; 25 import java.awt.event.MouseAdapter ; 26 import java.awt.event.MouseEvent ; 27 import java.io.File ; 28 import java.util.Iterator ; 29 import java.util.LinkedList ; 30 import java.util.List ; 31 import java.util.Vector ; 32 33 import javax.swing.BorderFactory ; 34 import javax.swing.JButton ; 35 import javax.swing.JComponent ; 36 import javax.swing.JDialog ; 37 import javax.swing.JFileChooser ; 38 import javax.swing.JFrame ; 39 import javax.swing.JLabel ; 40 import javax.swing.JPanel ; 41 import javax.swing.JScrollPane ; 42 import javax.swing.JTree ; 43 import javax.swing.KeyStroke ; 44 import javax.swing.SwingConstants ; 45 import javax.swing.tree.DefaultTreeModel ; 46 import javax.swing.tree.TreeNode ; 47 import javax.swing.tree.TreePath ; 48 import javax.swing.tree.TreeSelectionModel ; 49 50 import org.columba.core.command.CommandProcessor; 51 import org.columba.core.gui.base.ButtonWithMnemonic; 52 import org.columba.core.gui.base.SingleSideEtchedBorder; 53 import org.columba.core.gui.util.DialogHeaderPanel; 54 import org.columba.core.help.HelpManager; 55 import org.columba.mail.command.MailFolderCommandReference; 56 import org.columba.mail.folder.IMailFolder; 57 import org.columba.mail.folder.command.ExportFolderCommand; 58 import org.columba.mail.gui.tree.FolderTreeModel; 59 import org.columba.mail.gui.tree.util.FolderTreeCellRenderer; 60 import org.columba.mail.util.MailResourceLoader; 61 import org.frapuccino.checkabletree.CheckableItem; 62 import org.frapuccino.checkabletree.CheckableTree; 63 64 import com.jgoodies.forms.layout.CellConstraints; 65 import com.jgoodies.forms.layout.FormLayout; 66 67 73 74 public class ExportDialog extends JDialog implements ActionListener { 75 private ButtonWithMnemonic exportButton; 76 77 private ButtonWithMnemonic selectAllButton; 78 79 private JTree tree; 80 81 private JButton helpButton; 82 83 private JButton closeButton; 84 85 public ExportDialog(JFrame parent) { 86 super(parent, MailResourceLoader.getString("dialog", "export", 87 "dialog_title"), false); 88 89 initComponents(); 90 91 pack(); 92 setLocationRelativeTo(null); 93 setVisible(true); 94 } 95 96 private void createChildNodes(CheckableTreeNode root, IMailFolder parent) { 97 for (int i = 0; i < parent.getChildCount(); i++) { 98 IMailFolder child = (IMailFolder) parent.getChildAt(i); 99 100 CheckableTreeNode c = new CheckableTreeNode(child.getName()); 101 c.setIcon(FolderTreeCellRenderer.getFolderIcon(child, false)); 102 c.setNode(child); 103 root.add(c); 104 105 createChildNodes(c, child); 106 } 107 } 108 109 protected void initComponents() { 110 JPanel mainPanel = new JPanel (new BorderLayout ()); 111 mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 112 getContentPane().add(mainPanel); 113 114 exportButton = new ButtonWithMnemonic(MailResourceLoader.getString( 115 "dialog", "export", "export")); 116 exportButton.setActionCommand("EXPORT"); 117 exportButton.addActionListener(this); 118 119 selectAllButton = new ButtonWithMnemonic(MailResourceLoader.getString( 120 "dialog", "export", "select_all")); 121 selectAllButton.setActionCommand("SELECTALL"); 122 selectAllButton.addActionListener(this); 123 124 IMailFolder parent = (IMailFolder) FolderTreeModel.getInstance() 125 .getRoot(); 126 CheckableTreeNode root = new CheckableTreeNode(parent.getName()); 127 root.setNode(parent); 128 createChildNodes(root, parent); 129 130 tree = new CheckableTree(root); 131 tree.setRootVisible(false); 132 133 tree.getSelectionModel().setSelectionMode( 134 TreeSelectionModel.SINGLE_TREE_SELECTION); 135 tree.addMouseListener(new NodeSelectionListener(tree)); 136 tree.expandRow(0); 137 tree.expandRow(1); 138 139 getContentPane().add(createPanel(), BorderLayout.CENTER); 140 141 getContentPane().add(createBottomPanel(), BorderLayout.SOUTH); 142 143 getContentPane().add( 144 new DialogHeaderPanel(MailResourceLoader.getString("dialog", 145 "export", "header_title"), MailResourceLoader 146 .getString("dialog", "export", "header_description")), 147 BorderLayout.NORTH); 148 getRootPane().setDefaultButton(closeButton); 149 getRootPane().registerKeyboardAction(this, "CLOSE", 150 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), 151 JComponent.WHEN_IN_FOCUSED_WINDOW); 152 153 HelpManager.getInstance().enableHelpOnButton(helpButton, 155 "organising_and_managing_your_email_5"); 156 HelpManager.getInstance().enableHelpKey(getRootPane(), 157 "organising_and_managing_your_email_5"); 158 } 159 160 private JPanel createPanel() { 161 JPanel jpanel1 = new JPanel (); 162 FormLayout formlayout1 = new FormLayout( 163 "FILL:DEFAULT:GROW(1.0),3DLU,FILL:DEFAULT:NONE", 164 "CENTER:DEFAULT:NONE,1DLU,FILL:DEFAULT:GROW(1.0),3DLU,CENTER:DEFAULT:NONE"); 165 CellConstraints cc = new CellConstraints(); 166 jpanel1.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 167 jpanel1.setLayout(formlayout1); 168 169 JLabel jlabel1 = new JLabel (); 170 jlabel1.setText("Select Folders:"); 171 jpanel1.add(jlabel1, cc.xy(1, 1)); 172 173 JScrollPane scrollPane = new JScrollPane (tree); 174 scrollPane.setPreferredSize(new Dimension (350, 250)); 175 jpanel1.add(scrollPane, cc.xy(1, 3)); 176 177 jpanel1.add(createPanel1(), new CellConstraints(3, 3, 1, 1, 178 CellConstraints.DEFAULT, CellConstraints.TOP)); 179 180 return jpanel1; 181 } 182 183 private JPanel createPanel1() { 184 JPanel jpanel1 = new JPanel (); 185 FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE", 186 "CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE"); 187 CellConstraints cc = new CellConstraints(); 188 jpanel1.setLayout(formlayout1); 189 190 jpanel1.add(exportButton, cc.xy(1, 1)); 191 192 jpanel1.add(selectAllButton, cc.xy(1, 3)); 193 194 return jpanel1; 195 } 196 197 private JPanel createBottomPanel() { 198 JPanel bottomPanel = new JPanel (new BorderLayout ()); 199 bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); 200 201 JPanel buttonPanel = new JPanel (new GridLayout (1, 3, 6, 0)); 202 buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); 203 204 closeButton = new ButtonWithMnemonic(MailResourceLoader.getString( 205 "global", "close")); 206 closeButton.setActionCommand("CLOSE"); closeButton.addActionListener(this); 208 buttonPanel.add(closeButton); 209 210 helpButton = new ButtonWithMnemonic(MailResourceLoader.getString( 211 "global", "help")); 212 buttonPanel.add(helpButton); 213 bottomPanel.add(buttonPanel, BorderLayout.EAST); 214 215 return bottomPanel; 216 } 217 218 private void getTreeNodeIteration(TreeNode parent, List l) { 219 l.add(parent); 220 221 for (int i = 0; i < parent.getChildCount(); i++) { 222 l.add(parent.getChildAt(i)); 223 getTreeNodeIteration((TreeNode ) parent.getChildAt(i), l); 224 } 225 } 226 227 232 public void actionPerformed(ActionEvent e) { 233 String action = e.getActionCommand(); 234 235 if (action.equals("CLOSE")) { 236 setVisible(false); 237 } else if (action.equals("SELECTALL")) { 238 List list = new LinkedList (); 239 getTreeNodeIteration((TreeNode ) tree.getModel().getRoot(), list); 240 241 Iterator iterator = list.iterator(); 242 CheckableTreeNode node; 243 244 while (iterator.hasNext()) { 245 node = (CheckableTreeNode) iterator.next(); 246 node.setSelected(true); 247 ((DefaultTreeModel ) tree.getModel()).nodeChanged(node); 248 } 249 } else if (action.equals("EXPORT")) { 250 File destFile = null; 251 252 JFileChooser chooser = new JFileChooser (); 254 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 255 chooser.setMultiSelectionEnabled(false); 256 257 int result = chooser.showSaveDialog(this); 258 259 if (result == JFileChooser.APPROVE_OPTION) { 260 File file = chooser.getSelectedFile(); 261 262 destFile = file; 263 } else { 264 return; 265 } 266 267 setVisible(false); 268 269 List list = new LinkedList (); 271 getTreeNodeIteration((TreeNode ) tree.getModel().getRoot(), list); 272 273 Iterator it = list.iterator(); 274 275 Vector v = new Vector (); 276 277 while (it.hasNext()) { 279 CheckableItem node = (CheckableItem) it.next(); 280 281 boolean export = (boolean) node.isSelected(); 282 283 if (export) { 284 v.add(node); 285 } 286 } 287 288 MailFolderCommandReference r = null; 290 291 for (int i = 0; i < v.size(); i++) { 292 IMailFolder node = (IMailFolder) ((CheckableTreeNode) v.get(i)) 293 .getNode(); 294 295 r = new MailFolderCommandReference(node); 296 r.setDestFile(destFile); 297 298 CommandProcessor.getInstance() 300 .addOp(new ExportFolderCommand(r)); 301 } 302 303 } 304 } 305 306 class NodeSelectionListener extends MouseAdapter { 307 JTree tree; 308 309 NodeSelectionListener(JTree tree) { 310 this.tree = tree; 311 } 312 313 public void mouseClicked(MouseEvent e) { 314 int x = e.getX(); 315 int y = e.getY(); 316 int row = tree.getRowForLocation(x, y); 317 TreePath path = tree.getPathForRow(row); 318 319 if (path != null) { 321 CheckableItem node = (CheckableItem) path 322 .getLastPathComponent(); 323 324 node.setSelected(!node.isSelected()); 325 326 ((DefaultTreeModel ) tree.getModel()).nodeChanged(node); 327 328 if (row == 0) { 330 tree.revalidate(); 331 tree.repaint(); 332 } 333 } 334 } 335 } 336 } | Popular Tags |