diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/Gesture.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/Gesture.java | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/Gesture.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/Gesture.java new file mode 100644 index 000000000..a35d19078 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/Gesture.java @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * 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 com.android.ide.eclipse.adt.internal.editors.layout.gle2; + +import com.android.utils.Pair; + +import org.eclipse.swt.events.KeyEvent; + +import java.util.Collections; +import java.util.List; + +/** + * A gesture is a mouse or keyboard driven user operation, such as a + * swipe-select or a resize. It can be thought of as a session, since it is + * initiated, updated during user manipulation, and finally completed or + * canceled. A gesture is associated with a single undo transaction (although + * some gestures don't actually edit anything, such as a selection), and a + * gesture can have a number of graphics {@link Overlay}s which are added and + * cleaned up on behalf of the gesture by the system. + * <p/> + * Gestures are typically mouse oriented. If a mouse wishes to integrate + * with the native drag & drop support, it should also implement + * the {@link DropGesture} interface, which is a sub interface of this + * {@link Gesture} interface. There are pros and cons to using native drag + * & drop, so various gestures will differ in whether they use it. + * In particular, you should use drag & drop if your gesture should: + * <ul> + * <li> Show a native drag & drop cursor + * <li> Copy or move data, especially if this applies outside the canvas + * control window or even the application itself + * </ul> + * You might want to avoid using native drag & drop if your gesture should: + * <ul> + * <li> Continue updating itself even when the mouse cursor leaves the + * canvas window (in a drag & gesture, as soon as you leave the canvas + * the drag source is no longer informed of mouse updates, whereas a regular + * mouse listener is) + * <li> Respond to modifier keys (for example, if toggling the Shift key + * should constrain motion as is common during resizing, and so on) + * <li> Use no special cursor (for example, during a marquee selection gesture we + * don't want a native drag & drop cursor) + * </ul> + * <p/> + * Examples of gestures: + * <ul> + * <li>Move (dragging to reorder or change hierarchy of views or change visual + * layout attributes) + * <li>Marquee (swiping out a rectangle to make a selection) + * <li>Resize (dragging some edge or corner of a widget to change its size, for + * example to some new fixed size, or to "attach" it to some other edge.) + * <li>Inline Editing (editing the text of some text-oriented widget like a + * label or a button) + * <li>Link (associate two or more widgets in some way, such as an + * "is required" widget linked to a text field) + * </ul> + */ +public abstract class Gesture { + /** Start mouse coordinate, in control coordinates. */ + protected ControlPoint mStart; + + /** Initial SWT mask when the gesture started. */ + protected int mStartMask; + + /** + * Returns a list of overlays, from bottom to top (where the later overlays + * are painted on top of earlier ones if they overlap). + * + * @return A list of overlays to paint for this gesture, if applicable. + * Should not be null, but can be empty. + */ + public List<Overlay> createOverlays() { + return Collections.emptyList(); + } + + /** + * Handles initialization of this gesture. Called when the gesture is + * starting. + * + * @param pos The most recent mouse coordinate applicable to this + * gesture, relative to the canvas control. + * @param startMask The initial SWT mask for the gesture, if known, or + * otherwise 0. + */ + public void begin(ControlPoint pos, int startMask) { + mStart = pos; + mStartMask = startMask; + } + + /** + * Handles updating of the gesture state for a new mouse position. + * + * @param pos The most recent mouse coordinate applicable to this + * gesture, relative to the canvas control. + */ + public void update(ControlPoint pos) { + } + + /** + * Handles termination of the gesture. This method is called when the + * gesture has terminated (either through successful completion, or because + * it was canceled). + * + * @param pos The most recent mouse coordinate applicable to this + * gesture, relative to the canvas control. + * @param canceled True if the gesture was canceled, and false otherwise. + */ + public void end(ControlPoint pos, boolean canceled) { + } + + /** + * Handles a key press during the gesture. May be called repeatedly when the + * user is holding the key for several seconds. + * + * @param event The SWT event for the key press, + * @return true if this gesture consumed the key press, otherwise return false + */ + public boolean keyPressed(KeyEvent event) { + return false; + } + + /** + * Handles a key release during the gesture. + * + * @param event The SWT event for the key release, + * @return true if this gesture consumed the key press, otherwise return false + */ + public boolean keyReleased(KeyEvent event) { + return false; + } + + /** + * Returns whether tooltips should be display below and to the right of the mouse + * cursor. + * + * @return a pair of booleans, the first indicating whether the tooltip should be + * below and the second indicating whether the tooltip should be displayed to + * the right of the mouse cursor. + */ + public Pair<Boolean, Boolean> getTooltipPosition() { + return Pair.of(true, true); + } +} |