blob: bb4499bb4b8e324a3c485fdcc1a1f68703bf458b [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2006, 2008 Versant. 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: Versant and Others. - initial API and implementation
********************************************************************************/
package org.eclipse.jpt.ui.internal.views;
import org.eclipse.jpt.ui.WidgetFactory;
import org.eclipse.jpt.ui.internal.selection.JpaSelection;
import org.eclipse.jpt.ui.internal.selection.JpaSelectionManager;
import org.eclipse.jpt.ui.internal.selection.SelectionManagerFactory;
import org.eclipse.jpt.ui.internal.widgets.FormWidgetFactory;
import org.eclipse.jpt.ui.internal.widgets.PropertySheetWidgetFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
/**
* This is the abstract implementation of the JPA view. The selection is changed
* by receiving a <code>IJpaSelection</code>.
*
* @see JpaSelection
*
* @version 2.0
* @since 1.0
*/
public abstract class AbstractJpaView extends ViewPart
{
/**
* The default page used when nothing can be shown.
*/
private Composite defaultComposite;
/**
* The string to display when there is no view content
*/
private String defaultLabel;
/**
* The container of the current page.
*/
private PageBook pageBook;
/**
* The factory used to create the various widgets.
*/
private WidgetFactory widgetFactory;
/**
* Creates a new <code>AbstractJpaView</code>.
*
* @param defaultLabel
*/
public AbstractJpaView(String defaultLabel) {
super();
this.defaultLabel = defaultLabel;
this.initialize();
}
private Composite buildDefaultComposite() {
Composite composite = widgetFactory.createComposite(pageBook);
composite.setLayout(new FillLayout(SWT.VERTICAL));
getWidgetFactory().createLabel(composite, defaultLabel);
return composite;
}
/*
* (non-Javadoc)
*/
@Override
public final void createPartControl(Composite parent) {
pageBook = new PageBook(parent, SWT.NONE);
defaultComposite = buildDefaultComposite();
pageBook.showPage(defaultComposite);
subcreatePartControl(parent);
JpaSelectionManager selectionManager =
SelectionManagerFactory.getSelectionManager(getViewSite().getWorkbenchWindow());
selectionManager.register(this);
select(selectionManager.getCurrentSelection());
}
protected final PageBook getPageBook() {
return pageBook;
}
public final WidgetFactory getWidgetFactory() {
return this.widgetFactory;
}
/**
* Initializes this JPA view.
*/
protected void initialize() {
this.widgetFactory = new PropertySheetWidgetFactory(
new TabbedPropertySheetWidgetFactory()
);
}
private FormToolkit getFormWidgetFactory() {
return ((FormWidgetFactory) widgetFactory).getWidgetFactory();
}
/**
* The selection has changed, update the current page by using the given
* selection state.
*
* @param jpaSelection The new selection used to update this JPA view
*/
public abstract void select(JpaSelection jpaSelection);
/*
* (non-Javadoc)
*/
@Override
public void setFocus() {
pageBook.setFocus();
}
/**
* Changes the current page and show the default one.
*/
protected void showDefaultPage() {
showPage(defaultComposite);
}
/**
* Changes the current page and show the given one.
*
* @param page The new page to show, <code>null</code> can't be passed
*/
protected final void showPage(Control page) {
pageBook.getParent().setRedraw(false);
try {
// It seems the scroll pane has to be installed right before showing
// the page, if it is installed during the creation of the pane then
// its layout will not always revalidate correctly, i.e. will not show
// all the time the vertical scroll bar
ScrolledForm scrolledForm = getFormWidgetFactory().createScrolledForm(pageBook);
scrolledForm.getBody().setLayout(new GridLayout(1, false));
page.setParent(scrolledForm.getBody());
pageBook.showPage(scrolledForm);
}
finally {
pageBook.getParent().setRedraw(true);
}
}
protected void subcreatePartControl(Composite parent) {
// no op - for subclasses to override if wished
}
}