/*
* ListPanel.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 org.w3c.dom.Node;
import org.w3c.dom.events.Event;
import org.w3c.dom.svg.SVGElement;
/**
* A panel containing List and Combobox
*/
public final class ListPanel extends SVGPanel implements
org.w3c.dom.events.EventListener {
// Listpanel elements
private SVGElement _list;
private SVGElement _listItem1;
private SVGElement _listItem1_text;
private SVGElement _listItem2;
private SVGElement _listItem2_text;
private SVGElement _listItem3;
private SVGElement _listItem3_text;
private SVGElement _listItem4;
private SVGElement _listItem4_text;
private SVGElement _listItem5;
private SVGElement _listItem5_text;
private SVGElement _combobox;
private SVGElement _combobox_group;
private SVGElement _combobox_downarrow;
private SVGElement _combobox_uparrow;
private SVGElement _combobox_currentItem;
private SVGElement _combobox_currentItem_text;
private SVGElement _combobox1;
private SVGElement _combobox1_text;
private SVGElement _combobox2;
private SVGElement _combobox2_text;
private SVGElement _combobox3;
private SVGElement _combobox3_text;
private SVGElement _dialogbox;
private SVGElement _dialogboxbutton;
private SVGElement _dialogbox_text1;
private SVGElement _dialogbox_text2;
private SVGElement _button;
// Listbox states
private boolean _listActivated = false;
public boolean _listModeNavigation = false;
private SVGElement _firstListItem, _lastListItem;
private SVGElement _currentListItem;
// Combobox states
private boolean _comboboxActivated = false;
private boolean _comboboxModeNavigation = false;
private SVGElement _firstComboboxItem, _lastComboboxItem;
private SVGElement _currentComboboxItem;
private SVGElement _currentComboboxItemText;
/**
* Constructs a new List Panel
*
* @param svgFormsScreen
* The applications's main screen
*/
public ListPanel(final SVGFormsScreen svgFormsScreen) {
super(svgFormsScreen);
initializeLists();
this.activateLists();
super.setFirstElement(_list);
super.setLastElement(_button);
this.setFirstListElement(_listItem1);
this.setFirstComboboxElement(_combobox1);
this.setLastListElement(_listItem5);
this.setLastComboboxElement(_combobox3);
_currentListItem = this.getFirstListElement();
_currentComboboxItem = this.getFirstComboboxElement();
}
/**
* Initialize list elements
*/
private void initializeLists() {
_list = _svgFormsScreen.getElementById("list");
_listItem1 = _svgFormsScreen.getElementById("listitem1rect");
_listItem1_text = _svgFormsScreen.getElementById("listitem1text");
_listItem2 = _svgFormsScreen.getElementById("listitem2rect");
_listItem2_text = _svgFormsScreen.getElementById("listitem2text");
_listItem3 = _svgFormsScreen.getElementById("listitem3rect");
_listItem3_text = _svgFormsScreen.getElementById("listitem3text");
_listItem4 = _svgFormsScreen.getElementById("listitem4rect");
_listItem4_text = _svgFormsScreen.getElementById("listitem4text");
_listItem5 = _svgFormsScreen.getElementById("listitem5rect");
_listItem5_text = _svgFormsScreen.getElementById("listitem5text");
_combobox = _svgFormsScreen.getElementById("combobox");
_combobox_group = _svgFormsScreen.getElementById("comboboxgroup");
_combobox_downarrow =
_svgFormsScreen.getElementById("comboboxarrowdown");
_combobox_uparrow = _svgFormsScreen.getElementById("comboboxarrowup");
_combobox_currentItem =
_svgFormsScreen.getElementById("currentcomboboxitem");
_combobox_currentItem_text =
_svgFormsScreen.getElementById("currentcomboboxitemtext");
_combobox1 = _svgFormsScreen.getElementById("comboboxrect1");
_combobox1_text =
(SVGElement) _svgFormsScreen
.getElementById("comboboxitemtext1");
_combobox2 =
(SVGElement) _svgFormsScreen.getElementById("comboboxrect2");
_combobox2_text =
(SVGElement) _svgFormsScreen
.getElementById("comboboxitemtext2");
_combobox3 =
(SVGElement) _svgFormsScreen.getElementById("comboboxrect3");
_combobox3_text =
(SVGElement) _svgFormsScreen
.getElementById("comboboxitemtext3");
_dialogbox = (SVGElement) _svgFormsScreen.getElementById("dialogbox");
_dialogboxbutton =
(SVGElement) _svgFormsScreen.getElementById("dialogboxbutton");
_dialogbox_text1 =
(SVGElement) _svgFormsScreen.getElementById("dialogboxtext1");
_dialogbox_text2 =
(SVGElement) _svgFormsScreen.getElementById("dialogboxtext2");
_button = (SVGElement) _svgFormsScreen.getElementById("button2");
}
/**
* Registers the events associated with the list panel components
*/
private void activateLists() {
activateSVGElement(_list, this);
activateSVGElement(_combobox, this);
activateSVGElement(_button, this);
}
/**
* Registers the events associated with the listbox elements
*/
private void activateListBox() {
_listActivated = true;
activateSVGElement(_listItem1, this);
activateSVGElement(_listItem2, this);
activateSVGElement(_listItem3, this);
activateSVGElement(_listItem4, this);
activateSVGElement(_listItem5, this);
}
/**
* Un-Registers the events associated with the listbox elements
*/
private void deActivateListBox() {
_listActivated = false;
deActivateSVGElement(_listItem1, this);
deActivateSVGElement(_listItem2, this);
deActivateSVGElement(_listItem3, this);
deActivateSVGElement(_listItem4, this);
deActivateSVGElement(_listItem5, this);
}
/**
* Registers the events associated with the combobox elements
*/
private void activateComboboxBox() {
_comboboxActivated = true;
activateSVGElement(_combobox1, this);
activateSVGElement(_combobox2, this);
activateSVGElement(_combobox3, this);
}
/**
* Un-Registers the events associated with the combobox elements
*/
private void deActivateComboboxBox() {
_comboboxActivated = false;
deActivateSVGElement(_combobox1, this);
deActivateSVGElement(_combobox2, this);
deActivateSVGElement(_combobox3, this);
}
/**
* Sets the first focusable svglist item
*
* @param svgElement
* The element to set
*/
private void setFirstListElement(final SVGElement svgElement) {
_firstListItem = svgElement;
}
/**
* Sets the last focussable svglist item.
*
* @param svgElement
* The element to be set
*/
private void setLastListElement(final SVGElement svgElement) {
_lastListItem = svgElement;
}
/**
* Returns the first list element
*
* @return The first element in the list
*/
SVGElement getFirstListElement() {
return _firstListItem;
}
/**
* Returns the last list element
*
* @return The last element in the list
*/
SVGElement getLastListElement() {
return _lastListItem;
}
/**
* Sets the first focusable combobox item
*
* @param svgElement
* The combobox item to be set
*/
private void setFirstComboboxElement(final SVGElement svgElement) {
_firstComboboxItem = svgElement;
}
/**
* Sets the last focusable combobox item
*
* @param svgElement
* The combobox item to be set
*/
private void setLastComboboxElement(final SVGElement svgElement) {
_lastComboboxItem = svgElement;
}
/**
* Returns the first combobox element
*
* @return The first combobox element
*/
SVGElement getFirstComboboxElement() {
return _firstComboboxItem;
}
/**
* Returns the last combobox element
*
* @return The last combobox element
*/
SVGElement getLastComboboxElement() {
return _lastComboboxItem;
}
/**
* Returns the status of the listbox
*
* @return True if the list box is activated, otherwise false
*/
boolean isListBoxActivated() {
return this._listActivated;
}
/**
* Returns the status of the combobox
*
* @return True if the combo box is activated, otherwise false
*/
boolean isComboboxActivated() {
return this._comboboxActivated;
}
/**
* Turns list mode navigation on
*/
void listModeNavigationOn() {
_listModeNavigation = true;
}
/**
* Turn list mode navigation off
*/
void listModeNavigationOff() {
_listModeNavigation = false;
}
/**
* Turns combobox mode navigation on
*/
void comboboxModeNavigationOn() {
_comboboxModeNavigation = true;
}
/**
* Turn combobox mode navigation off
*/
void comboboxModeNavigationOff() {
_comboboxModeNavigation = false;
}
/**
* Checks if list box navigation is on
*
* @return True if list mode navigation is turned on, otherwise false
*/
boolean inListModeNavigation() {
return _listModeNavigation;
}
/**
* Checks if combobox navigation is on.
*
* @return True is combobox navigation is turned on, otherwise false
*/
boolean inComboboxModeNavigation() {
return _comboboxModeNavigation;
}
/**
* Checks if the current element is a listbox element.
*
* @return True if current element is a listbox element, otherwise false
*/
boolean isListBoxElement() {
final Node currentNode = _currentFocusInElement.getParentNode();
if (currentNode.getParentNode() == (Node) _list) {
return true;
} else {
return false;
}
}
/**
* Checks if the current element is a combobox element
*
* @return True if current element is a combobox element, otherwise false
*/
boolean isComboboxElement() {
final Node currentNode = _currentFocusInElement.getParentNode();
final Node comboboxsubgroupNode = currentNode.getParentNode();
if (comboboxsubgroupNode.getParentNode() == (Node) _combobox) {
return true;
} else {
return false;
}
}
/**
* Handles the DOMActivate event
*
* @param evt
* The event to be handled
*/
public void handleEvent(final Event evt) {
// Help avoid bubbled event handling
if (_currentEvent.equals(evt.getType())) {
return;
} else {
_currentEvent = evt.getType();
}
// Handle the DOMFocusIn event
if (evt.getType().equals("DOMFocusIn")) {
_currentFocusInElement = (SVGElement) evt.getCurrentTarget();
setCurrentFocusElement(_currentFocusInElement);
_animator.invokeLater(new Runnable() {
public void run() {
if (isListBoxActivated() || isComboboxActivated()) {
_currentFocusInElement.setTrait("fill", "red");
} else {
_currentFocusInElement.setFloatTrait("stroke-opacity",
1.0f);
}
}
});
}
// Handle the DOMFocusOut event
else if (evt.getType().equals("DOMFocusOut")) {
_currentFocusOutElement = (SVGElement) evt.getCurrentTarget();
_animator.invokeLater(new Runnable() {
public void run() {
if (isListBoxActivated() || isComboboxActivated()) {
_currentFocusOutElement.setTrait("fill", "#FF6600");
} else {
_currentFocusOutElement.setFloatTrait("stroke-opacity",
0.25f);
}
}
});
}
// Handle the click event
else if (evt.getType().equals("click")) {
_currentClickedElement = (SVGElement) evt.getCurrentTarget();
if (_currentClickedElement == _list) {
activateListBox();
} else if (_currentClickedElement == _listItem1
|| _currentClickedElement == _listItem2
|| _currentClickedElement == _listItem3
|| _currentClickedElement == _listItem4
|| _currentClickedElement == _listItem5) {
_animator.invokeLater(new Runnable() {
public void run() {
if (_currentListItem != _currentClickedElement) {
_currentFocusInElement.setTrait("fill", "#FF6600");
_currentListItem.setFloatTrait("fill-opacity",
0.25f);
_currentListItem.setFloatTrait("stroke-opacity",
0.1f);
_currentListItem = _currentClickedElement;
_currentListItem
.setFloatTrait("fill-opacity", 0.5f);
deActivateListBox();
}
}
});
}
else if (_currentClickedElement == _combobox) {
_combobox_downarrow.setTrait("display", "none");
_combobox_uparrow.setTrait("display", "inline");
_combobox_currentItem.setTrait("display", "none");
_combobox_group.setTrait("display", "inline");
_animator.invokeLater(new Runnable() {
public void run() {
_currentComboboxItem
.setFloatTrait("fill-opacity", 0.5f);
activateComboboxBox();
}
});
} else if (_currentClickedElement == _combobox1
|| _currentClickedElement == _combobox2
|| _currentClickedElement == _combobox3) {
_animator.invokeLater(new Runnable() {
public void run() {
if (_currentComboboxItem != _currentClickedElement) {
_currentFocusInElement.setTrait("fill", "#FF6600");
_currentComboboxItem.setFloatTrait(
"stroke-opacity", 0.1f);
_currentComboboxItem.setFloatTrait("fill-opacity",
0.25f);
_currentComboboxItem = _currentClickedElement;
_currentComboboxItem.setFloatTrait("fill-opacity",
0.5f);
}
_combobox_downarrow.setTrait("display", "inline");
_combobox_uparrow.setTrait("display", "none");
_combobox_currentItem.setTrait("display", "inline");
_combobox_group.setTrait("display", "none");
if (_currentClickedElement == _combobox1) {
_currentComboboxItemText = _combobox1_text;
} else if (_currentClickedElement == _combobox2) {
_currentComboboxItemText = _combobox2_text;
} else if (_currentClickedElement == _combobox3) {
_currentComboboxItemText = _combobox3_text;
}
_combobox_currentItem_text.setTrait("#text",
_currentComboboxItemText.getTrait("#text"));
deActivateComboboxBox();
}
});
} else if (_currentClickedElement == _button) {
activateSVGElement(_dialogboxbutton, this);
_svgFormsScreen.dialogboxMode(this, true);
_animator.invokeLater(new Runnable() {
public void run() {
String item = "Item = ";
String quantity = "Quantity = ";
_dialogbox.setTrait("display", "inline");
String itemName = "";
if (_currentListItem == _listItem1) {
itemName = _listItem1_text.getTrait("#text");
} else if (_currentListItem == _listItem2) {
itemName = _listItem2_text.getTrait("#text");
} else if (_currentListItem == _listItem3) {
itemName = _listItem3_text.getTrait("#text");
} else if (_currentListItem == _listItem4) {
itemName = _listItem4_text.getTrait("#text");
} else if (_currentListItem == _listItem5) {
itemName = _listItem5_text.getTrait("#text");
}
item = item + itemName;
quantity =
quantity
+ _combobox_currentItem_text
.getTrait("#text") + " ";
_dialogbox_text1.setTrait("#text", item);
_dialogbox_text2.setTrait("#text", quantity);
}
});
} else if (_currentClickedElement == _dialogboxbutton) {
deActivateSVGElement(_dialogboxbutton, this);
_svgFormsScreen.dialogboxMode(this, false);
_animator.invokeLater(new Runnable() {
public void run() {
_dialogbox.setTrait("display", "none");
}
});
}
}
}
}