Author: mes
Date: 2009-12-14 11:50:17 -0800 (Mon, 14 Dec 2009)
New Revision: 18750

Modified:
   corelibs/trunk/ding/src/ding/view/DNodeView.java
Log:
update DNodeView so that it properly sets and gets the node position, even when 
the view is hidden

Modified: corelibs/trunk/ding/src/ding/view/DNodeView.java
===================================================================
--- corelibs/trunk/ding/src/ding/view/DNodeView.java    2009-12-11 23:13:22 UTC 
(rev 18749)
+++ corelibs/trunk/ding/src/ding/view/DNodeView.java    2009-12-14 19:50:17 UTC 
(rev 18750)
@@ -106,10 +106,10 @@
         * Stores the position of a nodeView when it's hidden so that when the 
         * nodeView is restored we can restore the view into the same position.
         */
-       float m_hiddenXMin;
-       float m_hiddenYMin;
-       float m_hiddenXMax;
-       float m_hiddenYMax;
+       float m_hiddenXMin = Float.MIN_VALUE;
+       float m_hiddenYMin = Float.MIN_VALUE;
+       float m_hiddenXMax = Float.MAX_VALUE;
+       float m_hiddenYMax = Float.MAX_VALUE;
 
        ArrayList m_graphicShapes;
        ArrayList m_graphicPaints;
@@ -589,10 +589,14 @@
         */
        public void setXPosition(double xPos) {
                synchronized (m_view.m_lock) {
-                       if (!m_view.m_spacial.exists(m_inx, 
m_view.m_extentsBuff, 0))
-                               return;
+                       final double wDiv2;
+                       final boolean nodeVisible = 
m_view.m_spacial.exists(m_inx, m_view.m_extentsBuff, 0);
 
-                       final double wDiv2 = (((double) 
m_view.m_extentsBuff[2]) - m_view.m_extentsBuff[0]) / 2.0d;
+                       if ( nodeVisible ) 
+                               wDiv2 = (((double) m_view.m_extentsBuff[2]) - 
m_view.m_extentsBuff[0]) / 2.0d;
+                       else
+                               wDiv2 = (double)(m_hiddenXMax - 
m_hiddenXMin)/2.0d;
+
                        final float xMin = (float) (xPos - wDiv2);
                        final float xMax = (float) (xPos + wDiv2);
 
@@ -600,13 +604,24 @@
                                throw new IllegalStateException("width of node 
has degenerated to zero after "
                                                                + "rounding");
 
-                       m_view.m_spacial.delete(m_inx);
-                       m_view.m_spacial.insert(m_inx, xMin, 
m_view.m_extentsBuff[1], xMax,
-                                               m_view.m_extentsBuff[3]);
-                       m_view.m_contentChanged = true;
+                       // If the node is visible, set the extents.
+                       if ( nodeVisible ) {
+                               m_view.m_spacial.delete(m_inx);
+                               m_view.m_spacial.insert(m_inx, xMin, 
m_view.m_extentsBuff[1], xMax,
+                                                            
m_view.m_extentsBuff[3]);
+                               m_view.m_contentChanged = true;
+
+                       // If the node is NOT visible (hidden), then update the 
hidden extents.  Doing
+                       // this will mean that the node view will be properly 
scaled and rotated
+                       // relative to the other nodes.
+                       } else {
+                               m_hiddenXMax = xMax;
+                               m_hiddenXMin = xMin;
+                       }
                }
        }
 
+
        /**
         * DOCUMENT ME!
         *
@@ -624,10 +639,10 @@
         */
        public double getXPosition() {
                synchronized (m_view.m_lock) {
-                       if (!m_view.m_spacial.exists(m_inx, 
m_view.m_extentsBuff, 0))
-                               return Double.NaN;
-
-                       return (((double) m_view.m_extentsBuff[0]) + 
m_view.m_extentsBuff[2]) / 2.0d;
+                       if (m_view.m_spacial.exists(m_inx, 
m_view.m_extentsBuff, 0))
+                               return (((double) m_view.m_extentsBuff[0]) + 
m_view.m_extentsBuff[2]) / 2.0d;
+                       else
+                               return (double)(m_hiddenXMin + 
m_hiddenXMax)/2.0;
                }
        }
 
@@ -638,10 +653,14 @@
         */
        public void setYPosition(double yPos) {
                synchronized (m_view.m_lock) {
-                       if (!m_view.m_spacial.exists(m_inx, 
m_view.m_extentsBuff, 0))
-                               return;
+                       final double hDiv2; 
+                       final boolean nodeVisible = 
m_view.m_spacial.exists(m_inx, m_view.m_extentsBuff, 0);
 
-                       final double hDiv2 = (((double) 
m_view.m_extentsBuff[3]) - m_view.m_extentsBuff[1]) / 2.0d;
+                       if ( nodeVisible )
+                               hDiv2 = (((double) m_view.m_extentsBuff[3]) - 
m_view.m_extentsBuff[1]) / 2.0d;
+                       else
+                               hDiv2 = (double)(m_hiddenYMax - m_hiddenYMin) / 
2.0d;
+
                        final float yMin = (float) (yPos - hDiv2);
                        final float yMax = (float) (yPos + hDiv2);
 
@@ -649,10 +668,20 @@
                                throw new IllegalStateException("height of node 
has degenerated to zero after "
                                                                + "rounding");
 
-                       m_view.m_spacial.delete(m_inx);
-                       m_view.m_spacial.insert(m_inx, m_view.m_extentsBuff[0], 
yMin, m_view.m_extentsBuff[2],
-                                               yMax);
-                       m_view.m_contentChanged = true;
+                       // If the node is visible, set the extents.
+                       if ( nodeVisible ) {
+                               m_view.m_spacial.delete(m_inx);
+                               m_view.m_spacial.insert(m_inx, 
m_view.m_extentsBuff[0], yMin, 
+                                                       
m_view.m_extentsBuff[2], yMax);
+                               m_view.m_contentChanged = true;
+
+                       // If the node is NOT visible (hidden), then update the 
hidden extents.  Doing
+                       // this will mean that the node view will be properly 
scaled and rotated
+                       // relative to the other nodes.
+                       } else {
+                               m_hiddenYMax = yMax;
+                               m_hiddenYMin = yMin;
+                       }
                }
        }
 
@@ -673,10 +702,10 @@
         */
        public double getYPosition() {
                synchronized (m_view.m_lock) {
-                       if (!m_view.m_spacial.exists(m_inx, 
m_view.m_extentsBuff, 0))
-                               return Double.NaN;
-
-                       return (((double) m_view.m_extentsBuff[1]) + 
m_view.m_extentsBuff[3]) / 2.0d;
+                       if (m_view.m_spacial.exists(m_inx, 
m_view.m_extentsBuff, 0))
+                               return (((double) m_view.m_extentsBuff[1]) + 
m_view.m_extentsBuff[3]) / 2.0d;
+                       else
+                               return ((double)(m_hiddenYMin + 
m_hiddenYMax))/2.0d;
                }
        }
 

--

You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.


Reply via email to