/*******************************************************************************
* Copyright (c) 2013, 2015 EclipseSource 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:
* Ralf Sternberg - initial API and implementation
******************************************************************************/
package org.eclipse.rap.addons.d3chart.demo.internal;
import java.text.DecimalFormat;
import org.eclipse.rap.addons.d3chart.BarChart;
import org.eclipse.rap.addons.d3chart.Chart;
import org.eclipse.rap.addons.d3chart.ChartItem;
import org.eclipse.rap.addons.d3chart.ColorStream;
import org.eclipse.rap.addons.d3chart.Colors;
import org.eclipse.rap.addons.d3chart.PieChart;
import org.eclipse.rap.examples.ExampleUtil;
import org.eclipse.rap.examples.IExamplePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
public class BarChartExample implements IExamplePage {
private ColorStream colors;
private BarChart barChart;
private PieChart pieChart;
@Override
public void createControl( Composite parent ) {
colors = Colors.cat10Colors( parent.getDisplay() ).loop();
parent.setLayout( ExampleUtil.createMainLayout( 2 ) );
createChartPart( parent );
createControlPart( parent );
}
private void createChartPart( Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayoutData( ExampleUtil.createFillData() );
composite.setLayout( ExampleUtil.createGridLayout( 1, false, true, true ) );
pieChart = new PieChart( composite, SWT.BORDER );
pieChart.setLayoutData( new GridData( 300, 200 ) );
barChart = new BarChart( composite, SWT.BORDER );
barChart.setLayoutData( new GridData( 300, 300 ) );
}
private void createControlPart( Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( ExampleUtil.createGridLayout( 2, true, true, false ) );
composite.setLayoutData( ExampleUtil.createFillData() );
createButton( composite, "Add item", new Listener() {
@Override
public void handleEvent( Event event ) {
float value = ( float )( Math.random() * 0.8 );
Color color = colors.next();
addItem( pieChart, value, color );
addItem( barChart, value, color );
}
} ).setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
createButton( composite, "Remove item", new Listener() {
@Override
public void handleEvent( Event event ) {
removeItem( pieChart );
removeItem( barChart );
}
} ).setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
createButton( composite, "small bars", new Listener() {
@Override
public void handleEvent( Event event ) {
barChart.setBarWidth( 20 );
}
} ).setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
createButton( composite, "large bars", new Listener() {
@Override
public void handleEvent( Event event ) {
barChart.setBarWidth( 40 );
}
} ).setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
createButton( composite, "spacing", new Listener() {
@Override
public void handleEvent( Event event ) {
barChart.setSpacing( 2 );
}
} ).setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
createButton( composite, "no spacing", new Listener() {
@Override
public void handleEvent( Event event ) {
barChart.setSpacing( 0 );
}
} ).setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
createButton( composite, "Resize charts", new Listener() {
@Override
public void handleEvent( Event event ) {
if( pieChart.getSize().x > 350 ) {
pieChart.setLayoutData( new GridData( 300, 200 ) );
barChart.setLayoutData( new GridData( 300, 300 ) );
} else {
pieChart.setLayoutData( new GridData( 400, 300 ) );
barChart.setLayoutData( new GridData( 400, 400 ) );
}
barChart.getParent().layout();
}
} );
}
private static Button createButton( Composite parent, String text, Listener listener ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( text );
button.addListener( SWT.Selection, listener );
return button;
}
private static void addItem( Chart chart, float value, Color color ) {
ChartItem item = new ChartItem( chart );
item.setValue( value );
DecimalFormat format = new DecimalFormat( "#.#" );
item.setText( format.format( value * 100 ) + "%" );
item.setColor( color );
}
private static void removeItem( Chart chart ) {
ChartItem[] items = chart.getItems();
if( items.length > 0 ) {
items[ 0 ].dispose();
}
}
}