Search in sources :

Example 61 with IListenerAction

use of edu.cmu.cs.hcii.cogtool.util.IListenerAction in project cogtool by cogtool.

the class FrameEditorController method duplicateWidgetsAction.

// duplicateFrameEltGroup
private IListenerAction duplicateWidgetsAction() {
    return new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorUI.DuplicateParameters.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorUI.DuplicateParameters parameters = (FrameEditorUI.DuplicateParameters) prms;
            int elementCount = parameters.selection.getElementSelectionCount();
            // If selection is non zero, copy widgets
            if (elementCount > 0) {
                Map<IWidget, IWidget> widgetCopies = new LinkedHashMap<IWidget, IWidget>();
                final Map<FrameElementGroup, FrameElementGroup> groupCopies = new LinkedHashMap<FrameElementGroup, FrameElementGroup>();
                widgetSituator.reset(widgetCopies, groupCopies);
                Set<FrameElement> selectedElements = getSelectedElements(parameters.selection, elementLevelComparator);
                Iterator<FrameElement> elements = selectedElements.iterator();
                // Iterate through the widgets and duplicate.
                while (elements.hasNext()) {
                    FrameElement elt = elements.next();
                    if (elt instanceof IWidget) {
                        duplicateWidget((IWidget) elt, parameters.selection, parameters.moveByX, parameters.moveByY);
                    } else if (elt instanceof FrameElementGroup) {
                        duplicateFrameEltGroup((FrameElementGroup) elt, parameters.moveByX, parameters.moveByY);
                    }
                }
                widgetSituator.completeWork();
                final Iterable<? extends IWidget> widgetDuplicates = new ReadOnlyList<IWidget>(new ArrayList<IWidget>(widgetCopies.values()));
                Iterator<? extends IWidget> copiedWidgets = widgetDuplicates.iterator();
                Set<GridButtonGroup> dupGridGroups = new HashSet<GridButtonGroup>();
                while (copiedWidgets.hasNext()) {
                    IWidget widgetCopy = copiedWidgets.next();
                    // Warning: it is important that each widget be added
                    // to the frame *before* we make the next widget name
                    // unique or we can end up with non-unique names.
                    makeWidgetNameUnique(widgetCopy);
                    model.addWidget(widgetCopy);
                    if (widgetCopy instanceof GridButton) {
                        GridButtonGroup gbg = (GridButtonGroup) widgetCopy.getParentGroup();
                        // for each grid button group
                        if (!dupGridGroups.contains(gbg)) {
                            gbg.recalculateOffsets();
                            dupGridGroups.add(gbg);
                        }
                    }
                }
                Iterator<FrameElementGroup> copiedGroups = groupCopies.values().iterator();
                while (copiedGroups.hasNext()) {
                    FrameElementGroup copiedGroup = copiedGroups.next();
                    // Ensure name is unique, then add to frame immediately
                    // Otherwise, it would be possible to generate presumed
                    // unique names that weren't.
                    makeEltGroupNameUnique(copiedGroup);
                    model.addEltGroup(copiedGroup);
                }
                DemoStateManager.IDesignUndoableEdit edit = new DemoStateManager.InvalidatingEdit(FrameEditorLID.Duplicate, demoStateMgr) {

                    @Override
                    public String getPresentationName() {
                        return DUPLICATE_WIDGETS;
                    }

                    @Override
                    public void redo() {
                        super.redo();
                        Iterator<? extends IWidget> addCopies = widgetDuplicates.iterator();
                        while (addCopies.hasNext()) {
                            IWidget widgetCopy = addCopies.next();
                            model.addWidget(widgetCopy);
                        }
                        Iterator<FrameElementGroup> copiedGroups = groupCopies.values().iterator();
                        while (copiedGroups.hasNext()) {
                            model.addEltGroup(copiedGroups.next());
                        }
                        demoStateMgr.noteWidgetsEdit(widgetDuplicates, this);
                    }

                    @Override
                    public void undo() {
                        super.undo();
                        Iterator<? extends IWidget> removeCopies = widgetDuplicates.iterator();
                        while (removeCopies.hasNext()) {
                            IWidget widgetCopy = removeCopies.next();
                            model.removeWidget(widgetCopy);
                        }
                        Iterator<FrameElementGroup> copiedGroups = groupCopies.values().iterator();
                        while (copiedGroups.hasNext()) {
                            model.removeEltGroup(copiedGroups.next());
                        }
                        demoStateMgr.noteWidgetsEdit(widgetDuplicates, this);
                    }
                };
                demoStateMgr.noteWidgetsEdit(widgetDuplicates, edit);
                undoMgr.addEdit(edit);
                return true;
            }
            // tell user to select something.
            interaction.protestNoSelection();
            return false;
        }
    };
}
Also used : IDesignUndoableEdit(edu.cmu.cs.hcii.cogtool.controller.DemoStateManager.IDesignUndoableEdit) LinkedHashMap(java.util.LinkedHashMap) GridButton(edu.cmu.cs.hcii.cogtool.model.GridButton) IListenerAction(edu.cmu.cs.hcii.cogtool.util.IListenerAction) HashSet(java.util.HashSet) GridButtonGroup(edu.cmu.cs.hcii.cogtool.model.GridButtonGroup) FrameElementGroup(edu.cmu.cs.hcii.cogtool.model.FrameElementGroup) FrameEditorUI(edu.cmu.cs.hcii.cogtool.ui.FrameEditorUI) DoublePoint(edu.cmu.cs.hcii.cogtool.model.DoublePoint) ReadOnlyList(edu.cmu.cs.hcii.cogtool.util.ReadOnlyList) FrameElement(edu.cmu.cs.hcii.cogtool.model.FrameElement) IWidget(edu.cmu.cs.hcii.cogtool.model.IWidget)

Example 62 with IListenerAction

use of edu.cmu.cs.hcii.cogtool.util.IListenerAction in project cogtool by cogtool.

the class FrameEditorController method createSetFrameTemplateAction.

/**
     * Record the Widgets in the clipboard as the template to use
     * when creating new Frames.
     */
private IListenerAction createSetFrameTemplateAction() {
    return new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState seln = (FrameEditorSelectionState) prms;
            // If selection is non zero, copy widgets
            if (seln.getElementSelectionCount() > 0) {
                copyElements(seln, DesignEditorCmd.SAVE_TO_TEMPLATE);
                interaction.setStatusMessage(templateCreated);
                return true;
            }
            // tell user to select something.
            interaction.setStatusMessage(noTemplateWidgets);
            interaction.protestNoSelection();
            return false;
        }
    };
}
Also used : IListenerAction(edu.cmu.cs.hcii.cogtool.util.IListenerAction) FrameEditorSelectionState(edu.cmu.cs.hcii.cogtool.ui.FrameEditorSelectionState)

Example 63 with IListenerAction

use of edu.cmu.cs.hcii.cogtool.util.IListenerAction in project cogtool by cogtool.

the class FrameEditorController method assignActions.

/**
     * Add the listeners for Menu Items, and other LID listeners
     */
@Override
public void assignActions() {
    // get the default actions from Default controller
    super.assignActions();
    // Enable undo & redo
    ui.setAction(FrameEditorLID.Undo, new UndoController.UndoAction(undoMgr, interaction));
    ui.setAction(FrameEditorLID.Redo, new UndoController.RedoAction(undoMgr, interaction));
    // Enable cut copy and paste
    ui.setAction(FrameEditorLID.Paste, createPasteAction());
    ui.setAction(FrameEditorLID.SetFrameTemplate, createSetFrameTemplateAction());
    ui.setAction(FrameEditorLID.ClearFrameTemplate, new AListenerAction() {

        public boolean performAction(Object prms) {
            FrameTemplateSupport.clearFrameTemplate(design);
            return true;
        }
    });
    ui.setAction(FrameEditorLID.Copy, createCopyWidgetAction());
    ui.setAction(FrameEditorLID.Cut, createCutWidgetAction());
    ui.setAction(CogToolLID.CopyPath, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState seln = (FrameEditorSelectionState) prms;
            if (seln.getWidgetSelectionCount() != 1) {
                return false;
            }
            IWidget w = seln.getSelectedIWidgets()[0];
            Object pathObj = w.getAttribute(WidgetAttributes.IMAGE_PATH_ATTR);
            if (!NullSafe.equals(WidgetAttributes.NO_IMAGE, pathObj)) {
                ClipboardUtil.copyTextData((String) pathObj);
            }
            return true;
        }
    });
    ui.setAction(FrameEditorLID.Rename, createInitiateRenameAction());
    ui.setAction(FrameEditorLID.Relabel, createInitiateRelabelAction());
    // Select all.
    ui.setAction(FrameEditorLID.SelectAll, new AListenerAction() {

        public boolean performAction(Object prms) {
            ui.selectAllWidgets();
            return true;
        }
    });
    // Creating a new widget
    // May be called from the menu item, or from mouseState
    ui.setAction(FrameEditorLID.NewWidget, createNewWidgetAction());
    ui.setAction(FrameEditorLID.NewWidgetJustWarn, createNewWidgetExplanationAction());
    // Delete an item.
    // Requires a selection state
    ui.setAction(FrameEditorLID.Delete, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Delete the item / add undo
            return deleteElements(selection);
        }
    });
    // Adjust image/color properties
    ui.setAction(FrameEditorLID.SetBackgroundImage, createSetBackgroundImageAction());
    // Clear the background of an image.
    ui.setAction(FrameEditorLID.RemoveBackgroundImage, new AListenerAction() {

        public boolean performAction(Object prms) {
            // Clear background, by saying use
            // "no" image.
            setBackgroundImage(null, WidgetAttributes.NO_IMAGE);
            return true;
        }
    });
    ui.setAction(FrameEditorLID.CopyImageAsBackground, createCopyImageAsBkgAction());
    ui.setAction(FrameEditorLID.PasteBackgroundImage, createPasteBackgroundImageAction());
    // Set the color of the widgets.
    ui.setAction(FrameEditorLID.SetWidgetColor, newSetWidgetColorAction());
    // Skins!
    ui.setAction(FrameEditorLID.SkinWireFrame, createSetSkinAction(SkinType.WireFrame, FrameEditorLID.SkinWireFrame));
    ui.setAction(FrameEditorLID.SkinMacOSX, createSetSkinAction(SkinType.MacOSX, FrameEditorLID.SkinMacOSX));
    ui.setAction(FrameEditorLID.SkinWinXP, createSetSkinAction(SkinType.WinXP, FrameEditorLID.SkinWinXP));
    ui.setAction(FrameEditorLID.SkinPalm, createSetSkinAction(SkinType.Palm, FrameEditorLID.SkinPalm));
    ui.setAction(CogToolLID.RenderAll, createRenderAllAction(true, CogToolLID.RenderAll));
    ui.setAction(CogToolLID.UnRender, createRenderAllAction(false, CogToolLID.UnRender));
    // Nudge selected widget(s)
    // requires selection
    ui.setAction(FrameEditorLID.NudgeLeft, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Displace left by 1 pixel scaled by
            // the zoom
            double dx = -1.0 / ui.getZoom();
            // Move by the point
            return moveElements(selection, dx, 0.0);
        }
    });
    ui.setAction(FrameEditorLID.NudgeRight, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Move by 1 pixel scaled by zoom right.
            double dx = 1.0 / ui.getZoom();
            return moveElements(selection, dx, 0.0);
        }
    });
    ui.setAction(FrameEditorLID.NudgeUp, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Move up 1 pixel scaled by zoom
            double dy = -1.0 / ui.getZoom();
            return moveElements(selection, 0.0, dy);
        }
    });
    ui.setAction(FrameEditorLID.NudgeDown, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // move down by 1 pixel scaled by zoom
            double dy = 1.0 / ui.getZoom();
            return moveElements(selection, 0.0, dy);
        }
    });
    // Align selected widgets
    ui.setAction(FrameEditorLID.AlignTop, new ElementAlignmentAction(AlignmentAction.TOP));
    ui.setAction(FrameEditorLID.AlignBottom, new ElementAlignmentAction(AlignmentAction.BOTTOM));
    ui.setAction(FrameEditorLID.AlignLeft, new ElementAlignmentAction(AlignmentAction.LEFT));
    ui.setAction(FrameEditorLID.AlignRight, new ElementAlignmentAction(AlignmentAction.RIGHT));
    ui.setAction(FrameEditorLID.AlignCenter, new ElementAlignmentAction(AlignmentAction.CENTER));
    ui.setAction(FrameEditorLID.AlignHorizCenter, new ElementAlignmentAction(AlignmentAction.HORIZ_CENTER));
    ui.setAction(FrameEditorLID.AlignVertCenter, new ElementAlignmentAction(AlignmentAction.VERT_CENTER));
    // Space selected widgets equally
    ui.setAction(FrameEditorLID.SpaceVertically, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Equally space the widgets in the
            // vertical axis.
            final boolean VERTICAL = true;
            return spaceElementsEqually(selection, VERTICAL);
        }
    });
    ui.setAction(FrameEditorLID.SpaceHorizontally, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Equally space the widgets in the
            // horizontal axis.
            final boolean HORIZONTAL = false;
            return spaceElementsEqually(selection, HORIZONTAL);
        }
    });
    // Adjust ordering of selected widget(s)
    ui.setAction(FrameEditorLID.BringToFront, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            CompoundUndoableEdit editSequence = new CompoundUndoableEdit(BRING_TO_FRONT, FrameEditorLID.BringToFront);
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Get the list of selected widgets
            // Keep them in the same level ordering
            // they started in
            IWidget[] selected = getSelectedWidgets(selection, Widget.WidgetLevelComparator.ONLY);
            // set the level.
            for (IWidget element : selected) {
                // use MAX Value here
                // adjustWidgetLevel will tell the frame
                // and it will change MAX_VALUE to
                // be the correct number
                adjustWidgetLevel(Integer.MAX_VALUE, element, editSequence, editSequence.getLID());
            }
            editSequence.end();
            // Only add this edit if it is significant
            if (editSequence.isSignificant()) {
                undoMgr.addEdit(editSequence);
            }
            return true;
        }
    });
    ui.setAction(FrameEditorLID.BringForward, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            CompoundUndoableEdit editSequence = new CompoundUndoableEdit(BRING_FORWARD, FrameEditorLID.BringForward);
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Get the list of selected widgets
            // Keep them in the same level ordering
            // they started in
            IWidget[] selected = getSelectedWidgets(selection, Widget.WidgetLevelComparator.ONLY);
            // Fix corner case where all the widgets are
            // stacked downward from the top
            // IE: Prevent the current top most item
            // from moving.
            int maxLevel = model.getWidgets().size() - 1;
            // Traverse the list sorted by level in reverse order
            for (int i = selected.length - 1; i >= 0; i--, maxLevel--) {
                IWidget w = selected[i];
                int widgetLevel = w.getLevel();
                // try to increase it one.
                if (widgetLevel < maxLevel) {
                    adjustWidgetLevel(widgetLevel + 1, w, editSequence, editSequence.getLID());
                }
            }
            editSequence.end();
            // Only add this edit if it is significant
            if (editSequence.isSignificant()) {
                undoMgr.addEdit(editSequence);
            }
            return true;
        }
    });
    ui.setAction(FrameEditorLID.SendBackward, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            CompoundUndoableEdit editSequence = new CompoundUndoableEdit(SEND_BACKWARD, FrameEditorLID.SendBackward);
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Get the list of selected widgets
            // Keep them in the same level ordering
            // they started in
            IWidget[] selected = getSelectedWidgets(selection, Widget.WidgetLevelComparator.ONLY);
            // Fix corner case where all the widgets are
            // stacked upward from level 0
            int minLevel = 0;
            for (int i = 0; i < selected.length; i++, minLevel++) {
                IWidget w = selected[i];
                int widgetLevel = w.getLevel();
                // move the level down by 1
                if (widgetLevel > minLevel) {
                    adjustWidgetLevel(widgetLevel - 1, w, editSequence, editSequence.getLID());
                }
            }
            editSequence.end();
            // Only add this edit if it is significant
            if (editSequence.isSignificant()) {
                undoMgr.addEdit(editSequence);
            }
            return true;
        }
    });
    ui.setAction(FrameEditorLID.SendToBack, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            CompoundUndoableEdit editSequence = new CompoundUndoableEdit(SEND_TO_BACK, FrameEditorLID.SendToBack);
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Get the list of selected widgets
            // Keep them in the same level ordering
            // they started in
            IWidget[] selected = getSelectedWidgets(selection, Widget.WidgetLevelComparator.ONLY);
            // in the correct order
            for (int i = selected.length - 1; i >= 0; i--) {
                // try to move all towards 0.
                adjustWidgetLevel(0, selected[i], editSequence, editSequence.getLID());
            }
            editSequence.end();
            // Only add this edit if it is significant
            if (editSequence.isSignificant()) {
                undoMgr.addEdit(editSequence);
            }
            return true;
        }
    });
    // Mouse operations on widgets
    ui.setAction(FrameEditorLID.MoveWidgets, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorUI.MoveParameters.class;
        }

        public boolean performAction(Object prms) {
            // Get the move parameters.
            FrameEditorUI.MoveParameters movePrms = (FrameEditorUI.MoveParameters) prms;
            if (movePrms != null) {
                return moveElements(movePrms.selection, movePrms.moveByX, movePrms.moveByY, movePrms.moveAsGroup);
            }
            return false;
        }
    });
    ui.setAction(FrameEditorLID.Reorder, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorUI.ReorderWidgetParameters.class;
        }

        public boolean performAction(Object prms) {
            // Get the parameters.
            FrameEditorUI.ReorderWidgetParameters rPrms = (FrameEditorUI.ReorderWidgetParameters) prms;
            if (rPrms != null) {
                if (rPrms.parent == null) {
                    return reorderWidget(rPrms.reorderWidget, rPrms.widgetGroup, rPrms.insertIndex);
                }
                return reorderChildWidget((ChildWidget) rPrms.reorderWidget, rPrms.widgetGroup, rPrms.insertIndex, rPrms.parent);
            }
            return false;
        }
    });
    ui.setAction(FrameEditorLID.InsertDuplicate, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorUI.InsertDuplicateParameters.class;
        }

        public boolean performAction(Object prms) {
            // Get the parameters.
            FrameEditorUI.InsertDuplicateParameters iPrms = (FrameEditorUI.InsertDuplicateParameters) prms;
            if (iPrms != null) {
                return insertDuplicateWidget(iPrms.reorderWidget, iPrms.widgetGroup, iPrms.insertIndex, iPrms.parent, iPrms.moveByX, iPrms.moveByY);
            }
            return false;
        }
    });
    ui.setAction(FrameEditorLID.ResizeWidgets, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorUI.ResizeParameters.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorUI.ResizeParameters resizePrms = (FrameEditorUI.ResizeParameters) prms;
            if (prms != null) {
                // Resize the frame elements based on prms
                return resizeElements(resizePrms.oldX, resizePrms.oldY, resizePrms.newX, resizePrms.newY, resizePrms.ratioX, resizePrms.ratioY, resizePrms.selection);
            }
            return false;
        }
    });
    // Change properties of selected widget(s)
    ui.setAction(FrameEditorLID.ChangeShapeProperty, createChangeShapeAction());
    // Change the widget title.
    // The title is non unique.
    ui.setAction(FrameEditorLID.ChangeTitleProperty, createChangeTitlePropertyAction());
    ui.setAction(FrameEditorLID.ChangeAuxTextProperty, createChangeAuxTextPropertyAction());
    // Change the name. This requires a UNIQUE name.
    // Only one selected widget is expected.
    ui.setAction(DesignEditorLID.RenameFrame, new IListenerAction() {

        public Class<?> getParameterClass() {
            return DesignEditorUI.FrameRenameParameters.class;
        }

        public boolean performAction(Object prms) {
            DesignEditorUI.FrameRenameParameters p = (DesignEditorUI.FrameRenameParameters) prms;
            return updateFrameName(p.frame, p.newName);
        }
    });
    // Change the name. This requires a UNIQUE name.
    // Only one selected widget is expected.
    ui.setAction(FrameEditorLID.ChangeNameProperty, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorUI.ActionStringParameters.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorUI.ActionStringParameters p = (FrameEditorUI.ActionStringParameters) prms;
            // Check selection count
            int numWidgets = p.selection.getWidgetSelectionCount();
            if (numWidgets == 0) {
                interaction.protestNoSelection();
            } else if (numWidgets > 1) {
                interaction.protestTooManyWidgets();
            } else {
                IWidget[] selectedWidget = p.selection.getSelectedIWidgets();
                // Update widget's name
                return updateWidgetName(selectedWidget[0], p.newString);
            }
            return false;
        }
    });
    // Change the type of the widget.
    // TODO: this needs to be extended to invalidate transitions (e.g., if changed to Noninteractive)
    ui.setAction(FrameEditorLID.ChangeTypeProperty, createChangeTypeAction());
    ui.setAction(FrameEditorLID.SetRenderSkin, createSetRenderSkinAction());
    // Set the widget image property.
    ui.setAction(FrameEditorLID.SetImageProperty, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            // Apply to all selected items.
            Iterator<IWidget> selected = selection.getSelectedWidgetsIterator();
            // Prompt user for the new file
            String imageURL = interaction.selectImageFile();
            // Check if the user canceled the dialog
            if (imageURL != null) {
                try {
                    byte[] imageData = GraphicsUtil.loadImageFromFile(imageURL);
                    setWidgetImages(selected, imageData, imageURL);
                    return true;
                } catch (IOException e) {
                    // Tell the user if there was a
                    // problem reading the file.
                    interaction.protestUnreadableFile();
                }
            }
            return false;
        }
    });
    // Clear the image stored on a widget.
    ui.setAction(FrameEditorLID.RemoveImageProperty, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorSelectionState.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorSelectionState selection = (FrameEditorSelectionState) prms;
            Iterator<IWidget> selected = selection.getSelectedWidgetsIterator();
            // Remove all the images
            setWidgetImages(selected, null, WidgetAttributes.NO_IMAGE);
            return true;
        }
    });
    // capture the image under a widget..
    // IE: get its background.
    ui.setAction(FrameEditorLID.CaptureImageProperty, captureImageAction());
    ui.setAction(FrameEditorLID.Duplicate, duplicateWidgetsAction());
    ui.setAction(CogToolLID.SetAttribute, new IListenerAction() {

        public Class<?> getParameterClass() {
            return UI.SetAttributeParameters.class;
        }

        public boolean performAction(Object prms) {
            UI.SetAttributeParameters saprms = (UI.SetAttributeParameters) prms;
            return frameSetAttribute(saprms.target, saprms.attrName, saprms.value, undoMgr);
        }
    });
    ui.setAction(FrameEditorLID.SetSpeakerText, new IListenerAction() {

        public Class<?> getParameterClass() {
            return String.class;
        }

        public boolean performAction(Object prms) {
            return setSpeakerText((String) prms);
        }
    });
    ui.setAction(FrameEditorLID.SetSpeakerTime, new IListenerAction() {

        public Class<?> getParameterClass() {
            return Double.class;
        }

        public boolean performAction(Object prms) {
            double newTime = ((Double) prms).doubleValue();
            return setSpeakerDuration(newTime);
        }
    });
    ui.setAction(FrameEditorLID.AddDesignDevices, new AListenerAction() {

        public boolean performAction(Object prms) {
            return DesignCmd.addDevices(project, design, interaction);
        }
    });
    ui.setAction(FrameEditorLID.Group, createGroupElementsAction());
    ui.setAction(FrameEditorLID.Ungroup, createUngroupElementsAction());
    ui.setAction(FrameEditorLID.RenameEltGroup, new IListenerAction() {

        public Class<?> getParameterClass() {
            return FrameEditorUI.EltGroupRenameParameters.class;
        }

        public boolean performAction(Object prms) {
            FrameEditorUI.EltGroupRenameParameters p = (FrameEditorUI.EltGroupRenameParameters) prms;
            return renameEltGroup(p.eltGroup, p.newName);
        }
    });
    ui.setAction(FrameEditorLID.SetRemoteLabelText, createSetRemoteLabelTextAction());
    ui.setAction(FrameEditorLID.SetRemoteLabelType, createSetRemoteLabelTypeAction());
}
Also used : IListenerAction(edu.cmu.cs.hcii.cogtool.util.IListenerAction) UI(edu.cmu.cs.hcii.cogtool.ui.UI) ZoomableUI(edu.cmu.cs.hcii.cogtool.ui.ZoomableUI) FrameEditorUI(edu.cmu.cs.hcii.cogtool.ui.FrameEditorUI) DesignEditorUI(edu.cmu.cs.hcii.cogtool.ui.DesignEditorUI) EmptyIterator(edu.cmu.cs.hcii.cogtool.util.EmptyIterator) Iterator(java.util.Iterator) FrameEditorSelectionState(edu.cmu.cs.hcii.cogtool.ui.FrameEditorSelectionState) AListenerAction(edu.cmu.cs.hcii.cogtool.util.AListenerAction) CompoundUndoableEdit(edu.cmu.cs.hcii.cogtool.util.CompoundUndoableEdit) IOException(java.io.IOException) FrameEditorUI(edu.cmu.cs.hcii.cogtool.ui.FrameEditorUI) DesignEditorUI(edu.cmu.cs.hcii.cogtool.ui.DesignEditorUI) ChildWidget(edu.cmu.cs.hcii.cogtool.model.ChildWidget) IWidget(edu.cmu.cs.hcii.cogtool.model.IWidget)

Example 64 with IListenerAction

use of edu.cmu.cs.hcii.cogtool.util.IListenerAction in project cogtool by cogtool.

the class ProjectController method createAddDesignDevicesAction.

// createNewDesignAction2
protected IListenerAction createAddDesignDevicesAction() {
    return new IListenerAction() {

        public Class<?> getParameterClass() {
            return DesignSelectionState.class;
        }

        public boolean performAction(Object prms) {
            DesignSelectionState selection = (DesignSelectionState) prms;
            Design design = selection.getSelectedDesign();
            if (design != null) {
                return DesignCmd.addDevices(project, design, interaction);
            }
            interaction.protestNoSelection();
            return true;
        }
    };
}
Also used : Design(edu.cmu.cs.hcii.cogtool.model.Design) ITaskDesign(edu.cmu.cs.hcii.cogtool.model.Project.ITaskDesign) IListenerAction(edu.cmu.cs.hcii.cogtool.util.IListenerAction) DesignSelectionState(edu.cmu.cs.hcii.cogtool.ui.DesignSelectionState)

Example 65 with IListenerAction

use of edu.cmu.cs.hcii.cogtool.util.IListenerAction in project cogtool by cogtool.

the class ProjectController method createDuplicateTaskAppAction.

protected IListenerAction createDuplicateTaskAppAction() {
    return new IListenerAction() {

        public Class<?> getParameterClass() {
            return ProjectUI.MoveCopyTaskApplicationParms.class;
        }

        public boolean performAction(Object p) {
            if (p != null) {
                ProjectUI.MoveCopyTaskApplicationParms parms = (ProjectUI.MoveCopyTaskApplicationParms) p;
                // Must have selected tasks and design
                if ((parms.design == null) || (parms.fromTask == null) || (parms.toTask == null)) {
                    interaction.protestNoSelection();
                    return false;
                }
                final AUndertaking fromTask = parms.fromTask;
                final AUndertaking toTask = parms.toTask;
                TaskApplication taskApp = project.getTaskApplication(fromTask, parms.design);
                if (taskApp == null) {
                    interaction.protestNoTaskApplication();
                    return false;
                }
                final TaskApplication oldTaskApp = project.removeTaskApplication(parms.toTask, parms.design);
                final TaskApplication newTaskApp = taskApp.duplicate(toTask, parms.design);
                DemoStateManager demoMgr = DemoStateManager.getStateManager(project, parms.design);
                project.setTaskApplication(newTaskApp);
                demoMgr.trackEdits(newTaskApp.getDemonstration());
                IUndoableEdit edit = new AUndoableEdit(ProjectLID.DuplicateTaskApplication) {

                    protected boolean recoverMgrs = false;

                    @Override
                    public String getPresentationName() {
                        return DUPLICATE_TASKAPP;
                    }

                    @Override
                    public void redo() {
                        super.redo();
                        if (oldTaskApp != null) {
                            project.removeTaskApplication(oldTaskApp);
                        }
                        project.setTaskApplication(newTaskApp);
                        recoverMgrs = false;
                    }

                    @Override
                    public void undo() {
                        super.undo();
                        project.removeTaskApplication(newTaskApp);
                        if (oldTaskApp != null) {
                            project.setTaskApplication(oldTaskApp);
                        }
                        recoverMgrs = true;
                    }

                    @Override
                    public void die() {
                        if (recoverMgrs) {
                            recoverManagers(newTaskApp);
                        }
                    }
                };
                undoMgr.addEdit(edit);
            }
            return true;
        }
    };
}
Also used : ProjectUI(edu.cmu.cs.hcii.cogtool.ui.ProjectUI) IListenerAction(edu.cmu.cs.hcii.cogtool.util.IListenerAction) AUndertaking(edu.cmu.cs.hcii.cogtool.model.AUndertaking) AUndoableEdit(edu.cmu.cs.hcii.cogtool.util.AUndoableEdit) TaskApplication(edu.cmu.cs.hcii.cogtool.model.TaskApplication) IUndoableEdit(edu.cmu.cs.hcii.cogtool.util.IUndoableEdit)

Aggregations

IListenerAction (edu.cmu.cs.hcii.cogtool.util.IListenerAction)94 AUndertaking (edu.cmu.cs.hcii.cogtool.model.AUndertaking)30 Design (edu.cmu.cs.hcii.cogtool.model.Design)29 ITaskDesign (edu.cmu.cs.hcii.cogtool.model.Project.ITaskDesign)29 DoublePoint (edu.cmu.cs.hcii.cogtool.model.DoublePoint)23 ProjectSelectionState (edu.cmu.cs.hcii.cogtool.ui.ProjectSelectionState)23 AUndoableEdit (edu.cmu.cs.hcii.cogtool.util.AUndoableEdit)21 CompoundUndoableEdit (edu.cmu.cs.hcii.cogtool.util.CompoundUndoableEdit)19 TaskApplication (edu.cmu.cs.hcii.cogtool.model.TaskApplication)17 IOException (java.io.IOException)14 RcvrIOException (edu.cmu.cs.hcii.cogtool.util.RcvrIOException)13 TaskSelectionState (edu.cmu.cs.hcii.cogtool.ui.TaskSelectionState)12 Frame (edu.cmu.cs.hcii.cogtool.model.Frame)10 IWidget (edu.cmu.cs.hcii.cogtool.model.IWidget)10 DesignSelectionState (edu.cmu.cs.hcii.cogtool.ui.DesignSelectionState)10 FrameEditorSelectionState (edu.cmu.cs.hcii.cogtool.ui.FrameEditorSelectionState)9 FrameSelectionState (edu.cmu.cs.hcii.cogtool.ui.FrameSelectionState)9 TaskGroup (edu.cmu.cs.hcii.cogtool.model.TaskGroup)8 FrameEditorUI (edu.cmu.cs.hcii.cogtool.ui.FrameEditorUI)8 File (java.io.File)8