use of edu.cmu.cs.hcii.cogtool.model.Frame in project cogtool by cogtool.
the class HCIPACmd method getStartFrame.
// addHCIPATasks
protected static Frame getStartFrame(Design d) {
Frame result = null;
Iterator<Frame> frames = d.getFrames().iterator();
Frame f = null;
while (frames.hasNext()) {
f = frames.next();
Set<Transition> transitions = f.getIncidentTransitions();
if (transitions.size() == 0) {
result = f;
}
}
if ((result == null) && (f != null)) {
result = f;
}
return result;
}
use of edu.cmu.cs.hcii.cogtool.model.Frame in project cogtool by cogtool.
the class HCIPACmd method buildActionStepInsert.
protected static void buildActionStepInsert(AUndertaking task, AScriptStep step, Demonstration demo, StringBuilder php) {
int hcipaStep = task.getTaskGroup().getUndertakings().indexOf(task) + 1;
Frame curFrame = step.getCurrentFrame();
TransitionSource src = step.getStepFocus();
String labelAction;
if (src == null) {
labelAction = "None";
} else {
labelAction = quotePHP(quoteSQL(src.getLabel()));
}
int order = demo.getSteps().indexOf(step) + 1;
byte[] bkgImage = curFrame.getBackgroundImage();
if (bkgImage != null) {
ImageData imgData = new ImageData(new ByteArrayInputStream(bkgImage));
bkgImage = GraphicsUtil.convertImageType(imgData, SWT.IMAGE_JPEG);
int imgSize = bkgImage.length;
String imgName = (String) curFrame.getAttribute(WidgetAttributes.IMAGE_PATH_ATTR);
php.append("\t$imgType = \"'image/jpeg'\";\n\t");
php.append("$imgLength = " + imgSize + ";\n\t");
php.append("$bkgImage = '0x' . bin2hex(base64_decode(str_replace(array('.', '_', '-'), array('+', '/', '='), \"");
php.append(Base64.encode(bkgImage));
php.append("\")));\n\n\t");
if ((imgName == null) || NullSafe.equals(WidgetAttributes.NO_IMAGE, imgName)) {
php.append("$imgName = 'null';\n\t");
} else {
php.append("$imgName = \"'\" . mysql_real_escape_string(basename(\n<<<SQL__INSERT__STRING\n");
php.append(imgName);
php.append("\nSQL__INSERT__STRING\n)) . \"'\";\n\n\t");
}
} else {
php.append("\t$imgType = 'null';\n\t");
php.append("$imgLength = 'null';\n\t");
php.append("$bkgImage = 'null';\n\t");
php.append("$imgName = 'null';\n\n\t");
}
php.append("Add_Task_Action($deviceId,\n\t");
php.append(hcipaStep + ",\n\t" + order + ",\n\t");
php.append("$bkgImage,\n\t$imgName,\n\t$imgLength,\n\t$imgType,\n\t");
php.append("\"" + quotePHP(quoteSQL(curFrame.getName())) + "\",\n\t");
php.append("\"" + labelAction + "\");\n\n");
// php.append("$sqlStmt =\n<<<SQL__INSERT__STRING\n\t");
// php.append(SQL_INSERT + "HCIPA_Actions (hcipa_id,\n\thcipa_step,\n\t");
// php.append("hcipa_order,\n\tImage,\n\tImage_Name,\n\tImage_Size,\n\tImage_Type,\n\t");
// php.append("Next_User_Action,\n\tLabel_User_Action)\n\t");
// php.append(SQL_VALUES + " ($deviceId,\n\t" + hcipaStep + ",\n\t" + order + ",\n\t");
// php.append("$bkgImage,\n\t$imgName,\n\t$imgLength,\n\t$imgType,\n\t");
// php.append("'" + quoteSQL(curFrame.getName()) + "',\n\t'" + labelAction + "'");
// php.append(")\n");
// php.append("SQL__INSERT__STRING\n;\n\n\t");
// php.append("mysql_query($sqlStmt);\n\n");
}
use of edu.cmu.cs.hcii.cogtool.model.Frame in project cogtool by cogtool.
the class ImportWebCrawlThread method doneCallback.
/**
* For each page visited and parsed, create a corresponding Frame.
* For each child link, create a corresponding Widget and Transition.
*/
@Override
public void doneCallback() {
// Performed by the main UI thread
try {
// If an exception was thrown during the import, display error here
if (RcvrExceptionHandler.recoverWorkThread(this, interaction)) {
return;
}
if (isCanceled()) {
return;
}
DemoStateManager demoStateMgr = DemoStateManager.getStateManager(project, design);
if (isPaused()) {
DefaultCmd.setAttribute(design, demoStateMgr, WidgetAttributes.PAUSED_WEB_CRAWL_ATTR, importWeb.getURLsToCrawl(), interaction, editSequence);
}
// -1 means that the design already is part of the project
if (insertBeforeIndex != EXISTING_DESIGN) {
ProjectCmd.addNewDesign(project, design, insertBeforeIndex, IMPORT_WEB_DESIGN, editSequence);
}
Collection<PageInfo> crawledURLs = importWeb.getCrawledURLs();
Iterator<PageInfo> pagesVisited = crawledURLs.iterator();
Set<DeviceType> deviceTypes = design.getDeviceTypes();
// Map (Link) IWidget to URL
Map<IWidget, String> neededTransitions = new HashMap<IWidget, String>();
int minFrameWidth = DesignUtil.getFrameMinWidth();
int minFrameHeight = DesignUtil.getFrameMinHeight();
double frameScale = DesignUtil.getFrameScaleFactor();
DesignUtil.IFrameSituator frameSituator = new DesignUtil.ByRowFrameSituator(0.0, 0.0, 16.0, 16.0, minFrameWidth, minFrameHeight, CogToolPref.FRAMES_PER_ROW.getInt(), frameScale);
while (pagesVisited.hasNext()) {
ImportWebURL.ImportPageInfo page = (ImportWebURL.ImportPageInfo) pagesVisited.next();
Frame newFrame = new Frame(page.url, deviceTypes);
knownFrames.put(page.url, newFrame);
if (page.background != null) {
DoubleRectangle bds = new DoubleRectangle(page.bkgImageX, page.bkgImageY, page.bkgImageWidth, page.bkgImageHeight);
newFrame.setBackgroundImage(page.background, bds);
}
int linkCount = 0;
Iterator<URLLabeledLink> links = page.links.iterator();
while (links.hasNext()) {
URLPositionedLink link = (URLPositionedLink) links.next();
// of the page)
if ((Math.round(link.width) == 0.0) || (Math.round(link.height) == 0.0)) {
continue;
}
IWidget linkWidget = new Widget(new DoubleRectangle(link.left, link.top, link.width, link.height), WidgetType.Link);
linkWidget.setName("Widget " + Integer.toString(++linkCount));
linkWidget.setTitle(StringUtil.trimWhitespace(link.getLabel()));
newFrame.addWidget(linkWidget);
if (deviceTypes.contains(DeviceType.Mouse)) {
String linkURL = link.getURL();
Frame targetFrame = knownFrames.get(linkURL);
if (targetFrame != null) {
Transition t = new Transition(linkWidget, targetFrame, buildLinkAction());
IUndoableEdit edit = DesignEditorCmd.addTransition(demoStateMgr, t);
editSequence.addEdit(edit);
} else {
// Have to handle this in the second pass
neededTransitions.put(linkWidget, linkURL);
}
}
}
Frame oldFrame = design.getFrame(newFrame.getName());
if (pruneSameURLs) {
if (oldFrame != null) {
makeFrameNameUnique(newFrame);
}
} else {
// If oldFrame exists, remove but keep incident transitions
if (oldFrame != null) {
Set<Transition> transitions = oldFrame.getIncidentTransitions();
synchronized (transitions) {
// them without upsetting the iterator
for (Transition transition : new ArrayList<Transition>(transitions)) {
DesignEditorCmd.changeTransitionTarget(demoStateMgr, transition, newFrame, editSequence);
}
//transitions=transitions2;
// Can't delete the transitive closure from here...sigh
DesignEditorCmd.deleteFrame(project, design, demoStateMgr, oldFrame, ProjectLID.ImportWebCrawl, editSequence);
}
}
}
frameSituator.situateNextFrame(newFrame);
DesignEditorCmd.addFrame(project, design, demoStateMgr, newFrame, editSequence);
}
// Each entry is IWidget --> URL string
for (Map.Entry<IWidget, String> checkTransition : neededTransitions.entrySet()) {
String transitionURL = checkTransition.getValue();
Frame targetFrame = knownFrames.get(transitionURL);
// processing is done (i.e., added during background processing).
if (targetFrame == null) {
targetFrame = design.getFrame(transitionURL);
}
// May just not be there; can't link if it's not there!
if (targetFrame != null) {
IWidget linkWidget = checkTransition.getKey();
Transition t = new Transition(linkWidget, targetFrame, buildLinkAction());
IUndoableEdit edit = DesignEditorCmd.addTransition(demoStateMgr, t);
editSequence.addEdit(edit);
}
}
editSequence.end();
undoMgr.addEdit(editSequence);
} finally {
// Recover resources.
importWeb.dispose();
super.doneCallback();
}
}
use of edu.cmu.cs.hcii.cogtool.model.Frame in project cogtool by cogtool.
the class FramePropertiesPane method createWidgets.
protected void createWidgets(final View view) {
ListenerIdentifierMap lidMap = view.getLIDMap();
frameNameLabel = new DisplayLabel(this, SWT.NONE);
frameNameLabel.setText(NAME_LABEL);
frameName = new View.PerformActionText(this, SWT.SINGLE | SWT.BORDER) {
@Override
protected void onFocus() {
super.onFocus();
view.getTransmuter().setLIDEnabledState();
}
@Override
protected boolean doChangeAction() {
Frame frame = (Frame) getData();
DesignEditorUI.FrameRenameParameters evt = new DesignEditorUI.FrameRenameParameters(frame, getText());
boolean changed = view.performAction(DesignEditorLID.RenameFrame, evt, true);
if (!changed) {
setText(frame.getName());
}
return changed;
}
};
imagePath = new DisplayLabel(this, SWT.NONE);
imagePath.setText(IMAGE_PATH);
imagePathText = new TextWithEnableFix(this, SWT.SINGLE | SWT.READ_ONLY);
widgetTreeLabel = new DisplayLabel(this, SWT.NONE);
widgetTreeLabel.setText(WIDGETS);
widgetTree = new Tree(this, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
widgetTree.setLinesVisible(true);
widgetUpdater = new TreeItemUpdater.WidgetItemUpdater(widgetTree);
if (CogToolPref.RESEARCH.getBoolean()) {
eltGroupTreeLabel = new DisplayLabel(this, SWT.NONE);
eltGroupTreeLabel.setText(ELEMENT_GROUPS);
eltGroupTree = new Tree(this, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
eltGroupTree.setLinesVisible(true);
eltGroupUpdater = new TreeItemUpdater.EltGroupItemUpdater(eltGroupTree);
implicitGroupTreeLabel = new DisplayLabel(this, SWT.NONE);
implicitGroupTreeLabel.setText(IMPLICIT_GROUPS);
implicitGroupTree = new Tree(this, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
implicitGroupTree.setLinesVisible(true);
implicitGroupUpdater = new TreeItemUpdater.ImplicitGroupItemUpdater(implicitGroupTree);
}
}
use of edu.cmu.cs.hcii.cogtool.model.Frame in project cogtool by cogtool.
the class DemoScriptCmd method exportScriptToCSV.
public static boolean exportScriptToCSV(Script script, Project project, Interaction interaction, IUndoableEditSequence editSeq) {
Demonstration demo = script.getDemonstration();
TaskApplication ta = demo.getTaskApplication();
Design design = ta.getDesign();
AUndertaking task = ta.getTask();
String name = project.getName();
name += "_" + design.getName();
name += "_" + task.getName();
File dest = null;
if (interaction != null) {
dest = interaction.selectCSVFileDest(name);
} else {
dest = new File(CogTool.exportCSVKludgeDir, name + ".txt");
}
if (dest == null) {
return false;
}
FileWriter fw = null;
BufferedWriter buffer = null;
try {
fw = new FileWriter(dest);
buffer = new BufferedWriter(fw);
CSVSupport.writeCell("Format version:", buffer);
CSVSupport.addSeparator(buffer);
CSVSupport.writeCell(FORMAT_VERSION, buffer);
CSVSupport.addLineEnding(buffer);
Date now = new Date();
String date = DateFormat.getDateTimeInstance().format(now);
CSVSupport.writeCell("Date and Time:", buffer);
CSVSupport.addSeparator(buffer);
CSVSupport.writeCell(date, buffer);
CSVSupport.addLineEnding(buffer);
CSVSupport.writeCell("Project Name:", buffer);
CSVSupport.addSeparator(buffer);
CSVSupport.writeCell(project.getName(), buffer);
CSVSupport.addLineEnding(buffer);
CSVSupport.writeCell("Design Name:", buffer);
CSVSupport.addSeparator(buffer);
CSVSupport.writeCell(design.getName(), buffer);
CSVSupport.addLineEnding(buffer);
CSVSupport.writeCell("Task Hierarchy:", buffer);
String taskName = task.getFullName();
String[] cells = taskName.split(":");
for (String cell : cells) {
CSVSupport.addSeparator(buffer);
CSVSupport.writeCell(cell, buffer);
}
CSVSupport.addLineEnding(buffer);
CSVSupport.addSeparator(buffer);
CSVSupport.addLineEnding(buffer);
buffer.write("\"Frame\",\"Action\",\"Widget-Name\"," + "\"Displayed-Label\",\"Widget-Type\"");
CSVSupport.addLineEnding(buffer);
IWidget lastMovedToWidget = null;
Iterator<DefaultModelGeneratorState> stepStates = script.getStepStates().iterator();
while (stepStates.hasNext()) {
DefaultModelGeneratorState stepState = stepStates.next();
AScriptStep step = stepState.getScriptStep();
TransitionSource stepFocus = step.getStepFocus();
String frameName = step.getCurrentFrame().getName();
String actionName = KeyDisplayUtil.convertActionToMenuText(step.getLocalizedString());
if ((!(step instanceof LookAtScriptStep)) && (!(step instanceof ThinkScriptStep)) && (!(step instanceof TextActionSegment))) {
actionName = step.getLocalizedActionString(actionName, lastMovedToWidget);
}
lastMovedToWidget = stepState.getLastMovedToWidget();
String widgetName = "";
String widgetType = "";
String widgetTitle = "";
if (stepFocus != null) {
widgetName = stepFocus.getName();
if (stepFocus instanceof IWidget) {
IWidget w = (IWidget) stepFocus;
widgetType = w.getWidgetType().toString();
String s = w.getTitle();
if (s != null) {
widgetTitle = s;
}
}
}
CSVSupport.writeCell(frameName, buffer);
CSVSupport.addSeparator(buffer);
CSVSupport.writeCell(actionName, buffer);
CSVSupport.addSeparator(buffer);
CSVSupport.writeCell(widgetName, buffer);
CSVSupport.addSeparator(buffer);
CSVSupport.writeCell(widgetTitle, buffer);
CSVSupport.addSeparator(buffer);
CSVSupport.writeCell(widgetType, buffer);
CSVSupport.addLineEnding(buffer);
}
Frame resultFrame = demo.getResultFrame();
if (resultFrame != null) {
CSVSupport.writeCell(resultFrame.getName(), buffer);
}
if (interaction != null) {
interaction.setStatusMessage(L10N.get("DSO.ExportCompletedPre", "Export completed to ") + dest + L10N.get("DSO.ExportCompletePost", "."));
}
} catch (IOException e) {
if (interaction != null) {
interaction.reportProblem("File I/O Error", e.getMessage());
} else {
e.printStackTrace();
}
return false;
} finally {
try {
if (buffer != null) {
buffer.close();
}
if (fw != null) {
fw.close();
}
} catch (IOException e) {
if (interaction != null) {
interaction.reportProblem("File I/O Error on Close", e.getMessage());
} else {
e.printStackTrace();
}
return false;
}
}
return true;
}
Aggregations