|                                                                                                              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                                                                                                                                                                                              |