/*******************************************************************************
* Copyright (c) 2012-2015 INRIA.
* 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:
* Generoso Pagano - initial API and implementation
******************************************************************************/
package fr.inria.soctrace.tools.framesoc.exporter.input;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.DirectoryDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import fr.inria.soctrace.framesoc.core.tools.model.IFramesocToolInput;
import fr.inria.soctrace.framesoc.ui.input.AbstractToolInputComposite;
import fr.inria.soctrace.tools.framesoc.exporter.dbexporter.TraceTableManager;
/**
* DB exporter input composite
*
* @author "Generoso Pagano <generoso.pagano@inria.fr>"
*/
public class DBExporterInputComposite extends AbstractToolInputComposite {
private static final int TABLE_MAX_HEIGHT = 350;
private Text textDirectory;
private TraceTableManager traceTableManager;
protected ExporterInput input = new ExporterInput();
private Table tableTraces;
public DBExporterInputComposite(Composite parent, int style) {
super(parent, style);
setLayout(new GridLayout(1, false));
// Resize table, in order to limit its maximum size
addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
Composite composite = (Composite) e.widget;
tableTraces.setSize(composite.getBounds().width - 15,
TABLE_MAX_HEIGHT);
}
});
Group grpExportSettings = new Group(parent, SWT.NONE);
grpExportSettings.setLayout(new GridLayout(1, false));
grpExportSettings.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
grpExportSettings.setText("Export Settings");
// Trace
Label lblTrace = new Label(grpExportSettings, SWT.NONE);
lblTrace.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
lblTrace.setText("Traces:");
Composite compositeTrace = new Composite(grpExportSettings, SWT.NONE);
compositeTrace.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
tableTraces = new Table(compositeTrace, SWT.CHECK| SWT.V_SCROLL | SWT.H_SCROLL);
tableTraces.setLinesVisible(true);
tableTraces.setSize(300, TABLE_MAX_HEIGHT);
tableTraces.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
tableTraces.setLayout(new GridLayout(1, false));
traceTableManager = new TraceTableManager(tableTraces);
traceTableManager.loadAll();
tableTraces.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateExporterInput();
}
});
// Directory
Composite compositeDirectory = new Composite(grpExportSettings, SWT.NONE);
compositeDirectory.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
compositeDirectory.setLayout(new GridLayout(3, false));
Label lblDirectory = new Label(compositeDirectory, SWT.NONE);
lblDirectory.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblDirectory.setText("Export Directory:");
textDirectory = new Text(compositeDirectory, SWT.BORDER);
textDirectory.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
textDirectory.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
updateExporterInput();
}
});
Button btnBrowse = new Button(compositeDirectory, SWT.NONE);
btnBrowse.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
textDirectory.setText("");
DirectoryDialog dlg = new DirectoryDialog(getShell(), SWT.SINGLE);
textDirectory.setText(dlg.open());
}
});
btnBrowse.setText("Browse");
input.traces = traceTableManager.getSelectedTraces();
input.directory = "";
}
@Override
public IFramesocToolInput getToolInput() {
return input;
}
private void updateExporterInput() {
// trace
input.traces = traceTableManager.getSelectedTraces();
// Directory
input.directory = textDirectory.getText();
// update ok in argument dialog
dialog.updateOk();
}
}