package rtt.ui.editors;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.layout.TreeColumnLayout;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
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.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.forms.DetailsPart;
import org.eclipse.ui.forms.IDetailsPage;
import org.eclipse.ui.forms.IDetailsPageProvider;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.MasterDetailsBlock;
import org.eclipse.ui.forms.SectionPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
import regression.test.DocumentRoot;
import rtt.ui.RttPluginUI;
public class ReferenceMasterDetailsBlock extends MasterDetailsBlock {
public static final int NAME_COLUMN = 0;
public static final int VALUE_COLUMN = 1;
public static final int RETURN_TYPE_COLUMN = 2;
public static final int GENERATED_BY_COLUMN = 3;
public static final int ADDRESS_COLUMN = 4;
protected ReferenceEditorPage page;
private String sectionTitle;
private ITreeContentProvider contentProvider;
private ITableLabelProvider labelProvider;
public ReferenceMasterDetailsBlock(ReferenceEditorPage page) {
this.page = page;
this.sectionTitle = page.getMasterSectionTitle();
this.contentProvider = page.getContentProvider();
this.labelProvider = page.getLabelProvider();
}
/**
* @wbp.parser.entryPoint
*/
@Override
protected void createMasterPart(final IManagedForm managedForm, Composite parent) {
FormToolkit toolkit = managedForm.getToolkit();
Section section = toolkit.createSection(parent, Section.TITLE_BAR);
section.setText(sectionTitle);
Composite client = toolkit.createComposite(section, SWT.WRAP);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginHeight = 2;
layout.marginWidth = 2;
client.setLayout(layout);
Composite treeComposite = toolkit.createComposite(client, SWT.WRAP);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 20;
gd.widthHint = 100;
treeComposite.setLayoutData(gd);
// Element tree
Tree elementTree = toolkit.createTree(treeComposite, SWT.FULL_SELECTION);
elementTree.setHeaderVisible(true);
// Tree layout
TreeColumnLayout columnLayout = new TreeColumnLayout();
treeComposite.setLayout(columnLayout);
// Node column
TreeColumn nameColumn = new TreeColumn(
elementTree, SWT.LEAD, NAME_COLUMN);
nameColumn.setText("Name");
nameColumn.setMoveable(true);
columnLayout.setColumnData(nameColumn,
new ColumnWeightData(1, 150, true));
TreeColumn valueColumn = new TreeColumn(
elementTree, SWT.LEAD, VALUE_COLUMN);
valueColumn.setText("Value");
nameColumn.setMoveable(true);
columnLayout.setColumnData(valueColumn,
new ColumnWeightData(1, 150, true));
// Generated By column
TreeColumn returnTypeColumn = new TreeColumn(
elementTree, SWT.LEAD, RETURN_TYPE_COLUMN);
returnTypeColumn.setText("Return Type");
returnTypeColumn.setMoveable(true);
columnLayout.setColumnData(returnTypeColumn,
new ColumnWeightData(1, 150, true));
// Generated By column
TreeColumn generatedByColumn = new TreeColumn(
elementTree, SWT.LEAD, GENERATED_BY_COLUMN);
generatedByColumn.setText("Type");
generatedByColumn.setMoveable(true);
columnLayout.setColumnData(generatedByColumn,
new ColumnPixelData(100, true));
// Address column
TreeColumn addressColumn = new TreeColumn(
elementTree, SWT.LEAD, ADDRESS_COLUMN);
addressColumn.setText("Address");
addressColumn.setMoveable(true);
columnLayout.setColumnData(addressColumn,
new ColumnPixelData(80, true));
// tree viewer
TreeViewer viewer = new TreeViewer(elementTree);
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(labelProvider);
toolkit.paintBordersFor(client);
section.setClient(client);
final SectionPart sPart = new SectionPart(section);
managedForm.addPart(sPart);
// set viewer input
Resource resource = page.getResource();
if (resource.getContents().get(0) instanceof DocumentRoot) {
DocumentRoot root = (DocumentRoot) resource.getContents().get(0);
viewer.setInput(root);
} else {
viewer.setInput(resource);
}
viewer.expandToLevel(4);
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
managedForm.fireSelectionChanged(sPart, event.getSelection());
}
});
page.getSite().setSelectionProvider(viewer);
}
@Override
public void createContent(IManagedForm managedForm) {
super.createContent(managedForm);
sashForm.setOrientation(SWT.VERTICAL);
}
@Override
protected void registerPages(DetailsPart detailsPart) {
detailsPart.setPageProvider(new IDetailsPageProvider() {
@Override
public Object getPageKey(Object object) {
return object;
}
@Override
public IDetailsPage getPage(Object key) {
if (key instanceof EObject) {
return new PropertyDescriptorDetailsPage();
}
return null;
}
});
}
@Override
protected void createToolBarActions(IManagedForm managedForm) {
final ScrolledForm form = managedForm.getForm();
Action vaction = new Action("ver", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$
public void run() {
sashForm.setOrientation(SWT.VERTICAL);
form.reflow(true);
}
};
vaction.setChecked(true);
vaction.setToolTipText("Vertical"); //$NON-NLS-1$
vaction.setImageDescriptor(RttPluginUI.getImageDescriptor(
RttPluginUI.IMG_VERTICAL));
Action haction = new Action("hor", Action.AS_RADIO_BUTTON) { //$NON-NLS-1$
public void run() {
sashForm.setOrientation(SWT.HORIZONTAL);
form.reflow(true);
}
};
haction.setChecked(false);
haction.setToolTipText("Horizontal"); //$NON-NLS-1$
haction.setImageDescriptor(RttPluginUI.getImageDescriptor(
RttPluginUI.IMG_HORIZONTAL));
form.getToolBarManager().add(haction);
form.getToolBarManager().add(vaction);
}
}