blob: 83555016e335e787420f310c8bf121a356d8fb8e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.update.ui.forms.internal;
import java.util.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.*;
import org.eclipse.ui.part.*;
import org.eclipse.swt.custom.*;
public class NoTabsWorkbook implements IFormWorkbook {
private Vector pages;
private boolean firstPageSelected = true;
private PageBook pageBook;
private Vector listeners = new Vector();
private IFormPage currentPage;
public NoTabsWorkbook() {
pages = new Vector();
}
public void addFormSelectionListener(IFormSelectionListener listener) {
listeners.addElement(listener);
}
public void addPage(IFormPage page) {
pages.add(page);
if (firstPageSelected && currentPage == null)
selectPage(page, true);
}
public void createControl(Composite parent) {
pageBook = new PageBook(parent, SWT.NULL);
}
private void fireSelectionChanged(IFormPage page, boolean setFocus) {
for (Iterator iter = listeners.iterator(); iter.hasNext();) {
IFormSelectionListener listener = (IFormSelectionListener) iter.next();
listener.formSelected(page, setFocus);
}
}
public IFormPage [] getPages() {
return (IFormPage[])pages.toArray(new IFormPage[pages.size()]);
}
public Control getControl() {
return pageBook;
}
public IFormPage getCurrentPage() {
return currentPage;
}
public boolean isFirstPageSelected() {
return firstPageSelected;
}
public void removeFormSelectionListener(IFormSelectionListener listener) {
listeners.removeElement(listener);
}
public void removePage(IFormPage page) {
if (pages.contains(page)) {
Control c = page.getControl();
if (c!=null && !c.isDisposed())
c.dispose();
pages.remove(page);
}
}
public void selectPage(final IFormPage page, final boolean setFocus) {
final IFormPage oldPage = currentPage;
currentPage = page;
if (pageBook != null) {
// It may take a while
BusyIndicator.showWhile(pageBook.getDisplay(), new Runnable() {
public void run() {
switchPages(oldPage, page, setFocus);
}
});
}
}
public void setFirstPageSelected(boolean newFirstPageSelected) {
firstPageSelected = newFirstPageSelected;
}
private void switchPages(IFormPage oldPage, IFormPage newPage, boolean setFocus) {
if (oldPage != null && oldPage != newPage) {
oldPage.becomesInvisible(newPage);
}
if (newPage.getControl() == null)
newPage.createControl(pageBook);
pageBook.showPage(newPage.getControl());
newPage.becomesVisible(oldPage);
fireSelectionChanged(newPage, setFocus);
}
}