]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/modulebrowser/SCLModuleTree.java
acaffd0f565103cd2301e006794f84304961a574
[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             if(newInput != null)
27                 this.rootEntry = createModuleTreeEntry((Collection<String>)newInput);
28         }
29
30         @Override
31         public Object[] getElements(Object inputElement) {
32             if(rootEntry == null)
33                 return new Object[0];
34             return rootEntry.children().toArray();
35         }
36
37         @Override
38         public Object[] getChildren(Object parentElement) {
39             return ((ModuleNameTreeEntry)parentElement).children().toArray();
40         }
41
42         @Override
43         public Object getParent(Object element) {
44             return ((ModuleNameTreeEntry)element).parent;
45         }
46
47         @Override
48         public boolean hasChildren(Object element) {
49             return !((ModuleNameTreeEntry)element).childMap.isEmpty();
50         }
51     };
52     
53     private LabelProvider labelProvider = new LabelProvider();
54     
55     public SCLModuleTree(Composite parent, int style, ModuleRepository repository) {
56         super(parent, style);
57         this.repository = repository;
58         setLabelProvider(labelProvider);
59         setContentProvider(contentProvider);
60         setAutoExpandLevel(1);
61         recalculateInput();
62     }
63
64     private static ModuleNameTreeEntry createModuleTreeEntry(Collection<String> names) {
65         ModuleNameTreeEntry root = new ModuleNameTreeEntry(null, "", "");
66         for(String name : names)
67             root.addModule(name);
68         return root;
69     }
70
71     public void recalculateInput() {
72         setInput(repository.getSourceRepository().getModuleNames());
73     }
74
75 }