use of edu.cmu.cs.hcii.cogtool.model.FrameElement in project cogtool by cogtool.
the class DesignEditorCmd method pasteFrameElementGroup.
private static int pasteFrameElementGroup(FrameElementGroup eltGroup, Design design, int currentDeviceTypes, Frame frame, DemoStateManager mgr, IUndoableEditSequence editSeq, Set<FrameElementGroup> groups, Set<IWidget> addedRemoteLabels) {
int numPasted = 0;
makeEltGroupNameUnique(eltGroup, frame);
groups.add(eltGroup);
groups.addAll(eltGroup.getEltGroups());
checkForRemoteLabel(eltGroup, addedRemoteLabels);
Iterator<FrameElement> elementsToAdd = eltGroup.iterator();
while (elementsToAdd.hasNext()) {
FrameElement eltToAdd = elementsToAdd.next();
if (eltToAdd instanceof IWidget) {
numPasted += pasteWidget((IWidget) eltToAdd, design, currentDeviceTypes, frame, mgr, editSeq, groups, addedRemoteLabels);
} else if (eltToAdd instanceof SimpleWidgetGroup) {
numPasted += pasteWidgetGroup((SimpleWidgetGroup) eltToAdd, design, currentDeviceTypes, frame, mgr, editSeq, groups, addedRemoteLabels);
} else if (eltToAdd instanceof FrameElementGroup) {
numPasted += pasteFrameElementGroup((FrameElementGroup) eltToAdd, design, currentDeviceTypes, frame, mgr, editSeq, groups, addedRemoteLabels);
}
}
return numPasted;
}
use of edu.cmu.cs.hcii.cogtool.model.FrameElement in project cogtool by cogtool.
the class FrameEditorInteraction method confirmDeleteElements.
/**
* Delete confirmation method.
*/
public boolean confirmDeleteElements(FrameElement[] elements) {
String msg = "";
// Choose the message plural or singular.
if (elements.length > 1) {
msg = CONFIRM_DELETE_WIDGETS_MSG;
} else {
msg = CONFIRM_DELETE_ONE_WIDGET_MSG;
}
String[] eltNames = new String[elements.length];
for (int i = 0; i < elements.length; i++) {
FrameElement elt = elements[i];
eltNames[i] = elt.getName();
if ((elt instanceof FrameElementGroup) && ((eltNames[i] == null) || eltNames[i].equals(""))) {
eltNames[i] = UNNAMED_WIDGET_GROUP_LABEL;
}
}
return (SWT.OK == WindowUtil.presentConfirmItemsDialog(window, CONFIRM_TITLE, msg, eltNames));
}
use of edu.cmu.cs.hcii.cogtool.model.FrameElement in project cogtool by cogtool.
the class FrameEditorMouseState method handleMousePressed.
/**
* Called on mouse presses
* Determines if the mouse pressed on a resize widget.
* Raises a resizeAlert or a mouseOperations alert.
*
* Alerts contain X,Y coordinates in 1:1 scale.
*/
protected void handleMousePressed(int x, int y, int state) {
ui.view.getEditor().getSWTEditorSubstrate().setFocus();
// Check to see if the pressed event is on the resize handlers.
// Use the ZOOMED scale because the resize widgets are in the
// interaction layer and they're not affected by zoom.
ResizeThumb resize = ui.widgetResizeUnderXY(x, y);
PotentialFigure pWidget = ui.potentialWidgetUnderXY(x, y);
RadioButtonSash sash = ui.radioSashUnderXY(x, y);
// Check to see if the mouse press happened on a resize widget
if (resize != null) {
// Need this because we want the actual AREA,
// not the center of the thumb.
initialResizeArea = ui.getSelectedWidgetArea();
// Set the fixed point of the resize
double fixedX = 0.0;
double fixedY = 0.0;
// Move through the possible types and set the fixed point.
currentResizeHandleType = resize.thumbType;
switch(resize.thumbType) {
case FrameEditorUI.TOP_LEFT:
fixedX = initialResizeArea.x + initialResizeArea.width;
fixedY = initialResizeArea.y + initialResizeArea.height;
break;
case FrameEditorUI.BOTTOM_LEFT:
fixedX = initialResizeArea.x + initialResizeArea.width;
fixedY = initialResizeArea.y;
break;
case FrameEditorUI.TOP_RIGHT:
fixedX = initialResizeArea.x;
fixedY = initialResizeArea.y + initialResizeArea.height;
break;
case FrameEditorUI.BOTTOM_RIGHT:
fixedX = initialResizeArea.x;
fixedY = initialResizeArea.y;
break;
default:
// and this code wasn't modified.
throw new IllegalStateException("Unknown type of Resize Thumb selected");
}
// Specify the fixed resize point.
mouseFixedResizeX = fixedX;
mouseFixedResizeY = fixedY;
// Set the state to "resize" as the next action.
// TODO: Should we implement the other types of resizing?
int nextState = PotentialResizingWidget;
setMouseState(nextState);
// Switch to fast mode rendering for graphical widgets
setWidgetFastRenderMode(true);
} else if (sash != null) {
moveIsVertical = sash.isVertical();
setMouseState(PotentialMovingGridButtons);
} else if (pWidget != null) {
ui.initiateRetitleFigure(pWidget);
} else {
// Get whatever graphical widget under x,y
GraphicalWidget<?> wf = ui.widgetLocatedAtXY(x, y);
MoveHalo halo = ui.moveHaloUnderXY(x, y);
RemoteLinkage linkage = ui.linkageUnderXY(x, y);
GraphicalParentWidget<?, ?> currentParent = null;
// If SHIFT is held, always treat as start of a drag toggle select.
if ((state & InputEvent.SHIFT) != 0) {
setMouseState(PotentialTogglingSelection);
} else if (wf != null) {
IWidget widget = wf.getModel();
SimpleWidgetGroup group = widget.getParentGroup();
lastClickedWidget = widget;
if ((state & platformDuplicateModifierKey()) != 0) {
if (!selection.isElementSelected(widget)) {
selection.setSelectedSelnFig(wf);
}
if ((group != null) && (group.getOrientation() != SimpleWidgetGroup.FREEFORM) && (selection.getWidgetSelectionCount() == 1)) {
setMouseState(PotentialInsertDuplicateWidget);
} else {
setMouseState(PotentialDuplicatingWidget);
}
} else {
if ((group != null) && (group.getOrientation() != SimpleWidgetGroup.FREEFORM)) {
if (!selection.isElementSelected(widget)) {
selection.setSelectedSelnFig(wf);
}
setMouseState(PotentialReorderWidget);
} else // possible move.
if (selection.isSelectionFigureSelected(wf)) {
setMouseState(PotentialMovingSelection);
} else {
selection.setSelectedSelnFig(wf);
setMouseState(PotentialMovingWidget);
}
}
if (wf instanceof GraphicalMenuItem) {
GraphicalMenuItem menuItemFig = (GraphicalMenuItem) wf;
if (menuItemFig.isSubmenu()) {
currentParent = menuItemFig;
} else {
currentParent = menuItemFig.getParentFigure();
}
} else if (wf instanceof GraphicalParentWidget<?, ?>) {
currentParent = (GraphicalParentWidget<?, ?>) wf;
} else if (wf instanceof GraphicalChildWidget<?, ?>) {
currentParent = ((GraphicalChildWidget<?, ?>) wf).getParentFigure();
}
} else if (halo != null) {
if (halo instanceof FrameEltGroupHalo) {
FrameEltGroupHalo groupHalo = (FrameEltGroupHalo) halo;
if ((state & platformDuplicateModifierKey()) != 0) {
if (!selection.isElementSelected(halo.getData())) {
selection.setSelectedSelnFig(groupHalo);
}
setMouseState(PotentialDuplicatingWidget);
} else {
selection.setSelectedSelnFig(groupHalo);
setMouseState(PotentialMovingSelection);
}
} else {
/* if (wf != null) {
IWidget widget = wf.getWidgetModel();
SimpleWidgetGroup group = widget.getParentGroup();
if ((state & platformDuplicateModifierKey()) != 0) {
if (! this.selection.isWidgetSelected(widget)) {
this.selection.setSelectedWidget(wf);
}
if ((group != null) &&
(group.getOrientation() != SimpleWidgetGroup.FREEFORM) &&
(this.selection.getWidgetSelectionCount() == 1))
{
setMouseState(PotentialInsertDuplicateWidget);
}
else {
setMouseState(PotentialDuplicatingWidget);
}
}
else {
setMouseState(PotentialMovingSelection);
}
}
else { */
setMouseState(PotentialMovingSelection);
}
// }
} else if (linkage != null) {
FrameElement owner = linkage.getOwner();
IWidget remoteLabel = linkage.getRemoteLabel();
// Ensure both are selected; if not yet, then set them
// both selected.
FrameEltSelnFig<?> ownerRepresentative = isSomeElementSelected(owner);
if ((!selection.isElementSelected(remoteLabel)) || (ownerRepresentative == null)) {
if (ownerRepresentative == null) {
ownerRepresentative = getRepresentativeElt(owner);
}
selection.setSelectedSelnFig(linkage.getRemoteLabelFigure());
if (ownerRepresentative != null) {
selection.selectSelnFig(ownerRepresentative);
}
}
setMouseState(PotentialMovingSelection);
} else // Otherwise, out in space and SHIFT not held; deselect all and
// prepare to create
{
selection.deselectAll();
setMouseState(PotentialCreatingWidget);
}
ui.hideAllChildren();
if (currentParent != null) {
currentParent.openChildren();
ui.resetVisibleArea();
}
}
}
use of edu.cmu.cs.hcii.cogtool.model.FrameElement in project cogtool by cogtool.
the class FrameEditorSelectionState method getSelectedWidgetsParent.
/**
* If all of the selected items are widgets with the same
* parent SimpleWidgetGroup, return that parent group.
*/
public SimpleWidgetGroup getSelectedWidgetsParent() {
SimpleWidgetGroup parentGroup = null;
Iterator<FrameElement> selectedElts = selectedElements.keySet().iterator();
while (selectedElts.hasNext()) {
FrameElement elt = selectedElts.next();
if (elt instanceof IWidget) {
SimpleWidgetGroup g = ((IWidget) elt).getParentGroup();
// Can't share a parent if one is null
if (g == null) {
return null;
}
// If no parent recorded yet, keep track
if (parentGroup == null) {
parentGroup = g;
} else if (parentGroup != g) {
// if parents don't match, done
return null;
}
} else {
// Can't share a parent if not all selected elts are widgets
return null;
}
}
return parentGroup;
}
use of edu.cmu.cs.hcii.cogtool.model.FrameElement in project cogtool by cogtool.
the class FrameEditorUI method getSelectedWidgetArea.
public DoubleRectangle getSelectedWidgetArea() {
DoubleRectangle r = null;
Iterator<FrameElement> selectedElts = selection.getSelectedElementsIterator();
while (selectedElts.hasNext()) {
FrameElement elt = selectedElts.next();
DoubleRectangle bds = null;
if (elt instanceof IWidget) {
IWidget w = (IWidget) elt;
SimpleWidgetGroup wg = w.getParentGroup();
bds = (wg != null) ? wg.getGroupBounds() : w.getEltBounds();
} else if (elt instanceof FrameElementGroup) {
bds = ((FrameElementGroup) elt).getGroupBounds();
}
if (bds != null) {
if (r == null) {
r = new DoubleRectangle(bds);
} else {
r = r.union(bds);
}
}
}
return r;
}
Aggregations