]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/modulebrowser/SCLModuleTree.java
(refs #7242) First version of SCL Development perspective
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / modulebrowser / SCLModuleTree.java
diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/modulebrowser/SCLModuleTree.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/modulebrowser/SCLModuleTree.java
new file mode 100644 (file)
index 0000000..43e6781
--- /dev/null
@@ -0,0 +1,68 @@
+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;
+    }
+
+}