From: Michael Koch Date: Sun, 2 Mar 2003 14:24:48 +0000 (+0000) Subject: DnDEventMulticaster.java: New file. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b4822ade387234e8ee361ed9b69ab399f12afa04;p=gcc.git DnDEventMulticaster.java: New file. 2003-03-02 Michael Koch * java/awt/dnd/DnDEventMulticaster.java: New file. * java/awt/dnd/DragSource.java (flavorMap): New member variable. (dragSourceListener): New member variable. (dragSourceMotionListener): New member variable. (getFlavorMap): Implemented. (createDragGestureRecognizer): Implemented. (addDragSourceListener): Implemented. (removeDragSourceListener): Implemented. (getDragSourceListeners): Implemented. (addDragSourceMotionListener): Implemented. (removeDragSourceMotionListener): Implemented. (getDragSourceMotionListeners): Implemented. (getListeners): Implemented. * java/awt/dnd/DragSourceContext.java (peer): New member variable. (cursor): New member variable. (transferable): New member variable. (trigger): New member variable. (dragSourceListener): New member variable. (image): New member variable. (offset): New member variable. (DragSourceContext): Implemented. (getDragSource): Implemented. (getComponent): Implemented. (getTrigger): Implemented. (getSourceActions): Implemented. (setCursor): Implemented. (getCursor): Implemented. (addDragSourceListener): Implemented. (removeDragSourceListener): Implemented. (getTransferable): Implemented. * java/awt/dnd/DropTarget.java (DropTargetAutoScroller.component): New member variable. (DropTargetAutoScroller.point): New member variable. (DropTargetAutoScroller.DropTargetAutoScroller): Implemented. (DropTargetAutoScroller.updateLocation): Implemented. (active): Renamed from isActive, defaults to true now. (component): New member variable. (flavorMap): New member variable. (actions): New member variable. (dropTargetContext): New member variable. (dropTargetListener): New member variable. (DropTarget): Implemented. (getComponent): Implemented. (setComponent): Implemented. (setDefaultActions): Implemented. (getDefaultActions): Implemented. (setActive): Use active instead of isActive. (isActive): Use active instead of isActive. (addDropTargetListener): Implemented. (removeDropTargetListener): Implemented. (getFlavorMap): Implemented. (setFlavorMap): Implemented. (getDropTargetContext): Implemented. (createDropTargetContext): Implemented. (createDropTargetAutoScroller): Implemented. * java/awt/dnd/DropTargetContext.java (TransferableProxy.getTransferDataFlavors): Implemented. (TransferableProxy.isDataFlavorSupported): Implemented. (TransferableProxy.getTransferData): Implemented. (dropTarget): New member variable. (dtcp): New member variable. (DropTargetContext): New package private constructor. (getDropTarget): Implemented. (getComponent): Implemented. (addNotify): Implemented. (removeNotify): Implemented. (getCurrentDataFlavorsAsList): Implemented. (isDataFlavorSupported): Implemented. * java/awt/dnd/MouseDragGestureRecognizer.java (registerListeners): Implemented. (unregisterListeners): Implemented. * Makefile.am (awt_java_source_files): Added java/awt/dnd/DnDEventMulticaster.java. * Makefile.in: Regenerated. From-SVN: r63665 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 6ac880bc938..3416b9ba954 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,82 @@ +2003-03-02 Michael Koch + + * java/awt/dnd/DnDEventMulticaster.java: New file. + * java/awt/dnd/DragSource.java + (flavorMap): New member variable. + (dragSourceListener): New member variable. + (dragSourceMotionListener): New member variable. + (getFlavorMap): Implemented. + (createDragGestureRecognizer): Implemented. + (addDragSourceListener): Implemented. + (removeDragSourceListener): Implemented. + (getDragSourceListeners): Implemented. + (addDragSourceMotionListener): Implemented. + (removeDragSourceMotionListener): Implemented. + (getDragSourceMotionListeners): Implemented. + (getListeners): Implemented. + * java/awt/dnd/DragSourceContext.java + (peer): New member variable. + (cursor): New member variable. + (transferable): New member variable. + (trigger): New member variable. + (dragSourceListener): New member variable. + (image): New member variable. + (offset): New member variable. + (DragSourceContext): Implemented. + (getDragSource): Implemented. + (getComponent): Implemented. + (getTrigger): Implemented. + (getSourceActions): Implemented. + (setCursor): Implemented. + (getCursor): Implemented. + (addDragSourceListener): Implemented. + (removeDragSourceListener): Implemented. + (getTransferable): Implemented. + * java/awt/dnd/DropTarget.java + (DropTargetAutoScroller.component): New member variable. + (DropTargetAutoScroller.point): New member variable. + (DropTargetAutoScroller.DropTargetAutoScroller): Implemented. + (DropTargetAutoScroller.updateLocation): Implemented. + (active): Renamed from isActive, defaults to true now. + (component): New member variable. + (flavorMap): New member variable. + (actions): New member variable. + (dropTargetContext): New member variable. + (dropTargetListener): New member variable. + (DropTarget): Implemented. + (getComponent): Implemented. + (setComponent): Implemented. + (setDefaultActions): Implemented. + (getDefaultActions): Implemented. + (setActive): Use active instead of isActive. + (isActive): Use active instead of isActive. + (addDropTargetListener): Implemented. + (removeDropTargetListener): Implemented. + (getFlavorMap): Implemented. + (setFlavorMap): Implemented. + (getDropTargetContext): Implemented. + (createDropTargetContext): Implemented. + (createDropTargetAutoScroller): Implemented. + * java/awt/dnd/DropTargetContext.java + (TransferableProxy.getTransferDataFlavors): Implemented. + (TransferableProxy.isDataFlavorSupported): Implemented. + (TransferableProxy.getTransferData): Implemented. + (dropTarget): New member variable. + (dtcp): New member variable. + (DropTargetContext): New package private constructor. + (getDropTarget): Implemented. + (getComponent): Implemented. + (addNotify): Implemented. + (removeNotify): Implemented. + (getCurrentDataFlavorsAsList): Implemented. + (isDataFlavorSupported): Implemented. + * java/awt/dnd/MouseDragGestureRecognizer.java + (registerListeners): Implemented. + (unregisterListeners): Implemented. + * Makefile.am + (awt_java_source_files): Added java/awt/dnd/DnDEventMulticaster.java. + * Makefile.in: Regenerated. + 2003-03-02 Michael Koch * java/awt/Component.java diff --git a/libjava/Makefile.am b/libjava/Makefile.am index d6054ccbb0b..e5f849fcce2 100644 --- a/libjava/Makefile.am +++ b/libjava/Makefile.am @@ -1037,6 +1037,7 @@ java/awt/dnd/peer/DragSourceContextPeer.java \ java/awt/dnd/peer/DropTargetContextPeer.java \ java/awt/dnd/peer/DropTargetPeer.java \ java/awt/dnd/DnDConstants.java \ +java/awt/dnd/DnDEventMulticaster.java \ java/awt/dnd/DragGestureEvent.java \ java/awt/dnd/DragGestureListener.java \ java/awt/dnd/DragGestureRecognizer.java \ diff --git a/libjava/Makefile.in b/libjava/Makefile.in index d07f68d31af..589605c7f3f 100644 --- a/libjava/Makefile.in +++ b/libjava/Makefile.in @@ -805,6 +805,7 @@ java/awt/dnd/peer/DragSourceContextPeer.java \ java/awt/dnd/peer/DropTargetContextPeer.java \ java/awt/dnd/peer/DropTargetPeer.java \ java/awt/dnd/DnDConstants.java \ +java/awt/dnd/DnDEventMulticaster.java \ java/awt/dnd/DragGestureEvent.java \ java/awt/dnd/DragGestureListener.java \ java/awt/dnd/DragGestureRecognizer.java \ @@ -3042,6 +3043,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \ .deps/java/awt/datatransfer/Transferable.P \ .deps/java/awt/datatransfer/UnsupportedFlavorException.P \ .deps/java/awt/dnd/Autoscroll.P .deps/java/awt/dnd/DnDConstants.P \ +.deps/java/awt/dnd/DnDEventMulticaster.P \ .deps/java/awt/dnd/DragGestureEvent.P \ .deps/java/awt/dnd/DragGestureListener.P \ .deps/java/awt/dnd/DragGestureRecognizer.P \ diff --git a/libjava/java/awt/dnd/DnDEventMulticaster.java b/libjava/java/awt/dnd/DnDEventMulticaster.java new file mode 100644 index 00000000000..0241e371f44 --- /dev/null +++ b/libjava/java/awt/dnd/DnDEventMulticaster.java @@ -0,0 +1,74 @@ +/* DnDEventMulticaster.java -- helper class for listener chains in java.awt.dnd + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.awt.dnd; + +import java.awt.AWTEventMulticaster; +import java.util.EventListener; + +class DnDEventMulticaster extends AWTEventMulticaster +{ + protected DnDEventMulticaster (EventListener a, EventListener b) + { + super (a, b); + } + + public static DragSourceListener add (DragSourceListener a, + DragSourceListener b) + { + return (DragSourceListener) addInternal (a, b); + } + + public static DragSourceMotionListener add (DragSourceMotionListener a, + DragSourceMotionListener b) + { + return (DragSourceMotionListener) addInternal (a, b); + } + + public static DragSourceListener remove (DragSourceListener a, + DragSourceListener b) + { + return (DragSourceListener) removeInternal (a, b); + } + + public static DragSourceMotionListener remove (DragSourceMotionListener a, + DragSourceMotionListener b) + { + return (DragSourceMotionListener) removeInternal (a, b); + } +} diff --git a/libjava/java/awt/dnd/DragSource.java b/libjava/java/awt/dnd/DragSource.java index 740235ac83c..f6083f674f6 100644 --- a/libjava/java/awt/dnd/DragSource.java +++ b/libjava/java/awt/dnd/DragSource.java @@ -44,12 +44,20 @@ import java.awt.GraphicsEnvironment; import java.awt.HeadlessException; import java.awt.Image; import java.awt.Point; +import java.awt.Toolkit; import java.awt.datatransfer.FlavorMap; +import java.awt.datatransfer.SystemFlavorMap; import java.awt.datatransfer.Transferable; import java.awt.dnd.peer.DragSourceContextPeer; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.EventListener; +/** + * @since 1.2 + */ public class DragSource implements Serializable { /** @@ -64,6 +72,11 @@ public class DragSource implements Serializable public static final Cursor DefaultMoveNoDrop = null; public static final Cursor DefaultLinkNoDrop = null; + private transient FlavorMap flavorMap = SystemFlavorMap.getDefaultFlavorMap (); + + private transient DragSourceListener dragSourceListener; + private transient DragSourceMotionListener dragSourceMotionListener; + /** * Initializes the drag source. * @@ -159,51 +172,89 @@ public class DragSource implements Serializable public FlavorMap getFlavorMap() { - return null; + return flavorMap; } public DragGestureRecognizer createDragGestureRecognizer(Class recognizer, Component c, int actions, DragGestureListener dgl) { - return null; + return Toolkit.getDefaultToolkit () + .createDragGestureRecognizer (recognizer, this, c, actions, + dgl); } public DragGestureRecognizer createDefaultDragGestureRecognizer(Component c, int actions, DragGestureListener dgl) { - return null; + return createDragGestureRecognizer (MouseDragGestureRecognizer.class, c, + actions, dgl); } + /** + * @since 1.4 + */ public void addDragSourceListener(DragSourceListener l) { + DnDEventMulticaster.add (dragSourceListener, l); } + /** + * @since 1.4 + */ public void removeDragSourceListener(DragSourceListener l) { + DnDEventMulticaster.remove (dragSourceListener, l); } + /** + * @since 1.4 + */ public DragSourceListener[] getDragSourceListeners() { - return null; + return (DragSourceListener[]) getListeners (DragSourceListener.class); } + /** + * @since 1.4 + */ public void addDragSourceMotionListener(DragSourceMotionListener l) { + DnDEventMulticaster.add (dragSourceMotionListener, l); } + /** + * @since 1.4 + */ public void removeDragSourceMotionListener(DragSourceMotionListener l) { + DnDEventMulticaster.remove (dragSourceMotionListener, l); } - public DragSourceMotionListener[] getDragSourceMotionListeners() + /** + * @since 1.4 + */ + public DragSourceMotionListener[] getDragSourceMotionListeners () { - return null; + return (DragSourceMotionListener[]) getListeners + (DragSourceMotionListener.class); } - public EventListener[] getListeners(Class type) + /** + * @since 1.4 + */ + public EventListener[] getListeners (Class listenerType) { - return null; + if (listenerType == DragSourceListener.class) + return DnDEventMulticaster.getListeners (dragSourceListener, + listenerType); + + if (listenerType == DragSourceMotionListener.class) + return DnDEventMulticaster.getListeners (dragSourceMotionListener, + listenerType); + + // Return an empty EventListener array. + return new EventListener [0]; } } // class DragSource diff --git a/libjava/java/awt/dnd/DragSourceContext.java b/libjava/java/awt/dnd/DragSourceContext.java index 45191d24365..1760cd02065 100644 --- a/libjava/java/awt/dnd/DragSourceContext.java +++ b/libjava/java/awt/dnd/DragSourceContext.java @@ -44,12 +44,21 @@ import java.awt.Image; import java.awt.Point; import java.awt.datatransfer.Transferable; import java.awt.dnd.peer.DragSourceContextPeer; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.TooManyListenersException; +/** + * @since 1.2 + */ public class DragSourceContext implements DragSourceListener, DragSourceMotionListener, Serializable { + /** + * Compatible with JDK 1.2+ + */ static final long serialVersionUID = -115407898692194719L; protected static final int DEFAULT = 0; @@ -57,39 +66,81 @@ public class DragSourceContext protected static final int OVER = 2; protected static final int CHANGED = 3; - public DragSourceContext(DragSourceContextPeer peer, DragGestureEvent dge, - Cursor cursor, Image image, Point offset, - Transferable trans, DragSourceListener dsl) - { + private DragSourceContextPeer peer; + private Cursor cursor; + private Transferable transferable; + private DragGestureEvent trigger; + private DragSourceListener dragSourceListener; + private boolean useCustomCursor; // FIXME: currently unused but needed for serialization. + private int sourceActions; // FIXME: currently unused but needed for serialization. + private Image image; + private Point offset; + + /** + * Initializes a drag source context. + * + * @exception IllegalArgumentException If Component or DragSource of trigger + * are null, the drag action for the trigger event is DnDConstants.ACTION_NONE + * or if the source actions for the DragGestureRecognizer associated with the + * trigger event are equal to DnDConstants.ACTION_NONE. + * @exception NullPointerException If peer or trigger is null. + */ + public DragSourceContext (DragSourceContextPeer peer, + DragGestureEvent trigger, Cursor cursor, + Image image, Point offset, Transferable trans, + DragSourceListener dsl) + { + if (peer == null + || trigger == null) + throw new NullPointerException (); + + if (trigger.getComponent () == null + || trigger.getDragSource () == null + || trigger.getDragAction () == DnDConstants.ACTION_NONE + || trigger.getSourceAsDragGestureRecognizer () + .getSourceActions () == DnDConstants.ACTION_NONE) + throw new IllegalArgumentException (); + + this.peer = peer; + this.trigger = trigger; + this.cursor = cursor; + this.image = image; + this.offset = offset; + this.transferable = trans; + this.dragSourceListener = dsl; + + throw new Error ("not implemented"); } public DragSource getDragSource() { - return null; + return trigger.getDragSource (); } public Component getComponent() { - return null; + return trigger.getComponent (); } public DragGestureEvent getTrigger() { - return null; + return trigger; } public int getSourceActions() { - return 0; + return trigger.getSourceAsDragGestureRecognizer ().getSourceActions (); } - public void setCursor(Cursor c) + public void setCursor (Cursor cursor) { + this.cursor = cursor; + // FIXME: Check if we need to do more here } public Cursor getCursor() { - return null; + return cursor; } /** @@ -101,10 +152,16 @@ public class DragSourceContext public void addDragSourceListener (DragSourceListener dsl) throws TooManyListenersException { + if (dragSourceListener != null) + throw new TooManyListenersException (); + + dragSourceListener = dsl; } - public void removeDragSourceListener(DragSourceListener l) + public void removeDragSourceListener (DragSourceListener dsl) { + if (dragSourceListener == dsl) + dragSourceListener = null; } public void transferablesFlavorsChanged() @@ -137,7 +194,7 @@ public class DragSourceContext public Transferable getTransferable() { - return null; + return transferable; } protected void updateCurrentCursor(int dropOp, int targetAct, int status) diff --git a/libjava/java/awt/dnd/DropTarget.java b/libjava/java/awt/dnd/DropTarget.java index 09c642cf54f..3be2786a5a9 100644 --- a/libjava/java/awt/dnd/DropTarget.java +++ b/libjava/java/awt/dnd/DropTarget.java @@ -39,6 +39,8 @@ package java.awt.dnd; import java.awt.Point; import java.awt.Component; +import java.awt.GraphicsEnvironment; +import java.awt.HeadlessException; import java.awt.datatransfer.FlavorMap; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -46,7 +48,10 @@ import java.io.Serializable; import java.util.EventListener; import java.util.TooManyListenersException; -/** STUB CLASS ONLY */ +/** + * @author Michael Koch + * @since 1.2 + */ public class DropTarget implements DropTargetListener, EventListener, Serializable { @@ -58,12 +63,18 @@ public class DropTarget protected static class DropTargetAutoScroller implements ActionListener { + private Component component; + private Point point; + protected DropTargetAutoScroller (Component c, Point p) { + component = c; + point = p; } protected void updateLocation (Point newLocn) { + point = newLocn; } protected void stop () @@ -74,9 +85,13 @@ public class DropTarget { } } - - // FIXME: check the correctness of default value. - private boolean isActive = false; + + private Component component; + private FlavorMap flavorMap; + private int actions; + private DropTargetContext dropTargetContext; + private DropTargetListener dropTargetListener; + private boolean active = true; /** * Creates a DropTarget object. @@ -131,6 +146,15 @@ public class DropTarget public DropTarget (Component c, int i, DropTargetListener dtl, boolean b, FlavorMap fm) { + if (GraphicsEnvironment.isHeadless ()) + throw new HeadlessException (); + + component = c; + actions = i; + dropTargetListener = dtl; + flavorMap = fm; + + setActive (b); } /** @@ -138,6 +162,7 @@ public class DropTarget */ public void setComponent (Component c) { + component = c; } /** @@ -145,7 +170,7 @@ public class DropTarget */ public Component getComponent () { - return null; + return component; } /** @@ -153,6 +178,7 @@ public class DropTarget */ public void setDefaultActions (int ops) { + actions = ops; } /** @@ -160,17 +186,17 @@ public class DropTarget */ public int getDefaultActions () { - return 0; + return actions; } - public void setActive(boolean isActive) + public void setActive (boolean active) { - this.isActive = isActive; + this.active = active; } public boolean isActive() { - return this.isActive; + return active; } /** @@ -182,10 +208,16 @@ public class DropTarget public void addDropTargetListener (DropTargetListener dtl) throws TooManyListenersException { + if (dtl != null) + throw new TooManyListenersException (); + + dropTargetListener = dtl; } public void removeDropTargetListener(DropTargetListener dtl) { + // FIXME: Do we need to do something with dtl ? + dropTargetListener = null; } public void dragEnter(DropTargetDragEvent dtde) @@ -210,11 +242,12 @@ public class DropTarget public FlavorMap getFlavorMap() { - return null; + return flavorMap; } public void setFlavorMap(FlavorMap fm) { + flavorMap = fm; } public void addNotify(java.awt.peer.ComponentPeer peer) @@ -227,18 +260,21 @@ public class DropTarget public DropTargetContext getDropTargetContext() { - return null; + if (dropTargetContext == null) + dropTargetContext = createDropTargetContext (); + + return dropTargetContext; } protected DropTargetContext createDropTargetContext() { - return null; + return new DropTargetContext (this); } protected DropTarget.DropTargetAutoScroller createDropTargetAutoScroller (Component c, Point p) { - return null; + return new DropTarget.DropTargetAutoScroller (c, p); } protected void initializeAutoscrolling(Point p) diff --git a/libjava/java/awt/dnd/DropTargetContext.java b/libjava/java/awt/dnd/DropTargetContext.java index eca2f6e3763..4fc1a4428a9 100644 --- a/libjava/java/awt/dnd/DropTargetContext.java +++ b/libjava/java/awt/dnd/DropTargetContext.java @@ -67,46 +67,49 @@ public class DropTargetContext implements Serializable public DataFlavor[] getTransferDataFlavors () { - // FIXME: implement this - return null; + return transferable.getTransferDataFlavors (); } public boolean isDataFlavorSupported (DataFlavor flavor) { - // FIXME: implement this - return false; + return transferable.isDataFlavorSupported (flavor); } public Object getTransferData (DataFlavor flavor) throws UnsupportedFlavorException, IOException { - // FIXME: implement this - return null; + return transferable.getTransferData (flavor); } } + private DropTarget dropTarget; private int targetActions; + private java.awt.dnd.peer.DropTargetContextPeer dtcp; + + // package private + DropTargetContext (DropTarget dropTarget) + { + this.dropTarget = dropTarget; + } public DropTarget getDropTarget () { - // FIXME: implement this - return null; + return dropTarget; } public Component getComponent () { - // FIXME: implement this - return null; + return dropTarget.getComponent (); } public void addNotify (java.awt.dnd.peer.DropTargetContextPeer dtcp) { - // FIXME: implement this + this.dtcp = dtcp; } public void removeNotify () { - // FIXME: implement this + this.dtcp = null; } protected void setTargetActions (int actions) @@ -157,14 +160,12 @@ public class DropTargetContext implements Serializable protected List getCurrentDataFlavorsAsList () { - // FIXME: implement this - return null; + return Arrays.asList (getCurrentDataFlavors ()); } protected boolean isDataFlavorSupported (DataFlavor flavor) { - // FIXME: implement this - return false; + return getCurrentDataFlavorsAsList ().contains (flavor); } /** diff --git a/libjava/java/awt/dnd/MouseDragGestureRecognizer.java b/libjava/java/awt/dnd/MouseDragGestureRecognizer.java index d01032433c0..a94c82525dc 100644 --- a/libjava/java/awt/dnd/MouseDragGestureRecognizer.java +++ b/libjava/java/awt/dnd/MouseDragGestureRecognizer.java @@ -84,12 +84,14 @@ public abstract class MouseDragGestureRecognizer protected void registerListeners () { - // FIXME: implement this + component.addMouseListener (this); + component.addMouseMotionListener (this); } protected void unregisterListeners () { - // FIXME: implement this + component.removeMouseListener (this); + component.removeMouseMotionListener (this); } public void mouseClicked (MouseEvent e)