<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->

<document id="sliders">
    <properties>
        <title>Sliders</title>
    </properties>

    <body>
        <p>
            Sliders allow a user to interactively select one of a range of values by dragging the
            mouse. The following example demonstrates the use of the <tt>Slider</tt> component. It
            allows the user to select a value from 0 - 255 and displays the value in a
            <tt>Label</tt> component:
        </p>

        <application class="org.apache.pivot.wtk.ScriptApplication"
            width="160" height="30">
            <libraries>
                <library>core</library>
                <library>wtk</library>
                <library>wtk-terra</library>
                <library>tutorials</library>
            </libraries>
            <startup-properties>
                <src>/org/apache/pivot/tutorials/boundedrange/sliders.bxml</src>
            </startup-properties>
        </application>

        <p>
            The BXML source for the example is as follows:
        </p>

        <source type="xml" location="org/apache/pivot/tutorials/boundedrange/sliders.bxml">
            <![CDATA[
            <boundedrange:Sliders title="Sliders" maximized="true"
                xmlns:bxml="http://pivot.apache.org/bxml"
                xmlns:boundedrange="org.apache.pivot.tutorials.boundedrange"
                xmlns="org.apache.pivot.wtk">
                <BoxPane styles="{verticalAlignment:'center'}">
                    <Slider bxml:id="slider" range="{start:0, end:255}" value="0"/>
                    <Label bxml:id="label"/>
                </BoxPane>
            </boundedrange:Sliders>
            ]]>
        </source>

        <p>
            The Java source loads the BXML and attaches a <tt>SliderValueListener</tt> to the
            slider. When the slider value changes, the <tt>updateLabel()</tt> method is called to
            set the current value:
        </p>

        <source type="java" location="org/apache/pivot/tutorials/boundedrange/Sliders.java">
            <![CDATA[
            package org.apache.pivot.tutorials.boundedrange;

            import java.net.URL;

            import org.apache.pivot.beans.Bindable;
            import org.apache.pivot.collections.Map;
            import org.apache.pivot.util.Resources;
            import org.apache.pivot.wtk.Label;
            import org.apache.pivot.wtk.Slider;
            import org.apache.pivot.wtk.SliderValueListener;
            import org.apache.pivot.wtk.Window;

            public class Sliders extends Window implements Bindable {
                private Slider slider = null;
                private Label label = null;

                @Override
                public void initialize(Map<String, Object> namespace, URL location, Resources resources) {
                    slider = (Slider)namespace.get("slider");
                    label = (Label)namespace.get("label");

                    slider.getSliderValueListeners().add(new SliderValueListener() {
                        @Override
                        public void valueChanged(Slider slider, int previousValue) {
                            updateLabel();
                        }
                    });

                    updateLabel();
                }

                private void updateLabel() {
                    label.setText(Integer.toString(slider.getValue()));
                }
            }
            ]]>
        </source>
    </body>
</document>
