Author: ruschein
Date: 2010-11-17 14:38:03 -0800 (Wed, 17 Nov 2010)
New Revision: 22882

Modified:
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/ArbitraryGraphicsCanvas.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DEdgeDetails.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DEdgeView.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DGraphView.java
   
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DNodeView.java
Log:
Even more ports from Cytoscape 2.8.

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/ArbitraryGraphicsCanvas.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/ArbitraryGraphicsCanvas.java
       2010-11-17 21:15:05 UTC (rev 22881)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/ArbitraryGraphicsCanvas.java
       2010-11-17 22:38:03 UTC (rev 22882)
@@ -1,15 +1,8 @@
 /*
   File: ArbitraryGraphicsCanvas.java
 
-  Copyright (c) 2006, The Cytoscape Consortium (www.cytoscape.org)
+  Copyright (c) 2006, 2010, The Cytoscape Consortium (www.cytoscape.org)
 
-  The Cytoscape Consortium is:
-  - Institute for Systems Biology
-  - University of California San Diego
-  - Memorial Sloan-Kettering Cancer Center
-  - Institut Pasteur
-  - Agilent Technologies
-
   This library is free software; you can redistribute it and/or modify it
   under the terms of the GNU Lesser General Public License as published
   by the Free Software Foundation; either version 2.1 of the License, or
@@ -34,18 +27,19 @@
   along with this library; if not, write to the Free Software Foundation,
   Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 */
-
-// package
 package org.cytoscape.ding.impl;
 
 
-// import
-
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
 import org.cytoscape.ding.NodeView;
 
-import java.awt.*;
+import java.awt.AlphaComposite;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Composite;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
 import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
 import java.util.HashMap;
@@ -59,10 +53,6 @@
  */
 public class ArbitraryGraphicsCanvas extends DingCanvas implements 
ViewportChangeListener {
        private final static long serialVersionUID = 1202416510975364L;
-       /**
-        * Testing boolean to quickly turn on/off anchor nodes.
-        */
-       private static final boolean USE_REPOSITION_CODE = false;
 
        /**
         * Our reference to the GraphPerspective our view belongs to
@@ -81,7 +71,7 @@
 
        /*
         * Map of component(s) to hidden node(s)
-        */
+        */        
        private Map<Component, CyNode> m_componentToNodeMap;
 
        /**
@@ -110,62 +100,32 @@
        /**
         * Our implementation of add
         */
+        @Override
        public Component add(Component component) {
-               if (USE_REPOSITION_CODE) {
-                       // create an "anchor node"
-                       CyNode node = m_cyNetwork.addNode();
-                       node.getCyRow().set("name",component.toString());
-                       //m_cyNetwork.restoreNode(node);
-
-                       // set its node view coordinates
-                       NodeView nodeView = m_dGraphView.getNodeView(node);
-                       double[] nodeCanvasCoordinates = new double[2];
-                       nodeCanvasCoordinates[0] = component.getX();
-                       nodeCanvasCoordinates[1] = component.getY();
-                       
m_dGraphView.xformComponentToNodeCoords(nodeCanvasCoordinates);
-                       nodeView.setXPosition(nodeCanvasCoordinates[0]);
-                       nodeView.setYPosition(nodeCanvasCoordinates[1]);
-
-                       // add to map
-                       m_componentToNodeMap.put(component, node);
-
-                       // hide the node - make it very small -
-                       // hiding it via hideGraphObject takes it out of the 
ding repositioning loop
-                       //m_dGraphView.hideGraphObject(nodeView, true, true);
-                       nodeView.setWidth(1.0);
-                       nodeView.setHeight(1.0);
-               }
-
                // do our stuff
                return super.add(component);
        }
-
+        
        /**
         * Our implementation of ViewportChangeListener.
         */
        public void viewportChanged(int viewportWidth, int viewportHeight, 
double newXCenter,
                                    double newYCenter, double newScaleFactor) {
-               if (USE_REPOSITION_CODE) {
-                       if (setBoundsChildren())
-                               repaint();
-               }
        }
 
+       public void modifyComponentLocation(int x,int y, int componentNum){
+       }
+
        /**
         * Our implementation of JComponent setBounds.
         */
        public void setBounds(int x, int y, int width, int height) {
                super.setBounds(x, y, width, height);
-
+                
                // our bounds have changed, create a new image with new size
-               if ((width > 0) && (height > 0)) {
+               if ((width > 1) && (height > 1)) {
                        // create the buffered image
                        m_img = new BufferedImage(width, height, 
BufferedImage.TYPE_INT_ARGB);
-
-                       // update childrens bounds
-                       if (USE_REPOSITION_CODE) {
-                               setBoundsChildren();
-                       }
                }
        }
 
@@ -179,71 +139,54 @@
                // only paint if we have an image to paint on
                if (m_img != null) {
                        // get image graphics
-                       Graphics2D image2D = ((BufferedImage) 
m_img).createGraphics();
+                       final Graphics2D image2D = ((BufferedImage) 
m_img).createGraphics();
 
                        // first clear the image
                        clearImage(image2D);
 
                        // now paint children
-                       if (m_isVisible)
-                               paintChildren(image2D);
-
+                       if (m_isVisible){
+                               int num=this.getComponentCount();
+                               for(int i=0;i<num;i++){
+                                       this.getComponent(i).paint(image2D);
+                               }
+                       }
+                       image2D.dispose();
                        // render image
                        graphics.drawImage(m_img, 0, 0, null);
                }
+                
        }
 
+
+       @Override
+       public Component getComponentAt(int x, int y) {
+
+               int n=getComponentCount();
+
+               for(int i=0;i<n;i++){
+                               Component 
c=this.getComponent(i).getComponentAt(x, y);
+
+                               if(c!=null)
+                                               return c;
+               }
+               return null;
+       }
+
+
        /**
         * Invoke this method to print the component.
         *
         * @param graphics Graphics
         */
        public void print(Graphics graphics) {
-               //if we have an image to print, lets print it.
-               if (m_img != null) {
-                       graphics.drawImage(m_img, 0, 0, null);
+               int num=this.getComponentCount();
+               for(int i=0;i<num;i++){
+                       this.getComponent(i).print(graphics);
                }
        }
 
        /**
-        * Called to update the bounds of our child components.
-        *
-        * @return boolean
-        */
-       private boolean setBoundsChildren() {
-               // get list of child components
-               Component[] components = getComponents();
-
-               // no components, outta here
-               if (components.length == 0)
-                       return false;
-
-               // interate through the components
-               for (Component c : components) {
-                       // get node
-                       CyNode node = m_componentToNodeMap.get(c);
-
-                       // get node view
-                       NodeView nodeView = m_dGraphView.getNodeView(node);
-
-                       // new image coordinates
-                       double[] currentNodeCoordinates = new double[2];
-                       currentNodeCoordinates[0] = nodeView.getXPosition();
-                       currentNodeCoordinates[1] = nodeView.getYPosition();
-
-                       AffineTransform transform = 
m_innerCanvas.getAffineTransform();
-                       transform.transform(currentNodeCoordinates, 0, 
currentNodeCoordinates, 0, 1);
-
-                       // set bounds
-                       c.setBounds((int) currentNodeCoordinates[0], (int) 
currentNodeCoordinates[1],
-                                   c.getWidth(), c.getHeight());
-               }
-
-               // outta here
-               return true;
-       }
-
-       /**
         * Utility function to clean the background of the image,
         * using m_backgroundColor
         *

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DEdgeDetails.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DEdgeDetails.java
  2010-11-17 21:15:05 UTC (rev 22881)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DEdgeDetails.java
  2010-11-17 22:38:03 UTC (rev 22882)
@@ -28,35 +28,43 @@
 package org.cytoscape.ding.impl;
 
 
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Paint;
+import java.awt.Stroke;
+
+import java.util.HashMap;
+import java.util.List;
+
 import org.cytoscape.graph.render.immed.EdgeAnchors;
+import org.cytoscape.graph.render.immed.GraphGraphics;
+
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyEdge;
+
 import org.cytoscape.util.intr.IntEnumerator;
 import org.cytoscape.util.intr.IntIterator;
 import org.cytoscape.util.intr.IntObjHash;
 import org.cytoscape.util.intr.MinIntHeap;
-import org.cytoscape.model.CyNetwork;
-import org.cytoscape.model.CyNode;
-import org.cytoscape.model.CyEdge;
 
-import java.awt.*;
-import java.util.HashMap;
 
-
 class DEdgeDetails extends IntermediateEdgeDetails {
        final DGraphView m_view;
        final IntObjHash m_colorsLowDetail = new IntObjHash();
        final Object m_deletedEntry = new Object();
-       final HashMap<Integer,Object> m_segmentThicknesses = new 
HashMap<Integer,Object>();
+       final HashMap m_segmentThicknesses = new HashMap();
        final HashMap m_segmentStrokes = new HashMap();
-       final HashMap<Integer,Object> m_sourceArrows = new 
HashMap<Integer,Object>();
-       final HashMap<Integer,Object> m_sourceArrowPaints = new 
HashMap<Integer,Object>();
-       final HashMap<Integer,Object> m_targetArrows = new 
HashMap<Integer,Object>();
-       final HashMap<Integer,Object> m_targetArrowPaints = new 
HashMap<Integer,Object>();
-       final HashMap<Integer,Object> m_segmentPaints = new 
HashMap<Integer,Object>();
-       final HashMap<Integer,Object> m_segmentDashLengths = new 
HashMap<Integer,Object>();
-       final HashMap<Integer,Object> m_labelCounts = new 
HashMap<Integer,Object>();
-       final HashMap<Long,String> m_labelTexts = new HashMap<Long,String>();
-       final HashMap<Long,Font> m_labelFonts = new HashMap<Long,Font>();
-       final HashMap<Long,Paint> m_labelPaints = new HashMap<Long,Paint>();
+       final HashMap m_sourceArrows = new HashMap();
+       final HashMap m_sourceArrowPaints = new HashMap();
+       final HashMap m_targetArrows = new HashMap();
+       final HashMap m_targetArrowPaints = new HashMap();
+       final HashMap m_segmentPaints = new HashMap();
+       //final HashMap m_segmentDashLengths = new HashMap();
+       final HashMap m_labelCounts = new HashMap();
+       final HashMap m_labelTexts = new HashMap();
+       final HashMap m_labelFonts = new HashMap();
+       final HashMap m_labelPaints = new HashMap();
        final HashMap m_labelWidths = new HashMap();
 
        DEdgeDetails(DGraphView view) {
@@ -69,7 +77,7 @@
                if ((o != null) && (o != m_deletedEntry))
                        m_colorsLowDetail.put(edge, m_deletedEntry);
 
-               final Integer key = Integer.valueOf(edge);
+               final Integer key = new Integer(edge);
                m_segmentThicknesses.remove(key);
                m_segmentStrokes.remove(key);
                m_sourceArrows.remove(key);
@@ -77,7 +85,7 @@
                m_targetArrows.remove(key);
                m_targetArrowPaints.remove(key);
                m_segmentPaints.remove(key);
-               m_segmentDashLengths.remove(key);
+//             m_segmentDashLengths.remove(key);
                m_labelCounts.remove(key);
                m_labelTexts.remove(key);
                m_labelFonts.remove(key);
@@ -149,7 +157,7 @@
         * @return DOCUMENT ME!
         */
        public Paint sourceArrowPaint(int edge) {
-               final Object o = m_sourceArrowPaints.get(Integer.valueOf(edge));
+               final Object o = m_sourceArrowPaints.get(new Integer(edge));
 
                if (o == null)
                        return super.sourceArrowPaint(edge);
@@ -162,9 +170,9 @@
         */
        void overrideSourceArrowPaint(int edge, Paint paint) {
                if ((paint == null) || 
paint.equals(super.sourceArrowPaint(edge)))
-                       m_sourceArrowPaints.remove(Integer.valueOf(edge));
+                       m_sourceArrowPaints.remove(new Integer(edge));
                else
-                       m_sourceArrowPaints.put(Integer.valueOf(edge), paint);
+                       m_sourceArrowPaints.put(new Integer(edge), paint);
        }
 
        /**
@@ -187,11 +195,11 @@
         * A non-negative arrowType has the special meaning to remove overridden
         * arrow.
         */
-       void overrideTargetArrow(int edge, int arrowType) {
+       void overrideTargetArrow(int edge, byte arrowType) {
                if ((arrowType >= 0) || (arrowType == super.targetArrow(edge)))
-                       m_targetArrows.remove(Integer.valueOf(edge));
+                       m_targetArrows.remove(new Integer(edge));
                else
-                       m_targetArrows.put(Integer.valueOf(edge), new 
Integer(arrowType));
+                       m_targetArrows.put(new Integer(edge), new 
Byte(arrowType));
        }
 
        /**
@@ -202,7 +210,7 @@
         * @return DOCUMENT ME!
         */
        public Paint targetArrowPaint(int edge) {
-               final Object o = m_targetArrowPaints.get(Integer.valueOf(edge));
+               final Object o = m_targetArrowPaints.get(new Integer(edge));
 
                if (o == null)
                        return super.targetArrowPaint(edge);
@@ -215,9 +223,9 @@
         */
        void overrideTargetArrowPaint(int edge, Paint paint) {
                if ((paint == null) || 
paint.equals(super.targetArrowPaint(edge)))
-                       m_targetArrowPaints.remove(Integer.valueOf(edge));
+                       m_targetArrowPaints.remove(new Integer(edge));
                else
-                       m_targetArrowPaints.put(Integer.valueOf(edge), paint);
+                       m_targetArrowPaints.put(new Integer(edge), paint);
        }
 
        private final MinIntHeap m_heap = new MinIntHeap();
@@ -231,16 +239,18 @@
         * @return DOCUMENT ME!
         */
        public EdgeAnchors anchors(int edge) {
-               final EdgeAnchors returnThis = (EdgeAnchors) 
(m_view.getEdgeView(edge));
+               final EdgeAnchors returnThis = (EdgeAnchors) 
(m_view.getEdgeView(~edge));
 
-               if (returnThis.numAnchors() > 0)
+               if (returnThis.numAnchors() > 0) 
                        return returnThis;
 
                final CyNetwork graph = m_view.networkModel;
                final CyEdge edgeObj = graph.getEdge(edge);
+               final int srcNode = edgeObj.getSource().getIndex();
+               final int trgNode = edgeObj.getTarget().getIndex();
 
-               if (edgeObj.getSource() == edgeObj.getTarget()) { // Self-edge.
-
+               // Calculate anchors necessary for self edges.
+               if (srcNode == trgNode) { // Self-edge.
                        final CyNode nodeObj = edgeObj.getSource();
                        final int node = nodeObj.getIndex(); 
                        m_view.m_spacial.exists(node, m_extentsBuff, 0);
@@ -251,7 +261,7 @@
                        final double y = (((double) m_extentsBuff[1]) + 
m_extentsBuff[3]) / 2.0d;
                        final double nodeSize = Math.max(w, h);
                        int i = 0;
-                       java.util.List<CyEdge> selfEdges = 
graph.getConnectingEdgeList(nodeObj,nodeObj,CyEdge.Type.ANY);
+                       List<CyEdge> selfEdges = 
graph.getConnectingEdgeList(nodeObj, nodeObj, CyEdge.Type.ANY);
 
                        for ( CyEdge e2obj : selfEdges ) {
                                final int e2 = e2obj.getIndex();
@@ -264,7 +274,6 @@
                        }
 
                        final int inx = i;
-
                        return new EdgeAnchors() {
                                        public int numAnchors() {
                                                return 2;
@@ -282,59 +291,98 @@
                                };
                }
 
+               // Now add "invisible" anchors to edges for the case where 
multiple edges
+               // exist between two nodes. This has no effect if user 
specified anchors
+               // exist on the edge.
                while (true) {
-                       java.util.List<CyEdge> selfEdges = 
graph.getConnectingEdgeList(edgeObj.getSource(),edgeObj.getTarget(),CyEdge.Type.ANY);
+                       // By consistently ordering the source and target 
nodes, dx and dy will always
+                       // be calculated according to the same orientation. 
This allows the offset
+                       // calculation to toggle the edges from side to side 
without any overlap.
+                       final int tmpSrc = Math.min( srcNode, trgNode ); 
+                       final int tmpTrg = Math.max( srcNode, trgNode ); 
 
+                       // Sort the connecting edges.
+                       List<CyEdge> selfEdges = 
graph.getConnectingEdgeList(edgeObj.getSource(), edgeObj.getTarget(), 
CyEdge.Type.ANY);
+
                        m_heap.empty();
 
                        for ( CyEdge e : selfEdges ) 
                                m_heap.toss(e.getIndex());
 
                        final IntEnumerator otherEdges = 
m_heap.orderedElements(false);
+
                        int otherEdge = otherEdges.nextInt();
 
+                       // If the first other edge is the same as this edge, 
+                       // (i.e. we're at the end of the list?).
                        if (otherEdge == edge)
                                break;
 
-                       int i = (((EdgeAnchors) 
m_view.getEdgeView(otherEdge)).numAnchors() == 0) ? 1 : 0;
+                       // So we don't count the other edge twice?
+                       int i = (((EdgeAnchors) 
m_view.getEdgeView(~otherEdge)).numAnchors() == 0) ? 1 : 0;
 
+                       // Count the number of other edges.
                        while (true) {
                                if (edge == (otherEdge = otherEdges.nextInt()))
                                        break;
 
-                               if (((EdgeAnchors) 
m_view.getEdgeView(otherEdge)).numAnchors() == 0)
+                               if (((EdgeAnchors) 
m_view.getEdgeView(~otherEdge)).numAnchors() == 0)
                                        i++;
                        }
 
                        final int inx = i;
-                       m_view.m_spacial.exists(edgeObj.getSource().getIndex(), 
m_extentsBuff, 0);
 
+                       // Get source node size and position.
+                       m_view.m_spacial.exists(tmpSrc, m_extentsBuff, 0);
                        final double srcW = ((double) m_extentsBuff[2]) - 
m_extentsBuff[0];
                        final double srcH = ((double) m_extentsBuff[3]) - 
m_extentsBuff[1];
                        final double srcX = (((double) m_extentsBuff[0]) + 
m_extentsBuff[2]) / 2.0d;
                        final double srcY = (((double) m_extentsBuff[1]) + 
m_extentsBuff[3]) / 2.0d;
-                       m_view.m_spacial.exists(edgeObj.getTarget().getIndex(), 
m_extentsBuff, 0);
 
+                       // Get target node size and position.
+                       m_view.m_spacial.exists(tmpTrg, m_extentsBuff, 0);
                        final double trgW = ((double) m_extentsBuff[2]) - 
m_extentsBuff[0];
                        final double trgH = ((double) m_extentsBuff[3]) - 
m_extentsBuff[1];
                        final double trgX = (((double) m_extentsBuff[0]) + 
m_extentsBuff[2]) / 2.0d;
                        final double trgY = (((double) m_extentsBuff[1]) + 
m_extentsBuff[3]) / 2.0d;
+
+                       // Used for determining the space between the edges.
                        final double nodeSize = 
Math.max(Math.max(Math.max(srcW, srcH), trgW), trgH);
+
+                       // Midpoint between nodes.
                        final double midX = (srcX + trgX) / 2;
                        final double midY = (srcY + trgY) / 2;
+
+                       // Distance in X and Y dimensions.
+                       // Note that dx and dy may be negative.  This is OK, 
because this will ensure
+                       // that the handle is always correctly placed offset 
from the midpoint of, 
+                       // and perpendicular to, the original edge.
                        final double dx = trgX - srcX;
                        final double dy = trgY - srcY;
+
+                       // Distance or length between nodes.
                        final double len = Math.sqrt((dx * dx) + (dy * dy));
 
-                       if (((float) len) == 0.0f)
+                       if (((float) len) == 0.0f) 
                                break;
 
-                       final double normX = Math.abs(dx / len);
-                       final double normY = Math.abs(dy / len);
-                       final double factor = ((inx + 1) / 2) * (((inx % 2) == 
0) ? 1 : (-1)) * nodeSize;
-                       final double anchorX = midX + (factor * normY);
-                       final double anchorY = midY - (factor * normX);
+                       // This determines which side of the first edge and how 
far from the first
+                       // edge the other edge should be placed.
+                       // -  Divide by 2 puts consecutive edges at the same 
distance from the center
+                       //    because of integer math.
+                       // -  Modulo puts consecutive edges on opposite sides.
+                       // -  Node size is for consistent scaling.
+                       final double offset = ((inx + 1) / 2) * (inx % 2 == 0 ? 
1 : -1) * nodeSize;
 
+                       // Depending on orientation sine or cosine. This 
adjusts the length
+                       // of the offset according the appropriate X and Y 
dimensions.
+                       final double normX = dx / len;
+                       final double normY = dy / len;
+
+                       // Calculate the anchor points.
+                       final double anchorX = midX + (offset * normY);
+                       final double anchorY = midY - (offset * normX);
+
                        return new EdgeAnchors() {
                                        public int numAnchors() {
                                                return 1;
@@ -359,8 +407,8 @@
         * @return DOCUMENT ME!
         */
        public float anchorSize(int edge, int anchorInx) {
-               if (m_view.getEdgeView(edge).isSelected()
-                   && (((DEdgeView) m_view.getEdgeView(edge)).numAnchors() > 
0))
+               if (m_view.getEdgeView(~edge).isSelected()
+                   && (((DEdgeView) m_view.getEdgeView(~edge)).numAnchors() > 
0))
                        return m_view.getAnchorSize();
                else
 
@@ -376,7 +424,7 @@
         * @return DOCUMENT ME!
         */
        public Paint anchorPaint(int edge, int anchorInx) {
-               if (((DEdgeView) (m_view.getEdgeView(edge))).m_lineType == 
DEdgeView.STRAIGHT_LINES)
+               if (((DEdgeView) (m_view.getEdgeView(~edge))).m_lineType == 
DEdgeView.STRAIGHT_LINES)
                        anchorInx = anchorInx / 2;
 
                if (m_view.m_selectedAnchors.count((edge << 6) | anchorInx) > 0)
@@ -394,7 +442,7 @@
         * @return DOCUMENT ME!
         */
        public float segmentThickness(int edge) {
-               final Object o = 
m_segmentThicknesses.get(Integer.valueOf(edge));
+               final Object o = m_segmentThicknesses.get(new Integer(edge));
 
                if (o == null)
                        return super.segmentThickness(edge);
@@ -408,11 +456,33 @@
         */
        void overrideSegmentThickness(int edge, float thickness) {
                if ((thickness < 0.0f) || (thickness == 
super.segmentThickness(edge)))
-                       m_segmentThicknesses.remove(Integer.valueOf(edge));
+                       m_segmentThicknesses.remove(new Integer(edge));
                else
-                       m_segmentThicknesses.put(Integer.valueOf(edge), new 
Float(thickness));
+                       m_segmentThicknesses.put(new Integer(edge), new 
Float(thickness));
        }
 
+       /**
+        * DOCUMENT ME!
+        *
+        * @param edge DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+       public Paint segmentPaint(int edge) {
+               final Object o = m_segmentPaints.get(new Integer(edge));
+
+               if (o == null)
+                       return super.segmentPaint(edge);
+
+               return (Paint) o;
+       }
+        */
+       /**
+        * DOCUMENT ME!
+        *
+        * @param edge DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+        */
        public Stroke segmentStroke(int edge) {
                final Object o = m_segmentStrokes.get(new Integer(edge));
 
@@ -424,7 +494,16 @@
 
        /*
         * A null paint has the special meaning to remove overridden paint.
+       void overrideSegmentPaint(int edge, Paint paint) {
+               if ((paint == null) || paint.equals(super.segmentPaint(edge)))
+                       m_segmentPaints.remove(new Integer(edge));
+               else
+                       m_segmentPaints.put(new Integer(edge), paint);
+       }
         */
+       /*
+        * A null paint has the special meaning to remove overridden paint.
+        */
        void overrideSegmentStroke(int edge, Stroke stroke) {
                if ((stroke == null) || 
stroke.equals(super.segmentStroke(edge)))
                        m_segmentStrokes.remove(new Integer(edge));
@@ -432,14 +511,59 @@
                        m_segmentStrokes.put(new Integer(edge), stroke);
        }
 
+       /**
+        * DOCUMENT ME!
+        *
+        * @param edge DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+       public float segmentDashLength(int edge) {
+               final Object o = m_segmentDashLengths.get(new Integer(edge));
+
+               if (o == null)
+                       return super.segmentDashLength(edge);
+
+               return ((Float) o).floatValue();
+       }
+        */
+
+       /**
+        * DOCUMENT ME!
+        *
+        * @param edge DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+        */
+       public Paint segmentPaint(int edge) {
+               final Object o = m_segmentPaints.get(new Integer(edge));
+
+               if (o == null)
+                       return super.segmentPaint(edge);
+
+               return (Paint) o;
+       }
+
        /*
-        * A null paint has the special meaning to remove overridden paint.
+        * A negative length value has the special meaning to remove overridden
+        * length.
+       void overrideSegmentDashLength(int edge, float length) {
+               if ((length < 0.0f) || (length == 
super.segmentDashLength(edge)))
+                       m_segmentDashLengths.remove(new Integer(edge));
+               else
+                       m_segmentDashLengths.put(new Integer(edge), new 
Float(length));
+       }
         */
+
+
+       /*
+        * A negative length value has the special meaning to remove overridden
+        * length.
+        */
        void overrideSegmentPaint(int edge, Paint paint) {
-               if ((paint == null) || paint.equals(super.segmentPaint(edge)))
-                       m_segmentPaints.remove(Integer.valueOf(edge));
+               if ((paint == null) || (paint == super.segmentPaint(edge)))
+                       m_segmentPaints.remove(new Integer(edge));
                else
-                       m_segmentPaints.put(Integer.valueOf(edge), paint);
+                       m_segmentPaints.put(new Integer(edge), paint);
        }
 
        /**
@@ -450,7 +574,7 @@
         * @return DOCUMENT ME!
         */
        public int labelCount(int edge) {
-               final Object o = m_labelCounts.get(Integer.valueOf(edge));
+               final Object o = m_labelCounts.get(new Integer(edge));
 
                if (o == null)
                        return super.labelCount(edge);
@@ -463,9 +587,9 @@
         */
        void overrideLabelCount(int edge, int labelCount) {
                if ((labelCount < 0) || (labelCount == super.labelCount(edge)))
-                       m_labelCounts.remove(Integer.valueOf(edge));
+                       m_labelCounts.remove(new Integer(edge));
                else
-                       m_labelCounts.put(Integer.valueOf(edge), 
Integer.valueOf(labelCount));
+                       m_labelCounts.put(new Integer(edge), new 
Integer(labelCount));
        }
 
        /**
@@ -478,12 +602,12 @@
         */
        public String labelText(int edge, int labelInx) {
                final long key = (((long) edge) << 32) | ((long) labelInx);
-               final String o = m_labelTexts.get(Long.valueOf(key));
+               final Object o = m_labelTexts.get(new Long(key));
 
                if (o == null)
                        return super.labelText(edge, labelInx);
 
-               return o;
+               return (String) o;
        }
 
        /*
@@ -493,9 +617,9 @@
                final long key = (((long) edge) << 32) | ((long) labelInx);
 
                if ((text == null) || text.equals(super.labelText(edge, 
labelInx)))
-                       m_labelTexts.remove(Long.valueOf(key));
+                       m_labelTexts.remove(new Long(key));
                else
-                       m_labelTexts.put(Long.valueOf(key), text);
+                       m_labelTexts.put(new Long(key), text);
        }
 
        /**
@@ -508,12 +632,12 @@
         */
        public Font labelFont(int edge, int labelInx) {
                final long key = (((long) edge) << 32) | ((long) labelInx);
-               final Font o = m_labelFonts.get(Long.valueOf(key));
+               final Object o = m_labelFonts.get(new Long(key));
 
                if (o == null)
                        return super.labelFont(edge, labelInx);
 
-               return o;
+               return (Font) o;
        }
 
        /*
@@ -523,9 +647,9 @@
                final long key = (((long) edge) << 32) | ((long) labelInx);
 
                if ((font == null) || font.equals(super.labelFont(edge, 
labelInx)))
-                       m_labelFonts.remove(Long.valueOf(key));
+                       m_labelFonts.remove(new Long(key));
                else
-                       m_labelFonts.put(Long.valueOf(key), font);
+                       m_labelFonts.put(new Long(key), font);
        }
 
        /**
@@ -538,12 +662,12 @@
         */
        public Paint labelPaint(int edge, int labelInx) {
                final long key = (((long) edge) << 32) | ((long) labelInx);
-               final Paint o = m_labelPaints.get(Long.valueOf(key));
+               final Object o = m_labelPaints.get(new Long(key));
 
                if (o == null)
                        return super.labelPaint(edge, labelInx);
 
-               return o;
+               return (Paint) o;
        }
 
        /*
@@ -553,25 +677,51 @@
                final long key = (((long) edge) << 32) | ((long) labelInx);
 
                if ((paint == null) || paint.equals(super.labelPaint(edge, 
labelInx)))
-                       m_labelPaints.remove(Long.valueOf(key));
+                       m_labelPaints.remove(new Long(key));
                else
-                       m_labelPaints.put(Long.valueOf(key), paint);
+                       m_labelPaints.put(new Long(key), paint);
        }
 
        /**
         * The arrow size will scale with the edge width.
         */
        public float sourceArrowSize(int edge) {
-               return (segmentThickness(edge) + DEdgeView.DEFAULT_ARROW_SIZE);
+               // For the half arrows, we need to scale multiplicatively
+               // so that the arrow matches the line.
+               int arrowType = sourceArrow(edge);
+               if ( arrowType == GraphGraphics.ARROW_HALF_TOP ||
+                    arrowType == GraphGraphics.ARROW_HALF_BOTTOM )
+                        return (segmentThickness(edge) * 
DEdgeView.DEFAULT_ARROW_SIZE);
+
+               // For all other arrows we can scale additively.  This produces
+               // less egregiously big arrows.
+               else
+                       return (segmentThickness(edge) + 
DEdgeView.DEFAULT_ARROW_SIZE);
        }
 
        /**
         * The arrow size will scale with the edge width.
         */
        public float targetArrowSize(int edge) {
-               return (segmentThickness(edge) + DEdgeView.DEFAULT_ARROW_SIZE);
+               // For the half arrows, we need to scale multiplicatively
+               // so that the arrow matches the line.
+               int arrowType = targetArrow(edge);
+               if ( arrowType == GraphGraphics.ARROW_HALF_TOP ||
+                    arrowType == GraphGraphics.ARROW_HALF_BOTTOM )
+                        return (segmentThickness(edge) * 
DEdgeView.DEFAULT_ARROW_SIZE);
+               // For all other arrows we can scale additively.  This produces
+               // less egregiously big arrows.
+               else
+                       return (segmentThickness(edge) + 
DEdgeView.DEFAULT_ARROW_SIZE);
        }
 
+       /**
+        * DOCUMENT ME!
+        *
+        * @param edge DOCUMENT ME!
+        *
+        * @return DOCUMENT ME!
+        */
        public double labelWidth(int edge) {
                final Object o = m_labelWidths.get(new Integer(edge));
 
@@ -590,4 +740,5 @@
                else
                        m_labelWidths.put(new Integer(edge), new Double(width));
        }
+
 }

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DEdgeView.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DEdgeView.java
     2010-11-17 21:15:05 UTC (rev 22881)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DEdgeView.java
     2010-11-17 22:38:03 UTC (rev 22882)
@@ -662,106 +662,56 @@
         */
        public void setTargetEdgeEnd(int type) {
                synchronized (m_view.m_lock) {
-                       // if (type == m_targetEdgeEnd) { return; }
+                       //       if (type == m_targetEdgeEnd) { return; }
                        switch (type) {
-                       case NO_END:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_NONE);
+                               case NO_END:
+                                       
m_view.m_edgeDetails.overrideTargetArrow(m_inx, GraphGraphics.ARROW_NONE);
 
-                               break;
+                                       break;
 
-                       case WHITE_DELTA:
-                       case WHITE_ARROW:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_DELTA);
-                               // setTargetEdgeEndPaint(Color.white);
+                               case WHITE_DELTA:
+                               case BLACK_DELTA:
+                               case EDGE_COLOR_DELTA:
+                                       
m_view.m_edgeDetails.overrideTargetArrow(m_inx, GraphGraphics.ARROW_DELTA);
 
-                               break;
+                                       break;
 
-                       case BLACK_DELTA:
-                       case BLACK_ARROW:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_DELTA);
-                               // setTargetEdgeEndPaint(Color.black);
+                               case WHITE_ARROW:
+                               case BLACK_ARROW:
+                               case EDGE_COLOR_ARROW:
+                                       
m_view.m_edgeDetails.overrideTargetArrow(m_inx, GraphGraphics.ARROW_ARROWHEAD);
 
-                               break;
+                                       break;
 
-                       case EDGE_COLOR_DELTA:
-                       case EDGE_COLOR_ARROW:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_DELTA);
-                               // setTargetEdgeEndPaint(getUnselectedPaint());
+                               case WHITE_DIAMOND:
+                               case BLACK_DIAMOND:
+                               case EDGE_COLOR_DIAMOND:
+                                       
m_view.m_edgeDetails.overrideTargetArrow(m_inx, GraphGraphics.ARROW_DIAMOND);
 
-                               break;
+                                       break;
 
-                       case WHITE_DIAMOND:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_DIAMOND);
-                               // setTargetEdgeEndPaint(Color.white);
+                               case WHITE_CIRCLE:
+                               case BLACK_CIRCLE:
+                               case EDGE_COLOR_CIRCLE:
+                                       
m_view.m_edgeDetails.overrideTargetArrow(m_inx, GraphGraphics.ARROW_DISC);
 
-                               break;
+                                       break;
 
-                       case BLACK_DIAMOND:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_DIAMOND);
-                               // setTargetEdgeEndPaint(Color.black);
+                               case WHITE_T:
+                               case BLACK_T:
+                               case EDGE_COLOR_T:
+                                       
m_view.m_edgeDetails.overrideTargetArrow(m_inx, GraphGraphics.ARROW_TEE);
 
-                               break;
+                                       break;
+                               case EDGE_HALF_ARROW_BOTTOM:
+                                       
m_view.m_edgeDetails.overrideTargetArrow(m_inx, 
GraphGraphics.ARROW_HALF_BOTTOM);
+                                       break;
+                               case EDGE_HALF_ARROW_TOP:
+                                       
m_view.m_edgeDetails.overrideTargetArrow(m_inx, GraphGraphics.ARROW_HALF_TOP);
+                                       break;
 
-                       case EDGE_COLOR_DIAMOND:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_DIAMOND);
-                               // setTargetEdgeEndPaint(getUnselectedPaint());
-
-                               break;
-
-                       case WHITE_CIRCLE:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_DISC);
-                               // setTargetEdgeEndPaint(Color.white);
-
-                               break;
-
-                       case BLACK_CIRCLE:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_DISC);
-                               // setTargetEdgeEndPaint(Color.black);
-
-                               break;
-
-                       case EDGE_COLOR_CIRCLE:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_DISC);
-                               // setTargetEdgeEndPaint(getUnselectedPaint());
-
-                               break;
-
-                       case WHITE_T:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_TEE);
-                               // setTargetEdgeEndPaint(Color.white);
-
-                               break;
-
-                       case BLACK_T:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_TEE);
-                               // setTargetEdgeEndPaint(Color.black);
-
-                               break;
-
-                       case EDGE_COLOR_T:
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx,
-                                               GraphGraphics.ARROW_TEE);
-                               // setTargetEdgeEndPaint(getUnselectedPaint());
-
-                               break;
-
-                       default:
-                               // assume type is OK
-                               m_view.m_edgeDetails.overrideTargetArrow(m_inx, 
type);
-                               // throw new
-                               // IllegalArgumentException("unrecognized edge 
end type");
+                               default:
+                                       throw new 
IllegalArgumentException("unrecognized edge end type");
                        }
 
                        m_targetEdgeEnd = type;

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DGraphView.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DGraphView.java
    2010-11-17 21:15:05 UTC (rev 22881)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DGraphView.java
    2010-11-17 22:38:03 UTC (rev 22882)
@@ -2073,8 +2073,6 @@
                        m_networkCanvas.m_lod[0] = lod;
                        m_contentChanged = true;
                }
-
-               updateView();
        }
 
        /**

Modified: 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DNodeView.java
===================================================================
--- 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DNodeView.java
     2010-11-17 21:15:05 UTC (rev 22881)
+++ 
core3/ding-presentation-impl/trunk/src/main/java/org/cytoscape/ding/impl/DNodeView.java
     2010-11-17 22:38:03 UTC (rev 22882)
@@ -70,11 +70,10 @@
  * @author $author$
  */
 public class DNodeView implements NodeView, Label {
-
-       // For Cytoscape 2.7: Nested Network Image size
+       // Affects size of the nested network image relative to the node size:
        private static final float NESTED_IMAGE_SCALE_FACTOR = 0.6f;
 
-       // This image will be used when view is not available for a nested 
network.
+       // These images will be used when a view is not available for a nested 
network.
        private static BufferedImage DEFAULT_NESTED_NETWORK_IMAGE;
        private static BufferedImage RECURSIVE_NESTED_NETWORK_IMAGE;
 

-- 
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