JSplitPaneDriver.java revision 13978:1993af50385d
1238384Sjkim/* 2238384Sjkim * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. 3238384Sjkim * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4238384Sjkim * 5238384Sjkim * This code is free software; you can redistribute it and/or modify it 6238384Sjkim * under the terms of the GNU General Public License version 2 only, as 7238384Sjkim * published by the Free Software Foundation. 8238384Sjkim * 9238384Sjkim * This code is distributed in the hope that it will be useful, but WITHOUT 10238384Sjkim * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11238384Sjkim * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12238384Sjkim * version 2 for more details (a copy is included in the LICENSE file that 13238384Sjkim * accompanied this code). 14238384Sjkim * 15238384Sjkim * You should have received a copy of the GNU General Public License version 16238384Sjkim * 2 along with this work; if not, write to the Free Software Foundation, 17238384Sjkim * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18238384Sjkim * 19238384Sjkim * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20238384Sjkim * or visit www.oracle.com if you need additional information or have any 21238384Sjkim * questions. 22238384Sjkim */ 23238384Sjkimpackage org.netbeans.jemmy.drivers.scrolling; 24238384Sjkim 25238384Sjkimimport javax.swing.JButton; 26238384Sjkimimport javax.swing.JSplitPane; 27238384Sjkim 28238384Sjkimimport org.netbeans.jemmy.ComponentSearcher; 29238384Sjkimimport org.netbeans.jemmy.drivers.ButtonDriver; 30238384Sjkimimport org.netbeans.jemmy.drivers.DriverManager; 31238384Sjkimimport org.netbeans.jemmy.drivers.LightSupportiveDriver; 32280304Sjkimimport org.netbeans.jemmy.drivers.ScrollDriver; 33280304Sjkimimport org.netbeans.jemmy.operators.ComponentOperator; 34280304Sjkimimport org.netbeans.jemmy.operators.ContainerOperator; 35280304Sjkimimport org.netbeans.jemmy.operators.JButtonOperator; 36280304Sjkimimport org.netbeans.jemmy.operators.JSplitPaneOperator; 37238384Sjkimimport org.netbeans.jemmy.operators.Operator; 38280304Sjkim 39280304Sjkim/** 40280304Sjkim * ScrollDriver for javax.swing.JSplitPane component type. 41238384Sjkim * 42280304Sjkim * @author Alexandre Iline(alexandre.iline@oracle.com) 43238384Sjkim */ 44280304Sjkimpublic class JSplitPaneDriver extends LightSupportiveDriver implements ScrollDriver { 45280304Sjkim 46280304Sjkim /** 47280304Sjkim * Constructs a JSplitPaneDriver. 48280304Sjkim */ 49280304Sjkim public JSplitPaneDriver() { 50238384Sjkim super(new String[]{"org.netbeans.jemmy.operators.JSplitPaneOperator"}); 51238384Sjkim } 52238384Sjkim 53238384Sjkim @Override 54238384Sjkim public void scroll(ComponentOperator oper, ScrollAdjuster adj) { 55238384Sjkim moveDividerTo((JSplitPaneOperator) oper, adj); 56280304Sjkim } 57280304Sjkim 58280304Sjkim @Override 59280304Sjkim public void scrollToMinimum(ComponentOperator oper, int orientation) { 60280304Sjkim expandTo((JSplitPaneOperator) oper, 0); 61238384Sjkim } 62238384Sjkim 63238384Sjkim @Override 64280304Sjkim public void scrollToMaximum(ComponentOperator oper, int orientation) { 65280304Sjkim expandTo((JSplitPaneOperator) oper, 1); 66280304Sjkim } 67280304Sjkim 68238384Sjkim private void moveDividerTo(JSplitPaneOperator oper, ScrollAdjuster adj) { 69280304Sjkim ContainerOperator<?> divOper = oper.getDivider(); 70280304Sjkim /* workaround */ 71280304Sjkim if (oper.getDividerLocation() == -1) { 72280304Sjkim moveTo(oper, divOper, divOper.getCenterX() - 1, divOper.getCenterY() - 1); 73280304Sjkim if (oper.getDividerLocation() == -1) { 74280304Sjkim moveTo(oper, divOper, divOper.getCenterX() + 1, divOper.getCenterY() + 1); 75280304Sjkim } 76280304Sjkim } 77280304Sjkim if (oper.getOrientation() == JSplitPane.HORIZONTAL_SPLIT) { 78280304Sjkim moveOnce(oper, divOper, adj, 0, oper.getWidth()); 79280304Sjkim } else { 80280304Sjkim moveOnce(oper, divOper, adj, 0, oper.getHeight()); 81280304Sjkim } 82280304Sjkim } 83280304Sjkim 84280304Sjkim private void moveOnce(JSplitPaneOperator oper, 85280304Sjkim ContainerOperator<?> divOper, 86280304Sjkim ScrollAdjuster adj, 87280304Sjkim int leftPosition, 88280304Sjkim int rightPosition) { 89238384Sjkim int currentPosition = 0; 90238384Sjkim if (oper.getOrientation() == JSplitPane.HORIZONTAL_SPLIT) { 91280304Sjkim currentPosition = (int) (divOper.getLocationOnScreen().getX() 92280304Sjkim - oper.getLocationOnScreen().getX()); 93238384Sjkim } else { 94238384Sjkim currentPosition = (int) (divOper.getLocationOnScreen().getY() 95238384Sjkim - oper.getLocationOnScreen().getY()); 96238384Sjkim } 97238384Sjkim int nextPosition = 0; 98238384Sjkim if (adj.getScrollDirection() == ScrollAdjuster.DECREASE_SCROLL_DIRECTION) { 99238384Sjkim nextPosition = (currentPosition + leftPosition) / 2; 100238384Sjkim moveToPosition(oper, divOper, nextPosition - currentPosition); 101238384Sjkim if (currentPosition 102238384Sjkim == ((adj.getScrollOrientation() == JSplitPane.HORIZONTAL_SPLIT) 103238384Sjkim ? (int) (divOper.getLocationOnScreen().getX() 104238384Sjkim - oper.getLocationOnScreen().getX()) 105238384Sjkim : (int) (divOper.getLocationOnScreen().getY() 106238384Sjkim - oper.getLocationOnScreen().getY()))) { 107238384Sjkim return; 108238384Sjkim } 109238384Sjkim moveOnce(oper, divOper, adj, leftPosition, currentPosition); 110238384Sjkim } else if (adj.getScrollDirection() == ScrollAdjuster.INCREASE_SCROLL_DIRECTION) { 111238384Sjkim nextPosition = (currentPosition + rightPosition) / 2; 112280304Sjkim moveToPosition(oper, divOper, nextPosition - currentPosition); 113238384Sjkim if (currentPosition 114238384Sjkim == ((adj.getScrollOrientation() == JSplitPane.HORIZONTAL_SPLIT) 115238384Sjkim ? (int) (divOper.getLocationOnScreen().getX() 116238384Sjkim - oper.getLocationOnScreen().getX()) 117238384Sjkim : (int) (divOper.getLocationOnScreen().getY() 118238384Sjkim - oper.getLocationOnScreen().getY()))) { 119238384Sjkim return; 120280304Sjkim } 121280304Sjkim moveOnce(oper, divOper, adj, currentPosition, rightPosition); 122238384Sjkim } else { // (currentLocation == dividerLocation) - stop point 123238384Sjkim return; 124280304Sjkim } 125280304Sjkim } 126280304Sjkim 127280304Sjkim private void moveTo(JSplitPaneOperator oper, ComponentOperator divOper, int x, int y) { 128238384Sjkim DriverManager.getMouseDriver(divOper). 129280304Sjkim dragNDrop(divOper, divOper.getCenterX(), divOper.getCenterY(), x, y, 130280304Sjkim Operator.getDefaultMouseButton(), 0, 131280304Sjkim oper.getTimeouts().create("ComponentOperator.BeforeDragTimeout"), 132280304Sjkim oper.getTimeouts().create("ComponentOperator.AfterDragTimeout")); 133280304Sjkim } 134280304Sjkim 135238384Sjkim private void moveToPosition(JSplitPaneOperator oper, ComponentOperator divOper, int nextPosition) { 136280304Sjkim if (System.getProperty("java.version").startsWith("1.2")) { 137280304Sjkim oper.setDividerLocation(nextPosition); 138280304Sjkim } 139280304Sjkim if (oper.getOrientation() == JSplitPane.HORIZONTAL_SPLIT) { 140238384Sjkim moveTo(oper, divOper, divOper.getCenterX() + nextPosition, divOper.getCenterY()); 141280304Sjkim } else { 142280304Sjkim moveTo(oper, divOper, divOper.getCenterX(), divOper.getCenterY() + nextPosition); 143280304Sjkim } 144280304Sjkim } 145280304Sjkim 146280304Sjkim private void expandTo(JSplitPaneOperator oper, int index) { 147238384Sjkim ContainerOperator<?> divOper = oper.getDivider(); 148238384Sjkim JButtonOperator bo 149238384Sjkim = new JButtonOperator((JButton) divOper. 150280304Sjkim waitSubComponent(new JButtonOperator.JButtonFinder(ComponentSearcher. 151280304Sjkim getTrueChooser("JButton")), 152280304Sjkim index)); 153280304Sjkim bo.copyEnvironment(divOper); 154280304Sjkim ButtonDriver bdriver = DriverManager.getButtonDriver(bo); 155238384Sjkim bdriver.push(bo); 156238384Sjkim bdriver.push(bo); 157238384Sjkim } 158280304Sjkim} 159280304Sjkim