AWTScrollDriver.java revision 13978:1993af50385d
1202375Srdivacky/*
2202375Srdivacky * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
3202375Srdivacky * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4202375Srdivacky *
5202375Srdivacky * This code is free software; you can redistribute it and/or modify it
6202375Srdivacky * under the terms of the GNU General Public License version 2 only, as
7202375Srdivacky * published by the Free Software Foundation.
8202375Srdivacky *
9202375Srdivacky * This code is distributed in the hope that it will be useful, but WITHOUT
10202375Srdivacky * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11202375Srdivacky * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12202375Srdivacky * version 2 for more details (a copy is included in the LICENSE file that
13202375Srdivacky * accompanied this code).
14202375Srdivacky *
15202375Srdivacky * You should have received a copy of the GNU General Public License version
16202375Srdivacky * 2 along with this work; if not, write to the Free Software Foundation,
17202375Srdivacky * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18245431Sdim *
19202375Srdivacky * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20202375Srdivacky * or visit www.oracle.com if you need additional information or have any
21202375Srdivacky * questions.
22202375Srdivacky */
23202375Srdivackypackage org.netbeans.jemmy.drivers.scrolling;
24202375Srdivacky
25202375Srdivackyimport java.awt.Point;
26202375Srdivacky
27202375Srdivackyimport org.netbeans.jemmy.QueueTool;
28202375Srdivackyimport org.netbeans.jemmy.Timeout;
29202375Srdivackyimport org.netbeans.jemmy.drivers.DriverManager;
30202375Srdivackyimport org.netbeans.jemmy.drivers.MouseDriver;
31202375Srdivackyimport org.netbeans.jemmy.operators.ComponentOperator;
32202375Srdivackyimport org.netbeans.jemmy.operators.Operator;
33202375Srdivacky
34202375Srdivacky/**
35207618Srdivacky * ScrollDriver for awt components.
36202375Srdivacky *
37207618Srdivacky * @author Alexandre Iline(alexandre.iline@oracle.com)
38207618Srdivacky */
39207618Srdivackypublic abstract class AWTScrollDriver extends AbstractScrollDriver {
40202375Srdivacky
41207618Srdivacky    private QueueTool queueTool;
42207618Srdivacky
43207618Srdivacky    /**
44202375Srdivacky     * Constructs a ChoiceDriver.
45207618Srdivacky     *
46207618Srdivacky     * @param supported an array of supported class names
47207618Srdivacky     */
48207618Srdivacky    public AWTScrollDriver(String[] supported) {
49207618Srdivacky        super(supported);
50207618Srdivacky        queueTool = new QueueTool();
51202375Srdivacky    }
52207618Srdivacky
53207618Srdivacky    @Override
54207618Srdivacky    protected void step(final ComponentOperator oper, final ScrollAdjuster adj) {
55202375Srdivacky        if (adj.getScrollDirection() != ScrollAdjuster.DO_NOT_TOUCH_SCROLL_DIRECTION) {
56207618Srdivacky            queueTool.invokeSmoothly(new QueueTool.QueueAction<Void>("Scrolling by clicking with mouse") {
57207618Srdivacky                @Override
58207618Srdivacky                public Void launch() {
59207618Srdivacky                    Point clickPoint = getClickPoint(oper, adj.getScrollDirection(), adj.getScrollOrientation());
60207618Srdivacky                    if (clickPoint != null) {
61207618Srdivacky                        DriverManager.getMouseDriver(oper).
62207618Srdivacky                                clickMouse(oper, clickPoint.x, clickPoint.y, 1,
63207618Srdivacky                                        Operator.getDefaultMouseButton(),
64207618Srdivacky                                        0,
65207618Srdivacky                                        oper.getTimeouts().
66207618Srdivacky                                        create("ComponentOperator.MouseClickTimeout"));
67207618Srdivacky                    }
68207618Srdivacky                    return null;
69207618Srdivacky                }
70207618Srdivacky            });
71207618Srdivacky        }
72207618Srdivacky    }
73207618Srdivacky
74207618Srdivacky    @Override
75207618Srdivacky    protected void jump(ComponentOperator oper, ScrollAdjuster adj) {
76207618Srdivacky    }
77207618Srdivacky
78207618Srdivacky    @Override
79207618Srdivacky    protected void startPushAndWait(final ComponentOperator oper, final int direction, final int orientation) {
80207618Srdivacky        queueTool.invokeSmoothly(new QueueTool.QueueAction<Void>("Scrolling: pressing the mouse button and holding") {
81207618Srdivacky            @Override
82207618Srdivacky            public Void launch() {
83207618Srdivacky                Point clickPoint = getClickPoint(oper, direction, orientation);
84202375Srdivacky                if (clickPoint != null) {
85207618Srdivacky                    MouseDriver mdriver = DriverManager.getMouseDriver(oper);
86202375Srdivacky                    mdriver.moveMouse(oper, clickPoint.x, clickPoint.y);
87202375Srdivacky                    mdriver.pressMouse(oper, clickPoint.x, clickPoint.y,
88207618Srdivacky                            Operator.getDefaultMouseButton(),
89207618Srdivacky                            0);
90207618Srdivacky                }
91207618Srdivacky                return null;
92207618Srdivacky            }
93202375Srdivacky        });
94207618Srdivacky    }
95202375Srdivacky
96202375Srdivacky    @Override
97202375Srdivacky    protected void stopPushAndWait(final ComponentOperator oper, final int direction, final int orientation) {
98202375Srdivacky        queueTool.invokeSmoothly(new QueueTool.QueueAction<Void>("Scrolling: releasing the mouse button") {
99202375Srdivacky            @Override
100207618Srdivacky            public Void launch() {
101207618Srdivacky                Point clickPoint = getClickPoint(oper, direction, orientation);
102202375Srdivacky                if (clickPoint != null) {
103202375Srdivacky                    MouseDriver mdriver = DriverManager.getMouseDriver(oper);
104202375Srdivacky                    mdriver.releaseMouse(oper, clickPoint.x, clickPoint.y,
105202375Srdivacky                            Operator.getDefaultMouseButton(),
106202375Srdivacky                            0);
107207618Srdivacky                }
108207618Srdivacky                return null;
109202375Srdivacky            }
110202375Srdivacky        });
111202375Srdivacky    }
112207618Srdivacky
113207618Srdivacky    @Override
114202375Srdivacky    protected Point startDragging(ComponentOperator oper) {
115202375Srdivacky        return null;
116202375Srdivacky    }
117202375Srdivacky
118202375Srdivacky    @Override
119202375Srdivacky    protected void drop(ComponentOperator oper, Point pnt) {
120202375Srdivacky    }
121202375Srdivacky
122202375Srdivacky    @Override
123202375Srdivacky    protected void drag(ComponentOperator oper, Point pnt) {
124202375Srdivacky    }
125202375Srdivacky
126202375Srdivacky    @Override
127207618Srdivacky    protected Timeout getScrollDeltaTimeout(ComponentOperator oper) {
128202375Srdivacky        return (oper.getTimeouts().
129202375Srdivacky                create("ScrollbarOperator.DragAndDropScrollingDelta"));
130202375Srdivacky    }
131207618Srdivacky
132207618Srdivacky    @Override
133202375Srdivacky    protected boolean canDragAndDrop(ComponentOperator oper) {
134202375Srdivacky        return false;
135202375Srdivacky    }
136202375Srdivacky
137207618Srdivacky    @Override
138202375Srdivacky    protected boolean canJump(ComponentOperator oper) {
139202375Srdivacky        return false;
140202375Srdivacky    }
141207618Srdivacky
142207618Srdivacky    @Override
143202375Srdivacky    protected boolean canPushAndWait(ComponentOperator oper) {
144202375Srdivacky        return true;
145202375Srdivacky    }
146202375Srdivacky
147202375Srdivacky    @Override
148202375Srdivacky    protected int getDragAndDropStepLength(ComponentOperator oper) {
149202375Srdivacky        return 1;
150202375Srdivacky    }
151202375Srdivacky
152202375Srdivacky    /**
153207618Srdivacky     * Defines a click point which needs to be used in order to
154202375Srdivacky     * increase/decrease scroller value.
155202375Srdivacky     *
156252723Sdim     * @param oper an operator.
157245431Sdim     * @param direction - one of the ScrollAdjister.INCREASE_SCROLL_DIRECTION,
158245431Sdim     * ScrollAdjister.DECREASE_SCROLL_DIRECTION,
159245431Sdim     * ScrollAdjister.DO_NOT_TOUCH_SCROLL_DIRECTION values.
160245431Sdim     * @param orientation one of the Adjustable.HORIZONTAL or
161245431Sdim     * Adjustable.VERTICAL values.
162202375Srdivacky     * @return a point to click.
163202375Srdivacky     */
164207618Srdivacky    protected abstract Point getClickPoint(ComponentOperator oper, int direction, int orientation);
165202375Srdivacky}
166202375Srdivacky