package com.yoursway.ide.views.project;
import static com.yoursway.swt.additions.YsSwtUtils.applySmallSize;
import static com.yoursway.utils.YsFileUtils.isBogusFile;
import java.io.File;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import com.yoursway.ide.application.controllers.mainwindow.FileContentProvider;
import com.yoursway.ide.application.controllers.mainwindow.FileLabelProvider;
import com.yoursway.ide.application.model.Project;
import com.yoursway.ide.application.view.ViewPresentation;
public class ProjectTreeViewImpl implements ProjectTreeView {
private Composite composite;
private final ProjectTreeViewCallback callback;
private Tree tree;
private TreeViewer treeViewer;
public ProjectTreeViewImpl(ViewPresentation presentation, ProjectTreeViewCallback callback) {
if (callback == null)
throw new NullPointerException("callback is null");
this.composite = presentation.composite();
this.callback = callback;
createWidgets();
}
private void createWidgets() {
composite.setLayout(GridLayoutFactory.fillDefaults().create());
tree = new Tree(composite, SWT.NONE);
applySmallSize(tree);
tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
composite.layout();
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setText("Special street magic");
treeViewer = new TreeViewer(tree);
treeViewer.setLabelProvider(new FileLabelProvider());
treeViewer.setContentProvider(new FileContentProvider());
treeViewer.addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
File file = (File) element;
return !isBogusFile(file.getName());
}
});
treeViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
File file = (File) selection.getFirstElement();
if (file != null)
if (!file.isDirectory())
callback.openFile(file);
}
});
}
public void show(Project project) {
treeViewer.setInput(project.getLocation());
}
}