Skip to content

Commit

Permalink
For bug 72801
Browse files Browse the repository at this point in the history
New scheme for deleting inks in sse and pe editors
  • Loading branch information
Coolcooo committed Feb 13, 2025
1 parent 710d32e commit ff0bc13
Show file tree
Hide file tree
Showing 11 changed files with 430 additions and 266 deletions.
14 changes: 14 additions & 0 deletions cell/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -9996,6 +9996,20 @@ var editor;
}
return wb.getShowHorizontalScroll();
};
spreadsheet_api.prototype.haveInks = function() {
if (!this.wbModel) {
return false;
}

return !!this.wbModel.getAllInks().length;
};
spreadsheet_api.prototype.removeAllInks = function() {
if (!this.wb) {
return;
}

this.wb.removeAllInks();
};

/*
* Export
Expand Down
41 changes: 41 additions & 0 deletions cell/model/Workbook.js
Original file line number Diff line number Diff line change
Expand Up @@ -5733,6 +5733,20 @@
Workbook.prototype.getShowHorizontalScroll = function() {
return this.showHorizontalScroll;
};
Workbook.prototype.getAllInks = function(arrInks) {
arrInks = arrInks || [];
for (let i = 0; i < this.aWorksheets.length; i += 1) {
const oWorksheet = this.aWorksheets[i];
oWorksheet.getAllInks(arrInks);
}
return arrInks;
};
Workbook.prototype.removeAllInks = function() {
for (let i = 0; i < this.aWorksheets.length; i += 1) {
const oWorksheet = this.aWorksheets[i];
oWorksheet.removeAllInks();
}
};



Expand Down Expand Up @@ -13999,6 +14013,33 @@

return new AscCommon.CellBase(lastR, lastC);
};
Worksheet.prototype.removeAllInks = function() {
for (let i = this.Drawings.length - 1; i >= 0; i -= 1) {
const oGraphicObject = this.Drawings[i].graphicObject;
if (oGraphicObject.isInk() || oGraphicObject.isHaveOnlyInks()) {
oGraphicObject.deleteDrawingBase(true);
if (oGraphicObject.setBDeleted2) {
oGraphicObject.setBDeleted2(true);
} else {
oGraphicObject.setBDeleted(true);
}
} else {
oGraphicObject.removeAllInks();
}
}
};
Worksheet.prototype.getAllInks = function(arrInks) {
arrInks = arrInks || [];
for (let i = 0; i < this.Drawings.length; i++) {
const oGraphicObject = this.Drawings[i].graphicObject;
if (oGraphicObject.isInk() || oGraphicObject.isHaveOnlyInks()) {
arrInks.push(oGraphicObject);
} else {
oGraphicObject.getAllInks(arrInks);
}
}
return arrInks;
};


//-------------------------------------------------------------------------------------------------
Expand Down
13 changes: 13 additions & 0 deletions cell/view/WorkbookView.js
Original file line number Diff line number Diff line change
Expand Up @@ -6373,6 +6373,19 @@
}
return val === true || val == null;
};
WorkbookView.prototype.removeAllInks = function() {
const oWs = this.getWorksheet();
const oWbModel = this.model;
const oController = oWs.objectRender && oWs.objectRender.controller;
if (oController) {
const arrInks = oWbModel.getAllInks();
if (arrInks.length > 0) {
oController.checkObjectsAndCallback(function() {
oWbModel.removeAllInks();
}, [], false, AscDFH.historydescription_RemoveAllInks, arrInks);
}
}
};



Expand Down
212 changes: 115 additions & 97 deletions common/Drawings/CommonController.js
Original file line number Diff line number Diff line change
Expand Up @@ -4974,7 +4974,95 @@
}
this.checkSelectedObjectsAndCallback(this.removeCallback, [dir, bOnlyText, bRemoveOnlySelection, bOnTextAdd, isWord, undefined], false, AscDFH.historydescription_Spreadsheet_Remove, undefined, !!(oTargetContent && AscCommon.CollaborativeEditing.Is_Fast()));
},

removeInGroup: function(oGroup, arrShapes, arrSlicerNames) {
if (oGroup.getObjectType() === AscDFH.historyitem_type_GroupShape) {
arrSlicerNames = arrSlicerNames || [];
this.resetConnectors(arrShapes);
var group_map = {}, group_arr = [], i, cur_group, sp, xc, yc, hc, vc, rel_xc,
rel_yc, j;
for (i = 0; i < arrShapes.length; ++i) {
const oSp = arrShapes[i];
if (oSp.getObjectType() === AscDFH.historyitem_type_SlicerView) {
arrSlicerNames.push(oSp.getName());
} else {
oSp.group.removeFromSpTree(oSp.Get_Id());
group_map[oSp.group.Get_Id()] = oSp.group;
oSp.setBDeleted(true);
}
}
group_map[oGroup.Get_Id() + ""] = oGroup;
for (var key in group_map) {
if (group_map.hasOwnProperty(key))
group_arr.push(group_map[key]);
}
group_arr.sort(CompareGroups);
for (i = 0; i < group_arr.length; ++i) {
cur_group = group_arr[i];
if (isRealObject(cur_group.group)) {
if (cur_group.spTree.length === 0) {
cur_group.group.removeFromSpTree(cur_group.Get_Id());
} else if (cur_group.spTree.length === 1) {
sp = cur_group.spTree[0];
hc = sp.spPr.xfrm.extX / 2;
vc = sp.spPr.xfrm.extY / 2;
xc = sp.transform.TransformPointX(hc, vc);
yc = sp.transform.TransformPointY(hc, vc);
rel_xc = cur_group.group.invertTransform.TransformPointX(xc, yc);
rel_yc = cur_group.group.invertTransform.TransformPointY(xc, yc);
sp.spPr.xfrm.setOffX(rel_xc - hc);
sp.spPr.xfrm.setOffY(rel_yc - vc);
sp.spPr.xfrm.setRot(AscFormat.normalizeRotate(cur_group.rot + sp.rot));
sp.spPr.xfrm.setFlipH(cur_group.spPr.xfrm.flipH === true ? !(sp.spPr.xfrm.flipH === true) : sp.spPr.xfrm.flipH === true);
sp.spPr.xfrm.setFlipV(cur_group.spPr.xfrm.flipV === true ? !(sp.spPr.xfrm.flipV === true) : sp.spPr.xfrm.flipV === true);
sp.setGroup(cur_group.group);
for (j = 0; j < cur_group.group.spTree.length; ++j) {
if (cur_group.group.spTree[j] === cur_group) {
cur_group.group.addToSpTree(j, sp);
cur_group.group.removeFromSpTree(cur_group.Get_Id());
}
}
}
} else {
if (cur_group.spTree.length === 0) {
if (this.selection.groupSelection === cur_group) {
this.resetSelection();
}
cur_group.deleteDrawingBase(true);
cur_group.setBDeleted(true);
return true;
} else if (cur_group.spTree.length === 1) {
sp = cur_group.spTree[0];
sp.spPr.xfrm.setOffX(cur_group.spPr.xfrm.offX + sp.spPr.xfrm.offX);
sp.spPr.xfrm.setOffY(cur_group.spPr.xfrm.offY + sp.spPr.xfrm.offY);
sp.spPr.xfrm.setRot(AscFormat.normalizeRotate(cur_group.rot + sp.rot));
sp.spPr.xfrm.setFlipH(cur_group.spPr.xfrm.flipH === true ? !(sp.spPr.xfrm.flipH === true) : sp.spPr.xfrm.flipH === true);
sp.spPr.xfrm.setFlipV(cur_group.spPr.xfrm.flipV === true ? !(sp.spPr.xfrm.flipV === true) : sp.spPr.xfrm.flipV === true);
sp.setGroup(null);
sp.addToDrawingObjects();
sp.checkDrawingBaseCoords();
cur_group.deleteDrawingBase();
if (cur_group.selected || sp.selected) {
cur_group.deselectInternal(this);
this.deselectObject(cur_group);
this.selectObject(sp, cur_group.selectStartPage);
}
} else {
cur_group.updateCoordinatesAfterInternalResize();
if (this.selection.groupSelection === cur_group) {
this.resetInternalSelection();
}
}
const oWBView = Asc.editor && Asc.editor.wb;
if (arrSlicerNames.length > 0 && oWBView) {
History.StartTransaction();
oWBView.deleteSlicers(arrSlicerNames);
}
return true;
}
}
this.resetInternalSelection();
}
},
removeCallback: function (dir, bOnlyText, bRemoveOnlySelection, bOnTextAdd, isWord, bNoCheck) {
var target_text_object = getTargetTextObject(this);
if (target_text_object) {
Expand Down Expand Up @@ -5008,85 +5096,10 @@
if (this.selection.groupSelection.selection.chartSelection) {
this.selection.groupSelection.selection.chartSelection.remove();
} else {
if (this.selection.groupSelection.getObjectType() === AscDFH.historyitem_type_GroupShape) {
aSO = this.selection.groupSelection.selectedObjects;
this.resetConnectors(aSO);
var group_map = {}, group_arr = [], i, cur_group, sp, xc, yc, hc, vc, rel_xc,
rel_yc, j;
for (i = 0; i < aSO.length; ++i) {
oSp = aSO[i];
if (oSp.getObjectType() === AscDFH.historyitem_type_SlicerView) {
aSlicerNames.push(oSp.getName());
} else {
oSp.group.removeFromSpTree(oSp.Get_Id());
group_map[oSp.group.Get_Id()] = oSp.group;
oSp.setBDeleted(true);
}
}
group_map[this.selection.groupSelection.Get_Id() + ""] = this.selection.groupSelection;
for (var key in group_map) {
if (group_map.hasOwnProperty(key))
group_arr.push(group_map[key]);
}
group_arr.sort(CompareGroups);
for (i = 0; i < group_arr.length; ++i) {
cur_group = group_arr[i];
if (isRealObject(cur_group.group)) {
if (cur_group.spTree.length === 0) {
cur_group.group.removeFromSpTree(cur_group.Get_Id());
} else if (cur_group.spTree.length === 1) {
sp = cur_group.spTree[0];
hc = sp.spPr.xfrm.extX / 2;
vc = sp.spPr.xfrm.extY / 2;
xc = sp.transform.TransformPointX(hc, vc);
yc = sp.transform.TransformPointY(hc, vc);
rel_xc = cur_group.group.invertTransform.TransformPointX(xc, yc);
rel_yc = cur_group.group.invertTransform.TransformPointY(xc, yc);
sp.spPr.xfrm.setOffX(rel_xc - hc);
sp.spPr.xfrm.setOffY(rel_yc - vc);
sp.spPr.xfrm.setRot(AscFormat.normalizeRotate(cur_group.rot + sp.rot));
sp.spPr.xfrm.setFlipH(cur_group.spPr.xfrm.flipH === true ? !(sp.spPr.xfrm.flipH === true) : sp.spPr.xfrm.flipH === true);
sp.spPr.xfrm.setFlipV(cur_group.spPr.xfrm.flipV === true ? !(sp.spPr.xfrm.flipV === true) : sp.spPr.xfrm.flipV === true);
sp.setGroup(cur_group.group);
for (j = 0; j < cur_group.group.spTree.length; ++j) {
if (cur_group.group.spTree[j] === cur_group) {
cur_group.group.addToSpTree(j, sp);
cur_group.group.removeFromSpTree(cur_group.Get_Id());
}
}
}
} else {
if (cur_group.spTree.length === 0) {
this.resetInternalSelection();
this.removeCallback(-1, undefined, undefined, undefined, undefined, undefined);
return;
} else if (cur_group.spTree.length === 1) {
sp = cur_group.spTree[0];
sp.spPr.xfrm.setOffX(cur_group.spPr.xfrm.offX + sp.spPr.xfrm.offX);
sp.spPr.xfrm.setOffY(cur_group.spPr.xfrm.offY + sp.spPr.xfrm.offY);
sp.spPr.xfrm.setRot(AscFormat.normalizeRotate(cur_group.rot + sp.rot));
sp.spPr.xfrm.setFlipH(cur_group.spPr.xfrm.flipH === true ? !(sp.spPr.xfrm.flipH === true) : sp.spPr.xfrm.flipH === true);
sp.spPr.xfrm.setFlipV(cur_group.spPr.xfrm.flipV === true ? !(sp.spPr.xfrm.flipV === true) : sp.spPr.xfrm.flipV === true);
sp.setGroup(null);
sp.addToDrawingObjects();
sp.checkDrawingBaseCoords();
cur_group.deleteDrawingBase();
this.resetSelection();
this.selectObject(sp, cur_group.selectStartPage);
} else {
cur_group.updateCoordinatesAfterInternalResize();
}
this.resetInternalSelection();
this.recalculate();
oWBView = Asc.editor && Asc.editor.wb;
if (aSlicerNames.length > 0 && oWBView) {
History.StartTransaction();
oWBView.deleteSlicers(aSlicerNames);
}
return;
}
}
this.resetInternalSelection();
if (this.removeInGroup(this.selection.groupSelection, this.selection.groupSelection.selectedObjects, aSlicerNames)) {
this.recalculate();
this.updateOverlay();
return;
}
}
} else if (this.selection.chartSelection) {
Expand Down Expand Up @@ -8607,41 +8620,39 @@
}
},


checkSelectedObjectsAndCallback: function (callback, args, bNoSendProps, nHistoryPointType, aAdditionalObjects, bNoCheckLock) {
checkObjectsAndCallback: function(callback, args, bNoSendProps, nHistoryPointType, aObjects, bNoCheckLock) {
var oApi = Asc.editor;
if (oApi && oApi.collaborativeEditing && oApi.collaborativeEditing.getGlobalLock()) {
return;
}
const oObjects = {};
const aMainObjects = [];
for (let i = 0; i < aObjects.length; i += 1) {
const oObject = aObjects[i].getMainGroup() || aObjects[i];
const sId = oObject.Get_Id();
if (!oObjects[sId]) {
oObjects[sId] = true;
aMainObjects.push(oObject);
}
}
var selection_state = this.getSelectionState();
var aId = [], i;
if (!(bNoCheckLock === true)) {
for (i = 0; i < this.selectedObjects.length; ++i) {
aId.push(this.selectedObjects[i].Get_Id());
}
if (aAdditionalObjects) {
for (i = 0; i < aAdditionalObjects.length; ++i) {
aId.push(aAdditionalObjects[i].Get_Id());
}
for (i = 0; i < aMainObjects.length; ++i) {
aId.push(aMainObjects[i].Get_Id());
}
}
var _this = this;
var callback2 = function (bLock, bSync) {
if (bLock) {

const API = _this.getEditorApi();
API.sendEvent("asc_onUserActionStart");
var nPointType = AscFormat.isRealNumber(nHistoryPointType) ? nHistoryPointType : AscDFH.historydescription_CommonControllerCheckSelected;
History.Create_NewPoint(nPointType);
if (bSync !== true) {
_this.setSelectionState(selection_state);
for (var i = 0; i < _this.selectedObjects.length; ++i) {
_this.selectedObjects[i].lockType = c_oAscLockTypes.kLockTypeMine;
}
if (aAdditionalObjects) {
for (var i = 0; i < aAdditionalObjects.length; ++i) {
aAdditionalObjects[i].lockType = c_oAscLockTypes.kLockTypeMine;
}
for (var i = 0; i < aMainObjects.length; ++i) {
aMainObjects[i].lockType = c_oAscLockTypes.kLockTypeMine;
}
}
callback.apply(_this, args);
Expand All @@ -8659,6 +8670,13 @@
callback2(true, true);
return true;
},
checkSelectedObjectsAndCallback: function (callback, args, bNoSendProps, nHistoryPointType, aAdditionalObjects, bNoCheckLock) {
const aObjects = this.selectedObjects.slice();
if (aAdditionalObjects) {
aObjects.push.apply(aObjects, aAdditionalObjects);
}
return this.checkObjectsAndCallback(callback, args, bNoSendProps, nHistoryPointType, aObjects, bNoCheckLock);
},

checkSelectedObjectsAndCallback2: function (callback) {
var aId = [];
Expand Down
Loading

0 comments on commit ff0bc13

Please sign in to comment.