1 package org.columba.mail.gui.contact.list; 17 18 import java.awt.datatransfer.StringSelection ; 19 import java.awt.dnd.DnDConstants ; 20 import java.awt.dnd.DragGestureEvent ; 21 import java.awt.dnd.DragGestureListener ; 22 import java.awt.dnd.DragSource ; 23 import java.awt.dnd.DragSourceDragEvent ; 24 import java.awt.dnd.DragSourceDropEvent ; 25 import java.awt.dnd.DragSourceEvent ; 26 import java.awt.dnd.DragSourceListener ; 27 import java.awt.dnd.DropTarget ; 28 import java.awt.dnd.DropTargetDragEvent ; 29 import java.awt.dnd.DropTargetDropEvent ; 30 import java.awt.dnd.DropTargetEvent ; 31 import java.awt.dnd.DropTargetListener ; 32 33 import javax.swing.event.ListSelectionEvent ; 34 import javax.swing.event.ListSelectionListener ; 35 36 import org.columba.addressbook.facade.IHeaderItem; 37 import org.columba.addressbook.facade.IModelFacade; 38 import org.columba.api.exception.ServiceNotFoundException; 39 import org.columba.mail.connector.ServiceConnector; 40 41 public class ContactDNDListView extends ContactList implements 42 DropTargetListener , DragSourceListener , DragGestureListener , 43 ListSelectionListener { 44 45 48 DropTarget dropTarget = null; 49 50 53 DragSource dragSource = null; 54 55 boolean acceptDrop = true; 56 57 private IHeaderItem[] selection1; 58 59 private IHeaderItem[] selection2; 60 61 int index = -1; 62 63 private boolean dndAction = false; 64 65 public ContactDNDListView() { 67 super(); 68 69 addListSelectionListener(this); 70 71 dropTarget = new DropTarget (this, this); 72 dragSource = DragSource.getDefaultDragSource(); 73 74 if (acceptDrop == true) { 75 dragSource.createDefaultDragGestureRecognizer(this, 76 DnDConstants.ACTION_COPY_OR_MOVE, this); 77 } else { 78 dragSource.createDefaultDragGestureRecognizer(this, 79 DnDConstants.ACTION_COPY, this); 80 } 81 } 82 83 public ContactDNDListView(ContactListModel model) { 84 super(model); 85 86 addListSelectionListener(this); 87 88 dropTarget = new DropTarget (this, this); 89 dragSource = new DragSource (); 90 91 if (acceptDrop == true) { 92 dragSource.createDefaultDragGestureRecognizer(this, 93 DnDConstants.ACTION_COPY_OR_MOVE, this); 94 } else { 95 dragSource.createDefaultDragGestureRecognizer(this, 96 DnDConstants.ACTION_COPY, this); 97 } 98 } 99 100 public void setAcceptDrop(boolean b) { 101 acceptDrop = b; 102 } 103 104 108 public void dragEnter(DropTargetDragEvent event) { 109 if (acceptDrop == true) { 111 event.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE); 112 } else { 113 event.acceptDrag(DnDConstants.ACTION_COPY); 114 } 115 } 116 117 121 public void dragExit(DropTargetEvent event) { 122 } 123 124 128 public void dragOver(DropTargetDragEvent event) { 129 } 130 131 135 public void drop(DropTargetDropEvent event) { 136 if (acceptDrop == false) { 137 event.rejectDrop(); 138 139 clearSelection(); 140 141 return; 142 } 143 144 IHeaderItem[] items = HeaderItemDNDManager.getInstance() 145 .getHeaderItemList(); 146 147 for (int i = 0; i < items.length; i++) { 148 IHeaderItem old = items[i]; 149 IHeaderItem newItem = null; 150 try { 151 IModelFacade c = ServiceConnector.getModelFacade(); 152 newItem = c.createHeaderItem(); 153 newItem.setName(old.getName()); 154 newItem.setDescription(old.getDescription()); 155 } catch (ServiceNotFoundException e) { 156 e.printStackTrace(); 157 } 158 159 addElement(newItem); 160 } 161 162 event.getDropTargetContext().dropComplete(true); 163 164 clearSelection(); 165 } 166 167 171 public void dropActionChanged(DropTargetDragEvent event) { 172 } 173 174 178 public void dragGestureRecognized(DragGestureEvent event) { 179 if (dndAction == false) { 180 185 if (selection1 == null) { 186 IHeaderItem[] items = new IHeaderItem[1]; 187 items[0] = (IHeaderItem) getSelectedValue(); 188 189 HeaderItemDNDManager.getInstance().setHeaderItemList(items); 190 } else if (selection1.length != 0) { 191 IHeaderItem[] items = new IHeaderItem[selection1.length]; 192 items = selection1; 193 HeaderItemDNDManager.getInstance().setHeaderItemList(items); 194 } 195 196 203 } else { 204 209 if (selection2.length != 0) { 210 IHeaderItem[] items = new IHeaderItem[selection2.length]; 211 items = selection2; 212 HeaderItemDNDManager.getInstance().setHeaderItemList(items); 213 } else { 214 IHeaderItem[] items = new IHeaderItem[1]; 215 items[0] = (IHeaderItem) getSelectedValue(); 216 217 HeaderItemDNDManager.getInstance().setHeaderItemList(items); 218 } 219 } 220 221 226 StringSelection text = new StringSelection ("contact"); 227 228 dragSource.startDrag(event, DragSource.DefaultMoveDrop, text, this); 229 230 clearSelection(); 231 } 232 233 238 public void dragDropEnd(DragSourceDropEvent event) { 239 if (event.getDropSuccess()) { 240 if (acceptDrop == true) { 241 IHeaderItem[] items = HeaderItemDNDManager.getInstance() 242 .getHeaderItemList(); 243 244 for (int i = 0; i < items.length; i++) { 245 ((ContactListModel) getModel()).removeElement(items[i]); 246 } 247 248 } 250 } 251 } 252 253 258 public void dragEnter(DragSourceDragEvent event) { 259 } 260 261 266 public void dragExit(DragSourceEvent event) { 267 } 268 269 274 public void dragOver(DragSourceDragEvent event) { 275 } 276 277 281 public void dropActionChanged(DragSourceDragEvent event) { 282 } 283 284 288 291 public void removeElement() { 292 ((ContactListModel) getModel()) 293 .removeElement((IHeaderItem) getSelectedValue()); 294 } 295 296 public void valueChanged(ListSelectionEvent e) { 297 if (dndAction == true) { 298 Object [] list = getSelectedValues(); 299 300 selection1 = new IHeaderItem[list.length]; 301 302 for (int i = 0; i < list.length; i++) { 303 selection1[i] = (IHeaderItem) list[i]; 304 } 305 306 dndAction = false; 307 } else { 308 Object [] list = getSelectedValues(); 309 310 selection2 = new IHeaderItem[list.length]; 311 312 for (int i = 0; i < list.length; i++) { 313 selection2[i] = (IHeaderItem) list[i]; 314 } 315 316 dndAction = true; 317 } 318 } 319 } 320 | Popular Tags |