package org.swtchart.ext.internal.properties;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.swtchart.ext.InteractiveChart;
/**
* Abstract class for properties page with selector.
*/
abstract public class AbstractSelectorPage extends AbstractPage {
/** the list */
protected List list;
/** the selector name */
private String selector;
/** the state indicating if selector is enabled */
private boolean selectorEnabled;
/** the selected index */
protected int selectedIndex;
/**
* Constructor.
*
* @param chart
* the chart
* @param resources
* the properties resources
* @param title
* the title
* @param selector
* the selector name
*/
public AbstractSelectorPage(InteractiveChart chart,
PropertiesResources resources, String title, String selector) {
super(chart, resources, title);
this.selector = selector;
selectedIndex = 0;
selectorEnabled = true;
}
/*
* @see PreferencePage#createContents(Composite)
*/
@Override
protected Control createContents(Composite parent) {
String[] items = getListItems();
if (items.length < 2) {
selectorEnabled = false;
}
Composite composite = new Composite(parent, SWT.NONE);
if (selectorEnabled) {
GridLayout layout = new GridLayout(3, true);
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
Label label = new Label(composite, SWT.NULL);
label.setText(selector);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = 3;
label.setLayoutData(gridData);
addLeftPanel(composite, items);
addRightPanel(composite);
} else {
GridLayout layout = new GridLayout(1, true);
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
addRightPanelContents(composite);
}
selectInitialValues();
updateControlSelections();
return composite;
}
/**
* Gets the list items.
*
* @return the list items
*/
abstract protected String[] getListItems();
/**
* Selects value for each control.
*/
abstract protected void selectInitialValues();
/**
* Adds the left panel.
*
* @param parent
* the parent to add the left panel
* @param items
* the items to be added to list
*/
private void addLeftPanel(Composite parent, String[] items) {
Composite leftPanel = new Composite(parent, SWT.NULL);
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 1;
leftPanel.setLayoutData(gridData);
GridLayout layout = new GridLayout(1, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
leftPanel.setLayout(layout);
list = new List(leftPanel, SWT.BORDER);
GridData gridData2 = new GridData(GridData.FILL_BOTH);
gridData2.horizontalSpan = 1;
list.setLayoutData(gridData2);
for (String item : items) {
list.add(item);
}
list.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
selectedIndex = list.getSelectionIndex();
updateControlSelections();
}
});
list.select(0);
}
/**
* Adds the right panel.
*
* @param parent
* the parent to add the right panel
*/
private void addRightPanel(Composite parent) {
Composite rightPanel = new Composite(parent, SWT.NULL);
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 2;
rightPanel.setLayoutData(gridData);
rightPanel.setLayout(new GridLayout(1, false));
addRightPanelContents(rightPanel);
}
/**
* Adds the contents on right panel.
*
* @param parent
* the parent to add the contents
*/
abstract protected void addRightPanelContents(Composite parent);
/**
* Updates the selection on controls.
*/
abstract protected void updateControlSelections();
}