Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'framework/org.eclipse.mylyn.reviews.ui/src/com/atlassian/connector/eclipse/internal/crucible/ui/annotations/CrucibleCommentPopupDialog.java')
-rw-r--r--framework/org.eclipse.mylyn.reviews.ui/src/com/atlassian/connector/eclipse/internal/crucible/ui/annotations/CrucibleCommentPopupDialog.java217
1 files changed, 217 insertions, 0 deletions
diff --git a/framework/org.eclipse.mylyn.reviews.ui/src/com/atlassian/connector/eclipse/internal/crucible/ui/annotations/CrucibleCommentPopupDialog.java b/framework/org.eclipse.mylyn.reviews.ui/src/com/atlassian/connector/eclipse/internal/crucible/ui/annotations/CrucibleCommentPopupDialog.java
new file mode 100644
index 0000000..3a177ae
--- /dev/null
+++ b/framework/org.eclipse.mylyn.reviews.ui/src/com/atlassian/connector/eclipse/internal/crucible/ui/annotations/CrucibleCommentPopupDialog.java
@@ -0,0 +1,217 @@
+/*******************************************************************************
+ * 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 com.atlassian.connector.eclipse.internal.crucible.ui.annotations;
+
+import com.atlassian.connector.eclipse.internal.crucible.ui.IReviewActionListener;
+import com.atlassian.connector.eclipse.internal.crucible.ui.editor.parts.VersionedCommentPart;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.PopupDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * Popup to show the information about the annotation in
+ *
+ * @author Shawn Minto
+ */
+public class CrucibleCommentPopupDialog extends PopupDialog implements IReviewActionListener {
+
+ private static final int MAX_WIDTH = 500;
+
+ private int maxWidth;
+
+ private CrucibleAnnotationHoverInput annotationInput;
+
+ private FormToolkit toolkit;
+
+ private Composite composite;
+
+ private Label focusLabel;
+
+ private ScrolledComposite scrolledComposite;
+
+ private CrucibleInformationControl informationControl;
+
+ private static CrucibleCommentPopupDialog currentPopupDialog;
+
+ public CrucibleCommentPopupDialog(Shell parent, int shellStyle) {
+ super(parent, shellStyle, false, false, false, false, false, null, null);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+
+ if (toolkit == null) {
+ toolkit = new FormToolkit(getShell().getDisplay());
+ }
+
+ scrolledComposite = new ScrolledComposite(parent, SWT.V_SCROLL);
+ scrolledComposite.setExpandHorizontal(true);
+ scrolledComposite.setExpandVertical(true);
+ toolkit.adapt(scrolledComposite);
+
+ composite = toolkit.createComposite(scrolledComposite, SWT.NONE);
+ composite.setLayout(new GridLayout());
+ scrolledComposite.setContent(composite);
+
+ parent.setBackground(toolkit.getColors().getBackground());
+ getShell().setBackground(toolkit.getColors().getBackground());
+
+ return composite;
+ }
+
+ public void dispose() {
+ currentPopupDialog = null;
+ close();
+ toolkit.dispose();
+ }
+
+ public void setFocus() {
+ getShell().forceFocus();
+
+ if (focusLabel != null) {
+ focusLabel.dispose();
+ }
+
+ if (composite.getChildren().length > 0) {
+ composite.getChildren()[0].setFocus();
+ }
+
+ Point computeSize = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+ if (computeSize.y > scrolledComposite.getSize().y) {
+ scrolledComposite.setExpandVertical(false);
+ composite.setSize(computeSize);
+ }
+ }
+
+ public Point computeSizeHint() {
+ int widthHint = MAX_WIDTH;
+ if (maxWidth < widthHint) {
+ widthHint = maxWidth;
+ }
+
+ return getShell().computeSize(widthHint, SWT.DEFAULT, true);
+ }
+
+ public void removeFocusListener(FocusListener listener) {
+ composite.removeFocusListener(listener);
+ }
+
+ public void addFocusListener(FocusListener listener) {
+ composite.addFocusListener(listener);
+
+ }
+
+ public boolean isFocusControl() {
+ //return composite.isFocusControl();
+ return getShell().getDisplay().getActiveShell() == getShell();
+ }
+
+ public void removeDisposeListener(DisposeListener listener) {
+ getShell().removeDisposeListener(listener);
+
+ }
+
+ public void addDisposeListener(DisposeListener listener) {
+ getShell().addDisposeListener(listener);
+ }
+
+ public Rectangle getBounds() {
+ return getShell().getBounds();
+ }
+
+ public Rectangle computeTrim() {
+ return getShell().computeTrim(0, 0, 0, 0);
+ }
+
+ public void setSizeConstraints(int newMaxWidth, int newMaxHeight) {
+ this.maxWidth = newMaxWidth;
+ }
+
+ public void setLocation(Point location) {
+ getShell().setLocation(location);
+ }
+
+ public void setSize(int width, int height) {
+ Point computeSize = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+ if (computeSize.x > width) {
+ width = computeSize.x;
+ }
+ getShell().setSize(width, height);
+ scrolledComposite.setSize(width, height);
+ }
+
+ public void setInput(Object input) {
+ if (input instanceof CrucibleAnnotationHoverInput) {
+ this.annotationInput = (CrucibleAnnotationHoverInput) input;
+
+ // clear the composite in case we are re-using it
+ for (Control control : composite.getChildren()) {
+ control.dispose();
+ }
+
+ currentPopupDialog = this;
+ for (CrucibleCommentAnnotation annotation : annotationInput.getCrucibleAnnotations()) {
+ VersionedCommentPart part = new VersionedCommentPart(annotation.getVersionedComment(),
+ annotation.getReview(), annotation.getCrucibleFileInfo());
+
+ part.hookCustomActionRunListener(this);
+
+ toolkit.adapt(part.createControl(composite, toolkit), true, true);
+ toolkit.adapt(composite);
+ toolkit.adapt(scrolledComposite);
+ toolkit.adapt(scrolledComposite.getParent());
+
+ getShell().setBackground(toolkit.getColors().getBackground());
+ }
+ focusLabel = toolkit.createLabel(composite, "Press 'F2' for focus.");
+ focusLabel.setForeground(toolkit.getColors().getColor(IFormColors.TITLE));
+ GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(focusLabel);
+ } else {
+ input = null;
+ }
+
+ }
+
+ public void actionAboutToRun(Action action) {
+ close();
+ }
+
+ public void actionRan(Action action) {
+ close();
+ }
+
+ public static CrucibleCommentPopupDialog getCurrentPopupDialog() {
+ return currentPopupDialog;
+ }
+
+ public void setInformationControl(CrucibleInformationControl crucibleInformationControl) {
+ this.informationControl = crucibleInformationControl;
+ }
+
+ public CrucibleInformationControl getInformationControl() {
+ return informationControl;
+ }
+}

Back to the top