Browse Source

Perform Direct Edit Request on label double click

Andreas Mülder 13 years ago
parent
commit
ea1b7b58b6

+ 2 - 1
de.itemis.gmf.utils/plugins/de.itemis.gmf.runtime.commons/META-INF/MANIFEST.MF

@@ -15,7 +15,8 @@ Require-Bundle: org.eclipse.gmf.runtime.diagram.ui.properties;bundle-version="1.
  org.eclipse.core.databinding.property;bundle-version="1.4.0";visibility:=reexport,
  org.eclipse.emf.databinding.edit;bundle-version="1.2.0";visibility:=reexport,
  org.eclipse.gmf.runtime.diagram.ui.render;bundle-version="1.4.1",
- org.eclipse.gmf.runtime.diagram.ui.providers;bundle-version="1.5.0"
+ org.eclipse.gmf.runtime.diagram.ui.providers;bundle-version="1.5.0",
+ de.itemis.xtext.utils.gmf;bundle-version="1.0.0"
 Export-Package: de.itemis.gmf.runtime.commons.commands,
  de.itemis.gmf.runtime.commons.decorators,
  de.itemis.gmf.runtime.commons.editparts,

+ 20 - 0
de.itemis.gmf.utils/plugins/de.itemis.gmf.runtime.commons/src/de/itemis/gmf/runtime/commons/editparts/TextAwareLabelEditPart.java

@@ -15,8 +15,10 @@ import static org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants.REQ_D
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.gef.DragTracker;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.Request;
+import org.eclipse.gef.requests.SelectionRequest;
 import org.eclipse.gef.tools.DirectEditManager;
 import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
 import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
@@ -35,6 +37,8 @@ import org.eclipse.jface.viewers.ICellEditorValidator;
 import org.eclipse.swt.graphics.Color;
 
 import de.itemis.gmf.runtime.commons.parsers.AttributeParser;
+import de.itemis.xtext.utils.gmf.directedit.DoubleClickDirectEditDragTracker;
+import de.itemis.xtext.utils.gmf.directedit.DoubleClickDirectEditDragTracker.IDoubleClickCallback;
 
 /**
  * This is a common abstract base class for all Label which are
@@ -141,6 +145,22 @@ public abstract class TextAwareLabelEditPart extends CompartmentEditPart
 	public IContentAssistProcessor getCompletionProcessor() {
 		return null;
 	}
+	/**
+	 * Performs direct edit on double click
+	 */
+	@Override
+	public DragTracker getDragTracker(final Request request) {
+		if (request instanceof SelectionRequest
+				&& ((SelectionRequest) request).getLastButtonPressed() == 3)
+			return null;
+		IDoubleClickCallback callback = new IDoubleClickCallback() {
+			public void handleDoubleClick(int btn) {
+				performDirectEditRequest(request);
+			}
+		};
+		return new DoubleClickDirectEditDragTracker(this,
+				getTopGraphicEditPart(), callback);
+	}
 
 	@Override
 	protected void performDirectEditRequest(Request request) {

+ 45 - 0
de.itemis.xtext.utils/plugins/de.itemis.xtext.utils.gmf/src/de/itemis/xtext/utils/gmf/directedit/DoubleClickDirectEditDragTracker.java

@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2010 committers of YAKINDU 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:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package de.itemis.xtext.utils.gmf.directedit;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.gef.ui.internal.tools.DelegatingDragEditPartsTracker;
+
+/**
+ * Delegates the double click event to a callback, used for creating direct edit
+ * requests on double click
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+@SuppressWarnings("restriction")
+public class DoubleClickDirectEditDragTracker extends
+		DelegatingDragEditPartsTracker {
+
+	public interface IDoubleClickCallback {
+		public void handleDoubleClick(int btn);
+	}
+
+	private IDoubleClickCallback callback;
+
+	public DoubleClickDirectEditDragTracker(EditPart delegatingEditPart,
+			EditPart delegateEditPart, IDoubleClickCallback callback) {
+		super(delegatingEditPart, delegateEditPart);
+		this.callback = callback;
+	}
+
+	@Override
+	protected boolean handleDoubleClick(int button) {
+		callback.handleDoubleClick(button);
+		return true;
+	}
+
+}

+ 21 - 1
de.itemis.xtext.utils/plugins/de.itemis.xtext.utils.gmf/src/de/itemis/xtext/utils/gmf/directedit/XtextLabelEditPart.java

@@ -16,7 +16,9 @@ import static org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants.REQ_D
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.PositionConstants;
 import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.gef.DragTracker;
 import org.eclipse.gef.Request;
+import org.eclipse.gef.requests.SelectionRequest;
 import org.eclipse.gef.tools.DirectEditManager;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
@@ -26,6 +28,8 @@ import org.eclipse.gmf.runtime.notation.ShapeStyle;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.swt.graphics.Color;
 
+import de.itemis.xtext.utils.gmf.directedit.DoubleClickDirectEditDragTracker.IDoubleClickCallback;
+
 /**
  * Abstract base implementation for all Labels that that use Xtext for direct
  * editing.
@@ -90,9 +94,25 @@ public abstract class XtextLabelEditPart extends CompartmentEditPart implements
 			super.handleNotificationEvent(notification);
 		}
 	}
+	/**
+	 * Performs direct edit on double click
+	 */
+	@Override
+	public DragTracker getDragTracker(final Request request) {
+		if (request instanceof SelectionRequest
+				&& ((SelectionRequest) request).getLastButtonPressed() == 3)
+			return null;
+		IDoubleClickCallback callback = new IDoubleClickCallback() {
+			public void handleDoubleClick(int btn) {
+				performDirectEditRequest(request);
+			}
+		};
+		return new DoubleClickDirectEditDragTracker(this,
+				getTopGraphicEditPart(), callback);
+	}
 
 	@Override
-	protected void performDirectEditRequest(final Request request) {
+	public void performDirectEditRequest(final Request request) {
 		if (manager == null) {
 			manager = createDirectEditManager();
 		}