All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.netbeans.api.visual.action.WidgetAction Maven / Gradle / Ivy

There is a newer version: RELEASE230
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.netbeans.api.visual.action;

import org.netbeans.api.visual.widget.Widget;

import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetContext;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * This interface is defining an action that is usually assigned to a widget. The action is notified about all Swing events
 * related to the widget where the action is assigned.
 * 

* Events: mouse, mouse-motion, mouse-wheel, drag'n'drop, focus, keyboard. *

* Each event handler has to return a state of the event processing (represented by WidgetAction.State). *

* Each Swing event is processed by all actions of all widgets in a scene. The processing can be stopped by consuming the event. * When processing event for a widget, then all children widget (from the last) of widget are asked for processing first. * Then finally the event is processed by all actions (from the first to the last) assigned to the widget. * * @author David Kaspar */ public interface WidgetAction { /** * Represents a state of event processing. */ public abstract static class State { /** * The state that means: The event is not processed by the action and has to be processed by other actions too. */ public static final State REJECTED = new State() { public boolean isLockedInChain() { return false; } public boolean isConsumed() { return false; } public Widget getLockedWidget() { return null; } public WidgetAction getLockedAction() { return null; } }; /** * The state that means: The event is processed by the action and the processing has to stopped immediately (no other action should processed it). */ public static final State CONSUMED = new State() { public boolean isLockedInChain() { return false; } public boolean isConsumed() { return true; } public Widget getLockedWidget() { return null; } public WidgetAction getLockedAction() { return null; } }; /** * The state that means: The event is processed by the action and only actions that are in the same chain can process the event too. */ public static final State CHAIN_ONLY = new State() { public boolean isLockedInChain() { return true; } public boolean isConsumed() { return false; } public Widget getLockedWidget() { return null; } public WidgetAction getLockedAction() { return null; } }; /** * Creates a state that means: The event is processed and the processing has to stopped immediately (no other action should processed it). * Next event will be processed by the lockedAction on lockedAction first. * Only if the lockedAction reject the event, then the event will be processed regularly. * It is used for locking the event processing for a long-term operation like moving, resizing, rectangular selection, ... * (usually they are using mouse motion events). */ public static State createLocked(final Widget lockedWidget, final WidgetAction lockedAction) { assert lockedWidget != null; assert lockedAction != null; return new State() { public boolean isLockedInChain() { return false; } public boolean isConsumed() { return true; } public Widget getLockedWidget() { return lockedWidget; } public WidgetAction getLockedAction() { return lockedAction; } }; } private State() { } /** * Returns whether the event processing has to be stopped after the processing by the chain where the actions is added. * @return true if locked in chain */ public abstract boolean isLockedInChain(); /** * Returns whether the event is consumed * @return true if the event is consumed */ public abstract boolean isConsumed(); /** * Returns whether (and by which widget) the next event has to be processed prior to regular processing. * @return the locked widget; if null, then there is no prior widget */ public abstract Widget getLockedWidget(); /** * Returns whether (and by which action) the next event has to be processed prior to regular processing. * @return the locked action; if null, then there is no prior action */ public abstract WidgetAction getLockedAction(); } /** * Called for handling a mouseClicked event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseClicked(Widget widget, WidgetMouseEvent event); /** * Called for handling a mousePressed event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mousePressed(Widget widget, WidgetMouseEvent event); /** * Called for handling a mouseReleased event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseReleased(Widget widget, WidgetMouseEvent event); /** * Called for handling a mouseEntered event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseEntered(Widget widget, WidgetMouseEvent event); /** * Called for handling a mouseExited event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseExited(Widget widget, WidgetMouseEvent event); /** * Called for handling a mouseDragged event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseDragged(Widget widget, WidgetMouseEvent event); /** * Called for handling a mouseMoved event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseMoved(Widget widget, WidgetMouseEvent event); /** * Called for handling a mouseWheelMoved event. * @param widget the widget where the action is assigned * @param event the mouse wheel event * @return the event state */ public State mouseWheelMoved(Widget widget, WidgetMouseWheelEvent event); /** * Called for handling a keyTyped event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyTyped(Widget widget, WidgetKeyEvent event); /** * Called for handling a keyPressed event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyPressed(Widget widget, WidgetKeyEvent event); /** * Called for handling a keyReleased event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyReleased(Widget widget, WidgetKeyEvent event); /** * Called for handling a focusGained event. * @param widget the widget where the action is assigned * @param event the focus event * @return the event state */ public State focusGained(Widget widget, WidgetFocusEvent event); /** * Called for handling a focusLost event. * @param widget the widget where the action is assigned * @param event the focus event * @return the event state */ public State focusLost(Widget widget, WidgetFocusEvent event); /** * Called for handling a dragEnter event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dragEnter (Widget widget, WidgetDropTargetDragEvent event); /** * Called for handling a dragOver event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dragOver (Widget widget, WidgetDropTargetDragEvent event); /** * Called for handling a dropActionChanged event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dropActionChanged (Widget widget, WidgetDropTargetDragEvent event); /** * Called for handling a dragExit event. * @param widget the widget where the action is assigned * @param event the drop target event * @return the event state */ public State dragExit (Widget widget, WidgetDropTargetEvent event); /** * Called for handling a drop event. * @param widget the widget where the action is assigned * @param event the drop target drop event * @return the event state */ public State drop (Widget widget, WidgetDropTargetDropEvent event); /** * An adapter of the widget action. All methods return rejected event state. */ public static class Adapter implements WidgetAction { /** * Called for handling a mouseClicked event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseClicked (Widget widget, WidgetMouseEvent event) { return State.REJECTED; } /** * Called for handling a mousePressed event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mousePressed (Widget widget, WidgetMouseEvent event) { return State.REJECTED; } /** * Called for handling a mouseReleased event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseReleased (Widget widget, WidgetMouseEvent event) { return State.REJECTED; } /** * Called for handling a mouseEntered event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseEntered (Widget widget, WidgetMouseEvent event) { return State.REJECTED; } /** * Called for handling a mouseExited event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseExited (Widget widget, WidgetMouseEvent event) { return State.REJECTED; } /** * Called for handling a mouseDragged event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseDragged (Widget widget, WidgetMouseEvent event) { return State.REJECTED; } /** * Called for handling a mouseMoved event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseMoved (Widget widget, WidgetMouseEvent event) { return State.REJECTED; } /** * Called for handling a mouseWheelMoved event. * @param widget the widget where the action is assigned * @param event the mouse wheel event * @return the event state */ public State mouseWheelMoved (Widget widget, WidgetMouseWheelEvent event) { return State.REJECTED; } /** * Called for handling a keyTyped event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyTyped (Widget widget, WidgetKeyEvent event) { return State.REJECTED; } /** * Called for handling a keyPressed event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyPressed (Widget widget, WidgetKeyEvent event) { return State.REJECTED; } /** * Called for handling a keyReleased event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyReleased (Widget widget, WidgetKeyEvent event) { return State.REJECTED; } /** * Called for handling a focusGained event. * @param widget the widget where the action is assigned * @param event the focus event * @return the event state */ public State focusGained (Widget widget, WidgetFocusEvent event) { return State.REJECTED; } /** * Called for handling a focusLost event. * @param widget the widget where the action is assigned * @param event the focus event * @return the event state */ public State focusLost (Widget widget, WidgetFocusEvent event) { return State.REJECTED; } /** * Called for handling a dragEnter event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dragEnter (Widget widget, WidgetDropTargetDragEvent event) { return State.REJECTED; } /** * Called for handling a dragOver event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dragOver (Widget widget, WidgetDropTargetDragEvent event) { return State.REJECTED; } /** * Called for handling a dropActionChanged event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dropActionChanged (Widget widget, WidgetDropTargetDragEvent event) { return State.REJECTED; } /** * Called for handling a dragExit event. * @param widget the widget where the action is assigned * @param event the drop target event * @return the event state */ public State dragExit (Widget widget, WidgetDropTargetEvent event) { return State.REJECTED; } /** * Called for handling a drop event. * @param widget the widget where the action is assigned * @param event the drop target drop event * @return the event state */ public State drop (Widget widget, WidgetDropTargetDropEvent event) { return State.REJECTED; } } /** * An adapter of the widget action. All methods return locked or rejected event state based on a result of isLocked method. * This is often used for long-term actions like MoveAction. */ public abstract static class LockedAdapter implements WidgetAction { /** * Called by event handlers to resolve whether they should return locked or rejected event state. * @return if true, then locked event state is used; if false, then rejected event state is used. */ protected abstract boolean isLocked (); /** * Called for handling a mouseClicked event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseClicked (Widget widget, WidgetMouseEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a mousePressed event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mousePressed (Widget widget, WidgetMouseEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a mouseReleased event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseReleased (Widget widget, WidgetMouseEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a mouseEntered event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseEntered (Widget widget, WidgetMouseEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a mouseExited event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseExited (Widget widget, WidgetMouseEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a mouseDragged event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseDragged (Widget widget, WidgetMouseEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a mouseMoved event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseMoved (Widget widget, WidgetMouseEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a mouseWheelMoved event. * @param widget the widget where the action is assigned * @param event the mouse wheel event * @return the event state */ public State mouseWheelMoved (Widget widget, WidgetMouseWheelEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a keyTyped event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyTyped (Widget widget, WidgetKeyEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a keyPressed event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyPressed (Widget widget, WidgetKeyEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a keyReleased event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyReleased (Widget widget, WidgetKeyEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a focusGained event. * @param widget the widget where the action is assigned * @param event the focus event * @return the event state */ public State focusGained (Widget widget, WidgetFocusEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a focusLost event. * @param widget the widget where the action is assigned * @param event the focus event * @return the event state */ public State focusLost (Widget widget, WidgetFocusEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a dragEnter event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dragEnter (Widget widget, WidgetDropTargetDragEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a dragOver event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dragOver (Widget widget, WidgetDropTargetDragEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a dropActionChanged event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dropActionChanged (Widget widget, WidgetDropTargetDragEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a dragExit event. * @param widget the widget where the action is assigned * @param event the drop target event * @return the event state */ public State dragExit (Widget widget, WidgetDropTargetEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } /** * Called for handling a drop event. * @param widget the widget where the action is assigned * @param event the drop target drop event * @return the event state */ public State drop (Widget widget, WidgetDropTargetDropEvent event) { return isLocked () ? State.createLocked (widget, this) : State.REJECTED; } } /** * Represents a chain of widget actions. */ public static final class Chain implements WidgetAction { private List actions; private List actionsUm; /** * Creates a chain. */ public Chain() { actions = new ArrayList (); actionsUm = Collections.unmodifiableList(actions); } /** * Returns a list of actions in the chain. * @return the lst of actions */ public List getActions() { return actionsUm; } /** * Adds an action. * @param action the action to be added */ public void addAction(WidgetAction action) { assert action != null; actions.add(action); } /** * Adds an action at a specific index * @param index the index; the action will be added before the action at the index position * @param action the action to be added */ public void addAction(int index, WidgetAction action) { assert action != null; actions.add(index, action); } /** * Removes an action. * @param action the action */ public void removeAction(WidgetAction action) { actions.remove(action); } /** * Removes an action at specified index. * @param index the index */ public void removeAction(int index) { actions.remove(index); } /** * Called for handling a mouseClicked event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseClicked(Widget widget, WidgetMouseEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.mouseClicked(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a mousePressed event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mousePressed(Widget widget, WidgetMouseEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.mousePressed(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a mouseReleased event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseReleased(Widget widget, WidgetMouseEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.mouseReleased(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a mouseEntered event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseEntered(Widget widget, WidgetMouseEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.mouseEntered(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a mouseExited event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseExited(Widget widget, WidgetMouseEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.mouseExited(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a mouseMoved event. * @param widget the widget where the action is assigned * @param event the mouse event * @return the event state */ public State mouseDragged(Widget widget, WidgetMouseEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.mouseDragged(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a mouseWheelMoved event. * @param widget the widget where the action is assigned * @param event the mouse wheel event * @return the event state */ public State mouseMoved(Widget widget, WidgetMouseEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.mouseMoved(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a keyTyped event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State mouseWheelMoved(Widget widget, WidgetMouseWheelEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.mouseWheelMoved(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a keyTyped event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyTyped(Widget widget, WidgetKeyEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.keyTyped(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a keyPressed event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyPressed(Widget widget, WidgetKeyEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.keyPressed(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a keyReleased event. * @param widget the widget where the action is assigned * @param event the key event * @return the event state */ public State keyReleased(Widget widget, WidgetKeyEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.keyReleased(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a focusGained event. * @param widget the widget where the action is assigned * @param event the focus event * @return the event state */ public State focusGained(Widget widget, WidgetAction.WidgetFocusEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.focusGained(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a focusLost event. * @param widget the widget where the action is assigned * @param event the focus event * @return the event state */ public State focusLost(Widget widget, WidgetAction.WidgetFocusEvent event) { WidgetAction[] actionsArray = actions.toArray(new WidgetAction[actions.size()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.focusLost(widget, event); if (state.isConsumed()) return state; if (state.isLockedInChain()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a dragEnter event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dragEnter (Widget widget, WidgetDropTargetDragEvent event) { WidgetAction[] actionsArray = actions.toArray (new WidgetAction[actions.size ()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.dragEnter (widget, event); if (state.isConsumed ()) return state; if (state.isLockedInChain ()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a dragOver event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dragOver (Widget widget, WidgetDropTargetDragEvent event) { WidgetAction[] actionsArray = actions.toArray (new WidgetAction[actions.size ()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.dragOver (widget, event); if (state.isConsumed ()) return state; if (state.isLockedInChain ()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a dropActionChanged event. * @param widget the widget where the action is assigned * @param event the drop target drag event * @return the event state */ public State dropActionChanged (Widget widget, WidgetDropTargetDragEvent event) { WidgetAction[] actionsArray = actions.toArray (new WidgetAction[actions.size ()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.dropActionChanged (widget, event); if (state.isConsumed ()) return state; if (state.isLockedInChain ()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a dragExit event. * @param widget the widget where the action is assigned * @param event the drop target event * @return the event state */ public State dragExit (Widget widget, WidgetDropTargetEvent event) { WidgetAction[] actionsArray = actions.toArray (new WidgetAction[actions.size ()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.dragExit (widget, event); if (state.isConsumed ()) return state; if (state.isLockedInChain ()) chainState = State.CONSUMED; } return chainState; } /** * Called for handling a drop event. * @param widget the widget where the action is assigned * @param event the drop target drop event * @return the event state */ public State drop (Widget widget, WidgetDropTargetDropEvent event) { WidgetAction[] actionsArray = actions.toArray (new WidgetAction[actions.size ()]); State chainState = State.REJECTED; for (WidgetAction action : actionsArray) { State state = action.drop (widget, event); if (state.isConsumed ()) return state; if (state.isLockedInChain ()) chainState = State.CONSUMED; } return chainState; } } /** * Represents an widget event. */ public static interface WidgetEvent { /** * Returns an event id. * @return the event id */ public long getEventID (); } /** * Represents an location event used for controlling mouse location. */ public static interface WidgetLocationEvent extends WidgetEvent { /** * Returns stored location. * @return the location */ public Point getPoint (); /** * Sets a new location. This is called by a event provider only. * Do not call this method unless you know what it does exactly. * @param point the new location */ public void setPoint (Point point); /** * Translates the stored location. * Do not call this method unless you know what it does exactly. * @param x the x-axis addition * @param y the y-axis addition */ public void translatePoint (int x, int y); } /** * Represents a mouse event. */ public static final class WidgetMouseEvent implements WidgetLocationEvent { private long id; private MouseEvent event; private int x, y; /** * Creates a mouse event. * @param id the event id * @param event the Swing event */ public WidgetMouseEvent(long id, MouseEvent event) { this.id = id; this.event = event; x = event.getX(); y = event.getY(); } /** * Returns an event id. * @return the event id */ public long getEventID() { return id; } /** * Returns stored location. * @return the location */ public Point getPoint() { return new Point(x, y); } /** * Sets a new location. This is called by a event provider only. * Do not call this method unless you know what it does exactly. * @param point the new location */ public void setPoint(Point point) { x = point.x; y = point.y; } /** * Translates the stored location. * Do not call this method unless you know what it does exactly. * @param x the x-axis addition * @param y the y-axis addition */ public void translatePoint(int x, int y) { this.x += x; this.y += y; } /** * @see MouseEvent */ public int getClickCount() { return event.getClickCount(); } /** * @see MouseEvent */ public int getButton() { return event.getButton(); } /** * @see MouseEvent */ public boolean isPopupTrigger() { return event.isPopupTrigger(); } /** * @see MouseEvent */ public boolean isShiftDown() { return event.isShiftDown(); } /** * @see MouseEvent */ public boolean isControlDown() { return event.isControlDown(); } /** * @see MouseEvent */ public boolean isMetaDown() { return event.isMetaDown(); } /** * @see MouseEvent */ public boolean isAltDown() { return event.isAltDown(); } /** * @see MouseEvent */ public boolean isAltGraphDown() { return event.isAltGraphDown(); } /** * @see MouseEvent */ public long getWhen() { return event.getWhen(); } /** * @see MouseEvent */ public int getModifiers() { return event.getModifiers(); } /** * @see MouseEvent */ public int getModifiersEx() { return event.getModifiersEx(); } } public static final class WidgetMouseWheelEvent implements WidgetLocationEvent { private long id; private MouseWheelEvent event; private int x, y; /** * Creates a mouse wheel event. * @param id the event id * @param event the Swing event */ public WidgetMouseWheelEvent(long id, MouseWheelEvent event) { this.id = id; this.event = event; x = event.getX (); y = event.getY (); } /** * Returns an event id. * @return the event id */ public long getEventID () { return id; } /** * Returns stored location. * @return the location */ public Point getPoint () { return new Point (x, y); } /** * Sets a new location. This is called by a event provider only. * Do not call this method unless you know what it does exactly. * @param point the new location */ public void setPoint (Point point) { x = point.x; y = point.y; } /** * Translates the stored location. * Do not call this method unless you know what it does exactly. * @param x the x-axis addition * @param y the y-axis addition */ public void translatePoint (int x, int y) { this.x += x; this.y += y; } /** * @see MouseEvent */ public int getClickCount () { return event.getClickCount (); } /** * @see MouseEvent */ public int getButton () { return event.getButton (); } /** * @see MouseEvent */ public boolean isPopupTrigger () { return event.isPopupTrigger (); } /** * @see MouseEvent */ public boolean isShiftDown () { return event.isShiftDown (); } /** * @see MouseEvent */ public boolean isControlDown () { return event.isControlDown (); } /** * @see MouseEvent */ public boolean isMetaDown () { return event.isMetaDown (); } /** * @see MouseEvent */ public boolean isAltDown () { return event.isAltDown (); } /** * @see MouseEvent */ public boolean isAltGraphDown () { return event.isAltGraphDown (); } /** * @see MouseEvent */ public long getWhen () { return event.getWhen (); } /** * @see MouseEvent */ public int getModifiers () { return event.getModifiers (); } /** * @see MouseEvent */ public int getModifiersEx () { return event.getModifiersEx (); } /** * @see MouseWheelEvent */ public int getScrollType() { return event.getScrollType(); } /** * @see MouseWheelEvent */ public int getScrollAmount() { return event.getScrollAmount(); } /** * @see MouseWheelEvent */ public int getWheelRotation() { return event.getWheelRotation(); } /** * @see MouseWheelEvent */ public int getUnitsToScroll() { return event.getUnitsToScroll(); } } /** * Represents a key event. */ public static final class WidgetKeyEvent implements WidgetEvent { private long id; private KeyEvent event; /** * Creates a key event. * @param id the event id * @param event the Swing event */ public WidgetKeyEvent(long id, KeyEvent event) { this.id = id; this.event = event; } /** * Returns an event id. * @return the event id */ public long getEventID() { return id; } /** * @see KeyEvent */ public int getKeyCode() { return event.getKeyCode(); } /** * @see KeyEvent */ public char getKeyChar() { return event.getKeyChar(); } /** * @see KeyEvent */ public int getKeyLocation() { return event.getKeyLocation(); } /** * @see KeyEvent */ public boolean isActionKey() { return event.isActionKey(); } /** * @see KeyEvent */ public boolean isShiftDown() { return event.isShiftDown(); } /** * @see KeyEvent */ public boolean isControlDown() { return event.isControlDown(); } /** * @see KeyEvent */ public boolean isMetaDown() { return event.isMetaDown(); } /** * @see KeyEvent */ public boolean isAltDown() { return event.isAltDown(); } /** * @see KeyEvent */ public boolean isAltGraphDown() { return event.isAltGraphDown(); } /** * @see KeyEvent */ public long getWhen() { return event.getWhen(); } /** * @see KeyEvent */ public int getModifiers() { return event.getModifiers(); } /** * @see KeyEvent */ public int getModifiersEx() { return event.getModifiersEx(); } } /** * Represents a focus event of a scene view. */ public static final class WidgetFocusEvent implements WidgetEvent { private long id; private FocusEvent event; /** * Creates a focus event. * @param id the event id * @param event the Swing event */ public WidgetFocusEvent(long id, FocusEvent event) { this.id = id; this.event = event; } /** * Returns an event id. * @return the event id */ public long getEventID() { return id; } /** * @see FocusEvent */ // TODO public Object getOppositeComponent() { return event.getOppositeComponent(); } /** * @see FocusEvent */ public String paramString() { return event.paramString(); } /** * @see FocusEvent */ public boolean isTemporary() { return event.isTemporary(); } } /** * Represents a drop target drag event. */ public static final class WidgetDropTargetDragEvent implements WidgetLocationEvent { private long id; private DropTargetDragEvent event; private int x, y; /** * Creates a drop target drag event. * @param id the event id * @param event the Swing event */ public WidgetDropTargetDragEvent (long id, DropTargetDragEvent event) { this.id = id; this.event = event; Point location = event.getLocation (); x = location.x; y = location.y; } /** * Returns an event id. * @return the event id */ public long getEventID () { return id; } /** * Returns stored location. * @return the location */ public Point getPoint () { return new Point (x, y); } /** * Sets a new location. This is called by a event provider only. * Do not call this method unless you know what it does exactly. * @param point the new location */ public void setPoint (Point point) { x = point.x; y = point.y; } /** * Translates the stored location. * Do not call this method unless you know what it does exactly. * @param x the x-axis addition * @param y the y-axis addition */ public void translatePoint (int x, int y) { this.x += x; this.y += y; } /** * @see DropTargetDragEvent */ public DataFlavor[] getCurrentDataFlavors () { return event.getCurrentDataFlavors (); } /** * @see DropTargetDragEvent */ public List getCurrentDataFlavorsAsList () { return event.getCurrentDataFlavorsAsList (); } /** * @see DropTargetDragEvent */ public boolean isDataFlavorSupported (DataFlavor df) { return event.isDataFlavorSupported (df); } /** * @see DropTargetDragEvent */ public int getSourceActions () { return event.getSourceActions (); } /** * @see DropTargetDragEvent */ public int getDropAction () { return event.getDropAction (); } /** * @see DropTargetDragEvent */ public Transferable getTransferable () { return event.getTransferable (); } /** * @see DropTargetDragEvent */ public DropTargetContext getDropTargetContext () { return event.getDropTargetContext (); } /** * @see DropTargetDragEvent */ public void acceptDrag (int dragOperation) { event.acceptDrag (dragOperation); } /** * @see DropTargetDragEvent */ public void rejectDrag () { event.rejectDrag (); } } /** * Represents a drop target drop event. */ public static final class WidgetDropTargetDropEvent implements WidgetLocationEvent { private long id; private DropTargetDropEvent event; private int x, y; /** * Creates a drop target drop event. * @param id the event id * @param event the Swing event */ public WidgetDropTargetDropEvent (long id, DropTargetDropEvent event) { this.id = id; this.event = event; Point location = event.getLocation (); x = location.x; y = location.y; } /** * Returns an event id. * @return the event id */ public long getEventID () { return id; } /** * Returns stored location. * @return the location */ public Point getPoint () { return new Point (x, y); } /** * Sets a new location. This is called by a event provider only. * Do not call this method unless you know what it does exactly. * @param point the new location */ public void setPoint (Point point) { x = point.x; y = point.y; } /** * Translates the stored location. * Do not call this method unless you know what it does exactly. * @param x the x-axis addition * @param y the y-axis addition */ public void translatePoint (int x, int y) { this.x += x; this.y += y; } /** * @see DropTargetDropEvent */ public DataFlavor[] getCurrentDataFlavors () { return event.getCurrentDataFlavors (); } /** * @see DropTargetDropEvent */ public List getCurrentDataFlavorsAsList () { return event.getCurrentDataFlavorsAsList (); } /** * @see DropTargetDropEvent */ public boolean isDataFlavorSupported (DataFlavor df) { return event.isDataFlavorSupported (df); } /** * @see DropTargetDropEvent */ public int getSourceActions () { return event.getSourceActions (); } /** * @see DropTargetDropEvent */ public int getDropAction () { return event.getDropAction (); } /** * @see DropTargetDropEvent */ public Transferable getTransferable () { return event.getTransferable (); } /** * @see DropTargetDropEvent */ public boolean isLocalTransfer () { return event.isLocalTransfer (); } /** * @see DropTargetDropEvent */ public DropTargetContext getDropTargetContext () { return event.getDropTargetContext (); } /** * @see DropTargetDropEvent */ public void acceptDrop (int dragOperation) { event.acceptDrop (dragOperation); } /** * @see DropTargetDropEvent */ public void rejectDrop () { event.rejectDrop (); } } /** * Represents a drop target event. */ public static final class WidgetDropTargetEvent implements WidgetEvent { private long id; private DropTargetEvent event; /** * Creates a drop target event. * @param id the event id * @param event the Swing event */ public WidgetDropTargetEvent (long id, DropTargetEvent event) { this.id = id; this.event = event; } /** * Returns an event id. * @return the event id */ public long getEventID () { return id; } /** * @see DropTargetEvent */ public DropTargetContext getDropTargetContext () { return event.getDropTargetContext (); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy