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();
+ private LabelProvider labelProvider = new SCLModuleTreeLabelProvider();
+ private SCLModuleTreeContentProvider contentProvider;
public SCLModuleTree(Composite parent, int style, ModuleRepository repository) {
super(parent, style);
- this.repository = repository;
+ this.contentProvider = new SCLModuleTreeContentProvider();
+ setUseHashlookup(true);
setLabelProvider(labelProvider);
setContentProvider(contentProvider);
setAutoExpandLevel(1);
- setInput(repository.getSourceRepository().getModuleNames());
+ setInput(repository);
}
- private static ModuleNameTreeEntry createModuleTreeEntry(Collection<String> names) {
- ModuleNameTreeEntry root = new ModuleNameTreeEntry(null, "", "");
- for(String name : names)
- root.addModule(name);
- return root;
+ public void recalculateInput() {
+ contentProvider.update();
+ refresh();
}
}