/* * TabEventHandler.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 javax.microedition.m2g.SVGAnimator; import org.w3c.dom.events.Event; import org.w3c.dom.events.EventListener; import org.w3c.dom.svg.SVGElement; /** * Class to handle SVG elements representing tabs. */ public final class TabEventHandler implements org.w3c.dom.events.EventListener { // Reference to the main screen private final SVGFormsScreen _svgFormsScreen; // Reference to the animator private final SVGAnimator _animator; // Reference to the recently focused and clicked elements private SVGElement _currentFocusInElement, _currentClickedElement, _lastClickedTabElement; // The first and the last tab element of the SVG Panel private final SVGElement _lastElement, _firstElement; // Tab elements private SVGElement _buttonTab; private SVGElement _buttonTab_enable; private SVGElement _sliderTab; private SVGElement _sliderTab_enable; private SVGElement _listTab; private SVGElement _listTab_enable; private SVGElement _textTab; private SVGElement _textTab_enable; // Reference to various panels. private SVGElement _buttonview; private SVGElement _sliderview; private SVGElement _listview; private SVGElement _textview; /** * Constructs a new TabEventHandler * * @param svgFormsScreen * The application's main screen */ public TabEventHandler(final SVGFormsScreen svgFormsScreen) { this._svgFormsScreen = svgFormsScreen; _animator = _svgFormsScreen.getAnimator(); this.initializeTabs(); this.activateTabs(); _firstElement = _buttonTab; _lastElement = _textTab; _lastClickedTabElement = _buttonTab; } /** * Initializes the tabs */ private void initializeTabs() { _buttonTab = _svgFormsScreen.getElementById("buttontab"); _buttonTab_enable = _svgFormsScreen.getElementById("buttontabenabled"); _buttonview = _svgFormsScreen.getElementById("buttonview"); _sliderTab = _svgFormsScreen.getElementById("slidertab"); _sliderTab_enable = _svgFormsScreen.getElementById("slidertabenabled"); _sliderview = _svgFormsScreen.getElementById("sliderview"); _listTab = _svgFormsScreen.getElementById("listtab"); _listTab_enable = _svgFormsScreen.getElementById("listtabenabled"); _listview = _svgFormsScreen.getElementById("listview"); _textTab = _svgFormsScreen.getElementById("texttab"); _textTab_enable = _svgFormsScreen.getElementById("texttabenabled"); _textview = _svgFormsScreen.getElementById("textview"); } /** * Activates the given svg element by registering an event listener for * click and focus events * * @param element * The SVGElement to activate * @param eventListener * The EventListener implementation that handles events for the * given element */ private void activateSVGElement(final SVGElement element, final EventListener eventListener) { element.addEventListener("click", eventListener, false); element.addEventListener("DOMFocusIn", eventListener, false); } /** * Activates the tab elements */ private void activateTabs() { activateSVGElement(_buttonTab, this); activateSVGElement(_sliderTab, this); activateSVGElement(_listTab, this); activateSVGElement(_textTab, this); } /** * Check if the currently focused tab element is last * * @return True if the currently focused tab element is last, otherwise * false */ boolean isLastTabElement() { if (_currentFocusInElement == _lastElement) { return true; } else { return false; } } /** * Gets the first tab element * * @return The first tab element */ SVGElement getFirstTabElement() { return _firstElement; } /** * Updates the tab view * * @param lastElement * The most recently clicked tab element */ private void updateTabView(final SVGElement lastElement) { if (lastElement == _buttonTab) { _buttonTab_enable.setTrait("visibility", "hidden"); _buttonview.setTrait("display", "none"); } else if (lastElement == _sliderTab) { _sliderTab_enable.setTrait("visibility", "hidden"); _sliderview.setTrait("display", "none"); } else if (lastElement == _listTab) { _listTab_enable.setTrait("visibility", "hidden"); _listview.setTrait("display", "none"); } else if (lastElement == _textTab) { _textTab_enable.setTrait("visibility", "hidden"); _textview.setTrait("display", "none"); } } /** * Handles the DOM event. * * @param evt * The event to be handled */ public void handleEvent(final Event evt) { if (evt.getType().equals("DOMFocusIn")) { _currentFocusInElement = (SVGElement) evt.getCurrentTarget(); } if (evt.getType().equals("click")) { _currentClickedElement = (SVGElement) evt.getCurrentTarget(); if (_currentClickedElement == _lastClickedTabElement) { return; } _animator.invokeLater(new Runnable() { public void run() { if (_currentClickedElement == _buttonTab) { _svgFormsScreen.setView(SVGFormsScreen.BUTTON); _buttonview.setTrait("display", "inline"); updateTabView(_lastClickedTabElement); _buttonTab_enable.setTrait("visibility", "visible"); } else if (_currentClickedElement == _sliderTab) { _svgFormsScreen.setView(SVGFormsScreen.SLIDERS); _sliderview.setTrait("display", "inline"); updateTabView(_lastClickedTabElement); _sliderTab_enable.setTrait("visibility", "visible"); } else if (_currentClickedElement == _listTab) { _svgFormsScreen.setView(SVGFormsScreen.LISTS); _listview.setTrait("display", "inline"); updateTabView(_lastClickedTabElement); _listTab_enable.setTrait("visibility", "visible"); } else if (_currentClickedElement == _textTab) { _svgFormsScreen.setView(SVGFormsScreen.TEXT); _textview.setTrait("display", "inline"); updateTabView(_lastClickedTabElement); _textTab_enable.setTrait("visibility", "visible"); } _lastClickedTabElement = _currentClickedElement; } }); } } }