| /******************************************************************************* |
| * Copyright (c) 2000, 2006 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.part; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.TabFolder; |
| |
| /** |
| * Abstract superclass of all multi-page workbench editors. |
| * <p> |
| * This class should be subclassed by clients wishing to define new |
| * multi-page editor. |
| * </p> |
| * <p> |
| * Subclasses must implement the following methods: |
| * <ul> |
| * <li><code>createPartControl</code> - to create the view's controls </li> |
| * <li><code>setFocus</code> - to accept focus</li> |
| * <li><code>isDirty</code> - to decide whether a significant change has |
| * occurred</li> |
| * <li><code>doSave</code> - to save contents of editor</li> |
| * <li><code>doSaveAs</code> - to save contents of editor</li> |
| * </ul> |
| * </p> |
| * <p> |
| * Subclasses may extend or reimplement the following methods as required: |
| * <ul> |
| * <li><code>setInitializationData</code> - extend to provide additional |
| * initialization when editor extension is instantiated</li> |
| * <li><code>init(IEditorSite,IEditorInput)</code> - extend to provide |
| * additional initialization when editor is assigned its site</li> |
| * <li><code>isSaveOnCloseNeeded</code> - override to control saving</li> |
| * <li><code>isSaveAsAllowed</code> - override to control saving</li> |
| * <li><code>gotoMarker</code> - reimplement to make selections based on |
| * markers</li> |
| * <li><code>dispose</code> - extend to provide additional cleanup</li> |
| * <li><code>getAdapter</code> - reimplement to make their editor |
| * adaptable</li> |
| * </ul> |
| * </p> |
| * |
| * @deprecated Use the class <code>MultiPageEditorPart</code> instead |
| */ |
| public abstract class MultiPageEditor extends EditorPart { |
| private List syncVector; |
| |
| private TabFolder tabFolder; |
| |
| /** |
| * Creates a new multi-page editor. |
| * |
| * @deprecated Use the class <code>MultiPageEditorPart</code> instead |
| */ |
| public MultiPageEditor() { |
| super(); |
| } |
| |
| /** |
| * Adds a synchronized pagebook to this editor. Once added, the |
| * visible page of the pagebook and the visible page of the editor |
| * will be synchronized. |
| * |
| * @param pageBook the pagebook to add |
| */ |
| protected void addSyncroPageBook(PageBook pageBook) { |
| // Add the page. |
| if (syncVector == null) { |
| syncVector = new ArrayList(1); |
| } |
| syncVector.add(pageBook); |
| |
| // Set the visible page. |
| syncPageBook(pageBook); |
| } |
| |
| /** |
| * The <code>MultiPageEditor</code> implementation of this <code>IWorkbenchPart</code> |
| * method creates a <code>TabFolder</code> control. |
| */ |
| public void createPartControl(Composite parent) { |
| tabFolder = new TabFolder(parent, SWT.NONE); |
| tabFolder.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| sync(); |
| } |
| }); |
| } |
| |
| /** |
| * Returns this editor's workbook. |
| * |
| * @return the editor workbook |
| */ |
| protected TabFolder getFolder() { |
| return tabFolder; |
| } |
| |
| /** |
| * Indicates that a page change has occurred. Updates the sync vector. |
| */ |
| protected void onPageChange() { |
| if (syncVector != null) { |
| Iterator itr = syncVector.iterator(); |
| while (itr.hasNext()) { |
| PageBook pageBook = (PageBook) itr.next(); |
| syncPageBook(pageBook); |
| } |
| } |
| } |
| |
| /** |
| * Removes a synchronized pagebook from this editor. |
| * |
| * @param pageBook the pagebook to remove |
| * @see #addSyncroPageBook(PageBook) |
| */ |
| protected void removeSyncroPageBook(PageBook pageBook) { |
| if (syncVector != null) { |
| syncVector.remove(pageBook); |
| } |
| pageBook.dispose(); |
| } |
| |
| /** |
| * Synchronizes each registered pagebook with the editor page. |
| */ |
| protected void sync() { |
| if (syncVector != null) { |
| Iterator itr = syncVector.iterator(); |
| while (itr.hasNext()) { |
| PageBook pageBook = (PageBook) itr.next(); |
| syncPageBook(pageBook); |
| } |
| } |
| } |
| |
| /** |
| * Sets the visible page of the given pagebook to be the same as |
| * the visible page of this editor. |
| * |
| * @param pageBook a pagebook to synchronize |
| */ |
| protected void syncPageBook(PageBook pageBook) { |
| int pos = tabFolder.getSelectionIndex(); |
| Control children[] = pageBook.getChildren(); |
| int size = children.length; |
| if (pos < size) { |
| pageBook.showPage(children[pos]); |
| } |
| } |
| } |