/*******************************************************************************
* Copyright (c) 2008, 2012 Obeo.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.eef.runtime.ui.widgets.masterdetails;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.eef.runtime.ui.utils.EEFRuntimeUIMessages;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.SectionPart;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
/**
* @author <a href="mailto:goulwen.lefur@obeo.fr">Goulwen Le Fur</a>
*/
public abstract class AbstractEEFMasterPart extends SectionPart {
protected StructuredViewer modelViewer;
private AdapterFactory adapterFactory;
private AbstractEEFMasterDetailsBlock block;
/**
* @param toolkit
* the toolkit to use to create part widgets
* @param container
* the composite where to create the part
* @param block
* the AbstractEEFMasterDetailsBlock
*/
public AbstractEEFMasterPart(FormToolkit toolkit, Composite container, AbstractEEFMasterDetailsBlock block) {
super(container, toolkit, ExpandableComposite.TITLE_BAR);
this.block = block;
Composite sectionContainer = toolkit.createComposite(getSection());
createSectionClient(sectionContainer, toolkit);
getSection().setText(EEFRuntimeUIMessages.AbstractEEFMasterPart_part_title);
getSection().setClient(sectionContainer);
}
/**
* Create the content of the master part
*
* @param sectionContainer
* the parent
* @param toolkit
* the toolkit to use
*/
protected void createSectionClient(Composite sectionContainer, FormToolkit toolkit) {
sectionContainer.setLayout(new GridLayout());
modelViewer = null;
modelViewer = createSectionClientContents(sectionContainer, toolkit);
assert modelViewer != null : EEFRuntimeUIMessages.AbstractEEFMasterPart_part_cannot_be_null;
}
/**
* Create the content of the master part
*
* @param sectionContainer
* the parent
* @param toolkit
* the toolkit to use
*/
protected abstract StructuredViewer createSectionClientContents(Composite sectionContainer,
FormToolkit toolkit);
/**
* @return the adapterFactory
*/
public AdapterFactory getAdapterFactory() {
if (adapterFactory == null)
adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
return adapterFactory;
}
/**
* @param adapterFactory
* the adapterFactory to set
*/
public void setAdapterFactory(AdapterFactory adapterFactory) {
this.adapterFactory = adapterFactory;
}
/**
* @param title
* the title to set
*/
public void setTitle(String title) {
getSection().setText(title);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.runtime.ui.widgets.masterdetails.IEEFMasterPart#getModelViewer()
*/
public StructuredViewer getModelViewer() {
return modelViewer;
}
/**
* @param input
* the input of the model viewer
*/
public void setInput(Object input) {
assert modelViewer != null : EEFRuntimeUIMessages.AbstractEEFMasterPart_viewer_not_defined_on_input_model_definition;
modelViewer.setInput(input);
}
/**
* @param listener
* add a listener to the mode viewer
*/
public void addSelectionChangeListener(ISelectionChangedListener listener) {
assert modelViewer != null : EEFRuntimeUIMessages.AbstractEEFMasterPart_viewer_not_defined_on_selection_listener_adding;
modelViewer.addSelectionChangedListener(listener);
}
/**
* @param listener
* remove a listener to the mode viewer
*/
public void removeSelectionChangeListener(ISelectionChangedListener listener) {
assert modelViewer != null : EEFRuntimeUIMessages.AbstractEEFMasterPart_viewer_not_defined_on_selection_listener_adding;
modelViewer.removeSelectionChangedListener(listener);
}
/**
* @param filter
* add a filter to the model viewer
*/
public void addFilter(ViewerFilter filter) {
assert modelViewer != null : EEFRuntimeUIMessages.AbstractEEFMasterPart_viewer_not_defined_on_filter_adding;
modelViewer.addFilter(filter);
}
/**
* @return the AbstractEEFMasterDetailsBlock
*/
public AbstractEEFMasterDetailsBlock getBlock() {
return block;
}
/**
* @param block
* the AbstractEEFMasterDetailsBlock
*/
public void setBlock(AbstractEEFMasterDetailsBlock block) {
this.block = block;
}
}