1 package org.columba.mail.gui.table.selection; 17 18 import java.util.LinkedList ; 19 import java.util.ListIterator ; 20 21 import javax.swing.ListSelectionModel ; 22 import javax.swing.event.ListSelectionEvent ; 23 import javax.swing.event.ListSelectionListener ; 24 import javax.swing.tree.TreePath ; 25 26 import org.columba.api.command.ICommandReference; 27 import org.columba.api.selection.ISelectionListener; 28 import org.columba.api.selection.SelectionChangedEvent; 29 import org.columba.core.selection.SelectionHandler; 30 import org.columba.mail.command.MailFolderCommandReference; 31 import org.columba.mail.folder.IMailFolder; 32 import org.columba.mail.gui.table.IMessageNode; 33 import org.columba.mail.gui.table.ITableController; 34 import org.columba.mail.gui.table.model.MessageNode; 35 import org.columba.mail.gui.tree.selection.TreeSelectionChangedEvent; 36 37 57 public class TableSelectionHandler extends SelectionHandler implements 58 ListSelectionListener , ISelectionListener { 59 public static final String HANDLER_ID = "mail.table"; 60 61 62 private LinkedList <IMessageNode> messages; 63 64 private IMailFolder folder; 65 66 private boolean useLocalSelection; 69 70 private MailFolderCommandReference local; 71 72 private ITableController tableController; 73 76 public TableSelectionHandler(ITableController tableController) { 77 super(TableSelectionHandler.HANDLER_ID); 78 79 this.tableController = tableController; 80 81 tableController.getListSelectionModel().addListSelectionListener(this); 82 83 messages = new LinkedList <IMessageNode>(); 84 85 useLocalSelection = false; 86 } 87 88 92 public ICommandReference getSelection() { 93 if (useLocalSelection == true) { 94 return local; 95 } 96 97 MailFolderCommandReference reference = new MailFolderCommandReference( 98 folder, getUidArray()); 99 100 return reference; 101 } 102 103 107 public void setSelection(ICommandReference selection) { 108 MailFolderCommandReference ref = (MailFolderCommandReference) selection; 109 110 folder = (IMailFolder) ref.getSourceFolder(); 111 112 useLocalSelection = false; 113 114 119 120 } 121 122 private Object [] getUidArray() { 123 Object [] result = new Object [messages.size()]; 124 ListIterator it = messages.listIterator(); 125 126 int i = 0; 127 128 while (it.hasNext()) { 129 result[i++] = ((MessageNode) it.next()).getUid(); 130 } 131 132 return result; 133 } 134 135 139 public void valueChanged(ListSelectionEvent e) { 140 141 useLocalSelection = false; 142 143 if (e.getValueIsAdjusting() == true) { 145 return; 146 } 147 148 messages = new LinkedList <IMessageNode>(); 149 150 ListSelectionModel lsm = (ListSelectionModel ) e.getSource(); 151 152 if (lsm.isSelectionEmpty()) { 153 155 } else { 156 int[] rows = tableController.getSelectedRows(); 157 158 for (int i = 0; i < rows.length; i++) { 159 TreePath path = tableController.getPathForRow(rows[i]); 160 if ( path == null ) continue; 161 162 IMessageNode node = (IMessageNode) path.getLastPathComponent(); 163 messages.add(node); 164 } 165 } 166 167 fireSelectionChanged(new TableSelectionChangedEvent(folder, 168 getUidArray())); 169 170 } 171 172 public void setLocalReference(MailFolderCommandReference r) { 173 this.local = r; 174 175 useLocalSelection = true; 176 } 177 178 182 public void selectionChanged(SelectionChangedEvent e) { 183 if (((TreeSelectionChangedEvent) e).getSelected().length > 0) { 184 folder = ((TreeSelectionChangedEvent) e).getSelected()[0]; 185 } else { 186 folder = null; 187 } 188 } 189 } | Popular Tags |