package org.testng.eclipse.launch.components;
import java.util.Collection;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
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.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
/**
* Add a file system browser for the current check box table
*
* @author Tim wu
*
*/
public class SuiteFileCheckBoxTable extends CheckBoxTable {
private static final String FILE_SYSTEM_LABEL = "File System...";
private static final int LABEL_ID = 11111;
public SuiteFileCheckBoxTable(Shell shell, Collection<String> elements,
String titleId) {
super(shell, elements.toArray(new String[elements.size()]), titleId);
}
public SuiteFileCheckBoxTable(Shell shell, String[] elements, String titleId) {
super(shell, elements, titleId);
}
//Override this method to add File System... button
protected Control createButtonBar(Composite parent) {
Font font = parent.getFont();
Composite composite = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginLeft = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
layout.marginWidth = 0;
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
composite.setFont(font);
addFileSystemButton(composite);
addEmptyLabel(composite);
addOkAndCancelButton(composite);
addHelpButton(parent);
return composite;
}
/**
* Add the file system button
*/
private void addFileSystemButton(Composite parent){
Button btn = createButton(parent, LABEL_ID, FILE_SYSTEM_LABEL, false);
btn.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
FileDialog fileselect = new FileDialog(getShell(), SWT.SINGLE);
fileselect.setFilterNames(new String[] { "(*.xml or *.yaml)" });
fileselect.setFilterExtensions(new String[] { "*.xml;*.yaml" });
String url = fileselect.open();
m_viewer.setInput(new String[] { url });
m_viewer.setChecked(url, true);
// Remove all existing selection element
removeSelectionElements();
checkElements(new String[] { url });
m_viewer.refresh();
}
});
btn.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));
((GridLayout)parent.getLayout()).numColumns++;
}
/**
* Add a empty label as a place holder
*/
private void addEmptyLabel(Composite parent){
Label emptyLabel = new Label(parent, 0);
emptyLabel.setAlignment(SWT.LEFT);
GridData statusData = new GridData(GridData.FILL_HORIZONTAL);
emptyLabel.setFont(parent.getFont());
emptyLabel.setLayoutData(statusData);
((GridLayout)parent.getLayout()).numColumns++;
}
/**
* Add the ok & cancel button
*/
private void addOkAndCancelButton(Composite parent){
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.horizontalSpacing = 0;
composite.setLayout(layout);
composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
composite.setFont(parent.getFont());
createButtonsForButtonBar(composite);
}
/**
* Add the help button
*/
private void addHelpButton(Composite parent){
Composite composite = new Composite(parent, SWT.NONE);
composite.setFont(parent.getFont());
GridLayout layout = new GridLayout();
layout.numColumns = 1;
layout.marginHeight = 0;
layout.marginLeft = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
layout.marginWidth = 0;
composite.setLayout(layout);
createHelpControl(composite);
setHelpAvailable(true);
}
}