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.Object
A 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>
graphComponent
protected LayoutProvider<V,E,G>
layoutProvider
-
Constructor Summary
Constructors Constructor Description VisualGraphView()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
arePopupsEnabled()
void
cleanup()
Effectively clears this display.protected void
disposeViewer()
GraphPerspectiveInfo<V,E>
generateGraphPerspective()
V
getFocusedVertex()
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.JComponent
getUndockedSatelliteComponent()
PathHighlightMode
getVertexFocusPathHighlightMode()
PathHighlightMode
getVertexHoverPathHighlightMode()
java.awt.Point
getVertexPointInViewSpace(V v)
javax.swing.JComponent
getViewComponent()
VisualGraphViewUpdater<V,E>
getViewUpdater()
G
getVisualGraph()
protected <T> T
getWithBusyCursor(java.util.function.Supplier<T> s)
protected void
installGraphViewer()
boolean
isSatelliteComponent(java.awt.Component c)
boolean
isSatelliteDocked()
Returns whether the satellite intended to be docked.boolean
isSatelliteVisible()
Returns whether the satellite intended to be visible.boolean
isScaledPastInteractionThreshold()
protected void
maybeTwinkleVertex(V twinkleVertex, boolean doTwinkle)
protected void
removeSatellite()
void
repaint()
void
requestFocus()
protected void
setContent(java.awt.Component c)
void
setGraph(G graph)
protected void
setGraphComponent(GraphComponent<V,E,G> newComponent)
void
setGraphPerspective(GraphPerspectiveInfo<V,E> newPerspective)
Sets the perspective for this viewvoid
setLayoutProvider(LayoutProvider<V,E,G> newLayoutProvider)
Sets the given layout provider, but does not actually perform a layout.void
setPopupsVisible(boolean visible)
void
setSatelliteDocked(boolean docked)
void
setSatelliteListener(GraphSatelliteListener l)
void
setSatelliteVisible(boolean visible)
protected void
setSouthComponent(javax.swing.JComponent component)
void
setStatusMessage(java.lang.String message)
Sets a message to be painted on the viewer.void
setTooltipProvider(VertexTooltipProvider<V,E> provider)
void
setVertexClickListener(VertexClickListener<V,E> l)
Sets a listener that allows clients to be notified of vertex double-clicks.void
setVertexFocusListener(VertexFocusListener<V> l)
void
setVertexFocusPathHighlightMode(PathHighlightMode mode)
void
setVertexHoverPathHighlightMode(PathHighlightMode mode)
void
showErrorView(java.lang.String errorMessage)
java.awt.event.MouseEvent
translateMouseEventFromVertexToViewSpace(V v, java.awt.event.MouseEvent e)
java.awt.Point
translatePointFromVertexToViewSpace(V v, java.awt.Point p)
java.awt.Rectangle
translateRectangleFromVertexToViewSpace(V v, java.awt.Rectangle r)
void
zoomInGraph()
void
zoomOutGraph()
void
zoomToVertex(V v)
void
zoomToWindow()
-
-
-
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 theVisualGraphMousePlugin
class. 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()
-
-