Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/editors/ruler/CommentAnnotationRulerColumn.java')
-rw-r--r--org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/editors/ruler/CommentAnnotationRulerColumn.java261
1 files changed, 261 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/editors/ruler/CommentAnnotationRulerColumn.java b/org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/editors/ruler/CommentAnnotationRulerColumn.java
new file mode 100644
index 000000000..9d8018fec
--- /dev/null
+++ b/org.eclipse.mylyn.reviews.ui/src/org/eclipse/mylyn/internal/reviews/ui/editors/ruler/CommentAnnotationRulerColumn.java
@@ -0,0 +1,261 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Atlassian 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:
+ * Atlassian - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.mylyn.internal.reviews.ui.editors.ruler;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.source.AbstractRulerColumn;
+import org.eclipse.jface.text.source.AnnotationModel;
+import org.eclipse.jface.text.source.CompositeRuler;
+import org.eclipse.jface.text.source.IAnnotationModel;
+import org.eclipse.jface.text.source.IAnnotationModelListener;
+import org.eclipse.jface.text.source.ISharedTextColors;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.mylyn.internal.reviews.ui.annotations.CommentAnnotation;
+import org.eclipse.mylyn.internal.reviews.ui.annotations.ReviewAnnotationModel;
+import org.eclipse.mylyn.reviews.internal.core.model.Review;
+import org.eclipse.mylyn.tasks.core.ITask;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.editors.text.EditorsUI;
+import org.eclipse.ui.internal.texteditor.PropertyEventDispatcher;
+import org.eclipse.ui.texteditor.AnnotationPreference;
+import org.eclipse.ui.texteditor.AnnotationPreferenceLookup;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.ui.texteditor.rulers.IContributedRulerColumn;
+import org.eclipse.ui.texteditor.rulers.RulerColumnDescriptor;
+
+public class CommentAnnotationRulerColumn extends AbstractRulerColumn implements IContributedRulerColumn {
+
+ /** The contribution descriptor. */
+ private RulerColumnDescriptor fDescriptor;
+
+ private ReviewAnnotationModel annotationModel;
+
+ private ITextEditor fEditor;
+
+ private Color colorCommented;
+
+ private ISourceViewer fViewer;
+
+ private PropertyEventDispatcher fDispatcher;
+
+ private IDocumentProvider fDocumentProvider;
+
+ public CommentAnnotationRulerColumn() {
+ setTextInset(10);
+ setHover(new CommentAnnotationRulerHover(this));
+ }
+
+ @Override
+ public void dispose() {
+ colorCommented.dispose();
+
+ super.dispose();
+ }
+
+ public RulerColumnDescriptor getDescriptor() {
+ return fDescriptor;
+ }
+
+ public void setDescriptor(RulerColumnDescriptor descriptor) {
+ fDescriptor = descriptor;
+ }
+
+ public void setEditor(ITextEditor editor) {
+ fEditor = editor;
+ fDocumentProvider = fEditor.getDocumentProvider();
+ }
+
+ public ITextEditor getEditor() {
+ return fEditor;
+ }
+
+ public void columnCreated() {
+ }
+
+ public void columnRemoved() {
+ }
+
+ protected Color computeLeftBackground(int line) {
+ List<CommentAnnotation> annotations = getAnnotations(line);
+ if (annotations == null || annotations.size() == 0) {
+ return super.computeBackground(line);
+ } else {
+ return colorCommented;
+ }
+ }
+
+ @Override
+ protected Color computeForeground(int line) {
+ return Display.getDefault().getSystemColor(SWT.COLOR_BLACK);
+ }
+
+ @Override
+ protected void paintLine(GC gc, int modelLine, int widgetLine, int linePixel, int lineHeight) {
+ gc.setBackground(computeLeftBackground(modelLine));
+ gc.fillRectangle(0, linePixel, getWidth(), lineHeight);
+ }
+
+ public List<CommentAnnotation> getAnnotations(int startLine) {
+ try {
+ int offset = fEditor.getDocumentProvider().getDocument(fEditor.getEditorInput()).getLineOffset(startLine);
+ return annotationModel == null ? null : annotationModel.getAnnotationsForOffset(offset);
+ } catch (BadLocationException e) {
+ }
+ return null;
+ }
+
+ private ISharedTextColors getSharedColors() {
+ return EditorsUI.getSharedTextColors();
+ }
+
+ public static RGB getColorFromAnnotationPreference(IPreferenceStore store, AnnotationPreference pref) {
+ String key = pref.getColorPreferenceKey();
+ RGB rgb = null;
+ if (store.contains(key)) {
+ if (store.isDefault(key)) {
+ rgb = pref.getColorPreferenceValue();
+ } else {
+ rgb = PreferenceConverter.getColor(store, key);
+ }
+ }
+ if (rgb == null) {
+ rgb = pref.getColorPreferenceValue();
+ }
+ return rgb;
+ }
+
+ private void updateCommentedColor(AnnotationPreference pref, IPreferenceStore store) {
+ if (pref != null) {
+ RGB rgb = getColorFromAnnotationPreference(store, pref);
+ colorCommented = getSharedColors().getColor(rgb);
+ }
+ }
+
+ /**
+ * Initializes the given line number ruler column from the preference store.
+ */
+ private void initialize() {
+ final IPreferenceStore store = EditorsUI.getPreferenceStore();
+ if (store == null) {
+ return;
+ }
+
+ AnnotationPreferenceLookup lookup = EditorsUI.getAnnotationPreferenceLookup();
+ final AnnotationPreference commentedPref = lookup.getAnnotationPreference(CommentAnnotation.COMMENT_ANNOTATION_ID);
+
+ updateCommentedColor(commentedPref, store);
+
+ redraw();
+
+ // listen to changes
+ fDispatcher = new PropertyEventDispatcher(store);
+
+ if (commentedPref != null) {
+ fDispatcher.addPropertyChangeListener(commentedPref.getColorPreferenceKey(), new IPropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent event) {
+ updateCommentedColor(commentedPref, store);
+ redraw();
+ }
+ });
+ }
+ }
+
+ @Override
+ public Control createControl(CompositeRuler parentRuler, Composite parentControl) {
+ Control control = super.createControl(parentRuler, parentControl);
+
+ ITextViewer viewer = parentRuler.getTextViewer();
+ Assert.isLegal(viewer instanceof ISourceViewer);
+ fViewer = (ISourceViewer) viewer;
+ fViewer.showAnnotations(true);
+ IAnnotationModel model = fViewer.getAnnotationModel();
+ if (model == null) {
+ fViewer.setDocument(fViewer.getDocument(), new AnnotationModel());
+ }
+
+ fViewer.getAnnotationModel().addAnnotationModelListener(new IAnnotationModelListener() {
+ public void modelChanged(IAnnotationModel model) {
+// if (CrucibleUiPlugin.getDefault().getActiveReviewManager().isReviewActive()) {
+// reviewActivated(CrucibleUiPlugin.getDefault().getActiveReviewManager().getActiveTask(),
+// CrucibleUiPlugin.getDefault().getActiveReviewManager().getActiveReview());
+// } else {
+// reviewDeactivated(null, null);
+// }
+ }
+ });
+
+ initialize();
+
+// CrucibleUiPlugin.getDefault().getActiveReviewManager().addReviewActivationListener(this);
+ return control;
+ }
+
+ public void reviewActivated(ITask task, Review review) {
+// annotationModel = null;
+// CrucibleFileInfo currentFileInfo = null;
+// CrucibleFile file = null;
+//
+// if (fEditor.getEditorInput() instanceof ICrucibleFileProvider) {
+// ICrucibleFileProvider fileProvider = (ICrucibleFileProvider) fEditor.getEditorInput();
+// file = fileProvider.getCrucibleFile();
+// }
+//
+// if (fEditor.getEditorInput() instanceof IFileEditorInput) {
+// IFileEditorInput input = (IFileEditorInput) fEditor.getEditorInput();
+// file = CrucibleUiUtil.getCruciblePostCommitFile(input.getFile(), review);
+// }
+//
+// if (file != null) {
+// currentFileInfo = review.getFileByPermId(file.getCrucibleFileInfo().getPermId());
+//
+// if (currentFileInfo != null) {
+// annotationModel = new CrucibleAnnotationModel(fEditor, fEditor.getEditorInput(),
+// fDocumentProvider.getDocument(fEditor.getEditorInput()), new CrucibleFile(currentFileInfo,
+// file.isOldFile()), review);
+// }
+// }
+//
+// Display.getDefault().asyncExec(new Runnable() {
+// public void run() {
+// redraw();
+// }
+// });
+ }
+
+ /**
+ * task and review might be null when called internally
+ */
+ public void reviewDeactivated(ITask task, Review review) {
+ annotationModel = null;
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ redraw();
+ }
+ });
+ }
+
+}

Back to the top