blob: 498ac0d9d95965917082575569d5c155003cfaa4 [file] [log] [blame]
package org.eclipse.update.ui.forms.internal;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
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);
}
public void createControl(Composite parent) {
pageBook = new PageBook(parent, SWT.NULL);
}
private void fireSelectionChanged(IFormPage page) {
for (Iterator iter = listeners.iterator(); iter.hasNext();) {
IFormSelectionListener listener = (IFormSelectionListener) iter.next();
listener.formSelected(page);
}
}
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 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);
}
});
}
}
public void setFirstPageSelected(boolean newFirstPageSelected) {
firstPageSelected = newFirstPageSelected;
}
private void switchPages(IFormPage oldPage, IFormPage newPage) {
if (oldPage != null && oldPage != newPage) {
oldPage.becomesInvisible(newPage);
}
if (newPage.getControl() == null)
newPage.createControl(pageBook);
pageBook.showPage(newPage.getControl());
newPage.becomesVisible(oldPage);
fireSelectionChanged(newPage);
}
}