1 package org.columba.mail.gui.tree.selection; 17 18 import java.util.LinkedList ; 19 import java.util.logging.Logger ; 20 21 import javax.swing.event.TreeSelectionEvent ; 22 import javax.swing.event.TreeSelectionListener ; 23 import javax.swing.tree.TreePath ; 24 25 import org.columba.api.command.ICommandReference; 26 import org.columba.core.selection.SelectionHandler; 27 import org.columba.mail.command.MailFolderCommandReference; 28 import org.columba.mail.folder.IMailFolder; 29 import org.columba.mail.gui.tree.TreeView; 30 31 43 public class TreeSelectionHandler extends SelectionHandler implements 44 TreeSelectionListener { 45 46 public static final String HANDLER_ID = "mail.tree"; 47 48 49 private static final Logger LOG = Logger 50 .getLogger("org.columba.mail.gui.tree.selection"); 51 52 private static final IMailFolder[] FOLDER_ARRAY = { null }; 53 54 private TreeView view; 55 56 private LinkedList selectedFolders; 57 58 private boolean setSelection; 59 60 public TreeSelectionHandler(TreeView view) { 61 super(TreeSelectionHandler.HANDLER_ID); 62 this.view = view; 63 view.addTreeSelectionListener(this); 64 selectedFolders = new LinkedList (); 65 66 setSelection = false; 67 } 68 69 74 public ICommandReference getSelection() { 75 if (selectedFolders.size() == 0) 76 return null; 77 78 MailFolderCommandReference reference = new MailFolderCommandReference( 79 (IMailFolder) selectedFolders.get(0)); 80 81 return reference; 82 } 83 84 88 public void valueChanged(TreeSelectionEvent e) { 89 if (e.getPath() == null) { 91 return; 92 } 93 94 if (view.isInDndAction()) { 97 return; 98 } 99 100 if (setSelection) { 101 selectedFolders.clear(); 102 setSelection = false; 103 } 104 105 for (int i = 0; i < e.getPaths().length; i++) { 106 if (e.getPaths()[i].getLastPathComponent() instanceof IMailFolder) { 107 IMailFolder folder = (IMailFolder) e.getPaths()[i] 108 .getLastPathComponent(); 109 110 if (e.isAddedPath(i)) { 111 LOG.info("Folder added to Selection= " + folder.getName()); 112 selectedFolders.add(folder); 113 } else { 114 LOG.info("Folder removed from Selection= " 115 + folder.getName()); 116 selectedFolders.remove(folder); 117 } 118 } 119 } 120 121 if ( selectedFolders.size() == 0 ) return; 122 123 fireSelectionChanged(new TreeSelectionChangedEvent( 124 (IMailFolder[]) selectedFolders.toArray(FOLDER_ARRAY))); 125 126 } 127 128 public void setSelection(ICommandReference selection) { 129 130 selectedFolders.clear(); 131 132 if (selection == null 133 || ((MailFolderCommandReference) selection).getSourceFolder() == null) { 134 view.clearSelection(); 135 } else { 136 137 TreePath path = ((IMailFolder) ((MailFolderCommandReference) selection) 138 .getSourceFolder()).getSelectionTreePath(); 139 view.setSelectionPath(path); 140 view.expandPath(path); 141 selectedFolders.add(((MailFolderCommandReference) selection) 142 .getSourceFolder()); 143 } 144 145 setSelection = true; 146 147 fireSelectionChanged(new TreeSelectionChangedEvent( 148 (IMailFolder[]) selectedFolders.toArray(FOLDER_ARRAY))); 149 150 } 151 } | Popular Tags |