001: /*
002: * Copyright (c) 2001 Silvere Martin-Michiellot All Rights Reserved.
003: *
004: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
005: * royalty free, license to use, modify and redistribute this
006: * software in source and binary code form,
007: * provided that i) this copyright notice and license appear on all copies of
008: * the software; and ii) Licensee does not utilize the software in a manner
009: * which is disparaging to Silvere Martin-Michiellot.
010: *
011: * This software is provided "AS IS," without a warranty of any kind. ALL
012: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
013: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
014: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
015: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
016: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
017: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
018: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
019: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
020: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
021: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
022: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
023: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
024: *
025: * This software is not designed or intended for use in on-line control of
026: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
027: * the design, construction, operation or maintenance of any nuclear
028: * facility. Licensee represents and warrants that it will not use or
029: * redistribute the Software for such purposes.
030: *
031: * @Author: Silvere Martin-Michiellot
032: *
033: */
034:
035: package com.db.viewpoint;
036:
037: // This code is repackaged after the software The Carnival by Douglas Pew
038: // Site http://www.access.digex.net/~dpew/carnival (link is dead)
039: // Email dpew@gmu.edu
040:
041: /*
042: *
043: * This program is free software; you can redistribute it and/or modify
044: * it under the terms of the GNU General Public License as published by
045: * the Free Software Foundation; either version 2 of the License, or
046: * (at your option) any later version.
047: *
048: * This program is distributed in the hope that it will be useful,
049: * but WITHOUT ANY WARRANTY; without even the implied warranty of
050: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
051: * GNU General Public License for more details.
052: *
053: * You should have received a copy of the GNU General Public License
054: * along with this program; if not, write to the Free Software
055: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
056: *
057: */
058:
059: import javax.media.j3d.*;
060: import javax.vecmath.*;
061: import java.util.*;
062:
063: /** A Behavior manager and scheduler for ViewControls. */
064: public class MouseActivator extends Behavior {
065:
066: static private Behavior[] active_behaviors;
067: static private boolean active_changed = false;
068:
069: /** The event that is fired when an element from the activeList is changed. */
070: static public final int ACTIVE_CHANGED = 0x11;
071:
072: /** Initializes the behavior.
073: * @see javax.media.j3d.Behavior
074: * The Behavior class.
075: */
076: public void initialize() {
077:
078: wakeupOn(new WakeupOnElapsedFrames(0));
079:
080: }
081:
082: /** Processes this behavior and schdules for the next frame.
083: * @see javax.media.j3d.Behavior
084: * The Behavior class.
085: */
086: public synchronized void processStimulus(Enumeration criteria) {
087:
088: WakeupCriterion wakeup;
089:
090: while (criteria.hasMoreElements()) {
091: wakeup = (WakeupCriterion) criteria.nextElement();
092: if (wakeup instanceof WakeupOnElapsedFrames) {
093: if (active_changed)
094: this .postId(ACTIVE_CHANGED);
095: active_changed = false;
096: }
097: }
098: wakeupOn(new WakeupOnElapsedFrames(0));
099:
100: }
101:
102: /** Checks whether the behavior used as parameter is currently active or not.
103: * @return A boolean that is true if the behavior is active.
104: * @param b The behavior to be checked.
105: */
106: public static synchronized boolean isActive(Behavior b) {
107:
108: int i;
109: if (active_behaviors != null)
110: for (i = 0; i < active_behaviors.length; i++)
111: if (b == active_behaviors[i])
112: return true;
113: return false;
114:
115: }
116:
117: /** Replaces the list of behaviors used by the MouseActivator to the array used as
118: * parameter
119: * @param active The array of behaviors to be used.
120: */
121: public static synchronized void setActiveList(Behavior[] active) {
122:
123: if (active != null) {
124: active_behaviors = new Behavior[active.length];
125: System.arraycopy(active, 0, active_behaviors, 0,
126: active.length);
127: } else
128: active_behaviors = null;
129: active_changed = true;
130:
131: }
132:
133: /** Builds up a MouseActivator to be used on the Group parameter
134: * @param group The group to which the MouseActivator is used.
135: */
136: public static void addToGroup(Group group) {
137:
138: BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,
139: 0.0, 0.0), 100000.0);
140: MouseActivator m = new MouseActivator();
141: m.setSchedulingBounds(bounds);
142: group.addChild(m);
143:
144: }
145:
146: }
|