/******************************************************************************* * Copyright (c) 2013 itemis AG (http://www.itemis.eu). * 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 ******************************************************************************/ package de.itemis.tooling.terminology.ui.search; import java.util.Arrays; import java.util.List; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.xtext.resource.IEObjectDescription; import org.eclipse.xtext.ui.label.AbstractLabelProvider; public class EObjectDescriptionCheckboxTableViewer extends CheckboxTableViewer { public EObjectDescriptionCheckboxTableViewer(Table table) { super(table); setLabelProvider(new AbstractLabelProvider() { @Override protected Object doGetText(Object element) { if(element instanceof IEObjectDescription){ return ((IEObjectDescription)element).getQualifiedName().toString(); } return super.doGetText(element); } }); } @Override //make every selection event a check event public void handleSelect(SelectionEvent event) { if(event.detail!=SWT.CHECK){ if(event.item instanceof TableItem){ TableItem ti=(TableItem)event.item; ti.setChecked(!ti.getChecked()); event.detail=SWT.CHECK; } } super.handleSelect(event); } public static EObjectDescriptionCheckboxTableViewer newCheckList( Composite parent, int style) { Table table = new Table(parent, SWT.CHECK | style); return new EObjectDescriptionCheckboxTableViewer(table); } void setDescriptions(Iterable<IEObjectDescription> possibleValues){ for (IEObjectDescription ieObjectDescription : possibleValues) { add(ieObjectDescription); } } public void setCheckedNames(String[] selected) { List<String> list=Arrays.asList(selected); TableItem[] items = getTable().getItems(); for (TableItem tableItem : items) { if(tableItem.getData() instanceof IEObjectDescription){ IEObjectDescription desc = (IEObjectDescription)tableItem.getData(); if(list.contains(desc.getQualifiedName().toString())){ setChecked(tableItem.getData(), true); } } } } public IEObjectDescription[] getChecked(){ Object[] checkedElements = getCheckedElements(); IEObjectDescription[] result=new IEObjectDescription[checkedElements.length]; for (int i = 0; i < result.length; i++) { result[i]=((IEObjectDescription)checkedElements[i]); } return result; } public String[] getCheckedNames(){ IEObjectDescription[] checked = getChecked(); String[] selected=new String[checked.length]; for (int i = 0; i < checked.length; i++) { selected[i]=checked[i].getQualifiedName().toString(); } return selected; } }