blob: 6e9037d9abe50ff6a041f35259f00b03a4814516 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.tests.multipageeditor;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.FindReplaceDocumentAdapter;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.editors.text.TextEditor;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.eclipse.ui.texteditor.IDocumentProvider;
/**
* A MultiPageEditorPart with methods that take a peek at things like
* selection events or selection status or page change events.
*
* @since 3.2
*/
public class MultiVariablePageEditor extends MultiPageEditorPart {
private Composite lastPage;
/**
* Default with 2 pages, although they're on the same editor input
* and they're the TextEditor.
*/
protected void createPages() {
try {
TextEditor section1 = new TextEditor();
int index = addPage(section1, getEditorInput());
setPageText(index, section1.getTitle());
TextEditor section2 = new TextEditor();
index = addPage(section2, getEditorInput());
setPageText(index, section2.getTitle());
} catch (PartInitException e) {
throw new RuntimeException(e);
}
}
public void doSave(IProgressMonitor monitor) {
// do nothing
}
public void doSaveAs() {
throw new UnsupportedOperationException(
"doSaveAs should not be called.");
}
/**
* No save as.
* @return false
*/
public boolean isSaveAsAllowed() {
return false;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.MultiPageEditorPart#pageChange(int)
*/
protected void pageChange(int newPageIndex) {
super.pageChange(newPageIndex);
IEditorPart part = getEditor(newPageIndex);
if (part instanceof TextEditor) {
TextEditor editor = (TextEditor) part;
IDocumentProvider provider = editor.getDocumentProvider();
IDocument doc = provider.getDocument(getEditorInput());
FindReplaceDocumentAdapter find = new FindReplaceDocumentAdapter(
doc);
try {
IRegion region = find.find(0, "#section0" + (newPageIndex + 1),
true, true, false, false);
if (region != null) {
editor.selectAndReveal(region.getOffset(), region
.getLength());
}
} catch (BadLocationException e) {
System.err.println("Failed to find a section");
}
}
}
/**
* Set the active page in this MPEP. Just delegate back to
* setActivePage(int).
* @param index The page index which must be valid.
*/
public void setPage(int index) {
super.setActivePage(index);
}
/**
* Add a page with a composite for testing.
*
*/
public void addLastPage() {
lastPage = new Composite(getContainer(), SWT.NONE);
Label l = new Label(lastPage, SWT.SHADOW_IN);
l.setText(getEditorInput().getName());
addPage(2, lastPage);
}
/**
* remove the last page for testing.
*
*/
public void removeLastPage() {
if (getPageCount()>0) {
removePage(getPageCount()-1);
}
lastPage = null;
}
/**
* Get the last page composite for testing.
* @return the last page.
*/
public Control getLastPage() {
return lastPage;
}
/**
* Return the control for testing (like the editor control).
*
* @param index the page index to get
* @return the control for that page
*/
public Control getTestControl(int index) {
return getControl(index);
}
}