use of org.cytoscape.model.CyEdge in project cytoscape-impl by cytoscape.
the class DGraphView method syncFilterAndView.
// This is expensive and should only be called at initialization!!!
private void syncFilterAndView() {
final List<CyNode> flaggedNodes = CyTableUtil.getNodesInState(getModel(), CyNetwork.SELECTED, true);
final List<CyEdge> flaggedEdges = CyTableUtil.getEdgesInState(getModel(), CyNetwork.SELECTED, true);
final List<CyNode> selectedNodes = getSelectedNodes();
final List<CyEdge> selectedEdges = getSelectedEdges();
// select all nodes that are flagged but not currently selected
for (final CyNode node : flaggedNodes) {
final NodeView nv = getDNodeView(node);
if ((nv == null) || nv.isSelected())
continue;
nv.setSelected(true);
}
// select all edges that are flagged but not currently selected
for (final CyEdge edge : flaggedEdges) {
final EdgeView ev = getDEdgeView(edge);
if ((ev == null) || ev.isSelected())
continue;
ev.setSelected(true);
}
// flag all nodes that are selected but not currently flagged
select(selectedNodes, CyNode.class, true);
// flag all edges that are selected but not currently flagged
select(selectedEdges, CyEdge.class, true);
}
use of org.cytoscape.model.CyEdge in project cytoscape-impl by cytoscape.
the class DGraphView method updateSelection.
private void updateSelection(Class<? extends CyIdentifiable> type, Collection<RowSetRecord> records) {
if (type == null)
return;
synchronized (m_lock) {
nodeSelectionList.clear();
edgeSelectionList.clear();
}
if (type == CyNode.class) {
for (RowSetRecord rec : records) {
// Get the SUID
Long suid = rec.getRow().get(CyNetwork.SUID, Long.class);
CyNode node = getModel().getNode(suid);
if (node == null)
continue;
DNodeView nv = (DNodeView) getNodeView(node);
if (nv == null)
continue;
Boolean value = rec.getRow().get(CyNetwork.SELECTED, Boolean.class);
synchronized (m_lock) {
if (Boolean.TRUE.equals(value))
nv.selectInternal();
else
nv.unselectInternal();
nodeSelectionList.add(node);
}
}
} else if (type == CyEdge.class) {
for (RowSetRecord rec : records) {
// Get the SUID
Long suid = rec.getRow().get(CyNetwork.SUID, Long.class);
CyEdge edge = getModel().getEdge(suid);
if (edge == null)
continue;
DEdgeView ev = (DEdgeView) getEdgeView(edge);
if (ev == null)
continue;
Boolean value = rec.getRow().get(CyNetwork.SELECTED, Boolean.class);
synchronized (m_lock) {
if (Boolean.TRUE.equals(value))
ev.selectInternal(false);
else
ev.unselectInternal();
edgeSelectionList.add(edge);
}
}
}
if (nodeSelectionList.size() > 0 || edgeSelectionList.size() > 0) {
// Update renderings
m_networkCanvas.updateSubgraph(nodeSelectionList, edgeSelectionList);
if (m_navigationCanvas != null)
m_navigationCanvas.updateSubgraph(nodeSelectionList, edgeSelectionList);
}
}
use of org.cytoscape.model.CyEdge in project cytoscape-impl by cytoscape.
the class DGraphView method showGraphObjectInternal.
private boolean showGraphObjectInternal(Object obj, boolean fireListenerEvents) {
if (obj instanceof DNodeView) {
long nodeInx;
final DNodeView nView = (DNodeView) obj;
synchronized (m_lock) {
nodeInx = nView.getCyNode().getSUID();
CyNode nnode = model.getNode(nodeInx);
if (nnode == null || !m_drawPersp.addNode(nnode))
return false;
m_spacial.insert(nodeInx, nView.m_hiddenXMin, nView.m_hiddenYMin, nView.m_hiddenXMax, nView.m_hiddenYMax, nView.getZPosition());
setContentChanged();
}
return true;
} else if (obj instanceof DEdgeView) {
CyNode sourceNode;
CyNode targetNode;
CyEdge newEdge;
synchronized (m_lock) {
final CyEdge edge = model.getEdge(((DEdgeView) obj).getCyEdge().getSUID());
if (edge == null)
return false;
// The edge exists in m_structPersp, therefore its source and target
// node views must also exist.
sourceNode = edge.getSource();
targetNode = edge.getTarget();
final DNodeView srcDnv = getDNodeView(sourceNode);
final DNodeView tgtDnv = getDNodeView(targetNode);
if (isHidden(srcDnv) || isHidden(tgtDnv))
return false;
if (!showGraphObjectInternal(srcDnv, false))
sourceNode = null;
if (!showGraphObjectInternal(tgtDnv, false))
targetNode = null;
newEdge = edge;
if (!m_drawPersp.addEdge(newEdge))
return false;
setContentChanged();
}
return true;
} else {
return false;
}
}
use of org.cytoscape.model.CyEdge in project cytoscape-impl by cytoscape.
the class DGraphView method actionPerformed.
/**
****************************************************
* Animation handling. Currently, this only supports *
* edge marquee, but could be extended in the future *
* to support other kinds of animations. *
****************************************************
*/
@Override
public void actionPerformed(ActionEvent e) {
// If we're not even drawing dashed edges, no sense in trying to do marquee
if ((m_networkCanvas.getLastRenderDetail() & GraphRenderer.LOD_DASHED_EDGES) == 0) {
return;
}
List<DEdgeView> removeMe = new ArrayList<>();
for (DEdgeView edgeView : animatedEdges) {
CyEdge edge = edgeView.getModel();
Stroke s = m_edgeDetails.getStroke(edge);
if (s != null && s instanceof AnimatedStroke) {
Stroke as = ((AnimatedStroke) s).newInstanceForNextOffset();
synchronized (m_lock) {
m_edgeDetails.overrideStroke(edge, as);
setContentChanged();
}
} else if (s == null) {
removeMe.add(edgeView);
}
}
// We do this this way to avoid the overhead of concurrent maps since this should be relatively rare
if (removeMe.size() != 0) {
for (DEdgeView edgeView : removeMe) animatedEdges.remove(edgeView);
}
// Redraw?
m_networkCanvas.repaint();
// updateView();
}
use of org.cytoscape.model.CyEdge in project cytoscape-impl by cytoscape.
the class DGraphView method getSelectedEdgeNodes.
/**
* @return An LongEnumerator listing the nodes that are endpoints of the currently selected edges.
*/
private LongEnumerator getSelectedEdgeNodes() {
synchronized (m_lock) {
final LongEnumerator selectedEdges = m_selectedEdges.searchRange(Integer.MIN_VALUE, Integer.MAX_VALUE, false);
final LongHash nodeIds = new LongHash();
while (selectedEdges.numRemaining() > 0) {
final long edge = selectedEdges.nextLong();
CyEdge currEdge = model.getEdge(edge);
CyNode source = currEdge.getSource();
long sourceId = source.getSUID();
nodeIds.put(sourceId);
CyNode target = currEdge.getTarget();
long targetId = target.getSUID();
nodeIds.put(targetId);
}
return nodeIds.elements();
}
}
Aggregations