Package com.rim.samples.device.svg.svgformsdemo

Source Code of com.rim.samples.device.svg.svgformsdemo.SVGFormsScreen

/*
* SVGFormsScreen.java
*
* Copyright � 1998-2011 Research In Motion Limited
*
* Licensed 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.
*
* Note: For the sake of simplicity, this sample application may not leverage
* resource bundles and resource strings.  However, it is STRONGLY recommended
* that application developers make use of the localization features available
* within the BlackBerry development platform to ensure a seamless application
* experience across a variety of languages and geographies.  For more information
* on localizing your application, please refer to the BlackBerry Java Development
* Environment Development Guide associated with this release.
*/

package com.rim.samples.device.svg.svgformsdemo;

import java.io.IOException;
import java.io.InputStream;

import javax.microedition.m2g.SVGAnimator;
import javax.microedition.m2g.SVGImage;

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.Screen;
import net.rim.device.api.ui.TouchEvent;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;

import org.w3c.dom.Document;
import org.w3c.dom.svg.SVGElement;

/**
* A MainScreen on which to render SVG elements
*/
public final class SVGFormsScreen extends MainScreen {
    // Scroll directions
    private static final int LEFT = 1;
    private static final int RIGHT = 2;
    private static final int UP = 3;
    private static final int DOWN = 4;

    // Panel Ids
    static final int BUTTON = 1;
    static final int SLIDERS = 2;
    static final int LISTS = 3;
    static final int TEXT = 4;

    // SVGImage instance to store the parsed SVG data
    private SVGImage _image;

    // SVGAnimator to obtain an SVGField
    private SVGAnimator _animator;

    // Document to hold SVGImage contents
    private Document _document;

    // Panels
    private final TabEventHandler _tabEventHandler;
    private final ButtonPanel _buttonPanel;
    private final SliderPanel _sliderPanel;
    private final ListPanel _listPanel;
    private final TextPanel _textPanel;

    // Current view
    private int _currentView = BUTTON;

    // Indicates the current mode
    private boolean _tabMode = true;
    private boolean _controlsMode = false;
    private boolean _dialogboxMode = false;

    private int _direction;

    /**
     * Creates a new SVGFormsScreen object
     */
    public SVGFormsScreen() {
        super(Screen.NO_VERTICAL_SCROLL);

        try {
            // Obtain an input stream to the SVG file
            final InputStream inputStream =
                    getClass().getResourceAsStream("/svgforms.svg");

            // Load the SVG image using the input stream connection
            _image = (SVGImage) SVGImage.createImage(inputStream, null);

            // Create an interactive SVG animator that hosts SVG field
            _animator =
                    SVGAnimator.createAnimator(_image,
                            "net.rim.device.api.ui.Field");

            // Obtain the images document
            _document = _image.getDocument();
        } catch (final IOException ioe) {
            System.out.println("Error while opening the .svg file.");
        }

        // Get the SVG field
        final Field _svgField = (Field) _animator.getTargetComponent();

        // Manager to lay out checkboxes
        final VerticalFieldManager vfm = new VerticalFieldManager();
        this.add(vfm);
        vfm.add(_svgField);

        // Initialize the event handlers
        _tabEventHandler = new TabEventHandler(this);
        _listPanel = new ListPanel(this);
        _buttonPanel = new ButtonPanel(this);
        _sliderPanel = new SliderPanel(this);
        _textPanel = new TextPanel(this);

        // Start the animator
        _animator.play();
    }

    /**
     * Returns the animator
     *
     * @return SVGAnimator The animator
     */
    SVGAnimator getAnimator() {
        return _animator;
    }

    /**
     * Returns element corresponding to a given ID
     *
     * @param elementId
     *            The ID of the element to return
     * @return SVGElement An SVG element corresponding to the given ID
     */
    SVGElement getElementById(final String elementId) {
        final SVGElement _svgElement =
                (SVGElement) _document.getElementById(elementId);
        return _svgElement;
    }

    /**
     * Sets focus to a specified element or null
     */
    void setFocus(final SVGElement svgElement) {
        _image.focusOn(svgElement);
    }

    /**
     * Sets the current panel view
     *
     * @param view
     *            Integer representing button, sliders, lists, or text views
     */
    void setView(final int view) {
        this._currentView = view;
    }

    /**
     * Handles navigation movement inside the tabs
     */
    private void tabControlsNavigation(final int dx, final int dy,
            final int status, final int time) {
        switch (_direction) {
        case UP:
            break;

        case DOWN: {
            setFocus(null);

            // Set the focus to the first element of the chosen panel when
            // scroll ball direction is "down"
            switch (_currentView) {
            case BUTTON:
                _image.focusOn(_buttonPanel.getFirstElement());
                break;
            case SLIDERS:
                _image.focusOn(_sliderPanel.getFirstElement());
                break;
            case LISTS:
                _image.focusOn(_listPanel.getFirstElement());
                break;
            case TEXT:
                _image.focusOn(_textPanel.getFirstElement());
                break;
            }

            _tabMode = false;
            _controlsMode = true;
            break;
        }
        case LEFT: {
            super.navigationMovement(dx, dy, status, time);
            break;
        }
        case RIGHT: {
            // If the scroll direction is "right" on the last element then stay
            // at the last tab element.
            if (_tabEventHandler.isLastTabElement() == false) {
                super.navigationMovement(dx, dy, status, time);
            }
            break;
        }
        }
    }

    /**
     * Handles navigation movement inside a panel
     *
     * @param svgPanel
     *            The SVGPanel corresponding to the current view
     * @param dx
     *            Magnitude of navigational motion: negative for a move left and
     *            postive for a move right
     * @param dy
     *            dy - Magnitude of navigational motion: negative for an upwards
     *            move, and positive for a downwards move
     * @param status
     *            Modifier key status at time of move
     * @param time
     *            Number of milliseconds since the device was turned on
     */
    private void panelControlsNavigation(final SVGPanel svgPanel, int dx,
            int dy, final int status, final int time) {
        /*
         * It is essential that the first panel element is never skipped. The
         * following changes to the dx/dy ensures it.
         */
        if (dx < 0) {
            dx = -1;
        }
        if (dx > 0) {
            dx = 1;
        }
        if (dy < 0) {
            dy = -1;
        }
        if (dy > 0) {
            dy = 1;
        }

        switch (_direction) {
        case UP: {
            // If the scroll direction is "up" while on the first panel element,
            // shift the focus to
            // to Tabmode and the focus to the first tab element.
            if (svgPanel.isFirstPanelElement()) {
                setFocus(null);
                _image.focusOn(_tabEventHandler.getFirstTabElement());
                _controlsMode = false;
                _tabMode = true;
            }
            super.navigationMovement(dx, dy, status, time);
            break;
        }
        case LEFT: {
            // If the scroll direction is left on the first element then do
            // nothing
            if (svgPanel.isFirstPanelElement() == false) {
                super.navigationMovement(dx, dy, status, time);
            }
            break;
        }
        case RIGHT:
        case DOWN: {
            super.navigationMovement(dx, dy, status, time);
            break;
        }
        }
    }

    /**
     * Handles navigation movement inside a ListBox/Combobox
     *
     * @param dx
     *            Magnitude of navigational motion: negative for a move left and
     *            postive for a move right
     * @param dy
     *            dy - Magnitude of navigational motion: negative for an upwards
     *            move, and positive for a downwards move
     * @param status
     *            Modifier key status at time of move
     * @param time
     *            Number of milliseconds since the device was turned on
     */
    private void listboxNavigation(final int dx, final int dy,
            final int status, final int time) {
        switch (_direction) {
        case UP: {
            if (_listPanel.inListModeNavigation()) {
                // If the current focus element jumps beyond the list box
                // elements,
                // focus back to the top list element.
                if (_listPanel.isListBoxElement() == false) {
                    _image.focusOn(_listPanel.getFirstListElement());
                }

                // If scroll direction is "up" and the element is the first,
                // then stay there.
                if (_listPanel.getCurrentFocusElement() != _listPanel
                        .getFirstListElement()) {
                    super.navigationMovement(dx, dy, status, time);
                }
            } else if (_listPanel.inComboboxModeNavigation()) {
                // If the current focus element jumps beyond the list box
                // elements,
                // focus back to the top combobox element.
                if (_listPanel.isComboboxElement() == false) {
                    _image.focusOn(_listPanel.getFirstComboboxElement());
                }

                // If scroll direction is "up" and the element is the first,
                // then stay there
                if (_listPanel.getCurrentFocusElement() != _listPanel
                        .getFirstComboboxElement()) {
                    super.navigationMovement(dx, dy, status, time);
                }
            }
            break;
        }
        case DOWN: {
            if (_listPanel.inListModeNavigation()) {
                // If the current focus element jumps beyond the combobox
                // elements,
                // focus back to the top bottom-most element.
                if (_listPanel.isListBoxElement() == false) {
                    _image.focusOn(_listPanel.getLastListElement());
                }

                // If scroll direction is "down" and the element is the last,
                // then stay there.
                if (_listPanel.getCurrentFocusElement() != _listPanel
                        .getLastListElement()) {
                    super.navigationMovement(dx, dy, status, time);
                }
            } else if (_listPanel.inComboboxModeNavigation()) {
                // If the current focus element jumps beyond the combobox
                // elements,
                // focus back to the top bottom-most element.
                if (_listPanel.isComboboxElement() == false) {
                    _image.focusOn(_listPanel.getLastComboboxElement());
                }

                // If scroll direction is "down" and the element is the last,
                // then stay there.
                if (_listPanel.getCurrentFocusElement() != _listPanel
                        .getLastComboboxElement()) {
                    super.navigationMovement(dx, dy, status, time);
                }
            }
            break;
        }
        case RIGHT:
        case LEFT:
            break;
        }
    }

    /**
     * Handles navigation movement inside a Textbox
     */
    private void textBoxNavigation() {
        switch (_direction) {
        case LEFT:
        case RIGHT:
        case UP:
        case DOWN: {
            _image.focusOn(_textPanel.getCurrentFocusElement());
            break;
        }
        }
    }

    /**
     * Restricts the navigation mode to the dialog box area. Also sets the focus
     * to dialogbox button when in dialog box mode and to the last element when
     * in controls mode.
     *
     * @param svgPanel
     *            The SVGPanel corresponding to the current view
     * @param dialogboxmode
     *            Boolean indicating the current dialog box mode status
     */
    void dialogboxMode(final SVGPanel svgPanel, final boolean dialogboxmode) {
        // If dialog box pops up, restrict the navigation movement within the
        // dialog box
        if (dialogboxmode == true) {
            this._controlsMode = false;
            final SVGElement dialogboxbutton =
                    this.getElementById("dialogboxbutton");
            _image.focusOn(dialogboxbutton);
        } else {
            this._controlsMode = true;
            _image.focusOn(svgPanel.getLastElement());
        }
        _dialogboxMode = dialogboxmode;
    }

    /**
     * @see net.rim.device.api.ui.Manager#sublayout(int,int)
     * @param width
     *            Width available for this screen
     * @param height
     *            Width available for this screen
     */
    protected void sublayout(final int width, final int height) {
        final int tabWidth = width / 6;
        final int slider1BasePosition = width / 14;
        final int listBasePosition = width / 14;
        final int textboxBasePosition = width / 2;
        final int dialogBasePosition = width / 10;
        final int dialogButtonBasePosition = width / 4;

        final float colorSliderBasePosition = (float) (width / 1.60);
        final float comboboxBasePosition = (float) (width / 1.75);

        /***********************************************************************
         * Border *
         ***********************************************************************/

        final SVGElement border = (SVGElement) getElementById("border");
        border.setFloatTrait("width", width - 20);
        border.setFloatTrait("x", 10);

        /***********************************************************************
         * Tab rect (section that contains the tab name) *
         ***********************************************************************/

        // Get tab rect elements
        final SVGElement buttonTabRect =
                (SVGElement) getElementById("buttontabrect");
        final SVGElement sliderTabRect =
                (SVGElement) getElementById("slidertabrect");
        final SVGElement listTabRect =
                (SVGElement) getElementById("listtabrect");
        final SVGElement textTabRect =
                (SVGElement) getElementById("texttabrect");

        // Set tab rect width
        buttonTabRect.setFloatTrait("width", tabWidth);
        sliderTabRect.setFloatTrait("width", tabWidth);
        listTabRect.setFloatTrait("width", tabWidth);
        textTabRect.setFloatTrait("width", tabWidth);

        // Set tab rect x position
        buttonTabRect.setFloatTrait("x", 20);
        sliderTabRect.setFloatTrait("x", tabWidth + 25);
        listTabRect.setFloatTrait("x", tabWidth * 2 + 30);
        textTabRect.setFloatTrait("x", tabWidth * 3 + 35);

        /***********************************************************************
         * Tab name text *
         ***********************************************************************/

        // Get tab name text elements
        final SVGElement buttonTabNameText =
                (SVGElement) getElementById("buttontabnametext");
        final SVGElement sliderTabNameText =
                (SVGElement) getElementById("slidertabnametext");
        final SVGElement listTabNameText =
                (SVGElement) getElementById("listtabnametext");
        final SVGElement textTabNameText =
                (SVGElement) getElementById("texttabnametext");

        // Set tab name text x position
        buttonTabNameText.setFloatTrait("x", 22);
        sliderTabNameText.setFloatTrait("x", tabWidth + 27);
        listTabNameText.setFloatTrait("x", tabWidth * 2 + 32);
        textTabNameText.setFloatTrait("x", tabWidth * 3 + 37);

        /***********************************************************************
         * Tab enabled (erased border underneath selected tab) *
         ***********************************************************************/

        // Get tab enabled elements
        final SVGElement buttonTabEnabled =
                (SVGElement) getElementById("buttontabenabled");
        final SVGElement sliderTabEnabled =
                (SVGElement) getElementById("slidertabenabled");
        final SVGElement listTabEnabled =
                (SVGElement) getElementById("listtabenabled");
        final SVGElement textTabEnabled =
                (SVGElement) getElementById("texttabenabled");

        // Set tab enabled widths
        buttonTabEnabled.setFloatTrait("width", tabWidth);
        sliderTabEnabled.setFloatTrait("width", tabWidth);
        listTabEnabled.setFloatTrait("width", tabWidth);
        textTabEnabled.setFloatTrait("width", tabWidth);

        // Set tab enabled x positions
        buttonTabEnabled.setFloatTrait("x", 20);
        sliderTabEnabled.setFloatTrait("x", tabWidth + 25);
        listTabEnabled.setFloatTrait("x", tabWidth * 2 + 30);
        textTabEnabled.setFloatTrait("x", tabWidth * 3 + 35);

        /***********************************************************************
         * Buttons tab *
         ***********************************************************************/

        // Get button 1 elements
        final SVGElement button1Rect =
                (SVGElement) getElementById("button1rect");
        final SVGElement button1Text =
                (SVGElement) getElementById("button1text");

        // Set button 1 positions
        button1Rect.setFloatTrait("x", width / 2 - 50);
        button1Text.setFloatTrait("x", width / 2 - 33);

        /***********************************************************************
         * Sliders tab *
         ***********************************************************************/

        // Get slider 1 elements
        final SVGElement slider1Bar = (SVGElement) getElementById("slider1bar");
        final SVGElement slider1Control =
                (SVGElement) getElementById("slider1control");
        final SVGElement progressBarRect =
                (SVGElement) getElementById("progressbarrect");
        final SVGElement progressBarStatusValue =
                (SVGElement) getElementById("progressbarstatusvalue");
        final SVGElement progressBarStatusPercent =
                (SVGElement) getElementById("progressbarstatuspercent");
        final SVGElement progressBarLine =
                (SVGElement) getElementById("progressbarline");
        final SVGElement progressBarText =
                (SVGElement) getElementById("progressbartext");

        // Get current value of progress bar
        final String percentStr = progressBarStatusValue.getTrait("#text");
        final Integer percentInteger = Integer.valueOf(percentStr);
        final int percent = percentInteger.intValue();

        // Set position of slider 1 bar and control
        slider1Control.setFloatTrait("cx", slider1BasePosition + percent);
        slider1Bar.setFloatTrait("x1", slider1BasePosition);
        slider1Bar.setFloatTrait("x2", slider1BasePosition + 100);

        // Set position of slider 1 progress bar elements
        progressBarLine.setFloatTrait("x1", slider1BasePosition);
        progressBarLine.setFloatTrait("x2", slider1BasePosition + percent);
        progressBarRect.setFloatTrait("x", slider1BasePosition);
        progressBarText.setFloatTrait("x", slider1BasePosition);
        progressBarStatusValue.setFloatTrait("x", slider1BasePosition + 105);
        progressBarStatusPercent.setFloatTrait("x", slider1BasePosition + 120);

        // Get color slider elements
        final SVGElement slider2Bar = (SVGElement) getElementById("slider2bar");
        final SVGElement slider2Control =
                (SVGElement) getElementById("slider2control");
        final SVGElement slider2Text =
                (SVGElement) getElementById("slider2text");
        final SVGElement slider3Bar = (SVGElement) getElementById("slider3bar");
        final SVGElement slider3Control =
                (SVGElement) getElementById("slider3control");
        final SVGElement slider3Text =
                (SVGElement) getElementById("slider3text");
        final SVGElement slider4Bar = (SVGElement) getElementById("slider4bar");
        final SVGElement slider4Control =
                (SVGElement) getElementById("slider4control");
        final SVGElement slider4Text =
                (SVGElement) getElementById("slider4text");

        // Calculate relative position of slider 2
        final String slider2PositionString = slider2Control.getTrait("cx");
        final Float slider2PositionFloat = Float.valueOf(slider2PositionString);
        final float slider2Position = slider2PositionFloat.floatValue();
        final String slider2BarX1PostionStr = slider2Bar.getTrait("x1");
        final Float slider2BarX1PositionFloat =
                Float.valueOf(slider2BarX1PostionStr);
        final float slider2BarX1Position =
                slider2BarX1PositionFloat.floatValue();
        final float slider2RelativePosition =
                slider2Position - slider2BarX1Position;

        // Calculate relative position of slider 3
        final String slider3PositionString = slider3Control.getTrait("cx");
        final Float slider3PositionFloat = Float.valueOf(slider3PositionString);
        final float slider3Position = slider3PositionFloat.floatValue();
        final String slider3BarX1PostionStr = slider3Bar.getTrait("x1");
        final Float slider3BarX1PositionFloat =
                Float.valueOf(slider3BarX1PostionStr);
        final float slider3BarX1Position =
                slider3BarX1PositionFloat.floatValue();
        final float slider3RelativePosition =
                slider3Position - slider3BarX1Position;

        // Calculate relative position of slider 4
        final String slider4PositionString = slider4Control.getTrait("cx");
        final Float slider4PositionFloat = Float.valueOf(slider4PositionString);
        final float slider4Position = slider4PositionFloat.floatValue();
        final String slider4BarX1PostionStr = slider4Bar.getTrait("x1");
        final Float slider4BarX1PositionFloat =
                Float.valueOf(slider4BarX1PostionStr);
        final float slider4BarX1Position =
                slider4BarX1PositionFloat.floatValue();
        final float slider4RelativePosition =
                slider4Position - slider4BarX1Position;

        // Set position of color slider controls
        slider2Control.setFloatTrait("cx", colorSliderBasePosition
                + slider2RelativePosition);
        slider3Control.setFloatTrait("cx", colorSliderBasePosition
                + slider3RelativePosition);
        slider4Control.setFloatTrait("cx", colorSliderBasePosition
                + slider4RelativePosition);

        // Set position of color slider bars
        slider2Bar.setFloatTrait("x1", colorSliderBasePosition);
        slider2Bar.setFloatTrait("x2", colorSliderBasePosition + 60);
        slider3Bar.setFloatTrait("x1", colorSliderBasePosition);
        slider3Bar.setFloatTrait("x2", colorSliderBasePosition + 60);
        slider4Bar.setFloatTrait("x1", colorSliderBasePosition);
        slider4Bar.setFloatTrait("x2", colorSliderBasePosition + 60);

        // Set position of color slider text
        slider2Text.setFloatTrait("x", colorSliderBasePosition - 45);
        slider3Text.setFloatTrait("x", colorSliderBasePosition - 45);
        slider4Text.setFloatTrait("x", colorSliderBasePosition - 45);

        // Set position of colorbox
        final SVGElement colorBox = (SVGElement) getElementById("colorbox");
        colorBox.setFloatTrait("x", colorSliderBasePosition);

        /***********************************************************************
         * Lists tab *
         ***********************************************************************/

        // List rect
        final SVGElement listRect = (SVGElement) getElementById("listrect");
        listRect.setFloatTrait("x", width / 14);

        // Get list item rect elements
        final SVGElement listItem1Rect =
                (SVGElement) getElementById("listitem1rect");
        final SVGElement listItem2Rect =
                (SVGElement) getElementById("listitem2rect");
        final SVGElement listItem3Rect =
                (SVGElement) getElementById("listitem3rect");
        final SVGElement listItem4Rect =
                (SVGElement) getElementById("listitem4rect");
        final SVGElement listItem5Rect =
                (SVGElement) getElementById("listitem5rect");

        // Set list item rect positions
        listItem1Rect.setFloatTrait("x", listBasePosition);
        listItem2Rect.setFloatTrait("x", listBasePosition);
        listItem3Rect.setFloatTrait("x", listBasePosition);
        listItem4Rect.setFloatTrait("x", listBasePosition);
        listItem5Rect.setFloatTrait("x", listBasePosition);

        // Get list item text elements
        final SVGElement listItem1Text =
                (SVGElement) getElementById("listitem1text");
        final SVGElement listItem2Text =
                (SVGElement) getElementById("listitem2text");
        final SVGElement listItem3Text =
                (SVGElement) getElementById("listitem3text");
        final SVGElement listItem4Text =
                (SVGElement) getElementById("listitem4text");
        final SVGElement listItem5Text =
                (SVGElement) getElementById("listitem5text");

        // Set list item text positions
        listItem1Text.setFloatTrait("x", listBasePosition);
        listItem2Text.setFloatTrait("x", listBasePosition);
        listItem3Text.setFloatTrait("x", listBasePosition);
        listItem4Text.setFloatTrait("x", listBasePosition);
        listItem5Text.setFloatTrait("x", listBasePosition);

        // Get combo box rect and text elements
        final SVGElement comboBoxRect =
                (SVGElement) getElementById("comboboxrect");
        final SVGElement comboBoxRect1 =
                (SVGElement) getElementById("comboboxrect1");
        final SVGElement comboBoxRect2 =
                (SVGElement) getElementById("comboboxrect2");
        final SVGElement comboBoxRect3 =
                (SVGElement) getElementById("comboboxrect3");
        final SVGElement comboBoxItemText1 =
                (SVGElement) getElementById("comboboxitemtext1");
        final SVGElement comboBoxItemText2 =
                (SVGElement) getElementById("comboboxitemtext2");
        final SVGElement comboBoxItemText3 =
                (SVGElement) getElementById("comboboxitemtext3");
        final SVGElement currentComboBoxRect =
                (SVGElement) getElementById("currentcomboboxrect");
        final SVGElement currentComboBoxText =
                (SVGElement) getElementById("currentcomboboxitemtext");
        final SVGElement button2Rect =
                (SVGElement) getElementById("button2rect");
        final SVGElement button2Text =
                (SVGElement) getElementById("button2text");

        // Set combo box rect and text positions
        comboBoxRect.setFloatTrait("x", comboboxBasePosition);
        comboBoxRect1.setFloatTrait("x", comboboxBasePosition);
        comboBoxRect2.setFloatTrait("x", comboboxBasePosition);
        comboBoxRect3.setFloatTrait("x", comboboxBasePosition);
        comboBoxItemText1.setFloatTrait("x", comboboxBasePosition + 50);
        comboBoxItemText2.setFloatTrait("x", comboboxBasePosition + 50);
        comboBoxItemText3.setFloatTrait("x", comboboxBasePosition + 50);
        currentComboBoxRect.setFloatTrait("x", comboboxBasePosition);
        currentComboBoxText.setFloatTrait("x", comboboxBasePosition + 50);
        button2Rect.setFloatTrait("x", width / 2 - 50);
        button2Text.setFloatTrait("x", width / 2 - 33);

        // Get combo box arrow elements
        final SVGElement comboBoxArrowRect =
                (SVGElement) getElementById("comboboxarrowrect");
        final SVGElement comboBoxArrowUp =
                (SVGElement) getElementById("comboboxarrowup");
        final SVGElement comboBoxArrowDown =
                (SVGElement) getElementById("comboboxarrowdown");

        // Create points string for up and down arrows
        final float point1x = comboboxBasePosition + 105;
        final float point2x = comboboxBasePosition + 110;
        final float point3x = comboboxBasePosition + 115;
        final String point1xString = Float.toString(point1x);
        final String point2xString = Float.toString(point2x);
        final String point3xString = Float.toString(point3x);
        final String upArrowPointsString =
                point1xString + ", 82, " + point2xString + ",77, "
                        + point3xString + ",82";
        final String downArrowPointsString =
                point1xString + ", 77, " + point2xString + ",82, "
                        + point3xString + ",77";

        // Set combo box arrow positions
        comboBoxArrowRect.setFloatTrait("x", comboboxBasePosition + 100);
        comboBoxArrowUp.setTrait("points", upArrowPointsString);
        comboBoxArrowDown.setTrait("points", downArrowPointsString);

        // Get dialog box elements
        final SVGElement dialogBoxRect =
                (SVGElement) getElementById("dialogboxrect");
        final SVGElement dialogBoxText1 =
                (SVGElement) getElementById("dialogboxtext1");
        final SVGElement dialogBoxText2 =
                (SVGElement) getElementById("dialogboxtext2");
        final SVGElement dialogBoxButtonRect =
                (SVGElement) getElementById("dialogboxbuttonrect");
        final SVGElement dialogBoxButtonText =
                (SVGElement) getElementById("dialogboxbuttontext");

        // Set dialog box positions
        dialogBoxRect.setFloatTrait("x", dialogBasePosition);
        dialogBoxText1.setFloatTrait("x", dialogBasePosition + 40);
        dialogBoxText2.setFloatTrait("x", dialogBasePosition + 40);
        dialogBoxButtonRect.setFloatTrait("x", dialogButtonBasePosition);
        dialogBoxButtonText.setFloatTrait("x", dialogButtonBasePosition + 5);

        /***********************************************************************
         * Text tab *
         ***********************************************************************/

        // Get text box elements
        final SVGElement textBoxLabelText =
                (SVGElement) getElementById("textboxlabeltext");
        final SVGElement textBoxRect =
                (SVGElement) getElementById("textboxrect");
        final SVGElement textBoxText =
                (SVGElement) getElementById("textboxtext");
        final SVGElement textBoxCursor =
                (SVGElement) getElementById("textboxcursor");

        // Calculate position of cursor relative to text field
        final String textBoxRectPositionString = textBoxRect.getTrait("x");
        final Float textBoxRectPositionFloat =
                Float.valueOf(textBoxRectPositionString);
        final float textBoxRectPosition = textBoxRectPositionFloat.floatValue();
        final String textBoxCursorPostionStr = textBoxCursor.getTrait("x");
        final Float textBoxCursorPositionFloat =
                Float.valueOf(textBoxCursorPostionStr);
        final float textBoxCursorPosition =
                textBoxCursorPositionFloat.floatValue();
        final float textBoxCursorRelativePosition =
                textBoxCursorPosition - textBoxRectPosition;

        // Set text box positions
        textBoxCursor.setFloatTrait("x", textboxBasePosition - 90
                + textBoxCursorRelativePosition);
        textBoxLabelText.setFloatTrait("x", textboxBasePosition - 90);
        textBoxRect.setFloatTrait("x", textboxBasePosition - 90);
        textBoxText.setFloatTrait("x", textboxBasePosition - 85);

        super.sublayout(width, height);
    }

    /**
     * Prevent the save dialog from being displayed
     *
     * @see MainScreen#onSavePrompt()
     */
    protected boolean onSavePrompt() {
        return true;
    }

    /**
     * @see Screen#onMenu(int)
     */
    public boolean onMenu(final int instance) {
        if (instance == Menu.INSTANCE_CONTEXT) {
            return true;
        } else {
            return super.onMenu(instance);
        }
    }

    /**
     * @see Manager#navigationMovement(int, int, int, int)
     */
    protected boolean navigationMovement(final int dx, final int dy,
            final int status, final int time) {
        if (dx < 0) {
            _direction = LEFT;
        }
        if (dy < 0) {
            _direction = UP;
        }
        if (dx > 0) {
            _direction = RIGHT;
        }
        if (dy > 0) {
            _direction = DOWN;
        }

        // Control movement inside the tabs
        if (_tabMode) {
            tabControlsNavigation(dx, dy, status, time);
        } else if (_controlsMode) {
            switch (_currentView) {
            // Control movement inside the button panel
            case BUTTON: {
                panelControlsNavigation(_buttonPanel, dx, dy, status, time);
                break;
            }

                // Controls movement inside the sliders panel
            case SLIDERS: {
                // Control movement inside a slider
                if (_sliderPanel.isSliderActivated()) {
                    // If sliders are activated, the scroll will directly
                    // correspond to the chosen slider's movement
                    _sliderPanel.sliderMovementNavigation(dx, dy, status, time);
                } else {
                    panelControlsNavigation(_sliderPanel, dx, dy, status, time);
                }
                break;
            }

                // Control movement inside the list panel
            case LISTS: {
                // Control movement inside a ListBox
                if (_listPanel.isListBoxActivated()) {
                    if (_listPanel.inListModeNavigation() == false) {
                        _listPanel.listModeNavigationOn();
                        _image.focusOn(_listPanel.getFirstListElement());
                    }
                    this.listboxNavigation(dx, dy, status, time);
                }

                // Control movement inside a Combobox
                else if (_listPanel.isComboboxActivated()) {
                    if (_listPanel.inComboboxModeNavigation() == false) {
                        _listPanel.comboboxModeNavigationOn();
                        _image.focusOn(_listPanel.getFirstComboboxElement());
                    }
                    this.listboxNavigation(dx, dy, status, time);
                } else {
                    // If the listbox mode still exists then turn it off
                    if (_listPanel.inListModeNavigation() == true) {
                        _listPanel.listModeNavigationOff();
                        _image.focusOn(_listPanel.getFirstElement());
                    }

                    // If the combobox mode still exists then turn it off
                    else if (_listPanel.inComboboxModeNavigation() == true) {
                        _listPanel.comboboxModeNavigationOff();
                        _image.focusOn(_listPanel.getFirstElement());
                    }
                    panelControlsNavigation(_listPanel, dx, dy, status, time);
                }
                break;
            }

                // Control movement inside the text panel
            case TEXT: {
                if (_textPanel.isTextBoxActive()) {
                    this.textBoxNavigation();
                } else {
                    panelControlsNavigation(_textPanel, dx, dy, status, time);
                }
                break;
            }
            }
        } else if (_dialogboxMode == true) {
            // Keep the focus on to the dialog box button
            final SVGElement dialogboxbutton =
                    this.getElementById("dialogboxbutton");
            _image.focusOn(dialogboxbutton);
        }
        return true;
    }

    /**
     * @see Screen#touchEvent(TouchEvent)
     */
    protected boolean touchEvent(final TouchEvent message) {
        switch (_currentView) {
        case SLIDERS: {
            if (message.getEvent() == TouchEvent.MOVE) {
                _sliderPanel.SliderTouchEvent(message.getX(1));
                break;
            }
        }
        }
        return super.touchEvent(message);
    }
}
TOP

Related Classes of com.rim.samples.device.svg.svgformsdemo.SVGFormsScreen

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.