/*******************************************************************************
* Copyright (c) 2011 Wind River Systems, Inc. and others. 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tm.te.tcf.ui.internal.editor.pages;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.tm.te.tcf.ui.internal.help.IContextHelpIds;
import org.eclipse.tm.te.tcf.ui.tables.NodePropertiesContentProvider;
import org.eclipse.tm.te.tcf.ui.tables.NodePropertiesLabelProvider;
import org.eclipse.tm.te.tcf.ui.tables.NodePropertiesViewerComparator;
import org.eclipse.tm.te.ui.forms.CustomFormToolkit;
import org.eclipse.tm.te.ui.nls.Messages;
import org.eclipse.tm.te.ui.tables.properties.NodePropertiesTableControl;
import org.eclipse.tm.te.ui.views.editor.AbstractCustomFormToolkitEditorPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
/**
* TCF node properties details editor page implementation.
*/
public class NodePropertiesEditorPage extends AbstractCustomFormToolkitEditorPage {
// The references to the pages subcontrol's (needed for disposal)
private NodePropertiesTableControl nodePropertiesTableControl;
/* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.FormPage#dispose()
*/
@Override
public void dispose() {
if (nodePropertiesTableControl != null) { nodePropertiesTableControl.dispose(); nodePropertiesTableControl = null; }
super.dispose();
}
/* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
*/
@Override
protected void createFormContent(IManagedForm managedForm) {
super.createFormContent(managedForm);
// Configure the managed form
configureManagedForm(managedForm);
// Do create the content of the form now
doCreateFormContent(managedForm.getForm().getBody(), getFormToolkit());
// Re-arrange the controls
managedForm.reflow(true);
}
/**
* Configure the managed form to be ready for usage.
*
* @param managedForm The managed form. Must not be <code>null</code>.
*/
protected void configureManagedForm(IManagedForm managedForm) {
Assert.isNotNull(managedForm);
// Configure main layout
Composite body = managedForm.getForm().getBody();
GridLayout layout = new GridLayout();
layout.marginHeight = 2; layout.marginWidth = 0;
body.setLayout(layout);
body.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
// Set context help id
PlatformUI.getWorkbench().getHelpSystem().setHelp(managedForm.getForm(), IContextHelpIds.NODE_PROPERTIES_EDITOR_PAGE);
}
/**
* Do create the managed form content.
*
* @param parent The parent composite. Must not be <code>null</code>
* @param toolkit The {@link CustomFormToolkit} instance. Must not be <code>null</code>.
*/
protected void doCreateFormContent(Composite parent, CustomFormToolkit toolkit) {
Assert.isNotNull(parent);
Assert.isNotNull(toolkit);
Section section = toolkit.getFormToolkit().createSection(parent, ExpandableComposite.TITLE_BAR);
String title = NLS.bind(Messages.NodePropertiesTableControl_section_title, Messages.NodePropertiesTableControl_section_title_noSelection);
// Stretch to a length of 40 characters to make sure the title can be changed
// to hold and show text up to this length
while (title.length() < 40) {
title += " "; //$NON-NLS-1$
}
// Set the title to the section
section.setText(title);
section.setLayoutData(new GridData(GridData.FILL_BOTH));
// Create the client area
Composite client = toolkit.getFormToolkit().createComposite(section);
GridLayout layout = new GridLayout();
layout.marginWidth = 0; layout.marginHeight = 0;
client.setLayout(layout);
section.setClient(client);
// Setup the node properties table control
nodePropertiesTableControl = doCreateNodePropertiesTableControl();
Assert.isNotNull(nodePropertiesTableControl);
nodePropertiesTableControl.setupFormPanel((Composite)section.getClient(), toolkit);
// Set the initial input
nodePropertiesTableControl.getViewer().setInput(getEditorInputNode());
}
/**
* Creates and returns a new node properties table control.
*
* @return The new node properties table control.
*/
protected NodePropertiesTableControl doCreateNodePropertiesTableControl() {
return new NodePropertiesTableControl(this) {
/* (non-Javadoc)
* @see org.eclipse.tm.te.tcf.vtl.ui.datasource.controls.tables.NodePropertiesTableControl#doCreateTableViewerContentProvider(org.eclipse.jface.viewers.TableViewer)
*/
@Override
protected IStructuredContentProvider doCreateTableViewerContentProvider(TableViewer viewer) {
return new NodePropertiesContentProvider(true);
}
/* (non-Javadoc)
* @see org.eclipse.tm.te.tcf.vtl.ui.datasource.controls.tables.properties.NodePropertiesTableControl#doCreateTableViewerLabelProvider(org.eclipse.jface.viewers.TableViewer)
*/
@Override
protected ITableLabelProvider doCreateTableViewerLabelProvider(TableViewer viewer) {
return new NodePropertiesLabelProvider(viewer);
}
/* (non-Javadoc)
* @see org.eclipse.tm.te.tcf.vtl.ui.datasource.controls.tables.NodePropertiesTableControl#doCreateTableViewerComparator(org.eclipse.jface.viewers.TableViewer)
*/
@Override
protected ViewerComparator doCreateTableViewerComparator(TableViewer viewer) {
return new NodePropertiesViewerComparator(viewer, (ITableLabelProvider)viewer.getLabelProvider());
}
};
}
/**
* Returns the associated node properties table control.
*
* @return The associated node properties table control or <code>null</code>.
*/
protected final NodePropertiesTableControl getNodePropertiesTableControl() {
return nodePropertiesTableControl;
}
}