View Javadoc
1   // ******************************************************************************
2   //
3   // Title:       Force Field X.
4   // Description: Force Field X - Software for Molecular Biophysics.
5   // Copyright:   Copyright (c) Michael J. Schnieders 2001-2024.
6   //
7   // This file is part of Force Field X.
8   //
9   // Force Field X is free software; you can redistribute it and/or modify it
10  // under the terms of the GNU General Public License version 3 as published by
11  // the Free Software Foundation.
12  //
13  // Force Field X is distributed in the hope that it will be useful, but WITHOUT
14  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16  // details.
17  //
18  // You should have received a copy of the GNU General Public License along with
19  // Force Field X; if not, write to the Free Software Foundation, Inc., 59 Temple
20  // Place, Suite 330, Boston, MA 02111-1307 USA
21  //
22  // Linking this library statically or dynamically with other modules is making a
23  // combined work based on this library. Thus, the terms and conditions of the
24  // GNU General Public License cover the whole combination.
25  //
26  // As a special exception, the copyright holders of this library give you
27  // permission to link this library with independent modules to produce an
28  // executable, regardless of the license terms of these independent modules, and
29  // to copy and distribute the resulting executable under terms of your choice,
30  // provided that you also meet, for each linked independent module, the terms
31  // and conditions of the license of that module. An independent module is a
32  // module which is not derived from or based on this library. If you modify this
33  // library, you may extend this exception to your version of the library, but
34  // you are not obligated to do so. If you do not wish to do so, delete this
35  // exception statement from your version.
36  //
37  // ******************************************************************************
38  package ffx.ui.behaviors;
39  
40  import java.awt.AWTEvent;
41  import java.awt.event.MouseEvent;
42  import java.util.Iterator;
43  import org.jogamp.java3d.Transform3D;
44  import org.jogamp.java3d.TransformGroup;
45  import org.jogamp.java3d.WakeupCriterion;
46  import org.jogamp.java3d.WakeupOnAWTEvent;
47  
48  /**
49   * The MouseProperties class is simple extension of MouseBehavior.
50   *
51   * @author Michael J. Schnieders
52   */
53  public class MouseProperties extends MouseBehavior {
54  
55    double xAngle, yAngle;
56    double xFactor = .03;
57    double yFactor = .03;
58    // private MouseBehaviorCallback callback = null;
59  
60    /**
61     * Constructor for MouseProperties.
62     *
63     * @param flags a int.
64     * @param VPTG a {@link org.jogamp.java3d.TransformGroup} object.
65     */
66    public MouseProperties(int flags, TransformGroup VPTG) {
67      super(flags, VPTG);
68    }
69  
70    /**
71     * Return the x-axis movement multipler.
72     *
73     * @return a double.
74     */
75    public double getXFactor() {
76      return xFactor;
77    }
78  
79    /**
80     * Return the y-axis movement multipler.
81     *
82     * @return a double.
83     */
84    public double getYFactor() {
85      return yFactor;
86    }
87  
88    /** initialize */
89    public void initialize() {
90      super.initialize();
91      xAngle = 0;
92      yAngle = 0;
93      if ((flags & INVERT_INPUT) == INVERT_INPUT) {
94        invert = true;
95        xFactor *= -1;
96        yFactor *= -1;
97      }
98    }
99  
100   /** {@inheritDoc} */
101   public void processStimulus(Iterator<WakeupCriterion> criteria) {
102     while (criteria.hasNext()) {
103       WakeupCriterion wakeup = criteria.next();
104       if (wakeup instanceof WakeupOnAWTEvent) {
105         AWTEvent[] event = ((WakeupOnAWTEvent) wakeup).getAWTEvent();
106         for (AWTEvent awtEvent : event) {
107           processMouseEvent((MouseEvent) awtEvent);
108           if (((buttonPress) && ((flags & MANUAL_WAKEUP) == 0))
109               || ((wakeUp) && ((flags & MANUAL_WAKEUP) != 0))) {
110             int id = awtEvent.getID();
111             if ((id == MouseEvent.MOUSE_DRAGGED)) {
112               xLast = ((MouseEvent) awtEvent).getX();
113               yLast = ((MouseEvent) awtEvent).getY();
114             } else if (id == MouseEvent.MOUSE_PRESSED) {
115               xLast = ((MouseEvent) awtEvent).getX();
116               yLast = ((MouseEvent) awtEvent).getY();
117             }
118           }
119         }
120       }
121     }
122     wakeupOn(mouseCriterion);
123   }
124 
125   /**
126    * Set the x-axis amd y-axis movement multipler with factor.
127    *
128    * @param factor a double.
129    */
130   public void setFactor(double factor) {
131     xFactor = yFactor = factor;
132   }
133 
134   /**
135    * Set the x-axis amd y-axis movement multipler with xFactor and yFactor respectively.
136    *
137    * @param xFactor a double.
138    * @param yFactor a double.
139    */
140   public void setFactor(double xFactor, double yFactor) {
141     this.xFactor = xFactor;
142     this.yFactor = yFactor;
143   }
144 
145   /**
146    * The transformChanged method in the callback class will be called every time the transform is
147    * updated
148    *
149    * @param c a {@link ffx.ui.behaviors.MouseBehaviorCallback} object.
150    */
151   public void setupCallback(MouseBehaviorCallback c) {
152     // callback = c;
153   }
154 
155   /**
156    * transformChanged
157    *
158    * @param transform a {@link org.jogamp.java3d.Transform3D} object.
159    */
160   public void transformChanged(Transform3D transform) {}
161 }