/******************************************************************************* * Copyright (c) 2008,2009,2010 Ketan Padegaonkar and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Ketan Padegaonkar - initial API and implementation * Ketan Patel - https://bugs.eclipse.org/bugs/show_bug.cgi?id=259837 * Ralf Ebert www.ralfebert.de - (bug 271630) SWTBot Improved RCP / Workbench support * Ralf Ebert - (bug 294452) - SWTBotEditor does not pass an IProgressMonitor when saving an editor * Ketan Padegaonkar - (bug 260088) Support for MultiPageEditorPart *******************************************************************************/ package org.eclipse.swtbot.eclipse.finder.widgets; import static org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable.syncExec; import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException; import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable; import org.eclipse.swtbot.swt.finder.results.Result; import org.eclipse.swtbot.swt.finder.results.VoidResult; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.hamcrest.SelfDescribing; /** * This represents an Eclipse workbench editor part. * * @author Ketan Padegaonkar <KetanPadegaonkar [at] gmail [dot] com> * @author Ralf Ebert www.ralfebert.de (bug 271630) * @version $Id$ */ public class SWTBotEditor extends SWTBotWorkbenchPart<IEditorReference> { /** * Constructs an instance for the given editorReference. * * @param editorReference the editor reference. * @param bot the instance of {@link SWTWorkbenchBot} which will be used to drive operations on behalf of this * object. * @throws WidgetNotFoundException if the widget is <code>null</code> or widget has been disposed. * @since 2.0 */ public SWTBotEditor(IEditorReference editorReference, SWTWorkbenchBot bot) throws WidgetNotFoundException { super(editorReference, bot); } /** * Constructs an instance for the given editorReference. * * @param editorReference the part reference. * @param bot the helper bot. * @param description the description of the editor part. */ public SWTBotEditor(IEditorReference editorReference, SWTWorkbenchBot bot, SelfDescribing description) { super(editorReference, bot, description); } public boolean isActive() { return bot.activeEditor().partReference == partReference; } public void setFocus() { syncExec(new VoidResult() { public void run() { IEditorPart editor = partReference.getEditor(true); editor.setFocus(); } }); } /** * Save the editor and close it. */ public void saveAndClose() { save(); close(); } public void close() { UIThreadRunnable.syncExec(new VoidResult() { public void run() { partReference.getPage().closeEditor(partReference.getEditor(false), false); } }); } /** * Save the editor. */ public void save() { UIThreadRunnable.syncExec(new VoidResult() { public void run() { IEditorPart editor = partReference.getEditor(false); partReference.getPage().saveEditor(editor, false); } }); } /** * Shows the editor if it is visible. */ public void show() { UIThreadRunnable.syncExec(new VoidResult() { public void run() { IEditorPart editor = partReference.getEditor(true); partReference.getPage().activate(editor); } }); } /** * Returns true if the editor is dirty. * * @return dirty state of editor */ public boolean isDirty() { return UIThreadRunnable.syncExec(new Result<Boolean>() { public Boolean run() { return partReference.isDirty(); } }); } /** * @return an extended version of the editor bot which provides methods for text editors. * @throws WidgetNotFoundException if this is not a text editor */ public SWTBotEclipseEditor toTextEditor() { return new SWTBotEclipseEditor(this.partReference, this.bot); } }