Commit 03068699 authored by GoshaZotov's avatar GoshaZotov

add _isLockedCells for special paste

parent c22bf5c0
......@@ -449,6 +449,7 @@
History.EndTransaction();
}
window['AscCommon'].g_clipboardBase.specialPasteProps = null;
},
start_specialpaste: function()
......
......@@ -8778,83 +8778,100 @@
return;
}
//не вызываю для отката api.wb.clipboard.pasteData, потому что внутри асинхронные методы - isLockedCells
var undoPreviousPaste = function()
var isIntoShape = t.objectRender.controller.getTargetDocContent(true);
var onSelectionCallback = function(isSuccess)
{
//откатываем данные в ячейках
var sBase64 = preSpecialPasteData.data.split('xslData;')[1];
var oBinaryFileReader = new AscCommonExcel.BinaryFileReader(true);
var tempWorkbook = new AscCommonExcel.Workbook();
pptx_content_loader.Start_UseFullUrl();
oBinaryFileReader.Read(sBase64, tempWorkbook);
window["Asc"]["editor"].wb.clipboard.pasteProcessor.activeRange = oBinaryFileReader.copyPasteObj.activeRange;
var pasteData = null;
if (tempWorkbook)
pasteData = tempWorkbook.aWorksheets[0];
if(pasteData)
if(!isSuccess)
{
t._pasteFromBinary(pasteData, null, null, window['AscCommon'].g_clipboardBase.specialPasteProps);
return false;
}
//удаляем вставленные изображения
if(preSpecialPasteData.images)
//не вызываю для отката api.wb.clipboard.pasteData, потому что внутри асинхронные методы - isLockedCells
var undoPreviousPaste = function()
{
var images = preSpecialPasteData.images;
for(var i = 0; i < images.length; i++)
//откатываем данные в ячейках
var sBase64 = preSpecialPasteData.data.split('xslData;')[1];
var oBinaryFileReader = new AscCommonExcel.BinaryFileReader(true);
var tempWorkbook = new AscCommonExcel.Workbook();
pptx_content_loader.Start_UseFullUrl();
oBinaryFileReader.Read(sBase64, tempWorkbook);
window["Asc"]["editor"].wb.clipboard.pasteProcessor.activeRange = oBinaryFileReader.copyPasteObj.activeRange;
var pasteData = null;
if (tempWorkbook)
pasteData = tempWorkbook.aWorksheets[0];
if(pasteData)
{
var id = images[i];
var oObject = AscCommon.g_oTableId.Get_ById(id);
oObject.deleteDrawingBase(true);
oObject.setBDeleted(true);
t._pasteFromBinary(pasteData, null, null, window['AscCommon'].g_clipboardBase.specialPasteProps);
}
}
};
//транзакция закроется в end_paste
History.Create_NewPoint();
History.StartTransaction();
window["Asc"]["editor"].wb.clipboard.start_specialpaste();
window["Asc"]["editor"].wb.clipboard.start_paste();
//откатываемся до того, что было до вставки
var isIntoShape = this.objectRender.controller.getTargetDocContent(true);
//курсор и специальная вставка не в шейпе + курсор в шейпе, специальная вставка на листе
if(preSpecialPasteData && preSpecialPasteData.data && !window['AscCommon'].g_clipboardBase.specialPasteButtonProps.shapeId)
{
var tempProps = new Asc.SpecialPasteProps();
window['AscCommon'].g_clipboardBase.specialPasteProps = tempProps;
//удаляем вставленные изображения
if(preSpecialPasteData.images)
{
var images = preSpecialPasteData.images;
for(var i = 0; i < images.length; i++)
{
var id = images[i];
var oObject = AscCommon.g_oTableId.Get_ById(id);
oObject.deleteDrawingBase(true);
oObject.setBDeleted(true);
}
}
};
//транзакция закроется в end_paste
History.Create_NewPoint();
History.StartTransaction();
//переводим фокус из шейпа на лист
if(isIntoShape)
window["Asc"]["editor"].wb.clipboard.start_specialpaste();
window["Asc"]["editor"].wb.clipboard.start_paste();
//откатываемся до того, что было до вставки
//курсор и специальная вставка не в шейпе + курсор в шейпе, специальная вставка на листе
if(preSpecialPasteData && preSpecialPasteData.data && !window['AscCommon'].g_clipboardBase.specialPasteButtonProps.shapeId)
{
this.objectRender.controller.resetSelection();
var tempProps = new Asc.SpecialPasteProps();
window['AscCommon'].g_clipboardBase.specialPasteProps = tempProps;
//переводим фокус из шейпа на лист
if(isIntoShape)
{
t.objectRender.controller.resetSelection();
}
//меняем activeRange
if(specialPasteData.activeRange)
{
t.model.selectionRange = specialPasteData.activeRange.clone(t.model);
}
//нужно удалить данные предыдущей вставки(нужно для удаления ф/т)
t.model.autoFilters.isEmptyAutoFilters(t.model.selectionRange.getLast());
undoPreviousPaste();
}
//меняем activeRange
if(specialPasteData.activeRange)
else if(isIntoShape && preSpecialPasteData && preSpecialPasteData.shapeSelectionState)//курсор и специальная вставка в шейпе
{
this.model.selectionRange = specialPasteData.activeRange.clone(this.model);
//таким образом удаляю вставляенный фрагмент до специальной вставки
var State = preSpecialPasteData.shapeSelectionState;
isIntoShape.Set_SelectionState(State, State.length - 1);
isIntoShape.Remove(1, true, true);
}
//нужно удалить данные предыдущей вставки(нужно для удаления ф/т)
t.model.autoFilters.isEmptyAutoFilters(this.model.selectionRange.getLast());
undoPreviousPaste();
//далее специальная вставка
window['AscCommon'].g_clipboardBase.specialPasteProps = props;
//TODO пока для закрытия транзации выставляю флаг. пересмотреть!
window["Asc"]["editor"].wb.clipboard.bIsEndTransaction = true;
api.wb.clipboard.pasteData(t, specialPasteData._format, specialPasteData.data1, specialPasteData.data2, specialPasteData.text_data, true);
};
if(specialPasteData.activeRange && !isIntoShape)
{
this._isLockedCells(specialPasteData.activeRange.ranges, /*subType*/null, onSelectionCallback);
}
else if(isIntoShape && preSpecialPasteData && preSpecialPasteData.shapeSelectionState)//курсор и специальная вставка в шейпе
else
{
//таким образом удаляю вставляенный фрагмент до специальной вставки
var State = preSpecialPasteData.shapeSelectionState;
isIntoShape.Set_SelectionState(State, State.length - 1);
isIntoShape.Remove(1, true, true);
onSelectionCallback(true);
}
//далее специальная вставка
window['AscCommon'].g_clipboardBase.specialPasteProps = props;
//TODO пока для закрытия транзации выставляю флаг. пересмотреть!
window["Asc"]["editor"].wb.clipboard.bIsEndTransaction = true;
api.wb.clipboard.pasteData(this, specialPasteData._format, specialPasteData.data1, specialPasteData.data2, specialPasteData.text_data, true);
};
WorksheetView.prototype._pasteData = function (isLargeRange, fromBinary, val, bIsUpdate, canChangeColWidth) {
......@@ -9310,9 +9327,6 @@
lastSelection.r2 = arn.r2;
var arnFor = [arn, arrFormula];
var clipboardBase = window['AscCommon'].g_clipboardBase;
clipboardBase.specialPasteProps = null;
return arnFor;
};
......@@ -9636,9 +9650,6 @@
lastSelection.c2 = trueActiveRange.c2;
lastSelection.r2 = trueActiveRange.r2;
var clipboardBase = window['AscCommon'].g_clipboardBase;
clipboardBase.specialPasteProps = null;
return arnFor;
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment