/*******************************************************************************
* Copyright (c) 2008
* The code, documentation and other materials contained herein have been
* licensed under the Eclipse Public License - v 1.0 by the individual
* copyright holders listed below, as Initial Contributors under such license.
* The text of such license is available at
* http://www.eclipse.org/legal/epl-v10.html.
*
* Contributors:
* Henrik Lindberg
*******************************************************************************/
package org.eclipse.equinox.p2.authoring.forms;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.SectionPart;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
/**
* Creates a MasterDetailsBlock with a Table view.
*
* @author Henrik Lindberg
*
*/
public abstract class TableMasterDetailsBlock extends AbstractMasterDetailsBlock
{
protected TableViewer m_viewer;
private int m_heightHint;
public TableMasterDetailsBlock(FormPage page, Object layoutData, int heightHint)
{
super(page, layoutData);
m_heightHint = heightHint;
}
@Override
protected void createMasterPart(final IManagedForm managedForm, Composite parent)
{
FormToolkit toolkit = managedForm.getToolkit();
Section section = toolkit.createSection(parent, m_description != null
? Section.DESCRIPTION
: 0 | //
Section.TITLE_BAR);
section.setText(getName());
if(m_description != null)
section.setDescription(getDescription());
section.marginWidth = 0;
section.marginHeight = 0;
Composite client = toolkit.createComposite(section, SWT.WRAP);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginWidth = 2;
layout.marginHeight = 2;
client.setLayout(layout);
Table t = toolkit.createTable(client, SWT.NULL);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = m_heightHint;
gd.widthHint = 270;
t.setLayoutData(gd);
toolkit.paintBordersFor(client);
m_viewer = new TableViewer(t);
final StandardButtons buttons = createStandardButtonBar(toolkit, client);
section.setClient(client);
final SectionPart spart = new SectionPart(section);
managedForm.addPart(spart);
m_viewer.addSelectionChangedListener(new ISelectionChangedListener()
{
public void selectionChanged(SelectionChangedEvent event)
{
managedForm.fireSelectionChanged(spart, event.getSelection());
setStandardButtonEnablement(buttons, (IStructuredSelection)event.getSelection());
}
});
m_viewer.setContentProvider(getMasterContentProvider());
m_viewer.setLabelProvider(getMasterLabelProvider());
m_viewer.setInput(m_formPage.getEditor().getEditorInput());
}
protected void setStandardButtonEnablement(StandardButtons buttons, IStructuredSelection selection)
{
buttons.remove.setEnabled(selection != null && selection.size() > 0);
Object[] elements = getMasterContentProvider().getElements(m_formPage.getEditor().getEditorInput());
if(elements == null || elements.length < 2)
{
buttons.down.setEnabled(false);
buttons.up.setEnabled(false);
return;
}
// down is enabled if selected is not the last
buttons.down.setEnabled(elements[elements.length-1] != selection.getFirstElement());
// up is enabled if selected is not the first
buttons.up.setEnabled(elements[0] != selection.getFirstElement());
}
@Override
public void setSelected(ISelection selection)
{
m_viewer.setSelection(selection);
}
}