package name.abuchen.portfolio.bootstrap; import java.util.Collection; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; 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; public class FilePickerDialog extends Dialog { public static final int SAVE_ALL = 42; private LabelProvider labelProvider; private Object[] elements; private Object[] selected; private CheckboxTableViewer tableViewer; public FilePickerDialog(Shell parentShell) { super(parentShell); this.labelProvider = new LabelProvider() { @Override public String getText(Object element) { MPart part = (MPart) element; String tooltip = part.getTooltip(); return tooltip != null ? part.getLabel() + " (" + part.getTooltip() + ")" : part.getLabel(); //$NON-NLS-1$ //$NON-NLS-2$ } }; setShellStyle(getShellStyle() | SWT.SHEET); } @Override protected void createButtonsForButtonBar(Composite parent) { super.createButtonsForButtonBar(parent); createButton(parent, SAVE_ALL, Messages.LabelSaveAll, false); } @Override protected void buttonPressed(int buttonId) { if (buttonId == SAVE_ALL) { setReturnCode(SAVE_ALL); close(); } else { super.buttonPressed(buttonId); } } public void setElements(Collection<?> elements) { this.elements = this.selected = elements.toArray(); } public Object[] getResult() { return selected != null ? selected : new Object[0]; } @Override protected Control createContents(Composite parent) { Control contents = super.createContents(parent); getShell().setText(Messages.SaveHandlerTitle); return contents; } @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); Composite container = new Composite(composite, SWT.None); GridDataFactory.fillDefaults().grab(true, true).hint(400, 300).applyTo(container); GridLayoutFactory.fillDefaults().numColumns(1).applyTo(container); Label label = new Label(container, SWT.None); label.setText(Messages.SaveHandlerTitle); GridDataFactory.fillDefaults().grab(true, false).applyTo(label); Composite tableArea = new Composite(container, SWT.NONE); GridDataFactory.fillDefaults().grab(false, true).applyTo(tableArea); tableArea.setLayout(new FillLayout()); TableColumnLayout layout = new TableColumnLayout(); tableArea.setLayout(layout); Table table = new Table(tableArea, SWT.BORDER | SWT.CHECK | SWT.MULTI); tableViewer = new CheckboxTableViewer(table); table.setHeaderVisible(false); table.setLinesVisible(false); TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.None); layout.setColumnData(column.getColumn(), new ColumnWeightData(100)); tableViewer.setLabelProvider(labelProvider); tableViewer.setContentProvider(ArrayContentProvider.getInstance()); tableViewer.setInput(elements); tableViewer.setCheckedElements(elements); tableViewer.setComparator(new ViewerComparator()); hookListener(); return composite; } private void hookListener() { tableViewer.addCheckStateListener(new ICheckStateListener() { @Override public void checkStateChanged(CheckStateChangedEvent event) { selected = tableViewer.getCheckedElements(); } }); } }