blob: 28812c7f3a7964f1101fe622c45993ede80d49ef [file] [log] [blame]
/*
* Created on Jan 24, 2004
*
* To change the template for this generated file go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
package org.eclipse.ui.forms;
import java.util.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.forms.widgets.ScrolledPageBook;
/**
* @author dejan
*
* To change the template for this generated type comment go to Window -
* Preferences - Java - Code Generation - Code and Comments
*/
public class DetailsPart implements IFormPart, IPartSelectionListener {
private IManagedForm managedForm;
private ScrolledPageBook pageBook;
private IStructuredSelection currentSelection;
private Hashtable pages;
private IDetailsPageProvider pageProvider;
public DetailsPart(ManagedForm mform, ScrolledPageBook pageBook) {
this.pageBook = pageBook;
pages = new Hashtable();
initialize(mform);
}
public DetailsPart(ManagedForm mform, Composite parent, int style) {
this(mform, mform.getToolkit().createPageBook(parent, SWT.V_SCROLL|SWT.H_SCROLL));
}
public void registerPage(Object objectClass, IDetailsPage page) {
pages.put(objectClass, page);
page.initialize(managedForm);
}
public void setPageProvider(IDetailsPageProvider provider) {
this.pageProvider = provider;
}
public void commit(boolean onSave) {
IDetailsPage page = getCurrentPage();
if (page != null)
page.commit();
}
public IDetailsPage getCurrentPage() {
Control control = pageBook.getCurrentPage();
if (control != null) {
Object data = control.getData();
if (data instanceof IDetailsPage)
return (IDetailsPage) data;
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IFormPart#dispose()
*/
public void dispose() {
for (Enumeration enum = pages.elements(); enum.hasMoreElements();) {
IDetailsPage page = (IDetailsPage) enum.nextElement();
page.dispose();
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IFormPart#initialize(org.eclipse.ui.forms.IManagedForm)
*/
public void initialize(IManagedForm form) {
this.managedForm = form;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IFormPart#isDirty()
*/
public boolean isDirty() {
IDetailsPage page = getCurrentPage();
if (page != null)
return page.isDirty();
return false;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IFormPart#refresh()
*/
public void refresh() {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IFormPart#setFocus()
*/
public void setFocus() {
IDetailsPage page = getCurrentPage();
if (page != null)
page.setFocus();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IFormPart#setFormInput(java.lang.Object)
*/
public void setFormInput(Object input) {
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.IPartSelectionListener#selectionChanged(org.eclipse.ui.forms.IFormPart,
* org.eclipse.jface.viewers.ISelection)
*/
public void selectionChanged(IFormPart part, ISelection selection) {
if (currentSelection != null) {
// see if the page is dirty
}
if (selection instanceof IStructuredSelection)
currentSelection = (IStructuredSelection) selection;
else
currentSelection = null;
update();
}
private void update() {
Object key = null;
if (currentSelection != null) {
for (Iterator iter = currentSelection.iterator(); iter.hasNext();) {
Object obj = iter.next();
if (key == null)
key = getKey(obj);
else if (getKey(obj).equals(key) == false) {
key = null;
break;
}
}
}
showPage(key);
}
private Object getKey(Object object) {
if (pageProvider!=null) {
Object key = pageProvider.getPageKey(object);
if (key!=null)
return key;
}
return object.getClass();
}
private void showPage(final Object key) {
if (key != null) {
IDetailsPage page = (IDetailsPage) pages.get(key);
if (page==null) {
// try to get the page dynamically from the provider
if (pageProvider!=null) {
page = pageProvider.getPage(key);
if (page!=null) {
page.initialize(managedForm);
pages.put(key, page);
}
}
}
if (page != null) {
final IDetailsPage fpage = page;
BusyIndicator.showWhile(pageBook.getDisplay(), new Runnable() {
public void run() {
if (!pageBook.hasPage(key)) {
Composite parent = pageBook.createPage(key);
fpage.createContents(parent);
}
fpage.inputChanged(currentSelection);
pageBook.showPage(key);
}
});
return;
}
}
pageBook.showEmptyPage();
}
}