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) {
27 this.rootEntry = createModuleTreeEntry((Collection<String>)newInput);
31 public Object[] getElements(Object inputElement) {
34 return rootEntry.children().toArray();
38 public Object[] getChildren(Object parentElement) {
39 return ((ModuleNameTreeEntry)parentElement).children().toArray();
43 public Object getParent(Object element) {
44 return ((ModuleNameTreeEntry)element).parent;
48 public boolean hasChildren(Object element) {
49 return !((ModuleNameTreeEntry)element).childMap.isEmpty();
53 private LabelProvider labelProvider = new LabelProvider();
55 public SCLModuleTree(Composite parent, int style, ModuleRepository repository) {
57 this.repository = repository;
58 setLabelProvider(labelProvider);
59 setContentProvider(contentProvider);
60 setAutoExpandLevel(1);
64 private static ModuleNameTreeEntry createModuleTreeEntry(Collection<String> names) {
65 ModuleNameTreeEntry root = new ModuleNameTreeEntry(null, "", "");
66 for(String name : names)
71 public void recalculateInput() {
72 setInput(repository.getSourceRepository().getModuleNames());