Commit 03068699 authored by GoshaZotov's avatar GoshaZotov

add _isLockedCells for special paste

parent c22bf5c0
...@@ -449,6 +449,7 @@ ...@@ -449,6 +449,7 @@
History.EndTransaction(); History.EndTransaction();
} }
window['AscCommon'].g_clipboardBase.specialPasteProps = null;
}, },
start_specialpaste: function() start_specialpaste: function()
......
...@@ -8778,83 +8778,100 @@ ...@@ -8778,83 +8778,100 @@
return; return;
} }
//не вызываю для отката api.wb.clipboard.pasteData, потому что внутри асинхронные методы - isLockedCells var isIntoShape = t.objectRender.controller.getTargetDocContent(true);
var undoPreviousPaste = function() var onSelectionCallback = function(isSuccess)
{ {
//откатываем данные в ячейках if(!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)
{ {
t._pasteFromBinary(pasteData, null, null, window['AscCommon'].g_clipboardBase.specialPasteProps); return false;
} }
//удаляем вставленные изображения //не вызываю для отката api.wb.clipboard.pasteData, потому что внутри асинхронные методы - isLockedCells
if(preSpecialPasteData.images) 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]; t._pasteFromBinary(pasteData, null, null, window['AscCommon'].g_clipboardBase.specialPasteProps);
var oObject = AscCommon.g_oTableId.Get_ById(id);
oObject.deleteDrawingBase(true);
oObject.setBDeleted(true);
} }
}
}; //удаляем вставленные изображения
if(preSpecialPasteData.images)
//транзакция закроется в end_paste {
History.Create_NewPoint(); var images = preSpecialPasteData.images;
History.StartTransaction(); for(var i = 0; i < images.length; i++)
{
window["Asc"]["editor"].wb.clipboard.start_specialpaste(); var id = images[i];
window["Asc"]["editor"].wb.clipboard.start_paste(); var oObject = AscCommon.g_oTableId.Get_ById(id);
oObject.deleteDrawingBase(true);
//откатываемся до того, что было до вставки oObject.setBDeleted(true);
var isIntoShape = this.objectRender.controller.getTargetDocContent(true); }
//курсор и специальная вставка не в шейпе + курсор в шейпе, специальная вставка на листе }
if(preSpecialPasteData && preSpecialPasteData.data && !window['AscCommon'].g_clipboardBase.specialPasteButtonProps.shapeId) };
{
var tempProps = new Asc.SpecialPasteProps(); //транзакция закроется в end_paste
window['AscCommon'].g_clipboardBase.specialPasteProps = tempProps; History.Create_NewPoint();
History.StartTransaction();
//переводим фокус из шейпа на лист window["Asc"]["editor"].wb.clipboard.start_specialpaste();
if(isIntoShape) 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();
} }
else if(isIntoShape && preSpecialPasteData && preSpecialPasteData.shapeSelectionState)//курсор и специальная вставка в шейпе
//меняем activeRange
if(specialPasteData.activeRange)
{ {
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()); window['AscCommon'].g_clipboardBase.specialPasteProps = props;
//TODO пока для закрытия транзации выставляю флаг. пересмотреть!
undoPreviousPaste(); 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
{ {
//таким образом удаляю вставляенный фрагмент до специальной вставки onSelectionCallback(true);
var State = preSpecialPasteData.shapeSelectionState;
isIntoShape.Set_SelectionState(State, State.length - 1);
isIntoShape.Remove(1, true, 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) { WorksheetView.prototype._pasteData = function (isLargeRange, fromBinary, val, bIsUpdate, canChangeColWidth) {
...@@ -9310,9 +9327,6 @@ ...@@ -9310,9 +9327,6 @@
lastSelection.r2 = arn.r2; lastSelection.r2 = arn.r2;
var arnFor = [arn, arrFormula]; var arnFor = [arn, arrFormula];
var clipboardBase = window['AscCommon'].g_clipboardBase;
clipboardBase.specialPasteProps = null;
return arnFor; return arnFor;
}; };
...@@ -9636,9 +9650,6 @@ ...@@ -9636,9 +9650,6 @@
lastSelection.c2 = trueActiveRange.c2; lastSelection.c2 = trueActiveRange.c2;
lastSelection.r2 = trueActiveRange.r2; lastSelection.r2 = trueActiveRange.r2;
var clipboardBase = window['AscCommon'].g_clipboardBase;
clipboardBase.specialPasteProps = null;
return arnFor; 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