Package ghidra.graph.viewer
Class VisualGraphView<V extends VisualVertex,E extends VisualEdge<V>,G extends VisualGraph<V,E>>
- java.lang.Object
-
- ghidra.graph.viewer.VisualGraphView<V,E,G>
-
- Type Parameters:
V- the vertex typeE- the edge typeG- the graph type
public class VisualGraphView<V extends VisualVertex,E extends VisualEdge<V>,G extends VisualGraph<V,E>> extends java.lang.ObjectA view object, where 'view' is used in the sense of the Model-View-Controller (MVC) pattern. This class will contain all UI widgets need to display and interact with a graph.Implementation Note:
- The graph of this component can be null, changing to non-null values over the lifetime of this view. This allows this view to be installed in a UI component, with the contents changing as needed.
-
When the graph is
set, the view portion of the class is recreated. -
At any given point in time there may not be a
graphComponent. This means that this class must maintain settings state that it will apply when the component is created. This state is atypical and makes this class a bit harder to understand.
-
-
Field Summary
Fields Modifier and Type Field Description protected GraphComponent<V,E,G>graphComponentprotected LayoutProvider<V,E,G>layoutProvider
-
Constructor Summary
Constructors Constructor Description VisualGraphView()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanarePopupsEnabled()voidcleanup()Effectively clears this display.protected voiddisposeViewer()GraphPerspectiveInfo<V,E>generateGraphPerspective()VgetFocusedVertex()GraphComponent<V,E,G>getGraphComponent()LayoutProvider<V,E,G>getLayoutProvider()GraphViewer<V,E>getPrimaryGraphViewer()Returns the primary viewer of the graph (as opposed to the satellite viewer).SatelliteGraphViewer<V,E>getSatelliteViewer()java.util.Set<V>getSelectedVertices()javax.swing.JComponentgetUndockedSatelliteComponent()PathHighlightModegetVertexFocusPathHighlightMode()PathHighlightModegetVertexHoverPathHighlightMode()java.awt.PointgetVertexPointInViewSpace(V v)javax.swing.JComponentgetViewComponent()VisualGraphViewUpdater<V,E>getViewUpdater()GgetVisualGraph()protected <T> TgetWithBusyCursor(java.util.function.Supplier<T> s)protected voidinstallGraphViewer()booleanisSatelliteComponent(java.awt.Component c)booleanisSatelliteDocked()Returns whether the satellite intended to be docked.booleanisSatelliteVisible()Returns whether the satellite intended to be visible.booleanisScaledPastInteractionThreshold()protected voidmaybeTwinkleVertex(V twinkleVertex, boolean doTwinkle)protected voidremoveSatellite()voidrepaint()voidrequestFocus()protected voidsetContent(java.awt.Component c)voidsetGraph(G graph)protected voidsetGraphComponent(GraphComponent<V,E,G> newComponent)voidsetGraphPerspective(GraphPerspectiveInfo<V,E> newPerspective)Sets the perspective for this viewvoidsetLayoutProvider(LayoutProvider<V,E,G> newLayoutProvider)Sets the given layout provider, but does not actually perform a layout.voidsetPopupsVisible(boolean visible)voidsetSatelliteDocked(boolean docked)voidsetSatelliteListener(GraphSatelliteListener l)voidsetSatelliteVisible(boolean visible)protected voidsetSouthComponent(javax.swing.JComponent component)voidsetStatusMessage(java.lang.String message)Sets a message to be painted on the viewer.voidsetTooltipProvider(VertexTooltipProvider<V,E> provider)voidsetVertexClickListener(VertexClickListener<V,E> l)Sets a listener that allows clients to be notified of vertex double-clicks.voidsetVertexFocusListener(VertexFocusListener<V> l)voidsetVertexFocusPathHighlightMode(PathHighlightMode mode)voidsetVertexHoverPathHighlightMode(PathHighlightMode mode)voidshowErrorView(java.lang.String errorMessage)java.awt.event.MouseEventtranslateMouseEventFromVertexToViewSpace(V v, java.awt.event.MouseEvent e)java.awt.PointtranslatePointFromVertexToViewSpace(V v, java.awt.Point p)java.awt.RectangletranslateRectangleFromVertexToViewSpace(V v, java.awt.Rectangle r)voidzoomInGraph()voidzoomOutGraph()voidzoomToVertex(V v)voidzoomToWindow()
-
-
-
Field Detail
-
graphComponent
protected GraphComponent<V extends VisualVertex,E extends VisualEdge<V>,G extends VisualGraph<V,E>> graphComponent
-
layoutProvider
protected LayoutProvider<V extends VisualVertex,E extends VisualEdge<V>,G extends VisualGraph<V,E>> layoutProvider
-
-
Method Detail
-
getViewComponent
public javax.swing.JComponent getViewComponent()
-
setSouthComponent
protected void setSouthComponent(javax.swing.JComponent component)
-
removeSatellite
protected void removeSatellite()
-
setLayoutProvider
public void setLayoutProvider(LayoutProvider<V,E,G> newLayoutProvider)
Sets the given layout provider, but does not actually perform a layout.- Parameters:
newLayoutProvider- the new provider
-
setGraph
public void setGraph(G graph)
-
setSatelliteListener
public void setSatelliteListener(GraphSatelliteListener l)
-
setVertexFocusListener
public void setVertexFocusListener(VertexFocusListener<V> l)
-
setVertexClickListener
public void setVertexClickListener(VertexClickListener<V,E> l)
Sets a listener that allows clients to be notified of vertex double-clicks. Normal mouse processing is handled by theVisualGraphMousePluginclass. This is a convenience method so that clients do not have to deal with the mouse plugin.- Parameters:
l- the listener
-
installGraphViewer
protected void installGraphViewer()
-
setGraphComponent
protected void setGraphComponent(GraphComponent<V,E,G> newComponent)
-
setContent
protected void setContent(java.awt.Component c)
-
getWithBusyCursor
protected <T> T getWithBusyCursor(java.util.function.Supplier<T> s)
-
getVisualGraph
public G getVisualGraph()
-
getPrimaryGraphViewer
public GraphViewer<V,E> getPrimaryGraphViewer()
Returns the primary viewer of the graph (as opposed to the satellite viewer). The viewer returned is responsible for maintaining view information for a given graph.- Returns:
- the primary viewer
-
getSatelliteViewer
public SatelliteGraphViewer<V,E> getSatelliteViewer()
-
setGraphPerspective
public void setGraphPerspective(GraphPerspectiveInfo<V,E> newPerspective)
Sets the perspective for this view- Parameters:
newPerspective- the new perspective
-
generateGraphPerspective
public GraphPerspectiveInfo<V,E> generateGraphPerspective()
-
showErrorView
public void showErrorView(java.lang.String errorMessage)
-
setStatusMessage
public void setStatusMessage(java.lang.String message)
Sets a message to be painted on the viewer. This is useful to show a text message to the user. Passing null will clear the message.- Parameters:
message- the status message
-
getGraphComponent
public GraphComponent<V,E,G> getGraphComponent()
-
isSatelliteVisible
public boolean isSatelliteVisible()
Returns whether the satellite intended to be visible. If this component is built, then a result of true means that the satellite is showing. If the component is not yet built, then a result of true means that the satellite will be made visible when the component is built.- Returns:
- true if visible
-
setSatelliteVisible
public void setSatelliteVisible(boolean visible)
-
setSatelliteDocked
public void setSatelliteDocked(boolean docked)
-
isSatelliteDocked
public boolean isSatelliteDocked()
Returns whether the satellite intended to be docked. If this component is built, then a result of true means that the satellite is docked. If the component is not yet built, then a result of true means that the satellite will be made docked when the component is built.- Returns:
- true if visible
-
setPopupsVisible
public void setPopupsVisible(boolean visible)
-
arePopupsEnabled
public boolean arePopupsEnabled()
-
getUndockedSatelliteComponent
public javax.swing.JComponent getUndockedSatelliteComponent()
-
isSatelliteComponent
public boolean isSatelliteComponent(java.awt.Component c)
-
setVertexHoverPathHighlightMode
public void setVertexHoverPathHighlightMode(PathHighlightMode mode)
-
setVertexFocusPathHighlightMode
public void setVertexFocusPathHighlightMode(PathHighlightMode mode)
-
getVertexFocusPathHighlightMode
public PathHighlightMode getVertexFocusPathHighlightMode()
-
getVertexHoverPathHighlightMode
public PathHighlightMode getVertexHoverPathHighlightMode()
-
setTooltipProvider
public void setTooltipProvider(VertexTooltipProvider<V,E> provider)
-
zoomOutGraph
public void zoomOutGraph()
-
zoomInGraph
public void zoomInGraph()
-
zoomToVertex
public void zoomToVertex(V v)
-
zoomToWindow
public void zoomToWindow()
-
getViewUpdater
public VisualGraphViewUpdater<V,E> getViewUpdater()
-
getVertexPointInViewSpace
public java.awt.Point getVertexPointInViewSpace(V v)
-
translatePointFromVertexToViewSpace
public java.awt.Point translatePointFromVertexToViewSpace(V v, java.awt.Point p)
-
translateRectangleFromVertexToViewSpace
public java.awt.Rectangle translateRectangleFromVertexToViewSpace(V v, java.awt.Rectangle r)
-
translateMouseEventFromVertexToViewSpace
public java.awt.event.MouseEvent translateMouseEventFromVertexToViewSpace(V v, java.awt.event.MouseEvent e)
-
isScaledPastInteractionThreshold
public boolean isScaledPastInteractionThreshold()
-
maybeTwinkleVertex
protected void maybeTwinkleVertex(V twinkleVertex, boolean doTwinkle)
-
requestFocus
public void requestFocus()
-
repaint
public void repaint()
-
getFocusedVertex
public V getFocusedVertex()
-
getSelectedVertices
public java.util.Set<V> getSelectedVertices()
-
getLayoutProvider
public LayoutProvider<V,E,G> getLayoutProvider()
-
cleanup
public void cleanup()
Effectively clears this display. This method is not called dispose, as that implies the end of an object's lifecycle. This object can be re-used after this method is called.
-
disposeViewer
protected void disposeViewer()
-
-