[Layout] Position frames on drop

Position frames within a layout based on the position
where they were dropped into the layout, WTD-877.
This commit is contained in:
Victor Woeltjen 2015-02-17 10:23:10 -08:00
parent e158f2811c
commit 01d953bf45
2 changed files with 31 additions and 2 deletions

View File

@ -85,6 +85,26 @@ define(
// Position panes when the model field changes
$scope.$watch("model.composition", lookupPanels);
// Position panes where they are dropped
$scope.$on("mctDrop", function (e, id, position) {
// Make sure there is a "panels" field in the
// view configuration.
$scope.configuration.panels =
$scope.configuration.panels || {};
// Store the position of this panel.
$scope.configuration.panels[id] = {
position: [
Math.floor(position.x / gridSize[0]),
Math.floor(position.y / gridSize[1])
],
dimensions: DEFAULT_DIMENSIONS
};
// Mark change as persistable
if ($scope.commit) {
$scope.commit("Dropped a frame.");
}
});
return {
/**
* Get a style object for a frame with the specified domain

View File

@ -22,14 +22,23 @@ define(
function DropGesture($q, element, domainObject) {
function broadcastDrop(id, event) {
// Find the relevant scope...
var scope = element && element.scope && element.scope();
var scope = element && element.scope && element.scope(),
rect;
if (scope && scope.$broadcast) {
// Get the representation's bounds, to convert
// drop position
rect = element[0].getBoundingClientRect();
// ...and broadcast the event. This allows specific
// views to have post-drop behavior which depends on
// drop position.
scope.$broadcast(
GestureConstants.MCT_DROP_EVENT,
{ id: id, dropEvent: event }
id,
{
x: event.pageX - rect.left,
y: event.pageY - rect.top
}
);
}
}