--- /dev/null
+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<String>)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);
+ setInput(repository.getSourceRepository().getModuleNames());
+ }
+
+ private static ModuleNameTreeEntry createModuleTreeEntry(Collection<String> names) {
+ ModuleNameTreeEntry root = new ModuleNameTreeEntry(null, "", "");
+ for(String name : names)
+ root.addModule(name);
+ return root;
+ }
+
+}