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.