/**
SpagoBI, the Open Source Business Intelligence suite
Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at http://mozilla.org/MPL/2.0/.
**/
package it.eng.spagobi.studio.chart.wizards.pages;
import it.eng.spagobi.studio.chart.editors.ChartEditorUtils;
import it.eng.spagobi.studio.chart.editors.model.chart.ChartModel;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class NewChartWizardPage extends WizardPage {
Text chartNameText;
// Map of Radio Buttons
final HashMap<String, Composite> composites=new HashMap<String, Composite>();
static String selectedType=null;
private static Logger logger = LoggerFactory.getLogger(NewChartWizardPage.class);
private IWorkbench workbench;
public NewChartWizardPage( IWorkbench _workbench, String pageName) {
super(pageName);
setTitle("New Chart ...");
workbench = _workbench;
}
public void createControl(Composite parent) {
try{
//Type
final List chartTypes = ChartModel.getConfiguredChartTypes();
Composite all=new Composite(parent, SWT.NONE);
Shell shell = all.getShell();
if (chartTypes == null || chartTypes.size() == 0) {
MessageDialog.openInformation(shell, "Error", "No Charts configured, see the ChartsInformation.xml file");
}
setPageComplete(false);
all.setLayout(new RowLayout(SWT.VERTICAL));
Group nameComposite= new org.eclipse.swt.widgets.Group(all, SWT.BORDER);
GridLayout nameLayout = new GridLayout();
int ncol = 2;
nameLayout.numColumns = ncol;
nameComposite.setLayout(nameLayout);
nameComposite.setLayoutData(new RowData(500,90));
//Name Field
Label setName=new Label(nameComposite, SWT.NONE);
setName.setText("Name:");
GridData gridDataName = new GridData();
gridDataName.horizontalAlignment = GridData.FILL;
gridDataName.grabExcessHorizontalSpace = true;
setName.setLayoutData(gridDataName);
chartNameText = new Text(nameComposite, SWT.BORDER);
chartNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
//Name Field
Label setType=new Label(nameComposite, SWT.NONE);
setType.setText("Type:");
GridData gridDataType= new GridData();
gridDataType.horizontalAlignment = GridData.FILL;
gridDataType.grabExcessHorizontalSpace = true;
setType.setLayoutData(gridDataType);
final Combo comboType = new Combo(nameComposite, SWT.BORDER);
comboType.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
for (Iterator iterator = chartTypes.iterator(); iterator.hasNext();) {
String type = (String) iterator.next();
comboType.add(type);
}
chartNameText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
if(chartNameText.getText().equalsIgnoreCase("")){
setPageComplete(false);
}
else{
int index=comboType.getSelectionIndex();
if(index!=-1){
setPageComplete(true);
}
else{
setPageComplete(false);
}
}
}
});
// Group down
final Group belowComposite=new Group(all,SWT.BORDER);
belowComposite.setLayoutData(new RowData(500,300));
final StackLayout layout = new StackLayout();
belowComposite.setLayout(layout);
for (Iterator iterator = chartTypes.iterator(); iterator.hasNext();) {
final String t = (String) iterator.next();
final Composite compImage = new Composite(belowComposite, SWT.NONE);
compImage.setLayout(new RowLayout());
//compImage.setLayoutData(new RowData(300,200));
compImage.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
Image image = null;
Image scaledImage = null;
try {
String imagePath=ChartEditorUtils.getChartImagePath(t.toUpperCase());
InputStream is=ChartEditorUtils.getInputStreamFromResource(imagePath);
image = new Image(compImage.getDisplay(), is);
final int originalWidth = image.getBounds().width;
final int originalHeight = image.getBounds().height;
int containerHeight=compImage.getBounds().height;
int containerWidth=compImage.getBounds().width;
double rapportoHeight=(double)containerHeight / (double)originalHeight;
double rapportoWidth=(double)containerWidth / (double)originalWidth;
scaledImage = new Image(compImage.getDisplay(),
image.getImageData().scaledTo((int)(originalWidth*rapportoWidth-20),(int)(originalHeight*rapportoHeight-20)));
} catch (FileNotFoundException e1) {
logger.error("could not find image for type "+t, e1);
}
catch (Exception e2) {
logger.error("Error while drawing image for type "+t, e2);
}
// insert scaledImage to Have image scalation!
e.gc.drawImage(image, 20, 30);
image.dispose();
}
});
compImage.redraw();
composites.put(t, compImage);
}
comboType.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// disable all other rafio buttons!
int selection = comboType.getSelectionIndex();
final String type=comboType.getItem(selection);
selectedType=type;
Composite comp=composites.get(type);
layout.topControl=comp;
belowComposite.layout();
if(chartNameText.getText()!=null && !chartNameText.getText().equalsIgnoreCase("")){
setPageComplete(true);
}
else{
setPageComplete(false);
}
}
});
setControl(all);
}
catch (Exception e) {
// TODO: handle exception
}
}
public Text getChartNameText() {
return chartNameText;
}
public boolean isPageComplete() {
// TODO Auto-generated method stub
return super.isPageComplete();
}
public void setPageComplete(boolean complete) {
// TODO Auto-generated method stub
super.setPageComplete(complete);
}
static void doSelection(Button button) {
if (button.getSelection()){
// System.out.println("do work for selection "+button);
selectedType=(String)button.getData();
} else {
// System.out.println("do work for deselection "+button);
}
}
public static String getSelectedType() {
return selectedType;
}
public static void setSelectedType(String selectedType) {
NewChartWizardPage.selectedType = selectedType;
}
}