swimlane drag drop not working properly…
prmr file…
Are you using go-debug.js
and checking for any warnings or errors in the console window?
Error Line 2952
internalHelper._getLanesInRect = function (diagram, rect) {
var pointObjects = diagram.findObjectsIn(rect, function (x) {
if (x && x instanceof go.Group && (x.category == "Lane")) {
return x;
}
return null;
}, null, true);
return pointObjects;
}
Error line 3002
internalHelper._setPartMultiLane = function (part) {
if (part && part.diagram && part.resizeObject) {
var diagram = part.diagram;
var pos = part.resizeObject.getDocumentPoint(go.Spot.TopLeft);
var rect = new go.Rect(pos.x, pos.y, part.resizeObject.width, part.resizeObject.height);
var lanes = internalHelper._getLanesInRect(diagram, rect);
if (lanes) {
var laneKeys = [];
var pools = new go.List(go.Group);
lanes.each(function (lane) {
if (lane.containingGroup && !pools.contains(lane.containingGroup)) {
pools.add(lane.containingGroup);
}
laneKeys.push(lane.data.key);
});
if (pools.count > 0) {
part.isLayoutPositioned = false;
}
if (laneKeys.length > 0) {
pools.each(function (pool) {
var memberParts = new go.List(go.Node);
memberParts.add(part);
var ok = pool.addMembers(memberParts, true);
if (ok) {
diagram.model.setDataProperty(part.data, "multiLanes", $.extend(true, [], laneKeys));
}
else {
diagram.currentTool.doCancel();
}
});
}
}
}
}
When is _setPartMultiLane
being called?
I comment
/*diagram.skipsUndoManager = true;
multiLanesParts.each(function (part) {
internalHelper._setPartMultiLane(part);
});
diagram.skipsUndoManager = false;
*/
and
// internalHelper._relayoutPools(diagram);
work
diagram.addModelChangedListener(function (e) {
if (e.isTransactionFinished && e.model && e.object && e.object.changes) {
var changedPools = new go.List(go.Group);
var multiLanesParts = new go.List(go.Node);
e.object.changes.each(function (transItem) {
if (transItem.diagram && transItem.object && transItem.object.data) {
if (transItem.object.data.multiLanes) {
if (!multiLanesParts.contains(transItem.object)) {
multiLanesParts.add(transItem.object);
}
}
if (transItem.object.category == "Lane" && transItem.object.containingGroup && transItem.object.containingGroup.category == "Pool") {
if (!changedPools.contains(transItem.object.containingGroup)) {
changedPools.add(transItem.object.containingGroup);
}
}
}
});
changedPools.each(function (pool) {
pool.memberParts.each(function (part) {
if (part instanceof go.Group) return;
if (part.data && part.data.multiLanes && !multiLanesParts.contains(part)) {
multiLanesParts.add(part);
}
});
});
if (multiLanesParts.count > 0) {
window.setTimeout(function () { // max call stack hatasına düşmemek için
/*diagram.skipsUndoManager = true;
multiLanesParts.each(function (part) {
internalHelper._setPartMultiLane(part);
});
diagram.skipsUndoManager = false;
*/
internalHelper._relayoutPools(diagram);
}, 1);
}
}
if (e.isTransactionFinished && onRibbonRefresh) {
onRibbonRefresh();
}
if (e.propertyName == "FinishedUndo" || e.propertyName == "FinishedRedo") {
// internalHelper._relayoutPools(diagram);
diagram.skipsUndoManager = true;
diagram.clearHighlighteds();
diagram.skipsUndoManager = false;
}
if (e.isTransactionFinished && e.model && e.object && onModelChanged) {
onModelChanged();
}
});
This is all too complicated for me to understand. What is _setPartMultiLane
supposed to do, and why are you calling it with skipsUndoManager temporarily set to true after a transaction has ended?