]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.scl.ui.modulebrowser;
2
3 import java.util.Collection;
4
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;
11
12 public class SCLModuleTree extends TreeViewer {
13
14     private final ModuleRepository repository;
15     
16     
17     private ITreeContentProvider contentProvider = new ITreeContentProvider() {
18         ModuleNameTreeEntry rootEntry;
19         
20         @Override
21         public void dispose() {
22         }
23
24         @Override
25         public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
26             this.rootEntry = createModuleTreeEntry((Collection<String>)newInput);
27         }
28
29         @Override
30         public Object[] getElements(Object inputElement) {
31             return rootEntry.children().toArray();
32         }
33
34         @Override
35         public Object[] getChildren(Object parentElement) {
36             return ((ModuleNameTreeEntry)parentElement).children().toArray();
37         }
38
39         @Override
40         public Object getParent(Object element) {
41             return ((ModuleNameTreeEntry)element).parent;
42         }
43
44         @Override
45         public boolean hasChildren(Object element) {
46             return !((ModuleNameTreeEntry)element).childMap.isEmpty();
47         }
48     };
49     
50     private LabelProvider labelProvider = new LabelProvider();
51     
52     public SCLModuleTree(Composite parent, int style, ModuleRepository repository) {
53         super(parent, style);
54         this.repository = repository;
55         setLabelProvider(labelProvider);
56         setContentProvider(contentProvider);
57         setAutoExpandLevel(1);
58         setInput(repository.getSourceRepository().getModuleNames());
59     }
60
61     private static ModuleNameTreeEntry createModuleTreeEntry(Collection<String> names) {
62         ModuleNameTreeEntry root = new ModuleNameTreeEntry(null, "", "");
63         for(String name : names)
64             root.addModule(name);
65         return root;
66     }
67
68 }