public class RnaDrawController extends java.lang.Object implements SceneRenderer, SceneController
Modifier and Type | Class and Description |
---|---|
static class |
RnaDrawController.BehaviorMode
BehaviorMode defines two separate "behavior modes"
that combine selection behavior along with draw-handle and dragging behaviors.
|
static class |
RnaDrawController.Colors |
private class |
RnaDrawController.MouseHandler |
private static class |
RnaDrawController.NucGroup |
private static class |
RnaDrawController.ScreenNuc |
static class |
RnaDrawController.SelectionType |
SceneController.DragOpts
Modifier and Type | Field and Description |
---|---|
private Vec2D |
_backboneDir |
private Vec2D |
_backboneEnd |
(package private) java.awt.geom.Line2D.Float |
_backboneLine |
private Vec2D |
_backboneStart |
(package private) Graphics2DRecorder |
_dummyGraphics |
private int |
_suspendRedraw |
private int |
_suspendUpdatesCounter |
private java.awt.geom.Point2D |
_tmpPt |
private java.awt.geom.AffineTransform |
_tmpTr |
private RnaDrawController.BehaviorMode |
behaviorMode |
private ICanvas |
canvas |
private java.awt.Component |
canvasComponent |
private float[] |
coords |
private static int |
DESELECT_ONLY |
static int |
DRAG_EXPANDED_MOTIF_MASK |
static int |
DRAG_SPECIAL_MASK |
private DrawHandle[] |
drawHandles |
private java.util.Collection<DrawHint> |
drawHints |
static int |
EDIT_CLICK_MASK |
private java.awt.geom.Line2D.Float |
editBond |
private int[] |
EMPTY_SELECTION |
private Nuc |
focused |
private DrawHandle |
handleBranchSlide |
private DrawHandle |
handleLoopResize |
private DrawHandle |
handleRotate |
EventSource.OneArg<HistoryUpdateEvent> |
historyEvent |
private static double |
minBiasRange |
private RnaDrawController.MouseHandler |
mouseHandler |
private RnaDrawController.ScreenNuc[] |
nucScreenShapes |
private java.awt.Shape[] |
nucShapes |
private boolean |
prevBias |
private java.awt.geom.Point2D |
prevStart |
(package private) double |
prevTheta |
private RnaScene |
scene |
EventSource.OneArg<SceneUpdateEvent> |
sceneUpdated |
private java.util.List<IScreenObject> |
screenObjects |
private static int |
SELECT_ONLY |
private java.util.Set<Nuc> |
selection |
static int |
SELECTION_ADD_MASK |
private java.awt.Rectangle |
selectionBand |
private RnaDrawController.SelectionType |
selType |
private DrawSettings |
settings |
private static double[] |
stickyRotationAngles |
private static double |
stickyRotationEpsilon |
(package private) java.awt.geom.Ellipse2D.Float |
tmpNucShape |
private boolean |
useRecorder |
Constructor and Description |
---|
RnaDrawController() |
Modifier and Type | Method and Description |
---|---|
private void |
addBond(Nuc n1,
Nuc n2) |
DrawHint |
addHint(java.awt.Shape shape) |
DrawHint |
addHint(java.lang.String text,
double centerX,
double centerY) |
boolean |
addHistoryListener(java.util.function.Consumer<HistoryUpdateEvent> listener) |
boolean |
addSceneUpdateListener(java.util.function.Consumer<SceneUpdateEvent> listener) |
void |
addUndo(SceneUpdateInfo type) |
private boolean |
allNucsFitCircle(Nuc start,
Nuc end,
Ellipses.Circle c) |
private void |
applyHistoryState(HistoryState state) |
void |
breakSelectedBonds() |
java.awt.Rectangle |
calcBounds(java.awt.Graphics2D graphics,
View2D view,
boolean includeInteractive) |
Vec2D |
calcNormalToNuc(Nuc cur) |
private java.awt.geom.Point2D.Float |
calcNucGroupCenter(java.util.Collection<Nuc> list) |
boolean |
canRedo() |
boolean |
canUndo() |
private void |
clearSelection() |
void |
clearUndo() |
void |
colorize(SceneColorizer sc,
boolean allNucs) |
void |
controlsUpdated() |
private RnaScene |
createDefaultScene() |
void |
deleteSelectedBases() |
private void |
dragNucs(Nuc dragNuc,
java.awt.Point startPos,
java.awt.Point prevPos,
java.awt.Point curPos,
SceneController.DragOpts options) |
java.util.List<IScreenObject> |
draw(java.awt.Graphics2D g,
View2D view,
DrawSettings settings,
boolean interactive) |
private void |
drawBonds(java.awt.Graphics2D g,
View2D view,
java.util.List<IScreenObject> objects) |
private void |
drawCurvedBackbones(java.awt.Graphics2D g,
boolean[] done,
float minDist) |
private IScreenObject |
drawNucNumber(java.awt.Graphics2D g,
View2D view,
Nuc cur,
int number) |
private void |
drawNucOutline(java.awt.Graphics2D g,
Nuc n,
java.awt.Color c) |
private void |
drawSimpleBackbones(java.awt.Graphics2D g,
boolean[] done,
float minDist) |
void |
expandSelection()
If a nucleotide is selected, this expands to the helix or loop.
|
Motif.Helix |
findBaseHelix(java.util.Collection<Nuc> list) |
void |
flip(boolean vertical,
boolean selectionOnly) |
RnaDrawController.BehaviorMode |
getBehaviorMode() |
private java.awt.Color |
getBondColor(Bond b) |
ICanvas |
getCanvas() |
Nuc |
getFocused() |
private INucGroup |
getMotif(Nuc nuc,
RnaDrawController.SelectionType selectionType,
boolean allowNull) |
private java.awt.Shape |
getNucShape(Nuc n) |
RnaScene |
getScene() |
private IScreenObject |
getScreenObject(Nuc n,
View2D view,
int zorder) |
Nuc[] |
getSelected() |
private int[] |
getSelectionState() |
DrawSettings |
getSettings() |
private void |
handleSelectionChange() |
void |
historyUpdated() |
private IScreenObject |
hitTest(java.lang.Iterable<IScreenObject> list,
java.awt.geom.Point2D pt,
boolean nucsOnly) |
private java.util.List<IScreenObject> |
hitTest(java.lang.Iterable<IScreenObject> list,
java.awt.Rectangle rc,
boolean nucsOnly) |
void |
insertBases(java.lang.String sequence,
Nuc ref,
boolean insertAfter)
Insert new bases before or after the specified nucleotide.
|
private boolean |
isFullMotifSelected() |
boolean |
isUserActionInProgress() |
void |
joinSelectionStrands() |
void |
layoutUpdated(SceneUpdateInfo details) |
void |
layoutUpdated(SceneUpdateInfo details,
boolean addHistoryEntry) |
void |
notifyUpdate(SceneUpdateInfo details) |
void |
notifyUpdate(SceneUpdateInfo update,
boolean addHistoryEntry) |
private boolean |
nucFitsCircle(int sceneIndex,
Ellipses.Circle c) |
protected void |
onSceneUpdate(SceneUpdateEvent eventInfo) |
void |
programSettingsChanged(Settings settings) |
void |
redo() |
private void |
redraw() |
void |
redrawSelection() |
void |
removeColors(boolean allNucs) |
boolean |
removeHistoryListener(java.util.function.Consumer<HistoryUpdateEvent> listener) |
boolean |
removeSceneUpdateListener(java.util.function.Consumer<SceneUpdateEvent> listener) |
java.util.Collection<IScreenObject> |
render(java.awt.Graphics2D graphics,
View2D view,
boolean includeInteractive) |
private void |
resetRnaCoords() |
private void |
resetStructure() |
void |
resumeRedraw(boolean forceRedraw) |
void |
resumeUpdates() |
void |
rotateNucs(java.util.Collection<Nuc> list,
java.awt.geom.Point2D modelCenter,
double theta) |
void |
rotateNucs(java.util.Collection<Nuc> list,
java.awt.geom.Point2D modelCenter,
java.awt.Point start,
java.awt.Point end,
SceneController.DragOpts options) |
void |
rotateNucs(java.util.Collection<Nuc> list,
java.awt.geom.Point2D modelCenter,
java.awt.Point start,
java.awt.Point end,
SceneController.DragOpts options,
Motif.Helix baseHelix,
boolean showArc) |
void |
selectAll() |
void |
selectionUpdated() |
private void |
selectMotif(Nuc nuc,
boolean sel,
RnaDrawController.SelectionType selectionType) |
private void |
selectNucs(java.lang.Iterable<Nuc> nucs,
boolean sel) |
void |
selectSpecial(RnaDrawController.SelectionType type) |
void |
setBehaviorMode(RnaDrawController.BehaviorMode behaviorMode) |
void |
setCanvas(ICanvas newCanvas) |
private void |
setCanvasComponent(java.awt.Component canvasComponent) |
void |
setScene(RnaScene scene) |
void |
setSelectedBondType(BondType selectedBondType) |
private void |
setSelectionState(int[] sel) |
void |
setSelType(RnaDrawController.SelectionType sel) |
void |
setSettings(DrawSettings settings) |
void |
splitStrandsAtSelection() |
private void |
storeRnaCoords() |
void |
structureUpdated(SceneUpdateInfo details) |
void |
styleUpdated(SceneUpdateInfo details) |
void |
suspendRedraw() |
void |
suspendUpdates() |
protected void |
transformNucs(java.util.Collection<Nuc> list,
java.awt.geom.AffineTransform tr) |
void |
translateScreenNucs(java.util.Collection<Nuc> list,
java.awt.geom.Point2D screenDelta)
Translates all selected nucleotides by the x and y coordinates of the delta point,
which is assumed to be in screen coordinates.
|
void |
translateScreenNucs(java.util.Collection<Nuc> list,
java.awt.Point start,
java.awt.Point end)
Translates all selected nucleotides by the x and y coordinates of the delta point,
which is assumed to be in screen coordinates.
|
void |
undo() |
private Nuc |
updateSelection(boolean append,
Nuc nuc,
int allowMode)
Updates the set of selected Nucs based on the current selection and the user's intention.
|
private void |
updateSelection(boolean append,
java.awt.Rectangle selRect) |
void |
viewUpdated() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
programSettings
private Vec2D _backboneDir
private Vec2D _backboneEnd
java.awt.geom.Line2D.Float _backboneLine
private Vec2D _backboneStart
Graphics2DRecorder _dummyGraphics
private int _suspendRedraw
private int _suspendUpdatesCounter
private final java.awt.geom.Point2D _tmpPt
private final java.awt.geom.AffineTransform _tmpTr
private RnaDrawController.BehaviorMode behaviorMode
private ICanvas canvas
private java.awt.Component canvasComponent
private float[] coords
private static int DESELECT_ONLY
public static int DRAG_EXPANDED_MOTIF_MASK
public static int DRAG_SPECIAL_MASK
private final DrawHandle[] drawHandles
private java.util.Collection<DrawHint> drawHints
public static int EDIT_CLICK_MASK
private final java.awt.geom.Line2D.Float editBond
private int[] EMPTY_SELECTION
private Nuc focused
private final DrawHandle handleBranchSlide
private final DrawHandle handleLoopResize
private final DrawHandle handleRotate
public EventSource.OneArg<HistoryUpdateEvent> historyEvent
private static final double minBiasRange
private RnaDrawController.MouseHandler mouseHandler
private RnaDrawController.ScreenNuc[] nucScreenShapes
private java.awt.Shape[] nucShapes
private boolean prevBias
private java.awt.geom.Point2D prevStart
double prevTheta
private RnaScene scene
public EventSource.OneArg<SceneUpdateEvent> sceneUpdated
private java.util.List<IScreenObject> screenObjects
private static int SELECT_ONLY
private java.util.Set<Nuc> selection
public static int SELECTION_ADD_MASK
private final java.awt.Rectangle selectionBand
private RnaDrawController.SelectionType selType
private DrawSettings settings
private static final double[] stickyRotationAngles
private static final double stickyRotationEpsilon
java.awt.geom.Ellipse2D.Float tmpNucShape
private boolean useRecorder
public DrawHint addHint(java.awt.Shape shape)
addHint
in interface SceneController
public DrawHint addHint(java.lang.String text, double centerX, double centerY)
addHint
in interface SceneController
public boolean addHistoryListener(java.util.function.Consumer<HistoryUpdateEvent> listener)
addHistoryListener
in interface SceneController
public boolean addSceneUpdateListener(java.util.function.Consumer<SceneUpdateEvent> listener)
addSceneUpdateListener
in interface SceneController
public void addUndo(SceneUpdateInfo type)
addUndo
in interface SceneController
private boolean allNucsFitCircle(Nuc start, Nuc end, Ellipses.Circle c)
private void applyHistoryState(HistoryState state)
public void breakSelectedBonds()
public java.awt.Rectangle calcBounds(java.awt.Graphics2D graphics, View2D view, boolean includeInteractive)
calcBounds
in interface SceneRenderer
public Vec2D calcNormalToNuc(Nuc cur)
calcNormalToNuc
in interface SceneController
private java.awt.geom.Point2D.Float calcNucGroupCenter(java.util.Collection<Nuc> list)
public boolean canRedo()
canRedo
in interface SceneController
public boolean canUndo()
canUndo
in interface SceneController
private void clearSelection()
public void clearUndo()
clearUndo
in interface SceneController
public void colorize(SceneColorizer sc, boolean allNucs)
public void controlsUpdated()
controlsUpdated
in interface SceneController
private RnaScene createDefaultScene()
public void deleteSelectedBases()
private void dragNucs(Nuc dragNuc, java.awt.Point startPos, java.awt.Point prevPos, java.awt.Point curPos, SceneController.DragOpts options)
public java.util.List<IScreenObject> draw(java.awt.Graphics2D g, View2D view, DrawSettings settings, boolean interactive)
private void drawBonds(java.awt.Graphics2D g, View2D view, java.util.List<IScreenObject> objects)
private void drawCurvedBackbones(java.awt.Graphics2D g, boolean[] done, float minDist)
private IScreenObject drawNucNumber(java.awt.Graphics2D g, View2D view, Nuc cur, int number)
private void drawNucOutline(java.awt.Graphics2D g, Nuc n, java.awt.Color c)
private void drawSimpleBackbones(java.awt.Graphics2D g, boolean[] done, float minDist)
public void expandSelection()
public Motif.Helix findBaseHelix(java.util.Collection<Nuc> list)
findBaseHelix
in interface SceneController
public void flip(boolean vertical, boolean selectionOnly)
public RnaDrawController.BehaviorMode getBehaviorMode()
private java.awt.Color getBondColor(Bond b)
public ICanvas getCanvas()
getCanvas
in interface SceneController
public Nuc getFocused()
private INucGroup getMotif(Nuc nuc, RnaDrawController.SelectionType selectionType, boolean allowNull)
private java.awt.Shape getNucShape(Nuc n)
public RnaScene getScene()
private IScreenObject getScreenObject(Nuc n, View2D view, int zorder)
public Nuc[] getSelected()
private int[] getSelectionState()
public DrawSettings getSettings()
getSettings
in interface SceneController
getSettings
in interface SceneRenderer
private void handleSelectionChange()
public void historyUpdated()
historyUpdated
in interface SceneController
private IScreenObject hitTest(java.lang.Iterable<IScreenObject> list, java.awt.geom.Point2D pt, boolean nucsOnly)
private java.util.List<IScreenObject> hitTest(java.lang.Iterable<IScreenObject> list, java.awt.Rectangle rc, boolean nucsOnly)
public void insertBases(java.lang.String sequence, Nuc ref, boolean insertAfter)
private boolean isFullMotifSelected()
public boolean isUserActionInProgress()
public void joinSelectionStrands()
public void layoutUpdated(SceneUpdateInfo details)
layoutUpdated
in interface SceneController
public void layoutUpdated(SceneUpdateInfo details, boolean addHistoryEntry)
layoutUpdated
in interface SceneController
public void notifyUpdate(SceneUpdateInfo details)
notifyUpdate
in interface SceneController
public void notifyUpdate(SceneUpdateInfo update, boolean addHistoryEntry)
notifyUpdate
in interface SceneController
private boolean nucFitsCircle(int sceneIndex, Ellipses.Circle c)
protected void onSceneUpdate(SceneUpdateEvent eventInfo)
public void programSettingsChanged(Settings settings)
public void redo()
redo
in interface SceneController
private void redraw()
public void redrawSelection()
public void removeColors(boolean allNucs)
public boolean removeHistoryListener(java.util.function.Consumer<HistoryUpdateEvent> listener)
removeHistoryListener
in interface SceneController
public boolean removeSceneUpdateListener(java.util.function.Consumer<SceneUpdateEvent> listener)
removeSceneUpdateListener
in interface SceneController
public java.util.Collection<IScreenObject> render(java.awt.Graphics2D graphics, View2D view, boolean includeInteractive)
render
in interface SceneRenderer
private void resetRnaCoords()
private void resetStructure()
public void resumeRedraw(boolean forceRedraw)
public void resumeUpdates()
public void rotateNucs(java.util.Collection<Nuc> list, java.awt.geom.Point2D modelCenter, double theta)
rotateNucs
in interface SceneController
public void rotateNucs(java.util.Collection<Nuc> list, java.awt.geom.Point2D modelCenter, java.awt.Point start, java.awt.Point end, SceneController.DragOpts options)
rotateNucs
in interface SceneController
public void rotateNucs(java.util.Collection<Nuc> list, java.awt.geom.Point2D modelCenter, java.awt.Point start, java.awt.Point end, SceneController.DragOpts options, Motif.Helix baseHelix, boolean showArc)
rotateNucs
in interface SceneController
public void selectAll()
public void selectionUpdated()
selectionUpdated
in interface SceneController
private void selectMotif(Nuc nuc, boolean sel, RnaDrawController.SelectionType selectionType)
private void selectNucs(java.lang.Iterable<Nuc> nucs, boolean sel)
public void selectSpecial(RnaDrawController.SelectionType type)
public void setBehaviorMode(RnaDrawController.BehaviorMode behaviorMode)
public void setCanvas(ICanvas newCanvas)
private void setCanvasComponent(java.awt.Component canvasComponent)
public void setScene(RnaScene scene)
public void setSelectedBondType(BondType selectedBondType)
private void setSelectionState(int[] sel)
public void setSelType(RnaDrawController.SelectionType sel)
public void setSettings(DrawSettings settings)
public void splitStrandsAtSelection()
private void storeRnaCoords()
public void structureUpdated(SceneUpdateInfo details)
structureUpdated
in interface SceneController
public void styleUpdated(SceneUpdateInfo details)
styleUpdated
in interface SceneController
public void suspendRedraw()
public void suspendUpdates()
protected void transformNucs(java.util.Collection<Nuc> list, java.awt.geom.AffineTransform tr)
public void translateScreenNucs(java.util.Collection<Nuc> list, java.awt.geom.Point2D screenDelta)
public void translateScreenNucs(java.util.Collection<Nuc> list, java.awt.Point start, java.awt.Point end)
public void undo()
undo
in interface SceneController
private Nuc updateSelection(boolean append, @NotNull Nuc nuc, int allowMode)
append
- Whether to modify the selection (true) or clear the existing selection (false).nuc
- The target Nuc.allowMode
- Whether we are in SELECT_ONLY mode or DESELECT_ONLY.private void updateSelection(boolean append, java.awt.Rectangle selRect)
public void viewUpdated()
viewUpdated
in interface SceneController