mirror of
https://github.com/ONLYOFFICE/sdkjs.git
synced 2026-04-07 14:09:12 +08:00
259 lines
7.3 KiB
JavaScript
259 lines
7.3 KiB
JavaScript
/**
|
|
* Created with JetBrains WebStorm.
|
|
* User: Sergey.Luzyanin
|
|
* Date: 6/26/13
|
|
* Time: 6:29 PM
|
|
* To change this template use File | Settings | File Templates.
|
|
*/
|
|
function DrawingObjectsController(drawingObjects)
|
|
{
|
|
this.drawingObjects = drawingObjects;
|
|
|
|
this.curState = new NullState(this, drawingObjects);
|
|
this.selectedObjects = [];
|
|
this.arrPreTrackObjects = [];
|
|
this.arrTrackObjects = [];
|
|
}
|
|
|
|
DrawingObjectsController.prototype =
|
|
{
|
|
changeCurrentState: function(newState)
|
|
{
|
|
this.curState = newState;
|
|
},
|
|
|
|
onMouseDown: function(e, x, y)
|
|
{
|
|
this.curState.onMouseDown(e, x, y);
|
|
},
|
|
|
|
onMouseMove: function(e, x, y)
|
|
{
|
|
this.curState.onMouseMove(e, x, y);
|
|
},
|
|
|
|
onMouseUp: function(e, x, y)
|
|
{
|
|
this.curState.onMouseUp(e, x, y);
|
|
},
|
|
|
|
onKeyDown: function(e)
|
|
{
|
|
this.curState.onKeyDown(e);
|
|
},
|
|
|
|
onKeyPress: function(e)
|
|
{
|
|
this.curState.onKeyPress(e);
|
|
},
|
|
|
|
resetSelectionState: function()
|
|
{
|
|
while(this.selectedObjects.length > 0)
|
|
this.selectedObjects[0].deselect(this);
|
|
this.changeCurrentState(new NullState(this, this.drawingObjects));
|
|
},
|
|
|
|
resetSelection: function()
|
|
{
|
|
while(this.selectedObjects.length > 0)
|
|
this.selectedObjects[0].deselect(this);
|
|
},
|
|
|
|
clearPreTrackObjects: function()
|
|
{
|
|
this.arrPreTrackObjects.length = 0;
|
|
},
|
|
|
|
addPreTrackObject: function(preTrackObject)
|
|
{
|
|
this.arrPreTrackObjects.push(preTrackObject);
|
|
},
|
|
|
|
clearTrackObjects: function()
|
|
{
|
|
this.arrTrackObjects.length = 0;
|
|
},
|
|
|
|
addTrackObject: function(trackObject)
|
|
{
|
|
this.arrTrackObjects.push(trackObject);
|
|
},
|
|
|
|
swapTrackObjects: function()
|
|
{
|
|
this.clearTrackObjects();
|
|
for(var i = 0; i < this.arrPreTrackObjects.length; ++i)
|
|
this.addTrackObject(this.arrPreTrackObjects[i]);
|
|
this.clearPreTrackObjects();
|
|
},
|
|
|
|
getTrackObjects: function()
|
|
{
|
|
return this.arrTrackObjects;
|
|
},
|
|
|
|
rotateTrackObjects: function(angle, e)
|
|
{
|
|
for(var i = 0; i < this.arrTrackObjects.length; ++i)
|
|
this.arrTrackObjects[i].track(angle, e);
|
|
},
|
|
|
|
trackNewShape: function(e, x, y)
|
|
{
|
|
this.arrTrackObjects[0].track(e, x, y);
|
|
},
|
|
|
|
trackMoveObjects: function(dx, dy)
|
|
{
|
|
for(var i = 0; i < this.arrTrackObjects.length; ++i)
|
|
this.arrTrackObjects[i].track(dx, dy);
|
|
},
|
|
|
|
trackAdjObject: function(x, y)
|
|
{
|
|
if(this.arrTrackObjects.length > 0)
|
|
this.arrTrackObjects[0].track(x, y);
|
|
},
|
|
|
|
trackResizeObjects: function(kd1, kd2, e)
|
|
{
|
|
for(var i = 0; i < this.arrTrackObjects.length; ++i)
|
|
this.arrTrackObjects[i].track(kd1, kd2, e);
|
|
},
|
|
|
|
trackEnd: function()
|
|
{
|
|
for(var i = 0; i < this.arrTrackObjects.length; ++i)
|
|
this.arrTrackObjects[i].trackEnd();
|
|
this.drawingObjects.showDrawingObjects(true);
|
|
},
|
|
|
|
createGroup: function(drawingBase)
|
|
{
|
|
var drawing_bases = this.drawingObjects.getDrawingObjects();
|
|
var grouped_objects = [];
|
|
for(var i = 0; i < drawing_bases.length; ++i)
|
|
{
|
|
var cur_drawing_base = drawing_bases[i];
|
|
if(cur_drawing_base.isGraphicObject() && cur_drawing_base.graphicObject.selected && cur_drawing_base.graphicObject.canGroup())
|
|
{
|
|
grouped_objects.push(cur_drawing_base.graphicObject);
|
|
}
|
|
}
|
|
if(grouped_objects.length < 2)
|
|
return null;
|
|
|
|
this.resetSelection();
|
|
var max_x, min_x, max_y, min_y;
|
|
var bounds = grouped_objects[0].getBoundsInGroup();
|
|
max_x = bounds.maxX;
|
|
max_y = bounds.maxY;
|
|
min_x = bounds.minX;
|
|
min_y = bounds.minY;
|
|
for(i = 1; i < grouped_objects.length; ++i)
|
|
{
|
|
bounds = grouped_objects[i].getBoundsInGroup();
|
|
if(max_x < bounds.maxX)
|
|
max_x = bounds.maxX;
|
|
if(max_y < bounds.maxY)
|
|
max_y = bounds.maxY;
|
|
if(min_x > bounds.minX)
|
|
min_x = bounds.minX;
|
|
if(min_y > bounds.minY)
|
|
min_y = bounds.minY;
|
|
}
|
|
var group = new CGroupShape(drawingBase, this.drawingObjects);
|
|
group.setPosition(min_x, min_y);
|
|
group.setExtents(max_x - min_x, max_y - min_y);
|
|
group.setChildExtents(max_x - min_x, max_y - min_y);
|
|
group.setChildOffsets(0, 0);
|
|
for(i = 0; i < grouped_objects.length; ++i)
|
|
{
|
|
this.drawingObjects.deleteDrawingObjectById(grouped_objects[i].drawingBase.id);
|
|
grouped_objects[i].setDrawingBase(null);
|
|
grouped_objects[i].setPosition(grouped_objects[i].x - min_x, grouped_objects[i].y - min_y);
|
|
grouped_objects[i].setGroup(group);
|
|
group.addToSpTree(grouped_objects[i]);
|
|
}
|
|
group.recalculate();
|
|
group.select(this);
|
|
return group;
|
|
},
|
|
|
|
unGroup: function()
|
|
{
|
|
var selected_objects = this.selectedObjects;
|
|
var ungrouped_objects = [];
|
|
for(var i = 0; i < selected_objects.length; ++i)
|
|
{
|
|
if(selected_objects[i].isGroup() && selected_objects[i].canUnGroup())
|
|
{
|
|
ungrouped_objects.push(selected_objects[i]);
|
|
|
|
}
|
|
}
|
|
for(i = 0; i < ungrouped_objects.length; ++i)
|
|
{
|
|
var ungrouped_sp_tree = ungrouped_objects[i].getUnGroupedSpTree();
|
|
for(var j = 0; j < ungrouped_sp_tree.length; ++j)
|
|
{
|
|
ungrouped_sp_tree[j].recalculateTransform();
|
|
}
|
|
this.drawingObjects.insertUngroupedObjects(ungrouped_objects[i].drawingBase.id, ungrouped_sp_tree);
|
|
}
|
|
},
|
|
|
|
canGroup: function()
|
|
{
|
|
return this.selectedObjects.length > 1;//TODO: сделать нормальную проверку
|
|
},
|
|
|
|
canUnGroup: function()
|
|
{
|
|
return true;
|
|
},
|
|
|
|
startTrackNewShape: function(presetGeom)
|
|
{
|
|
switch (presetGeom)
|
|
{
|
|
case "spline":
|
|
{
|
|
this.changeCurrentState(new SplineBezierState(this, this.drawingObjects));
|
|
break;
|
|
}
|
|
case "polyline1":
|
|
{
|
|
this.changeCurrentState(new PolyLineAddState(this, this.drawingObjects));
|
|
break;
|
|
}
|
|
case "polyline2":
|
|
{
|
|
this.changeCurrentState(new AddPolyLine2State(this, this.drawingObjects));
|
|
break;
|
|
}
|
|
default :
|
|
{
|
|
this.changeCurrentState(new StartTrackNewShapeState(this, this.drawingObjects, presetGeom));
|
|
break;
|
|
}
|
|
}
|
|
},
|
|
|
|
drawTracks: function(overlay)
|
|
{
|
|
for(var i = 0; i < this.arrTrackObjects.length; ++i)
|
|
this.arrTrackObjects[i].draw(overlay);
|
|
},
|
|
|
|
drawSelection: function(drawingDocument)
|
|
{
|
|
this.curState.drawSelection(drawingDocument);
|
|
},
|
|
|
|
isPointInDrawingObjects: function(x, y)
|
|
{
|
|
return this.curState.isPointInDrawingObjects(x, y);
|
|
}
|
|
}; |