|
@@ -1,92 +0,0 @@
|
|
|
-/*******************************************************************************
|
|
|
- * Copyright (c) 2011 Google, Inc.
|
|
|
- * All rights reserved. This program and the accompanying materials
|
|
|
- * are made available under the terms of the Eclipse Public License v1.0
|
|
|
- * which accompanies this distribution, and is available at
|
|
|
- * http://www.eclipse.org/legal/epl-v10.html
|
|
|
- *
|
|
|
- * Contributors:
|
|
|
- * Google, Inc. - initial API and implementation
|
|
|
- *******************************************************************************/
|
|
|
-package org.eclipse.wb.swing;
|
|
|
-
|
|
|
-import java.awt.Component;
|
|
|
-import java.awt.Container;
|
|
|
-import java.awt.FocusTraversalPolicy;
|
|
|
-
|
|
|
-/**
|
|
|
- * Cyclic focus traversal policy based on array of components.
|
|
|
- * <p>
|
|
|
- * This class may be freely distributed as part of any application or plugin.
|
|
|
- *
|
|
|
- * @author scheglov_ke
|
|
|
- */
|
|
|
-public class FocusTraversalOnArray extends FocusTraversalPolicy {
|
|
|
- private final Component m_Components[];
|
|
|
- ////////////////////////////////////////////////////////////////////////////
|
|
|
- //
|
|
|
- // Constructor
|
|
|
- //
|
|
|
- ////////////////////////////////////////////////////////////////////////////
|
|
|
- public FocusTraversalOnArray(Component components[]) {
|
|
|
- m_Components = components;
|
|
|
- }
|
|
|
- ////////////////////////////////////////////////////////////////////////////
|
|
|
- //
|
|
|
- // Utilities
|
|
|
- //
|
|
|
- ////////////////////////////////////////////////////////////////////////////
|
|
|
- private int indexCycle(int index, int delta) {
|
|
|
- int size = m_Components.length;
|
|
|
- int next = (index + delta + size) % size;
|
|
|
- return next;
|
|
|
- }
|
|
|
- private Component cycle(Component currentComponent, int delta) {
|
|
|
- int index = -1;
|
|
|
- loop : for (int i = 0; i < m_Components.length; i++) {
|
|
|
- Component component = m_Components[i];
|
|
|
- for (Component c = currentComponent; c != null; c = c.getParent()) {
|
|
|
- if (component == c) {
|
|
|
- index = i;
|
|
|
- break loop;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // try to find enabled component in "delta" direction
|
|
|
- int initialIndex = index;
|
|
|
- while (true) {
|
|
|
- int newIndex = indexCycle(index, delta);
|
|
|
- if (newIndex == initialIndex) {
|
|
|
- break;
|
|
|
- }
|
|
|
- index = newIndex;
|
|
|
- //
|
|
|
- Component component = m_Components[newIndex];
|
|
|
- if (component.isEnabled() && component.isVisible() && component.isFocusable()) {
|
|
|
- return component;
|
|
|
- }
|
|
|
- }
|
|
|
- // not found
|
|
|
- return currentComponent;
|
|
|
- }
|
|
|
- ////////////////////////////////////////////////////////////////////////////
|
|
|
- //
|
|
|
- // FocusTraversalPolicy
|
|
|
- //
|
|
|
- ////////////////////////////////////////////////////////////////////////////
|
|
|
- public Component getComponentAfter(Container container, Component component) {
|
|
|
- return cycle(component, 1);
|
|
|
- }
|
|
|
- public Component getComponentBefore(Container container, Component component) {
|
|
|
- return cycle(component, -1);
|
|
|
- }
|
|
|
- public Component getFirstComponent(Container container) {
|
|
|
- return m_Components[0];
|
|
|
- }
|
|
|
- public Component getLastComponent(Container container) {
|
|
|
- return m_Components[m_Components.length - 1];
|
|
|
- }
|
|
|
- public Component getDefaultComponent(Container container) {
|
|
|
- return getFirstComponent(container);
|
|
|
- }
|
|
|
-}
|