1 package org.simantics.scl.ui.modulebrowser;
3 import java.util.Collection;
5 import org.eclipse.jface.viewers.ITreeContentProvider;
6 import org.eclipse.jface.viewers.LabelProvider;
7 import org.eclipse.jface.viewers.TreeViewer;
8 import org.eclipse.jface.viewers.Viewer;
9 import org.eclipse.swt.widgets.Composite;
10 import org.simantics.scl.compiler.module.repository.ModuleRepository;
12 public class SCLModuleTree extends TreeViewer {
14 private final ModuleRepository repository;
17 private ITreeContentProvider contentProvider = new ITreeContentProvider() {
18 ModuleNameTreeEntry rootEntry;
21 public void dispose() {
25 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
26 this.rootEntry = createModuleTreeEntry((Collection<String>)newInput);
30 public Object[] getElements(Object inputElement) {
31 return rootEntry.children().toArray();
35 public Object[] getChildren(Object parentElement) {
36 return ((ModuleNameTreeEntry)parentElement).children().toArray();
40 public Object getParent(Object element) {
41 return ((ModuleNameTreeEntry)element).parent;
45 public boolean hasChildren(Object element) {
46 return !((ModuleNameTreeEntry)element).childMap.isEmpty();
50 private LabelProvider labelProvider = new LabelProvider();
52 public SCLModuleTree(Composite parent, int style, ModuleRepository repository) {
54 this.repository = repository;
55 setLabelProvider(labelProvider);
56 setContentProvider(contentProvider);
57 setAutoExpandLevel(1);
58 setInput(repository.getSourceRepository().getModuleNames());
61 private static ModuleNameTreeEntry createModuleTreeEntry(Collection<String> names) {
62 ModuleNameTreeEntry root = new ModuleNameTreeEntry(null, "", "");
63 for(String name : names)