use of edu.cmu.cs.hcii.cogtool.view.StandardDrawingEditor in project cogtool by cogtool.
the class SEDefaultUI method resetVisibleArea.
public void resetVisibleArea() {
StandardDrawingEditor e = view.getEditor();
e.getLWS().getUpdateManager().performUpdate();
DoubleSize extent = uiModel.getCurrentFrame().getPreferredSize();
e.setMinVisibleArea(PrecisionUtilities.round(extent.width), PrecisionUtilities.round(extent.height), false);
}
use of edu.cmu.cs.hcii.cogtool.view.StandardDrawingEditor in project cogtool by cogtool.
the class DesignEditorMouseState method dealWithMouseDragged.
@Override
protected boolean dealWithMouseDragged(IFigure figure, int button, int eventX, int eventY, int state) {
boolean goForward = super.dealWithMouseDragged(figure, button, eventX, eventY, state);
if (goForward && mouseDown) {
StandardDrawingEditor editor = ui.getViewEditor();
// Update VIEW to ensure ME point is visible.
// If outside of the visible canvas, up-click should cancel!
stopMouseDragTimer = true;
stopDynamic = editor.movePointNearEdge(eventX, eventY, updateDelta);
switch(getMouseState()) {
case PotentialMovingFrame:
case PotentialMovingSelection:
{
if (withinHysteresis(eventX, eventY)) {
break;
}
setMouseState(MovingFrames);
// fall through!
}
case MovingFrames:
{
updateDynamicMove(eventX, eventY, false);
break;
}
case PotentialTogglingSelection:
{
if (withinHysteresis(eventX, eventY)) {
break;
}
setMouseState(TogglingSelection);
// fall through!
}
case TogglingSelection:
{
updateDynamicSelectionArea(eventX, eventY);
break;
}
case PotentialSelectingFrames:
{
if (withinHysteresis(eventX, eventY)) {
break;
}
setMouseState(SelectingFrames);
// fall through!
}
case SelectingFrames:
{
updateDynamicSelectionArea(eventX, eventY);
break;
}
case PotentialCreatingTransition:
{
if (withinHysteresis(eventX, eventY)) {
break;
}
// Do not allow transitions from menu headers or submenus
IFigure target = ui.structureView.getFigureAtXY(mouseDownX, mouseDownY, StructureViewUIModel.SOURCE_ONLY);
if ((target instanceof GraphicalParentWidget<?, ?>) && (((GraphicalParentWidget<?, ?>) target).canHaveChildren())) {
break;
}
setMouseState(CreatingTransition);
// Ensures proper default action
selection.deselectAll();
// fall through!
}
case CreatingTransition:
{
dynamicTransition(eventX, eventY);
DesignEditorFrame targetFigure = ui.structureView.getFrameAtXY(eventX, eventY);
if (targetFigure != potentialTarget) {
if (potentialTarget != null) {
potentialTarget.dynamicHighlight(false);
}
potentialTarget = targetFigure;
if (potentialTarget != null) {
potentialTarget.dynamicHighlight(true);
}
}
break;
}
case PotentialSelectTransition:
{
if (withinHysteresis(eventX, eventY)) {
break;
}
handleMousePressed(StructureViewUIModel.NO_TRANSITION);
switch(getMouseState()) {
case PotentialMovingFrame:
{
setMouseState(MovingFrames);
updateDynamicMove(eventX, eventY, false);
break;
}
case PotentialSelectingFrames:
{
setMouseState(SelectingFrames);
updateDynamicSelectionArea(eventX, eventY);
break;
}
case PotentialCreatingTransition:
{
setMouseState(CreatingTransition);
dynamicTransition(eventX, eventY);
break;
}
}
break;
}
case PotentialToggleTransition:
{
if (withinHysteresis(eventX, eventY)) {
break;
}
handleMousePressed(StructureViewUIModel.NO_TRANSITION);
setMouseState(TogglingSelection);
updateDynamicSelectionArea(eventX, eventY);
break;
}
case PotentialChangeTarget:
{
if (withinHysteresis(eventX, eventY)) {
break;
}
setMouseState(ChangingTarget);
Point start = hitTransition.getStart();
hitTransition.setVisible(false);
double zoom = ui.getZoom();
double startX = start.x * zoom;
double startY = start.y * zoom;
ensureDynamicTransition(PrecisionUtilities.round(startX), PrecisionUtilities.round(startY));
// fall through!
}
case ChangingTarget:
{
dynamicTransitionTarget(eventX, eventY);
DesignEditorFrame targetFigure = ui.structureView.getFrameAtXY(eventX, eventY);
if (targetFigure != potentialTarget) {
if (potentialTarget != null) {
potentialTarget.dynamicHighlight(false);
}
potentialTarget = targetFigure;
if (potentialTarget != null) {
potentialTarget.dynamicHighlight(true);
}
}
break;
}
case PotentialChangeSource:
{
if (withinHysteresis(eventX, eventY)) {
break;
}
setMouseState(ChangingSource);
hitTransition.setVisible(false);
ensureDynamicTransition(mouseDownX, mouseDownY);
Point endPt = hitTransition.getEnd();
double zoom = ui.getZoom();
double endX = endPt.x * zoom;
double endY = endPt.y * zoom;
dynamicTransitionTarget(PrecisionUtilities.round(endX), PrecisionUtilities.round(endY));
break;
}
case ChangingSource:
{
dynamicTransitionSource(eventX, eventY);
GraphicalSource<?> sourceFigure = ui.structureView.getSourceAtXY(eventX, eventY);
InteractionFigure drawLayer = ui.getViewEditor().getInteractionFigure();
if (sourceFigure != null) {
drawLayer.setCursor(WindowUtil.getCursor(WindowUtil.DRAW_CURSOR));
} else {
drawLayer.setCursor(WindowUtil.getCursor(WindowUtil.SELECT_CURSOR));
}
break;
}
case PotentialDuplicatingFrame:
{
if (withinHysteresis(eventX, eventY)) {
break;
}
duplicatingDynamic = new ArrayList<RectangleFigure>();
//populate this from selection state
double zoom = ui.getZoom();
Iterator<DesignEditorFrame> selectedFrames = selection.getSelectedFrameFigures();
while (selectedFrames.hasNext()) {
RectangleFigure rect = new RectangleFigure();
DesignEditorFrame currFrame = selectedFrames.next();
//set size of new rectangle object
Rectangle frameSize = currFrame.getBounds();
frameSize.height = PrecisionUtilities.round(frameSize.height / zoom);
frameSize.width = PrecisionUtilities.round(frameSize.width / zoom);
frameSize.x = PrecisionUtilities.round(frameSize.x * zoom);
frameSize.y = PrecisionUtilities.round(frameSize.y * zoom);
rect.setBounds(frameSize);
//add new rectangle object to the array list
duplicatingDynamic.add(rect);
//display the new rectangle object
showSelectionArea(rect);
}
setMouseState(DuplicatingFrames);
// fall through!
}
case DuplicatingFrames:
{
updateDynamicDuplicate(eventX, eventY);
break;
}
}
// Repeating timer for causing events to repeat.
if ((updateDelta.x != 0) || (updateDelta.y != 0)) {
if (rootFigure == null) {
rootFigure = ui.getViewEditor().getInteractionFigure();
}
stopMouseDragTimer = false;
// Determine the new point the mouse "moved" too.
mouseDragTask.setNextMousePosition(eventX + updateDelta.x, eventY + updateDelta.y, button, state);
// Queue the event for 0.1 sec.
WindowUtil.GLOBAL_DISPLAY.timerExec(100, mouseDragTask);
}
}
lastX = eventX;
lastY = eventY;
cleanup();
return goForward;
}
use of edu.cmu.cs.hcii.cogtool.view.StandardDrawingEditor in project cogtool by cogtool.
the class FrameEditorMouseState method dealWithMouseDragged.
/**
* Parameterized mouse drags so they can be scaled programatically.
*
* Handles mouse drags: moves the viewable area as needed
*
* @param figure ignored
* @param mouseX the location the mouse is pointing to
* @param mouseY the location the mouse is pointing to
* @param button the buttons pressed
* @param state the modifiers being held down
*/
@Override
protected boolean dealWithMouseDragged(IFigure figure, int button, int mouseX, int mouseY, int state) {
boolean goForward = super.dealWithMouseDragged(figure, button, mouseX, mouseY, state);
if (goForward && isMouseDownValid) {
// Get the StandardEditor for handling visuals & scrolling
StandardDrawingEditor editor = ui.getViewEditor();
// Update VIEW to ensure mouse point is visible.
// If outside of the visible canvas, up-click should cancel!
stopMouseDragTimer = true;
stopDynamic = editor.movePointNearEdge(mouseX, mouseY, updateDelta);
double zoom = ui.getZoom();
// The current mouse down position (scaled)
double currentScaledX = mouseX / zoom;
double currentScaledY = mouseY / zoom;
Iterator<FrameEltSelnFig<?>> selectedEltFigs = selection.getSelectedFigures();
InteractionFigure drawLayer = ui.getViewEditor().getInteractionFigure();
// Else this is a new widget
switch(getMouseState()) {
// Perform move-related states
case PotentialMovingWidget:
case PotentialMovingSelection:
{
if (withinHysteresis(mouseX, mouseY)) {
return true;
}
ui.hideNondynamicSupport(false);
prevCursor = drawLayer.getCursor();
drawLayer.setCursor(SELECT_CURSOR);
setMouseState(MovingWidgets);
// fall through!
}
case MovingWidgets:
{
dynamicMoveWidgets(selectedEltFigs, currentScaledX, currentScaledY);
ui.repaintEditor();
break;
}
case PotentialReorderWidget:
{
if (withinHysteresis(mouseX, mouseY)) {
return true;
}
prevCursor = drawLayer.getCursor();
ui.hideNondynamicSupport(false, false);
setUpReorderFigures();
prevCursor = drawLayer.getCursor();
drawLayer.setCursor(SELECT_CURSOR);
setMouseState(ReorderWidget);
// fall through!
}
case ReorderWidget:
{
dynamicReorderWidget(mouseX, mouseY, false);
break;
}
case PotentialResizingWidget:
{
if (withinHysteresis(mouseX, mouseY)) {
return true;
}
ui.hideNondynamicSupport(true);
// Iterate through selected widgets XYZZY openChildren in a loop???
while (selectedEltFigs.hasNext()) {
FrameEltSelnFig<?> gw = selectedEltFigs.next();
if (gw instanceof GraphicalTraversableWidget<?>) {
if (gw instanceof GraphicalChildWidget<?, ?>) {
((GraphicalChildWidget<?, ?>) gw).getParentFigure().openChildren();
}
}
}
setMouseState(ResizingWidget);
// fall through!
}
// Perform a drag resize of selected widget
case ResizingWidget:
{
dynamicResizeWidgets(selectedEltFigs, currentScaledX, currentScaledY);
ui.repaintEditor();
break;
}
// Create a new widget
case PotentialCreatingWidget:
{
if (withinHysteresis(mouseX, mouseY)) {
return true;
}
setMouseState(CreatingWidget);
// fall through!
}
case CreatingWidget:
{
redrawTemporaryWidget(currentScaledX, currentScaledY, false);
break;
}
// Sweeping a region for toggling selection
case PotentialTogglingSelection:
{
if (withinHysteresis(mouseX, mouseY)) {
return true;
}
setMouseState(TogglingSelection);
// fall through!
}
case TogglingSelection:
{
redrawTemporaryWidget(currentScaledX, currentScaledY, true);
break;
}
case PotentialDuplicatingWidget:
{
if (withinHysteresis(mouseX, mouseY)) {
return true;
}
ui.hideNondynamicSupport(false, false);
duplicatingDynamic = new ArrayList<RectangleFigure>();
Iterator<FrameEltSelnFig<?>> selectedFigs = selection.getSelectedFigures();
while (selectedFigs.hasNext()) {
FrameEltSelnFig<?> currFig = selectedFigs.next();
if (currFig instanceof FrameEltGroupHalo) {
showSelectionArea(new RectangleFigure(), currFig.getBounds());
} else if (!(currFig instanceof GraphicalChildWidget<?, ?>)) {
Rectangle widgetBds = new Rectangle(currFig.getBounds());
// Must scale widget figure's bounds to zoom factor
widgetBds.height = PrecisionUtilities.round(widgetBds.height * zoom);
widgetBds.width = PrecisionUtilities.round(widgetBds.width * zoom);
widgetBds.x = PrecisionUtilities.round(widgetBds.x * zoom);
widgetBds.y = PrecisionUtilities.round(widgetBds.y * zoom);
//display the new rectangle object
showSelectionArea(new RectangleFigure(), widgetBds);
}
}
setMouseState(DuplicatingWidgets);
// fall through!
}
case DuplicatingWidgets:
{
updateDynamicDuplicate(mouseX, mouseY);
break;
}
case PotentialInsertDuplicateWidget:
{
if (withinHysteresis(mouseX, mouseY)) {
return true;
}
ui.hideNondynamicSupport(false, false);
prevCursor = drawLayer.getCursor();
setUpReorderFigures();
prevCursor = drawLayer.getCursor();
drawLayer.setCursor(DRAW_CURSOR);
setMouseState(InsertDuplicateWidget);
// fall through!
}
case InsertDuplicateWidget:
{
dynamicReorderWidget(mouseX, mouseY, true);
break;
}
case PotentialMovingGridButtons:
{
if (withinHysteresis(mouseX, mouseY)) {
return true;
}
GraphicalWidget<?> gw = ui.getPotentialFigureOwner();
GridButton owner = (GridButton) gw.getModel();
DoublePoint start = owner.getShape().getOrigin();
GridButtonGroup gbg = (GridButtonGroup) owner.getParentGroup();
movedGridButtons = gbg.getMovedButtons(moveIsVertical, start.x, start.y);
minX = start.x - owner.getHorizSpace();
minY = start.y - owner.getVertSpace();
prevCursor = drawLayer.getCursor();
if (moveIsVertical) {
drawLayer.setCursor(MOVE_VERT_CURSOR);
} else {
drawLayer.setCursor(MOVE_HORIZ_CURSOR);
}
setMouseState(MovingGridButtons);
// fall through!
}
case MovingGridButtons:
{
dynamicMoveGridButtons(currentScaledX, currentScaledY);
break;
}
}
// Repeating timer for causing events to repeat.
if ((updateDelta.x != 0) || (updateDelta.y != 0)) {
if (rootFigure == null) {
rootFigure = ui.getViewEditor().getInteractionFigure();
}
stopMouseDragTimer = false;
// Determine the new point the mouse "moved" too.
mouseDragTask.setNextMousePosition(mouseX + updateDelta.x, mouseY + updateDelta.y, button, state);
// Queue the event for 0.1 sec.
WindowUtil.GLOBAL_DISPLAY.timerExec(100, mouseDragTask);
}
}
lastX = mouseX;
lastY = mouseY;
updateDynamic();
return goForward;
}
use of edu.cmu.cs.hcii.cogtool.view.StandardDrawingEditor in project cogtool by cogtool.
the class DesignEditorUI method ensureRectIsVisible.
protected void ensureRectIsVisible(Rectangle frameBounds) {
resetVisibleArea();
StandardDrawingEditor e = view.getEditor();
org.eclipse.swt.graphics.Rectangle visibleBounds = e.getVisibleBounds();
double scale = structureView.getZoom();
double right = frameBounds.x + frameBounds.width;
double bottom = frameBounds.y + frameBounds.height;
int frameX = PrecisionUtilities.round(frameBounds.x * scale);
int frameY = PrecisionUtilities.round(frameBounds.y * scale);
int frameWidth = PrecisionUtilities.round(right * scale) - frameX;
int frameHeight = PrecisionUtilities.round(bottom * scale) - frameY;
int newOriginX;
int newOriginY;
// If possible, move the origin to contain the frame
if (visibleBounds.width >= frameWidth) {
if (frameX < visibleBounds.x) {
newOriginX = frameX;
} else {
newOriginX = visibleBounds.x;
int frameRight = frameX + frameWidth;
int visibleRight = visibleBounds.x + visibleBounds.width;
if (frameRight > visibleRight) {
newOriginX += (frameRight - visibleRight);
}
}
} else {
// Otherwise, center the frame horizontally
newOriginX = frameX + (frameWidth / 2) - (visibleBounds.width / 2);
}
// If possible, move the origin to contain the frame
if (visibleBounds.height >= frameHeight) {
if (frameY < visibleBounds.y) {
newOriginY = frameY;
} else {
newOriginY = visibleBounds.y;
int frameBottom = frameY + frameHeight;
int visibleBottom = visibleBounds.y + visibleBounds.height;
if (frameBottom > visibleBottom) {
newOriginY += (frameBottom - visibleBottom);
}
}
} else {
// Otherwise, use the top of the frame
newOriginY = frameY;
}
e.setScrollOrigin(newOriginX, newOriginY);
}
use of edu.cmu.cs.hcii.cogtool.view.StandardDrawingEditor in project cogtool by cogtool.
the class DesignEditorUI method resetVisibleArea.
// createTransitionSelectionHandler
public void resetVisibleArea() {
StandardDrawingEditor e = view.getEditor();
e.getLWS().getUpdateManager().performUpdate();
DoubleSize extent = structureView.getPreferredSize();
e.setMinVisibleArea(PrecisionUtilities.round(extent.width), PrecisionUtilities.round(extent.height), false);
}
Aggregations