Commit 144b4437 authored by GoshaZotov's avatar GoshaZotov

change calculate position of special paste icon

parent 0307427e
......@@ -107,6 +107,9 @@
this.pasteStart = false;//идет процесс вставки, выставится в false только после полного ее окончания(загрузка картинок и шрифтов)
this.bIsEndTransaction = false;//временный флаг для excel. TODO пересмотреть!
this.showButtonIdParagraph = null;
this.endRecalcDocument = false;//для документов, закончен ли пересчет документа. нужно, чтобы грамотно рассчитать позицию иконки с/в
}
CClipboardBase.prototype =
......@@ -1000,10 +1003,72 @@
if(props)
{
this.showSpecialPasteButton = true;
this.Api.asc_ShowSpecialPasteButton(props);
if(window["Asc"] && window["Asc"]["editor"])
{
this.Api.asc_ShowSpecialPasteButton(props);
}
}
},
SpecialPasteButtonById_Show: function()
{
//при быстром совместном редактировании отключаем возможность специальной вставки
if(AscCommon.CollaborativeEditing && AscCommon.CollaborativeEditing.m_bFast)
{
return;
}
var specialPasteShowOptions = this.specialPasteButtonProps ? this.specialPasteButtonProps.props : null;
if(specialPasteShowOptions && null !== this.showButtonIdParagraph)
{
var isUpdate = specialPasteShowOptions.cellCoord;
var id = this.showButtonIdParagraph;
var elem = g_oTableId.Get_ById(id);
var _X, _Y;
if(elem.GetTargetPos)
{
var testPos = elem.GetTargetPos();
var diffX = 0;
var diffY = 0;
if(testPos.Transform)
{
diffX = testPos.Transform.tx;
diffY = testPos.Transform.ty;
}
_Y = testPos.Y + testPos.Height + diffY;
_X = testPos.X + diffX;
}
else
{
_Y = elem.Y + elem.AnchorPosition.H;
_X = elem.X + elem.AnchorPosition.W;
}
var _PageNum = this.Api.WordControl.m_oLogicDocument.CurPage;
this.specialPasteButtonProps.fixPosition = {x: _X, y: _Y, pageNum: _PageNum};
var _coord = this.Api.WordControl.m_oLogicDocument.DrawingDocument.ConvertCoordsToCursorWR(_X, _Y, _PageNum);
var curCoord = new AscCommon.asc_CRect( _coord.X, _coord.Y, 0, 0 );
specialPasteShowOptions.asc_setCellCoord(curCoord);
if(isUpdate)
{
specialPasteShowOptions.options = [];
this.Api.asc_UpdateSpecialPasteButton(specialPasteShowOptions);
}
else
{
this.Api.asc_ShowSpecialPasteButton(specialPasteShowOptions);
}
}
this.showButtonIdParagraph = null;
},
SpecialPasteButton_Hide : function()
{
if(this.showSpecialPasteButton)
......
......@@ -1782,6 +1782,7 @@ function CopyPasteCorrectString(str)
function Editor_Paste_Exec(api, pastebin, nodeDisplay, onlyBinary, specialPasteProps)
{
var oPasteProcessor = new PasteProcessor(api, true, true, false);
window['AscCommon'].g_clipboardBase.endRecalcDocument = false;
if(undefined === specialPasteProps)
{
window['AscCommon'].g_clipboardBase.specialPasteData.pastebin = pastebin;
......@@ -2113,6 +2114,18 @@ PasteProcessor.prototype =
}
paragraph.Parent.Insert_Content(oSelectedContent, NearPos);
if(oSelectedContent.Elements.length === 1)
{
var curDocSelection = this.curDocSelection;
window['AscCommon'].g_clipboardBase.showButtonIdParagraph =this.oDocument.Content[curDocSelection[1].CurPos.ContentPos].Id;
}
else
{
window['AscCommon'].g_clipboardBase.showButtonIdParagraph = oSelectedContent.Elements[oSelectedContent.Elements.length - 1].Element.Id;
}
if(this.oLogicDocument && this.oLogicDocument.DrawingObjects)
{
var oTargetTextObject = AscFormat.getTargetTextObject(this.oLogicDocument.DrawingObjects);
......@@ -2238,10 +2251,8 @@ PasteProcessor.prototype =
//вставка нумерованного списка в нумерованный список
props = [sProps.paste, sProps.uniteList, sProps.doNotUniteList];
}*/
if(true)
{
props = [sProps.paste/*, sProps.mergeFormatting*/, sProps.pasteOnlyValues];
}
props = [sProps.paste/*, sProps.mergeFormatting*/, sProps.pasteOnlyValues];
if(null !== props)
{
......@@ -2257,16 +2268,13 @@ PasteProcessor.prototype =
if(specialPasteShowOptions)
{
var cursorPos = this.oLogicDocument.GetCursorPosXY();
var _Y = cursorPos.Y;
var _X = cursorPos.X;
var _PageNum = this.oLogicDocument.CurPage;
window['AscCommon'].g_clipboardBase.specialPasteButtonProps.fixPosition = {x: _X, y: _Y, pageNum: _PageNum};
var _сoord = this.oLogicDocument.DrawingDocument.ConvertCoordsToCursorWR(_X, _Y, _PageNum);
var curCoord = new AscCommon.asc_CRect( _сoord.X, _сoord.Y, 0, 0 );
specialPasteShowOptions.asc_setCellCoord(curCoord);
//SpecialPasteButtonById_Show вызываю здесь, если пересчет документа завершился раньше, чем мы попали сюда и сгенерировали параметры вставки
//в противном случае вызываю SpecialPasteButtonById_Show в drawingDocument->OnEndRecalculate
//TODO пересмотреть проверку на CDrawingDocContent и CShape
if(window['AscCommon'].g_clipboardBase.endRecalcDocument || (this.oDocument.Parent && this.oDocument.Parent instanceof CShape) || (this.oDocument instanceof AscFormat.CDrawingDocContent))
{
window['AscCommon'].g_clipboardBase.SpecialPasteButtonById_Show();
}
}
},
......@@ -3065,7 +3073,7 @@ PasteProcessor.prototype =
presentation.Check_CursorMoveRight();
presentation.Document_UpdateInterfaceState();
}
}
};
oThis.api.pre_Paste(aContent.fonts, null, paste_callback);
}
......
......@@ -2868,6 +2868,12 @@ CDocument.prototype.Recalculate_PageColumn = function()
this.private_RecalculateHdrFtrPageCountUpdate();
}
}
if(window['AscCommon'].g_clipboardBase && window['AscCommon'].g_clipboardBase.showButtonIdParagraph && !window['AscCommon'].g_clipboardBase.pasteStart)
{
window['AscCommon'].g_clipboardBase.SpecialPasteButtonById_Show();
}
window['AscCommon'].g_clipboardBase.endRecalcDocument = true;
}
}
......@@ -5071,6 +5077,7 @@ CDocument.prototype.Selection_SetStart = function(X, Y, MouseEvent)
var PageMetrics = this.Get_PageContentStartPos(this.CurPage, this.Pages[this.CurPage].Pos);
var oldDocPosType = this.Get_DocPosType();
// Проверяем, не попали ли мы в колонтитул (если мы попадаем в Flow-объект, то попадание в колонтитул не проверяем)
if (true != bFlowTable && nInDrawing < 0 && true === bCheckHdrFtr && MouseEvent.ClickCount >= 2 && ( Y <= PageMetrics.Y || Y > PageMetrics.YLimit ))
{
......@@ -5196,6 +5203,13 @@ CDocument.prototype.Selection_SetStart = function(X, Y, MouseEvent)
}
}
}
//при переходе из колонтитула в контент(и обратно) необходимо скрывать иконку с/в
var newDocPosType = this.Get_DocPosType();
if((docpostype_HdrFtr === newDocPosType && docpostype_Content === oldDocPosType) || (docpostype_Content === newDocPosType && docpostype_HdrFtr === oldDocPosType))
{
window['AscCommon'].g_clipboardBase.SpecialPasteButton_Hide();
}
};
/**
* Данная функция может использоваться как при движении, так и при окончательном выставлении селекта.
......
......@@ -1997,7 +1997,7 @@ background-repeat: no-repeat;\
this.sendEvent("asc_onHideSpecialPasteOptions");
};
asc_docs_api.prototype.asc_UpdateSpecialPasteButton = function()
asc_docs_api.prototype.asc_UpdateSpecialPasteButton = function(props)
{
this.sendEvent("asc_onShowSpecialPasteOptions", props);
};
......
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