| /******************************************************************************* |
| * Copyright (c) 2004 - 2005 University Of British Columbia and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * University Of British Columbia - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.java.ui.views; |
| |
| import java.util.List; |
| |
| import org.eclipse.jdt.core.IJavaElement; |
| import org.eclipse.jdt.internal.ui.JavaPlugin; |
| import org.eclipse.jdt.ui.ProblemsLabelDecorator; |
| import org.eclipse.jface.action.IToolBarManager; |
| import org.eclipse.jface.action.Separator; |
| import org.eclipse.jface.dialogs.IDialogSettings; |
| import org.eclipse.jface.viewers.*; |
| import org.eclipse.swt.graphics.*; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.ui.*; |
| import org.eclipse.ui.internal.Workbench; |
| import org.eclipse.ui.views.markers.internal.*; |
| |
| import org.eclipse.mylyn.core.ITaskscapeListener; |
| import org.eclipse.mylyn.core.MylarPlugin; |
| import org.eclipse.mylyn.core.model.*; |
| import org.eclipse.mylyn.core.model.ITaskscapeNode; |
| import org.eclipse.mylyn.core.model.InterestComparator; |
| import org.eclipse.mylyn.java.ui.JavaUiUtil; |
| import org.eclipse.mylyn.java.ui.actions.ToggleAutoManagerProblemsAction; |
| import org.eclipse.mylyn.ui.*; |
| |
| /** |
| * @author Mik Kersten |
| */ |
| public class MylarProblemView extends ProblemView { |
| |
| private static TableViewer currentViewer = null; |
| private final static String TAG_DIALOG_SECTION = "org.eclipse.mylyn.ui.views.problem"; |
| private ProblemsListFilter doiFilter = new ProblemsListFilter(); |
| private TableSorter sorter = null; |
| |
| // START: from super class |
| private final static int ASCENDING = TableSorter.ASCENDING; |
| private final static int DESCENDING = TableSorter.DESCENDING; |
| private final static int SEVERITY = 0; |
| private final static int DOI = 1; |
| private final static int DESCRIPTION = 2; |
| private final static int RESOURCE = 3; |
| private final static int[] DEFAULT_PRIORITIES = { |
| SEVERITY, |
| DOI, |
| DESCRIPTION, |
| RESOURCE }; |
| private final static int[] DEFAULT_DIRECTIONS = { |
| DESCENDING, // severity |
| ASCENDING, // folder |
| ASCENDING, // resource |
| ASCENDING}; // location |
| // END: from super class |
| |
| private final static IField[] VISIBLE_FIELDS = { |
| new FieldSeverity(), |
| new FieldMessage(), |
| new ProblemsFieldJavaElement(), |
| new ProblemsFieldDoi(), |
| // new FieldFolder(), // TODO: remove |
| // new FieldLineNumber() // TODO: remove |
| }; |
| |
| private final static ColumnLayoutData[] COLUMN_LAYOUTS = { |
| new ColumnPixelData(19, false), |
| new ColumnWeightData(350), |
| new ColumnWeightData(250), |
| new ColumnWeightData(35), |
| // new ColumnWeightData(0), |
| // new ColumnWeightData(0) |
| }; |
| |
| private static final ITaskscapeListener MODEL_LISTENER = new ITaskscapeListener() { |
| public void presentationSettingsChanging(PresentationChangeKind kind) { |
| // refresh(); |
| } |
| |
| public void interestChanged(ITaskscapeNode info, IWorkbenchPart sourcePart) { |
| refresh(); |
| } |
| |
| public void interestChanged(List<ITaskscapeNode> nodes, IWorkbenchPart part) { |
| refresh(); |
| } |
| |
| public void taskscapeActivated(ITaskscape taskscape) { |
| refresh(); |
| } |
| |
| public void taskscapeDeactivated(ITaskscape taskscape) { |
| refresh(); |
| } |
| |
| public void landmarkAdded(ITaskscapeNode element) { } |
| |
| public void landmarkRemoved(ITaskscapeNode element) { } |
| |
| public void relationshipsChanged() { |
| } |
| |
| private void refresh() { |
| PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { |
| public void run() { |
| try { |
| if (currentViewer != null && !currentViewer.getTable().isDisposed()) { |
| currentViewer.refresh(); |
| } |
| } catch (Throwable t) { |
| ContextCorePlugin.fail(t, "Could not update viewer", false); |
| } |
| } |
| }); |
| } |
| |
| public void presentationSettingsChanged(PresentationChangeKind kind) { |
| refresh(); |
| } |
| |
| public void nodeDeleted(ITaskscapeNode node) { |
| refresh(); |
| } |
| }; |
| |
| public MylarProblemView() { |
| super(); |
| ContextCorePlugin.getTaskscapeManager().addListener(MODEL_LISTENER); |
| } |
| |
| public void init(IViewSite viewSite, IMemento memento) throws PartInitException { |
| super.init(viewSite, memento); |
| } |
| |
| public void createPartControl(Composite parent) { |
| super.createPartControl(parent); |
| |
| MylarLabelProvider labelProvider = new MylarLabelProvider( |
| new TableViewLabelProvider(getVisibleFields()), |
| new ProblemsLabelDecorator()); |
| |
| getViewer().setLabelProvider(labelProvider); |
| getViewer().addFilter(doiFilter); |
| // getViewer().getTable().setHeaderVisible(false); |
| getViewer().getTable().setBackground(MylarUiPlugin.getDefault().getColorMap().BACKGROUND_COLOR); |
| |
| IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager(); |
| ToggleAutoManagerProblemsAction autoExpandAction = new ToggleAutoManagerProblemsAction(this); |
| if (toolBarManager != null) { |
| toolBarManager.add(new Separator("StartMylar")); |
| toolBarManager.add(autoExpandAction); |
| } |
| // autoExpandAction.autoExpand(autoExpandAction.isChecked()); |
| // sorter = new ProblemsListDoiSorter(getFields(), DEFAULT_PRIORITIES, DEFAULT_DIRECTIONS); |
| // getViewer().setSorter(sorter); |
| getViewer().refresh(); |
| currentViewer = getViewer(); |
| } |
| |
| protected IField[] getVisibleFields() { |
| return VISIBLE_FIELDS; |
| } |
| |
| protected ColumnLayoutData[] getDefaultColumnLayouts() { |
| return COLUMN_LAYOUTS; |
| } |
| |
| protected IDialogSettings getDialogSettings() { |
| IDialogSettings workbenchSettings = JavaPlugin.getDefault().getDialogSettings(); |
| IDialogSettings settings = workbenchSettings.getSection(TAG_DIALOG_SECTION); |
| |
| if (settings == null) |
| settings = workbenchSettings.addNewSection(TAG_DIALOG_SECTION); |
| |
| return settings; |
| } |
| |
| public InterestFilter getDoiFilter() { |
| return doiFilter; |
| } |
| |
| public TableViewer getViewer() { |
| return super.getViewer(); |
| } |
| |
| protected TableSorter getSorter() { |
| if (sorter == null) |
| sorter = new TableSorter(VISIBLE_FIELDS, DEFAULT_PRIORITIES, DEFAULT_DIRECTIONS); |
| return sorter; |
| } |
| |
| public void setInterestFiltering(boolean on) { |
| if (on) { |
| this.getViewer().addFilter(doiFilter); |
| } else { |
| this.getViewer().removeFilter(doiFilter); |
| } |
| } |
| } |
| |
| class ProblemsListDoiSorter extends TableSorter { |
| |
| public ProblemsListDoiSorter(IField[] properties, int[] defaultPriorities, int[] defaultDirections) { |
| super(properties, defaultPriorities, defaultDirections); |
| } |
| |
| protected InterestComparator comparator = new InterestComparator(); |
| |
| protected int compare(Object obj1, Object obj2, int depth) { |
| return super.compare(obj1, obj2, depth); |
| } |
| |
| public int compare(Viewer viewer, Object e1, Object e2) { |
| return super.compare(viewer, e1, e1); |
| // if (e1 instanceof ProblemMarker && e2 instanceof ProblemMarker) { |
| // if (((ProblemMarker)e2).getSeverity() == IMarker.SEVERITY_ERROR) { |
| // return 1; |
| // } |
| // IJavaElement element1 = Util.getJavaElement((ProblemMarker)e1); |
| // IJavaElement element2 = Util.getJavaElement((ProblemMarker)e2); |
| // if (element1 != null && element2 != null) { |
| // return comparator.compare( |
| // ContextCorePlugin.getTaskscapeManager().getActiveTaskscape().get(element1.getHandleIdentifier()), |
| // ContextCorePlugin.getTaskscapeManager().getActiveTaskscape().get(element1.getHandleIdentifier())); |
| // } |
| // } |
| // |
| // return comparator.compare(e1, e2); |
| } |
| } |
| |
| class MylarLabelProvider extends DecoratingLabelProvider implements IFontProvider, ITableLabelProvider, IColorProvider { |
| |
| TableViewLabelProvider provider; |
| |
| public MylarLabelProvider(TableViewLabelProvider provider, ILabelDecorator decorator) { |
| super(provider, decorator); |
| this.provider = provider; |
| } |
| |
| public Font getFont(Object element) { |
| return null; |
| // ProblemMarker marker = (ProblemMarker)element; |
| // IJavaElement javaElement = Util.getJavaElement(marker); |
| // return UiUtil.getFontForElement(javaElement); |
| } |
| |
| public Image getColumnImage(Object element, int columnIndex) { |
| return provider.getColumnImage(element, columnIndex); |
| } |
| |
| public String getColumnText(Object element, int columnIndex) { |
| return provider.getColumnText(element, columnIndex); |
| } |
| |
| public Color getForeground(Object element) { |
| ProblemMarker marker = (ProblemMarker)element; |
| IJavaElement javaElement = JavaUiUtil.getJavaElement(marker); |
| if (javaElement != null) { |
| ITaskscapeNode node = ContextCorePlugin.getTaskscapeManager().getNode(javaElement.getHandleIdentifier()); |
| return UiUtil.getForegroundForElement(node); |
| } else { |
| return null; |
| } |
| // return MylarUiPlugin.getDefault().getColorMap().TEXT; |
| } |
| |
| public Color getBackground(Object element) { |
| ProblemMarker marker = (ProblemMarker)element; |
| IJavaElement javaElement = JavaUiUtil.getJavaElement(marker); |
| if (javaElement != null) { |
| ITaskscapeNode node = ContextCorePlugin.getTaskscapeManager().getNode(javaElement.getHandleIdentifier()); |
| return UiUtil.getBackgroundForElement(node); |
| } else { |
| return null; |
| } |
| } |
| } |
| |