Fix bug 79382

This commit is contained in:
Vladimir Privezenov
2026-02-09 20:06:15 +03:00
parent 3eadd5be8f
commit 31940c7f72
3 changed files with 56 additions and 77 deletions

View File

@ -782,24 +782,7 @@ CHistory.prototype.UndoRedoEnd = function (Point, oRedoObjectParam, bUndo) {
this.workbook.handlers.trigger("changeWorksheetUpdate",
oRedoObjectParam.oChangeWorksheetUpdate[i],{lockDraw: true, reinitRanges: true});
for (i in Point.UpdateRigions) {
//последним параметром передаю resetCache, при добавлении/удаление строк/столбцов в случая прямого действия
//всегда делается cache -> reset, здесь аналогично делаю
this.workbook.handlers.trigger("cleanCellCache", i, [Point.UpdateRigions[i]], null, oRedoObjectParam.bAddRemoveRowCol);
var curSheet = this.workbook.getWorksheetById(i);
if (curSheet)
this.workbook.getWorksheetById(i).updateSlicersByRange(Point.UpdateRigions[i]);
//this.workbook.oApi.onWorksheetChange(Point.UpdateRigions[i]);
}
// So far, the event call has been removed when undo/redo, since UpdateRigions does not always have the right range and you need to pick it up from another place
// if (Point.SelectRange) {
// this.workbook.oApi.onWorksheetChange(Point.SelectRange);
// }
// if (Point.SelectRangeRedo && (!Point.SelectRange || (Point.SelectRange && !Point.SelectRange.isEqual(Point.SelectRangeRedo)))) {
// this.workbook.oApi.onWorksheetChange(Point.SelectRangeRedo);
// }
this.updateDrawingsByRegions(Point.UpdateRigions, oRedoObjectParam);
if (oRedoObjectParam.bOnSheetsChanged)
this.workbook.handlers.trigger("asc_onSheetsChanged");
@ -813,14 +796,7 @@ CHistory.prototype.UndoRedoEnd = function (Point, oRedoObjectParam, bUndo) {
Asc["editor"].wb.recalculateDrawingObjects(Point, false);
}
for (i in oRedoObjectParam.UpdateRigions) {
this.workbook.handlers.trigger("cleanCellCache", i, [oRedoObjectParam.UpdateRigions[i]], null, oRedoObjectParam.bAddRemoveRowCol);
var curSheet = this.workbook.getWorksheetById(i);
if (curSheet)
this.workbook.getWorksheetById(i).updateSlicersByRange(oRedoObjectParam.UpdateRigions[i]);
//this.workbook.oApi.onWorksheetChange(Point.UpdateRigions[i]);
}
this.updateDrawingsByRegions(oRedoObjectParam.UpdateRigions, oRedoObjectParam);
if (oRedoObjectParam.oOnUpdateSheetViewSettings[this.workbook.getWorksheet(this.workbook.getActive()).getId()])
this.workbook.handlers.trigger("asc_onUpdateSheetViewSettings");
@ -1040,19 +1016,6 @@ CHistory.prototype.Reset_RecalcIndex = function()
CHistory.prototype.Add_RecalcNumPr = function()
{};
CHistory.prototype.Add_UpdateRegion = function(sheetid, range)
{
if(this.oRedoObjectParam) {
var updateRange = this.oRedoObjectParam.UpdateRigions[sheetid];
if(null != updateRange)
updateRange.union2(range);
else
updateRange = range.clone();
this.oRedoObjectParam.UpdateRigions[sheetid] = updateRange;
}
};
CHistory.prototype.Set_Additional_ExtendDocumentToPos = function()
{
@ -1745,6 +1708,19 @@ CHistory.prototype.GetSerializeArray = function()
this.Points.length = startIndex + 1;
this.Index = startIndex;
};
CHistory.prototype.updateDrawingsByRegions = function(oUpdateRegions, oRedoObjectParam) {
const aRanges = [];
for (let i in oUpdateRegions) {
this.workbook.handlers.trigger("cleanCellCache", i, [oUpdateRegions[i]], null, oRedoObjectParam.bAddRemoveRowCol);
var curSheet = this.workbook.getWorksheetById(i);
if (curSheet) {
const oAscRange = oUpdateRegions[i];
aRanges.push(new AscCommonExcel.Range(curSheet, oAscRange.r1, oAscRange.c1, oAscRange.r2, oAscRange.c2));
curSheet.updateSlicersByRange(oAscRange);
}
}
this.workbook.handleDrawingsOnWorkbookChange(aRanges);
};
//------------------------------------------------------------export--------------------------------------------------
window['AscCommon'] = window['AscCommon'] || {};
window['AscCommon'].CHistory = CHistory;

View File

@ -6724,7 +6724,46 @@
}
return oMainExternalReference;
};
Workbook.prototype.handleDrawingsOnWorkbookChange = function(aRanges) {
if(!Array.isArray(aRanges) || aRanges.length === 0) {
return false;
}
const oApi = this.oApi;
var aChartRefsToChange = [];
var aCharts = [];
let bHandled = false;
const fDrawingCallback = function(oDrawing) {
switch (oDrawing.getObjectType()) {
case AscDFH.historyitem_type_ChartSpace: {
const nPrevLength = aChartRefsToChange.length;
oDrawing.collectIntersectionRefs(aRanges, aChartRefsToChange);
if(aChartRefsToChange.length > nPrevLength) {
aCharts.push(oDrawing);
bHandled = true;
}
break;
}
case AscDFH.historyitem_type_Control: {
bHandled |= oDrawing.handleChangeRanges(aRanges);
break;
}
default: {
break;
}
}
};
this.handleDrawings(fDrawingCallback);
oApi.frameManager.handleMainDiagram(fDrawingCallback);
if(aChartRefsToChange.length > 0) {
for(var nRef = 0; nRef < aChartRefsToChange.length; ++nRef) {
aChartRefsToChange[nRef].updateCacheAndCat();
}
for(var nChart = 0; nChart < aCharts.length; ++nChart) {
aCharts[nChart].recalculate();
}
}
return bHandled;
}
/**
* @constructor
*/

View File

@ -4212,43 +4212,7 @@
}
};
WorkbookView.prototype.handleDrawingsOnWorkbookChange = function (aRanges) {
if(!Array.isArray(aRanges) || aRanges.length === 0) {
return;
}
var aChartRefsToChange = [];
var aCharts = [];
let bHandled = false;
const fDrawingCallback = function(oDrawing) {
switch (oDrawing.getObjectType()) {
case AscDFH.historyitem_type_ChartSpace: {
const nPrevLength = aChartRefsToChange.length;
oDrawing.collectIntersectionRefs(aRanges, aChartRefsToChange);
if(aChartRefsToChange.length > nPrevLength) {
aCharts.push(oDrawing);
bHandled = true;
}
break;
}
case AscDFH.historyitem_type_Control: {
bHandled |= oDrawing.handleChangeRanges(aRanges);
break;
}
default: {
break;
}
}
};
this.model.handleDrawings(fDrawingCallback);
this.Api.frameManager.handleMainDiagram(fDrawingCallback);
if(aChartRefsToChange.length > 0) {
for(var nRef = 0; nRef < aChartRefsToChange.length; ++nRef) {
aChartRefsToChange[nRef].updateCacheAndCat();
}
for(var nChart = 0; nChart < aCharts.length; ++nChart) {
aCharts[nChart].recalculate();
}
this.onShowDrawingObjects();
}
const bHandled = this.model.handleDrawingsOnWorkbookChange(aRanges);
if (bHandled) {
this.onShowDrawingObjects();
}