package rtt.ui.views; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.layout.TreeColumnLayout; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.part.ViewPart; import rtt.ui.RttPluginUI; import rtt.ui.content.logging.AbstractLogContent; import rtt.ui.content.logging.LogDirectory; import rtt.ui.content.main.ProjectContent; import rtt.ui.viewer.RttDoubleClickListener; import rtt.ui.viewer.RttColumnLabelProvider; import rtt.ui.viewer.RttTreeContentProvider; import rtt.ui.viewer.RttViewerFilter; import rtt.ui.views.utils.IRttListener; public class LogView extends ViewPart implements IRttListener<ProjectContent> { private static class ContentViewerComperator extends ViewerComparator { @Override public int compare(Viewer viewer, Object e1, Object e2) { if (e1 instanceof AbstractLogContent && e2 instanceof AbstractLogContent) { AbstractLogContent entry1 = (AbstractLogContent) e1; AbstractLogContent entry2 = (AbstractLogContent) e2; return entry1.compareTo(entry2); } return super.compare(viewer, e1, e2); } } public static final String ID = "rtt.ui.views.LogView"; private TreeViewer contentViewer; private Combo combo; public LogView() {} @Override public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(1, false)); Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false,1, 1)); Label typeLabel = new Label(composite, SWT.NONE); typeLabel.setText("Filter:"); combo = new Combo(composite, SWT.READ_ONLY); combo.setItems(new String[] { "Complete log ... ", "Archive only", "Generation only", "Testrun only", "Information only" }); combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); combo.select(0); combo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { contentViewer.setFilters(new ViewerFilter[] { new RttViewerFilter(combo.getSelectionIndex()) }); setFocus(); } }); Composite treeComposite = new Composite(parent, SWT.NONE); treeComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); TreeColumnLayout treeColumnLayout = new TreeColumnLayout(); treeComposite.setLayout(treeColumnLayout); contentViewer = new TreeViewer(treeComposite, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); Tree tree = contentViewer.getTree(); tree.setLinesVisible(true); tree.setHeaderVisible(true); addColumn("Type", 20, 100, treeColumnLayout); addColumn("Message", 60, 100, treeColumnLayout); addColumn("Date", 20, 100, treeColumnLayout); contentViewer.setComparator(new ContentViewerComperator()); contentViewer.setContentProvider(new RttTreeContentProvider()); contentViewer.addDoubleClickListener(new RttDoubleClickListener(getSite().getPage())); // register context menu for comments MenuManager menuManager = new MenuManager(); Menu menu = menuManager.createContextMenu(contentViewer.getControl()); contentViewer.getControl().setMenu(menu); getSite().registerContextMenu(menuManager, contentViewer); getSite().setSelectionProvider(contentViewer); update(RttPluginUI.getProjectManager().getCurrentContent()); RttPluginUI.getProjectManager().addListener(this); } @Override public void setFocus() { if (RttPluginUI.getProjectDirectory().hasChanged()) { RttPluginUI.refreshManager(); } contentViewer.getControl().setFocus(); } private void addColumn(String columnName, int weight, int minimumWidth, TreeColumnLayout treeColumnLayout) { TreeViewerColumn typeColumn = new TreeViewerColumn(contentViewer, SWT.NONE); typeColumn.setLabelProvider(new RttColumnLabelProvider()); TreeColumn trclmnType = typeColumn.getColumn(); trclmnType.setText(columnName); treeColumnLayout.setColumnData(typeColumn.getColumn(), new ColumnWeightData(weight, minimumWidth, true)); } @Override public void refresh() { contentViewer.refresh(true); } @Override public void dispose() { RttPluginUI.getProjectManager().removeListener(this); super.dispose(); } @Override public void update(ProjectContent projectContent) { boolean hasContent = false; LogDirectory logDirectory = null; if (projectContent != null) { logDirectory = projectContent.getLogDirectory(); if (logDirectory != null) { hasContent = !logDirectory.isEmpty(); } } contentViewer.setInput(logDirectory); combo.setEnabled(hasContent); contentViewer.getControl().setEnabled(hasContent); } }