package org.swtchart.ext.internal.properties; import org.eclipse.jface.preference.ColorSelector; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.swtchart.Constants; import org.swtchart.ILegend; import org.swtchart.ext.InteractiveChart; /** * The legend property page on properties dialog. */ public class LegendPage extends AbstractPage { /** the key for legend font */ private static final String LEGEND_FONT = "org.swtchart.legend.font"; /** the key for legend foreground */ private static final String LEGEND_FOREGROUND = "org.swtchart.legend.foreground"; /** the key for legend background */ private static final String LEGEND_GACKGROUND = "org.swtchart.legend.background"; /** the show legend button */ protected Button showLegendButton; /** the background label */ private Label backgroundLabel; /** the background button */ private ColorSelector backgroundButton; /** the foreground label */ private Label foregroundLabel; /** the foreground button */ private ColorSelector foregroundButton; /** the font size label */ private Label fontSizeLabel; /** the font size spinner */ private Spinner fontSizeSpinner; /** the legend */ private ILegend legend; /** * Constructor. * * @param chart * the chart * @param resources * the properties resources * @param title * the title */ public LegendPage(InteractiveChart chart, PropertiesResources resources, String title) { super(chart, resources, title); legend = chart.getLegend(); } /* * @see PreferencePage#createContents(Composite) */ @Override protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); addLegendPanel(composite); selectValues(); return composite; } /** * Adds the legend panel. * * @param parent * the parent to add the legend panel */ private void addLegendPanel(Composite parent) { Composite group = new Composite(parent, SWT.NONE); GridData gridData = new GridData(); gridData.horizontalSpan = 2; group.setLayoutData(gridData); group.setLayout(new GridLayout(2, false)); showLegendButton = createCheckBoxControl(group, "Show legend"); showLegendButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { boolean visible = showLegendButton.getSelection(); setControlsEnable(visible); } }); backgroundLabel = createLabelControl(group, "Background:"); backgroundButton = createColorButtonControl(group); foregroundLabel = createLabelControl(group, "Foreground:"); foregroundButton = createColorButtonControl(group); fontSizeLabel = createLabelControl(group, "Font size:"); fontSizeSpinner = createSpinnerControl(group, 8, 30); } /** * Selects the values for controls. */ private void selectValues() { showLegendButton.setSelection(legend.isVisible()); setControlsEnable(legend.isVisible()); backgroundButton.setColorValue(legend.getBackground().getRGB()); foregroundButton.setColorValue(legend.getForeground().getRGB()); fontSizeSpinner.setSelection(legend.getFont().getFontData()[0] .getHeight()); } /** * Sets the enable state of controls. * * @param enabled * true if controls are enabled */ protected void setControlsEnable(boolean enabled) { backgroundLabel.setEnabled(enabled); backgroundButton.setEnabled(enabled); foregroundLabel.setEnabled(enabled); foregroundButton.setEnabled(enabled); fontSizeLabel.setEnabled(enabled); fontSizeSpinner.setEnabled(enabled); } /* * @see AbstractPreferencePage#apply() */ @Override public void apply() { legend.setVisible(showLegendButton.getSelection()); Color color = new Color(Display.getDefault(), backgroundButton .getColorValue()); legend.setBackground(color); resources.put(LEGEND_GACKGROUND, color); color = new Color(Display.getDefault(), foregroundButton .getColorValue()); legend.setForeground(color); resources.put(LEGEND_FOREGROUND, color); FontData fontData = legend.getFont().getFontData()[0]; Font font = new Font(legend.getFont().getDevice(), fontData.getName(), fontSizeSpinner.getSelection(), fontData.getStyle()); legend.setFont(font); resources.put(LEGEND_FONT, font); } /* * @see PreferencePage#performDefaults() */ @Override protected void performDefaults() { showLegendButton.setSelection(true); setControlsEnable(true); backgroundButton.setColorValue(new RGB(255, 255, 255)); foregroundButton.setColorValue(new RGB(0, 0, 0)); fontSizeSpinner.setSelection(Constants.SMALL_FONT_SIZE); super.performDefaults(); } }