<%@ jet package="cruise.ui.jfx.templates.impl" imports="java.util.* cruise.model.abstractObjects.BackingObject cruise.umple.compiler.* cruise.ui.jfx.* " class="ScrollPane" skeleton="../jfx.skeleton" %> <% String preffix=JFXProvider.properties.getProperty(cruise.model.Constants.PACKAGE_PREFIX); %> package <%=preffix%>.components; /* * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Sun designates this * particular file as subject to the "Classpath" exception as provided * by Sun in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ import javafx.scene.CustomNode; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.control.ScrollBar; import javafx.scene.layout.Resizable; import javafx.scene.paint.Paint; import javafx.scene.shape.Rectangle; /** * @author Sergey A. Malenkov */ public class ScrollPane extends Resizable, CustomNode { public var background: Paint; public var border: Number; public var content: Node; def bounds = Bounds { content: bind content } def w: Number = bind bounds.width + border + border + vsb.width; override function getPrefWidth(height) {w} def h: Number = bind bounds.height + border + border + hsb.height; override function getPrefHeight(width) {h} def vsb: ScrollBar = ScrollBar { min: 0 max: bind if (h > height) h - height else 0 visible: bind h > height vertical: true height: bind height } def hsb: ScrollBar = ScrollBar { min: 0 max: bind if (w > width) w - width else 0 visible: bind w > width width: bind if (vsb.visible) then width - vsb.width else width } override function create() { Group { clip: Rectangle { width: bind width height: bind height } content: [ Rectangle { fill: bind background width: bind width height: bind height } Group { translateX: bind border - bounds.x - hsb.value translateY: bind border - bounds.y - vsb.value content: bind content } Group { translateX: bind width - vsb.width content: vsb } Group { translateY: bind height - hsb.height content: hsb } ] onMouseWheelMoved: function(event) { vsb.value += event.wheelRotation * 10 } } } }