/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.excel.gui.view;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
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.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import de.rcenvironment.components.excel.common.ChannelValue;
import de.rcenvironment.components.excel.common.ExcelComponentConstants;
import de.rcenvironment.components.excel.common.ExcelUtils;
import de.rcenvironment.core.datamodel.types.api.SmallTableTD;
import de.rcenvironment.core.gui.resources.api.ImageManager;
import de.rcenvironment.core.gui.resources.api.StandardImages;
/**
* Dialog for detail view on channel values.
*
* @author Markus Kunde
*/
public class DoubleClickDialog extends Dialog {
/**
* Dimension of x.
*/
private static final int POINTSIZE_Y = 300;
/**
* Dimenstion of y.
*/
private static final int POINTSIZE_X = 400;
/**
* ChannelValue.
*/
private ChannelValue cval = null;
/**
* Table (Excel-like representation).
*/
private Table table = null;
/**
* Composite.
*/
private Composite composite = null;
/**
* Constructor.
* @param parentShell parent shell
* @param cvalue Channelvalue to show in dialog
*/
protected DoubleClickDialog(Shell parentShell, final ChannelValue cvalue) {
super(parentShell);
cval = cvalue;
this.setShellStyle(getShellStyle() | (SWT.RESIZE | SWT.SHELL_TRIM));
}
@Override
public boolean close() {
boolean ret = super.close();
//Not nice, but workbook-object will not released.
ExcelUtils.destroyGarbage();
return ret;
}
@Override
protected Control createDialogArea(Composite parentComposite) {
composite = (Composite) super.createDialogArea(parentComposite);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
gridLayout.horizontalSpacing = 0;
composite.setLayout(gridLayout);
//Label infos
GridData gridData = new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1);
Label infos = new Label(composite, SWT.NONE);
String messagePart = null;
if (cval.isInputValue()) {
messagePart = Messages.inputChannelNameType;
} else {
messagePart = Messages.outputChannelNameType;
}
infos.setText(Messages.directionColumnName
+ ": " + messagePart + "\n"
+ Messages.channelColumnName
+ ": " + cval.getChannelName());
infos.setLayoutData(gridData);
//Label icon
gridData = new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1);
Label header = new Label(composite, SWT.NONE);
header.setText(Messages.doubleClickHeader);
Image image = ImageManager.getInstance().getSharedImage(StandardImages.EXCEL_LARGE);
header.setImage(image);
header.setLayoutData(gridData);
//Label data content
gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION);
table.setLayoutData(gridData);
table.setHeaderVisible(true);
table.setLinesVisible(true);
//Load data in background
final String oldText = this.composite.getShell().getText();
this.composite.getShell().setText(Messages.loadInBackground);
Runnable r = new Runnable() {
@Override
public void run() {
fillTableWithContent();
composite.getShell().setText(oldText);
}
};
super.getParentShell().getDisplay().asyncExec(r);
table.computeSize(POINTSIZE_Y, POINTSIZE_X);
return composite;
}
@Override
protected Point getInitialSize() {
return new Point(POINTSIZE_X, POINTSIZE_Y);
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(Messages.doubleClickShellName);
}
/**
* Fill the table with content.
*/
private void fillTableWithContent() {
SmallTableTD vals = cval.getValues();
//Create columns
for (int loopIndex = 0; loopIndex < vals.getColumnCount(); loopIndex++) {
TableColumn column = new TableColumn(table, SWT.NULL);
column.setResizable(true);
}
//Set table content
for (int row = 0; row < vals.getRowCount(); row++) {
TableItem item = new TableItem(table, SWT.NULL);
for (int col = 0; col < vals.getColumnCount(); col++) {
String valueString =
ExcelUtils.smallTableToString(vals.getSubTable(row, col, row + 1, col + 1),
ExcelComponentConstants.STRINGLINESEPARATOR, ExcelComponentConstants.TABLELINESEPARATOR);
item.setText(col, valueString);
}
}
for (int loopIndex = 0; loopIndex < vals.getColumnCount(); loopIndex++) {
table.getColumn(loopIndex).pack();
}
//Not nice, but workbook-object will not released.
ExcelUtils.destroyGarbage();
}
}