/** * Create one or more steps corresponding to what was done to the file dialog. If the directory is * non-null, the directory was changed. If the file is non-null, the file was accepted. */ protected Step createFileDialogEvents(FileDialog d, String oldDir, String oldFile) { ComponentReference ref = getResolver().addComponent(d); String file = d.getFile(); boolean accepted = file != null; boolean fileChanged = accepted && !file.equals(oldFile); String dir = d.getDirectory(); boolean dirChanged = dir != oldDir && (dir == null || !dir.equals(oldDir)); String desc = d.getMode() == FileDialog.SAVE ? "Save File" : "Load File"; if (accepted) desc += " (" + file + ")"; else desc += " (canceled)"; Sequence seq = new Sequence(getResolver(), desc); if (dirChanged) { seq.addStep( new Action( getResolver(), null, "actionSetDirectory", new String[] {ref.getID(), dir}, FileDialog.class)); } if (accepted) { Step accept = new Action( getResolver(), null, "actionAccept", new String[] {ref.getID()}, FileDialog.class); if (fileChanged) { seq.addStep( new Action( getResolver(), null, "actionSetFile", new String[] {ref.getID(), file}, FileDialog.class)); seq.addStep(accept); } else { return accept; } } else { Step cancel = new Action( getResolver(), null, "actionCancel", new String[] {ref.getID()}, FileDialog.class); if (dirChanged) seq.addStep(cancel); else return cancel; } return seq; }
/** Override the default window parsing to consume everything between dialog open and close. */ protected boolean parseWindowEvent(AWTEvent event) { boolean consumed = true; if (event.getSource() instanceof FileDialog) { if (isOpen(event)) { dialog = (FileDialog) event.getSource(); originalFile = dialog.getFile(); originalDir = dialog.getDirectory(); } // The FileDialog robot uses some event listener hacks to set the // correct state on dialog close; make sure we record after that // listener is finished. if (event instanceof FileDialogTerminator) setFinished(true); else if (event.getSource() == dialog && isClose(event)) { AWTEvent terminator = new FileDialogTerminator(dialog, event.getID()); dialog.getToolkit().getSystemEventQueue().postEvent(terminator); } } return consumed; }