package org.simantics.scl.ui.modulebrowser; import java.util.Collection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Composite; import org.simantics.scl.compiler.module.repository.ModuleRepository; public class SCLModuleTree extends TreeViewer { private final ModuleRepository repository; private ITreeContentProvider contentProvider = new ITreeContentProvider() { ModuleNameTreeEntry rootEntry; @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { this.rootEntry = createModuleTreeEntry((Collection)newInput); } @Override public Object[] getElements(Object inputElement) { return rootEntry.children().toArray(); } @Override public Object[] getChildren(Object parentElement) { return ((ModuleNameTreeEntry)parentElement).children().toArray(); } @Override public Object getParent(Object element) { return ((ModuleNameTreeEntry)element).parent; } @Override public boolean hasChildren(Object element) { return !((ModuleNameTreeEntry)element).childMap.isEmpty(); } }; private LabelProvider labelProvider = new LabelProvider(); public SCLModuleTree(Composite parent, int style, ModuleRepository repository) { super(parent, style); this.repository = repository; setLabelProvider(labelProvider); setContentProvider(contentProvider); setAutoExpandLevel(1); recalculateInput(); } private static ModuleNameTreeEntry createModuleTreeEntry(Collection names) { ModuleNameTreeEntry root = new ModuleNameTreeEntry(null, "", ""); for(String name : names) root.addModule(name); return root; } public void recalculateInput() { setInput(repository.getSourceRepository().getModuleNames()); } }