Overview Package Class Use Source Tree Index Deprecated About
GNU Classpath (0.95)
Frames | No Frames

Source for java.awt.dnd.DragSourceContext

 1:  /* DragSourceContext.java --
 2:  Copyright (C) 2002 Free Software Foundation
 3: 
 4: This file is part of GNU Classpath.
 5: 
 6: GNU Classpath is free software; you can redistribute it and/or modify
 7: it under the terms of the GNU General Public License as published by
 8: the Free Software Foundation; either version 2, or (at your option)
 9: any later version.
 10: 
 11: GNU Classpath is distributed in the hope that it will be useful, but
 12: WITHOUT ANY WARRANTY; without even the implied warranty of
 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 14: General Public License for more details.
 15: 
 16: You should have received a copy of the GNU General Public License
 17: along with GNU Classpath; see the file COPYING. If not, write to the
 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 19: 02110-1301 USA.
 20: 
 21: Linking this library statically or dynamically with other modules is
 22: making a combined work based on this library. Thus, the terms and
 23: conditions of the GNU General Public License cover the whole
 24: combination.
 25: 
 26: As a special exception, the copyright holders of this library give you
 27: permission to link this library with independent modules to produce an
 28: executable, regardless of the license terms of these independent
 29: modules, and to copy and distribute the resulting executable under
 30: terms of your choice, provided that you also meet, for each linked
 31: independent module, the terms and conditions of the license of that
 32: module. An independent module is a module which is not derived from
 33: or based on this library. If you modify this library, you may extend
 34: this exception to your version of the library, but you are not
 35: obligated to do so. If you do not wish to do so, delete this
 36: exception statement from your version. */
 37: 
 38: 
 39:  package java.awt.dnd;
 40: 
 41:  import java.awt.Component;
 42:  import java.awt.Cursor;
 43:  import java.awt.Image;
 44:  import java.awt.Point;
 45:  import java.awt.datatransfer.Transferable;
 46:  import java.awt.dnd.peer.DragSourceContextPeer;
 47:  import java.io.Serializable;
 48:  import java.util.TooManyListenersException;
 49: 
 50:  /**
 51:  * @since 1.2
 52:  */
 53:  public class DragSourceContext
 54:  implements DragSourceListener, DragSourceMotionListener, Serializable
 55: {
 56:  /**
 57:  * Compatible with JDK 1.2+
 58:  */
 59:  static final long serialVersionUID = -115407898692194719L;
 60: 
 61:  protected static final int DEFAULT = 0;
 62:  protected static final int ENTER = 1;
 63:  protected static final int OVER = 2;
 64:  protected static final int CHANGED = 3;
 65: 
 66:  private DragSourceContextPeer peer;
 67:  private Cursor cursor;
 68:  private Transferable transferable;
 69:  private DragGestureEvent trigger;
 70:  private DragSourceListener dragSourceListener;
 71:  private boolean useCustomCursor;
 72:  private int sourceActions;
 73:  private Image image;
 74:  private Point offset;
 75:  
 76:  /**
 77:  * Initializes a drag source context.
 78:  *
 79:  * @exception IllegalArgumentException If Component or DragSource of trigger
 80:  * are null, the drag action for the trigger event is DnDConstants.ACTION_NONE
 81:  * or if the source actions for the DragGestureRecognizer associated with the
 82:  * trigger event are equal to DnDConstants.ACTION_NONE.
 83:  * @exception NullPointerException If peer, trans or trigger is null or if the
 84:  * image is not null but the offset is. 
 85:  */
 86:  public DragSourceContext (DragSourceContextPeer peer,
 87:  DragGestureEvent trigger, Cursor cursor,
 88:  Image image, Point offset, Transferable trans,
 89:  DragSourceListener dsl)
 90:  { 
 91:  if (peer == null
 92:  || trigger == null || trans == null
 93:  || (image != null && offset == null))
 94:  throw new NullPointerException ();
 95: 
 96:  if (trigger.getComponent () == null
 97:  || trigger.getDragSource () == null
 98:  || trigger.getDragAction () == DnDConstants.ACTION_NONE
 99:  || trigger.getSourceAsDragGestureRecognizer ()
 100:  .getSourceActions () == DnDConstants.ACTION_NONE)
 101:  throw new IllegalArgumentException ();
 102: 
 103:  this.peer = peer;
 104:  this.trigger = trigger;
 105:  this.cursor = cursor;
 106:  this.image = image;
 107:  this.offset = offset;
 108:  this.transferable = trans;
 109:  this.dragSourceListener = dsl;
 110:  this.sourceActions = trigger.getSourceAsDragGestureRecognizer().getSourceActions();
 111:  
 112:  setCursor(cursor);
 113:  updateCurrentCursor(trigger.getDragAction(), sourceActions, DEFAULT);
 114:  }
 115: 
 116:  /**
 117:  * Returns the DragSource object associated with the
 118:  * DragGestureEvent.
 119:  * 
 120:  * @return the DragSource associated with the trigger.
 121:  */
 122:  public DragSource getDragSource()
 123:  {
 124:  return trigger.getDragSource ();
 125:  }
 126: 
 127:  /**
 128:  * Returns the component associated with this.
 129:  * 
 130:  * @return the component associated with the trigger.
 131:  */
 132:  public Component getComponent()
 133:  {
 134:  return trigger.getComponent ();
 135:  }
 136: 
 137:  /**
 138:  * Gets the trigger associated with this.
 139:  * 
 140:  * @return the trigger.
 141:  */
 142:  public DragGestureEvent getTrigger()
 143:  {
 144:  return trigger;
 145:  }
 146: 
 147:  /**
 148:  * Returns the source actions for the DragGestureRecognizer.
 149:  * 
 150:  * @return the source actions for DragGestureRecognizer.
 151:  */
 152:  public int getSourceActions()
 153:  {
 154:  if (sourceActions == 0)
 155:  sourceActions = trigger.getSourceAsDragGestureRecognizer().getSourceActions();
 156:  return sourceActions;
 157:  }
 158: 
 159:  /**
 160:  * Sets the cursor for this drag operation to the specified cursor.
 161:  * 
 162:  * @param cursor c - the Cursor to use, or null to use the default drag
 163:  * cursor.
 164:  */
 165:  public void setCursor(Cursor cursor)
 166:  {
 167:  if (cursor == null)
 168:  useCustomCursor = false;
 169:  else
 170:  useCustomCursor = true;
 171:  this.cursor = cursor;
 172:  peer.setCursor(cursor);
 173:  }
 174: 
 175:  /**
 176:  * Returns the current cursor or null if the default
 177:  * drag cursor is used.
 178:  * 
 179:  * @return the current cursor or null.
 180:  */
 181:  public Cursor getCursor()
 182:  {
 183:  return cursor;
 184:  }
 185: 
 186:  /**
 187:  * Adds a <code>DragSourceListener</code>.
 188:  *
 189:  * @exception TooManyListenersException If a <code>DragSourceListener</code>
 190:  * has already been added.
 191:  */
 192:  public void addDragSourceListener (DragSourceListener dsl)
 193:  throws TooManyListenersException
 194:  {
 195:  if (dragSourceListener != null)
 196:  throw new TooManyListenersException ();
 197: 
 198:  dragSourceListener = dsl;
 199:  }
 200: 
 201:  public void removeDragSourceListener (DragSourceListener dsl)
 202:  {
 203:  if (dragSourceListener == dsl)
 204:  dragSourceListener = null;
 205:  }
 206: 
 207:  /**
 208:  * This function tells the peer that the DataFlavors have been modified.
 209:  */
 210:  public void transferablesFlavorsChanged()
 211:  {
 212:  peer.transferablesFlavorsChanged();
 213:  }
 214: 
 215:  /**
 216:  * Calls dragEnter on the listeners registered with this
 217:  * and with the DragSource.
 218:  * 
 219:  * @param e - the DragSourceDragEvent
 220:  */
 221:  public void dragEnter(DragSourceDragEvent e)
 222:  {
 223:  if (dragSourceListener != null)
 224:  dragSourceListener.dragEnter(e);
 225:  
 226:  DragSource ds = getDragSource();
 227:  DragSourceListener[] dsl = ds.getDragSourceListeners();
 228:  for (int i = 0; i < dsl.length; i++)
 229:  dsl[i].dragEnter(e);
 230:  
 231:  updateCurrentCursor(e.getDropAction(), e.getTargetActions(), ENTER);
 232:  }
 233: 
 234:  /**
 235:  * Calls dragOver on the listeners registered with this
 236:  * and with the DragSource.
 237:  * 
 238:  * @param e - the DragSourceDragEvent
 239:  */
 240:  public void dragOver(DragSourceDragEvent e)
 241:  {
 242:  if (dragSourceListener != null)
 243:  dragSourceListener.dragOver(e);
 244:  
 245:  DragSource ds = getDragSource();
 246:  DragSourceListener[] dsl = ds.getDragSourceListeners();
 247:  for (int i = 0; i < dsl.length; i++)
 248:  dsl[i].dragOver(e);
 249:  
 250:  updateCurrentCursor(e.getDropAction(), e.getTargetActions(), OVER);
 251:  }
 252:  
 253:  /**
 254:  * Calls dragExit on the listeners registered with this
 255:  * and with the DragSource.
 256:  * 
 257:  * @param e - the DragSourceEvent
 258:  */
 259:  public void dragExit(DragSourceEvent e)
 260:  {
 261:  if (dragSourceListener != null)
 262:  dragSourceListener.dragExit(e);
 263:  
 264:  DragSource ds = getDragSource();
 265:  DragSourceListener[] dsl = ds.getDragSourceListeners();
 266:  for (int i = 0; i < dsl.length; i++)
 267:  dsl[i].dragExit(e);
 268:  
 269:  updateCurrentCursor(DnDConstants.ACTION_NONE, DnDConstants.ACTION_NONE,
 270:  DEFAULT);
 271:  }
 272: 
 273:  /**
 274:  * Calls dropActionChanged on the listeners registered with this
 275:  * and with the DragSource.
 276:  * 
 277:  * @param e - the DragSourceDragEvent
 278:  */
 279:  public void dropActionChanged(DragSourceDragEvent e)
 280:  {
 281:  if (dragSourceListener != null)
 282:  dragSourceListener.dropActionChanged(e);
 283:  
 284:  DragSource ds = getDragSource();
 285:  DragSourceListener[] dsl = ds.getDragSourceListeners();
 286:  for (int i = 0; i < dsl.length; i++)
 287:  dsl[i].dropActionChanged(e);
 288:  
 289:  updateCurrentCursor(e.getDropAction(), e.getTargetActions(), CHANGED);
 290:  }
 291: 
 292:  /**
 293:  * Calls dragDropEnd on the listeners registered with this
 294:  * and with the DragSource.
 295:  * 
 296:  * @param e - the DragSourceDropEvent
 297:  */
 298:  public void dragDropEnd(DragSourceDropEvent e)
 299:  {
 300:  if (dragSourceListener != null)
 301:  dragSourceListener.dragDropEnd(e);
 302:  
 303:  DragSource ds = getDragSource();
 304:  DragSourceListener[] dsl = ds.getDragSourceListeners();
 305:  for (int i = 0; i < dsl.length; i++)
 306:  dsl[i].dragDropEnd(e);
 307:  }
 308: 
 309:  /**
 310:  * Calls dragMouseMoved on the listeners registered with the DragSource.
 311:  * 
 312:  * @param e - the DragSourceDragEvent
 313:  */
 314:  public void dragMouseMoved(DragSourceDragEvent e)
 315:  {
 316:  DragSource ds = getDragSource();
 317:  DragSourceMotionListener[] dsml = ds.getDragSourceMotionListeners();
 318:  for (int i = 0; i < dsml.length; i++)
 319:  dsml[i].dragMouseMoved(e);
 320:  }
 321: 
 322:  /**
 323:  * Returns the Transferable set with this object.
 324:  * 
 325:  * @return the transferable.
 326:  */
 327:  public Transferable getTransferable()
 328:  {
 329:  return transferable;
 330:  }
 331: 
 332:  /**
 333:  * This function sets the drag cursor for the specified operation, actions and
 334:  * status if the default drag cursor is active. Otherwise, the cursor is not
 335:  * updated in any way.
 336:  * 
 337:  * @param dropOp - the current operation.
 338:  * @param targetAct - the supported actions.
 339:  * @param status - the status of the cursor (constant).
 340:  */
 341:  protected void updateCurrentCursor(int dropOp, int targetAct, int status)
 342:  {
 343:  if (! useCustomCursor)
 344:  {
 345:  Cursor newCursor = null;
 346:  switch (status)
 347:  {
 348:  default:
 349:  targetAct = DnDConstants.ACTION_NONE;
 350:  case ENTER:
 351:  case CHANGED:
 352:  case OVER:
 353:  int action = dropOp & targetAct;
 354:  if (action == DnDConstants.ACTION_NONE)
 355:  {
 356:  if ((dropOp & DnDConstants.ACTION_LINK) != 0)
 357:  newCursor = DragSource.DefaultLinkNoDrop;
 358:  else if ((dropOp & DnDConstants.ACTION_MOVE) != 0)
 359:  newCursor = DragSource.DefaultMoveNoDrop;
 360:  else
 361:  newCursor = DragSource.DefaultCopyNoDrop;
 362:  }
 363:  else
 364:  {
 365:  if ((dropOp & DnDConstants.ACTION_LINK) != 0)
 366:  newCursor = DragSource.DefaultLinkDrop;
 367:  else if ((dropOp & DnDConstants.ACTION_MOVE) != 0)
 368:  newCursor = DragSource.DefaultMoveDrop;
 369:  else
 370:  newCursor = DragSource.DefaultCopyDrop;
 371:  }
 372:  }
 373:  
 374:  if (cursor == null || ! cursor.equals(newCursor))
 375:  {
 376:  cursor = newCursor;
 377:  DragSourceContextPeer p = peer;
 378:  if (p != null)
 379:  p.setCursor(cursor);
 380:  }
 381:  }
 382:  }
 383: } // class DragSourceContext
Overview Package Class Use Source Tree Index Deprecated About
GNU Classpath (0.95)

AltStyle によって変換されたページ (->オリジナル) /