/**
   * Called when a drop is completed and we're in grid-editing mode. This will insert the dragged
   * element into the target cell.
   *
   * @param targetNode the GridLayout node
   * @param element the dragged element
   * @return the newly created node
   */
  public INode handleGridModeDrop(INode targetNode, IDragElement element) {
    String fqcn = element.getFqcn();
    INode newChild = targetNode.appendChild(fqcn);

    int column = mColumnMatch.cellIndex;
    if (mColumnMatch.createCell) {
      mGrid.addColumn(column, newChild, UNDEFINED, false, UNDEFINED, UNDEFINED);
    }
    int row = mRowMatch.cellIndex;
    if (mRowMatch.createCell) {
      mGrid.addRow(row, newChild, UNDEFINED, false, UNDEFINED, UNDEFINED);
    }

    mGrid.setGridAttribute(newChild, ATTR_LAYOUT_COLUMN, column);
    mGrid.setGridAttribute(newChild, ATTR_LAYOUT_ROW, row);

    int gravity = 0;
    if (mColumnMatch.type == SegmentType.RIGHT) {
      gravity |= GravityHelper.GRAVITY_RIGHT;
    } else if (mColumnMatch.type == SegmentType.CENTER_HORIZONTAL) {
      gravity |= GravityHelper.GRAVITY_CENTER_HORIZ;
    }
    if (mRowMatch.type == SegmentType.BASELINE) {
      // There *is* no baseline gravity constant, instead, leave the
      // vertical gravity unspecified and GridLayout will treat it as
      // baseline alignment
      // gravity |= GravityHelper.GRAVITY_BASELINE;
    } else if (mRowMatch.type == SegmentType.BOTTOM) {
      gravity |= GravityHelper.GRAVITY_BOTTOM;
    } else if (mRowMatch.type == SegmentType.CENTER_VERTICAL) {
      gravity |= GravityHelper.GRAVITY_CENTER_VERT;
    }
    if (!GravityHelper.isConstrainedHorizontally(gravity)) {
      gravity |= GravityHelper.GRAVITY_LEFT;
    }
    if (!GravityHelper.isConstrainedVertically(gravity)) {
      gravity |= GravityHelper.GRAVITY_TOP;
    }
    mGrid.setGridAttribute(newChild, ATTR_LAYOUT_GRAVITY, getGravity(gravity));

    if (mGrid.declaredColumnCount == UNDEFINED || mGrid.declaredColumnCount < column + 1) {
      mGrid.setGridAttribute(mGrid.layout, ATTR_COLUMN_COUNT, column + 1);
    }

    return newChild;
  }