/** * 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; }