aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java254
1 files changed, 0 insertions, 254 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java
deleted file mode 100644
index 3ec3b5f1a..000000000
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/AbsoluteLayoutRule.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Eclipse Public License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.eclipse.org/org/documents/epl-v10.php
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.ide.common.layout;
-
-import static com.android.SdkConstants.ANDROID_URI;
-import static com.android.SdkConstants.ATTR_LAYOUT_X;
-import static com.android.SdkConstants.ATTR_LAYOUT_Y;
-import static com.android.SdkConstants.VALUE_N_DP;
-
-import com.android.annotations.NonNull;
-import com.android.annotations.Nullable;
-import com.android.ide.common.api.DrawingStyle;
-import com.android.ide.common.api.DropFeedback;
-import com.android.ide.common.api.IDragElement;
-import com.android.ide.common.api.IFeedbackPainter;
-import com.android.ide.common.api.IGraphics;
-import com.android.ide.common.api.INode;
-import com.android.ide.common.api.INodeHandler;
-import com.android.ide.common.api.IViewRule;
-import com.android.ide.common.api.Point;
-import com.android.ide.common.api.Rect;
-import com.android.ide.common.api.SegmentType;
-import com.android.utils.Pair;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * An {@link IViewRule} for android.widget.AbsoluteLayout and all its derived
- * classes.
- */
-public class AbsoluteLayoutRule extends BaseLayoutRule {
-
- @Override
- public List<String> getSelectionHint(@NonNull INode parentNode, @NonNull INode childNode) {
- List<String> infos = new ArrayList<String>(2);
- infos.add("AbsoluteLayout is deprecated.");
- infos.add("Use other layouts instead.");
- return infos;
- }
-
- // ==== Drag'n'drop support ====
- // The AbsoluteLayout accepts any drag'n'drop anywhere on its surface.
-
- @Override
- public DropFeedback onDropEnter(@NonNull INode targetNode, @Nullable Object targetView,
- final @Nullable IDragElement[] elements) {
-
- if (elements.length == 0) {
- return null;
- }
-
- DropFeedback df = new DropFeedback(null, new IFeedbackPainter() {
- @Override
- public void paint(@NonNull IGraphics gc, @NonNull INode node,
- @NonNull DropFeedback feedback) {
- // Paint callback for the AbsoluteLayout.
- // This is called by the canvas when a draw is needed.
- drawFeedback(gc, node, elements, feedback);
- }
- });
- df.errorMessage = "AbsoluteLayout is deprecated.";
- return df;
- }
-
- void drawFeedback(
- IGraphics gc,
- INode targetNode,
- IDragElement[] elements,
- DropFeedback feedback) {
- Rect b = targetNode.getBounds();
- if (!b.isValid()) {
- return;
- }
-
- // Highlight the receiver
- gc.useStyle(DrawingStyle.DROP_RECIPIENT);
- gc.drawRect(b);
-
- // Get the drop point
- Point p = (Point) feedback.userData;
-
- if (p == null) {
- return;
- }
-
- int x = p.x;
- int y = p.y;
-
- Rect be = elements[0].getBounds();
-
- if (be.isValid()) {
- // At least the first element has a bound. Draw rectangles
- // for all dropped elements with valid bounds, offset at
- // the drop point.
- int offsetX = x - be.x + (feedback.dragBounds != null ? feedback.dragBounds.x : 0);
- int offsetY = y - be.y + (feedback.dragBounds != null ? feedback.dragBounds.y : 0);
- gc.useStyle(DrawingStyle.DROP_PREVIEW);
- for (IDragElement element : elements) {
- drawElement(gc, element, offsetX, offsetY);
- }
- } else {
- // We don't have bounds for new elements. In this case
- // just draw cross hairs to the drop point.
- gc.useStyle(DrawingStyle.GUIDELINE);
- gc.drawLine(x, b.y, x, b.y + b.h);
- gc.drawLine(b.x, y, b.x + b.w, y);
-
- // Use preview lines to indicate the bottom quadrant as well (to
- // indicate that you are looking at the top left position of the
- // drop, not the center for example)
- gc.useStyle(DrawingStyle.DROP_PREVIEW);
- gc.drawLine(x, y, b.x + b.w, y);
- gc.drawLine(x, y, x, b.y + b.h);
- }
- }
-
- @Override
- public DropFeedback onDropMove(@NonNull INode targetNode, @NonNull IDragElement[] elements,
- @Nullable DropFeedback feedback, @NonNull Point p) {
- // Update the data used by the DropFeedback.paintCallback above.
- feedback.userData = p;
- feedback.requestPaint = true;
-
- return feedback;
- }
-
- @Override
- public void onDropLeave(@NonNull INode targetNode, @NonNull IDragElement[] elements,
- @Nullable DropFeedback feedback) {
- // Nothing to do.
- }
-
- @Override
- public void onDropped(final @NonNull INode targetNode, final @NonNull IDragElement[] elements,
- final @Nullable DropFeedback feedback, final @NonNull Point p) {
-
- final Rect b = targetNode.getBounds();
- if (!b.isValid()) {
- return;
- }
-
- // Collect IDs from dropped elements and remap them to new IDs
- // if this is a copy or from a different canvas.
- final Map<String, Pair<String, String>> idMap = getDropIdMap(targetNode, elements,
- feedback.isCopy || !feedback.sameCanvas);
-
- targetNode.editXml("Add elements to AbsoluteLayout", new INodeHandler() {
- @Override
- public void handle(@NonNull INode node) {
- boolean first = true;
- Point offset = null;
-
- // Now write the new elements.
- for (IDragElement element : elements) {
- String fqcn = element.getFqcn();
- Rect be = element.getBounds();
-
- INode newChild = targetNode.appendChild(fqcn);
-
- // Copy all the attributes, modifying them as needed.
- addAttributes(newChild, element, idMap, DEFAULT_ATTR_FILTER);
-
- int deltaX = (feedback.dragBounds != null ? feedback.dragBounds.x : 0);
- int deltaY = (feedback.dragBounds != null ? feedback.dragBounds.y : 0);
-
- int x = p.x - b.x + deltaX;
- int y = p.y - b.y + deltaY;
-
- if (first) {
- first = false;
- if (be.isValid()) {
- offset = new Point(x - be.x, y - be.y);
- }
- } else if (offset != null && be.isValid()) {
- x = offset.x + be.x;
- y = offset.y + be.y;
- } else {
- x += 10;
- y += be.isValid() ? be.h : 10;
- }
-
- double scale = feedback.dipScale;
- if (scale != 1.0) {
- x *= scale;
- y *= scale;
- }
-
- newChild.setAttribute(ANDROID_URI, ATTR_LAYOUT_X,
- String.format(VALUE_N_DP, x));
- newChild.setAttribute(ANDROID_URI, ATTR_LAYOUT_Y,
- String.format(VALUE_N_DP, y));
-
- addInnerElements(newChild, element, idMap);
- }
- }
- });
- }
-
- /**
- * {@inheritDoc}
- * <p>
- * Overridden in this layout in order to let the top left coordinate be affected by
- * the resize operation too. In other words, dragging the top left corner to resize a
- * widget will not only change the size of the widget, it will also move it (though in
- * this case, the bottom right corner will stay fixed).
- */
- @Override
- protected void setNewSizeBounds(ResizeState resizeState, INode node, INode layout,
- Rect previousBounds, Rect newBounds, SegmentType horizontalEdge,
- SegmentType verticalEdge) {
- super.setNewSizeBounds(resizeState, node, layout, previousBounds, newBounds,
- horizontalEdge, verticalEdge);
- if (verticalEdge != null && newBounds.x != previousBounds.x) {
- node.setAttribute(ANDROID_URI, ATTR_LAYOUT_X,
- String.format(VALUE_N_DP,
- mRulesEngine.pxToDp(newBounds.x - node.getParent().getBounds().x)));
- }
- if (horizontalEdge != null && newBounds.y != previousBounds.y) {
- node.setAttribute(ANDROID_URI, ATTR_LAYOUT_Y,
- String.format(VALUE_N_DP,
- mRulesEngine.pxToDp(newBounds.y - node.getParent().getBounds().y)));
- }
- }
-
- @Override
- protected String getResizeUpdateMessage(ResizeState resizeState, INode child, INode parent,
- Rect newBounds, SegmentType horizontalEdge, SegmentType verticalEdge) {
- Rect parentBounds = parent.getBounds();
- if (horizontalEdge == SegmentType.BOTTOM && verticalEdge == SegmentType.RIGHT) {
- return super.getResizeUpdateMessage(resizeState, child, parent, newBounds,
- horizontalEdge, verticalEdge);
- }
- return String.format("x=%d, y=%d\nwidth=%s, height=%s",
- mRulesEngine.pxToDp(newBounds.x - parentBounds.x),
- mRulesEngine.pxToDp(newBounds.y - parentBounds.y),
- resizeState.getWidthAttribute(), resizeState.getHeightAttribute());
- }
-}