Author: yradtsevich
Date: 2010-09-09 15:23:16 -0400 (Thu, 09 Sep 2010)
New Revision: 24849
Added:
trunk/vpe/plugins/org.jboss.tools.vpe.xulrunner/src/org/jboss/tools/vpe/xulrunner/editor/IVpeSelectionListener.java
Removed:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/context/InnerDragBuffer.java
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/context/DropContext.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java
trunk/vpe/plugins/org.jboss.tools.vpe.xulrunner/src/org/jboss/tools/vpe/xulrunner/editor/XulRunnerEditor.java
trunk/vpe/plugins/org.jboss.tools.vpe/META-INF/MANIFEST.MF
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/dnd/DndUtil.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/dnd/VpeDnD.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/dnd/context/JSPViewerDropAdapter.java
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/SourceDomUtil.java
Log:
https://jira.jboss.org/browse/JBIDE-6439 :
Refactor and partially reimpement VpeDnD class
- InnerDragBuffer is replaced by 'vpe/xpath' flavor
- 'text/unicode' and 'text/html' flavors now contain source of the
selected node
- references to VpeDnD are removed from VpeVisualDomBuilder
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/context/DropContext.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/context/DropContext.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/context/DropContext.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -246,7 +246,9 @@
Object ooo = LocalSelectionTransfer.getTransfer().getSelection();
if(ooo instanceof StructuredSelection) {
ooo = ((StructuredSelection)ooo).getFirstElement();
- InnerDragBuffer.setInnerDragObject(ooo);
+ // commented by yradtsevich, see JBIDE-6439 (InnerDragBuffer is removed,
+ // nodes are transfered through vpe/xpath flavor now)
+ //InnerDragBuffer.setInnerDragObject(ooo);
}
mimeData = ooo == null ? null : ooo.toString();
}
Deleted:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/context/InnerDragBuffer.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/context/InnerDragBuffer.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/editors/dnd/context/InnerDragBuffer.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
- * Distributed under license by Red Hat, Inc. All rights reserved.
- * This program is 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:
- * Exadel, Inc. and Red Hat, Inc. - initial API and implementation
- ******************************************************************************/
-package org.jboss.tools.common.model.ui.editors.dnd.context;
-
-public class InnerDragBuffer {
-
- private static Object innerDragObject = null;
-
- public static Object getInnerDragObject() {
- return innerDragObject;
- }
-
- public static void setInnerDragObject(Object innerDragObject) {
- InnerDragBuffer.innerDragObject = innerDragObject;
- }
-
-}
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/xmleditor/XMLTextEditor.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -14,10 +14,6 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.jboss.tools.common.model.ui.ModelUIPlugin;
-import org.jboss.tools.common.model.ui.dnd.ModelTransfer;
-import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDrop;
-import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDropProvider;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentListener;
@@ -57,19 +53,14 @@
import org.eclipse.wst.xml.core.internal.document.ElementImpl;
import org.eclipse.wst.xml.ui.StructuredTextViewerConfigurationXML;
import org.eclipse.wst.xml.ui.internal.XMLUIPlugin;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
import org.jboss.tools.common.meta.action.XActionInvoker;
import org.jboss.tools.common.model.XModelBuffer;
import org.jboss.tools.common.model.XModelException;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.XModelTransferBuffer;
import org.jboss.tools.common.model.filesystems.impl.FileAnyImpl;
-import org.jboss.tools.common.model.util.XModelObjectLoaderUtil;
-import org.jboss.tools.common.text.xml.ui.FreeCaretStyledText;
+import org.jboss.tools.common.model.ui.ModelUIPlugin;
+import org.jboss.tools.common.model.ui.dnd.ModelTransfer;
import org.jboss.tools.common.model.ui.editor.EditorDescriptor;
import org.jboss.tools.common.model.ui.editor.IModelObjectEditorInput;
import org.jboss.tools.common.model.ui.editors.dnd.DropCommandFactory;
@@ -77,12 +68,19 @@
import org.jboss.tools.common.model.ui.editors.dnd.EmptyTagProposalFactory;
import org.jboss.tools.common.model.ui.editors.dnd.context.DropContext;
import org.jboss.tools.common.model.ui.editors.dnd.context.IDNDTextEditor;
-import org.jboss.tools.common.model.ui.editors.dnd.context.InnerDragBuffer;
+import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDrop;
+import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDropProvider;
import org.jboss.tools.common.model.ui.views.palette.PaletteInsertHelper;
+import org.jboss.tools.common.model.util.XModelObjectLoaderUtil;
import org.jboss.tools.common.text.xml.IOccurrencePreferenceProvider;
import org.jboss.tools.common.text.xml.XMLTextViewerConfiguration;
import org.jboss.tools.common.text.xml.XmlEditorPlugin;
+import org.jboss.tools.common.text.xml.ui.FreeCaretStyledText;
import org.jboss.tools.jst.jsp.text.xpl.IStructuredTextOccurrenceStructureProvider;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
/**
* @author Jeremy
@@ -506,13 +504,13 @@
event.detail = DND.DROP_NONE;
return;
}
- // Drop from VPE to Source is forbidden
- if(dropContext.getFlavor().equals("text/html")) { //$NON-NLS-1$
- if(InnerDragBuffer.getInnerDragObject()!= null) {
- event.detail = DND.DROP_NONE;
- }
- return;
- }
+// // Drop from VPE to Source is forbidden
+// if(dropContext.getFlavor().equals("text/html")) { //$NON-NLS-1$
+// if(InnerDragBuffer.getInnerDragObject()!= null) {
+// event.detail = DND.DROP_NONE;
+// }
+// return;
+// }
int pos = getPosition(event.x, event.y);
if(lastpos == pos && pos >= 0) {
pos = lastpos;
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/jspeditor/JSPTextEditor.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -104,13 +104,12 @@
import org.jboss.tools.common.model.ui.editor.IModelObjectEditorInput;
import org.jboss.tools.common.model.ui.editors.dnd.DropCommandFactory;
import org.jboss.tools.common.model.ui.editors.dnd.DropData;
+import
org.jboss.tools.common.model.ui.editors.dnd.DropUtils.AttributeDescriptorValueProvider;
import org.jboss.tools.common.model.ui.editors.dnd.IDropCommand;
import org.jboss.tools.common.model.ui.editors.dnd.ITagProposal;
-import
org.jboss.tools.common.model.ui.editors.dnd.DropUtils.AttributeDescriptorValueProvider;
import org.jboss.tools.common.model.ui.editors.dnd.composite.TagAttributesComposite;
import
org.jboss.tools.common.model.ui.editors.dnd.composite.TagAttributesComposite.AttributeDescriptorValue;
import org.jboss.tools.common.model.ui.editors.dnd.context.DropContext;
-import org.jboss.tools.common.model.ui.editors.dnd.context.InnerDragBuffer;
import org.jboss.tools.common.model.ui.texteditors.TextMerge;
import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDrop;
import org.jboss.tools.common.model.ui.texteditors.dnd.TextEditorDropProvider;
@@ -141,8 +140,8 @@
import org.jboss.tools.jst.jsp.ui.action.IExtendedAction;
import org.jboss.tools.jst.web.kb.IPageContext;
import org.jboss.tools.jst.web.kb.KbQuery;
+import org.jboss.tools.jst.web.kb.KbQuery.Type;
import org.jboss.tools.jst.web.kb.PageProcessor;
-import org.jboss.tools.jst.web.kb.KbQuery.Type;
import org.jboss.tools.jst.web.kb.internal.JspContextImpl;
import org.jboss.tools.jst.web.kb.internal.taglib.NameSpace;
import org.jboss.tools.jst.web.kb.internal.taglib.TLDTag;
@@ -932,13 +931,18 @@
event.detail = DND.DROP_NONE;
return;
}
- // Drop from VPE to Source is forbidden
- if (dropContext.getFlavor().equals("text/html")) { //$NON-NLS-1$
- if (InnerDragBuffer.getInnerDragObject() != null) {
- event.detail = DND.DROP_NONE;
- }
- return;
- }
+
+// commented by yradtsevich, see JBIDE-6439 (InnerDragBuffer is removed,
+// nodes are transfered through vpe/xpath flavor now)
+// // Drop from VPE to Source is forbidden
+// if (dropContext.getFlavor().equals("text/html")) { //$NON-NLS-1$
+// if (InnerDragBuffer.getInnerDragObject() != null) {
+// event.detail = DND.DROP_NONE;
+// }
+// return;
+// }
+
+
int pos = getPosition(event.x, event.y);
if (lastpos == pos && pos >= 0) {
pos = lastpos;
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/META-INF/MANIFEST.MF
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe/META-INF/MANIFEST.MF 2010-09-09 18:00:10 UTC
(rev 24848)
+++ trunk/vpe/plugins/org.jboss.tools.vpe/META-INF/MANIFEST.MF 2010-09-09 19:23:16 UTC
(rev 24849)
@@ -60,6 +60,7 @@
org.eclipse.wst.sse.ui,
org.eclipse.wst.sse.core,
org.eclipse.core.expressions,
- org.jboss.tools.common.model.ui
+ org.jboss.tools.common.model.ui,
+ org.eclipse.wst.xml.xpath.core
Bundle-Version: 3.2.0.qualifier
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/dnd/DndUtil.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/dnd/DndUtil.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/dnd/DndUtil.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -15,14 +15,18 @@
import static org.jboss.tools.vpe.xulrunner.util.XPCOM.queryInterface;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Stack;
import org.eclipse.swt.events.TypedEvent;
import org.jboss.tools.common.model.ui.editors.dnd.context.DropContext;
import org.jboss.tools.common.model.ui.editors.dnd.context.IDNDTextEditor;
-import org.jboss.tools.vpe.editor.VpeController;
+import org.jboss.tools.jst.web.kb.PageContextFactory;
+import org.jboss.tools.vpe.editor.context.VpePageContext;
import org.jboss.tools.vpe.editor.util.HTML;
+import org.jboss.tools.vpe.editor.util.SourceDomUtil;
+import org.jboss.tools.vpe.editor.util.VpeDndUtil;
import org.jboss.tools.vpe.xulrunner.util.XPCOM;
import org.mozilla.interfaces.nsIComponentManager;
import org.mozilla.interfaces.nsIDOMDocument;
@@ -32,8 +36,10 @@
import org.mozilla.interfaces.nsIDragSession;
import org.mozilla.interfaces.nsIServiceManager;
import org.mozilla.interfaces.nsISupports;
+import org.mozilla.interfaces.nsISupportsString;
import org.mozilla.interfaces.nsITransferable;
import org.mozilla.xpcom.Mozilla;
+import org.w3c.dom.Node;
/**
@@ -91,28 +97,9 @@
/** The Constant kFilePromiseDirectoryMime. */
public static final String kFilePromiseDirectoryMime =
"application/x-moz-file-promise-dir"; //$NON-NLS-1$
-
- /** The Constant FLAVORS. */
- public static final String[] FLAVORS = {
- VpeController.MODEL_FLAVOR,
- kTextMime,
- kUnicodeMime,
- kHTMLMime,
- kAOLMailMime,
- kPNGImageMime,
- kJPEGImageMime,
- kGIFImageMime,
- kFileMime,
- kURLMime,
- kURLDataMime,
- kURLDescriptionMime,
- kNativeImageMime,
- kNativeHTMLMime,
- kFilePromiseURLMime,
- kFilePromiseMime,
- kFilePromiseDirectoryMime
- };
-
+
+ public static final String VPE_XPATH_FLAVOR = "vpe/xpath"; //$NON-NLS-1$
+
/**
* The Constructor.
*/
@@ -136,25 +123,39 @@
* Returns an instance of {@link DragTransferData}
* for the current DnD session.
*/
- public static DragTransferData getDragTransferData() {
- final nsIDragSession dragSession = getCurrentDragSession();
- final List<String> supportedDataFlavors
- = getSupportedDataFlavors(dragSession);
+ public static DragTransferData getDragTransferData(String... flavors) {
+ nsIDragSession dragSession = getCurrentDragSession();
+ String []supportedFlavors = getSupportedDataFlavors(dragSession, flavors);
+ if (supportedFlavors.length > 0) {
+ nsITransferable iTransferable = createTransferable(supportedFlavors);
+
+ String[] aFlavor = new String[1];
+ nsISupports[] aValue = new nsISupports[1];
+ long[] aDataLen = new long[1];
+
+ dragSession.getData(iTransferable, 0);
+ iTransferable.getAnyTransferData(aFlavor, aValue, aDataLen);
+ return new DragTransferData(aFlavor[0], aValue[0], aDataLen[0]);
+ } else {
+ return null;
+ }
+ }
+
+ public static String getDragTransferDataAsString(String... flavors) {
+ DragTransferData transferData = getDragTransferData(flavors);
+ if (transferData == null || transferData.getValue() == null) {
+ return null;
+ }
+
+ nsISupports value = transferData.getValue();
+ if (VpeDndUtil.isNsIStringInstance(value)) {
+ return queryInterface(value, nsISupportsString.class).getData();
+ } else {
+ return null;
+ }
+ }
- final nsITransferable iTransferable
- = createTransferable(supportedDataFlavors);
-
- String[] aFlavor = new String[1];
- nsISupports[] aValue = new nsISupports[1];
- long[] aDataLen = new long[1];
-
- dragSession.getData(iTransferable, 0);
- iTransferable.getAnyTransferData(aFlavor, aValue, aDataLen);
- return new DragTransferData(aFlavor[0], aValue[0], aDataLen[0]);
- }
-
- public static nsITransferable createTransferable(
- final List<String> supportedDataFlavors) {
+ public static nsITransferable createTransferable(String... flavors) {
final nsIComponentManager componentManager
= Mozilla.getInstance().getComponentManager();
@@ -163,22 +164,22 @@
XPCOM.NS_TRANSFERABLE_CONTRACTID, null,
nsITransferable.NS_ITRANSFERABLE_IID);
- for (final String flavor : supportedDataFlavors) {
+ for (final String flavor : flavors) {
iTransferable.addDataFlavor(flavor);
}
return iTransferable;
}
- private static List<String> getSupportedDataFlavors(
- final nsIDragSession dragSession) {
+ public static String []getSupportedDataFlavors(
+ final nsIDragSession dragSession, String... flavors) {
final List<String> supportedDataFlavors = new ArrayList<String>();
- for (final String flavor : FLAVORS) {
+ for (final String flavor : flavors) {
if (dragSession.isDataFlavorSupported(flavor)) {
supportedDataFlavors.add(flavor);
}
}
- return supportedDataFlavors;
+ return supportedDataFlavors.toArray(new String[supportedDataFlavors.size()]);
}
public static nsIDragSession getCurrentDragSession() {
@@ -263,4 +264,13 @@
return element;
}
+
+ public static Node getNodeFromDragSession(VpePageContext pageContext) {
+ String xPath = DndUtil.getDragTransferDataAsString(VPE_XPATH_FLAVOR);
+ if (xPath != null) {
+ return SourceDomUtil.getNodeByXPath(pageContext, xPath);
+ } else {
+ return null;
+ }
+ }
}
Modified: trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/dnd/VpeDnD.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/dnd/VpeDnD.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/dnd/VpeDnD.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -18,16 +18,17 @@
import org.eclipse.core.resources.IFile;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
import org.eclipse.wst.sse.ui.StructuredTextEditor;
import org.eclipse.wst.xml.core.internal.document.ElementImpl;
+import org.eclipse.wst.xml.core.internal.document.NodeContainer;
+import org.eclipse.wst.xml.xpath.core.util.XSLTXPathHelper;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.filesystems.XFileObject;
import org.jboss.tools.common.model.options.PreferenceModelUtilities;
+import org.jboss.tools.common.model.ui.dnd.ModelTransfer;
import org.jboss.tools.common.model.ui.editors.dnd.DropUtils;
import org.jboss.tools.common.model.ui.editors.dnd.context.IDNDTextEditor;
-import org.jboss.tools.common.model.ui.editors.dnd.context.InnerDragBuffer;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
import org.jboss.tools.jst.web.tld.model.TLDUtil;
import org.jboss.tools.vpe.VpeDebug;
@@ -42,6 +43,7 @@
import org.jboss.tools.vpe.editor.mozilla.listener.MozillaSelectionListener;
import org.jboss.tools.vpe.editor.util.VisualDomUtil;
import org.jboss.tools.vpe.editor.util.VpeDndUtil;
+import org.jboss.tools.vpe.xulrunner.editor.IVpeSelectionListener;
import org.jboss.tools.vpe.xulrunner.editor.XulRunnerEditor;
import org.jboss.tools.vpe.xulrunner.util.XPCOM;
import org.mozilla.interfaces.nsIComponentManager;
@@ -64,7 +66,6 @@
import org.mozilla.interfaces.nsITransferable;
import org.mozilla.xpcom.Mozilla;
import org.w3c.dom.Document;
-import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
@@ -75,33 +76,38 @@
*/
// NOTE: the code has been cleaned after SVN revision 21574, many methods
// have been removed. To find the old code refer to older revisions.
-public class VpeDnD implements MozillaDndListener, MozillaSelectionListener {
+public class VpeDnD implements MozillaDndListener, MozillaSelectionListener,
IVpeSelectionListener {
private static final String TAG_TAGLIB = "taglib"; //$NON-NLS-1$
- /*
- * Default transfer data
- */
- private static final String VPE_ELEMENT = ""; //$NON-NLS-1$
-
- /**
- * service manager */
private nsIServiceManager serviceManager;
-
- /**
- * component manager
- */
private nsIComponentManager componentManager;
-
- /**
- * drag service
- */
private nsIDragService dragService;
-
private VpeController vpeController;
-
private DraggablePattern draggablePattern;
private DropableArea dropableArea;
+ /** The Constant FLAVORS. */
+ private static final String[] FLAVORS = {
+ ModelTransfer.MODEL,
+ DndUtil.kUnicodeMime,
+ DndUtil.kHTMLMime,
+ DndUtil.kAOLMailMime,
+ DndUtil.kPNGImageMime,
+ DndUtil.kJPEGImageMime,
+ DndUtil.kGIFImageMime,
+ DndUtil.kFileMime,
+ DndUtil.kURLMime,
+ DndUtil.kURLDataMime,
+ DndUtil.kURLDescriptionMime,
+ DndUtil.kNativeImageMime,
+ DndUtil.kNativeHTMLMime,
+ DndUtil.kFilePromiseURLMime,
+ DndUtil.kFilePromiseMime,
+ DndUtil.kFilePromiseDirectoryMime,
+ DndUtil.kTextMime
+ };
+
+
public VpeDnD(VpeController vpeController, MozillaEditor mozillaEditor) {
this.vpeController = vpeController;
draggablePattern = new DraggablePattern(mozillaEditor);
@@ -163,7 +169,7 @@
innerDrop(queryInterface(domEvent, nsIDOMMouseEvent.class));
} else {
//in this case it's is external drag
- externalDrop(queryInterface(domEvent, nsIDOMMouseEvent.class),
VpeController.MODEL_FLAVOR, ""); //$NON-NLS-1$
+ externalDrop(queryInterface(domEvent, nsIDOMMouseEvent.class)); //$NON-NLS-1$
}
disposeDropableArea();
vpeController.onRefresh();
@@ -255,7 +261,7 @@
private DropResolver getDropResolverForExternalDrop() {
if (getDragService().getCurrentSession()
- .isDataFlavorSupported(VpeController.MODEL_FLAVOR)) {
+ .isDataFlavorSupported(ModelTransfer.MODEL)) {
XModelObject object = PreferenceModelUtilities.getPreferenceModel()
.getModelBuffer().source();
if (object.getFileType() == XFileObject.FILE
@@ -278,8 +284,9 @@
}
private DropResolver getDropResolverForInternalDrop() {
- if (InnerDragBuffer.getInnerDragObject() instanceof Node) {
- return getDropResolverForNode((Node) InnerDragBuffer.getInnerDragObject());
+ Node node = DndUtil.getNodeFromDragSession(vpeController.getPageContext());
+ if (node != null) {
+ return getDropResolverForNode(node);
} else {
return getSimpleDropResolver(false);
}
@@ -396,11 +403,10 @@
* @param dragetElement
*/
private void startDragSession(nsIDOMElement element) {
- rememberDragNode(getSourceNode(element));
nsISupportsArray transArray = (nsISupportsArray) getComponentManager()
.createInstanceByContractID(XPCOM.NS_SUPPORTSARRAY_CONTRACTID, null,
nsISupportsArray.NS_ISUPPORTSARRAY_IID);
- transArray.appendElement(createTransferable());
+ transArray.appendElement(createTransferable(getSourceNode(element)));
getDragService().invokeDragSession(element, transArray, null,
nsIDragService.DRAGDROP_ACTION_MOVE
| nsIDragService.DRAGDROP_ACTION_COPY
@@ -412,29 +418,35 @@
*
* @return transferable object
*/
- private nsITransferable createTransferable() {
+ private nsITransferable createTransferable(Node node) {
nsITransferable iTransferable = (nsITransferable) getComponentManager()
.createInstanceByContractID(XPCOM.NS_TRANSFERABLE_CONTRACTID, null,
nsITransferable.NS_ITRANSFERABLE_IID);
- nsISupportsString transferData = (nsISupportsString) getComponentManager()
- .createInstanceByContractID(XPCOM.NS_SUPPORTSSTRING_CONTRACTID, null,
- nsISupportsString.NS_ISUPPORTSSTRING_IID);
- String data=VPE_ELEMENT;
- transferData.setData(data);
- iTransferable.setTransferData(VpeController.MODEL_FLAVOR, transferData,
data.length());
- iTransferable.setTransferData("text/plain", transferData, data.length());
//$NON-NLS-1$
- iTransferable.setTransferData("text/unicode", transferData,data.length()*2);
//$NON-NLS-1$
- iTransferable.setTransferData("text/html", transferData, data.length()*2);
//$NON-NLS-1$
- iTransferable.setTransferData("text/xml", transferData, data.length()*2);
//$NON-NLS-1$
- iTransferable.setTransferData("text/rtf", transferData, data.length()*2);
//$NON-NLS-1$
- iTransferable.setTransferData("text/enriched", transferData,
data.length()*2); //$NON-NLS-1$
- iTransferable.setTransferData("text/richtext", transferData,
data.length()*2); //$NON-NLS-1$
- iTransferable.setTransferData("text/t140", transferData, data.length()*2);
//$NON-NLS-1$
+ String nodeSource = ((NodeContainer)node).getSource();
+ nsISupportsString nodeSourceData = createNsISupportsString(nodeSource);
+ int nodeSourceDataLength = nodeSource.length() * 2;
+ iTransferable.setTransferData(ModelTransfer.MODEL, nodeSourceData,
nodeSourceDataLength);
+ iTransferable.setTransferData("text/html", nodeSourceData,
nodeSourceDataLength); //$NON-NLS-1$
+ iTransferable.setTransferData("text/unicode", nodeSourceData,
nodeSourceDataLength); //$NON-NLS-1$
+
+ String xPath = XSLTXPathHelper.calculateXPathToNode(node);
+ nsISupportsString xPathData = createNsISupportsString(xPath);
+ iTransferable.setTransferData(DndUtil.VPE_XPATH_FLAVOR, xPathData, xPath.length() *
2);
+
return iTransferable;
}
+ private nsISupportsString createNsISupportsString(String data) {
+ nsISupportsString xulString = (nsISupportsString) getComponentManager()
+ .createInstanceByContractID(XPCOM.NS_SUPPORTSSTRING_CONTRACTID, null,
+ nsISupportsString.NS_ISUPPORTSSTRING_IID);
+ xulString.setData(data);
+
+ return xulString;
+ }
+
private void refreshCanDrop(nsIDOMEvent event) {
nsIDOMMouseEvent mouseEvent = queryInterface(event, nsIDOMMouseEvent.class);
@@ -466,16 +478,6 @@
return getDragService().getCurrentSession().getSourceDocument() != null;
}
- private void rememberDragNode(Node node) {
- InnerDragBuffer.setInnerDragObject(node);
- //commented by Maksim Areshkau as fix for
https://jira.jboss.org/browse/JBIDE-6860
-// Display.getDefault().asyncExec(new Runnable() {
-// public void run() {
-// InnerDragBuffer.setInnerDragObject(null);
-// }
-// });
- }
-
private boolean isDraggable(nsIDOMElement element) {
vpeController.onHideTooltip();
@@ -525,30 +527,30 @@
textWidget.replaceTextRange(selectionRange.x, selectionRange.y, "");
//$NON-NLS-1$
dropAny(DndUtil.kUnicodeMime, text);
- } else if (InnerDragBuffer.getInnerDragObject() instanceof Node) {
- VpeSourceDropInfo sourceDropInfo = getDropInfo();
- if (sourceDropInfo.getContainer() != null) {
- if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
- System.out
- .print(" container: " + sourceDropInfo.getContainer().getNodeName() +
//$NON-NLS-1$
- "(" + sourceDropInfo.getContainer() //$NON-NLS-1$
- + ")" + //$NON-NLS-1$
- " offset: " //$NON-NLS-1$
- + sourceDropInfo.getOffset());
+ } else {
+ Node node = DndUtil.getNodeFromDragSession(vpeController.getPageContext());
+ if (node != null) {
+ VpeSourceDropInfo sourceDropInfo = getDropInfo();
+ if (sourceDropInfo.getContainer() != null) {
+ if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
+ System.out
+ .print(" container: " + sourceDropInfo.getContainer().getNodeName() +
//$NON-NLS-1$
+ "(" + sourceDropInfo.getContainer() //$NON-NLS-1$
+ + ")" + //$NON-NLS-1$
+ " offset: " //$NON-NLS-1$
+ + sourceDropInfo.getOffset());
+ }
+
+ if (sourceDropInfo.canDrop()) {
+ VpeDnDHelper dropper = new VpeDnDHelper();
+ dropper.setDndData(false, true);
+ dropper.drop(vpeController.getPageContext(),
+ new VpeSourceInnerDragInfo(node, 0, 0), sourceDropInfo);
+
+ // select dropped node, JBIDE-6239
+ setSelectedNode(node);
+ }
}
-
- if (sourceDropInfo.canDrop()) {
- VpeDnDHelper dropper = new VpeDnDHelper();
- dropper.setDndData(false, true);
- Node node = (Node) InnerDragBuffer.getInnerDragObject();
- dropper.drop(vpeController.getPageContext(),
- new VpeSourceInnerDragInfo(node, 0, 0), sourceDropInfo);
-
- // select dropped node, JBIDE-6239
- setSelectedNode(node);
-
- InnerDragBuffer.setInnerDragObject(null);
- }
}
}
if (VpeDebug.PRINT_VISUAL_INNER_DRAGDROP_EVENT) {
@@ -567,14 +569,12 @@
sourceNodeBounds.getEndOffset());
}
- private void externalDrop(nsIDOMMouseEvent mouseEvent, String flavor, String data) {
+ private void externalDrop(nsIDOMMouseEvent mouseEvent) {
vpeController.onHideTooltip();
-
-
- final DragTransferData dragTransferData = DndUtil.getDragTransferData();
+ final DragTransferData dragTransferData = DndUtil.getDragTransferData(FLAVORS);
final nsISupports aValue = dragTransferData.getValue();
-
+ String data = ""; //$NON-NLS-1$
String aFlavor = ""; //$NON-NLS-1$
if (VpeDndUtil.isNsIFileInstance(aValue)) {
nsIFile aFile = queryInterface(aValue, nsIFile.class);
@@ -592,7 +592,7 @@
} else if (VpeDndUtil.isNsIStringInstance(aValue)) {
nsISupportsString aString = queryInterface(aValue, nsISupportsString.class);
data = aString.getData();
- if (VpeController.MODEL_FLAVOR.equals(dragTransferData.getFlavor())) {
+ if (ModelTransfer.MODEL.equals(dragTransferData.getFlavor())) {
aFlavor = dragTransferData.getFlavor();
} else {
aFlavor = DndUtil.kURLMime;
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeController.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -217,7 +217,6 @@
*/
private IKeyEventHandler keyEventHandler;
- public final static String MODEL_FLAVOR = ModelTransfer.MODEL;
// contains vpe update delau time in miliseconds
private int vpeUpdateDelayTime;
@@ -244,6 +243,7 @@
visualBuilder = new VpeVisualDomBuilder(domMapping, this, visualEditor,
pageContext);
vpeDnD = new VpeDnD(this, visualEditor);
+ visualEditor.getXulRunnerEditor().addSelectionListener(vpeDnD);
pageContext.setSourceDomBuilder(sourceBuilder);
pageContext.setVisualDomBuilder(visualBuilder);
IDOMModel sourceModel = (IDOMModel) getModel();
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/VpeVisualDomBuilder.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -1333,7 +1333,6 @@
int resizerConstrains = getResizerConstrains(visualElement);
visualEditor.setSelectionRectangle(visualElement, resizerConstrains,
scroll);
- this.visualEditor.getController().getVpeDnD().selectionChanged();
}
/**
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/dnd/context/JSPViewerDropAdapter.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/dnd/context/JSPViewerDropAdapter.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/dnd/context/JSPViewerDropAdapter.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -29,8 +29,10 @@
import org.jboss.tools.common.model.options.PreferenceModelUtilities;
import org.jboss.tools.common.model.ui.dnd.ModelTransfer;
import org.jboss.tools.common.model.ui.editors.dnd.context.DropContext;
-import org.jboss.tools.common.model.ui.editors.dnd.context.InnerDragBuffer;
import org.jboss.tools.jst.jsp.editor.IJSPTextEditor;
+import org.jboss.tools.jst.jsp.editor.IVisualContext;
+import org.jboss.tools.vpe.dnd.DndUtil;
+import org.jboss.tools.vpe.editor.context.VpePageContext;
import org.jboss.tools.vpe.editor.dnd.context.xpl.DragNodeCommand2;
import org.w3c.dom.Attr;
import org.w3c.dom.Node;
@@ -189,13 +191,17 @@
if(testOnly) {
return editor != null && editor.isEditable() &&
dropContext.getFlavor() != null;
} else {
- if(InnerDragBuffer.getInnerDragObject() instanceof Node && editor instanceof
IJSPTextEditor) {
+ Node dragNode = null;
+ IVisualContext pageContext = editor.getVPEController().getPageContext();
+ if (pageContext instanceof VpePageContext) {
+ dragNode = DndUtil.getNodeFromDragSession((VpePageContext) pageContext);
+ }
+ if(dragNode != null && editor instanceof IJSPTextEditor) {
int offset = 0;
if(refChild instanceof NodeImpl) {
offset = ((NodeImpl)refChild).getIndex();
}
- ((IJSPTextEditor)editor).getVPEController().drop((Node)InnerDragBuffer.getInnerDragObject(),
parentNode, offset);
- InnerDragBuffer.setInnerDragObject(null);
+ ((IJSPTextEditor)editor).getVPEController().drop(dragNode, parentNode, offset);
} else {
int pos = getDropPosition(parentNode, refChild);
editor.selectAndReveal(pos, 0);
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/SourceDomUtil.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/SourceDomUtil.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/vpe/plugins/org.jboss.tools.vpe/src/org/jboss/tools/vpe/editor/util/SourceDomUtil.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -13,6 +13,10 @@
import java.util.HashSet;
import java.util.Set;
+import javax.xml.transform.TransformerException;
+
+import org.eclipse.wst.xml.xpath.core.util.XSLTXPathHelper;
+import org.jboss.tools.vpe.VpePlugin;
import org.jboss.tools.vpe.editor.context.VpePageContext;
import org.jboss.tools.vpe.editor.mapping.VpeDomMapping;
import org.jboss.tools.vpe.editor.mapping.VpeNodeMapping;
@@ -108,4 +112,18 @@
}
return facetElement;
}
+
+ /**
+ * Returns source node by its XPath.
+ */
+ public static Node getNodeByXPath(VpePageContext pageContext, String xPath) {
+ Node node = null;
+ try {
+ node = XSLTXPathHelper.selectSingleNode(
+ pageContext.getSourceBuilder().getSourceDocument(), xPath);
+ } catch (TransformerException e) {
+ VpePlugin.reportProblem(e);
+ }
+ return node;
+ }
}
Added:
trunk/vpe/plugins/org.jboss.tools.vpe.xulrunner/src/org/jboss/tools/vpe/xulrunner/editor/IVpeSelectionListener.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.xulrunner/src/org/jboss/tools/vpe/xulrunner/editor/IVpeSelectionListener.java
(rev 0)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.xulrunner/src/org/jboss/tools/vpe/xulrunner/editor/IVpeSelectionListener.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.vpe.xulrunner.editor;
+
+/**
+ * Selection listener. It is fired when selection rectangle is changed.
+ *
+ * @author Yahor Radtsevich (yradtsevich)
+ */
+public interface IVpeSelectionListener {
+ public void selectionChanged();
+}
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.xulrunner/src/org/jboss/tools/vpe/xulrunner/editor/XulRunnerEditor.java
===================================================================
---
trunk/vpe/plugins/org.jboss.tools.vpe.xulrunner/src/org/jboss/tools/vpe/xulrunner/editor/XulRunnerEditor.java 2010-09-09
18:00:10 UTC (rev 24848)
+++
trunk/vpe/plugins/org.jboss.tools.vpe.xulrunner/src/org/jboss/tools/vpe/xulrunner/editor/XulRunnerEditor.java 2010-09-09
19:23:16 UTC (rev 24849)
@@ -11,6 +11,8 @@
package org.jboss.tools.vpe.xulrunner.editor;
+import java.util.ArrayList;
+import java.util.List;
import java.util.regex.Pattern;
import org.eclipse.swt.SWT;
@@ -40,7 +42,6 @@
import org.mozilla.interfaces.nsIDragSession;
import org.mozilla.interfaces.nsIInterfaceRequestor;
import org.mozilla.interfaces.nsISelection;
-import org.mozilla.interfaces.nsISelectionListener;
import org.mozilla.interfaces.nsIServiceManager;
import org.mozilla.interfaces.nsISupports;
import org.mozilla.interfaces.nsITooltipListener;
@@ -57,6 +58,8 @@
/** IVpeResizeListener */
private IVpeResizeListener resizeListener;
+
+ private List<IVpeSelectionListener> selectionListeners = new
ArrayList<IVpeSelectionListener>();
/** IXulRunnerVpeResizer */
private IXulRunnerVpeResizer xulRunnerVpeResizer;
@@ -111,8 +114,6 @@
*/
private boolean scrollRegtangleFlag = false;
- private nsISelectionListener selectionListener;
-
private Listener eventListenet = new Listener() {
public void handleEvent(Event event) {
@@ -259,7 +260,21 @@
getIXulRunnerVpeResizer().addResizeListener(resizeListener);
}
}
-
+
+ public void addSelectionListener(IVpeSelectionListener selectionListener) {
+ selectionListeners.add(selectionListener);
+ }
+
+ public void removeSelectionListener(IVpeSelectionListener selectionListener) {
+ selectionListeners.remove(selectionListener);
+ }
+
+ private void fireSelectionListeners() {
+ for (IVpeSelectionListener listener : selectionListeners) {
+ listener.selectionChanged();
+ }
+ }
+
public void onLoadWindow() {
addResizerListener();
}
@@ -476,6 +491,8 @@
// setLastSelectedElement(element);
setLastSelectedNode(node);
lastResizerConstrains = resizerConstrains;
+
+ fireSelectionListeners();
}
/**