View Javadoc

1   /* -------------------------------------------------------------------
2    * Java source file for the class SelectableRenderer
3    * 
4    * Copyright (c), 2003, Masahiro Takatsuka.
5    * All Rights Researved.
6    * 
7    * Original Author: Masahiro Takatsuka (masa@jbeans.net)
8    * $Author: takatsukam $
9    * 
10   * $Date: 2004/03/03 11:53:06 $
11   * 
12   * $Id: SelectableRenderer.java,v 1.3 2004/03/03 11:53:06 takatsukam Exp $
13   * 
14   * Reference:		Document no:
15   * ___				___
16   * 
17   * To Do:
18   * ___
19   * 
20  ------------------------------------------------------------------- */
21  
22  /* --------------------------- Package ---------------------------- */
23  package net.jbeans.j3d.renderer;
24  
25  /* ------------------ Import classes (packages) ------------------- *//package-summary/html">class="comment"> ------------------ Import classes (packages) ------------------- *//package-summary.html">class="comment">/* ------------------ Import classes (packages) ------------------- *//package-summary.html">class="comment"> ------------------ Import classes (packages) ------------------- */
26  import javax.swing.event.*;
27  import javax.media.j3d.*;
28  import com.sun.j3d.loaders.*;
29  
30  import net.jbeans.j3d.universe.*;
31  import net.jbeans.j3d.util.picking.behavior.*;
32  
33  import net.jbeans.util.debug.*;
34  
35  /*====================================================================
36                Implementation of class SelectableRenderer              
37  ====================================================================*/
38  /***
39   * generally describe SelectableRenderer in here
40   * 
41   * @version $Revision: 1.3 $
42   * @author Masahiro Takatsuka (masa@jbeans.net)
43   * @see BasicRenderer
44   * @see PickMouseListener
45   */
46  
47  public abstract class SelectableRenderer extends BasicRenderer implements PickMouseListener {
48  	private static final boolean DEBUG = Debug.getDebugFlag(SelectableRenderer.class);
49  
50  	private transient EventListenerList listenerList;
51  	
52  	/***
53  	* Constructs a new SelectableRenderer object.
54  	*/
55  	SelectableRenderer() {
56  		this("Selectable Renderer");
57  	}
58  	
59  	/***
60  	* Constructs a new Renderer object.
61  	*                                         Masahiro Takatsuka/1999-Jun-11
62  	*/
63  	SelectableRenderer(String title) {
64  		super(title);
65  
66  		// set up for mouse pick/select
67  		if (this.universe instanceof SelectableUniverse) {
68  			((SelectableUniverse) this.universe).addPickMouseListener(this);
69  		}
70  	}
71  
72  //  	protected Universe createUniverse(Canvas3D canvas3d) {
73  //  		return new SelectableUniverse(canvas3d);
74  //  	}
75  
76  	/***
77       * Invoked when an object is picked.
78  	 * <PRE>
79  	 * </PRE>
80  	 *
81  	 * @param node the picked node
82  	 * @return void
83  	 */
84  	public void picked(PickMouseEvent event) {
85  		if (DEBUG) {
86  			System.out.println("SelectableRenderer.picked():");
87  		}
88  		firePickedEvent(event);
89  	}
90  
91  	/***
92       * Invoked when an object is picked.
93  	 * <PRE>
94  	 * </PRE>
95  	 *
96  	 * @param node the picked node
97  	 * @return void
98  	 */
99  	public void selected(PickMouseEvent event) {
100 		if (DEBUG) {
101 			System.out.println("SelectableRenderer.selected():");
102 		}
103 		fireSelectedEvent(event);
104 	}
105 
106 	private void checkListeners() {
107 		if (this.listenerList == null) {
108 			this.listenerList = new EventListenerList();
109 		}
110 	}
111 	
112     /***
113      * Adds a PickMouseListener to the slider.
114      *
115      * @param l the PickMouseListener to add
116      */
117     public void addPickMouseListener(PickMouseListener l) {
118 		checkListeners();
119         this.listenerList.add(PickMouseListener.class, l);
120     }
121 	
122     /***
123      * Removes a PickMouseListener from the slider.
124      *
125      * @param l the PickMouseListener to remove
126 	 
127      */
128     public void removePickMouseListener(PickMouseListener l) {
129 		checkListeners();
130         this.listenerList.remove(PickMouseListener.class, l);
131     }
132 	
133     /***
134      * Send the Pick node to listeners.
135      */
136 	protected void firePickedEvent(PickMouseEvent event) {
137 		checkListeners();
138         Object[] listeners = this.listenerList.getListenerList();
139         for (int i = listeners.length - 2; i >= 0; i -= 2) {
140             if (listeners[i] == PickMouseListener.class) {
141                 ((PickMouseListener)listeners[i+1]).picked(event);
142             }
143         }
144     }   
145 
146     /***
147      * Send the Selection node to listeners.
148      */
149 	protected void fireSelectedEvent(PickMouseEvent event) {
150 		checkListeners();
151         Object[] listeners = this.listenerList.getListenerList();
152         for (int i = listeners.length - 2; i >= 0; i -= 2) {
153             if (listeners[i] == PickMouseListener.class) {
154                 ((PickMouseListener)listeners[i+1]).selected(event);
155             }
156         }
157     }   
158 }