package org.erlide.ui.wizards;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
public class DirectoryTreeGroup extends Composite {
// private final Label title;
private final CheckboxTableViewer checkboxTableViewer;
private final Set<String> checkedDirs;
private List<String> allDirs;
private class ContentProvider implements IStructuredContentProvider {
@Override
public Object[] getElements(final Object inputElement) {
return allDirs.toArray(new Object[allDirs.size()]);
}
@Override
public void dispose() {
// do nothing
}
@Override
public void inputChanged(final Viewer viewer, final Object oldInput,
final Object newInput) {
// do nothing
}
}
public DirectoryTreeGroup(final Composite parent, final String title) {
super(parent, SWT.NONE);
setLayout(new GridLayout());
GridData layoutData = new GridData(GridData.FILL_BOTH);
setLayoutData(layoutData);
// final Group group = new Group(parent, SWT.NONE);
// group.setLayout(new GridLayout());
// layoutData = new GridData(GridData.FILL_BOTH);
// group.setLayoutData(layoutData);
// group.setText(title);
final Label label = new Label(this, SWT.NONE);
label.setText(title);
checkboxTableViewer = CheckboxTableViewer.newCheckList(this, SWT.BORDER);
layoutData = new GridData(GridData.FILL_BOTH);
layoutData.heightHint = 90;
layoutData.widthHint = 180;
checkboxTableViewer.getTable().setLayoutData(layoutData);
checkboxTableViewer.setLabelProvider(new LabelProvider() {
@Override
public String getText(final Object element) {
if (element instanceof String) {
return (String) element;
}
return null;
}
});
checkboxTableViewer.setContentProvider(new ContentProvider());
checkboxTableViewer.addCheckStateListener(new ICheckStateListener() {
@Override
public void checkStateChanged(final CheckStateChangedEvent event) {
checkedDirs.clear();
for (final Object o : checkboxTableViewer.getCheckedElements()) {
checkedDirs.add((String) o);
}
}
});
allDirs = new ArrayList<>();
checkedDirs = new HashSet<>();
checkboxTableViewer.setInput(allDirs);
// final GridData data = new GridData(GridData.FILL_BOTH);
// data.horizontalSpan = 2;
// data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
// data.heightHint = IDialogConstants.ENTRY_FIELD_WIDTH;
// checkboxTableViewer.getTable().setLayoutData(data);
}
public void refresh() {
checkboxTableViewer.refresh();
}
public void setAllDirs(final List<String> allDirs) {
this.allDirs = allDirs;
checkboxTableViewer.setInput(allDirs);
setChecked();
checkboxTableViewer.refresh();
}
public void setCheckedDirs(final List<String> checkedDirs) {
this.checkedDirs.clear();
for (final String i : checkedDirs) {
this.checkedDirs.add(i);
}
setChecked();
checkboxTableViewer.refresh();
}
private void setChecked() {
for (final String i : allDirs) {
checkboxTableViewer.setChecked(i, checkedDirs.contains(i));
}
}
public Collection<String> getChecked() {
return checkedDirs;
}
}