001: /*
002: * Copyright (c) 2004 JETA Software, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without modification,
005: * are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JETA Software nor the names of its contributors may
015: * be used to endorse or promote products derived from this software without
016: * specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
021: * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
022: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
023: * INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
024: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
025: * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
026: * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028: */
029:
030: package com.jeta.forms.gui.focus;
031:
032: import java.awt.Component;
033: import java.awt.Container;
034: import java.awt.FocusTraversalPolicy;
035: import java.awt.Window;
036: import java.util.ArrayList;
037: import java.util.Collection;
038: import java.util.HashMap;
039:
040: /**
041: * The focus traversal policy for our form.
042: *
043: * This class is currently not being used since focus is not supported in the
044: * designer.
045: *
046: * @author Jeff Tassin
047: */
048: public class FormFocusTraversalPolicy extends FocusTraversalPolicy {
049: /**
050: * The list of components in focus order
051: */
052: private ArrayList m_focus_list = new ArrayList();
053:
054: /**
055: * A map of components to focus_list index m_comp_map<Component,Integer>
056: */
057: private HashMap m_comp_map = new HashMap();
058:
059: /**
060: * ctor
061: *
062: * @param components
063: * a collection of components (java.awt.Component objects) in the
064: * correct focus order.
065: */
066: public FormFocusTraversalPolicy(Collection components) {
067: rebuildPolicy(components);
068: }
069:
070: /**
071: * Rebuilds the focus policy based on the given collection of components.
072: */
073: public void rebuildPolicy(Collection components) {
074: m_focus_list.clear();
075: m_comp_map.clear();
076: m_focus_list.addAll(components);
077: for (int index = 0; index < m_focus_list.size(); index++) {
078: Component comp = (Component) m_focus_list.get(index);
079: m_comp_map.put(comp, new Integer(index));
080: }
081: }
082:
083: /**
084: * FocusTraversalPolicy implementation
085: */
086: public Component getComponentAfter(Container focusCycleRoot,
087: Component aComponent) {
088: Integer idx = (Integer) m_comp_map.get(aComponent);
089: if (idx == null)
090: return getFirstComponent(focusCycleRoot);
091: else {
092: int ival = idx.intValue();
093: ival++;
094: if (ival >= m_focus_list.size())
095: ival = 0;
096: return (Component) m_focus_list.get(ival);
097: }
098: }
099:
100: /**
101: * FocusTraversalPolicy implementation
102: */
103: public Component getComponentBefore(Container focusCycleRoot,
104: Component aComponent) {
105: Integer idx = (Integer) m_comp_map.get(aComponent);
106: if (idx == null)
107: return getFirstComponent(focusCycleRoot);
108: else {
109: int ival = idx.intValue();
110: ival--;
111: if (ival < 0)
112: ival = 0;
113: return (Component) m_focus_list.get(ival);
114: }
115: }
116:
117: /**
118: * FocusTraversalPolicy implementation
119: */
120: public Component getDefaultComponent(Container focusCycleRoot) {
121: return getFirstComponent(focusCycleRoot);
122: }
123:
124: /**
125: * FocusTraversalPolicy implementation
126: */
127: public Component getFirstComponent(Container focusCycleRoot) {
128: if (m_focus_list.size() > 0)
129: return (Component) m_focus_list.get(0);
130: else
131: return null;
132: }
133:
134: /**
135: * FocusTraversalPolicy implementation
136: */
137: public Component getInitialComponent(Window window) {
138: return getFirstComponent(window);
139: }
140:
141: /**
142: * FocusTraversalPolicy implementation
143: */
144: public Component getLastComponent(Container focusCycleRoot) {
145: if (m_focus_list.size() > 0)
146: return (Component) m_focus_list
147: .get(m_focus_list.size() - 1);
148: else
149: return null;
150: }
151: }
|