diff options
author | Tor Norbye <tnorbye@google.com> | 2010-10-27 16:12:45 -0700 |
---|---|---|
committer | Android Code Review <code-review@android.com> | 2010-10-27 16:12:45 -0700 |
commit | 2067929e3e3297b0fd93baec2c3794461e7bcc54 (patch) | |
tree | 7fdb559cece0c431fa2b58c4272eba514c9b9dc8 | |
parent | eca6b85e854b5c327fe8cd792e01bb8c1ca5648f (diff) | |
parent | 76bbc57fcc07859cd1d7f1c9be102b1dc5218f27 (diff) | |
download | sdk-2067929e3e3297b0fd93baec2c3794461e7bcc54.zip sdk-2067929e3e3297b0fd93baec2c3794461e7bcc54.tar.gz sdk-2067929e3e3297b0fd93baec2c3794461e7bcc54.tar.bz2 |
Merge "Warp to source editor on widget double click"
3 files changed, 66 insertions, 1 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlEditor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlEditor.java index 18f1e28..a1b9d13 100644 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlEditor.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/AndroidXmlEditor.java @@ -62,10 +62,12 @@ import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.provisional.IModelManager; import org.eclipse.wst.sse.core.internal.provisional.IModelStateListener; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; +import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; import org.eclipse.wst.sse.ui.StructuredTextEditor; import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; import org.w3c.dom.Document; +import org.w3c.dom.Node; import java.net.MalformedURLException; import java.net.URL; @@ -870,6 +872,38 @@ public abstract class AndroidXmlEditor extends FormEditor implements IResourceCh return null; } + /** + * Shows the editor range corresponding to the given XML node. This will + * front the editor and select the text range. + * + * @param xmlNode The DOM node to be shown. The DOM node should be an XML + * node from the existing XML model used by the structured XML + * editor; it will not do attribute matching to find a + * "corresponding" element in the document from some foreign DOM + * tree. + * @return True if the node was shown. + */ + @SuppressWarnings("restriction") // Yes, this method relies a lot on restricted APIs + public boolean show(Node xmlNode) { + if (xmlNode instanceof IndexedRegion) { + IndexedRegion region = (IndexedRegion)xmlNode; + + IEditorPart textPage = getEditor(mTextPageIndex); + if (textPage instanceof StructuredTextEditor) { + StructuredTextEditor editor = (StructuredTextEditor) textPage; + + setActivePage(AndroidXmlEditor.TEXT_EDITOR_ID); + + // Note - we cannot use region.getLength() because that seems to + // always return 0. + int regionLength = region.getEndOffset() - region.getStartOffset(); + editor.selectAndReveal(region.getStartOffset(), regionLength); + return true; + } + } + + return false; + } /** * Listen to changes in the underlying XML model in the structured editor. diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/CanvasViewInfo.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/CanvasViewInfo.java index 2781d1a..f4dce0f 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/CanvasViewInfo.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/CanvasViewInfo.java @@ -24,6 +24,7 @@ import org.eclipse.swt.graphics.Rectangle; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertySheetPage; import org.eclipse.ui.views.properties.IPropertySource; +import org.w3c.dom.Node; import java.util.ArrayList; @@ -242,4 +243,19 @@ public class CanvasViewInfo implements IPropertySource { ((IPropertySource) uiView).setPropertyValue(id, value); } } + + /** + * Returns the XML node corresponding to this info, or null if there is no + * such XML node. + * + * @return The XML node corresponding to this info object, or null + */ + public Node getXmlNode() { + UiViewElementNode uiView = getUiViewKey(); + if (uiView != null) { + return uiView.getXmlNode(); + } + + return null; + } } diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java index 44a2e74..29094b7 100755 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/LayoutCanvas.java @@ -1328,7 +1328,22 @@ class LayoutCanvas extends Canvas implements ISelectionProvider { } private void onDoubleClick(MouseEvent e) { - // pass, not used yet. + // Warp to the text editor and show the corresponding XML for the + // double-clicked widget + int x = mHScale.inverseTranslate(e.x); + int y = mVScale.inverseTranslate(e.y); + CanvasViewInfo vi = findViewInfoAt(x, y); + if (vi == null) { + return; + } + + Node xmlNode = vi.getXmlNode(); + if (xmlNode != null) { + boolean found = mLayoutEditor.show(xmlNode); + if (!found) { + getDisplay().beep(); + } + } } /** |