Commit e90a205b authored by Igor.Zotov's avatar Igor.Zotov Committed by Alexander.Trofimov

copy/paste таблиц из PP

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@60023 954022d7-b5bf-4e40-9824-e11837661b57
parent 400d623a
...@@ -910,6 +910,7 @@ function BinaryPPTYLoader() ...@@ -910,6 +910,7 @@ function BinaryPPTYLoader()
{ {
var _id = s.GetString2(); var _id = s.GetString2();
// _style.Id = _id; // _style.Id = _id;
if(this.presentation.TableStylesIdMa)
this.presentation.TableStylesIdMap[_style.Id] = true; this.presentation.TableStylesIdMap[_style.Id] = true;
this.map_table_styles[_id] = _style; this.map_table_styles[_id] = _style;
break; break;
...@@ -1085,6 +1086,7 @@ function BinaryPPTYLoader() ...@@ -1085,6 +1086,7 @@ function BinaryPPTYLoader()
_style.TablePr.TableBorders.Right = _style.TableWholeTable.TableCellPr.TableCellBorders.Right; _style.TablePr.TableBorders.Right = _style.TableWholeTable.TableCellPr.TableCellBorders.Right;
delete _style.TableWholeTable.TableCellPr.TableCellBorders.Right; delete _style.TableWholeTable.TableCellPr.TableCellBorders.Right;
} }
if(this.presentation.globalTableStyles)
this.presentation.globalTableStyles.Add(_style); this.presentation.globalTableStyles.Add(_style);
}; };
......
...@@ -770,7 +770,7 @@ CopyProcessor.prototype = ...@@ -770,7 +770,7 @@ CopyProcessor.prototype =
if(g_bIsDocumentCopyPaste) if(g_bIsDocumentCopyPaste)
oStyle = this.parse_para_TextPr(item.Get_CompiledTextPr()); oStyle = this.parse_para_TextPr(item.Get_CompiledTextPr());
else else
oStyle = this.parse_para_TextPr(item.Pr); oStyle = this.parse_para_TextPr(item.Get_CompiledTextPr());
if (oStyle && oStyle.style) if (oStyle && oStyle.style)
sRes += " style=\"" + oStyle.style + "\""; sRes += " style=\"" + oStyle.style + "\"";
...@@ -1048,6 +1048,16 @@ CopyProcessor.prototype = ...@@ -1048,6 +1048,16 @@ CopyProcessor.prototype =
if(rowspan > 1) if(rowspan > 1)
tc.setAttribute("rowspan", rowspan); tc.setAttribute("rowspan", rowspan);
var cellPr = null; var cellPr = null;
var tablePr = null;
if(!g_bIsDocumentCopyPaste && editor.WordControl.m_oLogicDocument && null != cell.CompiledPr && null != cell.CompiledPr.Pr)
{
var presentation = editor.WordControl.m_oLogicDocument;
var curSlide = presentation.Slides[presentation.CurPage];
if(presentation && curSlide && curSlide.Layout && curSlide.Layout.Master && curSlide.Layout.Master.Theme)
checkTableCellPr(cell.CompiledPr.Pr, curSlide, curSlide.Layout, curSlide.Layout.Master, curSlide.Layout.Master.Theme);
}
if(null != cell.CompiledPr && null != cell.CompiledPr.Pr) if(null != cell.CompiledPr && null != cell.CompiledPr.Pr)
{ {
cellPr = cell.CompiledPr.Pr; cellPr = cell.CompiledPr.Pr;
...@@ -1692,6 +1702,22 @@ CopyProcessor.prototype = ...@@ -1692,6 +1702,22 @@ CopyProcessor.prototype =
} }
} }
} }
else if(elementsContent && elementsContent.length)
{
for ( var Index = 0; Index < elementsContent.length; Index++ )
{
var Item = elementsContent[Index];
if( type_Table === Item.GetType() )
{
this.CopyTable(oDomTarget, Item, null);
}
else if ( type_Paragraph === Item.GetType() )
{
this.CopyParagraph(oDomTarget, Item, true, false);
}
}
}
} }
...@@ -1826,12 +1852,21 @@ CopyProcessor.prototype = ...@@ -1826,12 +1852,21 @@ CopyProcessor.prototype =
var table_styles_ids = []; var table_styles_ids = [];
var sp_tree = slide.cSld.spTree; var sp_tree = slide.cSld.spTree;
for(var i = 0; i < sp_tree.length; i++)
{
if(sp_tree[i] instanceof CGraphicFrame && sp_tree[i].graphicObject)
{
table_styles_ids[table_styles_ids.length] = sp_tree[i].graphicObject.Get_TableStyle();
}
}
//записываем table_styles_ids //записываем table_styles_ids
this.oPresentationWriter.WriteULong(table_styles_ids.length); this.oPresentationWriter.WriteULong(table_styles_ids.length);
for(var i = 0; i < table_styles_ids.length; ++i) for(var i = 0; i < table_styles_ids.length; ++i)
{ {
this.oPresentationWriter.WriteBool(isRealNumber(table_styles_ids[i]) && table_styles_ids[i] > -1) this.oPresentationWriter.WriteBool(table_styles_ids[i] !== null);
if(isRealNumber(table_styles_ids[i]) && table_styles_ids[i] > -1) if(table_styles_ids[i] !== null)
{ {
this.oPresentationWriter.WriteULong(table_styles_ids[i]); this.oPresentationWriter.WriteULong(table_styles_ids[i]);
} }
...@@ -2018,27 +2053,33 @@ CopyProcessor.prototype = ...@@ -2018,27 +2053,33 @@ CopyProcessor.prototype =
var oRowElems = {}; var oRowElems = {};
var Item = graphicFrame.graphicObject; var Item = graphicFrame.graphicObject;
/*var b_style_index = false; var b_style_index = false;
if(isRealNumber(graphicFrame.graphicObject.styleIndex) && graphicFrame.graphicObject.styleIndex > -1) if(Item.TableStyle)
{ {
b_style_index = true; b_style_index = true;
} }
this.oPresentationWriter.WriteBool(b_style_index); var presentation = editor.WordControl.m_oLogicDocument;
if(b_style_index) for(var key in presentation.TableStylesIdMap)
{
if(presentation.TableStylesIdMap.hasOwnProperty(key))
{ {
this.oPresentationWriter.WriteULong(graphicFrame.graphicObject.styleIndex); this.oPresentationWriter.tableStylesGuides[key] = "{" + GUID() + "}"
}
} }
var old_style_index = graphicFrame.graphicObject.styleIndex;*/
//graphicFrame.graphicObject.styleIndex = -1;
this.oPresentationWriter.WriteBool(!b_style_index);
if(b_style_index)
{
var tableStyle = presentation.globalTableStyles.Style[Item.TableStyle];
this.oPresentationWriter.WriteBool(true); this.oPresentationWriter.WriteBool(true);
this.oPresentationWriter.WriteTableStyle(Item.TableStyle, tableStyle);
this.oPresentationWriter.WriteBool(true);
this.oPresentationWriter.WriteString2(Item.TableStyle);
}
this.oPresentationWriter.WriteTable(graphicFrame); this.oPresentationWriter.WriteTable(graphicFrame);
//graphicFrame.graphicObject.styleIndex = old_style_index;
//this.oBinaryFileWriter.copyParams.itemCount = 0;
this.CopyTable(oDomTarget, Item, null); this.CopyTable(oDomTarget, Item, null);
}, },
...@@ -3199,8 +3240,20 @@ PasteProcessor.prototype = ...@@ -3199,8 +3240,20 @@ PasteProcessor.prototype =
} }
case "Drawings": case "Drawings":
{ {
//TODO пересмотреть отключение истории!!!
History.TurnOff();
var objects = this.ReadPresentationShapes(stream); var objects = this.ReadPresentationShapes(stream);
History.TurnOn();
var arr_shapes = objects.arrShapes; var arr_shapes = objects.arrShapes;
//****если записана одна табличка, то вставляем html и поддерживаем все цвета и стили****
if(!objects.arrImages.length && objects.arrShapes.length === 1 && objects.arrShapes[0] && objects.arrShapes[0].Drawing && objects.arrShapes[0].Drawing.graphicObject)
{
var drawing = objects.arrShapes[0].Drawing;
if(typeof CGraphicFrame !== "undefined" && drawing instanceof CGraphicFrame)
break;
}
var aContent = oThis._convertExcelBinary(null, arr_shapes); var aContent = oThis._convertExcelBinary(null, arr_shapes);
this.aContent = aContent.content; this.aContent = aContent.content;
...@@ -3481,7 +3534,7 @@ PasteProcessor.prototype = ...@@ -3481,7 +3534,7 @@ PasteProcessor.prototype =
{ {
if(sp_tree[s] instanceof CGraphicFrame) if(sp_tree[s] instanceof CGraphicFrame)
{ {
sp_tree[s].graphicObject.setStyleIndex(table_style_ids[t]); sp_tree[s].graphicObject.Set_TableStyle(table_style_ids[t]);
++t; ++t;
} }
} }
...@@ -4246,7 +4299,7 @@ PasteProcessor.prototype = ...@@ -4246,7 +4299,7 @@ PasteProcessor.prototype =
//пока только распознаём только графические объекты //пока только распознаём только графические объекты
var aContent = null, tempParagraph = null; var aContent = null, tempParagraph = null;
var aPastedImages = []; var aPastedImages = [];
var imageUrl, images = []; var imageUrl, images = [], isGraphicFrame, extX, extY;
var drawings = pDrawings ? pDrawings : aContentExcel.aWorksheets[0].Drawings; var drawings = pDrawings ? pDrawings : aContentExcel.aWorksheets[0].Drawings;
if(drawings && drawings.length) if(drawings && drawings.length)
...@@ -4264,12 +4317,37 @@ PasteProcessor.prototype = ...@@ -4264,12 +4317,37 @@ PasteProcessor.prototype =
drawing = drawings[i] && drawings[i].Drawing ? drawings[i].Drawing : drawings[i]; drawing = drawings[i] && drawings[i].Drawing ? drawings[i].Drawing : drawings[i];
//TODO нужна отдельная обработка для таблиц из презентаций //TODO нужна отдельная обработка для таблиц из презентаций
if(typeof CTable !== "undefined" && drawing.graphicObject instanceof CTable) isGraphicFrame = typeof CTable !== "undefined" && drawing.graphicObject instanceof CTable;
if(isGraphicFrame && drawings.length > 1 && drawings[i].base64)//если кроме таблички(при вставке из презентаций) содержатся ещё данные, вставляем в виде base64
{
if(!tempParagraph)
tempParagraph = new Paragraph(this.oDocument.DrawingDocument, this.oDocument, 0, 0, 0, 0, 0);
extX = drawings[i].ExtX;
extY = drawings[i].ExtY;
imageUrl = drawings[i].base64;
graphicObj = DrawingObjectsController.prototype.createImage(imageUrl, 0, 0, extX, extY);
tempParaRun = new ParaRun();
tempParaRun.Paragraph = null;
tempParaRun.Add_ToContent( 0, new ParaDrawing(), false );
tempParaRun.Content[0].Set_GraphicObject(graphicObj);
tempParaRun.Content[0].GraphicObj.setParent(tempParaRun.Content[0]);
tempParagraph.Content.splice(tempParagraph.Content.length - 1, 0, tempParaRun);
aPastedImages[aPastedImages.length] = new CBuilderImages(graphicObj.blipFill, imageUrl);
images[images.length] = imageUrl;
}
else if(isGraphicFrame)
{ {
drawing.graphicObject.Set_Parent(this.oDocument);
drawing.setBDeleted(true); drawing.setBDeleted(true);
drawing.setWordFlag(false); drawing.setWordFlag(false);
aContent[aContent.length] = drawing.graphicObject.Copy(); var copyObj = drawing.graphicObject.Copy();
copyObj.Set_Parent(this.oDocument);
aContent[aContent.length] = copyObj;
drawing.setWordFlag(true); drawing.setWordFlag(true);
} }
else else
...@@ -4277,14 +4355,20 @@ PasteProcessor.prototype = ...@@ -4277,14 +4355,20 @@ PasteProcessor.prototype =
if(!tempParagraph) if(!tempParagraph)
tempParagraph = new Paragraph(this.oDocument.DrawingDocument, this.oDocument, 0, 0, 0, 0, 0); tempParagraph = new Paragraph(this.oDocument.DrawingDocument, this.oDocument, 0, 0, 0, 0, 0);
extX = drawings[i].ExtX;
extY = drawings[i].ExtY;
graphicObj = drawing.graphicObject ? drawing.graphicObject.convertToWord(this.oLogicDocument) : drawing.convertToWord(this.oLogicDocument) ; graphicObj = drawing.graphicObject ? drawing.graphicObject.convertToWord(this.oLogicDocument) : drawing.convertToWord(this.oLogicDocument) ;
/*graphicObj.spPr.setXfrm(new CXfrm());
if(extX)
graphicObj.spPr.xfrm.setExtX(extX);
if(extY)
graphicObj.spPr.xfrm.setExtY(extY);*/
tempParaRun = new ParaRun(); tempParaRun = new ParaRun();
tempParaRun.Paragraph = null; tempParaRun.Paragraph = null;
tempParaRun.Add_ToContent( 0, new ParaDrawing(), false );//tempParaRun.Content.unshift(new ParaDrawing()); tempParaRun.Add_ToContent( 0, new ParaDrawing(), false );
//paraRun.Content[index].wrappingType = wrappingType;
//paraRun.Content[index].DrawingType = DrawingType;
tempParaRun.Content[0].Set_GraphicObject(graphicObj); tempParaRun.Content[0].Set_GraphicObject(graphicObj);
tempParaRun.Content[0].GraphicObj.setParent(tempParaRun.Content[0]); tempParaRun.Content[0].GraphicObj.setParent(tempParaRun.Content[0]);
...@@ -4479,16 +4563,31 @@ PasteProcessor.prototype = ...@@ -4479,16 +4563,31 @@ PasteProcessor.prototype =
var count = stream.GetULong(); var count = stream.GetULong();
var arr_shapes = []; var arr_shapes = [];
var arr_transforms = []; var arr_transforms = [];
var cStyle;
for(var i = 0; i < count; ++i) for(var i = 0; i < count; ++i)
{ {
loader.TempMainObject = presentation && presentation.Slides ? presentation.Slides[presentation.CurPage] : presentation; loader.TempMainObject = presentation && presentation.Slides ? presentation.Slides[presentation.CurPage] : presentation;
var style_index = null; var style_index = null;
//читаем флаг о наличии табличного стиля
if(!loader.stream.GetBool()) if(!loader.stream.GetBool())
{ {
if(loader.stream.GetBool()) if(loader.stream.GetBool())
{ {
style_index = stream.GetULong(); //в случае если вставляем в презентации, пропускаем
if(!g_bIsDocumentCopyPaste)
{
loader.stream.Skip2(1);
loader.stream.SkipRecord();
}
else
{
loader.stream.Skip2(1);
cStyle = loader.ReadTableStyle();
}
loader.stream.GetBool();
style_index = stream.GetString2();
} }
} }
...@@ -4510,6 +4609,19 @@ PasteProcessor.prototype = ...@@ -4510,6 +4609,19 @@ PasteProcessor.prototype =
arr_shapes[i].Y = y; arr_shapes[i].Y = y;
arr_shapes[i].ExtX = extX; arr_shapes[i].ExtX = extX;
arr_shapes[i].ExtY = extY; arr_shapes[i].ExtY = extY;
if(!presentation.Slides)
arr_shapes[i].base64 = base64;
if(style_index != null && arr_shapes[i].Drawing.graphicObject && arr_shapes[i].Drawing.graphicObject.Set_TableStyle)
{
if(!g_bIsDocumentCopyPaste)
arr_shapes[i].Drawing.graphicObject.Set_TableStyle(style_index);
else if(cStyle)
{
//пока не применяем стили, посольку они отличаются
//this._applyStylesToTable(arr_shapes[i].Drawing.graphicObject, cStyle);
}
}
} }
return {arrShapes: arr_shapes, arrImages: loader.End_UseFullUrl(), arrTransforms: arr_transforms}; return {arrShapes: arr_shapes, arrImages: loader.End_UseFullUrl(), arrTransforms: arr_transforms};
...@@ -7284,6 +7396,32 @@ PasteProcessor.prototype = ...@@ -7284,6 +7396,32 @@ PasteProcessor.prototype =
{ {
arrTables.push(arrTables2[i]); arrTables.push(arrTables2[i]);
} }
},
_applyStylesToTable: function(cTable, cStyle)
{
if(!cTable || !cStyle || (cTable && !cTable.Content))
return;
var row, tableCell;
for(var i = 0; i < cTable.Content.length; i++)
{
row = cTable.Content[i];
for(var j = 0; j < row.Content.length; j++)
{
tableCell = row.Content[j];
//пока не заливаю функцию Internal_Compile_Pr(находится в table.js + правки)
var test = this.Internal_Compile_Pr(cTable, cStyle, tableCell);
tableCell.Set_Pr(test.CellPr);
//проверка цвета
/*cStyle.TableFirstRow.TableCellPr.Shd.Unifill.check(cTable.Get_Theme(), cTable.Get_ColorMap());
var RGBA = cStyle.TableFirstRow.TableCellPr.Shd.Unifill.getRGBAColor();
var theme = cTable.Get_Theme();*/
}
}
} }
}; };
......
...@@ -1781,6 +1781,15 @@ ...@@ -1781,6 +1781,15 @@
case "Drawings": case "Drawings":
{ {
var objects = this.ReadPresentationShapes(stream, worksheet); var objects = this.ReadPresentationShapes(stream, worksheet);
//****если записана одна табличка, то вставляем html и поддерживаем все цвета и стили****
if(!objects.arrImages.length && objects.arrShapes.length === 1)
{
var drawing = objects.arrShapes[0].graphicObject;
if(typeof CGraphicFrame !== "undefined" && drawing instanceof CGraphicFrame)
return false;
}
var arr_shapes = objects.arrShapes; var arr_shapes = objects.arrShapes;
if(arr_shapes && arr_shapes.length) if(arr_shapes && arr_shapes.length)
{ {
...@@ -1815,20 +1824,24 @@ ...@@ -1815,20 +1824,24 @@
var arr_shapes = []; var arr_shapes = [];
var arr_transforms = []; var arr_transforms = [];
var arrBase64Img = []; var arrBase64Img = [];
var cStyle;
for(var i = 0; i < count; ++i) for(var i = 0; i < count; ++i)
{ {
//loader.TempMainObject = presentation.Slides[presentation.CurPage]; //loader.TempMainObject = presentation.Slides[presentation.CurPage];
/*var style_index = null; var style_index = null;
//читаем флаг о наличии табличного стиля
if(!loader.stream.GetBool()) if(!loader.stream.GetBool())
{ {
if(loader.stream.GetBool()) if(loader.stream.GetBool())
{ {
style_index = stream.GetULong(); loader.stream.Skip2(1);
} cStyle = loader.ReadTableStyle();
}*/
loader.stream.GetBool(); loader.stream.GetBool();
style_index = stream.GetString2();
}
}
var drawing = loader.ReadGraphicObject(); var drawing = loader.ReadGraphicObject();
......
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