/** 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.highchart.editors.sections; import it.eng.spagobi.studio.highchart.model.bo.HighChart; import it.eng.spagobi.studio.highchart.model.bo.Serie; import it.eng.spagobi.studio.highchart.model.bo.SeriesList; import it.eng.spagobi.studio.highchart.utils.ColorButton; import it.eng.spagobi.studio.highchart.utils.ImageDescriptors; import it.eng.spagobi.studio.highchart.utils.SWTUtils; import java.util.Iterator; import java.util.Vector; import org.eclipse.jface.dialogs.MessageDialog; 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.Image; 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.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SeriesListSection extends AbstractSection { private static Logger logger = LoggerFactory.getLogger(DrillSection.class); Text documentText; Button insertButton; Button saveButton; Button deleteButton; Text nameText; Button chooseColor; ColorButton colorButton; Text aliasText; Combo typeCombo; Text sizetext; Text innerSizeText; Table seriesTable; static final int NAME = 0; static final int ALIAS = 1; static final int COLOR = 2; static final int TYPE = 3; static final int SIZE = 4; static final int INNER_SIZE = 5; public SeriesListSection(HighChart highChart) { super(highChart); } public void drawSection(final FormToolkit toolkit, final ScrolledForm form, int cols) { super.drawSection(toolkit, form, cols); logger.debug("IN"); section.setText("Series List"); section.setDescription("Series list options"); SeriesList seriesList = highChart.getSeriesList(); section.setClient(composite); // Parameters Composite paramComposite = toolkit.createComposite(composite); GridLayout gla = new GridLayout(); gla.numColumns = 6; paramComposite.setLayout(gla); paramComposite.setLayoutData(SWTUtils.getGridDataSpan(2, GridData.FILL_HORIZONTAL)); // three buttons insertButton = toolkit.createButton(paramComposite, "", SWT.PUSH); Image insertImage = ImageDescriptors.getAddIcon().createImage(); insertButton.setImage(insertImage); insertButton.setEnabled(true); saveButton = toolkit.createButton(paramComposite, "", SWT.PUSH); Image saveImage = ImageDescriptors.getSaveIcon().createImage(); saveButton.setImage(saveImage); saveButton.setEnabled(false); deleteButton = toolkit.createButton(paramComposite, "", SWT.PUSH); Image deleteImage = ImageDescriptors.getEraseIcon().createImage(); deleteButton.setImage(deleteImage); deleteButton.setEnabled(false); // the table seriesTable = new Table (paramComposite, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL); seriesTable.setLinesVisible (true); seriesTable.setHeaderVisible (true); GridData g=new GridData(GridData.FILL_BOTH); g.horizontalSpan=3; g.verticalSpan=8; g.grabExcessHorizontalSpace=true; g.grabExcessVerticalSpace=true; g.heightHint = 200; g.widthHint = 400; seriesTable.setLayoutData(g); String[] titles = {" Name ", " Alias ", " Color "," Type ", " Size "," Inner Size " }; for (int i=0; i<titles.length; i++) { TableColumn column = new TableColumn (seriesTable, SWT.NONE); column.setText (titles [i]); } if(seriesList.getSeries()!=null){ Vector<Serie> series = seriesList.getSeries(); for (Iterator iterator = series.iterator(); iterator.hasNext();) { Serie serie = (Serie) iterator.next(); TableItem item = new TableItem (seriesTable, SWT.NONE); if(serie.getName() != null) item.setText(NAME, serie.getName()); if(serie.getAlias() != null) item.setText(ALIAS, serie.getAlias()); if(serie.getSize() != null) item.setText(SIZE, serie.getSize()); if(serie.getInnerSize() != null) item.setText(INNER_SIZE, serie.getInnerSize()); if(serie.getColor() != null && !serie.getColor().equalsIgnoreCase("")){ item.setText(COLOR, serie.getColor()); item.setBackground(COLOR, SWTUtils.getColor(seriesTable.getDisplay(), serie.getColor())); seriesTable.redraw(); } if(serie.getType() != null) item.setText(TYPE, serie.getType()); } for (int i=0; i<titles.length; i++) { seriesTable.getColumn (i).pack (); } } nameText = SWTUtils.drawText(toolkit, paramComposite, "", "Name: "); nameText.setLayoutData(SWTUtils.getGridDataSpan(2, GridData.FILL_HORIZONTAL)); nameText.setEnabled(false); nameText.setBackground(new Color(composite.getDisplay(), new RGB(200,200,200))); chooseColor = SWTUtils.drawCheck(paramComposite, false, "Choose color"); chooseColor.setEnabled(false); colorButton = SWTUtils.drawColorButton(toolkit, paramComposite, null, "Color"); //colorButton.getColorLabel().setLayoutData(SWTUtils.getGridDataSpan(2, GridData.FILL_HORIZONTAL)); colorButton.getColorButton().setEnabled(false); colorButton.getColorButton().setVisible(false); colorButton.getColorLabel().setVisible(false); aliasText = SWTUtils.drawText(toolkit, paramComposite, "", "Alias: "); aliasText.setLayoutData(SWTUtils.getGridDataSpan(2, GridData.FILL_HORIZONTAL)); aliasText.setEnabled(false); aliasText.setBackground(new Color(composite.getDisplay(), new RGB(200,200,200))); sizetext = SWTUtils.drawText(toolkit, paramComposite, "", "Size (%): "); toolkit.createLabel(paramComposite, ""); innerSizeText = SWTUtils.drawText(toolkit, paramComposite, "", "Inner size (%): "); toolkit.createLabel(paramComposite, ""); typeCombo = SWTUtils.drawCombo(paramComposite, new String[]{"", "line", "spline", "area", "areaspline", "column", "bar", "pie", "scatter"}, null, "Type: "); typeCombo.setLayoutData(SWTUtils.getGridDataSpan(2, GridData.FILL_HORIZONTAL)); typeCombo.setEnabled(false); addButtonListeners(seriesList); logger.debug("OUT"); } public void addButtonListeners(final SeriesList seriesList){ insertButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { editor.setIsDirty(true); // ADD button: 1) remove selection from table 2)disable cancel, enable save, 3) enable fields seriesTable.setSelection(-1); insertButton.setEnabled(false); chooseColor.setEnabled(true); chooseColor.setSelection(false); deleteButton.setEnabled(false); saveButton.setEnabled(true); nameText.setText(""); nameText.setEnabled(true); nameText.setBackground(new Color(composite.getDisplay(), new RGB(255,255,255))); colorButton.getColorLabel().setBackground(SWTUtils.getColor(colorButton.getColorButton().getDisplay(), SWTUtils.LIGHT_BLUE)); colorButton.getColorButton().setEnabled(true); aliasText.setText(""); aliasText.setEnabled(true); aliasText.setBackground(new Color(composite.getDisplay(), new RGB(255,255,255))); sizetext.setText(""); sizetext.setEnabled(true); innerSizeText.setText(""); innerSizeText.setEnabled(true); typeCombo.select(0); typeCombo.setEnabled(true); } } ); chooseColor.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { colorButton.getColorButton().setVisible(chooseColor.getSelection()); colorButton.getColorLabel().setVisible(chooseColor.getSelection()); } }); deleteButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { editor.setIsDirty(true); // delete button: 1) remove item2) remove selection from table 3)disable cancel, disable save, enable insert, 3) disable fields int index = seriesTable.getSelectionIndex(); TableItem toremove = seriesTable.getItem(index); String name = toremove.getText(0); Vector<Serie> series = seriesList.getSeries(); int indexTRoRemove = searchOnVectorSeries(seriesList, name); series.remove(indexTRoRemove); seriesTable.remove(indexTRoRemove); seriesTable.setSelection(-1); insertButton.setEnabled(true); deleteButton.setEnabled(false); saveButton.setEnabled(false); chooseColor.setEnabled(false); nameText.setText(""); nameText.setEnabled(false); nameText.setBackground(new Color(composite.getDisplay(), new RGB(200,200,200))); colorButton.getColorLabel().setBackground(SWTUtils.getColor(colorButton.getColorButton().getDisplay(), SWTUtils.WHITE)); colorButton.getColorButton().setEnabled(false); chooseColor.setSelection(false); aliasText.setText(""); aliasText.setEnabled(false); aliasText.setBackground(new Color(composite.getDisplay(), new RGB(200,200,200))); sizetext.setText(""); sizetext.setEnabled(false); innerSizeText.setText(""); innerSizeText.setEnabled(false); typeCombo.select(0); typeCombo.setEnabled(false); colorButton.getColorButton().setVisible(false); colorButton.getColorLabel().setVisible(false); } } ); saveButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { editor.setIsDirty(true); // check name String name = nameText.getText(); String color = null; if(chooseColor.getSelection()){ color = SWTUtils.convertRGBToHexadecimal(colorButton.getColorLabel().getBackground().getRGB()); } String alias = aliasText.getText(); String type = typeCombo.getItem(typeCombo.getSelectionIndex()); String size = sizetext.getText(); String innerSize = innerSizeText.getText(); // is tu update or insert int tableIndex = seriesTable.getSelectionIndex(); Vector<Serie> series = seriesList.getSeries(); if(tableIndex == -1){ //insert: check not already existing int indexfound = searchOnVectorSeries(seriesList, name); if(indexfound != -1){ MessageDialog.openWarning(composite.getShell(), "Warning", "Name "+name+" already present."); return; } //can insert Serie serie = new Serie(); serie.setName(name); serie.setAlias(alias); if(!type.equalsIgnoreCase("")) serie.setType(type); if(!size.equalsIgnoreCase("")) serie.setSize(size); if(!innerSize.equalsIgnoreCase("")) serie.setInnerSize(innerSize); if(color != null) serie.setColor(color); seriesList.getSeries().add(serie); TableItem item = new TableItem (seriesTable, SWT.NONE); item.setText(NAME, name); item.setText(ALIAS, alias); if(color != null){ item.setText(COLOR, color); item.setBackground(COLOR, SWTUtils.getColor(seriesTable.getDisplay(), color)); seriesTable.redraw(); } else{ item.setText(COLOR, ""); item.setBackground(COLOR, SWTUtils.getColor(seriesTable.getDisplay(), SWTUtils.WHITE)); seriesTable.redraw(); } item.setText(TYPE, type); item.setText(SIZE, size); item.setText(INNER_SIZE, innerSize); seriesTable.redraw(); } else{ // update TableItem selecteditem = seriesTable.getItem(seriesTable.getSelectionIndex()); String nameSelected = selecteditem.getText(NAME); int indexParam = searchOnVectorSeries(seriesList, nameSelected); Serie serie = seriesList.getSeries().get(indexParam); int indexNewParam = searchOnVectorSeries(seriesList, name); // check new Name does not exist if(indexNewParam != -1 && indexNewParam != indexParam){ MessageDialog.openWarning(composite.getShell(), "Warning", "Name "+name+" already present."); return; } serie.setName(name); serie.setAlias(alias); serie.setColor(color); if(!type.equalsIgnoreCase(""))serie.setType(type); if(!size.equalsIgnoreCase(""))serie.setSize(size); if(!innerSize.equalsIgnoreCase(""))serie.setInnerSize(innerSize); selecteditem.setText(NAME,name); selecteditem.setText(ALIAS,alias); selecteditem.setText(SIZE,size); selecteditem.setText(INNER_SIZE,innerSize); selecteditem.setText(ALIAS,alias); selecteditem.setText(TYPE,type); if(color != null) { selecteditem.setText(COLOR,color); selecteditem.setBackground(COLOR, SWTUtils.getColor(seriesTable.getDisplay(), color)); seriesTable.redraw(); } else { selecteditem.setText(COLOR,""); selecteditem.setBackground(COLOR, SWTUtils.getColor(seriesTable.getDisplay(), SWTUtils.WHITE)); } seriesTable.redraw(); } // enable insert, disable delete, disable selection seriesTable.setSelection(-1); insertButton.setEnabled(true); deleteButton.setEnabled(false); saveButton.setEnabled(false); nameText.setEnabled(false); chooseColor.setEnabled(false); nameText.setBackground(new Color(composite.getDisplay(), new RGB(200,200,200))); colorButton.getColorLabel().setBackground(SWTUtils.getColor(colorButton.getColorButton().getDisplay(), SWTUtils.WHITE)); colorButton.getColorButton().setEnabled(false); colorButton.getColorButton().setVisible(false); colorButton.getColorLabel().setVisible(false); chooseColor.setSelection(false); aliasText.setText(""); aliasText.setEnabled(false); aliasText.setBackground(new Color(composite.getDisplay(), new RGB(200,200,200))); sizetext.setText(""); sizetext.setEnabled(false); innerSizeText.setText(""); innerSizeText.setEnabled(false); typeCombo.select(0); typeCombo.setEnabled(false); } } ); // Add listener that show details of parameter selected seriesTable.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { TableItem tableItem = seriesTable.getItem(seriesTable.getSelectionIndex()); String name = tableItem.getText(NAME); String alias = tableItem.getText(ALIAS); String color = tableItem.getText(COLOR); String type =tableItem.getText(TYPE); String size =tableItem.getText(SIZE); String innerSize =tableItem.getText(INNER_SIZE); nameText.setText(name); nameText.setEnabled(true); chooseColor.setEnabled(true); nameText.setBackground(new Color(composite.getDisplay(), new RGB(255,255,255))); aliasText.setText(alias); aliasText.setEnabled(true); aliasText.setBackground(new Color(composite.getDisplay(), new RGB(255,255,255))); sizetext.setText(size); sizetext.setEnabled(true); innerSizeText.setText(innerSize); innerSizeText.setEnabled(true); typeCombo.setText(type); typeCombo.setEnabled(true); if(color != null && !color.equals("")){ chooseColor.setSelection(true); colorButton.getColorLabel().setBackground(SWTUtils.getColor(nameText.getDisplay(), color)); colorButton.getColorLabel().setEnabled(true); colorButton.getColorButton().setEnabled(true); } saveButton.setEnabled(true); deleteButton.setEnabled(true); insertButton.setEnabled(true); seriesTable.redraw(); } }); colorButton.getColorButton().addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { String colorSelected = colorButton.handleSelctionEvent(colorButton.getColorLabel().getShell()); // highChart.getChart().setBackgroundColor(colorSelected); editor.setIsDirty(true); } }); } public int searchOnVectorSeries(SeriesList seriesList, String name){ Vector<Serie> series = seriesList.getSeries(); int indexTRoRemove = -1; for (Iterator iterator = series.iterator(); iterator.hasNext() && indexTRoRemove == -1;) { Serie param = (Serie) iterator.next(); if(param.getName().equals(name)){ indexTRoRemove = series.indexOf(param); } } return indexTRoRemove; } }