15680 lines
722 KiB
JavaScript
15680 lines
722 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2014
|
|
*
|
|
* This program is a free software product. You can redistribute it and/or
|
|
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
|
* version 3 as published by the Free Software Foundation. In accordance with
|
|
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
|
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
|
* of any third-party rights.
|
|
*
|
|
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
|
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
*
|
|
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
|
* EU, LV-1021.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of the Program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU AGPL version 3.
|
|
*
|
|
* Pursuant to Section 7(b) of the License you must retain the original Product
|
|
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
|
* grant you any rights under trademark law for use of our trademarks.
|
|
*
|
|
* All the Product's GUI elements, including illustrations and icon sets, as
|
|
* well as technical writing content are licensed under the terms of the
|
|
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
|
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
|
*
|
|
*/
|
|
var table_Selection_Cell = 0;
|
|
var table_Selection_Text = 1;
|
|
var table_Selection_Common = 0;
|
|
var table_Selection_Border = 1;
|
|
var table_Selection_Border_InnerTable = 2;
|
|
var type_Table = 2;
|
|
function CTableAnchorPosition() {
|
|
this.CalcX = 0;
|
|
this.CalcY = 0;
|
|
this.W = 0;
|
|
this.H = 0;
|
|
this.X = 0;
|
|
this.Y = 0;
|
|
this.Left_Margin = 0;
|
|
this.Right_Margin = 0;
|
|
this.Top_Margin = 0;
|
|
this.Bottom_Margin = 0;
|
|
this.Page_W = 0;
|
|
this.Page_H = 0;
|
|
this.X_min = 0;
|
|
this.Y_min = 0;
|
|
this.X_max = 0;
|
|
this.Y_max = 0;
|
|
}
|
|
CTableAnchorPosition.prototype = {
|
|
Set_X: function (W, X, Left_Margin, Right_Margin, Page_W, X_min, X_max) {
|
|
this.W = W;
|
|
this.X = X;
|
|
this.Left_Margin = Left_Margin;
|
|
this.Right_Margin = Right_Margin;
|
|
this.Page_W = Page_W;
|
|
this.X_min = X_min;
|
|
this.X_max = X_max;
|
|
},
|
|
Set_Y: function (H, Y, Top_Margin, Bottom_Margin, Page_H, Y_min, Y_max) {
|
|
this.H = H;
|
|
this.Y = Y;
|
|
this.Top_Margin = Top_Margin;
|
|
this.Bottom_Margin = Bottom_Margin;
|
|
this.Page_H = Page_H;
|
|
this.Y_min = Y_min;
|
|
this.Y_max = Y_max;
|
|
},
|
|
Calculate_X: function (RelativeFrom, bAlign, Value) {
|
|
switch (RelativeFrom) {
|
|
case c_oAscHAnchor.Text:
|
|
case c_oAscHAnchor.Margin:
|
|
if (true === bAlign) {
|
|
switch (Value) {
|
|
case c_oAscXAlign.Center:
|
|
this.CalcX = (this.Left_Margin + this.Right_Margin - this.W) / 2;
|
|
break;
|
|
case c_oAscXAlign.Inside:
|
|
case c_oAscXAlign.Outside:
|
|
case c_oAscXAlign.Left:
|
|
this.CalcX = this.Left_Margin;
|
|
break;
|
|
case c_oAscXAlign.Right:
|
|
this.CalcX = this.Right_Margin - this.W;
|
|
break;
|
|
}
|
|
} else {
|
|
this.CalcX = this.Left_Margin + Value;
|
|
}
|
|
break;
|
|
case c_oAscHAnchor.Page:
|
|
var W = this.X_max - this.X_min;
|
|
if (true === bAlign) {
|
|
switch (Value) {
|
|
case c_oAscXAlign.Center:
|
|
this.CalcX = this.X_min + (W - this.W) / 2;
|
|
break;
|
|
case c_oAscXAlign.Inside:
|
|
case c_oAscXAlign.Outside:
|
|
case c_oAscXAlign.Left:
|
|
this.CalcX = this.X_min;
|
|
break;
|
|
case c_oAscXAlign.Right:
|
|
this.CalcX = this.X_max - this.W;
|
|
break;
|
|
}
|
|
} else {
|
|
this.CalcX = this.X_min + Value;
|
|
}
|
|
break;
|
|
case c_oAscHAnchor.PageInternal:
|
|
if (true === bAlign) {
|
|
switch (Value) {
|
|
case c_oAscXAlign.Center:
|
|
this.CalcX = (this.Page_W - this.W) / 2;
|
|
break;
|
|
case c_oAscXAlign.Inside:
|
|
case c_oAscXAlign.Outside:
|
|
case c_oAscXAlign.Left:
|
|
this.CalcX = 0;
|
|
break;
|
|
case c_oAscXAlign.Right:
|
|
this.CalcX = this.Page_W - this.W;
|
|
break;
|
|
}
|
|
} else {
|
|
this.CalcX = Value;
|
|
}
|
|
break;
|
|
}
|
|
return this.CalcX;
|
|
},
|
|
Calculate_Y: function (RelativeFrom, bAlign, Value) {
|
|
switch (RelativeFrom) {
|
|
case c_oAscVAnchor.Margin:
|
|
if (true === bAlign) {
|
|
switch (Value) {
|
|
case c_oAscYAlign.Bottom:
|
|
this.CalcY = this.Bottom_Margin - this.H;
|
|
break;
|
|
case c_oAscYAlign.Center:
|
|
this.CalcY = (this.Bottom_Margin + this.Top_Margin - this.H) / 2;
|
|
break;
|
|
case c_oAscYAlign.Inline:
|
|
case c_oAscYAlign.Inside:
|
|
case c_oAscYAlign.Outside:
|
|
case c_oAscYAlign.Top:
|
|
this.CalcY = this.Top_Margin;
|
|
break;
|
|
}
|
|
} else {
|
|
this.CalcY = this.Top_Margin + Value;
|
|
}
|
|
break;
|
|
case c_oAscVAnchor.Page:
|
|
if (true === bAlign) {
|
|
switch (Value) {
|
|
case c_oAscYAlign.Bottom:
|
|
this.CalcY = this.Page_H - this.H;
|
|
break;
|
|
case c_oAscYAlign.Center:
|
|
this.CalcY = (this.Page_H - this.H) / 2;
|
|
break;
|
|
case c_oAscYAlign.Inline:
|
|
case c_oAscYAlign.Inside:
|
|
case c_oAscYAlign.Outside:
|
|
case c_oAscYAlign.Top:
|
|
this.CalcY = 0;
|
|
break;
|
|
}
|
|
} else {
|
|
this.CalcY = Value;
|
|
}
|
|
break;
|
|
case c_oAscVAnchor.Text:
|
|
if (true === bAlign) {
|
|
this.CalcY = this.Y;
|
|
} else {
|
|
this.CalcY = this.Y + Value;
|
|
}
|
|
break;
|
|
}
|
|
return this.CalcY;
|
|
},
|
|
Correct_Values: function (X_min, Y_min, X_max, Y_max, AllowOverlap, OtherFlowTables, CurTable) {
|
|
var W = this.W;
|
|
var H = this.H;
|
|
var CurX = this.CalcX;
|
|
var CurY = this.CalcY;
|
|
var bBreak = false;
|
|
while (true != bBreak) {
|
|
bBreak = true;
|
|
for (var Index = 0; Index < OtherFlowTables.length; Index++) {
|
|
var FlowTable = OtherFlowTables[Index];
|
|
if (FlowTable.Table != CurTable && (false === AllowOverlap || false === FlowTable.Table.Get_AllowOverlap()) && (CurX <= FlowTable.X + FlowTable.W && CurX + W >= FlowTable.X && CurY <= FlowTable.Y + FlowTable.H && CurY + H >= FlowTable.Y)) {
|
|
CurY = FlowTable.Y + FlowTable.H + 0.001;
|
|
bBreak = false;
|
|
}
|
|
}
|
|
}
|
|
if (CurY + H > Y_max) {
|
|
CurY = Y_max - H;
|
|
}
|
|
if (CurY < this.Y_min) {
|
|
CurY = this.Y_min;
|
|
}
|
|
this.CalcY = CurY;
|
|
this.CalcX = CurX;
|
|
},
|
|
Calculate_X_Value: function (RelativeFrom) {
|
|
var Value = 0;
|
|
switch (RelativeFrom) {
|
|
case c_oAscHAnchor.Text:
|
|
case c_oAscHAnchor.Margin:
|
|
Value = this.CalcX - this.Left_Margin;
|
|
break;
|
|
case c_oAscHAnchor.Page:
|
|
Value = this.CalcX - this.X_min;
|
|
break;
|
|
case c_oAscHAnchor.PageInternal:
|
|
Value = this.CalcX;
|
|
break;
|
|
}
|
|
return Value;
|
|
},
|
|
Calculate_Y_Value: function (RelativeFrom) {
|
|
var Value = 0;
|
|
switch (RelativeFrom) {
|
|
case c_oAscVAnchor.Margin:
|
|
Value = this.CalcY - this.Top_Margin;
|
|
break;
|
|
case c_oAscVAnchor.Page:
|
|
Value = this.CalcY;
|
|
break;
|
|
case c_oAscVAnchor.Text:
|
|
Value = this.CalcY - this.Y;
|
|
break;
|
|
}
|
|
return Value;
|
|
}
|
|
};
|
|
function CTablePage(X, Y, XLimit, YLimit, FirstRow, MaxTopBorder) {
|
|
this.X = X;
|
|
this.Y = Y;
|
|
this.XLimit = XLimit;
|
|
this.YLimit = YLimit;
|
|
this.Bounds = new CDocumentBounds(X, Y, XLimit, Y);
|
|
this.MaxTopBorder = MaxTopBorder;
|
|
this.FirstRow = FirstRow;
|
|
this.LastRow = FirstRow;
|
|
this.Height = 0;
|
|
}
|
|
CTablePage.prototype = {
|
|
Shift: function (Dx, Dy) {
|
|
this.X += Dx;
|
|
this.Y += Dy;
|
|
this.XLimit += Dx;
|
|
this.YLimit += Dy;
|
|
this.Bounds.Shift(Dx, Dy);
|
|
}
|
|
};
|
|
function CTableRecalcInfo() {
|
|
this.TableGrid = true;
|
|
this.TableBorders = true;
|
|
}
|
|
CTableRecalcInfo.prototype = {
|
|
Set_Type_0: function (Type) {
|
|
this.Recalc_0_Type = Type;
|
|
}
|
|
};
|
|
function CTableLook(bFC, bFR, bLC, bLR, bBH, bBV) {
|
|
this.m_bFirst_Col = (true === bFC ? true : false);
|
|
this.m_bFirst_Row = (true === bFR ? true : false);
|
|
this.m_bLast_Col = (true === bLC ? true : false);
|
|
this.m_bLast_Row = (true === bLR ? true : false);
|
|
this.m_bBand_Hor = (true === bBH ? true : false);
|
|
this.m_bBand_Ver = (true === bBV ? true : false);
|
|
}
|
|
CTableLook.prototype = {
|
|
Set: function (bFC, bFR, bLC, bLR, bBH, bBV) {
|
|
this.m_bFirst_Col = (true === bFC ? true : false);
|
|
this.m_bFirst_Row = (true === bFR ? true : false);
|
|
this.m_bLast_Col = (true === bLC ? true : false);
|
|
this.m_bLast_Row = (true === bLR ? true : false);
|
|
this.m_bBand_Hor = (true === bBH ? true : false);
|
|
this.m_bBand_Ver = (true === bBV ? true : false);
|
|
},
|
|
Copy: function () {
|
|
return new CTableLook(this.m_bFirst_Col, this.m_bFirst_Row, this.m_bLast_Col, this.m_bLast_Row, this.m_bBand_Hor, this.m_bBand_Ver);
|
|
},
|
|
Is_FirstCol: function () {
|
|
return this.m_bFirst_Col;
|
|
},
|
|
Is_FirstRow: function () {
|
|
return this.m_bFirst_Row;
|
|
},
|
|
Is_LastCol: function () {
|
|
return this.m_bLast_Col;
|
|
},
|
|
Is_LastRow: function () {
|
|
return this.m_bLast_Row;
|
|
},
|
|
Is_BandHor: function () {
|
|
return this.m_bBand_Hor;
|
|
},
|
|
Is_BandVer: function () {
|
|
return this.m_bBand_Ver;
|
|
},
|
|
Write_ToBinary: function (Writer) {
|
|
Writer.WriteBool(this.m_bFirst_Col);
|
|
Writer.WriteBool(this.m_bFirst_Row);
|
|
Writer.WriteBool(this.m_bLast_Col);
|
|
Writer.WriteBool(this.m_bLast_Row);
|
|
Writer.WriteBool(this.m_bBand_Hor);
|
|
Writer.WriteBool(this.m_bBand_Ver);
|
|
},
|
|
Read_FromBinary: function (Reader) {
|
|
this.m_bFirst_Col = Reader.GetBool();
|
|
this.m_bFirst_Row = Reader.GetBool();
|
|
this.m_bLast_Col = Reader.GetBool();
|
|
this.m_bLast_Row = Reader.GetBool();
|
|
this.m_bBand_Hor = Reader.GetBool();
|
|
this.m_bBand_Ver = Reader.GetBool();
|
|
}
|
|
};
|
|
function CTable(DrawingDocument, Parent, Inline, PageNum, X, Y, XLimit, YLimit, Rows, Cols, TableGrid) {
|
|
this.Id = g_oIdCounter.Get_NewId();
|
|
this.Markup = new CTableMarkup(this);
|
|
this.Prev = null;
|
|
this.Next = null;
|
|
this.Index = -1;
|
|
this.Inline = true;
|
|
this.Lock = new CLock();
|
|
if (false === g_oIdCounter.m_bLoad) {
|
|
this.Lock.Set_Type(locktype_Mine, false);
|
|
CollaborativeEditing.Add_Unlock2(this);
|
|
}
|
|
this.DrawingDocument = DrawingDocument;
|
|
this.Parent = Parent;
|
|
this.PageNum = PageNum;
|
|
this.CompiledPr = {
|
|
Pr: null,
|
|
NeedRecalc: true
|
|
};
|
|
this.Pr = new CTablePr();
|
|
this.Pr.TableW = new CTableMeasurement(tblwidth_Auto, 0);
|
|
this.TableGridNeedRecalc = true;
|
|
this.TableStyle = editor.WordControl.m_oLogicDocument.Styles.Get_Default_TableGrid();
|
|
this.TableLook = new CTableLook(true, true, false, false, true, false);
|
|
this.TableSumGrid = [];
|
|
this.TableGrid = TableGrid;
|
|
this.TableGridCalc = this.Internal_Copy_Grid(TableGrid);
|
|
this.RecalcInfo = new CTableRecalcInfo();
|
|
this.Rows = Rows;
|
|
this.Cols = Cols;
|
|
this.Content = new Array();
|
|
for (var Index = 0; Index < Rows; Index++) {
|
|
this.Content[Index] = new CTableRow(this, Cols, TableGrid);
|
|
}
|
|
this.Internal_ReIndexing(0);
|
|
this.RowsInfo = new Array();
|
|
this.TableRowsBottom = [];
|
|
this.HeaderInfo = {
|
|
Count: 0,
|
|
H: 0,
|
|
PageIndex: 0,
|
|
Pages: new Array()
|
|
};
|
|
this.Selection = {
|
|
Start: false,
|
|
Use: false,
|
|
StartPos: {
|
|
Pos: {
|
|
Row: 0,
|
|
Cell: 0
|
|
},
|
|
X: 0,
|
|
Y: 0
|
|
},
|
|
EndPos: {
|
|
Pos: {
|
|
Row: 0,
|
|
Cell: 0
|
|
},
|
|
X: 0,
|
|
Y: 0
|
|
},
|
|
Type: table_Selection_Text,
|
|
Data: null,
|
|
Type2: table_Selection_Common,
|
|
Data2: null,
|
|
CurRow: 0
|
|
};
|
|
this.X_origin = X;
|
|
this.X = X;
|
|
this.Y = Y;
|
|
this.XLimit = XLimit;
|
|
this.YLimit = YLimit;
|
|
this.AllowOverlap = true;
|
|
this.PositionH = {
|
|
RelativeFrom: c_oAscHAnchor.Page,
|
|
Align: false,
|
|
Value: c_oAscXAlign.Center
|
|
};
|
|
this.PositionH_Old = undefined;
|
|
this.PositionV = {
|
|
RelativeFrom: c_oAscVAnchor.Page,
|
|
Align: false,
|
|
Value: c_oAscYAlign.Center
|
|
};
|
|
this.PositionV_Old = undefined;
|
|
this.Distance = {
|
|
T: 0,
|
|
B: 0,
|
|
L: 0,
|
|
R: 0
|
|
};
|
|
this.AnchorPosition = new CTableAnchorPosition();
|
|
this.Pages = new Array();
|
|
this.Pages[0] = new CTablePage(X, Y, XLimit, YLimit, 0, 0);
|
|
this.MaxTopBorder = new Array();
|
|
this.MaxBotBorder = new Array();
|
|
this.MaxBotMargin = new Array();
|
|
if (this.Content.length > 0) {
|
|
this.CurCell = this.Content[0].Get_Cell(0);
|
|
} else {
|
|
this.CurCell = null;
|
|
}
|
|
this.TurnOffRecalc = false;
|
|
this.TurnOffRecalcEvent = false;
|
|
this.ApplyToAll = false;
|
|
this.m_oContentChanges = new CContentChanges();
|
|
g_oTableId.Add(this, this.Id);
|
|
}
|
|
CTable.prototype = {
|
|
setStyleIndex: function (index) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_SetStyleIndex,
|
|
oldPr: this.styleIndex,
|
|
newPr: index
|
|
});
|
|
this.styleIndex = index;
|
|
},
|
|
Get_Props: function () {
|
|
var TablePr = this.Get_CompiledPr(false).TablePr;
|
|
var Pr = new Object();
|
|
if (tblwidth_Auto === TablePr.TableW.Type) {
|
|
Pr.TableWidth = null;
|
|
} else {
|
|
Pr.TableWidth = TablePr.TableW.W;
|
|
}
|
|
Pr.TableSpacing = this.Content[0].Get_CellSpacing();
|
|
Pr.TableDefaultMargins = {
|
|
Left: TablePr.TableCellMar.Left.W,
|
|
Right: TablePr.TableCellMar.Right.W,
|
|
Top: TablePr.TableCellMar.Top.W,
|
|
Bottom: TablePr.TableCellMar.Bottom.W
|
|
};
|
|
if ((this.Selection.Type === table_Selection_Cell && true === this.Selection.Use) || !(table_Selection_Border === this.Selection.Type2) && !(table_Selection_Border_InnerTable === this.Selection.Type2)) {
|
|
if ((this.Selection.Type === table_Selection_Cell && true === this.Selection.Use)) {
|
|
Pr.CellSelect = true;
|
|
var CellMargins = null;
|
|
var CellMarginFlag = false;
|
|
var Border_left = null;
|
|
var Border_right = null;
|
|
var Border_top = null;
|
|
var Border_bottom = null;
|
|
var Border_insideH = null;
|
|
var Border_insideV = null;
|
|
var CellShd = null;
|
|
var Prev_row = -1;
|
|
var bFirstRow = true;
|
|
var _selection_arr;
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_borders = Cell.Get_Borders();
|
|
var Cell_margins = Cell.Get_Margins();
|
|
var Cell_shd = Cell.Get_Shd();
|
|
var _compared_unifill;
|
|
var _cur_cell_unifill = Cell.getUnifill();
|
|
if (0 === Index) {
|
|
_compared_unifill = _cur_cell_unifill;
|
|
} else {
|
|
_compared_unifill = CompareUniFill(_compared_unifill, _cur_cell_unifill);
|
|
}
|
|
if (0 === Index || this.Selection.Data[Index - 1].Row != Pos.Row) {
|
|
if (null === Border_left) {
|
|
Border_left = Cell_borders.Left;
|
|
} else {
|
|
Border_left = this.Internal_CompareBorders2(Border_left, Cell_borders.Left);
|
|
}
|
|
} else {
|
|
if (null === Border_insideV) {
|
|
Border_insideV = Cell_borders.Left;
|
|
} else {
|
|
Border_insideV = this.Internal_CompareBorders2(Border_insideV, Cell_borders.Left);
|
|
}
|
|
}
|
|
if (this.Selection.Data.length - 1 === Index || this.Selection.Data[Index + 1].Row != Pos.Row) {
|
|
if (null === Border_right) {
|
|
Border_right = Cell_borders.Right;
|
|
} else {
|
|
Border_right = this.Internal_CompareBorders2(Border_right, Cell_borders.Right);
|
|
}
|
|
} else {
|
|
if (null === Border_insideV) {
|
|
Border_insideV = Cell_borders.Right;
|
|
} else {
|
|
Border_insideV = this.Internal_CompareBorders2(Border_insideV, Cell_borders.Right);
|
|
}
|
|
}
|
|
if (Prev_row != Pos.Row) {
|
|
if (-1 != Prev_row) {
|
|
bFirstRow = false;
|
|
}
|
|
if (false === bFirstRow) {
|
|
if (null === Border_insideH) {
|
|
Border_insideH = Border_bottom;
|
|
Border_insideH = this.Internal_CompareBorders2(Border_insideH, Cell_borders.Top);
|
|
} else {
|
|
Border_insideH = this.Internal_CompareBorders2(Border_insideH, Border_bottom);
|
|
Border_insideH = this.Internal_CompareBorders2(Border_insideH, Cell_borders.Top);
|
|
}
|
|
} else {
|
|
if (null === Border_top) {
|
|
Border_top = Cell_borders.Top;
|
|
}
|
|
}
|
|
Border_bottom = Cell_borders.Bottom;
|
|
Prev_row = Pos.Row;
|
|
} else {
|
|
if (false === bFirstRow) {
|
|
if (null === Border_insideH) {
|
|
Border_insideH = Cell_borders.Top;
|
|
} else {
|
|
Border_insideH = this.Internal_CompareBorders2(Border_insideH, Cell_borders.Top);
|
|
}
|
|
} else {
|
|
if (null === Border_top) {
|
|
Border_top = Cell_borders.Top;
|
|
} else {
|
|
Border_top = this.Internal_CompareBorders2(Border_top, Cell_borders.Top);
|
|
}
|
|
}
|
|
Border_bottom = this.Internal_CompareBorders2(Border_bottom, Cell_borders.Bottom);
|
|
}
|
|
if (true != Cell.Is_TableMargins()) {
|
|
if (null === CellMargins) {
|
|
CellMargins = Common_CopyObj(Cell_margins);
|
|
} else {
|
|
if (CellMargins.Left.W != Cell_margins.Left.W) {
|
|
CellMargins.Left.W = null;
|
|
}
|
|
if (CellMargins.Right.W != Cell_margins.Right.W) {
|
|
CellMargins.Right.W = null;
|
|
}
|
|
if (CellMargins.Top.W != Cell_margins.Top.W) {
|
|
CellMargins.Top.W = null;
|
|
}
|
|
if (CellMargins.Bottom.W != Cell_margins.Bottom.W) {
|
|
CellMargins.Bottom.W = null;
|
|
}
|
|
}
|
|
} else {
|
|
CellMarginFlag = true;
|
|
}
|
|
}
|
|
Pr.CellBorders = {
|
|
Left: Border_left.Copy(),
|
|
Right: Border_right.Copy(),
|
|
Top: Border_top.Copy(),
|
|
Bottom: Border_bottom.Copy(),
|
|
InsideH: null === Border_insideH ? null : Border_insideH.Copy(),
|
|
InsideV: null === Border_insideV ? null : Border_insideV.Copy()
|
|
};
|
|
if (null == _compared_unifill) {
|
|
Pr.CellsBackground = null;
|
|
} else {
|
|
Pr.CellsBackground = {
|
|
fill: CreateAscFill(_compared_unifill)
|
|
};
|
|
}
|
|
if (null === CellMargins) {
|
|
Pr.CellMargins = {
|
|
Flag: 0
|
|
};
|
|
} else {
|
|
var Flag = 2;
|
|
if (true === CellMarginFlag) {
|
|
Flag = 1;
|
|
}
|
|
Pr.CellMargins = {
|
|
Left: CellMargins.Left.W,
|
|
Right: CellMargins.Right.W,
|
|
Top: CellMargins.Top.W,
|
|
Bottom: CellMargins.Bottom.W,
|
|
Flag: Flag
|
|
};
|
|
}
|
|
} else {
|
|
if (! (table_Selection_Border === this.Selection.Type2) && !(table_Selection_Border_InnerTable === this.Selection.Type2)) {
|
|
Pr.CellSelect = true;
|
|
var CellMargins = null;
|
|
var CellMarginFlag = false;
|
|
var Border_left = null;
|
|
var Border_right = null;
|
|
var Border_top = null;
|
|
var Border_bottom = null;
|
|
var Border_insideH = null;
|
|
var Border_insideV = null;
|
|
var CellShd = null;
|
|
var Prev_row = -1;
|
|
var bFirstRow = true;
|
|
var _selection_arr;
|
|
Cell = this.CurCell;
|
|
var Cell_borders = Cell.Get_Borders();
|
|
var Cell_margins = Cell.Get_Margins();
|
|
var Cell_shd = Cell.Get_Shd();
|
|
_compared_unifill = Cell.getUnifill();
|
|
Border_left = Cell_borders.Left;
|
|
Border_right = Cell_borders.Right;
|
|
Border_top = Cell_borders.Top;
|
|
Border_bottom = Cell_borders.Bottom;
|
|
if (true != Cell.Is_TableMargins()) {
|
|
if (null === CellMargins) {
|
|
CellMargins = Common_CopyObj(Cell_margins);
|
|
} else {
|
|
if (CellMargins.Left.W != Cell_margins.Left.W) {
|
|
CellMargins.Left.W = null;
|
|
}
|
|
if (CellMargins.Right.W != Cell_margins.Right.W) {
|
|
CellMargins.Right.W = null;
|
|
}
|
|
if (CellMargins.Top.W != Cell_margins.Top.W) {
|
|
CellMargins.Top.W = null;
|
|
}
|
|
if (CellMargins.Bottom.W != Cell_margins.Bottom.W) {
|
|
CellMargins.Bottom.W = null;
|
|
}
|
|
}
|
|
} else {
|
|
CellMarginFlag = true;
|
|
}
|
|
Pr.CellBorders = {
|
|
Left: Border_left.Copy(),
|
|
Right: Border_right.Copy(),
|
|
Top: Border_top.Copy(),
|
|
Bottom: Border_bottom.Copy(),
|
|
InsideH: null === Border_insideH ? null : Border_insideH.Copy(),
|
|
InsideV: null === Border_insideV ? null : Border_insideV.Copy()
|
|
};
|
|
if (null == _compared_unifill) {
|
|
Pr.CellsBackground = null;
|
|
} else {
|
|
Pr.CellsBackground = {
|
|
fill: CreateAscFill(_compared_unifill)
|
|
};
|
|
}
|
|
if (null === CellMargins) {
|
|
Pr.CellMargins = {
|
|
Flag: 0
|
|
};
|
|
} else {
|
|
var Flag = 2;
|
|
if (true === CellMarginFlag) {
|
|
Flag = 1;
|
|
}
|
|
Pr.CellMargins = {
|
|
Left: CellMargins.Left.W,
|
|
Right: CellMargins.Right.W,
|
|
Top: CellMargins.Top.W,
|
|
Bottom: CellMargins.Bottom.W,
|
|
Flag: Flag
|
|
};
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
Pr.CellSelect = false;
|
|
var Cell = this.CurCell;
|
|
var CellMargins = Cell.Get_Margins();
|
|
var CellBorders = Cell.Get_Borders();
|
|
var CellShd = Cell.Get_Shd();
|
|
var Spacing = this.Content[0].Get_CellSpacing();
|
|
if (null === Spacing) {
|
|
Pr.CellsBackground = CellShd.Copy();
|
|
Pr.CellBorders = {
|
|
Left: CellBorders.Left.Copy(),
|
|
Right: CellBorders.Right.Copy(),
|
|
Top: CellBorders.Top.Copy(),
|
|
Bottom: CellBorders.Bottom.Copy(),
|
|
InsideH: null,
|
|
InsideV: null
|
|
};
|
|
} else {
|
|
var Border_left = null;
|
|
var Border_right = null;
|
|
var Border_top = null;
|
|
var Border_bottom = null;
|
|
var Border_insideH = null;
|
|
var Border_insideV = null;
|
|
var CellShd = null;
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Cell_borders = Cell.Get_Borders();
|
|
var Cell_shd = Cell.Get_Shd();
|
|
if (0 === CurCell && Cells_Count) {
|
|
CellShd = Cell_shd;
|
|
} else {
|
|
if (null != CellShd && (CellShd.Value != Cell_shd.Value || CellShd.Color.r != Cell_shd.Color.r || CellShd.Color.g != Cell_shd.Color.g || CellShd.Color.b != Cell_shd.Color.b)) {
|
|
CellShd = null;
|
|
}
|
|
}
|
|
if (0 === CurCell) {
|
|
if (null === Border_left) {
|
|
Border_left = Cell_borders.Left;
|
|
} else {
|
|
Border_left = this.Internal_CompareBorders2(Border_left, Cell_borders.Left);
|
|
}
|
|
} else {
|
|
if (null === Border_insideV) {
|
|
Border_insideV = Cell_borders.Left;
|
|
} else {
|
|
Border_insideV = this.Internal_CompareBorders2(Border_insideV, Cell_borders.Left);
|
|
}
|
|
}
|
|
if (Cells_Count - 1 === CurCell) {
|
|
if (null === Border_right) {
|
|
Border_right = Cell_borders.Right;
|
|
} else {
|
|
Border_right = this.Internal_CompareBorders2(Border_right, Cell_borders.Right);
|
|
}
|
|
} else {
|
|
if (null === Border_insideV) {
|
|
Border_insideV = Cell_borders.Right;
|
|
} else {
|
|
Border_insideV = this.Internal_CompareBorders2(Border_insideV, Cell_borders.Right);
|
|
}
|
|
}
|
|
if (0 === CurCell) {
|
|
if (0 != CurRow) {
|
|
if (null === Border_insideH) {
|
|
Border_insideH = Border_bottom;
|
|
Border_insideH = this.Internal_CompareBorders2(Border_insideH, Cell_borders.Top);
|
|
} else {
|
|
Border_insideH = this.Internal_CompareBorders2(Border_insideH, Border_bottom);
|
|
Border_insideH = this.Internal_CompareBorders2(Border_insideH, Cell_borders.Top);
|
|
}
|
|
} else {
|
|
if (null === Border_top) {
|
|
Border_top = Cell_borders.Top;
|
|
}
|
|
}
|
|
Border_bottom = Cell_borders.Bottom;
|
|
} else {
|
|
if (0 != bFirstRow) {
|
|
if (null === Border_insideH) {
|
|
Border_insideH = Cell_borders.Top;
|
|
} else {
|
|
Border_insideH = this.Internal_CompareBorders2(Border_insideH, Cell_borders.Top);
|
|
}
|
|
} else {
|
|
if (null === Border_top) {
|
|
Border_top = Cell_borders.Top;
|
|
} else {
|
|
Border_top = this.Internal_CompareBorders2(Border_top, Cell_borders.Top);
|
|
}
|
|
}
|
|
Border_bottom = this.Internal_CompareBorders2(Border_bottom, Cell_borders.Bottom);
|
|
}
|
|
}
|
|
}
|
|
Pr.CellBorders = {
|
|
Left: Border_left.Copy(),
|
|
Right: Border_right.Copy(),
|
|
Top: Border_top.Copy(),
|
|
Bottom: Border_bottom.Copy(),
|
|
InsideH: null === Border_insideH ? null : Border_insideH.Copy(),
|
|
InsideV: null === Border_insideV ? null : Border_insideV.Copy()
|
|
};
|
|
}
|
|
if (true === Cell.Is_TableMargins()) {
|
|
Pr.CellMargins = {
|
|
Flag: 0
|
|
};
|
|
} else {
|
|
Pr.CellMargins = {
|
|
Left: CellMargins.Left.W,
|
|
Right: CellMargins.Right.W,
|
|
Top: CellMargins.Top.W,
|
|
Bottom: CellMargins.Bottom.W,
|
|
Flag: 2
|
|
};
|
|
}
|
|
}
|
|
Pr.TableAlignment = 0;
|
|
Pr.TableIndent = this.X_origin - X_Left_Field - this.Get_TableOffsetCorrection();
|
|
Pr.TableWrappingStyle = c_oAscWrapStyle.Flow;
|
|
Pr.Position = {
|
|
X: this.Parent.X,
|
|
Y: this.Parent.Y
|
|
};
|
|
Pr.TablePaddings = Common_CopyObj(this.Parent.Paddings);
|
|
Pr.TableBorders = Common_CopyObj(TablePr.TableBorders);
|
|
Pr.TableBackground = TablePr.Shd.Copy();
|
|
Pr.TableStyle = this.styleIndex;
|
|
Pr.TableLook = {
|
|
FirstRow: this.TableLook.Is_FirstRow(),
|
|
FirstCol: this.TableLook.Is_FirstCol(),
|
|
LastRow: this.TableLook.Is_LastRow(),
|
|
LastCol: this.TableLook.Is_LastCol(),
|
|
HorBand: this.TableLook.Is_BandHor(),
|
|
VerBand: this.TableLook.Is_BandVer()
|
|
};
|
|
return Pr;
|
|
},
|
|
getStylesForParagraph: function (level) {
|
|
return this.Parent.getStylesForParagraph(level);
|
|
},
|
|
Set_Props: function (Props, bAllTable) {
|
|
var TablePr = this.Get_CompiledPr(false).TablePr;
|
|
var bApplyToInnerTable = false;
|
|
if (true != this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
bApplyToInnerTable = this.CurCell.Content.Set_TableProps(Props);
|
|
}
|
|
if (true === bApplyToInnerTable) {
|
|
return true;
|
|
}
|
|
var bRecalc_All = false;
|
|
var bRedraw = false;
|
|
if ("undefined" != typeof(Props.TableStyle)) {
|
|
if (this.styleIndex != Props.TableStyle) {
|
|
this.Set_TableStyle(Props.TableStyle);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.TableLook)) {
|
|
var table_look = this.TableLook;
|
|
var first_col = Props.TableLook.FirstCol !== undefined ? Props.TableLook.FirstCol : table_look.m_bFirst_Col;
|
|
var first_row = Props.TableLook.FirstRow !== undefined ? Props.TableLook.FirstRow : table_look.m_bFirst_Row;
|
|
var last_col = Props.TableLook.LastCol !== undefined ? Props.TableLook.LastCol : table_look.m_bLast_Col;
|
|
var last_row = Props.TableLook.LastRow !== undefined ? Props.TableLook.LastRow : table_look.m_bLast_Row;
|
|
var band_ver = Props.TableLook.BandVer !== undefined ? Props.TableLook.BandVer : table_look.m_bBand_Ver;
|
|
var band_hor = Props.TableLook.BandHor !== undefined ? Props.TableLook.BandHor : table_look.m_bBand_Hor;
|
|
var NewLook = new CTableLook(first_col, first_row, last_col, last_row, band_hor, band_ver);
|
|
this.Set_TableLook(NewLook);
|
|
bRecalc_All = true;
|
|
}
|
|
if ("undefined" != typeof(Props.TableSpacing)) {
|
|
var NeedChange = false;
|
|
for (var Index = 0; Index < this.Content.length; Index++) {
|
|
if (Props.TableSpacing != this.Content[Index].Get_CellSpacing()) {
|
|
NeedChange = true;
|
|
break;
|
|
}
|
|
}
|
|
if (true === NeedChange) {
|
|
var OldSpacing = this.Content[0].Get_CellSpacing();
|
|
var Diff = Props.TableSpacing - (null === OldSpacing ? 0 : OldSpacing);
|
|
for (var Index = 0; Index < this.Content.length; Index++) {
|
|
this.Content[Index].Set_CellSpacing(Props.TableSpacing);
|
|
}
|
|
bRecalc_All = true;
|
|
var GridKoeff = new Array();
|
|
for (var Index = 0; Index < this.TableGrid.length; Index++) {
|
|
GridKoeff.push(1);
|
|
}
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var GridBefore = Row.Get_Before().GridBefore;
|
|
var GridAfter = Row.Get_After().GridAfter;
|
|
GridKoeff[Math.min(GridBefore, GridKoeff.length - 1)] = 1.5;
|
|
GridKoeff[Math.max(GridKoeff.length - 1 - GridAfter, 0)] = 1.5;
|
|
}
|
|
var TableGrid_old = this.TableGrid;
|
|
this.TableGrid = new Array();
|
|
for (var Index = 0; Index < TableGrid_old.length; Index++) {
|
|
this.TableGrid[Index] = TableGrid_old[Index] + GridKoeff[Index] * Diff;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableGrid,
|
|
Old: TableGrid_old,
|
|
New: this.TableGrid
|
|
});
|
|
}
|
|
}
|
|
var bSpacing = null === this.Content[0].Get_CellSpacing() ? false : true;
|
|
if ("undefined" != typeof(Props.TableDefaultMargins)) {
|
|
var UsingDefaultMar = false;
|
|
for (var Index = 0; Index < this.Content.length; Index++) {
|
|
var Row = this.Content[Index];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (null === Cell.Pr.TableCellMar) {
|
|
UsingDefaultMar = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
var NeedChange = false;
|
|
var TDM = Props.TableDefaultMargins;
|
|
var Left_new = ("undefined" != typeof(TDM.Left) ? (null != TDM.Left ? TDM.Left : TablePr.TableCellMar.Left.W) : TablePr.TableCellMar.Left.W);
|
|
var Right_new = ("undefined" != typeof(TDM.Right) ? (null != TDM.Right ? TDM.Right : TablePr.TableCellMar.Right.W) : TablePr.TableCellMar.Right.W);
|
|
var Top_new = ("undefined" != typeof(TDM.Top) ? (null != TDM.Top ? TDM.Top : TablePr.TableCellMar.Top.W) : TablePr.TableCellMar.Top.W);
|
|
var Bottom_new = ("undefined" != typeof(TDM.Bottom) ? (null != TDM.Bottom ? TDM.Bottom : TablePr.TableCellMar.Bottom.W) : TablePr.TableCellMar.Bottom.W);
|
|
if (Left_new != TablePr.TableCellMar.Left.W || Right_new != TablePr.TableCellMar.Right.W || Top_new != TablePr.TableCellMar.Top.W || Bottom_new != TablePr.TableCellMar.Bottom.W) {
|
|
NeedChange = true;
|
|
}
|
|
if (true === NeedChange) {
|
|
this.Set_TableCellMar(Left_new, Top_new, Right_new, Bottom_new);
|
|
if (true === UsingDefaultMar) {
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.CellMargins) && null != Props.CellMargins) {
|
|
var NeedChange = false;
|
|
switch (Props.CellMargins.Flag) {
|
|
case 0:
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
if (null != Cell.Pr.TableCellMar) {
|
|
Cell.Set_Margins(null);
|
|
NeedChange = true;
|
|
}
|
|
}
|
|
} else {
|
|
var Cell = this.CurCell;
|
|
if (null != Cell.Pr.TableCellMar) {
|
|
Cell.Set_Margins(null);
|
|
NeedChange = true;
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
if (true != Cell.Is_TableMargins()) {
|
|
if (null != Props.CellMargins.Left) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Left,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
}
|
|
if (null != Props.CellMargins.Right) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Right,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
}
|
|
if (null != Props.CellMargins.Top) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Top,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
}
|
|
if (null != Props.CellMargins.Bottom) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Bottom,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
}
|
|
NeedChange = true;
|
|
}
|
|
}
|
|
} else {
|
|
var Cell = this.CurCell;
|
|
if (true != Cell.Is_TableMargins()) {
|
|
if (null != Props.CellMargins.Left) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Left,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
}
|
|
if (null != Props.CellMargins.Right) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Right,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
}
|
|
if (null != Props.CellMargins.Top) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Top,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
}
|
|
if (null != Props.CellMargins.Bottom) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Bottom,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
}
|
|
} else {
|
|
if (null != Props.CellMargins.Left) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Left,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Left.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
}
|
|
if (null != Props.CellMargins.Right) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Right,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Right.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
}
|
|
if (null != Props.CellMargins.Top) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Top,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Top.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
}
|
|
if (null != Props.CellMargins.Bottom) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Bottom,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Bottom.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
}
|
|
}
|
|
NeedChange = true;
|
|
}
|
|
break;
|
|
case 2:
|
|
NeedChange = true;
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
if (true != Cell.Is_TableMargins()) {
|
|
if (null != Props.CellMargins.Left) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Left,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
}
|
|
if (null != Props.CellMargins.Right) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Right,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
}
|
|
if (null != Props.CellMargins.Top) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Top,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
}
|
|
if (null != Props.CellMargins.Bottom) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Bottom,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
}
|
|
} else {
|
|
if (null != Props.CellMargins.Left) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Left,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Left.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
}
|
|
if (null != Props.CellMargins.Right) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Right,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Right.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
}
|
|
if (null != Props.CellMargins.Top) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Top,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Top.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
}
|
|
if (null != Props.CellMargins.Bottom) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Bottom,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Bottom.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var Cell = this.CurCell;
|
|
if (true != Cell.Is_TableMargins()) {
|
|
if (null != Props.CellMargins.Left) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Left,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
}
|
|
if (null != Props.CellMargins.Right) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Right,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
}
|
|
if (null != Props.CellMargins.Top) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Top,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
}
|
|
if (null != Props.CellMargins.Bottom) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Bottom,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
}
|
|
} else {
|
|
if (null != Props.CellMargins.Left) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Left,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Left.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
3);
|
|
}
|
|
if (null != Props.CellMargins.Right) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Right,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Right.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
1);
|
|
}
|
|
if (null != Props.CellMargins.Top) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Top,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Top.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
0);
|
|
}
|
|
if (null != Props.CellMargins.Bottom) {
|
|
Cell.Set_Margins({
|
|
W: Props.CellMargins.Bottom,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
} else {
|
|
Cell.Set_Margins({
|
|
W: TablePr.TableCellMar.Bottom.W,
|
|
Type: tblwidth_Mm
|
|
},
|
|
2);
|
|
}
|
|
}
|
|
NeedChange = true;
|
|
}
|
|
break;
|
|
}
|
|
if (true === NeedChange) {
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.TableWidth)) {
|
|
if (null === Props.TableWidth && tblwidth_Auto != TablePr.TableW.Type) {
|
|
this.Set_TableW(tblwidth_Auto, 0);
|
|
bRecalc_All = true;
|
|
} else {
|
|
if (null != Props.TableWidth) {
|
|
if (tblwidth_Auto === TablePr.TableW.Type || Props.TableWidth != TablePr.TableW.W) {
|
|
this.Set_TableW(tblwidth_Mm, Props.TableWidth);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.TableWrappingStyle)) {
|
|
if (0 === Props.TableWrappingStyle && true != this.Inline) {
|
|
this.Set_Inline(true);
|
|
bRecalc_All = false;
|
|
bRedraw = false;
|
|
} else {
|
|
if (1 === Props.TableWrappingStyle && false != this.Inline) {
|
|
this.Set_Inline(false);
|
|
bRecalc_All = false;
|
|
bRedraw = false;
|
|
}
|
|
}
|
|
}
|
|
var _Jc = TablePr.Jc;
|
|
if ("undefined" != typeof(Props.TableAlignment) && true === this.Is_Inline()) {
|
|
var NewJc = (0 === Props.TableAlignment ? align_Left : (1 === Props.TableAlignment ? align_Center : align_Right));
|
|
if (TablePr.Jc != NewJc) {
|
|
_Jc = NewJc;
|
|
this.Set_TableAlign(NewJc);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.TableIndent) && true === this.Is_Inline() && align_Left === _Jc) {
|
|
if (Props.TableIndent != TablePr.TableInd) {
|
|
this.Set_TableInd(Props.TableIndent);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.Position) && true != this.Is_Inline()) {
|
|
var X_new = ("undefined" != typeof(Props.Position.X) ? (null != Props.Position.X ? Props.Position.X : this.X) : this.X);
|
|
var Y_new = ("undefined" != typeof(Props.Position.Y) ? (null != Props.Position.Y ? Props.Position.Y : this.Y) : this.Y);
|
|
if (Math.abs(this.X - X_new) > 0.001 || Math.abs(this.Y - Y_new) > 0.001) {
|
|
this.X = X_new;
|
|
this.Y = Y_new;
|
|
this.Parent.Set_Position(this.X, this.Y);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.TablePaddings) && true != this.Is_Inline()) {
|
|
var TP = Props.TablePaddings;
|
|
var CurPaddings = this.Parent.Paddings;
|
|
var NewPaggings_left = ("undefined" != typeof(TP.Left) ? (null != TP.Left ? TP.Left : CurPaddings.Left) : CurPaddings.Left);
|
|
var NewPaggings_right = ("undefined" != typeof(TP.Right) ? (null != TP.Right ? TP.Right : CurPaddings.Right) : CurPaddings.Right);
|
|
var NewPaggings_top = ("undefined" != typeof(TP.Top) ? (null != TP.Top ? TP.Top : CurPaddings.Top) : CurPaddings.Top);
|
|
var NewPaggings_bottom = ("undefined" != typeof(TP.Bottom) ? (null != TP.Bottom ? TP.Bottom : CurPaddings.Bottom) : CurPaddings.Bottom);
|
|
if (Math.abs(CurPaddings.Left - NewPaggings_left) > 0.001 || Math.abs(CurPaddings.Right - NewPaggings_right) > 0.001 || Math.abs(CurPaddings.Top - NewPaggings_top) > 0.001 || Math.abs(CurPaddings.Bottom - NewPaggings_bottom) > 0.001) {
|
|
this.Parent.Set_Paddings(NewPaggings_left, NewPaggings_right, NewPaggings_top, NewPaggings_bottom);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.TableBorders) && null != Props.TableBorders) {
|
|
if (false === this.Internal_CheckNullBorder(Props.TableBorders.Top) && false === this.Internal_CompareBorders3(Props.TableBorders.Top, TablePr.TableBorders.Top)) {
|
|
this.Set_TableBorder_Top(Props.TableBorders.Top);
|
|
bRecalc_All = true;
|
|
if (true != bSpacing) {
|
|
var Row = this.Content[0];
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
Cell.Set_Border(null, 0);
|
|
}
|
|
}
|
|
}
|
|
if (false === this.Internal_CheckNullBorder(Props.TableBorders.Bottom) && false === this.Internal_CompareBorders3(Props.TableBorders.Bottom, TablePr.TableBorders.Bottom)) {
|
|
this.Set_TableBorder_Bottom(Props.TableBorders.Bottom);
|
|
bRecalc_All = true;
|
|
if (true != bSpacing) {
|
|
var Row = this.Content[this.Content.length - 1];
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
Cell.Set_Border(null, 2);
|
|
}
|
|
}
|
|
}
|
|
if (false === this.Internal_CheckNullBorder(Props.TableBorders.Left) && false === this.Internal_CompareBorders3(Props.TableBorders.Left, TablePr.TableBorders.Left)) {
|
|
this.Set_TableBorder_Left(Props.TableBorders.Left);
|
|
bRecalc_All = true;
|
|
if (true != bSpacing) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Cell = this.Content[CurRow].Get_Cell(0);
|
|
Cell.Set_Border(null, 3);
|
|
}
|
|
}
|
|
}
|
|
if (false === this.Internal_CheckNullBorder(Props.TableBorders.Right) && false === this.Internal_CompareBorders3(Props.TableBorders.Right, TablePr.TableBorders.Right)) {
|
|
this.Set_TableBorder_Right(Props.TableBorders.Right);
|
|
bRecalc_All = true;
|
|
if (true != bSpacing) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Cell = this.Content[CurRow].Get_Cell(this.Content[CurRow].Get_CellsCount() - 1);
|
|
Cell.Set_Border(null, 1);
|
|
}
|
|
}
|
|
}
|
|
if (false === this.Internal_CheckNullBorder(Props.TableBorders.InsideH) && false === this.Internal_CompareBorders3(Props.TableBorders.InsideH, TablePr.TableBorders.InsideH)) {
|
|
this.Set_TableBorder_InsideH(Props.TableBorders.InsideH);
|
|
bRecalc_All = true;
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if ((0 === CurRow && true === bSpacing) || 0 != CurRow) {
|
|
Cell.Set_Border(null, 0);
|
|
}
|
|
if ((this.Content.length - 1 === CurRow && true === bSpacing) || this.Content.length - 1 != CurRow) {
|
|
Cell.Set_Border(null, 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (false === this.Internal_CheckNullBorder(Props.TableBorders.InsideV) && false === this.Internal_CompareBorders3(Props.TableBorders.InsideV, TablePr.TableBorders.InsideV)) {
|
|
this.Set_TableBorder_InsideV(Props.TableBorders.InsideV);
|
|
bRecalc_All = true;
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if ((0 === CurCell && true === bSpacing) || 0 != CurCell) {
|
|
Cell.Set_Border(null, 3);
|
|
}
|
|
if ((Cells_Count - 1 === CurCell && true === bSpacing) || Cells_Count - 1 != CurCell) {
|
|
Cell.Set_Border(null, 1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.CellBorders) && null != Props.CellBorders) {
|
|
var Cells_array = null;
|
|
if (bAllTable) {
|
|
Cells_array = new Array();
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
continue;
|
|
}
|
|
Cells_array.push({
|
|
Cell: CurCell,
|
|
Row: CurRow
|
|
});
|
|
}
|
|
}
|
|
} else {
|
|
if (true === bSpacing) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
Cells_array = this.Selection.Data;
|
|
} else {
|
|
if (false === Props.CellSelect) {
|
|
Cells_array = new Array();
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
continue;
|
|
}
|
|
Cells_array.push({
|
|
Cell: CurCell,
|
|
Row: CurRow
|
|
});
|
|
}
|
|
}
|
|
} else {
|
|
Cells_array = [{
|
|
Row: this.CurCell.Row.Index,
|
|
Cell: this.CurCell.Index
|
|
}];
|
|
}
|
|
}
|
|
} else {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
Cells_array = this.Selection.Data;
|
|
} else {
|
|
Cells_array = [{
|
|
Row: this.CurCell.Row.Index,
|
|
Cell: this.CurCell.Index
|
|
}];
|
|
}
|
|
}
|
|
}
|
|
var Pos_first = Cells_array[0];
|
|
var Pos_last = Cells_array[Cells_array.length - 1];
|
|
var Row_first = Pos_first.Row;
|
|
var Row_last = Pos_last.Row;
|
|
var bBorder_top = (false === this.Internal_CheckNullBorder(Props.CellBorders.Top) ? true : false);
|
|
var bBorder_bottom = (false === this.Internal_CheckNullBorder(Props.CellBorders.Bottom) ? true : false);
|
|
var bBorder_left = (false === this.Internal_CheckNullBorder(Props.CellBorders.Left) ? true : false);
|
|
var bBorder_right = (false === this.Internal_CheckNullBorder(Props.CellBorders.Right) ? true : false);
|
|
var bBorder_insideh = (false === this.Internal_CheckNullBorder(Props.CellBorders.InsideH) ? true : false);
|
|
var bBorder_insidev = (false === this.Internal_CheckNullBorder(Props.CellBorders.InsideV) ? true : false);
|
|
if (true != bSpacing) {
|
|
var Grid_row_first_start = 0,
|
|
Grid_row_first_end = 0,
|
|
Grid_row_last_start = 0,
|
|
Grid_row_last_end = 0;
|
|
var Pos = {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
var CurRow = Row_first;
|
|
var Index = 0;
|
|
Grid_row_first_start = this.Content[Pos_first.Row].Get_CellInfo(Pos_first.Cell).StartGridCol;
|
|
while (Index < Cells_array.length) {
|
|
Pos = Cells_array[Index];
|
|
if (Pos.Row != Row_first) {
|
|
break;
|
|
}
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
Grid_row_first_end = Row.Get_CellInfo(Pos.Cell).StartGridCol + Cell.Get_GridSpan() - 1;
|
|
Index++;
|
|
}
|
|
Index = 0;
|
|
while (Index < Cells_array.length) {
|
|
Pos = Cells_array[Index];
|
|
if (Pos.Row === Row_last) {
|
|
break;
|
|
}
|
|
Index++;
|
|
}
|
|
Grid_row_last_start = this.Content[Pos.Row].Get_CellInfo(Pos.Cell).StartGridCol;
|
|
Grid_row_last_end = this.Content[Pos_last.Row].Get_CellInfo(Pos_last.Cell).StartGridCol + this.Content[Pos_last.Row].Get_Cell(Pos_last.Cell).Get_GridSpan() - 1;
|
|
if (Row_first > 0 && true === bBorder_top) {
|
|
var Cell_start = 0,
|
|
Cell_end = 0;
|
|
var bStart = false;
|
|
var bEnd = false;
|
|
var Row = this.Content[Row_first - 1];
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
var StartGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var EndGridCol = StartGridCol + Row.Get_Cell(CurCell).Get_GridSpan() - 1;
|
|
if (false === bStart) {
|
|
if (StartGridCol < Grid_row_first_start) {
|
|
continue;
|
|
} else {
|
|
if (StartGridCol > Grid_row_first_start) {
|
|
break;
|
|
} else {
|
|
Cell_start = CurCell;
|
|
bStart = true;
|
|
if (EndGridCol < Grid_row_first_end) {
|
|
continue;
|
|
} else {
|
|
if (EndGridCol > Grid_row_first_end) {
|
|
break;
|
|
} else {
|
|
Cell_end = CurCell;
|
|
bEnd = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (false === bEnd) {
|
|
if (EndGridCol < Grid_row_first_end) {
|
|
continue;
|
|
} else {
|
|
if (EndGridCol > Grid_row_first_end) {
|
|
break;
|
|
} else {
|
|
Cell_end = CurCell;
|
|
bEnd = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (true === bStart && true === bEnd) {
|
|
for (var CurCell = Cell_start; CurCell <= Cell_end; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
Cell.Set_Border(Props.CellBorders.Top, 2);
|
|
}
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if (Row_last < this.Content.length - 1 && true === bBorder_bottom) {
|
|
var Cell_start = 0,
|
|
Cell_end = 0;
|
|
var bStart = false;
|
|
var bEnd = false;
|
|
var Row = this.Content[Row_last + 1];
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
var StartGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var EndGridCol = StartGridCol + Row.Get_Cell(CurCell).Get_GridSpan() - 1;
|
|
if (false === bStart) {
|
|
if (StartGridCol < Grid_row_last_start) {
|
|
continue;
|
|
} else {
|
|
if (StartGridCol > Grid_row_last_start) {
|
|
break;
|
|
} else {
|
|
Cell_start = CurCell;
|
|
bStart = true;
|
|
if (EndGridCol < Grid_row_last_end) {
|
|
continue;
|
|
} else {
|
|
if (EndGridCol > Grid_row_last_end) {
|
|
break;
|
|
} else {
|
|
Cell_end = CurCell;
|
|
bEnd = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (false === bEnd) {
|
|
if (EndGridCol < Grid_row_last_end) {
|
|
continue;
|
|
} else {
|
|
if (EndGridCol > Grid_row_last_end) {
|
|
break;
|
|
} else {
|
|
Cell_end = CurCell;
|
|
bEnd = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (true === bStart && true === bEnd) {
|
|
for (var CurCell = Cell_start; CurCell <= Cell_end; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
Cell.Set_Border(Props.CellBorders.Bottom, 0);
|
|
}
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
}
|
|
var PrevRow = Row_first;
|
|
var Cell_start = Pos_first.Cell,
|
|
Cell_end = Pos_first.Cell;
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
Row = this.Content[Pos.Row];
|
|
Cell = Row.Get_Cell(Pos.Cell);
|
|
if (PrevRow != Pos.Row) {
|
|
var Row_temp = this.Content[PrevRow];
|
|
if (true != bSpacing && Cell_start > 0 && true === bBorder_left) {
|
|
Row_temp.Get_Cell(Cell_start - 1).Set_Border(Props.CellBorders.Left, 1);
|
|
bRecalc_All = true;
|
|
}
|
|
if (true != bSpacing && Cell_end < Row_temp.Get_CellsCount() - 1 && true === bBorder_right) {
|
|
Row_temp.Get_Cell(Cell_end + 1).Set_Border(Props.CellBorders.Right, 3);
|
|
bRecalc_All = true;
|
|
}
|
|
for (var CurCell = Cell_start; CurCell <= Cell_end; CurCell++) {
|
|
var Cell_temp = Row_temp.Get_Cell(CurCell);
|
|
if (Row_first === PrevRow && true === bBorder_top) {
|
|
Cell_temp.Set_Border(Props.CellBorders.Top, 0);
|
|
bRecalc_All = true;
|
|
} else {
|
|
if (Row_first != PrevRow && true === bBorder_insideh) {
|
|
Cell_temp.Set_Border(Props.CellBorders.InsideH, 0);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if (Row_last === PrevRow && true === bBorder_bottom) {
|
|
Cell_temp.Set_Border(Props.CellBorders.Bottom, 2);
|
|
bRecalc_All = true;
|
|
} else {
|
|
if (Row_last != PrevRow && true === bBorder_insideh) {
|
|
Cell_temp.Set_Border(Props.CellBorders.InsideH, 2);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if (CurCell === Cell_start && true === bBorder_left) {
|
|
Cell_temp.Set_Border(Props.CellBorders.Left, 3);
|
|
bRecalc_All = true;
|
|
} else {
|
|
if (CurCell != Cell_start && true === bBorder_insidev) {
|
|
Cell_temp.Set_Border(Props.CellBorders.InsideV, 3);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if (CurCell === Cell_end && true === bBorder_right) {
|
|
Cell_temp.Set_Border(Props.CellBorders.Right, 1);
|
|
bRecalc_All = true;
|
|
} else {
|
|
if (CurCell != Cell_end && true === bBorder_insidev) {
|
|
Cell_temp.Set_Border(Props.CellBorders.InsideV, 1);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
}
|
|
Cell_start = Pos.Cell;
|
|
Cell_end = Pos.Cell;
|
|
PrevRow = Pos.Row;
|
|
} else {
|
|
Cell_end = Pos.Cell;
|
|
}
|
|
if (Cells_array.length - 1 === Index) {
|
|
var Row_temp = this.Content[PrevRow];
|
|
if (true != bSpacing && Cell_start > 0 && true === bBorder_left) {
|
|
Row_temp.Get_Cell(Cell_start - 1).Set_Border(Props.CellBorders.Left, 1);
|
|
bRecalc_All = true;
|
|
}
|
|
if (true != bSpacing && Cell_end < Row_temp.Get_CellsCount() - 1 && true === bBorder_right) {
|
|
Row_temp.Get_Cell(Cell_end + 1).Set_Border(Props.CellBorders.Right, 3);
|
|
bRecalc_All = true;
|
|
}
|
|
for (var CurCell = Cell_start; CurCell <= Cell_end; CurCell++) {
|
|
var Cell_temp = Row_temp.Get_Cell(CurCell);
|
|
if (Row_first === Pos.Row && true === bBorder_top) {
|
|
Cell_temp.Set_Border(Props.CellBorders.Top, 0);
|
|
bRecalc_All = true;
|
|
} else {
|
|
if (Row_first != Pos.Row && true === bBorder_insideh) {
|
|
Cell_temp.Set_Border(Props.CellBorders.InsideH, 0);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if (Row_last === Pos.Row && true === bBorder_bottom) {
|
|
Cell_temp.Set_Border(Props.CellBorders.Bottom, 2);
|
|
bRecalc_All = true;
|
|
} else {
|
|
if (Row_last != Pos.Row && true === bBorder_insideh) {
|
|
Cell_temp.Set_Border(Props.CellBorders.InsideH, 2);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if (CurCell === Cell_start && true === bBorder_left) {
|
|
Cell_temp.Set_Border(Props.CellBorders.Left, 3);
|
|
bRecalc_All = true;
|
|
} else {
|
|
if (CurCell != Cell_start && true === bBorder_insidev) {
|
|
Cell_temp.Set_Border(Props.CellBorders.InsideV, 3);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
if (CurCell === Cell_end && true === bBorder_right) {
|
|
Cell_temp.Set_Border(Props.CellBorders.Right, 1);
|
|
bRecalc_All = true;
|
|
} else {
|
|
if (CurCell != Cell_end && true === bBorder_insidev) {
|
|
Cell_temp.Set_Border(Props.CellBorders.InsideV, 1);
|
|
bRecalc_All = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.TableBackground)) {
|
|
if (Props.TableBackground.Value != TablePr.Shd.Value || Props.TableBackground.Color.r != TablePr.Shd.Color.r || Props.TableBackground.Color.g != TablePr.Shd.Color.g || Props.TableBackground.Color.b != TablePr.Shd.Color.b) {
|
|
this.Set_TableShd(Props.TableBackground.Value, Props.TableBackground.Color.r, Props.TableBackground.Color.g, Props.TableBackground.Color.b);
|
|
bRedraw = true;
|
|
}
|
|
if (false === Props.CellSelect && false === bSpacing) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
Cell.Set_Shd({
|
|
Value: shd_Nil,
|
|
Color: {
|
|
r: 0,
|
|
g: 0,
|
|
b: 0
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ("undefined" != typeof(Props.CellsBackground) && null != Props.CellsBackground) {
|
|
if (bAllTable === true) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var NewShd = new CDocumentShd();
|
|
NewShd.Set_FromObject({
|
|
Value: Props.CellsBackground.Value,
|
|
Color: {
|
|
r: Props.CellsBackground.Color.r,
|
|
g: Props.CellsBackground.Color.g,
|
|
b: Props.CellsBackground.Color.b
|
|
},
|
|
unifill: CorrectUniFill(Props.CellsBackground.fill, new CUniFill())
|
|
});
|
|
Cell.Set_Shd(NewShd);
|
|
bRedraw = true;
|
|
}
|
|
}
|
|
} else {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
var Cell_shd = Cell.Get_Shd();
|
|
if (Props.CellsBackground.Value != Cell_shd.Value || Props.CellsBackground.Color.r != Cell_shd.Color.r || Props.CellsBackground.Color.g != Cell_shd.Color.g || Props.CellsBackground.Color.b != Cell_shd.Color.b) {
|
|
var NewShd = new CDocumentShd();
|
|
NewShd.Set_FromObject({
|
|
Value: Props.CellsBackground.Value,
|
|
Color: {
|
|
r: Props.CellsBackground.Color.r,
|
|
g: Props.CellsBackground.Color.g,
|
|
b: Props.CellsBackground.Color.b
|
|
},
|
|
unifill: CorrectUniFill(Props.CellsBackground.fill, new CUniFill())
|
|
});
|
|
Cell.Set_Shd(NewShd);
|
|
bRedraw = true;
|
|
}
|
|
}
|
|
} else {
|
|
var Cell = this.CurCell;
|
|
var Cell_shd = Cell.Get_Shd();
|
|
if (Props.CellsBackground.Value != Cell_shd.Value || Props.CellsBackground.Color.r != Cell_shd.Color.r || Props.CellsBackground.Color.g != Cell_shd.Color.g || Props.CellsBackground.Color.b != Cell_shd.Color.b) {
|
|
var NewShd = new CDocumentShd();
|
|
NewShd.Set_FromObject({
|
|
Value: Props.CellsBackground.Value,
|
|
Color: {
|
|
r: Props.CellsBackground.Color.r,
|
|
g: Props.CellsBackground.Color.g,
|
|
b: Props.CellsBackground.Color.b
|
|
},
|
|
unifill: CorrectUniFill(Props.CellsBackground.fill, new CUniFill())
|
|
});
|
|
Cell.Set_Shd(NewShd);
|
|
bRedraw = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (true === bRecalc_All) {
|
|
this.Internal_RecalculateGrid();
|
|
this.Internal_Recalculate_1();
|
|
this.Parent.OnContentRecalculate(true, 0, this.Index, null, this);
|
|
if (true === this.Selection.Use) {
|
|
this.DrawingDocument.SelectClear();
|
|
this.Selection_Draw();
|
|
this.DrawingDocument.SelectShow();
|
|
}
|
|
} else {
|
|
if (true === bRedraw) {
|
|
this.Parent.OnContentRecalculate(false, 0, this.Index, null, this);
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
Get_Styles: function (level, bParagraph) {
|
|
return this.Parent.Get_Styles(level, this.styleIndex);
|
|
},
|
|
Get_Numbering: function () {
|
|
return this.Parent.Get_Numbering();
|
|
},
|
|
Get_PageBounds: function (Index) {
|
|
return this.Pages[Index].Bounds;
|
|
},
|
|
Get_PagesCount: function () {
|
|
return this.Pages.length;
|
|
},
|
|
Get_AllDrawingObjects: function (DrawingObjs) {
|
|
if (undefined === DrawingObjs) {
|
|
DrawingObjs = new Array();
|
|
}
|
|
var Rows_Count = this.Content.length;
|
|
for (var CurRow = 0; CurRow < Rows_Count; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
Cell.Content.Get_AllDrawingObjects(DrawingObjs);
|
|
}
|
|
}
|
|
return DrawingObjs;
|
|
},
|
|
Get_PageContentStartPos: function (PageNum, RowIndex, CellIndex) {
|
|
var Row = this.Content[RowIndex];
|
|
var Cell = Row.Get_Cell(CellIndex);
|
|
var CellInfo = Row.Get_CellInfo(CellIndex);
|
|
var VMerge_count = this.Internal_GetVertMergeCount(RowIndex, CellInfo.StartGridCol, Cell.Get_GridSpan());
|
|
RowIndex = RowIndex + VMerge_count - 1;
|
|
Row = this.Content[RowIndex];
|
|
var Pos = this.Parent.Get_PageContentStartPos(PageNum);
|
|
var bHeader = false;
|
|
var Y = Pos.Y;
|
|
if (-1 != this.HeaderInfo.PageIndex && this.HeaderInfo.Count > 0 && PageNum > this.HeaderInfo.PageIndex && true === this.HeaderInfo.Pages[PageNum].Draw) {
|
|
Y = this.HeaderInfo.Pages[PageNum].RowsInfo[this.HeaderInfo.Count - 1].TableRowsBottom;
|
|
bHeader = true;
|
|
}
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
if (null != CellSpacing) {
|
|
var Table_Border_Top = this.Get_Borders().Top;
|
|
if (border_Single === Table_Border_Top.Value) {
|
|
Y += Table_Border_Top.Size;
|
|
}
|
|
if (true === bHeader || 0 === PageNum || (1 === PageNum && true != this.RowsInfo[0].FirstPage)) {
|
|
Y += CellSpacing;
|
|
} else {
|
|
Y += CellSpacing / 2;
|
|
}
|
|
}
|
|
var MaxTopBorder = 0;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var TableBorders = this.Get_Borders();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var VMerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === VMerge) {
|
|
Cell = this.Internal_Get_StartMergedCell(RowIndex, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
}
|
|
var BorderInfo_Top = Cell.Get_BorderInfo().Top;
|
|
if (null === BorderInfo_Top) {
|
|
continue;
|
|
}
|
|
for (var Index = 0; Index < BorderInfo_Top.length; Index++) {
|
|
var CurBorder = BorderInfo_Top[Index];
|
|
var ResultBorder = this.Internal_CompareBorders(CurBorder, TableBorders.Top, false, true);
|
|
if (border_Single === ResultBorder.Value && MaxTopBorder < ResultBorder.Size) {
|
|
MaxTopBorder = ResultBorder.Size;
|
|
}
|
|
}
|
|
}
|
|
Y += MaxTopBorder;
|
|
return {
|
|
X: CellInfo.X_content_start,
|
|
XLimit: CellInfo.X_content_end,
|
|
Y: Y,
|
|
YLimit: Pos.YLimit,
|
|
MaxTopBorder: MaxTopBorder
|
|
};
|
|
},
|
|
Get_MaxTopBorder: function (RowIndex) {
|
|
var Row = this.Content[RowIndex];
|
|
var MaxTopBorder = 0;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var TableBorders = this.Get_Borders();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var VMerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === VMerge) {
|
|
Cell = this.Internal_Get_StartMergedCell(RowIndex, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
}
|
|
var BorderInfo_Top = Cell.Get_BorderInfo().Top;
|
|
if (null === BorderInfo_Top) {
|
|
continue;
|
|
}
|
|
for (var Index = 0; Index < BorderInfo_Top.length; Index++) {
|
|
var CurBorder = BorderInfo_Top[Index];
|
|
var ResultBorder = this.Internal_CompareBorders(CurBorder, TableBorders.Top, false, true);
|
|
if (border_Single === ResultBorder.Value && MaxTopBorder < ResultBorder.Size) {
|
|
MaxTopBorder = ResultBorder.Size;
|
|
}
|
|
}
|
|
}
|
|
return MaxTopBorder;
|
|
},
|
|
Set_DocumentNext: function (Object) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_DocNext,
|
|
Old: this.Next,
|
|
New: Object
|
|
});
|
|
this.Next = Object;
|
|
},
|
|
Set_DocumentPrev: function (Object) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_DocPrev,
|
|
Old: this.Prev,
|
|
New: Object
|
|
});
|
|
this.Prev = Object;
|
|
},
|
|
Get_DocumentNext: function () {
|
|
return this.Next;
|
|
},
|
|
Get_DocumentPrev: function () {
|
|
return this.Prev;
|
|
},
|
|
Set_DocumentIndex: function (Index) {
|
|
this.Index = Index;
|
|
},
|
|
Get_TableOffsetCorrection: function () {
|
|
return 0;
|
|
},
|
|
Get_FirstParagraph: function () {
|
|
return this.Content[0].Content[0].Content.Get_FirstParagraph();
|
|
},
|
|
Get_AllParagraphs_ByNumbering: function (NumPr, ParaArray) {
|
|
var Count = this.Content.length;
|
|
for (var CurRow = 0; CurRow < Count; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
Cell.Content.Get_AllParagraphs_ByNumbering(NumPr, ParaArray);
|
|
}
|
|
}
|
|
},
|
|
Get_StartPage_Absolute: function () {
|
|
return this.Parent.Get_StartPage_Absolute() + this.Get_StartPage_Relative();
|
|
},
|
|
Get_StartPage_Relative: function () {
|
|
return this.PageNum;
|
|
},
|
|
GetType: function () {
|
|
return type_Table;
|
|
},
|
|
GetId: function () {
|
|
return this.Get_Id();
|
|
},
|
|
SetId: function (newId) {
|
|
this.Set_Id(newId);
|
|
},
|
|
Get_Type: function () {
|
|
return flowobject_Image;
|
|
},
|
|
Set_Id: function (newId) {
|
|
g_oTableId.Reset_Id(this, newId, this.Id);
|
|
this.Id = newId;
|
|
},
|
|
Copy: function (Parent) {
|
|
var TableGrid = new Array();
|
|
for (var Index = 0; Index < this.TableGrid.length; Index++) {
|
|
TableGrid[Index] = this.TableGrid[Index];
|
|
}
|
|
var Table = new CTable(this.DrawingDocument, Parent, this.Inline, 0, 0, 0, 0, 0, 0, 0, TableGrid);
|
|
Table.Set_TableStyle(this.styleIndex);
|
|
Table.Set_Pr(this.Pr.Copy());
|
|
Table.Set_TableLook(this.TableLook.Copy());
|
|
Table.Rows = this.Rows;
|
|
Table.Cols = this.Cols;
|
|
var Rows = this.Content.length;
|
|
for (var Index = 0; Index < Rows; Index++) {
|
|
Table.Content[Index] = this.Content[Index].Copy(Table);
|
|
History.Add(Table, {
|
|
Type: historyitem_Table_AddRow,
|
|
Pos: Index,
|
|
Item: {
|
|
Row: Table.Content[Index],
|
|
TableRowsBottom: {},
|
|
RowsInfo: {}
|
|
}
|
|
});
|
|
}
|
|
Table.Internal_ReIndexing(0);
|
|
if (Table.Content.length > 0 && Table.Content[0].Get_CellsCount() > 0) {
|
|
Table.CurCell = Table.Content[0].Get_Cell(0);
|
|
}
|
|
Table.Recalc_CompiledPr();
|
|
return Table;
|
|
},
|
|
Shift: function (PageIndex, Dx, Dy) {
|
|
var CurPage = PageIndex;
|
|
this.Pages[PageIndex].Shift(Dx, Dy);
|
|
if (0 === PageIndex) {
|
|
this.X_origin += Dx;
|
|
this.X += Dx;
|
|
this.Y += Dy;
|
|
this.XLimit += Dx;
|
|
this.YLimit += Dy;
|
|
}
|
|
var StartRow = this.Pages[PageIndex].FirstRow;
|
|
var LastRow = this.Pages[PageIndex].LastRow;
|
|
for (var CurRow = StartRow; CurRow <= LastRow; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var CellPageIndex = CurPage - Cell.Content.Get_StartPage_Relative();
|
|
if (vmerge_Restart === Cell.Get_VMerge()) {
|
|
Cell.Content.Shift(CellPageIndex, Dx, Dy);
|
|
}
|
|
}
|
|
this.RowsInfo[CurRow].Y[CurPage] += Dy;
|
|
this.TableRowsBottom[CurRow][CurPage] += Dy;
|
|
}
|
|
},
|
|
Internal_UpdateFlowPosition: function (X, Y) {
|
|
this.X_origin = X;
|
|
var Dx = this.Get_TableOffsetCorrection();
|
|
this.X = X + Dx;
|
|
this.Y = Y;
|
|
this.Set_PositionH(c_oAscHAnchor.Page, false, this.X);
|
|
this.Set_PositionV(c_oAscVAnchor.Page, false, this.Y);
|
|
},
|
|
Move: function (X, Y, PageNum, NearestPos) {
|
|
var oLogicDocument = editor.WordControl.m_oLogicDocument;
|
|
this.Document_SetThisElementCurrent();
|
|
this.Cursor_MoveToStartPos();
|
|
if (true != this.Is_Inline()) {
|
|
if (false === oLogicDocument.Document_Is_SelectionLocked(changestype_Table_Properties)) {
|
|
oLogicDocument.Create_NewHistoryPoint();
|
|
this.PositionH_Old = {
|
|
RelativeFrom: this.PositionH.RelativeFrom,
|
|
Align: this.PositionH.Align,
|
|
Value: this.PositionH.Value
|
|
};
|
|
this.PositionV_Old = {
|
|
RelativeFrom: this.PositionV.RelativeFrom,
|
|
Align: this.PositionV.Align,
|
|
Value: this.PositionV.Value
|
|
};
|
|
this.PositionH.RelativeFrom = c_oAscHAnchor.PageInternal;
|
|
this.PositionH.Align = false;
|
|
this.PositionH.Value = X;
|
|
this.PositionV.RelativeFrom = c_oAscVAnchor.Page;
|
|
this.PositionV.Align = false;
|
|
this.PositionV.Value = Y;
|
|
this.PageNum = PageNum;
|
|
var NewDocContent = NearestPos.Paragraph.Parent;
|
|
var OldDocContent = this.Parent;
|
|
if (true != NewDocContent.Check_TableCoincidence(this)) {
|
|
var OldIndex = this.Index;
|
|
var NewIndex = NearestPos.Paragraph.Index;
|
|
if (PageNum > NearestPos.Paragraph.Get_StartPage_Absolute()) {
|
|
if (NearestPos.Paragraph.Pages.length > 2) {
|
|
var NewParagraph = new Paragraph(NewDocContent.DrawingDocument, NewDocContent, 0, 0, 0, X_Left_Field, Y_Bottom_Field);
|
|
NearestPos.Paragraph.Split(NewParagraph, NearestPos.ContentPos);
|
|
NewDocContent.Internal_Content_Add(NewIndex + 1, NewParagraph);
|
|
if (NewDocContent === OldDocContent && NewIndex + 1 <= OldIndex) {
|
|
OldIndex++;
|
|
}
|
|
NewIndex++;
|
|
} else {
|
|
NewIndex++;
|
|
if (NewIndex >= NewDocContent.Content.length - 1) {
|
|
NewDocContent.Internal_Content_Add(NewDocContent.Content.length, new Paragraph(NewDocContent.DrawingDocument, NewDocContent, 0, 50, 50, X_Right_Field, Y_Bottom_Field));
|
|
}
|
|
}
|
|
}
|
|
if (NewDocContent != OldDocContent) {
|
|
NewDocContent.Internal_Content_Add(NewIndex, this);
|
|
OldDocContent.Internal_Content_Remove(OldIndex, 1);
|
|
this.Parent = NewDocContent;
|
|
} else {
|
|
if (NearestPos.Paragraph.Index > this.Index) {
|
|
NewDocContent.Internal_Content_Add(NewIndex, this);
|
|
OldDocContent.Internal_Content_Remove(OldIndex, 1);
|
|
} else {
|
|
OldDocContent.Internal_Content_Remove(OldIndex, 1);
|
|
NewDocContent.Internal_Content_Add(NewIndex, this);
|
|
}
|
|
}
|
|
}
|
|
editor.WordControl.m_oLogicDocument.Recalculate();
|
|
}
|
|
} else {
|
|
if (false === oLogicDocument.Document_Is_SelectionLocked(changestype_Table_Properties, {
|
|
Type: changestype_2_InlineObjectMove,
|
|
PageNum: PageNum,
|
|
X: X,
|
|
Y: Y
|
|
})) {
|
|
oLogicDocument.Create_NewHistoryPoint();
|
|
var NewDocContent = NearestPos.Paragraph.Parent;
|
|
var OldDocContent = this.Parent;
|
|
if (true != NewDocContent.Check_TableCoincidence(this)) {
|
|
var TarParagraph = NearestPos.Paragraph;
|
|
var ParaContentPos = NearestPos.ContentPos;
|
|
var OldIndex = this.Index;
|
|
var NewIndex = NearestPos.Paragraph.Index;
|
|
if (true === TarParagraph.Cursor_IsEnd(ParaContentPos)) {
|
|
NewIndex++;
|
|
} else {
|
|
if (true != TarParagraph.Cursor_IsStart(ParaContentPos)) {
|
|
var NewParagraph = new Paragraph(NewDocContent.DrawingDocument, NewDocContent, 0, 0, 0, X_Left_Field, Y_Bottom_Field);
|
|
NearestPos.Paragraph.Split(NewParagraph, NearestPos.ContentPos);
|
|
NewDocContent.Internal_Content_Add(NewIndex + 1, NewParagraph);
|
|
if (NewDocContent === OldDocContent && NewIndex + 1 <= OldIndex) {
|
|
OldIndex++;
|
|
}
|
|
NewIndex++;
|
|
}
|
|
}
|
|
if (NewDocContent != OldDocContent) {
|
|
NewDocContent.Internal_Content_Add(NewIndex, this);
|
|
OldDocContent.Internal_Content_Remove(OldIndex, 1);
|
|
this.Parent = NewDocContent;
|
|
} else {
|
|
if (NearestPos.Paragraph.Index > this.Index) {
|
|
NewDocContent.Internal_Content_Add(NewIndex, this);
|
|
OldDocContent.Internal_Content_Remove(OldIndex, 1);
|
|
} else {
|
|
OldDocContent.Internal_Content_Remove(OldIndex, 1);
|
|
NewDocContent.Internal_Content_Add(NewIndex, this);
|
|
}
|
|
}
|
|
editor.WordControl.m_oLogicDocument.Recalculate();
|
|
}
|
|
}
|
|
}
|
|
editor.WordControl.m_oLogicDocument.Selection_Remove();
|
|
this.Document_SetThisElementCurrent();
|
|
this.Cursor_MoveToStartPos();
|
|
editor.WordControl.m_oLogicDocument.Document_UpdateSelectionState();
|
|
},
|
|
Reset: function (X, Y, XLimit, YLimit, PageNum) {
|
|
if (this.Parent.RecalcInfo.FlowObject === this && c_oAscVAnchor.Text === this.PositionV.RelativeFrom) {
|
|
this.Y -= this.PositionV.Value;
|
|
this.YLimit -= this.PositionV.Value;
|
|
return;
|
|
}
|
|
this.X_origin = X;
|
|
var Dx = this.Get_TableOffsetCorrection();
|
|
this.X = X + Dx;
|
|
this.Y = Y + 0.001;
|
|
this.XLimit = XLimit;
|
|
this.YLimit = YLimit;
|
|
this.PageNum = PageNum;
|
|
this.Pages.length = 1;
|
|
this.Pages[0] = new CTablePage(X, Y, XLimit, YLimit, 0, 0);
|
|
},
|
|
Recalculate: function () {
|
|
this.Internal_RecalculateGrid();
|
|
this.Internal_Recalculate_1();
|
|
},
|
|
Recalculate_Page: function (_PageIndex) {
|
|
var PageIndex = _PageIndex - this.PageNum;
|
|
if (0 === PageIndex) {
|
|
this.Internal_RecalculateGrid();
|
|
this.Internal_Recalculate_Header();
|
|
this.Internal_Recalculate_Borders();
|
|
this.Internal_Recalculate_Position_1();
|
|
this.Internal_Check_TableRows(false);
|
|
}
|
|
var Result = this.Internal_Recalculate_1_(PageIndex);
|
|
this.Internal_Recalculate_Position_2(PageIndex);
|
|
return Result;
|
|
},
|
|
RecalculateCurPos: function () {
|
|
if (null != this.CurCell) {
|
|
this.CurCell.Content.RecalculateCurPos();
|
|
}
|
|
},
|
|
Recalculate_MinMaxContentWidth: function () {
|
|
var MinMargin = new Array(),
|
|
MinContent = new Array(),
|
|
MaxContent = new Array(),
|
|
MaxFlags = new Array();
|
|
var GridCount = this.TableGrid.length;
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
MinMargin[CurCol] = 0;
|
|
MinContent[CurCol] = 0;
|
|
MaxContent[CurCol] = 0;
|
|
MaxFlags[CurCol] = false;
|
|
}
|
|
var RowsCount = this.Content.length;
|
|
for (var CurRow = 0; CurRow < RowsCount; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var BeforeInfo = Row.Get_Before();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var CellMinMax = Cell.Content.Recalculate_MinMaxContentWidth();
|
|
var CellMin = CellMinMax.Min;
|
|
var CellMax = CellMinMax.Max;
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var CellMargins = Cell.Get_Margins();
|
|
var CellMarginsW = CellMargins.Left.W + CellMargins.Right.W;
|
|
var CellW = Cell.Get_W();
|
|
if (MinMargin[CurGridCol] < CellMarginsW) {
|
|
MinMargin[CurGridCol] = CellMarginsW;
|
|
}
|
|
if (1 === GridSpan) {
|
|
if (MinContent[CurGridCol] < CellMin) {
|
|
MinContent[CurGridCol] = CellMin;
|
|
}
|
|
if (false === MaxFlags[CurGridCol] && MaxContent[CurGridCol] < CellMax) {
|
|
MaxContent[CurGridCol] = CellMax;
|
|
}
|
|
if (CellW.Type === tblwidth_Mm) {
|
|
if (false === MaxFlags[CurGridCol]) {
|
|
MaxFlags[CurGridCol] = true;
|
|
MaxContent[CurGridCol] = CellW.W;
|
|
} else {
|
|
if (MaxContent[CurGridCol] < CellW.W) {
|
|
MaxContent[CurGridCol] = CellW.W;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var SumSpanMinContent = 0;
|
|
var SumSpanMaxContent = 0;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++) {
|
|
SumSpanMinContent += MinContent[CurSpan];
|
|
SumSpanMaxContent += MaxContent[CurSpan];
|
|
}
|
|
if (SumSpanMinContent < CellMin) {
|
|
var TempAdd = (CellMin - SumSpanMinContent) / GridSpan;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++) {
|
|
MinContent[CurSpan] += TempAdd;
|
|
}
|
|
}
|
|
if (CellW.Type === tblwidth_Mm && CellW.W > CellMax) {
|
|
CellMax = CellW.W;
|
|
}
|
|
if (SumSpanMaxContent < CellMax) {
|
|
var TempAdd = (CellMax - SumSpanMaxContent) / GridSpan;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++) {
|
|
MaxContent[CurSpan] += TempAdd;
|
|
}
|
|
}
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
}
|
|
var Min = 0;
|
|
var Max = 0;
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
Min += MinMargin[CurCol] + MinContent[CurCol];
|
|
if (false === MaxFlags[CurCol]) {
|
|
Max += MinMargin[CurCol] + MaxContent[CurCol];
|
|
} else {
|
|
Max += MaxContent[CurCol];
|
|
}
|
|
}
|
|
return {
|
|
Min: Min,
|
|
Max: Max
|
|
};
|
|
},
|
|
Draw: function (nPageIndex, pGraphics) {
|
|
var PNum = nPageIndex - this.PageNum;
|
|
if (PNum < 0 || PNum >= this.Pages.length) {
|
|
return 0;
|
|
}
|
|
var Row_start = this.Pages[PNum].FirstRow;
|
|
var Row_last = this.Pages[PNum].LastRow;
|
|
if ((Row_start != Row_last || (0 === Row_start && 0 === Row_last)) && false === this.RowsInfo[Row_last].FirstPage) {
|
|
Row_last--;
|
|
}
|
|
if (Row_last < Row_start) {
|
|
return -1;
|
|
}
|
|
var bIsSmartGrForcing = false;
|
|
if (pGraphics.StartCheckTableDraw) {
|
|
bIsSmartGrForcing = pGraphics.StartCheckTableDraw();
|
|
}
|
|
this.Internal_Draw_1(pGraphics, PNum, Row_start, Row_last);
|
|
this.Internal_Draw_2(pGraphics, PNum, Row_start, Row_last);
|
|
this.Internal_Draw_3(pGraphics, PNum, Row_start, Row_last);
|
|
this.Internal_Draw_4(pGraphics, PNum, Row_start, Row_last);
|
|
if (pGraphics.EndCheckTableDraw) {
|
|
pGraphics.EndCheckTableDraw(bIsSmartGrForcing);
|
|
}
|
|
if (PNum < this.Pages.length - 1) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
},
|
|
Internal_Draw_1: function (pGraphics, PNum, Row_start, Row_last) {
|
|
var TableShd = this.Get_Shd();
|
|
var X_left_old = null;
|
|
var X_right_old = null;
|
|
var Y_top = this.Pages[PNum].Bounds.Top;
|
|
var Y_bottom = this.Pages[PNum].Bounds.Top;
|
|
var LockType = this.Lock.Get_Type();
|
|
if (locktype_None != LockType) {}
|
|
var TableBorders = this.Get_Borders();
|
|
var bHeader = false;
|
|
if (this.HeaderInfo.Count > 0 && PNum > this.HeaderInfo.PageIndex && true === this.HeaderInfo.Pages[PNum].Draw) {
|
|
bHeader = true;
|
|
var HeaderPage = this.HeaderInfo.Pages[PNum];
|
|
for (var CurRow = 0; CurRow < this.HeaderInfo.Count; CurRow++) {
|
|
var Row = HeaderPage.Rows[CurRow];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var X_left_new = Row.Get_CellInfo(0).X_grid_start;
|
|
var X_right_new = Row.Get_CellInfo(CellsCount - 1).X_grid_end;
|
|
Y_bottom = HeaderPage.RowsInfo[CurRow].Y + HeaderPage.RowsInfo[CurRow].H;
|
|
var PrevCellSpacing = (CurRow < this.HeaderInfo.Count - 1 ? HeaderPage.Rows[CurRow + 1].Get_CellSpacing() : this.Content[Row_start].Get_CellSpacing());
|
|
Y_bottom += (PrevCellSpacing + CellSpacing) / 4;
|
|
this.Internal_Draw_1_(pGraphics, TableShd, (null != CellSpacing ? true : false), TableBorders, X_left_new, X_left_old, X_right_new, X_right_old, Y_top, Y_bottom, (0 === CurRow ? true : false), false);
|
|
X_left_old = X_left_new;
|
|
X_right_old = X_right_new;
|
|
Y_top = Y_bottom;
|
|
}
|
|
}
|
|
for (var CurRow = Row_start; CurRow <= Row_last; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var X_left_new = Row.Get_CellInfo(0).X_grid_start;
|
|
var X_right_new = Row.Get_CellInfo(CellsCount - 1).X_grid_end;
|
|
Y_bottom = this.RowsInfo[CurRow].Y[PNum] + this.RowsInfo[CurRow].H[PNum];
|
|
if (this.Content.length - 1 === CurRow) {
|
|
Y_bottom += Row.Get_CellSpacing();
|
|
} else {
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var PrevCellSpacing = this.Content[CurRow + 1].Get_CellSpacing();
|
|
Y_bottom += (PrevCellSpacing + CellSpacing) / 4;
|
|
}
|
|
if (null != CellSpacing && PNum != this.Pages.length - 1 && CurRow === Row_last) {
|
|
Y_bottom += this.Pages[PNum].MaxBotBorder;
|
|
}
|
|
this.Internal_Draw_1_(pGraphics, TableShd, (null != CellSpacing ? true : false), TableBorders, X_left_new, X_left_old, X_right_new, X_right_old, Y_top, Y_bottom, (true != bHeader && Row_start === CurRow ? true : false), (Row_last === CurRow ? true : false));
|
|
X_left_old = X_left_new;
|
|
X_right_old = X_right_new;
|
|
Y_top = Y_bottom;
|
|
}
|
|
},
|
|
Internal_Draw_1_: function (pGraphics, TableShd, bBorder, TableBorders, X_left_new, X_left_old, X_right_new, X_right_old, Y_top, Y_bottom, bStartRow, bLastRow) {
|
|
if (shd_Nil != TableShd.Value) {
|
|
pGraphics.b_color1(TableShd.Color.r, TableShd.Color.g, TableShd.Color.b, 255);
|
|
pGraphics.TableRect(Math.min(X_left_new, X_right_new), Math.min(Y_top, Y_bottom), Math.abs(X_right_new - X_left_new), Math.abs(Y_bottom - Y_top));
|
|
}
|
|
if (true === bBorder) {
|
|
if (border_Single === TableBorders.Left.Value) {
|
|
pGraphics.p_color(TableBorders.Left.Color.r, TableBorders.Left.Color.g, TableBorders.Left.Color.b, 255);
|
|
if (null === X_left_old || Math.abs(X_left_new - X_left_old) < 0.001) {
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Center, X_left_new, Y_top, Y_bottom, TableBorders.Left.Size);
|
|
} else {
|
|
if (X_left_new > X_left_old) {
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y_top, X_left_old, X_left_new, TableBorders.Left.Size, -TableBorders.Left.Size / 2, 0);
|
|
} else {
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Bottom, Y_top, X_left_old, X_left_new, TableBorders.Left.Size, +TableBorders.Left.Size / 2, -TableBorders.Left.Size / 2);
|
|
}
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Center, X_left_new, Y_top, Y_bottom, TableBorders.Left.Size);
|
|
}
|
|
} else {
|
|
if (null === X_left_old || Math.abs(X_left_new - X_left_old) < 0.001) {
|
|
pGraphics.DrawEmptyTableLine(X_left_new, Y_top, X_left_new, Y_bottom);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_left_old, Y_top, X_left_new, Y_top);
|
|
pGraphics.DrawEmptyTableLine(X_left_new, Y_top, X_left_new, Y_bottom);
|
|
}
|
|
}
|
|
if (border_Single === TableBorders.Right.Value) {
|
|
pGraphics.p_color(TableBorders.Right.Color.r, TableBorders.Right.Color.g, TableBorders.Right.Color.b, 255);
|
|
if (null === X_right_old || Math.abs(X_right_new - X_right_old) < 0.001) {
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Center, X_right_new, Y_top, Y_bottom, TableBorders.Right.Size);
|
|
} else {
|
|
if (X_right_new > X_right_old) {
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Bottom, Y_top, X_right_old, X_right_new, TableBorders.Right.Size, -TableBorders.Right.Size / 2, +TableBorders.Right.Size / 2);
|
|
} else {
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y_top, X_right_old, X_right_new, TableBorders.Right.Size, +TableBorders.Right.Size / 2, 0);
|
|
}
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Center, X_right_new, Y_top, Y_bottom, TableBorders.Right.Size);
|
|
}
|
|
} else {
|
|
if (null === X_right_old || Math.abs(X_right_new - X_right_old) < 0.001) {
|
|
pGraphics.DrawEmptyTableLine(X_right_new, Y_top, X_right_new, Y_bottom);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_right_old, Y_top, X_right_new, Y_top);
|
|
pGraphics.DrawEmptyTableLine(X_right_new, Y_top, X_right_new, Y_bottom);
|
|
}
|
|
}
|
|
if (true === bStartRow) {
|
|
if (border_Single === TableBorders.Top.Value) {
|
|
pGraphics.p_color(TableBorders.Top.Color.r, TableBorders.Top.Color.g, TableBorders.Top.Color.b, 255);
|
|
var LeftMW = 0;
|
|
if (border_Single === TableBorders.Left.Value) {
|
|
LeftMW = -TableBorders.Left.Size / 2;
|
|
}
|
|
var RightMW = 0;
|
|
if (border_Single === TableBorders.Right.Value) {
|
|
RightMW = +TableBorders.Right.Size / 2;
|
|
}
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y_top, X_left_new, X_right_new, TableBorders.Top.Size, LeftMW, RightMW);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_left_new, Y_top, X_right_new, Y_top);
|
|
}
|
|
}
|
|
if (true === bLastRow) {
|
|
if (border_Single === TableBorders.Bottom.Value) {
|
|
pGraphics.p_color(TableBorders.Bottom.Color.r, TableBorders.Bottom.Color.g, TableBorders.Bottom.Color.b, 255);
|
|
var LeftMW = 0;
|
|
if (border_Single === TableBorders.Left.Value) {
|
|
LeftMW = -TableBorders.Left.Size / 2;
|
|
}
|
|
var RightMW = 0;
|
|
if (border_Single === TableBorders.Right.Value) {
|
|
RightMW = +TableBorders.Right.Size / 2;
|
|
}
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y_bottom, X_left_new, X_right_new, TableBorders.Bottom.Size, LeftMW, RightMW);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_left_new, Y_bottom, X_right_new, Y_bottom);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Internal_Draw_2: function (pGraphics, PNum, Row_start, Row_last) {
|
|
if (this.HeaderInfo.Count > 0 && PNum > this.HeaderInfo.PageIndex && true === this.HeaderInfo.Pages[PNum].Draw) {
|
|
var HeaderPage = this.HeaderInfo.Pages[PNum];
|
|
for (var CurRow = 0; CurRow < this.HeaderInfo.Count; CurRow++) {
|
|
var Row = HeaderPage.Rows[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var Y = HeaderPage.RowsInfo[CurRow].Y;
|
|
for (var CurCell = CellsCount - 1; CurCell >= 0; CurCell--) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var VMerge = Cell.Get_VMerge();
|
|
var CurGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
if (vmerge_Continue === VMerge) {
|
|
continue;
|
|
}
|
|
var CellInfo = Row.Get_CellInfo(CurCell);
|
|
var X_cell_start = CellInfo.X_cell_start;
|
|
var X_cell_end = CellInfo.X_cell_end;
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var RealHeight = HeaderPage.RowsInfo[CurRow + VMergeCount - 1].Y + HeaderPage.RowsInfo[CurRow + VMergeCount - 1].H - Y;
|
|
var CellShd = Cell.Get_Shd();
|
|
if (shd_Nil != CellShd.Value) {
|
|
pGraphics.b_color1(CellShd.Color.r, CellShd.Color.g, CellShd.Color.b, 255);
|
|
pGraphics.TableRect(Math.min(X_cell_start, X_cell_end), Math.min(Y, Y + RealHeight), Math.abs(X_cell_end - X_cell_start), Math.abs(RealHeight));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (var CurRow = Row_start; CurRow <= Row_last; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var Y = this.RowsInfo[CurRow].Y[PNum];
|
|
for (var CurCell = CellsCount - 1; CurCell >= 0; CurCell--) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var VMerge = Cell.Get_VMerge();
|
|
var CurGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
if (vmerge_Continue === VMerge) {
|
|
if (Row_start === CurRow) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
if (null === Cell) {
|
|
continue;
|
|
}
|
|
} else {
|
|
continue;
|
|
}
|
|
}
|
|
var CellInfo = Row.Get_CellInfo(CurCell);
|
|
var X_cell_start = CellInfo.X_cell_start;
|
|
var X_cell_end = CellInfo.X_cell_end;
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
if (PNum + 1 < this.Pages.length) {
|
|
if (CurRow + VMergeCount - 1 >= this.Pages[PNum + 1].FirstRow) {
|
|
VMergeCount = this.Pages[PNum + 1].FirstRow + 1 - CurRow;
|
|
if (false === this.RowsInfo[CurRow + VMergeCount - 1].FirstPage && PNum === this.RowsInfo[CurRow + VMergeCount - 1].StartPage) {
|
|
VMergeCount--;
|
|
}
|
|
if (VMergeCount <= 0) {
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
var RealHeight = this.RowsInfo[CurRow + VMergeCount - 1].Y[PNum] + this.RowsInfo[CurRow + VMergeCount - 1].H[PNum] - Y;
|
|
var CellShd = Cell.Get_Shd();
|
|
if (shd_Nil != CellShd.Value) {
|
|
pGraphics.b_color1(CellShd.Color.r, CellShd.Color.g, CellShd.Color.b, 255);
|
|
pGraphics.TableRect(Math.min(X_cell_start, X_cell_end), Math.min(Y, Y + RealHeight), Math.abs(X_cell_end - X_cell_start), Math.abs(RealHeight));
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Internal_Draw_3: function (pGraphics, PNum, Row_start, Row_last) {
|
|
if (this.HeaderInfo.Count > 0 && PNum > this.HeaderInfo.PageIndex && true === this.HeaderInfo.Pages[PNum].Draw) {
|
|
var HeaderPage = this.HeaderInfo.Pages[PNum];
|
|
for (var CurRow = 0; CurRow < this.HeaderInfo.Count; CurRow++) {
|
|
var Row = HeaderPage.Rows[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var VMerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === VMerge) {
|
|
continue;
|
|
}
|
|
Cell.Content_Draw(PNum, pGraphics);
|
|
}
|
|
}
|
|
}
|
|
for (var CurRow = Row_start; CurRow <= Row_last; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var VMerge = Cell.Get_VMerge();
|
|
var CurGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
if (vmerge_Continue === VMerge) {
|
|
if (Row_start === CurRow) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
if (null === Cell) {
|
|
continue;
|
|
}
|
|
} else {
|
|
continue;
|
|
}
|
|
}
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
if (PNum + 1 < this.Pages.length) {
|
|
if (CurRow + VMergeCount - 1 >= this.Pages[PNum + 1].FirstRow) {
|
|
VMergeCount = this.Pages[PNum + 1].FirstRow + 1 - CurRow;
|
|
if (false === this.RowsInfo[CurRow + VMergeCount - 1].FirstPage && PNum === this.RowsInfo[CurRow + VMergeCount - 1].StartPage) {
|
|
VMergeCount--;
|
|
}
|
|
if (VMergeCount <= 0) {
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
Cell.Content_Draw(PNum, pGraphics);
|
|
}
|
|
}
|
|
},
|
|
Internal_Draw_4: function (pGraphics, PNum, Row_start, Row_last) {
|
|
var TableBorders = this.Get_Borders();
|
|
if (this.HeaderInfo.Count > 0 && PNum > this.HeaderInfo.PageIndex && true === this.HeaderInfo.Pages[PNum].Draw) {
|
|
var Y = this.Y;
|
|
var HeaderPage = this.HeaderInfo.Pages[PNum];
|
|
for (var CurRow = 0; CurRow < this.HeaderInfo.Count; CurRow++) {
|
|
var Row = HeaderPage.Rows[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
Y = HeaderPage.RowsInfo[CurRow].Y;
|
|
var LastBorderTop = {
|
|
W: 0,
|
|
L: 0
|
|
};
|
|
for (var CurCell = CellsCount - 1; CurCell >= 0; CurCell--) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var VMerge = Cell.Get_VMerge();
|
|
var CurGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
if (vmerge_Continue === VMerge) {
|
|
LastBorderTop = {
|
|
W: 0,
|
|
L: 0
|
|
};
|
|
continue;
|
|
}
|
|
var CellInfo = Row.Get_CellInfo(CurCell);
|
|
var X_cell_start = CellInfo.X_cell_start;
|
|
var X_cell_end = CellInfo.X_cell_end;
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var RealHeight = HeaderPage.RowsInfo[CurRow + VMergeCount - 1].Y + HeaderPage.RowsInfo[CurRow + VMergeCount - 1].H - Y;
|
|
var CellBorders = Cell.Get_Borders();
|
|
if (null != CellSpacing) {
|
|
if (border_Single === CellBorders.Left.Value) {
|
|
pGraphics.p_color(CellBorders.Left.Color.r, CellBorders.Left.Color.g, CellBorders.Left.Color.b, 255);
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Left, X_cell_start, Y, Y + RealHeight, CellBorders.Left.Size);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y, X_cell_start, Y + RealHeight);
|
|
}
|
|
if (border_Single === CellBorders.Right.Value) {
|
|
pGraphics.p_color(CellBorders.Right.Color.r, CellBorders.Right.Color.g, CellBorders.Right.Color.b, 255);
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Right, X_cell_end, Y, Y + RealHeight, CellBorders.Right.Size);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_end, Y, X_cell_end, Y + RealHeight);
|
|
}
|
|
if (border_Single === CellBorders.Top.Value) {
|
|
pGraphics.p_color(CellBorders.Top.Color.r, CellBorders.Top.Color.g, CellBorders.Top.Color.b, 255);
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y - CellBorders.Top.Size, X_cell_start, X_cell_end, CellBorders.Top.Size, 0, 0);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y, X_cell_end, Y);
|
|
}
|
|
if (border_Single === CellBorders.Bottom.Value) {
|
|
pGraphics.p_color(CellBorders.Bottom.Color.r, CellBorders.Bottom.Color.g, CellBorders.Bottom.Color.b, 255);
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Bottom, Y + RealHeight + CellBorders.Bottom.Size, X_cell_start, X_cell_end, CellBorders.Bottom.Size, 0, 0);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y + RealHeight, X_cell_end, Y + RealHeight);
|
|
}
|
|
} else {
|
|
var CellBordersInfo = Cell.Get_BorderInfo();
|
|
var BorderInfo_Left = CellBordersInfo.Left;
|
|
var TempCurRow = Cell.Row.Index;
|
|
var Row_side_border_start = 0;
|
|
var Row_side_border_end = BorderInfo_Left.length - 1;
|
|
for (var Index = Row_side_border_start; Index <= Row_side_border_end; Index++) {
|
|
var CurBorderInfo = BorderInfo_Left[Index];
|
|
var Y0 = HeaderPage.RowsInfo[TempCurRow + Index].Y;
|
|
var Y1 = HeaderPage.RowsInfo[TempCurRow + Index].Y + HeaderPage.RowsInfo[TempCurRow + Index].H;
|
|
if (border_Single === CurBorderInfo.Value) {
|
|
pGraphics.p_color(CurBorderInfo.Color.r, CurBorderInfo.Color.g, CurBorderInfo.Color.b, 255);
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Center, X_cell_start, Y0, Y1, CurBorderInfo.Size);
|
|
} else {
|
|
if (0 === CurCell) {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y0, X_cell_start, Y1);
|
|
}
|
|
}
|
|
}
|
|
var BorderInfo_Right = CellBordersInfo.Right;
|
|
for (var Index = Row_side_border_start; Index <= Row_side_border_end; Index++) {
|
|
var CurBorderInfo = BorderInfo_Right[Index];
|
|
var Y0 = HeaderPage.RowsInfo[TempCurRow + Index].Y;
|
|
var Y1 = HeaderPage.RowsInfo[TempCurRow + Index].Y + HeaderPage.RowsInfo[TempCurRow + Index].H;
|
|
var TempCellIndex = this.Internal_Get_Cell_ByStartGridCol(TempCurRow + Index, CellInfo.StartGridCol);
|
|
var TempCellsCount = HeaderPage.Rows[TempCurRow + Index].Get_CellsCount();
|
|
if (TempCellsCount - 1 === TempCellIndex) {
|
|
if (border_Single === CurBorderInfo.Value) {
|
|
pGraphics.p_color(CurBorderInfo.Color.r, CurBorderInfo.Color.g, CurBorderInfo.Color.b, 255);
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Center, X_cell_end, Y0, Y1, CurBorderInfo.Size);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_end, Y0, X_cell_end, Y1);
|
|
}
|
|
} else {
|
|
if (border_None === CurBorderInfo.Value) {
|
|
pGraphics.DrawEmptyTableLine(X_cell_end, Y0, X_cell_end, Y1);
|
|
}
|
|
}
|
|
}
|
|
var LastBorderTop_prev = {
|
|
W: LastBorderTop.W,
|
|
H: LastBorderTop.H
|
|
};
|
|
var BorderInfo_Top = CellBordersInfo.Top;
|
|
for (var Index = 0; Index < BorderInfo_Top.length; Index++) {
|
|
var CurBorderInfo = BorderInfo_Top[Index];
|
|
if (0 != PNum && CurRow === Row_start) {
|
|
CurBorderInfo = this.Internal_CompareBorders(TableBorders.Top, CurBorderInfo, true, false);
|
|
}
|
|
var X0 = this.X + this.TableSumGrid[Index + CurGridCol - 1];
|
|
var X1 = this.X + this.TableSumGrid[Index + CurGridCol];
|
|
var LeftMW = 0;
|
|
var RightMW = 0;
|
|
if (BorderInfo_Top.length - 1 === Index) {
|
|
var Max_r = 0;
|
|
if (0 != CurRow) {
|
|
var Prev_Row = HeaderPage.Rows[CurRow - 1];
|
|
var Prev_CellsCount = Prev_Row.Get_CellsCount();
|
|
for (var TempIndex = 0; TempIndex < Prev_CellsCount; TempIndex++) {
|
|
var Prev_Cell = Prev_Row.Get_Cell(TempIndex);
|
|
var Prev_GridCol = Prev_Row.Get_CellInfo(TempIndex).StartGridCol;
|
|
var Prev_GridSpan = Prev_Cell.Get_GridSpan();
|
|
var bLeft = null;
|
|
if (Prev_GridCol === Index + CurGridCol + 1) {
|
|
bLeft = true;
|
|
} else {
|
|
if (Prev_GridCol + Prev_GridSpan === Index + CurGridCol + 1) {
|
|
bLeft = false;
|
|
} else {
|
|
if (Prev_GridCol > CurGridCol) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (null != bLeft) {
|
|
var Prev_VMerge = Prev_Cell.Get_VMerge();
|
|
if (vmerge_Continue === Prev_VMerge) {
|
|
Prev_Cell = this.Internal_Get_StartMergedCell(CurRow - 1, Prev_GridCol, Prev_GridSpan);
|
|
}
|
|
if (null === Prev_Cell) {
|
|
break;
|
|
}
|
|
var Num = CurRow - 1 - Prev_Cell.Row.Index;
|
|
if (Num < 0) {
|
|
break;
|
|
}
|
|
if (true === bLeft) {
|
|
var Prev_Cell_BorderInfo_Left = Prev_Cell.Get_BorderInfo().Left;
|
|
if (null != Prev_Cell_BorderInfo_Left && Prev_Cell_BorderInfo_Left.length > Num && border_Single === Prev_Cell_BorderInfo_Left[Num].Value) {
|
|
Max_r = Prev_Cell_BorderInfo_Left[Num].Size / 2;
|
|
}
|
|
} else {
|
|
var Prev_Cell_BorderInfo_Right = Prev_Cell.Get_BorderInfo().Right;
|
|
if (null != Prev_Cell_BorderInfo_Right && Prev_Cell_BorderInfo_Right.length > Num && border_Single === Prev_Cell_BorderInfo_Right[Num].Value) {
|
|
Max_r = Prev_Cell_BorderInfo_Right[Num].Size / 2;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (BorderInfo_Right.length > 0 && border_Single === BorderInfo_Right[0].Value && BorderInfo_Right[0].Size / 2 > Max_r) {
|
|
Max_r = BorderInfo_Right[0].Size / 2;
|
|
}
|
|
if (border_Single === CurBorderInfo.Value && CurBorderInfo.Size > LastBorderTop_prev.W) {
|
|
RightMW = Max_r;
|
|
} else {
|
|
RightMW = -Max_r;
|
|
}
|
|
}
|
|
if (0 === Index) {
|
|
var Max_l = 0;
|
|
if (0 != CurRow) {
|
|
var Prev_Row = this.Content[CurRow - 1];
|
|
var Prev_CellsCount = Prev_Row.Get_CellsCount();
|
|
for (var TempIndex = 0; TempIndex < Prev_CellsCount; TempIndex++) {
|
|
var Prev_Cell = Prev_Row.Get_Cell(TempIndex);
|
|
var Prev_GridCol = Prev_Row.Get_CellInfo(TempIndex).StartGridCol;
|
|
var Prev_GridSpan = Prev_Cell.Get_GridSpan();
|
|
var bLeft = null;
|
|
if (Prev_GridCol === CurGridCol) {
|
|
bLeft = true;
|
|
} else {
|
|
if (Prev_GridCol + Prev_GridSpan === CurGridCol) {
|
|
bLeft = false;
|
|
} else {
|
|
if (Prev_GridCol > CurGridCol) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (null != bLeft) {
|
|
var Prev_VMerge = Prev_Cell.Get_VMerge();
|
|
if (vmerge_Continue === Prev_VMerge) {
|
|
Prev_Cell = this.Internal_Get_StartMergedCell(CurRow - 1, Prev_GridCol, Prev_GridSpan);
|
|
}
|
|
if (null === Prev_Cell) {
|
|
break;
|
|
}
|
|
var Num = CurRow - 1 - Prev_Cell.Row.Index;
|
|
if (Num < 0) {
|
|
break;
|
|
}
|
|
if (true === bLeft) {
|
|
var Prev_Cell_BorderInfo_Left = Prev_Cell.Get_BorderInfo().Left;
|
|
if (null != Prev_Cell_BorderInfo_Left && Prev_Cell_BorderInfo_Left.length > Num && border_Single === Prev_Cell_BorderInfo_Left[Num].Value) {
|
|
Max_l = Prev_Cell_BorderInfo_Left[Num].Size / 2;
|
|
}
|
|
} else {
|
|
var Prev_Cell_BorderInfo_Right = Prev_Cell.Get_BorderInfo().Right;
|
|
if (null != Prev_Cell_BorderInfo_Right && Prev_Cell_BorderInfo_Right.length > Num && border_Single === Prev_Cell_BorderInfo_Right[Num].Value) {
|
|
Max_l = Prev_Cell_BorderInfo_Right[Num].Size / 2;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (BorderInfo_Left.length > 0 && border_Single === BorderInfo_Left[0].Value && BorderInfo_Left[0].Size / 2 > Max_l) {
|
|
Max_l = BorderInfo_Left[0].Size / 2;
|
|
}
|
|
LastBorderTop.L = Max_l;
|
|
LastBorderTop.W = 0;
|
|
if (border_Single === CurBorderInfo.Value) {
|
|
LastBorderTop.W = CurBorderInfo.Size;
|
|
}
|
|
}
|
|
if (border_Single === CurBorderInfo.Value) {
|
|
pGraphics.p_color(CurBorderInfo.Color.r, CurBorderInfo.Color.g, CurBorderInfo.Color.b, 255);
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y, X0, X1, CurBorderInfo.Size, LeftMW, RightMW);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X0 + LeftMW, Y, X1 + RightMW, Y);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var Y = this.Y;
|
|
for (var CurRow = Row_start; CurRow <= Row_last; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
Y = this.RowsInfo[CurRow].Y[PNum];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var LastBorderTop = {
|
|
W: 0,
|
|
L: 0
|
|
};
|
|
for (var CurCell = CellsCount - 1; CurCell >= 0; CurCell--) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var VMerge = Cell.Get_VMerge();
|
|
var CurGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
if (vmerge_Continue === VMerge) {
|
|
if (Row_start === CurRow) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
if (null === Cell) {
|
|
LastBorderTop = {
|
|
W: 0,
|
|
L: 0
|
|
};
|
|
continue;
|
|
}
|
|
} else {
|
|
LastBorderTop = {
|
|
W: 0,
|
|
L: 0
|
|
};
|
|
continue;
|
|
}
|
|
}
|
|
var CellInfo = Row.Get_CellInfo(CurCell);
|
|
var X_cell_start = CellInfo.X_cell_start;
|
|
var X_cell_end = CellInfo.X_cell_end;
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
if (PNum + 1 < this.Pages.length) {
|
|
if (CurRow + VMergeCount - 1 >= this.Pages[PNum + 1].FirstRow) {
|
|
VMergeCount = this.Pages[PNum + 1].FirstRow + 1 - CurRow;
|
|
if (false === this.RowsInfo[CurRow + VMergeCount - 1].FirstPage && PNum === this.RowsInfo[CurRow + VMergeCount - 1].StartPage) {
|
|
VMergeCount--;
|
|
}
|
|
if (VMergeCount <= 0) {
|
|
LastBorderTop = {
|
|
W: 0,
|
|
L: 0
|
|
};
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
var RealHeight = this.RowsInfo[CurRow + VMergeCount - 1].Y[PNum] + this.RowsInfo[CurRow + VMergeCount - 1].H[PNum] - Y;
|
|
var CellBorders = Cell.Get_Borders();
|
|
if (null != CellSpacing) {
|
|
if (border_Single === CellBorders.Left.Value) {
|
|
pGraphics.p_color(CellBorders.Left.Color.r, CellBorders.Left.Color.g, CellBorders.Left.Color.b, 255);
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Left, X_cell_start, Y, Y + RealHeight, CellBorders.Left.Size);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y, X_cell_start, Y + RealHeight);
|
|
}
|
|
if (border_Single === CellBorders.Right.Value) {
|
|
pGraphics.p_color(CellBorders.Right.Color.r, CellBorders.Right.Color.g, CellBorders.Right.Color.b, 255);
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Right, X_cell_end, Y, Y + RealHeight, CellBorders.Right.Size);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_end, Y, X_cell_end, Y + RealHeight);
|
|
}
|
|
if (border_Single === CellBorders.Top.Value) {
|
|
pGraphics.p_color(CellBorders.Top.Color.r, CellBorders.Top.Color.g, CellBorders.Top.Color.b, 255);
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y - CellBorders.Top.Size, X_cell_start, X_cell_end, CellBorders.Top.Size, 0, 0);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y, X_cell_end, Y);
|
|
}
|
|
if (border_Single === CellBorders.Bottom.Value) {
|
|
pGraphics.p_color(CellBorders.Bottom.Color.r, CellBorders.Bottom.Color.g, CellBorders.Bottom.Color.b, 255);
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Bottom, Y + RealHeight + CellBorders.Bottom.Size, X_cell_start, X_cell_end, CellBorders.Bottom.Size, 0, 0);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y + RealHeight, X_cell_end, Y + RealHeight);
|
|
}
|
|
} else {
|
|
var CellBordersInfo = Cell.Get_BorderInfo();
|
|
var BorderInfo_Left = CellBordersInfo.Left;
|
|
var TempCurRow = Cell.Row.Index;
|
|
var Row_side_border_start = (TempCurRow < Row_start ? Row_start - TempCurRow : 0);
|
|
var Row_side_border_end = (BorderInfo_Left.length - 1 + TempCurRow > Row_last ? Row_last - TempCurRow + 1 : BorderInfo_Left.length - 1);
|
|
for (var Index = Row_side_border_start; Index <= Row_side_border_end; Index++) {
|
|
var CurBorderInfo = BorderInfo_Left[Index];
|
|
var Y0 = this.RowsInfo[TempCurRow + Index].Y[PNum];
|
|
var Y1 = this.RowsInfo[TempCurRow + Index].Y[PNum] + this.RowsInfo[TempCurRow + Index].H[PNum];
|
|
if (border_Single === CurBorderInfo.Value) {
|
|
pGraphics.p_color(CurBorderInfo.Color.r, CurBorderInfo.Color.g, CurBorderInfo.Color.b, 255);
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Center, X_cell_start, Y0, Y1, CurBorderInfo.Size);
|
|
} else {
|
|
if (0 === CurCell) {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y0, X_cell_start, Y1);
|
|
}
|
|
}
|
|
}
|
|
var BorderInfo_Right = CellBordersInfo.Right;
|
|
for (var Index = Row_side_border_start; Index <= Row_side_border_end; Index++) {
|
|
var CurBorderInfo = BorderInfo_Right[Index];
|
|
var Y0 = this.RowsInfo[TempCurRow + Index].Y[PNum];
|
|
var Y1 = this.RowsInfo[TempCurRow + Index].Y[PNum] + this.RowsInfo[TempCurRow + Index].H[PNum];
|
|
var TempCellIndex = this.Internal_Get_Cell_ByStartGridCol(TempCurRow + Index, CellInfo.StartGridCol);
|
|
var TempCellsCount = this.Content[TempCurRow + Index].Get_CellsCount();
|
|
if (TempCellsCount - 1 === TempCellIndex) {
|
|
if (border_Single === CurBorderInfo.Value) {
|
|
pGraphics.p_color(CurBorderInfo.Color.r, CurBorderInfo.Color.g, CurBorderInfo.Color.b, 255);
|
|
pGraphics.drawVerLine(c_oAscLineDrawingRule.Center, X_cell_end, Y0, Y1, CurBorderInfo.Size);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_end, Y0, X_cell_end, Y1);
|
|
}
|
|
} else {
|
|
if (border_None === CurBorderInfo.Value) {
|
|
pGraphics.DrawEmptyTableLine(X_cell_end, Y0, X_cell_end, Y1);
|
|
}
|
|
}
|
|
}
|
|
var LastBorderTop_prev = {
|
|
W: LastBorderTop.W,
|
|
H: LastBorderTop.H
|
|
};
|
|
var BorderInfo_Top = CellBordersInfo.Top;
|
|
for (var Index = 0; Index < BorderInfo_Top.length; Index++) {
|
|
var CurBorderInfo = BorderInfo_Top[Index];
|
|
if (0 != PNum && CurRow === Row_start) {
|
|
CurBorderInfo = this.Internal_CompareBorders(TableBorders.Top, CurBorderInfo, true, false);
|
|
}
|
|
var X0 = this.X + this.TableSumGrid[Index + CurGridCol - 1];
|
|
var X1 = this.X + this.TableSumGrid[Index + CurGridCol];
|
|
var LeftMW = 0;
|
|
var RightMW = 0;
|
|
if (BorderInfo_Top.length - 1 === Index) {
|
|
var Max_r = 0;
|
|
if (0 != CurRow) {
|
|
var Prev_Row = this.Content[CurRow - 1];
|
|
var Prev_CellsCount = Prev_Row.Get_CellsCount();
|
|
for (var TempIndex = 0; TempIndex < Prev_CellsCount; TempIndex++) {
|
|
var Prev_Cell = Prev_Row.Get_Cell(TempIndex);
|
|
var Prev_GridCol = Prev_Row.Get_CellInfo(TempIndex).StartGridCol;
|
|
var Prev_GridSpan = Prev_Cell.Get_GridSpan();
|
|
var bLeft = null;
|
|
if (Prev_GridCol === Index + CurGridCol + 1) {
|
|
bLeft = true;
|
|
} else {
|
|
if (Prev_GridCol + Prev_GridSpan === Index + CurGridCol + 1) {
|
|
bLeft = false;
|
|
} else {
|
|
if (Prev_GridCol > CurGridCol) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (null != bLeft) {
|
|
var Prev_VMerge = Prev_Cell.Get_VMerge();
|
|
if (vmerge_Continue === Prev_VMerge) {
|
|
Prev_Cell = this.Internal_Get_StartMergedCell(CurRow - 1, Prev_GridCol, Prev_GridSpan);
|
|
}
|
|
if (null === Prev_Cell) {
|
|
break;
|
|
}
|
|
var Num = CurRow - 1 - Prev_Cell.Row.Index;
|
|
if (Num < 0) {
|
|
break;
|
|
}
|
|
if (true === bLeft) {
|
|
var Prev_Cell_BorderInfo_Left = Prev_Cell.Get_BorderInfo().Left;
|
|
if (null != Prev_Cell_BorderInfo_Left && Prev_Cell_BorderInfo_Left.length > Num && border_Single === Prev_Cell_BorderInfo_Left[Num].Value) {
|
|
Max_r = Prev_Cell_BorderInfo_Left[Num].Size / 2;
|
|
}
|
|
} else {
|
|
var Prev_Cell_BorderInfo_Right = Prev_Cell.Get_BorderInfo().Right;
|
|
if (null != Prev_Cell_BorderInfo_Right && Prev_Cell_BorderInfo_Right.length > Num && border_Single === Prev_Cell_BorderInfo_Right[Num].Value) {
|
|
Max_r = Prev_Cell_BorderInfo_Right[Num].Size / 2;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (BorderInfo_Right.length > 0 && border_Single === BorderInfo_Right[0].Value && BorderInfo_Right[0].Size / 2 > Max_r) {
|
|
Max_r = BorderInfo_Right[0].Size / 2;
|
|
}
|
|
if (border_Single === CurBorderInfo.Value && CurBorderInfo.Size > LastBorderTop_prev.W) {
|
|
RightMW = Max_r;
|
|
} else {
|
|
RightMW = -Max_r;
|
|
}
|
|
}
|
|
if (0 === Index) {
|
|
var Max_l = 0;
|
|
if (0 != CurRow) {
|
|
var Prev_Row = this.Content[CurRow - 1];
|
|
var Prev_CellsCount = Prev_Row.Get_CellsCount();
|
|
for (var TempIndex = 0; TempIndex < Prev_CellsCount; TempIndex++) {
|
|
var Prev_Cell = Prev_Row.Get_Cell(TempIndex);
|
|
var Prev_GridCol = Prev_Row.Get_CellInfo(TempIndex).StartGridCol;
|
|
var Prev_GridSpan = Prev_Cell.Get_GridSpan();
|
|
var bLeft = null;
|
|
if (Prev_GridCol === CurGridCol) {
|
|
bLeft = true;
|
|
} else {
|
|
if (Prev_GridCol + Prev_GridSpan === CurGridCol) {
|
|
bLeft = false;
|
|
} else {
|
|
if (Prev_GridCol > CurGridCol) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (null != bLeft) {
|
|
var Prev_VMerge = Prev_Cell.Get_VMerge();
|
|
if (vmerge_Continue === Prev_VMerge) {
|
|
Prev_Cell = this.Internal_Get_StartMergedCell(CurRow - 1, Prev_GridCol, Prev_GridSpan);
|
|
}
|
|
if (null === Prev_Cell) {
|
|
break;
|
|
}
|
|
var Num = CurRow - 1 - Prev_Cell.Row.Index;
|
|
if (Num < 0) {
|
|
break;
|
|
}
|
|
if (true === bLeft) {
|
|
var Prev_Cell_BorderInfo_Left = Prev_Cell.Get_BorderInfo().Left;
|
|
if (null != Prev_Cell_BorderInfo_Left && Prev_Cell_BorderInfo_Left.length > Num && border_Single === Prev_Cell_BorderInfo_Left[Num].Value) {
|
|
Max_l = Prev_Cell_BorderInfo_Left[Num].Size / 2;
|
|
}
|
|
} else {
|
|
var Prev_Cell_BorderInfo_Right = Prev_Cell.Get_BorderInfo().Right;
|
|
if (null != Prev_Cell_BorderInfo_Right && Prev_Cell_BorderInfo_Right.length > Num && border_Single === Prev_Cell_BorderInfo_Right[Num].Value) {
|
|
Max_l = Prev_Cell_BorderInfo_Right[Num].Size / 2;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (BorderInfo_Left.length > 0 && border_Single === BorderInfo_Left[0].Value && BorderInfo_Left[0].Size / 2 > Max_l) {
|
|
Max_l = BorderInfo_Left[0].Size / 2;
|
|
}
|
|
LeftMW = -Max_l;
|
|
LastBorderTop.L = Max_l;
|
|
LastBorderTop.W = 0;
|
|
if (border_Single === CurBorderInfo.Value) {
|
|
LastBorderTop.W = CurBorderInfo.Size;
|
|
}
|
|
}
|
|
if (border_Single === CurBorderInfo.Value) {
|
|
pGraphics.p_color(CurBorderInfo.Color.r, CurBorderInfo.Color.g, CurBorderInfo.Color.b, 255);
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y, X0, X1, CurBorderInfo.Size, LeftMW, RightMW);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X0 + LeftMW, Y, X1 + RightMW, Y);
|
|
}
|
|
}
|
|
if (PNum != this.Pages.length - 1 && CurRow + VMergeCount - 1 === Row_last) {
|
|
var X0 = X_cell_start;
|
|
var X1 = X_cell_end;
|
|
var LowerCell = this.Internal_Get_Cell_ByStartGridCol(CurRow + VMergeCount - 1, Row.Get_CellInfo(CurCell).StartGridCol);
|
|
var BottomBorder = (-1 === LowerCell ? this.Pages[PNum].BotBorders[0] : this.Pages[PNum].BotBorders[LowerCell]);
|
|
if (border_Single === BottomBorder.Value) {
|
|
pGraphics.p_color(BottomBorder.Color.r, BottomBorder.Color.g, BottomBorder.Color.b, 255);
|
|
var X0 = X_cell_start;
|
|
var X1 = X_cell_end;
|
|
var LeftMW = 0;
|
|
if (BorderInfo_Left.length > 0 && border_Single === BorderInfo_Left[BorderInfo_Left.length - 1].Value) {
|
|
LeftMW = -BorderInfo_Left[BorderInfo_Left.length - 1].Size / 2;
|
|
}
|
|
var RightMW = 0;
|
|
if (BorderInfo_Right.length > 0 && border_Single === BorderInfo_Right[BorderInfo_Right.length - 1].Value) {
|
|
RightMW = +BorderInfo_Right[BorderInfo_Right.length - 1].Size / 2;
|
|
}
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y + RealHeight, X0, X1, BottomBorder.Size, LeftMW, RightMW);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y + RealHeight, X_cell_end, Y + RealHeight);
|
|
}
|
|
} else {
|
|
var BorderInfo_Bottom = CellBordersInfo.Bottom;
|
|
var BorderInfo_Bottom_BeforeCount = CellBordersInfo.Bottom_BeforeCount;
|
|
var BorderInfo_Bottom_AfterCount = CellBordersInfo.Bottom_AfterCount;
|
|
if (null != BorderInfo_Bottom && BorderInfo_Bottom.length > 0) {
|
|
if (-1 === BorderInfo_Bottom_BeforeCount && -1 === BorderInfo_Bottom_AfterCount) {
|
|
var BottomBorder = BorderInfo_Bottom[0];
|
|
if (border_Single === BottomBorder.Value) {
|
|
pGraphics.p_color(BottomBorder.Color.r, BottomBorder.Color.g, BottomBorder.Color.b, 255);
|
|
var X0 = X_cell_start;
|
|
var X1 = X_cell_end;
|
|
var LeftMW = 0;
|
|
if (BorderInfo_Left.length > 0 && border_Single === BorderInfo_Left[BorderInfo_Left.length - 1].Value) {
|
|
LeftMW = -BorderInfo_Left[BorderInfo_Left.length - 1].Size / 2;
|
|
}
|
|
var RightMW = 0;
|
|
if (BorderInfo_Right.length > 0 && border_Single === BorderInfo_Right[BorderInfo_Right.length - 1].Value) {
|
|
RightMW = +BorderInfo_Right[BorderInfo_Right.length - 1].Size / 2;
|
|
}
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y + RealHeight, X0, X1, BottomBorder.Size, LeftMW, RightMW);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y + RealHeight, X_cell_end, Y + RealHeight);
|
|
}
|
|
} else {
|
|
for (var Index = 0; Index < BorderInfo_Bottom_BeforeCount; Index++) {
|
|
var BottomBorder = BorderInfo_Bottom[Index];
|
|
if (border_Single === BottomBorder.Value) {
|
|
pGraphics.p_color(BottomBorder.Color.r, BottomBorder.Color.g, BottomBorder.Color.b, 255);
|
|
pGraphics.p_width(BottomBorder.Size * 1000);
|
|
pGraphics._s();
|
|
var X0 = this.X + this.TableSumGrid[Index + CurGridCol - 1];
|
|
var X1 = this.X + this.TableSumGrid[Index + CurGridCol];
|
|
var LeftMW = 0;
|
|
if (0 === Index && BorderInfo_Left.length > 0 && border_Single === BorderInfo_Left[BorderInfo_Left.length - 1].Value) {
|
|
LeftMW = -BorderInfo_Left[BorderInfo_Left.length - 1].Size / 2;
|
|
}
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y + RealHeight, X0, X1, BottomBorder.Size, LeftMW, 0);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y + RealHeight, X_cell_end, Y + RealHeight);
|
|
}
|
|
}
|
|
for (var Index = 0; Index < BorderInfo_Bottom_AfterCount; Index++) {
|
|
var BottomBorder = BorderInfo_Bottom[BorderInfo_Bottom.length - 1 - Index];
|
|
if (border_Single === BottomBorder.Value) {
|
|
pGraphics.p_color(BottomBorder.Color.r, BottomBorder.Color.g, BottomBorder.Color.b, 255);
|
|
pGraphics.p_width(BottomBorder.Size * 1000);
|
|
pGraphics._s();
|
|
var X0 = this.X + this.TableSumGrid[CurGridCol + GridSpan - 2 - Index];
|
|
var X1 = this.X + this.TableSumGrid[CurGridCol + GridSpan - 1 - Index];
|
|
var RightMW = 0;
|
|
if (0 === Index && BorderInfo_Right.length > 0 && border_Single === BorderInfo_Right[BorderInfo_Right.length - 1].Value) {
|
|
RightMW = +BorderInfo_Right[BorderInfo_Right.length - 1].Size / 2;
|
|
}
|
|
pGraphics.drawHorLineExt(c_oAscLineDrawingRule.Top, Y + RealHeight, X0, X1, BottomBorder.Size, 0, RightMW);
|
|
} else {
|
|
pGraphics.DrawEmptyTableLine(X_cell_start, Y + RealHeight, X_cell_end, Y + RealHeight);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Get_NearestPos: function (PageNum, X, Y, bAnchor, Drawing) {
|
|
var PNum = PageNum - this.PageNum;
|
|
if (PNum < 0 || PNum >= this.Pages.length) {
|
|
PNum = 0;
|
|
}
|
|
var Pos = this.Internal_GetCellByXY(X, Y, PNum);
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
return Cell.Content.Get_NearestPos(PNum, X, Y, bAnchor, Drawing);
|
|
},
|
|
Set_Parent: function (ParentObject) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_Parent,
|
|
Old: this.Parent,
|
|
New: ParentObject
|
|
});
|
|
this.Parent = ParentObject;
|
|
},
|
|
Get_Parent: function () {
|
|
return this.Parent;
|
|
},
|
|
Set_Id: function (newId) {
|
|
g_oTableId.Reset_Id(this, newId, this.Id);
|
|
this.Id = newId;
|
|
},
|
|
Get_Id: function () {
|
|
return this.Id;
|
|
},
|
|
Is_StartFromNewPage: function () {
|
|
if ((this.Pages.length > 1 && 0 === this.Pages[1].FirstRow && false === this.RowsInfo[0].FirstPage) || (null === this.Get_DocumentPrev() && true === this.Parent.Is_TopDocument())) {
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
Is_ContentOnFirstPage: function () {
|
|
if (this.Pages.length >= 1 && true === this.RowsInfo[0].FirstPage) {
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
Is_TableBorder: function (X, Y, PageNum_Abs) {
|
|
if (true === this.DrawingDocument.IsMobileVersion()) {
|
|
return null;
|
|
}
|
|
var TempPNum = PageNum_Abs - this.Get_StartPage_Absolute();
|
|
if (TempPNum < 0 || TempPNum >= this.Pages.length) {
|
|
TempPNum = 0;
|
|
}
|
|
var Result = this.Internal_CheckBorders(X, Y, TempPNum);
|
|
if (Result.Border != -1) {
|
|
return this;
|
|
} else {
|
|
return this.Content[Result.Pos.Row].Get_Cell(Result.Pos.Cell).Content.Is_TableBorder(X, Y, PageNum_Abs);
|
|
}
|
|
},
|
|
Is_InText: function (X, Y, PageNum_Abs) {
|
|
var TempPNum = PageNum_Abs - this.Get_StartPage_Absolute();
|
|
if (TempPNum < 0 || TempPNum >= this.Pages.length) {
|
|
TempPNum = 0;
|
|
}
|
|
var Result = this.Internal_CheckBorders(X, Y, TempPNum);
|
|
if (Result.Border != -1) {
|
|
return null;
|
|
} else {
|
|
return this.Content[Result.Pos.Row].Get_Cell(Result.Pos.Cell).Content.Is_InText(X, Y, PageNum_Abs);
|
|
}
|
|
},
|
|
Is_InDrawing: function (X, Y, PageNum_Abs) {
|
|
var TempPNum = PageNum_Abs - this.Get_StartPage_Absolute();
|
|
if (TempPNum < 0 || TempPNum >= this.Pages.length) {
|
|
TempPNum = 0;
|
|
}
|
|
var Result = this.Internal_CheckBorders(X, Y, TempPNum);
|
|
if (Result.Border != -1) {
|
|
return null;
|
|
} else {
|
|
return this.Content[Result.Pos.Row].Get_Cell(Result.Pos.Cell).Content.Is_InDrawing(X, Y, PageNum_Abs);
|
|
}
|
|
},
|
|
Is_InnerTable: function () {
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
return this.CurCell.Content.Is_CurrentElementTable();
|
|
}
|
|
return false;
|
|
},
|
|
Is_UseInDocument: function (Id) {
|
|
var bUse = false;
|
|
if (null != Id) {
|
|
var RowsCount = this.Content.length;
|
|
for (var Index = 0; Index < RowsCount; Index++) {
|
|
if (Id === this.Content[Index].Get_Id()) {
|
|
bUse = true;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
bUse = true;
|
|
}
|
|
if (true === bUse && null != this.Parent) {
|
|
return this.Parent.Is_UseInDocument(this.Get_Id());
|
|
}
|
|
return false;
|
|
},
|
|
Get_CurrentPage_Absolute: function () {
|
|
if (true === this.Selection.Use) {
|
|
return 0;
|
|
}
|
|
return this.CurCell.Content.Get_CurrentPage_Absolute();
|
|
},
|
|
Get_CurrentPage_Relative: function () {
|
|
if (true === this.Selection.Use) {
|
|
return 0;
|
|
}
|
|
return this.CurCell.Content.Get_CurrentPage_Absolute() - this.Get_StartPage_Absolute();
|
|
},
|
|
Update_CursorType: function (X, Y, PageIndex) {
|
|
var PageNum = PageIndex - this.PageNum;
|
|
if (PageNum < 0 || PageNum >= this.Pages.length) {
|
|
PageNum = 0;
|
|
}
|
|
if (true === this.Lock.Is_Locked()) {
|
|
var PNum = PageNum;
|
|
var _X = this.Pages[PNum].Bounds.Left;
|
|
var _Y = this.Pages[PNum].Bounds.Top;
|
|
var MMData = new CMouseMoveData();
|
|
var Coords = this.DrawingDocument.ConvertCoordsToCursorWR(_X, _Y, this.Get_StartPage_Absolute() + (PageIndex - this.PageNum));
|
|
MMData.X_abs = Coords.X - 5;
|
|
MMData.Y_abs = Coords.Y - 5;
|
|
MMData.Type = c_oAscMouseMoveDataTypes.LockedObject;
|
|
MMData.UserId = this.Lock.Get_UserId();
|
|
MMData.HaveChanges = this.Lock.Have_Changes();
|
|
MMData.LockedObjectType = c_oAscMouseMoveLockedObjectType.Common;
|
|
editor.sync_MouseMoveCallback(MMData);
|
|
}
|
|
if (true === this.Selection.Start || table_Selection_Border === this.Selection.Type2 || table_Selection_Border_InnerTable === this.Selection.Type2) {
|
|
return;
|
|
}
|
|
var NewOutline = null;
|
|
if (1 === this.Pages.length || (this.Pages.length > 1 && (0 != this.Pages[1].FirstRow || true === this.RowsInfo[0].FirstPage))) {
|
|
var Bounds = this.Get_PageBounds(0);
|
|
NewOutline = new CTableOutline(this, this.Get_StartPage_Absolute(), Bounds.Left, Bounds.Top, Bounds.Right - Bounds.Left, Bounds.Bottom - Bounds.Top);
|
|
} else {
|
|
var Bounds = this.Get_PageBounds(1);
|
|
NewOutline = new CTableOutline(this, this.Get_StartPage_Absolute() + 1, Bounds.Left, Bounds.Top, Bounds.Right - Bounds.Left, Bounds.Bottom - Bounds.Top);
|
|
}
|
|
var transform = this.Parent.transform;
|
|
var cur_doc_content = this.Parent;
|
|
var Result = this.Internal_CheckBorders(X, Y, PageNum);
|
|
switch (Result.Border) {
|
|
case 0:
|
|
case 2:
|
|
return this.DrawingDocument.SetCursorType("s-resize", new CMouseMoveData());
|
|
case 1:
|
|
case 3:
|
|
return this.DrawingDocument.SetCursorType("w-resize", new CMouseMoveData());
|
|
}
|
|
var Cell_Pos = this.Internal_GetCellByXY(X, Y, PageNum);
|
|
var Cell = this.Content[Cell_Pos.Row].Get_Cell(Cell_Pos.Cell);
|
|
Cell.Content.Update_CursorType(X, Y, PageNum + this.Get_StartPage_Absolute());
|
|
},
|
|
Start_TrackTable: function () {
|
|
var NewOutline = null;
|
|
if (1 === this.Pages.length || (this.Pages.length > 1 && (0 != this.Pages[1].FirstRow || true === this.RowsInfo[0].FirstPage))) {
|
|
var Bounds = this.Get_PageBounds(0);
|
|
NewOutline = new CTableOutline(this, this.Get_StartPage_Absolute(), Bounds.Left, Bounds.Top, Bounds.Right - Bounds.Left, Bounds.Bottom - Bounds.Top);
|
|
} else {
|
|
var Bounds = this.Get_PageBounds(1);
|
|
NewOutline = new CTableOutline(this, this.Get_StartPage_Absolute() + 1, Bounds.Left, Bounds.Top, Bounds.Right - Bounds.Left, Bounds.Bottom - Bounds.Top);
|
|
}
|
|
var transform = null;
|
|
var cur_doc_content = this.Parent;
|
|
if (cur_doc_content instanceof CDocumentContent) {
|
|
while (cur_doc_content.Is_TableCellContent()) {
|
|
cur_doc_content = cur_doc_content.Parent.Row.Table.Parent;
|
|
}
|
|
if (cur_doc_content.Parent && cur_doc_content.Parent instanceof WordShape) {
|
|
transform = cur_doc_content.Parent.transformText;
|
|
}
|
|
}
|
|
this.DrawingDocument.StartTrackTable(NewOutline, transform);
|
|
},
|
|
DocumentSearch: function (Str, Type) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
Row.Get_Cell(CurCell).Content_DocumentSearch(Str, Type);
|
|
}
|
|
}
|
|
},
|
|
DocumentStatistics: function (Stats) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
Row.Get_Cell(CurCell).Content.DocumentStatistics(Stats);
|
|
}
|
|
}
|
|
},
|
|
Document_CreateFontMap: function (FontMap) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
Row.Get_Cell(CurCell).Content_Document_CreateFontMap(FontMap);
|
|
}
|
|
}
|
|
},
|
|
Document_CreateFontCharMap: function (FontCharMap) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
Row.Get_Cell(CurCell).Content.Document_CreateFontCharMap(183);
|
|
}
|
|
}
|
|
},
|
|
Document_Get_AllFontNames: function (AllFonts) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
Row.Get_Cell(CurCell).Content.Document_Get_AllFontNames(AllFonts);
|
|
}
|
|
}
|
|
},
|
|
Document_UpdateInterfaceState: function () {
|
|
if (true != this.Selection.Use || table_Selection_Cell != this.Selection.Type) {
|
|
this.CurCell.Content.Document_UpdateInterfaceState();
|
|
} else {
|
|
var ParaPr = this.Get_Paragraph_ParaPr();
|
|
ParaPr.CanAddTable = false;
|
|
if (null != ParaPr) {
|
|
editor.UpdateParagraphProp(ParaPr);
|
|
}
|
|
var TextPr = this.Get_Paragraph_TextPr();
|
|
if (null != TextPr) {
|
|
editor.UpdateTextPr(TextPr);
|
|
}
|
|
}
|
|
},
|
|
Document_UpdateRulersState: function (PageIndex) {
|
|
var PageNum = PageIndex - this.Get_StartPage_Absolute();
|
|
if (PageNum < 0 || PageNum >= this.Pages.length) {
|
|
PageNum = 0;
|
|
}
|
|
if (true == this.Selection.Use && table_Selection_Cell == this.Selection.Type) {
|
|
this.Internal_Update_TableMarkup(this.Selection.EndPos.Pos.Row, this.Selection.EndPos.Pos.Cell, PageNum);
|
|
} else {
|
|
this.Internal_Update_TableMarkup(this.CurCell.Row.Index, this.CurCell.Index, PageNum);
|
|
}
|
|
},
|
|
Document_SetThisElementCurrent: function () {
|
|
this.Parent.Set_CurrentElement(this.Index);
|
|
},
|
|
Set_Inline: function (Value) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_Inline,
|
|
Old: this.Inline,
|
|
New: Value
|
|
});
|
|
this.Inline = Value;
|
|
},
|
|
Is_Inline: function () {
|
|
return this.Inline;
|
|
if ("undefined" != typeof(this.Parent.Get_Type) && flowobject_Table === this.Parent.Get_Type()) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
TurnOff_RecalcEvent: function () {
|
|
this.TurnOffRecalcEvent = true;
|
|
},
|
|
TurnOn_RecalcEvent: function () {
|
|
this.TurnOffRecalcEvent = false;
|
|
},
|
|
Set_ApplyToAll: function (bValue) {
|
|
this.ApplyToAll = bValue;
|
|
},
|
|
Get_ApplyToAll: function () {
|
|
return this.ApplyToAll;
|
|
},
|
|
PreDelete: function () {
|
|
this.DrawingDocument.EndTrackTable(this, false);
|
|
},
|
|
Remove_InnerTable: function () {
|
|
this.CurCell.Content.Table_RemoveTable();
|
|
},
|
|
Table_Select: function (Type) {
|
|
if (true === this.Is_InnerTable()) {
|
|
this.CurCell.Content.Table_Select(Type);
|
|
if (true === this.CurCell.Content.Is_SelectionUse()) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Start = false;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.Data = null;
|
|
this.Selection.Type2 = table_Selection_Common;
|
|
this.Selection.Data2 = null;
|
|
}
|
|
return;
|
|
}
|
|
var NewSelectionData = new Array();
|
|
switch (Type) {
|
|
case c_oAscTableSelectionType.Table:
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === Vmerge) {
|
|
continue;
|
|
}
|
|
NewSelectionData.push({
|
|
Row: CurRow,
|
|
Cell: CurCell
|
|
});
|
|
}
|
|
}
|
|
break;
|
|
case c_oAscTableSelectionType.Row:
|
|
var Rows_to_select = new Array();
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Row_prev = -1;
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
if (-1 === Row_prev || Row_prev != Pos.Row) {
|
|
Rows_to_select.push(Pos.Row);
|
|
Row_prev = Pos.Row;
|
|
}
|
|
}
|
|
} else {
|
|
Rows_to_select.push(this.CurCell.Row.Index);
|
|
}
|
|
for (var Index = 0; Index < Rows_to_select.length; Index++) {
|
|
var Row = this.Content[Rows_to_select[Index]];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === Vmerge) {
|
|
continue;
|
|
}
|
|
NewSelectionData.push({
|
|
Cell: CurCell,
|
|
Row: Rows_to_select[Index]
|
|
});
|
|
}
|
|
}
|
|
break;
|
|
case c_oAscTableSelectionType.Column:
|
|
var Grid_start = -1;
|
|
var Grid_end = -1;
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var StartGridCol = Row.Get_CellInfo(Pos.Cell).StartGridCol;
|
|
var EndGridCol = StartGridCol + Cell.Get_GridSpan() - 1;
|
|
if (-1 === Grid_start || Grid_start > StartGridCol) {
|
|
Grid_start = StartGridCol;
|
|
}
|
|
if (-1 === Grid_end || Grid_end < EndGridCol) {
|
|
Grid_end = EndGridCol;
|
|
}
|
|
}
|
|
} else {
|
|
Grid_start = this.Content[this.CurCell.Row.Index].Get_CellInfo(this.CurCell.Index).StartGridCol;
|
|
Grid_end = Grid_start + this.CurCell.Get_GridSpan() - 1;
|
|
}
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === Vmerge) {
|
|
continue;
|
|
}
|
|
var StartGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var EndGridCol = StartGridCol + Cell.Get_GridSpan() - 1;
|
|
if (EndGridCol >= Grid_start && StartGridCol <= Grid_end) {
|
|
NewSelectionData.push({
|
|
Cell: CurCell,
|
|
Row: CurRow
|
|
});
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case c_oAscTableSelectionType.Cell:
|
|
default:
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
NewSelectionData = this.Selection.Data;
|
|
} else {
|
|
NewSelectionData.push({
|
|
Row: this.CurCell.Row.Index,
|
|
Cell: this.CurCell.Index
|
|
});
|
|
}
|
|
break;
|
|
}
|
|
this.Selection.Use = true;
|
|
this.Selection.Start = false;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
this.Selection.Data = NewSelectionData;
|
|
this.Selection.Type2 = table_Selection_Common;
|
|
this.Selection.Data2 = null;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: NewSelectionData[0].Row,
|
|
Cell: NewSelectionData[0].Cell
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: NewSelectionData[NewSelectionData.length - 1].Row,
|
|
Cell: NewSelectionData[NewSelectionData.length - 1].Cell
|
|
};
|
|
},
|
|
Check_Split: function () {
|
|
if (true === this.Is_InnerTable()) {
|
|
return this.CurCell.Content.Table_CheckSplit();
|
|
}
|
|
if (! (false === this.Selection.Use || (true === this.Selection.Use && (table_Selection_Text === this.Selection.Type || (table_Selection_Cell === this.Selection.Type && 1 === this.Selection.Data.length))))) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
Check_Merge: function () {
|
|
if (true === this.Is_InnerTable()) {
|
|
return this.CurCell.Content.Table_CheckMerge();
|
|
}
|
|
if (true != this.Selection.Use || table_Selection_Cell != this.Selection.Type || this.Selection.Data.length <= 1) {
|
|
return false;
|
|
}
|
|
return this.Internal_CheckMerge().bCanMerge;
|
|
},
|
|
Undo: function (Data) {
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_Table_SetStyleIndex:
|
|
this.styleIndex = Data.oldPr;
|
|
break;
|
|
case historyitem_Table_DocNext:
|
|
this.Next = Data.Old;
|
|
break;
|
|
case historyitem_Table_DocPrev:
|
|
this.Prev = Data.Old;
|
|
break;
|
|
case historyitem_Table_Parent:
|
|
this.Parent = Data.Old;
|
|
break;
|
|
case historyitem_Table_TableW:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableW = undefined;
|
|
} else {
|
|
this.Pr.TableW = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableLayout:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableLayout = undefined;
|
|
} else {
|
|
this.Pr.TableLayout = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableCellMar:
|
|
if (undefined === Data.Old.Left) {
|
|
this.Pr.TableCellMar.Left = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Left = Data.Old.Left;
|
|
}
|
|
if (undefined === Data.Old.Right) {
|
|
this.Pr.TableCellMar.Right = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Right = Data.Old.Right;
|
|
}
|
|
if (undefined === Data.Old.Top) {
|
|
this.Pr.TableCellMar.Top = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Top = Data.Old.Top;
|
|
}
|
|
if (undefined === Data.Old.Bottom) {
|
|
this.Pr.TableCellMar.Bottom = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Bottom = Data.Old.Bottom;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableAlign:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.Jc = undefined;
|
|
} else {
|
|
this.Pr.Jc = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableInd:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableInd = undefined;
|
|
} else {
|
|
this.Pr.TableInd = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Left:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableBorders.Left = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Left = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Right:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableBorders.Right = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Right = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Top:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableBorders.Top = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Top = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Bottom:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableBorders.Bottom = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Bottom = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideH:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableBorders.InsideH = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.InsideH = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideV:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableBorders.InsideV = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.InsideV = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableShd:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.Shd = undefined;
|
|
} else {
|
|
this.Pr.Shd = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_Inline:
|
|
this.Inline = Data.Old;
|
|
break;
|
|
case historyitem_Table_AddRow:
|
|
this.Content.splice(Data.Pos, 1);
|
|
this.TableRowsBottom.splice(Data.Pos, 1);
|
|
this.RowsInfo.splice(Data.Pos, 1);
|
|
this.Internal_ReIndexing(Data.Pos);
|
|
break;
|
|
case historyitem_Table_RemoveRow:
|
|
this.Content.splice(Data.Pos, 0, Data.Item.Row);
|
|
this.TableRowsBottom.splice(Data.Pos, 0, Data.Item.TableRowsBottom);
|
|
this.RowsInfo.splice(Data.Pos, 0, Data.Item.RowsInfo);
|
|
this.Internal_ReIndexing(Data.Pos);
|
|
break;
|
|
case historyitem_Table_TableGrid:
|
|
this.TableGrid = Data.Old;
|
|
break;
|
|
case historyitem_Table_TableLook:
|
|
this.TableLook = Data.Old;
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_AllowOverlap:
|
|
this.AllowOverlap = Data.Old;
|
|
break;
|
|
case historyitem_Table_PositionH:
|
|
this.PositionH.RelativeFrom = Data.Old.RelativeFrom;
|
|
this.PositionH.Align = Data.Old.Align;
|
|
this.PositionH.Value = Data.Old.Value;
|
|
break;
|
|
case historyitem_Table_PositionV:
|
|
this.PositionV.RelativeFrom = Data.Old.RelativeFrom;
|
|
this.PositionV.Align = Data.Old.Align;
|
|
this.PositionV.Value = Data.Old.Value;
|
|
break;
|
|
case historyitem_Table_Distance:
|
|
this.Distance.L = Data.Old.Left;
|
|
this.Distance.T = Data.Old.Top;
|
|
this.Distance.R = Data.Old.Right;
|
|
this.Distance.B = Data.Old.Bottom;
|
|
break;
|
|
case historyitem_Table_TableStyleColBandSize:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableStyleColBandSize = undefined;
|
|
} else {
|
|
this.Pr.TableStyleColBandSize = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableStyleRowBandSize:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableStyleRowBandSize = undefined;
|
|
} else {
|
|
this.Pr.TableStyleRowBandSize = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableStyle:
|
|
this.styleIndex = Data.Old;
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_Pr:
|
|
this.Pr = Data.Old;
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
}
|
|
if (this.Parent) {
|
|
this.Parent.onParagraphChanged();
|
|
}
|
|
},
|
|
Redo: function (Data) {
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_Table_SetStyleIndex:
|
|
this.styleIndex = Data.newPr;
|
|
break;
|
|
case historyitem_Table_DocNext:
|
|
this.Next = Data.New;
|
|
break;
|
|
case historyitem_Table_DocPrev:
|
|
this.Prev = Data.New;
|
|
break;
|
|
case historyitem_Table_Parent:
|
|
this.Parent = Data.New;
|
|
break;
|
|
case historyitem_Table_TableW:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableW = undefined;
|
|
} else {
|
|
this.Pr.TableW = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableLayout:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableLayout = undefined;
|
|
} else {
|
|
this.Pr.TableLayout = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableCellMar:
|
|
if (undefined === Data.New.Left) {
|
|
this.Pr.TableCellMar.Left = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Left = Data.New.Left;
|
|
}
|
|
if (undefined === Data.New.Right) {
|
|
this.Pr.TableCellMar.Right = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Right = Data.New.Right;
|
|
}
|
|
if (undefined === Data.New.Top) {
|
|
this.Pr.TableCellMar.Top = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Top = Data.New.Top;
|
|
}
|
|
if (undefined === Data.New.Bottom) {
|
|
this.Pr.TableCellMar.Bottom = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Bottom = Data.New.Bottom;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableAlign:
|
|
if (undefined === Data.New) {
|
|
this.Pr.Jc = undefined;
|
|
} else {
|
|
this.Pr.Jc = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableInd:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableInd = undefined;
|
|
} else {
|
|
this.Pr.TableInd = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Left:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableBorders.Left = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Left = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Right:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableBorders.Right = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Right = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Top:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableBorders.Top = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Top = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Bottom:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableBorders.Bottom = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Bottom = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideH:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableBorders.InsideH = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.InsideH = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideV:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableBorders.InsideV = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.InsideV = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableShd:
|
|
if (undefined === Data.New) {
|
|
this.Pr.Shd = undefined;
|
|
} else {
|
|
this.Pr.Shd = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_Inline:
|
|
this.Inline = Data.New;
|
|
break;
|
|
case historyitem_Table_AddRow:
|
|
this.Content.splice(Data.Pos, 0, Data.Item.Row);
|
|
this.TableRowsBottom.splice(Data.Pos, 0, Data.Item.TableRowsBottom);
|
|
this.RowsInfo.splice(Data.Pos, 0, Data.Item.RowsInfo);
|
|
this.Internal_ReIndexing(Data.Pos);
|
|
break;
|
|
case historyitem_Table_RemoveRow:
|
|
this.Content.splice(Data.Pos, 1);
|
|
this.TableRowsBottom.splice(Data.Pos, 1);
|
|
this.RowsInfo.splice(Data.Pos, 1);
|
|
this.Internal_ReIndexing(Data.Pos);
|
|
break;
|
|
case historyitem_Table_TableGrid:
|
|
this.TableGrid = Data.New;
|
|
break;
|
|
case historyitem_Table_TableLook:
|
|
this.TableLook = Data.New;
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_AllowOverlap:
|
|
this.AllowOverlap = Data.New;
|
|
break;
|
|
case historyitem_Table_PositionH:
|
|
this.PositionH.RelativeFrom = Data.New.RelativeFrom;
|
|
this.PositionH.Align = Data.New.Align;
|
|
this.PositionH.Value = Data.New.Value;
|
|
break;
|
|
case historyitem_Table_PositionV:
|
|
this.PositionV.RelativeFrom = Data.New.RelativeFrom;
|
|
this.PositionV.Align = Data.New.Align;
|
|
this.PositionV.Value = Data.New.Value;
|
|
break;
|
|
case historyitem_Table_Distance:
|
|
this.Distance.L = Data.New.Left;
|
|
this.Distance.T = Data.New.Top;
|
|
this.Distance.R = Data.New.Right;
|
|
this.Distance.B = Data.New.Bottom;
|
|
break;
|
|
case historyitem_Table_TableStyleColBandSize:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableStyleColBandSize = undefined;
|
|
} else {
|
|
this.Pr.TableStyleColBandSize = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableStyleRowBandSize:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableStyleRowBandSize = undefined;
|
|
} else {
|
|
this.Pr.TableStyleRowBandSize = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableStyle:
|
|
this.styleIndex = Data.New;
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_Pr:
|
|
this.Pr = Data.New;
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
}
|
|
if (this.Parent) {
|
|
this.Parent.onParagraphChanged();
|
|
}
|
|
},
|
|
Get_SelectionState: function () {
|
|
var TableState = new Object();
|
|
TableState.Selection = {
|
|
Start: this.Selection.Start,
|
|
Use: this.Selection.Use,
|
|
StartPos: {
|
|
Pos: {
|
|
Row: this.Selection.StartPos.Pos.Row,
|
|
Cell: this.Selection.StartPos.Pos.Cell
|
|
},
|
|
X: this.Selection.StartPos.X,
|
|
Y: this.Selection.StartPos.Y
|
|
},
|
|
EndPos: {
|
|
Pos: {
|
|
Row: this.Selection.EndPos.Pos.Row,
|
|
Cell: this.Selection.EndPos.Pos.Cell
|
|
},
|
|
X: this.Selection.EndPos.X,
|
|
Y: this.Selection.EndPos.Y
|
|
},
|
|
Type: this.Selection.Type,
|
|
Data: null,
|
|
Type2: this.Selection.Type2,
|
|
Data2: null
|
|
};
|
|
TableState.Selection.Data = new Array();
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
TableState.Selection.Data[Index] = {
|
|
Row: this.Selection.Data[Index].Row,
|
|
Cell: this.Selection.Data[Index].Cell
|
|
};
|
|
}
|
|
}
|
|
TableState.CurCell = {
|
|
Row: this.CurCell.Row.Index,
|
|
Cell: this.CurCell.Index
|
|
};
|
|
var State = null;
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
State = this.CurCell.Content.Get_SelectionState();
|
|
} else {
|
|
State = new Array();
|
|
}
|
|
State.push(TableState);
|
|
return State;
|
|
},
|
|
Set_SelectionState: function (State, StateIndex) {
|
|
if (State.length <= 0) {
|
|
return;
|
|
}
|
|
var TableState = State[StateIndex];
|
|
this.Selection = {
|
|
Start: TableState.Selection.Start,
|
|
Use: TableState.Selection.Use,
|
|
StartPos: {
|
|
Pos: {
|
|
Row: TableState.Selection.StartPos.Pos.Row,
|
|
Cell: TableState.Selection.StartPos.Pos.Cell
|
|
},
|
|
X: TableState.Selection.StartPos.X,
|
|
Y: TableState.Selection.StartPos.Y
|
|
},
|
|
EndPos: {
|
|
Pos: {
|
|
Row: TableState.Selection.EndPos.Pos.Row,
|
|
Cell: TableState.Selection.EndPos.Pos.Cell
|
|
},
|
|
X: TableState.Selection.EndPos.X,
|
|
Y: TableState.Selection.EndPos.Y
|
|
},
|
|
Type: TableState.Selection.Type,
|
|
Data: null,
|
|
Type2: TableState.Selection.Type2,
|
|
Data2: null
|
|
};
|
|
this.Selection.Data = new Array();
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
for (var Index = 0; Index < TableState.Selection.Data.length; Index++) {
|
|
this.Selection.Data[Index] = {
|
|
Row: TableState.Selection.Data[Index].Row,
|
|
Cell: TableState.Selection.Data[Index].Cell
|
|
};
|
|
}
|
|
}
|
|
this.CurCell = this.Content[TableState.CurCell.Row].Get_Cell(TableState.CurCell.Cell);
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
this.CurCell.Content.Set_SelectionState(State, StateIndex - 1);
|
|
}
|
|
},
|
|
Get_ParentObject_or_DocumentPos: function () {
|
|
return this.Parent.Get_ParentObject_or_DocumentPos(this.Index);
|
|
},
|
|
Refresh_RecalcData: function (Data) {
|
|
var Type = Data.Type;
|
|
var bNeedRecalc = false;
|
|
var nRowIndex = 0;
|
|
switch (Type) {
|
|
case historyitem_Table_DocNext:
|
|
case historyitem_Table_DocPrev:
|
|
case historyitem_Table_TableShd:
|
|
break;
|
|
case historyitem_Table_Parent:
|
|
case historyitem_Table_TableW:
|
|
case historyitem_Table_TableLayout:
|
|
case historyitem_Table_TableCellMar:
|
|
case historyitem_Table_TableAlign:
|
|
case historyitem_Table_TableInd:
|
|
case historyitem_Table_TableBorder_Left:
|
|
case historyitem_Table_TableBorder_Right:
|
|
case historyitem_Table_TableBorder_Top:
|
|
case historyitem_Table_TableBorder_Bottom:
|
|
case historyitem_Table_TableBorder_InsideH:
|
|
case historyitem_Table_TableBorder_InsideV:
|
|
case historyitem_Table_Inline:
|
|
case historyitem_Table_TableLook:
|
|
case historyitem_Table_AllowOverlap:
|
|
case historyitem_Table_PositionH:
|
|
case historyitem_Table_PositionV:
|
|
case historyitem_Table_Distance:
|
|
case historyitem_Table_TableStyleColBandSize:
|
|
case historyitem_Table_TableStyleRowBandSize:
|
|
case historyitem_Table_TableStyle:
|
|
case historyitem_Table_Pr:
|
|
bNeedRecalc = true;
|
|
break;
|
|
case historyitem_Table_AddRow:
|
|
case historyitem_Table_RemoveRow:
|
|
bNeedRecalc = true;
|
|
nRowIndex = Data.Pos;
|
|
break;
|
|
case historyitem_Table_TableGrid:
|
|
bNeedRecalc = true;
|
|
break;
|
|
}
|
|
if (true === bNeedRecalc) {
|
|
this.Refresh_RecalcData2(nRowIndex, 0);
|
|
}
|
|
},
|
|
Refresh_RecalcData2: function (RowIndex, Page_rel) {
|
|
if (this.Index >= 0) {
|
|
var _RowIndex = Math.min(RowIndex, this.RowsInfo.length - 1);
|
|
var _Page_rel = (_RowIndex < 0 ? this.PageNum : Page_rel + this.PageNum);
|
|
this.Parent.Refresh_RecalcData2(this.Index, _Page_rel);
|
|
}
|
|
},
|
|
Document_Is_SelectionLocked: function (CheckType, bCheckInner) {
|
|
switch (CheckType) {
|
|
case changestype_Paragraph_Content:
|
|
case changestype_Paragraph_Properties:
|
|
case changestype_Document_Content:
|
|
case changestype_Document_Content_Add:
|
|
case changestype_Remove:
|
|
case changestype_Delete:
|
|
case changestype_Image_Properties:
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
var Count = Cells_array.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
Cell.Content.Document_Is_SelectionLocked(CheckType);
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
}
|
|
} else {
|
|
this.CurCell.Content.Document_Is_SelectionLocked(CheckType);
|
|
}
|
|
break;
|
|
case changestype_Table_Properties:
|
|
if (false != bCheckInner && true === this.Is_InnerTable()) {
|
|
this.CurCell.Content.Document_Is_SelectionLocked(CheckType);
|
|
} else {
|
|
this.Lock.Check(this.Get_Id());
|
|
}
|
|
break;
|
|
case changestype_Table_RemoveCells:
|
|
if (false != bCheckInner && true === this.Is_InnerTable()) {
|
|
this.CurCell.Content.Document_Is_SelectionLocked(CheckType);
|
|
} else {
|
|
this.Lock.Check(this.Get_Id());
|
|
}
|
|
break;
|
|
case changestype_Document_SectPr:
|
|
case changestype_HdrFtr:
|
|
CollaborativeEditing.Add_CheckLock(true);
|
|
break;
|
|
}
|
|
},
|
|
Save_Changes: function (Data, Writer) {
|
|
Writer.WriteLong(historyitem_type_Table);
|
|
var Type = Data.Type;
|
|
Writer.WriteLong(Type);
|
|
switch (Type) {
|
|
case historyitem_Table_SetStyleIndex:
|
|
Writer.WriteBool(isRealNumber(Data.newPr));
|
|
if (isRealNumber(Data.newPr)) {
|
|
Writer.WriteLong(Data.newPr);
|
|
}
|
|
break;
|
|
case historyitem_Table_DocNext:
|
|
case historyitem_Table_DocPrev:
|
|
case historyitem_Table_Parent:
|
|
if (null != Data.New) {
|
|
Writer.WriteString2(Data.New.Get_Id());
|
|
} else {
|
|
Writer.WriteString2("");
|
|
}
|
|
break;
|
|
case historyitem_Table_TableW:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Write_ToBinary(Writer);
|
|
}
|
|
break;
|
|
case historyitem_Table_TableLayout:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteLong(Data.New);
|
|
}
|
|
break;
|
|
case historyitem_Table_TableCellMar:
|
|
if (undefined === Data.New.Left) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Left.Write_ToBinary(Writer);
|
|
}
|
|
if (undefined === Data.New.Right) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Right.Write_ToBinary(Writer);
|
|
}
|
|
if (undefined === Data.New.Top) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Top.Write_ToBinary(Writer);
|
|
}
|
|
if (undefined === Data.New.Bottom) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Bottom.Write_ToBinary(Writer);
|
|
}
|
|
break;
|
|
case historyitem_Table_TableAlign:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteLong(Data.New);
|
|
}
|
|
break;
|
|
case historyitem_Table_TableInd:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteDouble(Data.New);
|
|
}
|
|
break;
|
|
case historyitem_Table_TableBorder_Left:
|
|
case historyitem_Table_TableBorder_Right:
|
|
case historyitem_Table_TableBorder_Top:
|
|
case historyitem_Table_TableBorder_Bottom:
|
|
case historyitem_Table_TableBorder_InsideH:
|
|
case historyitem_Table_TableBorder_InsideV:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Write_ToBinary(Writer);
|
|
}
|
|
break;
|
|
case historyitem_Table_TableShd:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Write_ToBinary(Writer);
|
|
}
|
|
break;
|
|
case historyitem_Table_Inline:
|
|
Writer.WriteBool(Data.New);
|
|
break;
|
|
case historyitem_Table_AddRow:
|
|
var bArray = Data.UseArray;
|
|
var Count = 1;
|
|
Writer.WriteLong(Count);
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
if (true === bArray) {
|
|
Writer.WriteLong(Data.PosArray[Index]);
|
|
} else {
|
|
Writer.WriteLong(Data.Pos + Index);
|
|
}
|
|
Writer.WriteString2(Data.Item.Row.Get_Id());
|
|
}
|
|
break;
|
|
case historyitem_Table_RemoveRow:
|
|
var bArray = Data.UseArray;
|
|
var Count = 1;
|
|
var StartPos = Writer.GetCurPosition();
|
|
Writer.Skip(4);
|
|
var RealCount = Count;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
if (true === bArray) {
|
|
if (false === Data.PosArray[Index]) {
|
|
RealCount--;
|
|
} else {
|
|
Writer.WriteLong(Data.PosArray[Index]);
|
|
}
|
|
} else {
|
|
Writer.WriteLong(Data.Pos);
|
|
}
|
|
}
|
|
var EndPos = Writer.GetCurPosition();
|
|
Writer.Seek(StartPos);
|
|
Writer.WriteLong(RealCount);
|
|
Writer.Seek(EndPos);
|
|
break;
|
|
case historyitem_Table_TableGrid:
|
|
var Count = Data.New.length;
|
|
Writer.WriteLong(Count);
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
Writer.WriteDouble(Data.New[Index]);
|
|
}
|
|
break;
|
|
case historyitem_Table_TableLook:
|
|
Data.New.Write_ToBinary(Writer);
|
|
break;
|
|
case historyitem_Table_AllowOverlap:
|
|
Writer.WriteBool(Data.New);
|
|
break;
|
|
case historyitem_Table_PositionH:
|
|
case historyitem_Table_PositionV:
|
|
Writer.WriteLong(Data.New.RelativeFrom);
|
|
Writer.WriteBool(Data.New.Align);
|
|
if (true === Data.New.Align) {
|
|
Writer.WriteLong(Data.New.Value);
|
|
} else {
|
|
Writer.WriteDouble(Data.New.Value);
|
|
}
|
|
break;
|
|
case historyitem_Table_Distance:
|
|
Writer.WriteDouble(Data.New.Left);
|
|
Writer.WriteDouble(Data.New.Top);
|
|
Writer.WriteDouble(Data.New.Right);
|
|
Writer.WriteDouble(Data.New.Bottom);
|
|
break;
|
|
case historyitem_Table_TableStyleColBandSize:
|
|
case historyitem_Table_TableStyleRowBandSize:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteLong(Data.New);
|
|
}
|
|
break;
|
|
case historyitem_Table_TableStyle:
|
|
if (null === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteString2(Data.New);
|
|
}
|
|
break;
|
|
case historyitem_Table_Pr:
|
|
Data.New.Write_ToBinary(Writer);
|
|
break;
|
|
}
|
|
return Writer;
|
|
},
|
|
Save_Changes2: function (Data, Writer) {
|
|
var bRetValue = false;
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_Table_DocNext:
|
|
case historyitem_Table_DocPrev:
|
|
case historyitem_Table_Parent:
|
|
case historyitem_Table_TableW:
|
|
case historyitem_Table_TableLayout:
|
|
case historyitem_Table_TableCellMar:
|
|
case historyitem_Table_TableAlign:
|
|
case historyitem_Table_TableInd:
|
|
case historyitem_Table_TableBorder_Left:
|
|
case historyitem_Table_TableBorder_Right:
|
|
case historyitem_Table_TableBorder_Top:
|
|
case historyitem_Table_TableBorder_Bottom:
|
|
case historyitem_Table_TableBorder_InsideH:
|
|
case historyitem_Table_TableBorder_InsideV:
|
|
case historyitem_Table_TableShd:
|
|
case historyitem_Table_Inline:
|
|
break;
|
|
case historyitem_Table_AddRow:
|
|
break;
|
|
case historyitem_Table_RemoveRow:
|
|
case historyitem_Table_TableGrid:
|
|
break;
|
|
}
|
|
return bRetValue;
|
|
},
|
|
Load_Changes: function (Reader, Reader2) {
|
|
var ClassType = Reader.GetLong();
|
|
if (historyitem_type_Table != ClassType) {
|
|
return;
|
|
}
|
|
var Type = Reader.GetLong();
|
|
switch (Type) {
|
|
case historyitem_Table_SetStyleIndex:
|
|
if (Reader.GetBool()) {
|
|
this.styleIndex = Reader.GetLong();
|
|
} else {
|
|
this.styleIndex = -1;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_DocNext:
|
|
this.Next = g_oTableId.Get_ById(Reader.GetString2());
|
|
break;
|
|
case historyitem_Table_DocPrev:
|
|
this.Prev = g_oTableId.Get_ById(Reader.GetString2());
|
|
break;
|
|
case historyitem_Table_Parent:
|
|
var LinkData = new Object();
|
|
LinkData.Parent = Reader.GetString2();
|
|
LinkData.Type = historyitem_Table_Parent;
|
|
CollaborativeEditing.Add_LinkData(this, LinkData);
|
|
break;
|
|
case historyitem_Table_TableW:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableW = undefined;
|
|
} else {
|
|
this.Pr.TableW = new CTableMeasurement(tblwidth_Auto, 0);
|
|
this.Pr.TableW.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableLayout:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableLayout = undefined;
|
|
} else {
|
|
this.Pr.TableLayout = Reader.GetLong();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableCellMar:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableCellMar.Left = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Left = new CTableMeasurement(tblwidth_Mm, 0);
|
|
this.Pr.TableCellMar.Left.Read_FromBinary(Reader);
|
|
}
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableCellMar.Right = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Right = new CTableMeasurement(tblwidth_Mm, 0);
|
|
this.Pr.TableCellMar.Right.Read_FromBinary(Reader);
|
|
}
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableCellMar.Top = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Top = new CTableMeasurement(tblwidth_Mm, 0);
|
|
this.Pr.TableCellMar.Top.Read_FromBinary(Reader);
|
|
}
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableCellMar.Bottom = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar.Bottom = new CTableMeasurement(tblwidth_Mm, 0);
|
|
this.Pr.TableCellMar.Bottom.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableAlign:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.Jc = undefined;
|
|
} else {
|
|
this.Pr.Jc = Reader.GetLong();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableInd:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableInd = undefined;
|
|
} else {
|
|
this.Pr.TableInd = Reader.GetDouble();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Left:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableBorders.Left = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Left = new CDocumentBorder();
|
|
this.Pr.TableBorders.Left.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Right:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableBorders.Right = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Right = new CDocumentBorder();
|
|
this.Pr.TableBorders.Right.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Top:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableBorders.Top = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Top = new CDocumentBorder();
|
|
this.Pr.TableBorders.Top.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_Bottom:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableBorders.Bottom = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.Bottom = new CDocumentBorder();
|
|
this.Pr.TableBorders.Bottom.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideH:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableBorders.InsideH = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.InsideH = new CDocumentBorder();
|
|
this.Pr.TableBorders.InsideH.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideV:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableBorders.InsideV = undefined;
|
|
} else {
|
|
this.Pr.TableBorders.InsideV = new CDocumentBorder();
|
|
this.Pr.TableBorders.InsideV.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableShd:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.Shd = undefined;
|
|
} else {
|
|
this.Pr.Shd = new CDocumentShd();
|
|
this.Pr.Shd.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_Inline:
|
|
this.Inline = Reader.GetBool();
|
|
break;
|
|
case historyitem_Table_AddRow:
|
|
var Count = Reader.GetLong();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Pos = this.m_oContentChanges.Check(contentchanges_Add, Reader.GetLong());
|
|
var Element = g_oTableId.Get_ById(Reader.GetString2());
|
|
if (null != Element) {
|
|
this.Content.splice(Pos, 0, Element);
|
|
}
|
|
}
|
|
break;
|
|
case historyitem_Table_RemoveRow:
|
|
var Count = Reader.GetLong();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Pos = this.m_oContentChanges.Check(contentchanges_Remove, Reader.GetLong());
|
|
if (false === Pos) {
|
|
continue;
|
|
}
|
|
this.Content.splice(Pos, 1);
|
|
}
|
|
break;
|
|
case historyitem_Table_TableGrid:
|
|
var Count = Reader.GetLong();
|
|
var NewGrid = new Array();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
NewGrid.push(Reader.GetDouble());
|
|
}
|
|
this.TableGrid = NewGrid;
|
|
break;
|
|
case historyitem_Table_TableLook:
|
|
var TableLook = new CTableLook();
|
|
TableLook.Read_FromBinary(Reader);
|
|
this.TableLook = TableLook;
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_AllowOverlap:
|
|
this.AllowOverlap = Reader.GetBool();
|
|
break;
|
|
case historyitem_Table_PositionH:
|
|
this.PositionH.RelativeFrom = Reader.GetLong();
|
|
this.PositionH.Align = Reader.GetBool();
|
|
if (true === this.PositionH.Align) {
|
|
this.PositionH.Value = Reader.GetLong();
|
|
} else {
|
|
this.PositionH.Value = Reader.GetDouble();
|
|
}
|
|
break;
|
|
case historyitem_Table_PositionV:
|
|
this.PositionV.RelativeFrom = Reader.GetLong();
|
|
this.PositionV.Align = Reader.GetBool();
|
|
if (true === this.PositionV.Align) {
|
|
this.PositionV.Value = Reader.GetLong();
|
|
} else {
|
|
this.PositionV.Value = Reader.GetDouble();
|
|
}
|
|
break;
|
|
case historyitem_Table_Distance:
|
|
this.Distance.L = Reader.GetDouble();
|
|
this.Distance.T = Reader.GetDouble();
|
|
this.Distance.R = Reader.GetDouble();
|
|
this.Distance.B = Reader.GetDouble();
|
|
break;
|
|
case historyitem_Table_TableStyleColBandSize:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableStyleColBandSize = undefined;
|
|
} else {
|
|
this.Pr.TableStyleColBandSize = Reader.GetLong();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableStyleRowBandSize:
|
|
if (true === Reader.GetBool()) {
|
|
this.Pr.TableStyleRowBandSize = undefined;
|
|
} else {
|
|
this.Pr.TableStyleRowBandSize = Reader.GetLong();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_TableStyle:
|
|
if (true === Reader.GetBool()) {
|
|
this.styleIndex = null;
|
|
} else {
|
|
this.styleIndex = Reader.GetString2();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_Table_Pr:
|
|
this.Pr = new CTablePr();
|
|
this.Pr.Read_FromBinary(Reader);
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
}
|
|
if (this.Parent) {
|
|
this.Parent.onParagraphChanged();
|
|
}
|
|
return true;
|
|
},
|
|
Write_ToBinary2: function (Writer) {
|
|
Writer.WriteLong(historyitem_type_Table);
|
|
Writer.WriteLong(type_Table);
|
|
Writer.WriteString2(this.Id);
|
|
Writer.WriteString2(this.Parent.Get_Id());
|
|
Writer.WriteString2(null === this.TableStyle ? "" : this.TableStyle);
|
|
Writer.WriteBool(this.Inline);
|
|
var GridCount = this.TableGrid.length;
|
|
Writer.WriteLong(GridCount);
|
|
for (var Index = 0; Index < GridCount; Index++) {
|
|
Writer.WriteDouble(this.TableGrid[Index]);
|
|
}
|
|
Writer.WriteDouble(this.X_origin);
|
|
Writer.WriteDouble(this.X);
|
|
Writer.WriteDouble(this.Y);
|
|
Writer.WriteDouble(this.XLimit);
|
|
Writer.WriteDouble(this.YLimit);
|
|
this.Pr.Write_ToBinary(Writer);
|
|
var RowsCount = this.Content.length;
|
|
Writer.WriteLong(RowsCount);
|
|
for (var Index = 0; Index < RowsCount; Index++) {
|
|
Writer.WriteString2(this.Content[Index].Get_Id());
|
|
}
|
|
},
|
|
Read_FromBinary2: function (Reader) {
|
|
Reader.GetLong();
|
|
this.Id = Reader.GetString2();
|
|
var LinkData = new Object();
|
|
LinkData.Parent = Reader.GetString2();
|
|
LinkData.Type = historyitem_Table_Parent;
|
|
CollaborativeEditing.Add_LinkData(this, LinkData);
|
|
var TableStyleId = Reader.GetString2();
|
|
this.TableStyle = (TableStyleId === "" ? null : TableStyleId);
|
|
this.Inline = Reader.GetBool();
|
|
var GridCount = Reader.GetLong();
|
|
this.TableGrid = new Array();
|
|
for (var Index = 0; Index < GridCount; Index++) {
|
|
this.TableGrid.push(Reader.GetDouble());
|
|
}
|
|
this.X_origin = Reader.GetDouble();
|
|
this.X = Reader.GetDouble();
|
|
this.Y = Reader.GetDouble();
|
|
this.XLimit = Reader.GetDouble();
|
|
this.YLimit = Reader.GetDouble();
|
|
this.Pr = new CTablePr();
|
|
this.Pr.Read_FromBinary(Reader);
|
|
this.Recalc_CompiledPr();
|
|
var Count = Reader.GetLong();
|
|
this.Content = new Array();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Row = g_oTableId.Get_ById(Reader.GetString2());
|
|
this.Content.push(Row);
|
|
}
|
|
this.Internal_ReIndexing();
|
|
CollaborativeEditing.Add_NewObject(this);
|
|
this.DrawingDocument = editor.WordControl.m_oLogicDocument.DrawingDocument;
|
|
var LinkData = new Object();
|
|
LinkData.CurCell = true;
|
|
CollaborativeEditing.Add_LinkData(this, LinkData);
|
|
},
|
|
Load_LinkData: function (LinkData) {
|
|
if ("undefined" != typeof(LinkData) && "undefined" != typeof(LinkData.Type)) {
|
|
switch (LinkData.Type) {
|
|
case historyitem_Table_DocNext:
|
|
this.Next = g_oTableId.Get_ById(LinkData.Next);
|
|
break;
|
|
case historyitem_Table_DocPrev:
|
|
this.Prev = g_oTableId.Get_ById(LinkData.Prev);
|
|
break;
|
|
case historyitem_Table_Parent:
|
|
this.Parent = g_oTableId.Get_ById(LinkData.Parent);
|
|
break;
|
|
}
|
|
}
|
|
if ("undefined" != typeof(LinkData) && "undefined" != typeof(LinkData.CurCell)) {
|
|
if (this.Content.length > 0 && this.Content[0].Get_CellsCount() > 0) {
|
|
this.CurCell = this.Content[0].Get_Cell(0);
|
|
}
|
|
}
|
|
},
|
|
Hyperlink_Add: function (HyperProps) {
|
|
return this.CurCell.Content.Hyperlink_Add(HyperProps);
|
|
},
|
|
Hyperlink_Modify: function (HyperProps) {
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
this.CurCell.Content.Hyperlink_Modify(HyperProps);
|
|
}
|
|
return false;
|
|
},
|
|
Hyperlink_Remove: function () {
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
this.CurCell.Content.Hyperlink_Remove();
|
|
}
|
|
},
|
|
Hyperlink_CanAdd: function (bCheckInHyperlink) {
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
return this.CurCell.Content.Hyperlink_CanAdd(bCheckInHyperlink);
|
|
}
|
|
return false;
|
|
},
|
|
Hyperlink_Check: function (bCheckEnd) {
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
return this.CurCell.Content.Hyperlink_Check(bCheckEnd);
|
|
}
|
|
return null;
|
|
},
|
|
Add_Comment: function (Comment, bStart, bEnd) {
|
|
if (true === this.ApplyToAll) {
|
|
var RowsCount = this.Content.length;
|
|
var CellsCount = this.Content[RowsCount - 1].Get_CellsCount();
|
|
if (true === bStart && true === bEnd && RowsCount <= 1 && CellsCount <= 1) {
|
|
var Cell_Content = this.Content[0].Get_Cell(0).Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell_Content.Add_Comment(Comment, true, true);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
} else {
|
|
if (true === bStart) {
|
|
var Cell_Content = this.Content[0].Get_Cell(0).Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell_Content.Add_Comment(Comment, true, false);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (true === bEnd) {
|
|
var Cell_Content = this.Content[RowsCount - 1].Get_Cell(CellsCount - 1).Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell_Content.Add_Comment(Comment, false, true);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
}
|
|
} else {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
if (true === bStart && true === bEnd && this.Selection.Data.length <= 1) {
|
|
var Pos = this.Selection.Data[0];
|
|
var Cell_Content = this.Content[Pos.Row].Get_Cell(Pos.Cell).Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell_Content.Add_Comment(Comment, true, true);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
} else {
|
|
if (true === bStart) {
|
|
var Pos = this.Selection.Data[0];
|
|
var Cell_Content = this.Content[Pos.Row].Get_Cell(Pos.Cell).Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell_Content.Add_Comment(Comment, true, false);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (true === bEnd) {
|
|
var Pos = this.Selection.Data[this.Selection.Data.length - 1];
|
|
var Cell_Content = this.Content[Pos.Row].Get_Cell(Pos.Cell).Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell_Content.Add_Comment(Comment, false, true);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
}
|
|
} else {
|
|
this.CurCell.Content.Add_Comment(Comment, bStart, bEnd);
|
|
}
|
|
}
|
|
},
|
|
CanAdd_Comment: function () {
|
|
if (true === this.ApplyToAll) {
|
|
if (this.Content.length > 1 || this.Content[0].Get_CellsCount() > 1) {
|
|
return true;
|
|
}
|
|
this.Content[0].Get_Cell(0).Content.Set_ApplyToAll(true);
|
|
var Result = this.Content[0].Get_Cell(0).Content.CanAdd_Comment();
|
|
this.Content[0].Get_Cell(0).Content.Set_ApplyToAll(false);
|
|
return Result;
|
|
} else {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
if (this.Selection.Data.length > 1) {
|
|
return true;
|
|
} else {
|
|
var Pos = this.Selection.Data[0];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
return Cell.Content.CanAdd_Comment();
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.CanAdd_Comment();
|
|
}
|
|
}
|
|
},
|
|
Cursor_MoveAt: function (X, Y, bLine, bDontChangeRealPos, PageNum) {
|
|
var PageIndex = PageNum - this.PageNum;
|
|
var Pos = this.Internal_GetCellByXY(X, Y, PageIndex);
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.Type2 = table_Selection_Common;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: Pos.Row,
|
|
Cell: Pos.Cell
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: Pos.Row,
|
|
Cell: Pos.Cell
|
|
};
|
|
this.CurCell = Cell;
|
|
this.DrawingDocument.TargetStart();
|
|
this.DrawingDocument.TargetShow();
|
|
this.CurCell.Content.Cursor_MoveAt(X, Y, false, true, PageIndex + this.Get_StartPage_Absolute());
|
|
this.RecalculateCurPos();
|
|
},
|
|
Selection_SetStart: function (X, Y, PageIndex, MouseEvent) {
|
|
var PageNum = PageIndex - this.PageNum;
|
|
if (PageNum < 0 || PageNum >= this.Pages.length) {
|
|
PageNum = 0;
|
|
}
|
|
var Result = this.Internal_CheckBorders(X, Y, PageNum);
|
|
var Pos = Result.Pos;
|
|
if (-1 === Result.Border) {
|
|
var bInnerTableBorder = (null != this.Is_TableBorder(X, Y, PageNum + this.Get_StartPage_Absolute()) ? true : false);
|
|
if (true === bInnerTableBorder) {
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
Cell.Content.Selection_SetStart(X, Y, PageNum, MouseEvent);
|
|
this.Selection.Type2 = table_Selection_Border_InnerTable;
|
|
this.Selection.Data2 = Cell;
|
|
} else {
|
|
this.Selection_Remove();
|
|
this.CurCell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
this.CurCell.Content.Selection_SetStart(X, Y, PageNum, MouseEvent);
|
|
this.Selection.Use = true;
|
|
this.Selection.Start = true;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.Type2 = table_Selection_Common;
|
|
this.Selection.Data2 = null;
|
|
this.Selection.StartPos.Pos = Pos;
|
|
this.Selection.StartPos.X = X;
|
|
this.Selection.StartPos.Y = Y;
|
|
this.Selection.StartPos.PageIndex = PageNum;
|
|
this.Selection.StartPos.MouseEvent = {
|
|
ClickCount: MouseEvent.ClickCount,
|
|
Type: MouseEvent.Type,
|
|
CtrlKey: MouseEvent.CtrlKey
|
|
};
|
|
}
|
|
} else {
|
|
this.Internal_Update_TableMarkup(Pos.Row, Pos.Cell, PageNum);
|
|
this.Selection.Type2 = table_Selection_Border;
|
|
this.Selection.Data2 = new Object();
|
|
this.Selection.Data2.PageNum = PageNum;
|
|
var Row = this.Content[Pos.Row];
|
|
var _X = parseInt(X / 2.5 + 0.5) * 2.5;
|
|
var _Y = parseInt(Y / 2.5 + 0.5) * 2.5;
|
|
if (0 === Result.Border || 2 === Result.Border) {
|
|
var Y_min = 0;
|
|
var Y_max = Page_Height;
|
|
this.Selection.Data2.bCol = false;
|
|
var Row_start = this.Pages[PageNum].FirstRow;
|
|
if (0 === Result.Border) {
|
|
this.Selection.Data2.Index = Pos.Row - Row_start;
|
|
} else {
|
|
this.Selection.Data2.Index = Result.Row - Row_start + 1;
|
|
}
|
|
if (0 != this.Selection.Data2.Index) {
|
|
var TempRow = this.Selection.Data2.Index + Row_start - 1;
|
|
Y_min = this.RowsInfo[TempRow].Y[PageNum];
|
|
}
|
|
this.Selection.Data2.Min = Y_min;
|
|
this.Selection.Data2.Max = Y_max;
|
|
if (null != this.Selection.Data2.Min) {
|
|
_Y = Math.max(_Y, this.Selection.Data2.Min);
|
|
}
|
|
if (null != this.Selection.Data2.Max) {
|
|
_Y = Math.min(_Y, this.Selection.Data2.Max);
|
|
}
|
|
} else {
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = (null === Row.Get_CellSpacing() ? 0 : Row.Get_CellSpacing());
|
|
var X_min = null;
|
|
var X_max = null;
|
|
this.Selection.Data2.bCol = true;
|
|
if (3 === Result.Border) {
|
|
this.Selection.Data2.Index = Pos.Cell;
|
|
} else {
|
|
this.Selection.Data2.Index = Pos.Cell + 1;
|
|
}
|
|
if (0 != this.Selection.Data2.Index) {
|
|
var Margins = Row.Get_Cell(this.Selection.Data2.Index - 1).Get_Margins();
|
|
if (0 != this.Selection.Data2.Index - 1 && this.Selection.Data2.Index != CellsCount) {
|
|
X_min = Row.Get_CellInfo(this.Selection.Data2.Index - 1).X_grid_start + Margins.Left.W + Margins.Right.W + CellSpacing;
|
|
} else {
|
|
X_min = Row.Get_CellInfo(this.Selection.Data2.Index - 1).X_grid_start + Margins.Left.W + Margins.Right.W + 1.5 * CellSpacing;
|
|
}
|
|
}
|
|
if (CellsCount != this.Selection.Data2.Index) {
|
|
var Margins = Row.Get_Cell(this.Selection.Data2.Index).Get_Margins();
|
|
if (CellsCount - 1 != this.Selection.Data2.Index) {
|
|
X_max = Row.Get_CellInfo(this.Selection.Data2.Index).X_grid_end - (Margins.Left.W + Margins.Right.W + CellSpacing);
|
|
} else {
|
|
X_max = Row.Get_CellInfo(this.Selection.Data2.Index).X_grid_end - (Margins.Left.W + Margins.Right.W + 1.5 * CellSpacing);
|
|
}
|
|
}
|
|
this.Selection.Data2.Min = X_min;
|
|
this.Selection.Data2.Max = X_max;
|
|
this.Selection.Data2.Pos = {
|
|
Row: Pos.Row,
|
|
Cell: Pos.Cell
|
|
};
|
|
if (null != this.Selection.Data2.Min) {
|
|
_X = Math.max(_X, this.Selection.Data2.Min);
|
|
}
|
|
if (null != this.Selection.Data2.Max) {
|
|
_X = Math.min(_X, this.Selection.Data2.Max);
|
|
}
|
|
}
|
|
this.Selection.Data2.X = _X;
|
|
this.Selection.Data2.Y = _Y;
|
|
this.DrawingDocument.LockCursorTypeCur();
|
|
}
|
|
},
|
|
Selection_SetEnd: function (X, Y, PageIndex, MouseEvent) {
|
|
var TablePr = this.Get_CompiledPr(false).TablePr;
|
|
var PageNum = PageIndex - this.PageNum;
|
|
if (PageNum < 0 || PageNum >= this.Pages.length) {
|
|
PageNum = 0;
|
|
}
|
|
if (this.Selection.Type2 === table_Selection_Border) {
|
|
if (true === editor.isViewMode || this.Selection.Data2.PageNum != PageIndex - this.PageNum) {
|
|
return;
|
|
}
|
|
var _X = parseInt(X / 2.5 + 0.5) * 2.5;
|
|
var _Y = parseInt(Y / 2.5 + 0.5) * 2.5;
|
|
var _pos_x = parseInt(this.Parent.transform.TransformPointX(X, Y) / 2.5 + 0.5) * 2.5;
|
|
var _pos_y = parseInt(this.Parent.transform.TransformPointY(X, Y) / 2.5 + 0.5) * 2.5;
|
|
if (true === this.Selection.Data2.bCol) {
|
|
if (null != this.Selection.Data2.Min) {
|
|
_X = Math.max(_X, this.Selection.Data2.Min);
|
|
_pos_x = Math.max(_pos_x, parseInt(this.Parent.transform.TransformPointX(this.Selection.Data2.Min, Y) / 2.5 + 0.5) * 2.5);
|
|
}
|
|
if (null != this.Selection.Data2.Max) {
|
|
_X = Math.min(_X, this.Selection.Data2.Max);
|
|
_pos_x = Math.min(_pos_x, parseInt(this.Parent.transform.TransformPointX(this.Selection.Data2.Max, Y) / 2.5 + 0.5) * 2.5);
|
|
}
|
|
this.DrawingDocument.UpdateTableRuler(this.Selection.Data2.bCol, this.Selection.Data2.Index, _pos_x);
|
|
} else {
|
|
if (null != this.Selection.Data2.Min) {
|
|
_Y = Math.max(_Y, this.Selection.Data2.Min);
|
|
_pos_y = Math.max(_pos_y, parseInt(this.Parent.transform.TransformPointY(X, this.Selection.Data2.Min) / 2.5 + 0.5) * 2.5);
|
|
}
|
|
if (null != this.Selection.Data2.Max) {
|
|
_Y = Math.min(_Y, this.Selection.Data2.Max);
|
|
_pos_y = Math.min(_pos_y, parseInt(this.Parent.transform.TransformPointY(X, this.Selection.Data2.Max) / 2.5 + 0.5) * 2.5);
|
|
}
|
|
this.DrawingDocument.UpdateTableRuler(this.Selection.Data2.bCol, this.Selection.Data2.Index, _pos_y);
|
|
}
|
|
this.Selection.Data2.X = _X;
|
|
this.Selection.Data2.Y = _Y;
|
|
if (MouseEvent.Type === g_mouse_event_type_up) {
|
|
if (true === this.Selection.Data2.bCol) {
|
|
var Index = this.Selection.Data2.Index;
|
|
var CurRow = this.Selection.Data2.Pos.Row;
|
|
var Row = this.Content[CurRow];
|
|
var Col = 0;
|
|
if (Index === this.Markup.Cols.length) {
|
|
Col = Row.Get_CellInfo(Index - 1).StartGridCol + Row.Get_Cell(Index - 1).Get_GridSpan();
|
|
} else {
|
|
Col = Row.Get_CellInfo(Index).StartGridCol;
|
|
}
|
|
var Dx = _X - (this.X + this.TableSumGrid[Col - 1]);
|
|
var Rows_info = new Array();
|
|
var bBorderInSelection = false;
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0) {
|
|
var CellsFlag = new Array();
|
|
for (CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
CellsFlag[CurRow] = new Array();
|
|
Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
CellsFlag[CurRow][CurCell] = 0;
|
|
}
|
|
}
|
|
var CurSelectedCell = this.Selection.Data[0];
|
|
var CurSelectedIndex = 0;
|
|
for (CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
if (CurSelectedCell.Cell === CurCell && CurSelectedCell.Row === CurRow) {
|
|
CellsFlag[CurRow][CurCell] = 1;
|
|
var StartGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var GridSpan = Row.Get_Cell(CurCell).Get_GridSpan();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, StartGridCol, GridSpan);
|
|
if (CurRow === this.Selection.Data2.Pos.Row && Col >= StartGridCol && Col <= StartGridCol + GridSpan) {
|
|
bBorderInSelection = true;
|
|
}
|
|
for (var TempIndex = 1; TempIndex < VMergeCount; TempIndex++) {
|
|
var TempCell = this.Internal_Get_Cell_ByStartGridCol(CurRow + TempIndex, StartGridCol);
|
|
if (-1 != TempCell) {
|
|
CellsFlag[CurRow + TempIndex][TempCell] = 1;
|
|
if (CurRow + TempIndex === this.Selection.Data2.Pos.Row && Col >= StartGridCol && Col <= StartGridCol + GridSpan) {
|
|
bBorderInSelection = true;
|
|
}
|
|
}
|
|
}
|
|
if (CurSelectedIndex < this.Selection.Data.length - 1) {
|
|
CurSelectedCell = this.Selection.Data[++CurSelectedIndex];
|
|
} else {
|
|
CurSelectedCell = {
|
|
Row: -1,
|
|
Cell: -1
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var OldTableInd = TablePr.TableInd;
|
|
var NewTableInd = TablePr.TableInd;
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && true === bBorderInSelection) {
|
|
var BeforeFlag = false;
|
|
var BeforeSpace2 = null;
|
|
if (0 === Col) {
|
|
BeforeSpace2 = _X - this.X;
|
|
if (BeforeSpace2 < 0) {
|
|
this.Set_TableW(tblwidth_Auto, 0);
|
|
this.X += BeforeSpace2;
|
|
if (true === this.Is_Inline()) {
|
|
NewTableInd = NewTableInd + BeforeSpace2;
|
|
} else {
|
|
this.Internal_UpdateFlowPosition(this.X, this.Y);
|
|
}
|
|
}
|
|
}
|
|
var BeforeSpace = null;
|
|
if (0 === Index && 0 != Col && _X < this.X) {
|
|
BeforeSpace = this.X - _X;
|
|
this.X -= BeforeSpace;
|
|
this.Set_TableW(tblwidth_Auto, 0);
|
|
if (true === this.Is_Inline()) {
|
|
NewTableInd = NewTableInd - BeforeSpace;
|
|
} else {
|
|
this.Internal_UpdateFlowPosition(this.X, this.Y);
|
|
}
|
|
}
|
|
if (Index === this.Markup.Cols.length) {
|
|
this.Set_TableW(tblwidth_Auto, 0);
|
|
}
|
|
for (CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
Rows_info[CurRow] = new Array();
|
|
Row = this.Content[CurRow];
|
|
var Before_Info = Row.Get_Before();
|
|
var WBefore = 0;
|
|
if (null === BeforeSpace2) {
|
|
if (Before_Info.GridBefore > 0 && Col === Before_Info.GridBefore && 1 === CellsFlag[CurRow][0]) {
|
|
WBefore = this.TableSumGrid[Before_Info.GridBefore - 1] + Dx;
|
|
} else {
|
|
if (null != BeforeSpace) {
|
|
WBefore = this.TableSumGrid[Before_Info.GridBefore - 1] + BeforeSpace;
|
|
} else {
|
|
WBefore = this.TableSumGrid[Before_Info.GridBefore - 1];
|
|
}
|
|
}
|
|
} else {
|
|
if (BeforeSpace2 > 0) {
|
|
if (0 === Before_Info.GridBefore && 1 === CellsFlag[CurRow][0]) {
|
|
WBefore = BeforeSpace2;
|
|
} else {
|
|
if (0 != Before_Info.GridBefore) {
|
|
WBefore = this.TableSumGrid[Before_Info.GridBefore - 1];
|
|
}
|
|
}
|
|
} else {
|
|
if (0 === Before_Info.GridBefore && 1 != CellsFlag[CurRow][0]) {
|
|
WBefore = -BeforeSpace2;
|
|
} else {
|
|
if (0 != Before_Info.GridBefore) {
|
|
WBefore = -BeforeSpace2 + this.TableSumGrid[Before_Info.GridBefore - 1];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (WBefore > 0.001) {
|
|
Rows_info[CurRow].push({
|
|
W: WBefore,
|
|
Type: -1,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var TempDx = Dx;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var CellMargins = Cell.Get_Margins();
|
|
var Cur_Grid_start = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var Cur_Grid_end = Cur_Grid_start + Cell.Get_GridSpan() - 1;
|
|
var W = 0;
|
|
if (Cur_Grid_end + 1 === Col && (1 === CellsFlag[CurRow][CurCell] || (CurCell + 1 < CellsCount && 1 === CellsFlag[CurRow][CurCell + 1]))) {
|
|
W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1] + Dx;
|
|
} else {
|
|
if (Cur_Grid_start === Col && (1 === CellsFlag[CurRow][CurCell] || (CurCell > 0 && 1 === CellsFlag[CurRow][CurCell - 1]))) {
|
|
W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1] - TempDx;
|
|
} else {
|
|
W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1];
|
|
}
|
|
}
|
|
W = Math.max(1, Math.max(W, CellMargins.Left.W + CellMargins.Right.W));
|
|
if (Cur_Grid_end + 1 === Col && (1 === CellsFlag[CurRow][CurCell] || (CurCell + 1 < CellsCount && 1 === CellsFlag[CurRow][CurCell + 1]))) {
|
|
TempDx = W - (this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1]);
|
|
}
|
|
Rows_info[CurRow].push({
|
|
W: W,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
}
|
|
var MinBefore = 0;
|
|
for (CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
if (-1 != Rows_info[CurRow][0].Type) {
|
|
MinBefore = 0;
|
|
break;
|
|
}
|
|
if (0 === MinBefore || MinBefore > Rows_info[CurRow][0].W) {
|
|
MinBefore = Rows_info[CurRow][0].W;
|
|
}
|
|
}
|
|
if (0 != MinBefore) {
|
|
for (CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
if (Math.abs(MinBefore - Rows_info[CurRow][0].W) < 0.001) {
|
|
Rows_info[CurRow].splice(0, 1);
|
|
} else {
|
|
Rows_info[CurRow][0].W -= MinBefore;
|
|
}
|
|
}
|
|
this.X += MinBefore;
|
|
if (true === this.Is_Inline()) {
|
|
NewTableInd = NewTableInd + MinBefore;
|
|
} else {
|
|
this.Internal_UpdateFlowPosition(this.X, this.Y);
|
|
}
|
|
}
|
|
} else {
|
|
var BeforeFlag = false;
|
|
var BeforeSpace2 = null;
|
|
if (0 === Col) {
|
|
BeforeSpace2 = this.X - _X;
|
|
if (-BeforeSpace2 > this.TableSumGrid[0]) {
|
|
BeforeFlag = true;
|
|
this.X += this.TableSumGrid[0];
|
|
} else {
|
|
this.X += Dx;
|
|
}
|
|
this.Set_TableW(tblwidth_Auto, 0);
|
|
if (true === this.Is_Inline()) {
|
|
if (-BeforeSpace2 > this.TableSumGrid[0]) {
|
|
NewTableInd = NewTableInd + this.TableSumGrid[0];
|
|
} else {
|
|
NewTableInd = NewTableInd + Dx;
|
|
}
|
|
} else {
|
|
this.Internal_UpdateFlowPosition(this.X, this.Y);
|
|
}
|
|
}
|
|
if (Index === this.Markup.Cols.length) {
|
|
this.Set_TableW(tblwidth_Auto, 0);
|
|
}
|
|
var BeforeSpace = null;
|
|
if (0 === Index && 0 != Col && _X < this.X) {
|
|
BeforeSpace = this.X - _X;
|
|
this.X -= BeforeSpace;
|
|
if (true === this.Is_Inline()) {
|
|
NewTableInd = NewTableInd - BeforeSpace;
|
|
} else {
|
|
this.Internal_UpdateFlowPosition(this.X, this.Y);
|
|
}
|
|
}
|
|
for (CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
Rows_info[CurRow] = new Array();
|
|
Row = this.Content[CurRow];
|
|
var Before_Info = Row.Get_Before();
|
|
var WBefore = 0;
|
|
if (Before_Info.GridBefore > 0 && Col === Before_Info.GridBefore) {
|
|
WBefore = this.TableSumGrid[Before_Info.GridBefore - 1] + Dx;
|
|
} else {
|
|
if (null != BeforeSpace) {
|
|
WBefore = this.TableSumGrid[Before_Info.GridBefore - 1] + BeforeSpace;
|
|
} else {
|
|
WBefore = this.TableSumGrid[Before_Info.GridBefore - 1];
|
|
}
|
|
if (null != BeforeSpace2) {
|
|
if (Before_Info.GridBefore > 0) {
|
|
if (true === BeforeFlag) {
|
|
WBefore = this.TableSumGrid[Before_Info.GridBefore - 1] - this.TableSumGrid[0];
|
|
} else {
|
|
WBefore = this.TableSumGrid[Before_Info.GridBefore - 1] + BeforeSpace2;
|
|
}
|
|
} else {
|
|
if (0 === Before_Info.GridBefore && true === BeforeFlag) {
|
|
WBefore = (-BeforeSpace2) - this.TableSumGrid[0];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (WBefore > 0.001) {
|
|
Rows_info[CurRow].push({
|
|
W: WBefore,
|
|
Type: -1,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var TempDx = Dx;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var CellMargins = Cell.Get_Margins();
|
|
var Cur_Grid_start = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var Cur_Grid_end = Cur_Grid_start + Cell.Get_GridSpan() - 1;
|
|
var W = 0;
|
|
if (Cur_Grid_end + 1 === Col) {
|
|
W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1] + Dx;
|
|
} else {
|
|
if (Cur_Grid_start === Col) {
|
|
W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1] - TempDx;
|
|
} else {
|
|
W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1];
|
|
}
|
|
}
|
|
W = Math.max(1, Math.max(W, CellMargins.Left.W + CellMargins.Right.W));
|
|
if (Cur_Grid_end + 1 === Col) {
|
|
TempDx = W - (this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1]);
|
|
}
|
|
Rows_info[CurRow].push({
|
|
W: W,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
}
|
|
}
|
|
if (Math.abs(NewTableInd - OldTableInd) > 0.001) {
|
|
this.Set_TableInd(NewTableInd);
|
|
}
|
|
if (tbllayout_AutoFit === this.Get_CompiledPr(false).TablePr.TableLayout) {
|
|
this.Set_TableLayout(tbllayout_Fixed);
|
|
}
|
|
this.Internal_CreateNewGrid(Rows_info);
|
|
this.Internal_RecalculateGrid();
|
|
} else {
|
|
var RowIndex = this.Pages[this.Selection.Data2.PageNum].FirstRow + this.Selection.Data2.Index;
|
|
if (0 === RowIndex) {
|
|
if (true === this.Is_Inline()) {} else {
|
|
var Dy = _Y - this.Markup.Rows[0].Y;
|
|
this.Y += Dy;
|
|
this.Internal_UpdateFlowPosition(this.X, this.Y);
|
|
}
|
|
} else {
|
|
if (this.Selection.Data2.PageNum > 0 && 0 === this.Selection.Data2.Index) {} else {
|
|
var _Y_old = this.Markup.Rows[this.Selection.Data2.Index - 1].Y + this.Markup.Rows[this.Selection.Data2.Index - 1].H;
|
|
var Dy = _Y - _Y_old;
|
|
var NewH = this.Markup.Rows[this.Selection.Data2.Index - 1].H + Dy;
|
|
this.Content[RowIndex - 1].Set_Height(NewH, heightrule_AtLeast);
|
|
}
|
|
}
|
|
}
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
this.Selection.Type2 = table_Selection_Common;
|
|
this.Selection.Data2 = null;
|
|
}
|
|
return;
|
|
} else {
|
|
if (table_Selection_Border_InnerTable === this.Selection.Type2) {
|
|
var Cell = this.Selection.Data2;
|
|
Cell.Content.Selection_SetEnd(X, Y, PageNum, MouseEvent);
|
|
if (MouseEvent.Type === g_mouse_event_type_up) {
|
|
this.Selection.Type2 = table_Selection_Common;
|
|
this.Selection.Data2 = null;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
var Pos = this.Internal_GetCellByXY(X, Y, PageNum);
|
|
this.Content[Pos.Row].Get_Cell(Pos.Cell).Content.Set_CurPosXY(X, Y);
|
|
this.Selection.Data = null;
|
|
this.Selection.EndPos.Pos = Pos;
|
|
this.Selection.EndPos.X = X;
|
|
this.Selection.EndPos.Y = Y;
|
|
this.Selection.EndPos.PageIndex = PageNum;
|
|
this.Selection.EndPos.MouseEvent = MouseEvent;
|
|
this.Selection.CurRow = Pos.Row;
|
|
if (true === this.Parent.Selection_Is_OneElement() && this.Selection.StartPos.Pos.Row === this.Selection.EndPos.Pos.Row && this.Selection.StartPos.Pos.Cell === this.Selection.EndPos.Pos.Cell) {
|
|
this.CurCell.Content.Selection_SetStart(this.Selection.StartPos.X, this.Selection.StartPos.Y, this.Selection.StartPos.PageIndex, this.Selection.StartPos.MouseEvent);
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.CurCell.Content.Selection_SetEnd(X, Y, PageNum, MouseEvent);
|
|
if (g_mouse_event_type_up == MouseEvent.Type) {
|
|
this.Selection.Start = false;
|
|
}
|
|
if (false === this.CurCell.Content.Selection.Use) {
|
|
this.Selection.Use = false;
|
|
this.Selection.Start = false;
|
|
this.Cursor_MoveAt(X, Y, false, false, this.PageNum + PageNum);
|
|
return;
|
|
}
|
|
} else {
|
|
if (g_mouse_event_type_up == MouseEvent.Type) {
|
|
this.Selection.Start = false;
|
|
}
|
|
this.Selection.Type = table_Selection_Cell;
|
|
this.Internal_Selection_UpdateCells();
|
|
}
|
|
},
|
|
Selection_Stop: function (X, Y, PageIndex, MouseEvent) {
|
|
if (true != this.Selection.Use) {
|
|
return;
|
|
}
|
|
this.Selection.Start = false;
|
|
this.Content[this.Selection.StartPos.Pos.Row].Get_Cell(this.Selection.StartPos.Pos.Cell).Content.Selection_Stop(X, Y, PageIndex - this.PageNum, MouseEvent);
|
|
},
|
|
Selection_Draw_Page: function (Page_abs) {
|
|
if (false === this.Selection.Use) {
|
|
return;
|
|
}
|
|
var CurPage = Page_abs - this.Get_StartPage_Absolute();
|
|
if (CurPage < 0 || CurPage >= this.Pages.length) {
|
|
return;
|
|
}
|
|
switch (this.Selection.Type) {
|
|
case table_Selection_Cell:
|
|
var StartPage_Abs = this.Get_StartPage_Absolute();
|
|
var CurPage = 0;
|
|
var Row_start = this.Selection.Data[0].Row;
|
|
for (var Index = 1; Index < this.Pages.length; Index++) {
|
|
if (Row_start <= this.Pages[Index].FirstRow) {
|
|
break;
|
|
}
|
|
CurPage++;
|
|
}
|
|
var Row_prev_index = -1;
|
|
var Row_pages = 1;
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var CellInfo = Row.Get_CellInfo(Pos.Cell);
|
|
var CellMar = Cell.Get_Margins();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(Row.Index, CellInfo.StartGridCol, Cell.Get_GridSpan());
|
|
var BottomMargin = this.MaxBotMargin[Row.Index + VMergeCount - 1];
|
|
if (-1 === Row_prev_index || Row_prev_index != Pos.Row) {
|
|
CurPage += Row_pages - 1;
|
|
if (-1 != Row_prev_index) {
|
|
for (var Index2 = Row_prev_index + 1; Index2 < Pos.Row; Index2++) {
|
|
CurPage += this.RowsInfo[Index2].Pages - 1;
|
|
}
|
|
}
|
|
Row_prev_index = Pos.Row;
|
|
Row_pages = this.RowsInfo[Pos.Row].Pages;
|
|
}
|
|
var X_start = CellInfo.X_cell_start;
|
|
var X_end = CellInfo.X_cell_end;
|
|
var Cell_pages = Cell.Content_Get_PagesCount();
|
|
for (var PageId = 0; PageId < Cell_pages; PageId++) {
|
|
var Bounds = Cell.Content_Get_PageBounds(PageId);
|
|
if (0 != PageId) {
|
|
var TempRowIndex = this.Pages[CurPage + PageId].FirstRow;
|
|
var _merge_cell_count = this.Internal_GetVertMergeCount(TempRowIndex, CellInfo.StartGridCol, Cell.Get_GridSpan());
|
|
var _height_merge_cells = 0;
|
|
var _merge_cell_index;
|
|
for (_merge_cell_index = 0; _merge_cell_index < _merge_cell_count; ++_merge_cell_index) {
|
|
var _cur_rows_info = this.RowsInfo[TempRowIndex + _merge_cell_index];
|
|
if (_cur_rows_info !== null && typeof _cur_rows_info === "object" && _cur_rows_info.H !== null && typeof _cur_rows_info.H === "object" && typeof _cur_rows_info.H[CurPage + PageId] === "number") {
|
|
_height_merge_cells += _cur_rows_info.H[CurPage + PageId];
|
|
}
|
|
}
|
|
this.DrawingDocument.AddPageSelection(StartPage_Abs + CurPage + PageId, X_start, this.RowsInfo[TempRowIndex].Y[CurPage + PageId], X_end - X_start, _height_merge_cells);
|
|
} else {
|
|
var bDrawSelectionBlock = true;
|
|
if (Cell_pages > 1) {
|
|
var TempRowIndex = this.Pages[CurPage + 1].FirstRow;
|
|
if (TempRowIndex === Pos.Row && false === this.RowsInfo[TempRowIndex].FirstPage) {
|
|
bDrawSelectionBlock = false;
|
|
}
|
|
}
|
|
if (true === bDrawSelectionBlock) {
|
|
var _merge_cell_count = this.Internal_GetVertMergeCount(Pos.Row, CellInfo.StartGridCol, Cell.Get_GridSpan());
|
|
var _height_merge_cells = 0;
|
|
var _merge_cell_index;
|
|
for (_merge_cell_index = 0; _merge_cell_index < _merge_cell_count; ++_merge_cell_index) {
|
|
var _cur_rows_info = this.RowsInfo[Pos.Row + _merge_cell_index];
|
|
if (_cur_rows_info !== null && typeof _cur_rows_info === "object" && _cur_rows_info.H !== null && typeof _cur_rows_info.H === "object" && typeof _cur_rows_info.H[CurPage + PageId] === "number") {
|
|
_height_merge_cells += _cur_rows_info.H[CurPage + PageId];
|
|
}
|
|
}
|
|
}
|
|
this.DrawingDocument.AddPageSelection(StartPage_Abs + CurPage + PageId, X_start, this.RowsInfo[Pos.Row].Y[CurPage + PageId], X_end - X_start, _height_merge_cells);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case table_Selection_Text:
|
|
var Cell = this.Content[this.Selection.StartPos.Pos.Row].Get_Cell(this.Selection.StartPos.Pos.Cell);
|
|
Cell.Content.Selection_Draw_Page(Page_abs);
|
|
break;
|
|
}
|
|
},
|
|
Selection_Draw: function () {
|
|
if (this.Parent && this.Parent.transform) {
|
|
this.DrawingDocument.UpdateTargetTransform(this.Parent.transform);
|
|
}
|
|
if (this.Selection.Type2 === table_Selection_Border) {
|
|
if (true === this.Selection.Data2.bCol) {
|
|
this.DrawingDocument.UpdateTableRuler(this.Selection.Data2.bCol, this.Selection.Data2.Index, this.Selection.Data2.X);
|
|
} else {
|
|
this.DrawingDocument.UpdateTableRuler(this.Selection.Data2.bCol, this.Selection.Data2.Index, this.Selection.Data2.Y);
|
|
}
|
|
}
|
|
if (false === this.Selection.Use) {
|
|
return;
|
|
}
|
|
switch (this.Selection.Type) {
|
|
case table_Selection_Cell:
|
|
var StartPage_Abs = this.Get_StartPage_Absolute();
|
|
var CurPage = 0;
|
|
var Row_start = this.Selection.Data[0].Row;
|
|
for (var Index = 1; Index < this.Pages.length; Index++) {
|
|
if (Row_start <= this.Pages[Index].FirstRow) {
|
|
break;
|
|
}
|
|
CurPage++;
|
|
}
|
|
var Row_prev_index = -1;
|
|
var Row_pages = 1;
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var CellInfo = Row.Get_CellInfo(Pos.Cell);
|
|
var CellMar = Cell.Get_Margins();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(Row.Index, CellInfo.StartGridCol, Cell.Get_GridSpan());
|
|
var BottomMargin = this.MaxBotMargin[Row.Index + VMergeCount - 1];
|
|
if (-1 === Row_prev_index || Row_prev_index != Pos.Row) {
|
|
CurPage += Row_pages - 1;
|
|
if (-1 != Row_prev_index) {
|
|
for (var Index2 = Row_prev_index + 1; Index2 < Pos.Row; Index2++) {
|
|
CurPage += this.RowsInfo[Index2].Pages - 1;
|
|
}
|
|
}
|
|
Row_prev_index = Pos.Row;
|
|
Row_pages = this.RowsInfo[Pos.Row].Pages;
|
|
}
|
|
var X_start = CellInfo.X_cell_start;
|
|
var X_end = CellInfo.X_cell_end;
|
|
var Cell_pages = Cell.Content_Get_PagesCount();
|
|
for (var PageId = 0; PageId < Cell_pages; PageId++) {
|
|
var Bounds = Cell.Content_Get_PageBounds(PageId);
|
|
if (0 != PageId) {
|
|
var TempRowIndex = this.Pages[CurPage + PageId].FirstRow;
|
|
var _merge_cell_count = this.Internal_GetVertMergeCount(TempRowIndex, CellInfo.StartGridCol, Cell.Get_GridSpan());
|
|
var _height_merge_cells = 0;
|
|
var _merge_cell_index;
|
|
for (_merge_cell_index = 0; _merge_cell_index < _merge_cell_count; ++_merge_cell_index) {
|
|
var _cur_rows_info = this.RowsInfo[TempRowIndex + _merge_cell_index];
|
|
if (_cur_rows_info !== null && typeof _cur_rows_info === "object" && _cur_rows_info.H !== null && typeof _cur_rows_info.H === "object" && typeof _cur_rows_info.H[CurPage + PageId] === "number") {
|
|
_height_merge_cells += _cur_rows_info.H[CurPage + PageId];
|
|
}
|
|
}
|
|
this.DrawingDocument.AddPageSelection(StartPage_Abs + CurPage + PageId, X_start, this.RowsInfo[TempRowIndex].Y[CurPage + PageId], X_end - X_start, _height_merge_cells);
|
|
} else {
|
|
var bDrawSelectionBlock = true;
|
|
if (Cell_pages > 1) {
|
|
var TempRowIndex = this.Pages[CurPage + 1].FirstRow;
|
|
if (TempRowIndex === Pos.Row && false === this.RowsInfo[TempRowIndex].FirstPage) {
|
|
bDrawSelectionBlock = false;
|
|
}
|
|
}
|
|
if (true === bDrawSelectionBlock) {
|
|
var _merge_cell_count = this.Internal_GetVertMergeCount(Pos.Row, CellInfo.StartGridCol, Cell.Get_GridSpan());
|
|
var _height_merge_cells = 0;
|
|
var _merge_cell_index;
|
|
for (_merge_cell_index = 0; _merge_cell_index < _merge_cell_count; ++_merge_cell_index) {
|
|
var _cur_rows_info = this.RowsInfo[Pos.Row + _merge_cell_index];
|
|
if (_cur_rows_info !== null && typeof _cur_rows_info === "object" && _cur_rows_info.H !== null && typeof _cur_rows_info.H === "object" && typeof _cur_rows_info.H[CurPage + PageId] === "number") {
|
|
_height_merge_cells += _cur_rows_info.H[CurPage + PageId];
|
|
}
|
|
}
|
|
}
|
|
this.DrawingDocument.AddPageSelection(StartPage_Abs + CurPage + PageId, X_start, this.RowsInfo[Pos.Row].Y[CurPage + PageId], X_end - X_start, _height_merge_cells);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case table_Selection_Text:
|
|
var Cell = this.Content[this.Selection.StartPos.Pos.Row].Get_Cell(this.Selection.StartPos.Pos.Cell);
|
|
Cell.Content.Selection_Draw();
|
|
break;
|
|
}
|
|
},
|
|
Selection_Remove: function () {
|
|
if (false === this.Selection.Use) {
|
|
return;
|
|
}
|
|
if (table_Selection_Text === this.Selection.Type) {
|
|
var Cell = this.Content[this.Selection.StartPos.Pos.Row].Get_Cell(this.Selection.StartPos.Pos.Cell);
|
|
Cell.Content.Selection_Remove();
|
|
}
|
|
this.Selection.Use = false;
|
|
this.Selection.Start = false;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
this.Markup.Internal.RowIndex = 0;
|
|
this.Markup.Internal.CellIndex = 0;
|
|
this.Markup.Internal.PageNum = 0;
|
|
},
|
|
Selection_Clear: function () {},
|
|
Selection_Check: function (X, Y, Page_Abs) {
|
|
var PageIndex = Page_Abs - this.Get_StartPage_Absolute();
|
|
if (PageIndex < 0 || PageIndex >= this.Pages.length) {
|
|
return false;
|
|
}
|
|
var CellPos = this.Internal_GetCellByXY(X, Y, PageIndex);
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var CurPos = this.Selection.Data[Index];
|
|
if (CurPos.Cell === CellPos.Cell && CurPos.Row === CellPos.Row) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
} else {
|
|
if (CellPos.Cell === this.CurCell.Index && CellPos.Row === this.CurCell.Row.Index) {
|
|
return this.CurCell.Content.Selection_Check(X, Y, Page_Abs);
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
Selection_IsEmpty: function (bCheckHidden) {
|
|
if (true === this.Selection.Use) {
|
|
if (table_Selection_Cell === this.Selection.Type) {
|
|
return false;
|
|
} else {
|
|
return this.CurCell.Content.Selection_IsEmpty(bCheckHidden);
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
Select_All: function () {
|
|
this.Selection.Use = true;
|
|
this.Selection.Start = false;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
this.Selection.Type2 = table_Selection_Common;
|
|
this.Selection.Data2 = null;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
this.Selection.StartPos.PageIndex = 0;
|
|
this.Selection.EndPos.Pos = {
|
|
Row: this.Content.length - 1,
|
|
Cell: this.Content[this.Content.length - 1].Get_CellsCount() - 1
|
|
};
|
|
this.Selection.EndPos.PageIndex = this.Pages.length - 1;
|
|
this.Internal_Selection_UpdateCells();
|
|
},
|
|
Cursor_MoveToStartPos: function () {
|
|
this.CurCell = this.Content[0].Get_Cell(0);
|
|
this.Selection.Use = false;
|
|
this.Selection.Start = false;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
this.Selection.CurRow = 0;
|
|
this.CurCell.Content_Cursor_MoveToStartPos();
|
|
},
|
|
Cursor_MoveToEndPos: function () {
|
|
var Row = this.Content[this.Content.length - 1];
|
|
this.CurCell = Row.Get_Cell(Row.Get_CellsCount() - 1);
|
|
this.Selection.Use = false;
|
|
this.Selection.Start = false;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: Row.Index,
|
|
Cell: this.CurCell.Index
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: Row.Index,
|
|
Cell: this.CurCell.Index
|
|
};
|
|
this.Selection.CurRow = Row.Index;
|
|
this.CurCell.Content_Cursor_MoveToEndPos();
|
|
},
|
|
Cursor_IsStart: function (bOnlyPara) {
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
if (0 === this.CurCell.Index && 0 === this.CurCell.Row.Index) {
|
|
return this.CurCell.Content.Cursor_IsStart(bOnlyPara);
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
Add_NewParagraph: function () {
|
|
this.CurCell.Content.Add_NewParagraph();
|
|
},
|
|
Add_FlowImage: function (W, H, Img) {
|
|
this.CurCell.Content.Add_FlowImage(W, H, Img);
|
|
},
|
|
Add_InlineImage: function (W, H, Img, Chart, bFlow) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.CurCell.Content.Add_InlineImage(W, H, Img, Chart, bFlow);
|
|
},
|
|
Add_InlineTable: function (Cols, Rows) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
return;
|
|
}
|
|
this.CurCell.Content.Add_InlineTable(Cols, Rows);
|
|
},
|
|
Add: function (ParaItem, bRecalculate) {
|
|
this.Paragraph_Add(ParaItem, bRecalculate);
|
|
},
|
|
Paragraph_Add: function (ParaItem, bRecalculate) {
|
|
if (para_TextPr === ParaItem.Type && (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0))) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Paragraph_Add(ParaItem, bRecalculate);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (true === ParaItem.Value.Check_NeedRecalc()) {
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
this.Parent.OnContentReDraw(this.Get_StartPage_Absolute(), this.Get_StartPage_Absolute() + this.Pages.length - 1);
|
|
}
|
|
} else {
|
|
this.CurCell.Content.Paragraph_Add(ParaItem, bRecalculate);
|
|
}
|
|
},
|
|
Paragraph_ClearFormatting: function () {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Paragraph_ClearFormatting();
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
this.CurCell.Content.Paragraph_ClearFormatting();
|
|
}
|
|
},
|
|
Paragraph_Format_Paste: function (TextPr, ParaPr, ApplyPara) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Paragraph_Format_Paste(TextPr, ParaPr, true);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
this.CurCell.Content.Paragraph_Format_Paste(TextPr, ParaPr, false);
|
|
}
|
|
},
|
|
Remove: function (Count, bOnlyText, bRemoveOnlySelection, bOnTextAdd) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
if (true === bOnTextAdd && Cells_array.length > 0) {
|
|
var Pos = Cells_array[0];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
Cell.Content.Select_All();
|
|
Cell.Content.Remove(Count, bOnlyText, bRemoveOnlySelection, true);
|
|
this.CurCell = Cell;
|
|
this.Selection.Use = false;
|
|
this.Selection.Start = false;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: Cell.Row.Index,
|
|
Cell: Cell.Index
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: Cell.Row.Index,
|
|
Cell: Cell.Index
|
|
};
|
|
this.Document_SetThisElementCurrent();
|
|
editor.WordControl.m_oLogicDocument.Recalculate();
|
|
} else {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Remove(Count, bOnlyText, bRemoveOnlySelection, false);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
}
|
|
} else {
|
|
this.CurCell.Content.Remove(Count, bOnlyText, bRemoveOnlySelection, bOnTextAdd);
|
|
}
|
|
},
|
|
Cursor_GetPos: function () {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
if (this.Selection.Data.length < 0) {
|
|
return {
|
|
X: 0,
|
|
Y: 0
|
|
};
|
|
}
|
|
var Pos = this.Selection.Data[0];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
var Para = Cell.Content.Get_FirstParagraph();
|
|
return {
|
|
X: Para.X,
|
|
Y: Para.Y
|
|
};
|
|
} else {
|
|
return this.CurCell.Content.Cursor_GetPos();
|
|
}
|
|
},
|
|
Cursor_MoveLeft: function (Count, AddToSelect, Word) {
|
|
if (true === this.Selection.Use && this.Selection.Type === table_Selection_Cell) {
|
|
if (true === AddToSelect) {
|
|
var StartPos = this.Selection.StartPos.Pos;
|
|
var EndPos = this.Selection.EndPos.Pos;
|
|
if (StartPos.Cell == EndPos.Cell && StartPos.Row == EndPos.Row && true == this.Parent.Selection_Is_OneElement()) {
|
|
this.Selection.Type = table_Selection_Text;
|
|
return true;
|
|
} else {
|
|
if (0 == EndPos.Cell && 0 == EndPos.Row && (null === this.Get_DocumentPrev() && true === this.Parent.Is_TopDocument())) {
|
|
return false;
|
|
}
|
|
var bRet = true;
|
|
if (0 == EndPos.Cell && 0 == EndPos.Row || (false == this.Parent.Selection_Is_OneElement() && 0 == EndPos.Row && 0 == StartPos.Row)) {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: 0,
|
|
Row: 0
|
|
};
|
|
bRet = false;
|
|
} else {
|
|
if (EndPos.Cell > 0 && true == this.Parent.Selection_Is_OneElement()) {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: EndPos.Cell - 1,
|
|
Row: EndPos.Row
|
|
};
|
|
} else {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: 0,
|
|
Row: EndPos.Row - 1
|
|
};
|
|
}
|
|
}
|
|
var bForceSelectByLines = false;
|
|
if (false === bRet && true == this.Is_Inline()) {
|
|
bForceSelectByLines = true;
|
|
}
|
|
this.Internal_Selection_UpdateCells(bForceSelectByLines);
|
|
return bRet;
|
|
}
|
|
} else {
|
|
this.Selection.Use = false;
|
|
var Pos = this.Selection.Data[0];
|
|
this.CurCell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
this.CurCell.Content_Cursor_MoveToStartPos();
|
|
return true;
|
|
}
|
|
} else {
|
|
if (false === this.CurCell.Content.Cursor_MoveLeft(AddToSelect, Word)) {
|
|
if (false === AddToSelect) {
|
|
if (0 != this.CurCell.Index || 0 != this.CurCell.Row.Index) {
|
|
if (0 != this.CurCell.Index) {
|
|
this.CurCell = this.Internal_Get_StartMergedCell2(this.CurCell.Index - 1, this.Selection.CurRow);
|
|
} else {
|
|
this.Selection.CurRow = Math.max(this.Selection.CurRow - 1, 0);
|
|
this.CurCell = this.Internal_Get_StartMergedCell2(this.Content[this.Selection.CurRow].Get_CellsCount() - 1, this.Selection.CurRow);
|
|
}
|
|
this.CurCell.Content.Cursor_MoveToEndPos();
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
if (0 == this.CurCell.Index && 0 == this.CurCell.Row.Index && (null === this.Get_DocumentPrev() && true === this.Parent.Is_TopDocument())) {
|
|
return false;
|
|
}
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
var bRet = true;
|
|
this.Selection.StartPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
if (0 == this.CurCell.Index && 0 == this.CurCell.Row.Index) {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.CurCell.Row.Get_CellsCount() - 1,
|
|
Row: 0
|
|
};
|
|
bRet = false;
|
|
} else {
|
|
if (this.CurCell.Index > 0) {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.CurCell.Index - 1,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
} else {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: 0,
|
|
Row: this.CurCell.Row.Index - 1
|
|
};
|
|
}
|
|
}
|
|
this.Internal_Selection_UpdateCells();
|
|
return bRet;
|
|
}
|
|
} else {
|
|
if (true === AddToSelect) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.StartPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
},
|
|
Cursor_MoveRight: function (Count, AddToSelect, Word) {
|
|
if (true === this.Selection.Use && this.Selection.Type === table_Selection_Cell) {
|
|
if (true === AddToSelect) {
|
|
var StartPos = this.Selection.StartPos.Pos;
|
|
var EndPos = this.Selection.EndPos.Pos;
|
|
if (StartPos.Cell == EndPos.Cell && StartPos.Row == EndPos.Row && true == this.Parent.Selection_Is_OneElement()) {
|
|
this.Selection.Type = table_Selection_Text;
|
|
return true;
|
|
} else {
|
|
var LastRow = this.Content[this.Content.length - 1];
|
|
var EndRow = this.Content[EndPos.Row];
|
|
var bRet = true;
|
|
if ((LastRow.Get_CellsCount() - 1 == EndPos.Cell && this.Content.length - 1 == EndPos.Row) || (false == this.Parent.Selection_Is_OneElement() && this.Content.length - 1 == EndPos.Row && this.Content.length - 1 == StartPos.Row)) {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: LastRow.Get_CellsCount() - 1,
|
|
Row: LastRow.Index
|
|
};
|
|
bRet = false;
|
|
} else {
|
|
if (EndPos.Cell < EndRow.Get_CellsCount() - 1 && true == this.Parent.Selection_Is_OneElement()) {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: EndPos.Cell + 1,
|
|
Row: EndPos.Row
|
|
};
|
|
} else {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.Content[EndPos.Row + 1].Get_CellsCount() - 1,
|
|
Row: EndPos.Row + 1
|
|
};
|
|
}
|
|
}
|
|
var bForceSelectByLines = false;
|
|
if (false === bRet && true == this.Is_Inline()) {
|
|
bForceSelectByLines = true;
|
|
}
|
|
this.Internal_Selection_UpdateCells(bForceSelectByLines);
|
|
return bRet;
|
|
}
|
|
} else {
|
|
this.Selection.Use = false;
|
|
var Pos = this.Selection.Data[this.Selection.Data.length - 1];
|
|
this.CurCell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
this.CurCell.Content_Cursor_MoveToEndPos();
|
|
return true;
|
|
}
|
|
} else {
|
|
if (false === this.CurCell.Content.Cursor_MoveRight(AddToSelect, Word)) {
|
|
if (false === AddToSelect) {
|
|
if (this.Content.length - 1 > this.CurCell.Row.Index || this.Content[this.CurCell.Row.Index].Get_CellsCount() - 1 > this.CurCell.Index) {
|
|
if (this.Content[this.CurCell.Row.Index].Get_CellsCount() - 1 > this.CurCell.Index) {
|
|
this.CurCell = this.Internal_Get_StartMergedCell2(this.CurCell.Index + 1, this.Selection.CurRow);
|
|
} else {
|
|
this.Selection.CurRow = Math.min(this.Content.length - 1, this.Selection.CurRow + 1);
|
|
this.CurCell = this.Internal_Get_StartMergedCell2(0, this.Selection.CurRow);
|
|
}
|
|
this.CurCell.Content.Cursor_MoveToStartPos();
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
var LastRow = this.Content[this.Content.length - 1];
|
|
var CurRow = this.CurCell.Row;
|
|
var bRet = true;
|
|
this.Selection.StartPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
if (LastRow.Get_CellsCount() - 1 == this.CurCell.Index && LastRow.Index == this.CurCell.Row.Index) {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: LastRow.Get_CellsCount() - 1,
|
|
Row: LastRow.Index
|
|
};
|
|
bRet = false;
|
|
} else {
|
|
if (this.CurCell.Index < CurRow.Get_CellsCount() - 1) {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.CurCell.Index + 1,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
} else {
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.Content[this.CurCell.Row.Index + 1].Get_CellsCount() - 1,
|
|
Row: this.CurCell.Row.Index + 1
|
|
};
|
|
}
|
|
}
|
|
var bForceSelectByLines = false;
|
|
if (false === bRet && true == this.Is_Inline()) {
|
|
bForceSelectByLines = true;
|
|
}
|
|
this.Internal_Selection_UpdateCells(bForceSelectByLines);
|
|
return bRet;
|
|
}
|
|
} else {
|
|
if (true === AddToSelect) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.StartPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
},
|
|
Cursor_MoveUp: function (Count, AddToSelect) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
if (true === AddToSelect) {
|
|
var bRetValue = true;
|
|
var EndPos = this.Selection.EndPos.Pos;
|
|
if (0 === EndPos.Row) {
|
|
bRetValue = false;
|
|
} else {
|
|
var EndCell = this.Content[EndPos.Row].Get_Cell(EndPos.Cell);
|
|
var X = EndCell.Content.Get_CurPosXY().X;
|
|
var Y = EndCell.Content.Get_CurPosXY().Y;
|
|
var PrevRow = this.Content[EndPos.Row - 1];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < PrevRow.Get_CellsCount(); CurCell++) {
|
|
Cell = PrevRow.Get_Cell(CurCell);
|
|
var CellInfo = PrevRow.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return true;
|
|
}
|
|
Cell.Content.Set_CurPosXY(X, Y);
|
|
this.CurCell = Cell;
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: Cell.Index,
|
|
Row: Cell.Row.Index
|
|
};
|
|
}
|
|
var bForceSelectByLines = false;
|
|
if (false === bRetValue && true === this.Is_Inline()) {
|
|
bForceSelectByLines = true;
|
|
}
|
|
this.Internal_Selection_UpdateCells(bForceSelectByLines);
|
|
return bRetValue;
|
|
} else {
|
|
if (this.Selection.Data.length < 0) {
|
|
return true;
|
|
}
|
|
var Pos = this.Selection.Data[0];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
var Para = Cell.Content.Get_FirstParagraph();
|
|
var X = Para.X;
|
|
var Y = Para.Y;
|
|
this.Selection.Use = false;
|
|
if (0 === Pos.Row) {
|
|
this.CurCell = Cell;
|
|
this.CurCell.Content.Cursor_MoveToStartPos();
|
|
this.CurCell.Content.Set_CurPosXY(X, Y);
|
|
return false;
|
|
} else {
|
|
var PrevRow = this.Content[Pos.Row - 1];
|
|
var PrevCell = null;
|
|
for (var CurCell = 0; CurCell < PrevRow.Get_CellsCount(); CurCell++) {
|
|
PrevCell = PrevRow.Get_Cell(CurCell);
|
|
var CellInfo = PrevRow.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === PrevCell) {
|
|
return true;
|
|
}
|
|
PrevCell.Content.Cursor_MoveUp_To_LastRow(X, Y, false);
|
|
this.CurCell = PrevCell;
|
|
return true;
|
|
}
|
|
}
|
|
} else {
|
|
if (false === this.CurCell.Content.Cursor_MoveUp(AddToSelect)) {
|
|
if (0 === this.CurCell.Row.Index && (false === this.Is_Inline() || (null === this.Get_DocumentPrev() && true === this.Parent.Is_TopDocument()))) {
|
|
return true;
|
|
}
|
|
if (true === AddToSelect) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: this.CurCell.Row.Index,
|
|
Cell: this.CurCell.Index
|
|
};
|
|
var bRetValue = true;
|
|
if (0 === this.CurCell.Row.Index) {
|
|
this.Selection.EndPos.Pos = {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
bRetValue = false;
|
|
} else {
|
|
var X = this.CurCell.Content.Get_CurPosXY().X;
|
|
var Y = this.CurCell.Content.Get_CurPosXY().Y;
|
|
var PrevRow = this.Content[this.CurCell.Row.Index - 1];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < PrevRow.Get_CellsCount(); CurCell++) {
|
|
Cell = PrevRow.Get_Cell(CurCell);
|
|
var CellInfo = PrevRow.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return true;
|
|
}
|
|
Cell.Content.Set_CurPosXY(X, Y);
|
|
this.CurCell = Cell;
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: Cell.Index,
|
|
Row: Cell.Row.Index
|
|
};
|
|
}
|
|
var bForceSelectByLines = false;
|
|
if (false === bRetValue && true === this.Is_Inline()) {
|
|
bForceSelectByLines = true;
|
|
}
|
|
this.Internal_Selection_UpdateCells(bForceSelectByLines);
|
|
return bRetValue;
|
|
} else {
|
|
if (0 === this.CurCell.Row.Index) {
|
|
return false;
|
|
} else {
|
|
var X = this.CurCell.Content.Get_CurPosXY().X;
|
|
var Y = this.CurCell.Content.Get_CurPosXY().Y;
|
|
var PrevRow = this.Content[this.CurCell.Row.Index - 1];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < PrevRow.Get_CellsCount(); CurCell++) {
|
|
Cell = PrevRow.Get_Cell(CurCell);
|
|
var CellInfo = PrevRow.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return true;
|
|
}
|
|
Cell = this.Internal_Get_StartMergedCell2(Cell.Index, Cell.Row.Index);
|
|
Cell.Content.Cursor_MoveUp_To_LastRow(X, Y, false);
|
|
this.CurCell = Cell;
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: Cell.Index,
|
|
Row: Cell.Row.Index
|
|
};
|
|
this.Selection.CurRow = Cell.Row.Index;
|
|
return true;
|
|
}
|
|
}
|
|
} else {
|
|
if (true === AddToSelect) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.StartPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
},
|
|
Cursor_MoveDown: function (Count, AddToSelect) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
if (true === AddToSelect) {
|
|
var bRetValue = true;
|
|
var EndPos = this.Selection.EndPos.Pos;
|
|
if (this.Content.length - 1 === EndPos.Row) {
|
|
bRetValue = false;
|
|
} else {
|
|
var EndCell = this.Content[EndPos.Row].Get_Cell(EndPos.Cell);
|
|
var X = EndCell.Content.Get_CurPosXY().X;
|
|
var Y = EndCell.Content.Get_CurPosXY().Y;
|
|
var NextRow = this.Content[EndPos.Row + 1];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < NextRow.Get_CellsCount(); CurCell++) {
|
|
Cell = NextRow.Get_Cell(CurCell);
|
|
var CellInfo = NextRow.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return true;
|
|
}
|
|
Cell.Content.Set_CurPosXY(X, Y);
|
|
this.CurCell = Cell;
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: Cell.Index,
|
|
Row: Cell.Row.Index
|
|
};
|
|
}
|
|
var bForceSelectByLines = false;
|
|
if (false === bRetValue && true === this.Is_Inline()) {
|
|
bForceSelectByLines = true;
|
|
}
|
|
this.Internal_Selection_UpdateCells(bForceSelectByLines);
|
|
return bRetValue;
|
|
} else {
|
|
if (this.Selection.Data.length < 0) {
|
|
return true;
|
|
}
|
|
var Pos = this.Selection.Data[this.Selection.Data.length - 1];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
var Para = Cell.Content.Get_FirstParagraph();
|
|
var X = Para.X;
|
|
var Y = Para.Y;
|
|
this.Selection.Use = false;
|
|
if (this.Content.length - 1 === Pos.Row) {
|
|
this.CurCell = Cell;
|
|
this.CurCell.Content.Cursor_MoveToStartPos();
|
|
this.CurCell.Content.Set_CurPosXY(X, Y);
|
|
return false;
|
|
} else {
|
|
var NextRow = this.Content[Pos.Row + 1];
|
|
var NextCell = null;
|
|
for (var CurCell = 0; CurCell < NextRow.Get_CellsCount(); CurCell++) {
|
|
NextCell = NextRow.Get_Cell(CurCell);
|
|
var CellInfo = NextRow.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === NextCell) {
|
|
return true;
|
|
}
|
|
NextCell.Content.Cursor_MoveDown_To_FirstRow(X, Y, false);
|
|
this.CurCell = NextCell;
|
|
return true;
|
|
}
|
|
}
|
|
} else {
|
|
if (false === this.CurCell.Content.Cursor_MoveDown(AddToSelect)) {
|
|
if (true === AddToSelect) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: this.CurCell.Row.Index,
|
|
Cell: this.CurCell.Index
|
|
};
|
|
var bRetValue = true;
|
|
if (this.Content.length - 1 === this.CurCell.Row.Index) {
|
|
this.Selection.EndPos.Pos = {
|
|
Row: this.Content.length - 1,
|
|
Cell: this.Content[this.Content.length - 1].Get_CellsCount() - 1
|
|
};
|
|
bRetValue = false;
|
|
} else {
|
|
var X = this.CurCell.Content.Get_CurPosXY().X;
|
|
var Y = this.CurCell.Content.Get_CurPosXY().Y;
|
|
var NextRow = this.Content[this.CurCell.Row.Index + 1];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < NextRow.Get_CellsCount(); CurCell++) {
|
|
Cell = NextRow.Get_Cell(CurCell);
|
|
var CellInfo = NextRow.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return true;
|
|
}
|
|
Cell.Content.Set_CurPosXY(X, Y);
|
|
this.CurCell = Cell;
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: Cell.Index,
|
|
Row: Cell.Row.Index
|
|
};
|
|
}
|
|
var bForceSelectByLines = false;
|
|
if (false === bRetValue && true === this.Is_Inline()) {
|
|
bForceSelectByLines = true;
|
|
}
|
|
this.Internal_Selection_UpdateCells(bForceSelectByLines);
|
|
return bRetValue;
|
|
} else {
|
|
var VMerge_count = this.Internal_GetVertMergeCount(this.CurCell.Row.Index, this.CurCell.Row.Get_CellInfo(this.CurCell.Index).StartGridCol, this.CurCell.Get_GridSpan());
|
|
if (this.Content.length - 1 === this.CurCell.Row.Index + VMerge_count - 1) {
|
|
return false;
|
|
} else {
|
|
var X = this.CurCell.Content.Get_CurPosXY().X;
|
|
var Y = this.CurCell.Content.Get_CurPosXY().Y;
|
|
var NextRow = this.Content[this.CurCell.Row.Index + VMerge_count];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < NextRow.Get_CellsCount(); CurCell++) {
|
|
Cell = NextRow.Get_Cell(CurCell);
|
|
var CellInfo = NextRow.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return true;
|
|
}
|
|
Cell.Content.Cursor_MoveDown_To_FirstRow(X, Y, false);
|
|
this.CurCell = Cell;
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: Cell.Index,
|
|
Row: Cell.Row.Index
|
|
};
|
|
this.Selection.CurRow = Cell.Row.Index;
|
|
return true;
|
|
}
|
|
}
|
|
} else {
|
|
if (true === AddToSelect) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.StartPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
},
|
|
Cursor_MoveEndOfLine: function (AddToSelect) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
return this.Cursor_MoveRight(1, AddToSelect, false);
|
|
} else {
|
|
var bRetValue = this.CurCell.Content.Cursor_MoveEndOfLine(AddToSelect);
|
|
if (true === this.CurCell.Content.Is_SelectionUse()) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.StartPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
} else {
|
|
this.Selection.Use = false;
|
|
}
|
|
return bRetValue;
|
|
}
|
|
},
|
|
Cursor_MoveStartOfLine: function (AddToSelect) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
return this.Cursor_MoveLeft(1, AddToSelect, false);
|
|
} else {
|
|
var bRetValue = this.CurCell.Content.Cursor_MoveStartOfLine(AddToSelect);
|
|
if (true === this.CurCell.Content.Is_SelectionUse()) {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.StartPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
};
|
|
} else {
|
|
this.Selection.Use = false;
|
|
}
|
|
return bRetValue;
|
|
}
|
|
},
|
|
Cursor_MoveUp_To_LastRow: function (X, Y, AddToSelect) {
|
|
if (true === AddToSelect) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Row = this.Content[this.Content.length - 1];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
Cell = Row.Get_Cell(CurCell);
|
|
var CellInfo = Row.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return true;
|
|
}
|
|
Cell.Content.Set_CurPosXY(X, Y);
|
|
this.CurCell = Cell;
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: Cell.Index,
|
|
Row: Cell.Row.Index
|
|
};
|
|
this.Internal_Selection_UpdateCells();
|
|
} else {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: this.Content.length - 1,
|
|
Cell: this.Content[this.Content.length - 1].Get_CellsCount() - 1
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: this.Content.length - 1,
|
|
Cell: 0
|
|
};
|
|
this.Internal_Selection_UpdateCells();
|
|
var Cell = this.Content[this.Content.length - 1].Get_Cell(0);
|
|
Cell.Content.Set_CurPosXY(X, Y);
|
|
}
|
|
} else {
|
|
this.Selection_Remove();
|
|
var Row = this.Content[this.Content.length - 1];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
Cell = Row.Get_Cell(CurCell);
|
|
var CellInfo = Row.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return;
|
|
}
|
|
Cell = this.Internal_Get_StartMergedCell2(Cell.Index, Cell.Row.Index);
|
|
Cell.Content.Cursor_MoveUp_To_LastRow(X, Y, false);
|
|
this.Selection.CurRow = Cell.Row.Index;
|
|
this.CurCell = Cell;
|
|
}
|
|
},
|
|
Cursor_MoveDown_To_FirstRow: function (X, Y, AddToSelect) {
|
|
if (true === AddToSelect) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Row = this.Content[0];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
Cell = Row.Get_Cell(CurCell);
|
|
var CellInfo = Row.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return true;
|
|
}
|
|
Cell.Content.Set_CurPosXY(X, Y);
|
|
this.CurCell = Cell;
|
|
this.Selection.EndPos.Pos = {
|
|
Cell: Cell.Index,
|
|
Row: Cell.Row.Index
|
|
};
|
|
this.Internal_Selection_UpdateCells();
|
|
} else {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: 0,
|
|
Cell: this.Content[0].Get_CellsCount() - 1
|
|
};
|
|
this.Internal_Selection_UpdateCells();
|
|
var Cell = this.Content[0].Get_Cell(0);
|
|
Cell.Content.Set_CurPosXY(X, Y);
|
|
}
|
|
} else {
|
|
this.Selection_Remove();
|
|
var Row = this.Content[0];
|
|
var Cell = null;
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
Cell = Row.Get_Cell(CurCell);
|
|
var CellInfo = Row.Get_CellInfo(CurCell);
|
|
if (X <= CellInfo.X_grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
if (null === Cell) {
|
|
return;
|
|
}
|
|
Cell.Content.Cursor_MoveDown_To_FirstRow(X, Y, false);
|
|
this.Selection.CurRow = Cell.Row.Index;
|
|
this.CurCell = Cell;
|
|
}
|
|
},
|
|
Cursor_MoveToCell: function (bNext) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Pos = this.Selection.Data[0];
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.CurCell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
this.CurCell.Content.Select_All();
|
|
} else {
|
|
if (true === this.Is_InnerTable()) {
|
|
return this.CurCell.Content.Cursor_MoveToCell(bNext);
|
|
}
|
|
var CurCell = this.CurCell;
|
|
var Pos_c = this.CurCell.Index;
|
|
var Pos_r = this.CurCell.Row.Index;
|
|
var Pos = {
|
|
Cell: Pos_c,
|
|
Row: Pos_r
|
|
};
|
|
if (true === bNext) {
|
|
var TempCell = this.Internal_Get_NextCell(Pos);
|
|
while (null != TempCell && vmerge_Restart != TempCell.Get_VMerge()) {
|
|
TempCell = this.Internal_Get_NextCell(Pos);
|
|
}
|
|
if (null != TempCell) {
|
|
CurCell = TempCell;
|
|
} else {
|
|
this.Row_Add(false);
|
|
var TempCell = this.Internal_Get_NextCell(Pos);
|
|
while (null != TempCell && vmerge_Restart != TempCell.Get_VMerge()) {
|
|
TempCell = this.Internal_Get_NextCell(Pos);
|
|
}
|
|
if (null != TempCell) {
|
|
CurCell = TempCell;
|
|
}
|
|
}
|
|
} else {
|
|
var TempCell = this.Internal_Get_PrevCell(Pos);
|
|
while (null != TempCell && vmerge_Restart != TempCell.Get_VMerge()) {
|
|
TempCell = this.Internal_Get_PrevCell(Pos);
|
|
}
|
|
if (null != TempCell) {
|
|
CurCell = TempCell;
|
|
}
|
|
}
|
|
editor.WordControl.m_oLogicDocument.Selection_Remove();
|
|
this.CurCell = CurCell;
|
|
this.CurCell.Content.Select_All();
|
|
if (true === this.CurCell.Content.Selection_IsEmpty(false)) {
|
|
this.CurCell.Content.Cursor_MoveToStartPos();
|
|
this.Selection.Use = false;
|
|
this.Selection.Type = table_Selection_Text;
|
|
} else {
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Text;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: CurCell.Row.Index,
|
|
Cell: CurCell.Index
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: CurCell.Row.Index,
|
|
Cell: CurCell.Index
|
|
};
|
|
this.Selection.CurRow = CurCell.Row.Index;
|
|
}
|
|
this.Document_SetThisElementCurrent();
|
|
}
|
|
},
|
|
Get_CurPosXY: function () {
|
|
var Cell = null;
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
Cell = this.Content[this.Selection.EndPos.Pos.Row].Get_Cell(this.Selection.EndPos.Pos.Cell);
|
|
} else {
|
|
Cell = this.CurCell;
|
|
}
|
|
return Cell.Content.Get_CurPosXY();
|
|
},
|
|
Is_SelectionUse: function () {
|
|
if ((true == this.Selection.Use && table_Selection_Cell == this.Selection.Type) || table_Selection_Border == this.Selection.Type2 || table_Selection_Border_InnerTable == this.Selection.Type2) {
|
|
return true;
|
|
} else {
|
|
if (true == this.Selection.Use) {
|
|
return this.CurCell.Content.Is_SelectionUse();
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
Is_TextSelectionUse: function () {
|
|
if ((true == this.Selection.Use && table_Selection_Cell == this.Selection.Type) || table_Selection_Border == this.Selection.Type2 || table_Selection_Border_InnerTable == this.Selection.Type2) {
|
|
return true;
|
|
} else {
|
|
if (true == this.Selection.Use) {
|
|
return this.CurCell.Content.Is_TextSelectionUse();
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
Get_SelectedText: function (bClearText) {
|
|
if (true === bClearText && ((true == this.Selection.Use && table_Selection_Text == this.Selection.Type) || false === this.Selection.Use)) {
|
|
return this.CurCell.Content.Get_SelectedText(true);
|
|
} else {
|
|
if (false === bClearText) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Count = this.Selection.Data.length;
|
|
var ResultText = "";
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Cell = this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
ResultText += Cell.Content.Get_SelectedText(false);
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
}
|
|
return ResultText;
|
|
} else {
|
|
return this.CurCell.Content.Get_SelectedText(false);
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
Get_SelectedElementsInfo: function (Info) {
|
|
Info.Set_Table();
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
this.CurCell.Content.Get_SelectedElementsInfo(Info);
|
|
}
|
|
},
|
|
Set_ParagraphAlign: function (Align) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphAlign(Align);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphAlign(Align);
|
|
}
|
|
},
|
|
Set_ParagraphSpacing: function (Spacing) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphSpacing(Spacing);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphSpacing(Spacing);
|
|
}
|
|
},
|
|
Set_ParagraphIndent: function (Ind) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphIndent(Ind);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphIndent(Ind);
|
|
}
|
|
},
|
|
Set_ParagraphNumbering: function (NumInfo) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphNumbering(NumInfo);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphNumbering(NumInfo);
|
|
}
|
|
},
|
|
Set_ParagraphShd: function (Shd) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphShd(Shd);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphShd(Shd);
|
|
}
|
|
},
|
|
Set_ParagraphStyle: function (Name) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphStyle(Name);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphStyle(Name);
|
|
}
|
|
},
|
|
Set_ParagraphTabs: function (Tabs) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphTabs(Tabs);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphTabs(Tabs);
|
|
}
|
|
},
|
|
Set_ParagraphContextualSpacing: function (Value) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphContextualSpacing(Value);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphContextualSpacing(Value);
|
|
}
|
|
},
|
|
Set_ParagraphPageBreakBefore: function (Value) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphPageBreakBefore(Value);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphPageBreakBefore(Value);
|
|
}
|
|
},
|
|
Set_ParagraphKeepLines: function (Value) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphKeepLines(Value);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphKeepLines(Value);
|
|
}
|
|
},
|
|
Set_ParagraphKeepNext: function (Value) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphKeepNext(Value);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphKeepNext(Value);
|
|
}
|
|
},
|
|
Set_ParagraphWidowControl: function (Value) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphWidowControl(Value);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphWidowControl(Value);
|
|
}
|
|
},
|
|
Set_ParagraphBorders: function (Borders) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Set_ParagraphBorders(Borders);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Set_ParagraphBorders(Borders);
|
|
}
|
|
},
|
|
Paragraph_IncDecFontSize: function (bIncrease) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Paragraph_IncDecFontSize(bIncrease);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Paragraph_IncDecFontSize(bIncrease);
|
|
}
|
|
},
|
|
Paragraph_IncDecIndent: function (bIncrease) {
|
|
if (true === this.ApplyToAll || (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type && this.Selection.Data.length > 0)) {
|
|
var Cells_array = this.Internal_Get_SelectionArray();
|
|
for (var Index = 0; Index < Cells_array.length; Index++) {
|
|
var Pos = Cells_array[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var Cell_Content = Cell.Content;
|
|
Cell_Content.Set_ApplyToAll(true);
|
|
Cell.Content.Paragraph_IncDecIndent(bIncrease);
|
|
Cell_Content.Set_ApplyToAll(false);
|
|
}
|
|
if (Cells_array[0].Row - 1 >= 0) {
|
|
this.Internal_RecalculateFrom(Cells_array[0].Row - 1, 0, true, true);
|
|
} else {
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
}
|
|
} else {
|
|
return this.CurCell.Content.Paragraph_IncDecIndent(bIncrease);
|
|
}
|
|
},
|
|
Get_Paragraph_ParaPr: function () {
|
|
if (true === this.ApplyToAll) {
|
|
var Row = this.Content[0];
|
|
var Cell = Row.Get_Cell(0);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var Result_ParaPr = Cell.Content.Get_Paragraph_ParaPr();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var StartCell = (CurRow === 0 ? 1 : 0);
|
|
for (var CurCell = StartCell; CurCell < CellsCount; CurCell++) {
|
|
Cell = Row.Get_Cell(CurCell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var CurPr = Cell.Content.Get_Paragraph_ParaPr();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
Result_ParaPr = Result_ParaPr.Compare(CurPr);
|
|
}
|
|
}
|
|
return Result_ParaPr;
|
|
}
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Pos = this.Selection.Data[0];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var Result_ParaPr = Cell.Content.Get_Paragraph_ParaPr();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
for (var Index = 1; Index < this.Selection.Data.length; Index++) {
|
|
Pos = this.Selection.Data[Index];
|
|
Row = this.Content[Pos.Row];
|
|
Cell = Row.Get_Cell(Pos.Cell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var CurPr = Cell.Content.Get_Paragraph_ParaPr();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
Result_ParaPr = Result_ParaPr.Compare(CurPr);
|
|
}
|
|
return Result_ParaPr;
|
|
}
|
|
return this.CurCell.Content.Get_Paragraph_ParaPr();
|
|
},
|
|
Get_Paragraph_TextPr: function () {
|
|
if (true === this.ApplyToAll) {
|
|
var Row = this.Content[0];
|
|
var Cell = Row.Get_Cell(0);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var Result_TextPr = Cell.Content.Get_Paragraph_TextPr();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var StartCell = (CurRow === 0 ? 1 : 0);
|
|
for (var CurCell = StartCell; CurCell < CellsCount; CurCell++) {
|
|
Cell = Row.Get_Cell(CurCell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var CurPr = Cell.Content.Get_Paragraph_TextPr();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
Result_TextPr = Result_TextPr.Compare(CurPr);
|
|
}
|
|
}
|
|
return Result_TextPr;
|
|
}
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Pos = this.Selection.Data[0];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var Result_TextPr = Cell.Content.Get_Paragraph_TextPr();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
for (var Index = 1; Index < this.Selection.Data.length; Index++) {
|
|
Pos = this.Selection.Data[Index];
|
|
Row = this.Content[Pos.Row];
|
|
Cell = Row.Get_Cell(Pos.Cell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var CurPr = Cell.Content.Get_Paragraph_TextPr();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
Result_TextPr = Result_TextPr.Compare(CurPr);
|
|
}
|
|
return Result_TextPr;
|
|
}
|
|
return this.CurCell.Content.Get_Paragraph_TextPr();
|
|
},
|
|
Get_Paragraph_TextPr_Copy: function () {
|
|
if (true === this.ApplyToAll) {
|
|
var Row = this.Content[0];
|
|
var Cell = Row.Get_Cell(0);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var Result_TextPr = Cell.Content.Get_Paragraph_TextPr_Copy();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
return Result_TextPr;
|
|
}
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Pos = this.Selection.Data[0];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var Result_TextPr = Cell.Content.Get_Paragraph_TextPr_Copy();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
return Result_TextPr;
|
|
}
|
|
return this.CurCell.Content.Get_Paragraph_TextPr_Copy();
|
|
},
|
|
Get_Paragraph_ParaPr_Copy: function () {
|
|
if (true === this.ApplyToAll) {
|
|
var Row = this.Content[0];
|
|
var Cell = Row.Get_Cell(0);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var Result_TextPr = Cell.Content.Get_Paragraph_ParaPr_Copy();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
return Result_TextPr;
|
|
}
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Pos = this.Selection.Data[0];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
Cell.Content.Set_ApplyToAll(true);
|
|
var Result_TextPr = Cell.Content.Get_Paragraph_ParaPr_Copy();
|
|
Cell.Content.Set_ApplyToAll(false);
|
|
return Result_TextPr;
|
|
}
|
|
return this.CurCell.Content.Get_Paragraph_ParaPr_Copy();
|
|
},
|
|
Get_CurrentParagraph: function () {
|
|
return this.CurCell.Content.Get_CurrentParagraph();
|
|
},
|
|
Set_ImageProps: function (Props) {
|
|
if ((true === this.Selection.Use && table_Selection_Text === this.Selection.Type) || false === this.Selection.Use) {
|
|
return this.CurCell.Content.Set_ImageProps(Props);
|
|
}
|
|
},
|
|
Recalc_CompiledPr: function () {
|
|
this.CompiledPr.NeedRecalc = true;
|
|
for (var i = 0; i < this.Content.length; ++i) {
|
|
this.Content[i].Recalc_CompiledPr();
|
|
}
|
|
if (this.Parent) {
|
|
editor.WordControl.m_oLogicDocument.recalcMap[this.Parent.Id] = this.Parent;
|
|
}
|
|
},
|
|
Get_CompiledPr: function (bCopy) {
|
|
if (true === this.CompiledPr.NeedRecalc) {
|
|
this.CompiledPr.Pr = this.Internal_Compile_Pr();
|
|
this.CompiledPr.NeedRecalc = false;
|
|
}
|
|
if (false === bCopy) {
|
|
return this.CompiledPr.Pr;
|
|
} else {
|
|
var Pr = {};
|
|
Pr.TextPr = this.CompiledPr.Pr.TextPr.Copy();
|
|
Pr.ParaPr = this.CompiledPr.Pr.ParaPr.Copy();
|
|
Pr.TablePr = this.CompiledPr.Pr.TablePr.Copy();
|
|
Pr.TableRowPr = this.CompiledPr.Pr.TableRowPr.Copy();
|
|
Pr.TableCellPr = this.CompiledPr.Pr.TableCellPr.Copy();
|
|
Pr.TableFirstCol = this.CompiledPr.Pr.TableFirstCol.Copy();
|
|
Pr.TableFirstRow = this.CompiledPr.Pr.TableFirstRow.Copy();
|
|
Pr.TableLastCol = this.CompiledPr.Pr.TableLastCol.Copy();
|
|
Pr.TableLastRow = this.CompiledPr.Pr.TableLastRow.Copy();
|
|
Pr.TableBand1Horz = this.CompiledPr.Pr.TableBand1Horz.Copy();
|
|
Pr.TableBand1Vert = this.CompiledPr.Pr.TableBand1Vert.Copy();
|
|
Pr.TableBand2Horz = this.CompiledPr.Pr.TableBand2Horz.Copy();
|
|
Pr.TableBand2Vert = this.CompiledPr.Pr.TableBand2Vert.Copy();
|
|
Pr.TableTLCell = this.CompiledPr.Pr.TableTLCell.Copy();
|
|
Pr.TableTRCell = this.CompiledPr.Pr.TableTRCell.Copy();
|
|
Pr.TableBLCell = this.CompiledPr.Pr.TableBLCell.Copy();
|
|
Pr.TableBRCell = this.CompiledPr.Pr.TableBRCell.Copy();
|
|
Pr.TableWholeTable = this.CompiledPr.Pr.TableWholeTable.Copy();
|
|
return Pr;
|
|
}
|
|
},
|
|
Get_Style: function () {
|
|
if ("undefined" != typeof(this.TableStyle)) {
|
|
return this.TableStyle;
|
|
}
|
|
return null;
|
|
},
|
|
Set_Style: function (Id) {
|
|
this.Style_Remove();
|
|
if (null === Id) {
|
|
return;
|
|
}
|
|
if (Id != this.Get_Styles().Get_Default_Table()) {
|
|
this.TableStyle = Id;
|
|
}
|
|
this.CompiledPr.NeedRecalc = true;
|
|
},
|
|
Remove_Style: function () {
|
|
if ("undefined" != typeof(this.TableStyle)) {
|
|
delete this.TableStyle;
|
|
}
|
|
this.CompiledPr.NeedRecalc = true;
|
|
},
|
|
Numbering_IsUse: function (NumId, NumLvl) {
|
|
return false;
|
|
},
|
|
Internal_Compile_Pr: function () {
|
|
var Styles = this.Get_Styles(),
|
|
StyleId;
|
|
if (this.styleIndex !== -1) {
|
|
StyleId = Styles.Style.length - 1;
|
|
} else {
|
|
StyleId = null;
|
|
}
|
|
var Pr = Styles.Get_Pr(StyleId, styles_Table, null);
|
|
if (!this.Parent || !this.Parent.parent) {
|
|
if (this.Pr !== null && typeof this.Pr === "object") {
|
|
Pr.TablePr.Merge(this.Pr);
|
|
}
|
|
return Pr;
|
|
}
|
|
var _theme = null,
|
|
_master = null,
|
|
_layout = null,
|
|
_slide = null;
|
|
switch (this.Parent.parent.kind) {
|
|
case SLIDE_KIND:
|
|
_slide = this.Parent.parent;
|
|
if (_slide !== null && typeof _slide === "object") {
|
|
_layout = _slide.Layout;
|
|
if (_layout !== null && typeof _layout === "object") {
|
|
_master = _layout.Master;
|
|
if (_master !== null && typeof _master === "object") {
|
|
_theme = _master.Theme;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case LAYOUT_KIND:
|
|
_layout = this.Parent.parent;
|
|
if (_layout !== null && typeof _layout === "object") {
|
|
_master = _layout.Master;
|
|
if (_master !== null && typeof _master === "object") {
|
|
_theme = _master.Theme;
|
|
}
|
|
}
|
|
break;
|
|
case MASTER_KIND:
|
|
_master = this.Parent.parent;
|
|
if (_master !== null && typeof _master === "object") {
|
|
_theme = _master.Theme;
|
|
}
|
|
break;
|
|
}
|
|
var _calculated_unifill;
|
|
var RGBA = {
|
|
R: 0,
|
|
G: 0,
|
|
B: 0,
|
|
A: 255
|
|
};
|
|
var fontRef;
|
|
if (Pr.TextPr !== null && typeof Pr.TextPr === "object") {
|
|
if ((Pr.TextPr.fontRef !== null && typeof Pr.TextPr.fontRef === "object") || (Pr.TextPr.unifill !== null && typeof Pr.TextPr.unifill === "object" && Pr.TextPr.unifill.fill !== null && typeof Pr.TextPr.unifill.fill === "object")) {
|
|
RGBA = GetRGBColorFromUniFillAndRef(Pr.TextPr.unifill, Pr.TextPr.fontRef, _theme, _master, _layout, _slide);
|
|
if (RGBA !== null) {
|
|
Pr.TextPr.Color.r = RGBA.R;
|
|
Pr.TextPr.Color.g = RGBA.G;
|
|
Pr.TextPr.Color.b = RGBA.B;
|
|
}
|
|
}
|
|
if ((Pr.TextPr.fontRef !== null && typeof Pr.TextPr.fontRef === "object" && typeof Pr.TextPr.fontRef.idx === "number")) {
|
|
switch (Pr.TextPr.fontRef.idx) {
|
|
case fntStyleInd_major:
|
|
Pr.TextPr.FontFamily = {
|
|
Name: getFontInfo("+mj-lt")(_theme.themeElements.fontScheme),
|
|
Index: -1
|
|
};
|
|
break;
|
|
case fntStyleInd_minor:
|
|
Pr.TextPr.FontFamily = {
|
|
Name: getFontInfo("+mn-lt")(_theme.themeElements.fontScheme),
|
|
Index: -1
|
|
};
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
for (var key in Pr) {
|
|
if (Pr[key] instanceof CTableStylePr) {
|
|
var _text_pr = Pr[key].TextPr;
|
|
if (_text_pr !== null && typeof _text_pr === "object") {
|
|
if ((_text_pr.fontRef !== null && typeof _text_pr.fontRef === "object") || (_text_pr.unifill !== null && typeof _text_pr.unifill === "object" && _text_pr.unifill.fill !== null && typeof _text_pr.unifill.fill === "object")) {
|
|
RGBA = GetRGBColorFromUniFillAndRef(_text_pr.unifill, _text_pr.fontRef, _theme, _master, _layout, _slide);
|
|
_text_pr.Color = new CDocumentColor(RGBA.R, RGBA.G, RGBA.B);
|
|
}
|
|
if ((_text_pr.fontRef !== null && typeof _text_pr.fontRef === "object" && typeof _text_pr.fontRef.idx === "number")) {
|
|
switch (_text_pr.fontRef.idx) {
|
|
case fntStyleInd_major:
|
|
_text_pr.FontFamily = {
|
|
Name: getFontInfo("+mj-lt")(_theme.themeElements.fontScheme),
|
|
Index: -1
|
|
};
|
|
break;
|
|
case fntStyleInd_minor:
|
|
_text_pr.FontFamily = {
|
|
Name: getFontInfo("+mn-lt")(_theme.themeElements.fontScheme),
|
|
Index: -1
|
|
};
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
var _table_cell_pr = Pr[key].TableCellPr;
|
|
if (_table_cell_pr !== null && typeof _table_cell_pr === "object") {
|
|
if (_table_cell_pr.Shd !== null && typeof _table_cell_pr.Shd === "object" && _table_cell_pr.Shd.unifill !== null && typeof _table_cell_pr.Shd.unifill === "object" && _table_cell_pr.Shd.unifill.fill !== null && typeof _table_cell_pr.Shd.unifill.fill === "object") {
|
|
_calculated_unifill = _table_cell_pr.Shd.unifill.createDuplicate();
|
|
_calculated_unifill.calculate(_theme, _slide, _layout, _master, {
|
|
R: 0,
|
|
G: 0,
|
|
B: 0,
|
|
A: 255
|
|
});
|
|
if (_calculated_unifill.fill.color && _calculated_unifill.fill.color.RGBA !== null && typeof _calculated_unifill.fill.color.RGBA === "object") {
|
|
RGBA = _calculated_unifill.fill.color.RGBA;
|
|
_table_cell_pr.Shd.Color = new CDocumentColor(RGBA.R, RGBA.G, RGBA.B);
|
|
}
|
|
}
|
|
if (_table_cell_pr.TableCellBorders !== null && typeof _table_cell_pr.TableCellBorders === "object") {
|
|
var _borders = _table_cell_pr.TableCellBorders;
|
|
var _border;
|
|
for (key in _borders) {
|
|
if (_borders[key] instanceof CDocumentBorder) {
|
|
_border = _borders[key];
|
|
var _calculated_line;
|
|
if (_border.lnRef != null) {
|
|
_calculated_line = _theme.getLnStyle(_border.lnRef.idx);
|
|
_border.lnRef.Color.Calculate(_theme, _slide, _layout, _master);
|
|
RGBA = _border.lnRef.Color.RGBA;
|
|
} else {
|
|
_calculated_line = new CLn();
|
|
}
|
|
var _tmp_pen = new CLn();
|
|
_tmp_pen.Fill = _border.unifill;
|
|
_calculated_line.merge(_tmp_pen);
|
|
if (_calculated_line.Fill != null) {
|
|
_calculated_line.Fill.calculate(_theme, _slide, _layout, _master, RGBA);
|
|
}
|
|
if ((_calculated_line.Fill !== null && typeof _calculated_line.Fill === "object" && _calculated_line.Fill.fill !== null && typeof _calculated_line.Fill.fill === "object")) {
|
|
if (_calculated_line.Fill.fill.color && _calculated_line.Fill.fill.color.RGBA !== null && typeof _calculated_line.Fill.fill.color.RGBA === "object") {
|
|
RGBA = _calculated_line.Fill.fill.color.RGBA;
|
|
_border.Color = new CDocumentColor(RGBA.R, RGBA.G, RGBA.B);
|
|
}
|
|
if (_calculated_line.Fill.fill.type === FILL_TYPE_NONE || _calculated_line.Fill.fill.type === FILL_TYPE_NOFILL) {
|
|
_border.Value = border_None;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var _table_cell_pr = Pr.TablePr;
|
|
if (_table_cell_pr !== null && typeof _table_cell_pr === "object") {
|
|
if (_table_cell_pr.Shd !== null && typeof _table_cell_pr.Shd === "object" && _table_cell_pr.Shd.unifill !== null && typeof _table_cell_pr.Shd.unifill === "object" && _table_cell_pr.Shd.unifill.fill !== null && typeof _table_cell_pr.Shd.unifill.fill === "object") {
|
|
_calculated_unifill = _table_cell_pr.Shd.unifill.createDuplicate();
|
|
_calculated_unifill.calculate(_theme, _slide, _layout, _master, {
|
|
R: 0,
|
|
G: 0,
|
|
B: 0,
|
|
A: 255
|
|
});
|
|
if (_calculated_unifill.fill.color && _calculated_unifill.fill.color.RGBA !== null && typeof _calculated_unifill.fill.color.RGBA === "object") {
|
|
RGBA = _calculated_unifill.fill.color.RGBA;
|
|
_table_cell_pr.Shd.Color = new CDocumentColor(RGBA.R, RGBA.G, RGBA.B);
|
|
}
|
|
}
|
|
if (_table_cell_pr.TableBorders !== null && typeof _table_cell_pr.TableBorders === "object") {
|
|
var _borders = _table_cell_pr.TableBorders;
|
|
var _border;
|
|
for (key in _borders) {
|
|
if (_borders[key] instanceof CDocumentBorder) {
|
|
_border = _borders[key];
|
|
var _calculated_line;
|
|
if (_border.lnRef != null) {
|
|
_calculated_line = _theme.getLnStyle(_border.lnRef.idx);
|
|
_border.lnRef.Color.Calculate(_theme, _slide, _layout, _master);
|
|
RGBA = _border.lnRef.Color.RGBA;
|
|
} else {
|
|
_calculated_line = new CLn();
|
|
}
|
|
var _tmp_pen = new CLn();
|
|
_tmp_pen.Fill = _border.unifill;
|
|
_calculated_line.merge(_tmp_pen);
|
|
if (_calculated_line.Fill != null) {
|
|
_calculated_line.Fill.calculate(_theme, _slide, _layout, _master, RGBA);
|
|
}
|
|
if ((_calculated_line.Fill !== null && typeof _calculated_line.Fill === "object" && _calculated_line.Fill.fill !== null && typeof _calculated_line.Fill.fill === "object")) {
|
|
if (_calculated_line.Fill.fill.color && _calculated_line.Fill.fill.color.RGBA !== null && typeof _calculated_line.Fill.fill.color.RGBA === "object") {
|
|
RGBA = _calculated_line.Fill.fill.color.RGBA;
|
|
_border.Color = new CDocumentColor(RGBA.R, RGBA.G, RGBA.B);
|
|
}
|
|
if (_calculated_line.Fill.fill.type === FILL_TYPE_NONE || _calculated_line.Fill.fill.type === FILL_TYPE_NOFILL) {
|
|
_border.Value = border_None;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.Pr !== null && typeof this.Pr === "object") {
|
|
Pr.TablePr.Merge(this.Pr);
|
|
}
|
|
return Pr;
|
|
},
|
|
Clear_DirectFormatting: function (bClearMerge) {
|
|
this.Set_TableStyleRowBandSize(undefined);
|
|
this.Set_TableStyleColBandSize(undefined);
|
|
this.Set_TableAlign(undefined);
|
|
this.Set_TableShd(undefined);
|
|
this.Set_TableBorder_Bottom(undefined);
|
|
this.Set_TableBorder_Left(undefined);
|
|
this.Set_TableBorder_Right(undefined);
|
|
this.Set_TableBorder_Top(undefined);
|
|
this.Set_TableBorder_InsideV(undefined);
|
|
this.Set_TableBorder_InsideH(undefined);
|
|
this.Set_TableCellMar(undefined, undefined, undefined, undefined);
|
|
this.Set_TableInd(undefined);
|
|
this.Set_TableW(undefined, undefined);
|
|
var Count = this.Content.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
this.Content[Index].Clear_DirectFormatting(bClearMerge);
|
|
}
|
|
},
|
|
Set_Pr: function (TablePr) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_Pr,
|
|
Old: this.Pr,
|
|
New: TablePr
|
|
});
|
|
this.Pr = TablePr;
|
|
},
|
|
Set_TableStyle: function (StyleId) {
|
|
if (this.styleIndex != StyleId) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_SetStyleIndex,
|
|
oldPr: this.styleIndex,
|
|
newPr: StyleId
|
|
});
|
|
this.styleIndex = StyleId;
|
|
this.Clear_DirectFormatting(false);
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
},
|
|
Get_TableStyle: function () {
|
|
return this.TableStyle;
|
|
},
|
|
Set_TableLook: function (TableLook) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableLook,
|
|
Old: this.TableLook,
|
|
New: TableLook
|
|
});
|
|
this.TableLook = TableLook;
|
|
this.Recalc_CompiledPr();
|
|
},
|
|
Get_TableLook: function () {
|
|
return this.TableLook;
|
|
},
|
|
Set_AllowOverlap: function (AllowOverlap) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_AllowOverlap,
|
|
Old: this.AllowOverlap,
|
|
New: AllowOverlap
|
|
});
|
|
this.AllowOverlap = AllowOverlap;
|
|
},
|
|
Get_AllowOverlap: function () {
|
|
return this.AllowOverlap;
|
|
},
|
|
Set_PositionH: function (RelativeFrom, Align, Value) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_PositionH,
|
|
Old: {
|
|
RelativeFrom: this.PositionH.RelativeFrom,
|
|
Align: this.PositionH.Align,
|
|
Value: this.PositionH.Value
|
|
},
|
|
New: {
|
|
RelativeFrom: RelativeFrom,
|
|
Align: Align,
|
|
Value: Value
|
|
}
|
|
});
|
|
this.PositionH.RelativeFrom = RelativeFrom;
|
|
this.PositionH.Align = Align;
|
|
this.PositionH.Value = Value;
|
|
},
|
|
Set_PositionV: function (RelativeFrom, Align, Value) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_PositionV,
|
|
Old: {
|
|
RelativeFrom: this.PositionV.RelativeFrom,
|
|
Align: this.PositionV.Align,
|
|
Value: this.PositionV.Value
|
|
},
|
|
New: {
|
|
RelativeFrom: RelativeFrom,
|
|
Align: Align,
|
|
Value: Value
|
|
}
|
|
});
|
|
this.PositionV.RelativeFrom = RelativeFrom;
|
|
this.PositionV.Align = Align;
|
|
this.PositionV.Value = Value;
|
|
},
|
|
Set_Distance: function (L, T, R, B) {
|
|
if (null === L || undefined === L) {
|
|
L = this.Distance.L;
|
|
}
|
|
if (null === T || undefined === T) {
|
|
T = this.Distance.T;
|
|
}
|
|
if (null === R || undefined === R) {
|
|
R = this.Distance.R;
|
|
}
|
|
if (null === B || undefined === B) {
|
|
B = this.Distance.B;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_Distance,
|
|
Old: {
|
|
Left: this.Distance.L,
|
|
Top: this.Distance.T,
|
|
Right: this.Distance.R,
|
|
Bottom: this.Distance.B
|
|
},
|
|
New: {
|
|
Left: L,
|
|
Top: T,
|
|
Right: R,
|
|
Bottom: B
|
|
}
|
|
});
|
|
this.Distance.L = L;
|
|
this.Distance.R = R;
|
|
this.Distance.T = T;
|
|
this.Distance.B = B;
|
|
},
|
|
Set_TableStyleRowBandSize: function (Value) {
|
|
if (undefined === Value) {
|
|
if (undefined === this.Pr.TableStyleRowBandSize) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableStyleRowBandSize,
|
|
Old: this.Pr.TableStyleRowBandSize,
|
|
New: undefined
|
|
});
|
|
this.Pr.TableStyleRowBandSize = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (undefined === this.Pr.TableStyleRowBandSize) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableStyleRowBandSize,
|
|
Old: undefined,
|
|
New: Value
|
|
});
|
|
this.Pr.TableStyleRowBandSize = Value;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (this.Pr.TableStyleRowBandSize != Value) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableStyleRowBandSize,
|
|
Old: this.Pr.TableStyleRowBandSize,
|
|
New: Value
|
|
});
|
|
this.Pr.TableStyleRowBandSize = Value;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Get_TableStyleRowBandSize: function () {
|
|
var Pr = this.Get_CompiledPr(false).TablePr;
|
|
return Pr.TableStyleRowBandSize;
|
|
},
|
|
Set_TableStyleColBandSize: function (Value) {
|
|
if (undefined === Value) {
|
|
if (undefined === this.Pr.TableStyleColBandSize) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableStyleColBandSize,
|
|
Old: this.Pr.TableStyleColBandSize,
|
|
New: undefined
|
|
});
|
|
this.Pr.TableStyleColBandSize = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (undefined === this.Pr.TableStyleRowBandSize) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableStyleColBandSize,
|
|
Old: undefined,
|
|
New: Value
|
|
});
|
|
this.Pr.TableStyleColBandSize = Value;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (this.Pr.TableStyleColBandSize != Value) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableStyleColBandSize,
|
|
Old: this.Pr.TableStyleColBandSize,
|
|
New: Value
|
|
});
|
|
this.Pr.TableStyleColBandSize = Value;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Get_TableStyleColBandSize: function () {
|
|
var Pr = this.Get_CompiledPr(false).TablePr;
|
|
return Pr.TableStyleColBandSize;
|
|
},
|
|
Set_TableW: function (Type, W) {
|
|
if (undefined === Type) {
|
|
if (undefined === this.Pr.TableW) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableW,
|
|
Old: this.Pr.TableW,
|
|
New: undefined
|
|
});
|
|
this.Pr.TableW = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (undefined === this.Pr.TableW) {
|
|
var TableW = new CTableMeasurement(Type, W);
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableW,
|
|
Old: undefined,
|
|
New: TableW
|
|
});
|
|
this.Pr.TableW = TableW;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (Type != this.Pr.TableW.Type || Math.abs(this.Pr.TableW.W - W) > 0.001) {
|
|
var TableW = new CTableMeasurement(Type, W);
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableW,
|
|
Old: this.Pr.TableW,
|
|
New: TableW
|
|
});
|
|
this.Pr.TableW = TableW;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Get_TableW: function () {
|
|
var Pr = this.Get_CompiledPr(false).TablePr;
|
|
return Pr.TableW;
|
|
},
|
|
Set_TableLayout: function (Value) {
|
|
if (this.Pr.TableLayout === Value) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableLayout,
|
|
Old: this.Pr.TableLayout,
|
|
New: Value
|
|
});
|
|
this.Pr.TableLayout = Value;
|
|
this.Recalc_CompiledPr();
|
|
},
|
|
Get_TableLayout: function () {
|
|
var Pr = this.Get_CompliedPr(false).TablePr;
|
|
return Pr.TableLayout;
|
|
},
|
|
Set_TableCellMar: function (Left, Top, Right, Bottom) {
|
|
var old_Left = (undefined === this.Pr.TableCellMar.Left ? undefined : this.Pr.TableCellMar.Left);
|
|
var old_Right = (undefined === this.Pr.TableCellMar.Right ? undefined : this.Pr.TableCellMar.Right);
|
|
var old_Top = (undefined === this.Pr.TableCellMar.Top ? undefined : this.Pr.TableCellMar.Top);
|
|
var old_Bottom = (undefined === this.Pr.TableCellMar.Bottom ? undefined : this.Pr.TableCellMar.Bottom);
|
|
var new_Left = (undefined === Left ? undefined : new CTableMeasurement(tblwidth_Mm, Left));
|
|
var new_Right = (undefined === Right ? undefined : new CTableMeasurement(tblwidth_Mm, Right));
|
|
var new_Top = (undefined === Top ? undefined : new CTableMeasurement(tblwidth_Mm, Top));
|
|
var new_Bottom = (undefined === Bottom ? undefined : new CTableMeasurement(tblwidth_Mm, Bottom));
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableCellMar,
|
|
Old: {
|
|
Left: old_Left,
|
|
Right: old_Right,
|
|
Top: old_Top,
|
|
Bottom: old_Bottom
|
|
},
|
|
New: {
|
|
Left: new_Left,
|
|
Right: new_Right,
|
|
Top: new_Top,
|
|
Bottom: new_Bottom
|
|
}
|
|
});
|
|
this.Pr.TableCellMar.Left = new_Left;
|
|
this.Pr.TableCellMar.Right = new_Right;
|
|
this.Pr.TableCellMar.Top = new_Top;
|
|
this.Pr.TableCellMar.Bottom = new_Bottom;
|
|
this.Recalc_CompiledPr();
|
|
},
|
|
Get_TableCellMar: function () {
|
|
var Pr = this.Get_CompiledPr(false).TablePr;
|
|
return Pr.TableCellMar;
|
|
},
|
|
Set_TableAlign: function (Align) {
|
|
if (undefined === Align) {
|
|
if (undefined === this.Pr.Jc) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableAlign,
|
|
Old: this.Pr.Jc,
|
|
New: undefined
|
|
});
|
|
this.Pr.Jc = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (undefined === this.Pr.Jc) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableAlign,
|
|
Old: undefined,
|
|
New: Align
|
|
});
|
|
this.Pr.Jc = Align;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (Align != this.Pr.Jc) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableAlign,
|
|
Old: this.Pr.Jc,
|
|
New: Align
|
|
});
|
|
this.Pr.Jc = Align;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Get_TableAlign: function () {
|
|
var Pr = this.Get_CompiledPr(false).TablePr;
|
|
return Pr.Jc;
|
|
},
|
|
Set_TableInd: function (Ind) {
|
|
if (undefined === Ind) {
|
|
if (undefined === this.Pr.TableInd) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableInd,
|
|
Old: this.Pr.TableInd,
|
|
New: undefined
|
|
});
|
|
this.Pr.TableInd = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (undefined === this.Pr.TableInd) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableInd,
|
|
Old: undefined,
|
|
New: Ind
|
|
});
|
|
this.Pr.TableInd = Ind;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (Math.abs(this.Pr.TableInd - Ind) > 0.001) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableInd,
|
|
Old: this.Pr.TableInd,
|
|
New: Ind
|
|
});
|
|
this.Pr.TableInd = Ind;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Get_TableInd: function () {
|
|
var Pr = this.Get_CompiledPr(false).TablePr;
|
|
return Pr.TableInd;
|
|
},
|
|
Set_TableBorder_Left: function (Border) {
|
|
this.Internal_Set_TableBorder(historyitem_Table_TableBorder_Left, this.Pr.TableBorders.Left, Border);
|
|
},
|
|
Set_TableBorder_Right: function (Border) {
|
|
this.Internal_Set_TableBorder(historyitem_Table_TableBorder_Right, this.Pr.TableBorders.Right, Border);
|
|
},
|
|
Set_TableBorder_Top: function (Border) {
|
|
this.Internal_Set_TableBorder(historyitem_Table_TableBorder_Top, this.Pr.TableBorders.Top, Border);
|
|
},
|
|
Set_TableBorder_Bottom: function (Border) {
|
|
this.Internal_Set_TableBorder(historyitem_Table_TableBorder_Bottom, this.Pr.TableBorders.Bottom, Border);
|
|
},
|
|
Set_TableBorder_InsideH: function (Border) {
|
|
this.Internal_Set_TableBorder(historyitem_Table_TableBorder_InsideH, this.Pr.TableBorders.InsideH, Border);
|
|
},
|
|
Set_TableBorder_InsideV: function (Border) {
|
|
this.Internal_Set_TableBorder(historyitem_Table_TableBorder_InsideV, this.Pr.TableBorders.InsideV, Border);
|
|
},
|
|
Internal_Set_TableBorder: function (Type, Ptr, _Border) {
|
|
if (undefined === _Border) {
|
|
if (undefined === Ptr) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: Type,
|
|
Old: Border,
|
|
New: undefined
|
|
});
|
|
switch (Type) {
|
|
case historyitem_Table_TableBorder_Left:
|
|
this.Pr.TableBorders.Left = undefined;
|
|
break;
|
|
case historyitem_Table_TableBorder_Right:
|
|
this.Pr.TableBorders.Right = undefined;
|
|
break;
|
|
case historyitem_Table_TableBorder_Top:
|
|
this.Pr.TableBorders.Top = undefined;
|
|
break;
|
|
case historyitem_Table_TableBorder_Bottom:
|
|
this.Pr.TableBorders.Bottom = undefined;
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideH:
|
|
this.Pr.TableBorders.InsideH = undefined;
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideV:
|
|
this.Pr.TableBorders.InsideV = undefined;
|
|
break;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (undefined === Ptr) {
|
|
var Border = new CDocumentBorder();
|
|
Border.Set_FromObject(_Border);
|
|
History.Add(this, {
|
|
Type: Type,
|
|
Old: undefined,
|
|
New: Border
|
|
});
|
|
switch (Type) {
|
|
case historyitem_Table_TableBorder_Left:
|
|
this.Pr.TableBorders.Left = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_Right:
|
|
this.Pr.TableBorders.Right = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_Top:
|
|
this.Pr.TableBorders.Top = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_Bottom:
|
|
this.Pr.TableBorders.Bottom = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideH:
|
|
this.Pr.TableBorders.InsideH = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideV:
|
|
this.Pr.TableBorders.InsideV = Border;
|
|
break;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
var Border = new CDocumentBorder();
|
|
Border.Set_FromObject(_Border);
|
|
History.Add(this, {
|
|
Type: Type,
|
|
Old: Ptr,
|
|
New: Border
|
|
});
|
|
switch (Type) {
|
|
case historyitem_Table_TableBorder_Left:
|
|
this.Pr.TableBorders.Left = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_Right:
|
|
this.Pr.TableBorders.Right = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_Top:
|
|
this.Pr.TableBorders.Top = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_Bottom:
|
|
this.Pr.TableBorders.Bottom = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideH:
|
|
this.Pr.TableBorders.InsideH = Border;
|
|
break;
|
|
case historyitem_Table_TableBorder_InsideV:
|
|
this.Pr.TableBorders.InsideV = Border;
|
|
break;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
},
|
|
Get_TableBorders: function () {
|
|
var Pr = this.Get_CompiledPr(false).TablePr;
|
|
return Pr.TableBorders;
|
|
},
|
|
Set_TableShd: function (Value, r, g, b) {
|
|
if (undefined === Value) {
|
|
if (undefined === this.Pr.Shd) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableShd,
|
|
Old: this.Pr.Shd,
|
|
New: undefined
|
|
});
|
|
this.Pr.Shd = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (undefined === this.Pr.Shd) {
|
|
var Shd = new CDocumentShd();
|
|
Shd.Value = Value;
|
|
Shd.Color.Set(r, g, b);
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableShd,
|
|
Old: undefined,
|
|
New: Shd
|
|
});
|
|
this.Pr.Shd = Shd;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
var Shd = new CDocumentShd();
|
|
Shd.Value = Value;
|
|
Shd.Color.Set(r, g, b);
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableShd,
|
|
Old: this.Pr.Shd,
|
|
New: Shd
|
|
});
|
|
this.Pr.Shd = Shd;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
},
|
|
Get_Shd: function () {
|
|
var Pr = this.Get_CompiledPr(false).TablePr;
|
|
return Pr.Shd;
|
|
},
|
|
Get_Borders: function () {
|
|
return this.Get_TableBorders();
|
|
},
|
|
Internal_CheckMerge: function () {
|
|
var bCanMerge = true;
|
|
var Grid_start = -1;
|
|
var Grid_end = -1;
|
|
var RowsInfo = new Array();
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var StartGridCol = Row.Get_CellInfo(Pos.Cell).StartGridCol;
|
|
var EndGridCol = StartGridCol + Cell.Get_GridSpan() - 1;
|
|
var VMergeCount = this.Internal_GetVertMergeCount(Pos.Row, Row.Get_CellInfo(Pos.Cell).StartGridCol, Cell.Get_GridSpan());
|
|
for (var RowIndex = Pos.Row; RowIndex <= Pos.Row + VMergeCount - 1; RowIndex++) {
|
|
if ("undefined" === typeof(RowsInfo[RowIndex])) {
|
|
RowsInfo[RowIndex] = {
|
|
Grid_start: StartGridCol,
|
|
Grid_end: EndGridCol
|
|
};
|
|
} else {
|
|
if (StartGridCol < RowsInfo[RowIndex].Grid_start) {
|
|
RowsInfo[RowIndex].Grid_start = StartGridCol;
|
|
}
|
|
if (EndGridCol > RowsInfo[RowIndex].Grid_end) {
|
|
RowsInfo[RowIndex].Grid_end = EndGridCol;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (var Index in RowsInfo) {
|
|
if (-1 === Grid_start) {
|
|
Grid_start = RowsInfo[Index].Grid_start;
|
|
} else {
|
|
if (Grid_start != RowsInfo[Index].Grid_start) {
|
|
bCanMerge = false;
|
|
break;
|
|
}
|
|
}
|
|
if (-1 === Grid_end) {
|
|
Grid_end = RowsInfo[Index].Grid_end;
|
|
} else {
|
|
if (Grid_end != RowsInfo[Index].Grid_end) {
|
|
bCanMerge = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (true === bCanMerge) {
|
|
var TopRow = -1;
|
|
var BotRow = -1;
|
|
for (var GridIndex = Grid_start; GridIndex <= Grid_end; GridIndex++) {
|
|
var Pos_top = null;
|
|
var Pos_bot = null;
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
var StartGridCol = Row.Get_CellInfo(Pos.Cell).StartGridCol;
|
|
var EndGridCol = StartGridCol + Cell.Get_GridSpan() - 1;
|
|
if (GridIndex >= StartGridCol && GridIndex <= EndGridCol) {
|
|
if (null === Pos_top || Pos_top.Row > Pos.Row) {
|
|
Pos_top = Pos;
|
|
}
|
|
if (null === Pos_bot || Pos_bot.Row < Pos.Row) {
|
|
Pos_bot = Pos;
|
|
}
|
|
}
|
|
}
|
|
if (null === Pos_top || null === Pos_bot) {
|
|
bCanMerge = false;
|
|
break;
|
|
}
|
|
if (-1 === TopRow) {
|
|
TopRow = Pos_top.Row;
|
|
} else {
|
|
if (TopRow != Pos_top.Row) {
|
|
bCanMerge = false;
|
|
break;
|
|
}
|
|
}
|
|
var Row = this.Content[Pos_bot.Row];
|
|
var Cell = Row.Get_Cell(Pos_bot.Cell);
|
|
var VMergeCount = this.Internal_GetVertMergeCount(Pos_bot.Row, Row.Get_CellInfo(Pos_bot.Cell).StartGridCol, Cell.Get_GridSpan());
|
|
var CurBotRow = Pos_bot.Row + VMergeCount - 1;
|
|
if (-1 === BotRow) {
|
|
BotRow = CurBotRow;
|
|
} else {
|
|
if (BotRow != CurBotRow) {
|
|
bCanMerge = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (true === bCanMerge) {
|
|
for (var RowIndex = TopRow; RowIndex <= BotRow; RowIndex++) {
|
|
var Row = this.Content[RowIndex];
|
|
var Grid_before = Row.Get_Before().GridBefore;
|
|
var Grid_after = Row.Get_After().GridAfter;
|
|
if (Grid_after <= 0 && Grid_before <= 0) {
|
|
continue;
|
|
}
|
|
if (Grid_start < Grid_before) {
|
|
bCanMerge = false;
|
|
break;
|
|
}
|
|
var Cell = Row.Get_Cell(Row.Get_CellsCount() - 1);
|
|
var Row_grid_end = Cell.Get_GridSpan() - 1 + Row.Get_CellInfo(Row.Get_CellsCount() - 1).StartGridCol;
|
|
if (Grid_end > Row_grid_end) {
|
|
bCanMerge = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
Grid_start: Grid_start,
|
|
Grid_end: Grid_end,
|
|
RowsInfo: RowsInfo,
|
|
bCanMerge: bCanMerge
|
|
};
|
|
},
|
|
Cell_Merge: function () {
|
|
var bApplyToInnerTable = false;
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
bApplyToInnerTable = this.CurCell.Content.Table_MergeCells();
|
|
}
|
|
if (true === bApplyToInnerTable) {
|
|
return;
|
|
}
|
|
if (true != this.Selection.Use || table_Selection_Cell != this.Selection.Type || this.Selection.Data.length <= 1) {
|
|
return;
|
|
}
|
|
var bCanMerge = true;
|
|
var Grid_start = -1;
|
|
var Grid_end = -1;
|
|
var RowsInfo = new Array();
|
|
var Temp = this.Internal_CheckMerge();
|
|
bCanMerge = Temp.bCanMerge;
|
|
Grid_start = Temp.Grid_start;
|
|
Grid_end = Temp.Grid_end;
|
|
RowsInfo = Temp.RowsInfo;
|
|
if (false === bCanMerge) {
|
|
return;
|
|
}
|
|
var Pos_tl = this.Selection.Data[0];
|
|
var Cell_tl = this.Content[Pos_tl.Row].Get_Cell(Pos_tl.Cell);
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
var Row = this.Content[Pos.Row];
|
|
var Cell = Row.Get_Cell(Pos.Cell);
|
|
if (0 != Index) {
|
|
Cell_tl.Content_Merge(Cell.Content);
|
|
Cell.Content.Clear_Content();
|
|
}
|
|
}
|
|
for (var RowIndex in RowsInfo) {
|
|
var Row = this.Content[RowIndex];
|
|
for (var CellIndex = 0; CellIndex < Row.Get_CellsCount(); CellIndex++) {
|
|
var Cell_grid_start = Row.Get_CellInfo(CellIndex).StartGridCol;
|
|
if (Grid_start === Cell_grid_start) {
|
|
if (RowIndex != Pos_tl.Row) {
|
|
var Cell = Row.Get_Cell(CellIndex);
|
|
Cell.Set_GridSpan(Grid_end - Grid_start + 1);
|
|
Cell.Set_VMerge(vmerge_Continue);
|
|
} else {
|
|
Cell_tl.Set_GridSpan(Grid_end - Grid_start + 1);
|
|
}
|
|
} else {
|
|
if (Cell_grid_start > Grid_start && Cell_grid_start <= Grid_end) {
|
|
Row.Remove_Cell(CellIndex);
|
|
CellIndex--;
|
|
} else {
|
|
if (Cell_grid_start > Grid_end) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.Internal_Check_TableRows(true);
|
|
var PageNum = 0;
|
|
for (PageNum = 0; PageNum < this.Pages.length - 1; PageNum++) {
|
|
if (Pos_tl.Row <= this.Pages[PageNum + 1].FirstRow) {
|
|
break;
|
|
}
|
|
}
|
|
this.Internal_Recalculate_1();
|
|
this.Selection.Use = true;
|
|
this.Selection.StartPos.Pos = Pos_tl;
|
|
this.Selection.EndPos.Pos = Pos_tl;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
this.Selection.Data = [Pos_tl];
|
|
this.CurCell = Cell_tl;
|
|
},
|
|
Cell_Split: function (Rows, Cols) {
|
|
var bApplyToInnerTable = false;
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
bApplyToInnerTable = this.CurCell.Content.Table_SplitCell(Cols, Rows);
|
|
}
|
|
if (true === bApplyToInnerTable) {
|
|
return true;
|
|
}
|
|
if (! (false === this.Selection.Use || (true === this.Selection.Use && (table_Selection_Text === this.Selection.Type || (table_Selection_Cell === this.Selection.Type && 1 === this.Selection.Data.length))))) {
|
|
return false;
|
|
}
|
|
var Cell_pos = null;
|
|
var Cell = null;
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
Cell = this.CurCell;
|
|
Cell_pos = {
|
|
Cell: Cell.Index,
|
|
Row: Cell.Row.Index
|
|
};
|
|
} else {
|
|
Cell_pos = this.Selection.Data[0];
|
|
Cell = this.Content[Cell_pos.Row].Get_Cell(Cell_pos.Cell);
|
|
}
|
|
var Row = this.Content[Cell_pos.Row];
|
|
var Grid_start = Row.Get_CellInfo(Cell_pos.Cell).StartGridCol;
|
|
var Grid_span = Cell.Get_GridSpan();
|
|
var VMerge_count = this.Internal_GetVertMergeCount(Cell_pos.Row, Grid_start, Grid_span);
|
|
if (VMerge_count > 1) {
|
|
if (Rows > VMerge_count) {
|
|
var ErrData = new CErrorData();
|
|
ErrData.put_Value(VMerge_count);
|
|
editor.asc_fireCallback("asc_onError", c_oAscError.ID.SplitCellMaxRows, c_oAscError.Level.NoCritical, ErrData);
|
|
return false;
|
|
} else {
|
|
if (0 != VMerge_count % Rows) {
|
|
var ErrData = new CErrorData();
|
|
ErrData.put_Value(VMerge_count);
|
|
editor.asc_fireCallback("asc_onError", c_oAscError.ID.SplitCellRowsDivider, c_oAscError.Level.NoCritical, ErrData);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
if (Cols > 1) {
|
|
var Sum_before = this.TableSumGrid[Grid_start - 1];
|
|
var Sum_with = this.TableSumGrid[Grid_start + Grid_span - 1];
|
|
var Span_width = Sum_with - Sum_before;
|
|
var Grid_width = Span_width / Cols;
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var CellMar = Cell.Get_Margins();
|
|
var MinW = CellSpacing + CellMar.Right.W + CellMar.Left.W;
|
|
if (Grid_width < MinW) {
|
|
var MaxCols = Math.floor(Span_width / MinW);
|
|
var ErrData = new CErrorData();
|
|
ErrData.put_Value(MaxCols);
|
|
editor.asc_fireCallback("asc_onError", c_oAscError.ID.SplitCellMaxCols, c_oAscError.Level.NoCritical, ErrData);
|
|
return false;
|
|
}
|
|
}
|
|
var Cells = new Array();
|
|
var Cells_pos = new Array();
|
|
var Rows_ = new Array();
|
|
if (Rows <= 1) {
|
|
for (var Index = 0; Index < VMerge_count; Index++) {
|
|
var TempRow = this.Content[Cell_pos.Row + Index];
|
|
Rows_[Index] = TempRow;
|
|
Cells[Index] = null;
|
|
Cells_pos[Index] = null;
|
|
var CellsCount = TempRow.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var StartGridCol = TempRow.Get_CellInfo(CurCell).StartGridCol;
|
|
if (StartGridCol === Grid_start) {
|
|
Cells[Index] = TempRow.Get_Cell(CurCell);
|
|
Cells_pos[Index] = {
|
|
Row: Cell_pos.Row + Index,
|
|
Cell: CurCell
|
|
};
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (VMerge_count > 1) {
|
|
var New_VMerge_Count = VMerge_count / Rows;
|
|
for (var Index = 0; Index < VMerge_count; Index++) {
|
|
var TempRow = this.Content[Cell_pos.Row + Index];
|
|
Rows_[Index] = TempRow;
|
|
Cells[Index] = null;
|
|
Cells_pos[Index] = null;
|
|
var CellsCount = TempRow.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var StartGridCol = TempRow.Get_CellInfo(CurCell).StartGridCol;
|
|
if (StartGridCol === Grid_start) {
|
|
var TempCell = TempRow.Get_Cell(CurCell);
|
|
Cells[Index] = TempCell;
|
|
Cells_pos[Index] = {
|
|
Row: Cell_pos.Row + Index,
|
|
Cell: CurCell
|
|
};
|
|
if (0 === Index % New_VMerge_Count) {
|
|
TempCell.Set_VMerge(vmerge_Restart);
|
|
} else {
|
|
TempCell.Set_VMerge(vmerge_Continue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
Rows_[0] = Row;
|
|
Cells[0] = Cell;
|
|
Cells_pos[0] = Cell_pos;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var Index = 1; Index < Rows; Index++) {
|
|
var NewRow = this.Internal_Add_Row(Cell_pos.Row + Index, CellsCount);
|
|
NewRow.Copy_Pr(Row.Pr);
|
|
Rows_[Index] = NewRow;
|
|
Cells[Index] = null;
|
|
Cells_pos[Index] = null;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var New_Cell = NewRow.Get_Cell(CurCell);
|
|
var Old_Cell = Row.Get_Cell(CurCell);
|
|
New_Cell.Copy_Pr(Old_Cell.Pr);
|
|
if (CurCell === Cell_pos.Cell) {
|
|
Cells[Index] = New_Cell;
|
|
Cells_pos[Index] = {
|
|
Row: Cell_pos.Row + Index,
|
|
Cell: CurCell
|
|
};
|
|
} else {
|
|
New_Cell.Set_VMerge(vmerge_Continue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (Cols > 1) {
|
|
var Sum_before = this.TableSumGrid[Grid_start - 1];
|
|
var Sum_with = this.TableSumGrid[Grid_start + Grid_span - 1];
|
|
var Span_width = Sum_with - Sum_before;
|
|
var Grid_width = Span_width / Cols;
|
|
var Grid_Info = new Array();
|
|
for (var Index = 0; Index < this.TableGridCalc.length; Index++) {
|
|
Grid_Info[Index] = 0;
|
|
}
|
|
var Grid_Info_new = Array();
|
|
for (var Index = 0; Index < Cols; Index++) {
|
|
Grid_Info_new[Index] = 1;
|
|
}
|
|
var Grid_Info_start = Array();
|
|
for (var Index = 0; Index < this.TableGridCalc.length; Index++) {
|
|
Grid_Info_start[Index] = this.TableGridCalc[Index];
|
|
}
|
|
var NewCol_Index = 0;
|
|
var CurWidth = Sum_before + Grid_width;
|
|
for (var Grid_index = Grid_start; Grid_index < Grid_start + Grid_span; Grid_index++) {
|
|
var bNewCol = true;
|
|
if (Math.abs(CurWidth - this.TableSumGrid[Grid_index]) < 0.001) {
|
|
NewCol_Index++;
|
|
CurWidth += Grid_width;
|
|
bNewCol = false;
|
|
continue;
|
|
}
|
|
while (CurWidth < this.TableSumGrid[Grid_index]) {
|
|
if (0 === Grid_Info[Grid_index]) {
|
|
Grid_Info_start[Grid_index] = CurWidth - this.TableSumGrid[Grid_index - 1];
|
|
}
|
|
Grid_Info[Grid_index] += 1;
|
|
NewCol_Index++;
|
|
CurWidth += Grid_width;
|
|
if (Math.abs(CurWidth - this.TableSumGrid[Grid_index]) < 0.001) {
|
|
NewCol_Index++;
|
|
CurWidth += Grid_width;
|
|
bNewCol = false;
|
|
break;
|
|
}
|
|
}
|
|
if (true === bNewCol) {
|
|
Grid_Info_new[NewCol_Index] += 1;
|
|
}
|
|
}
|
|
for (var Index2 = 0; Index2 < Rows_.length; Index2++) {
|
|
if (null != Cells[Index2] && null != Cells_pos[Index2]) {
|
|
var TempRow = Rows_[Index2];
|
|
var TempCell = Cells[Index2];
|
|
var TempCell_pos = Cells_pos[Index2];
|
|
TempCell.Set_GridSpan(Grid_Info_new[0]);
|
|
TempCell.Set_W(new CTableMeasurement(tblwidth_Mm, Grid_width));
|
|
for (var Index = 1; Index < Cols; Index++) {
|
|
var NewCell = TempRow.Add_Cell(TempCell_pos.Cell + Index, TempRow, null, false);
|
|
NewCell.Copy_Pr(TempCell.Pr);
|
|
NewCell.Set_GridSpan(Grid_Info_new[Index]);
|
|
NewCell.Set_W(new CTableMeasurement(tblwidth_Mm, Grid_width));
|
|
}
|
|
}
|
|
}
|
|
var TableGrid_old = new Array();
|
|
for (var Index = 0; Index < this.TableGrid.length; Index++) {
|
|
TableGrid_old[Index] = this.TableGrid[Index];
|
|
}
|
|
var OldTableGridLen = this.TableGridCalc.length;
|
|
for (var Index = OldTableGridLen - 1; Index >= 0; Index--) {
|
|
var Summary = this.TableGridCalc[Index];
|
|
if (Grid_Info[Index] > 0) {
|
|
this.TableGrid[Index] = Grid_Info_start[Index];
|
|
Summary -= Grid_Info_start[Index] - Grid_width;
|
|
for (var NewIndex = 0; NewIndex < Grid_Info[Index]; NewIndex++) {
|
|
Summary -= Grid_width;
|
|
if (NewIndex != Grid_Info[Index] - 1) {
|
|
this.TableGrid.splice(Index + NewIndex + 1, 0, Grid_width);
|
|
} else {
|
|
this.TableGrid.splice(Index + NewIndex + 1, 0, Summary);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableGrid,
|
|
Old: TableGrid_old,
|
|
New: this.TableGrid
|
|
});
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
if (CurRow >= Cells_pos[0].Row && CurRow <= Cells_pos[Cells_pos.length - 1].Row) {
|
|
continue;
|
|
}
|
|
var TempRow = this.Content[CurRow];
|
|
var GridBefore = TempRow.Get_Before().GridBefore;
|
|
var GridAfter = TempRow.Get_After().GridAfter;
|
|
if (GridBefore > 0) {
|
|
var SummaryGridSpan = GridBefore;
|
|
for (var CurGrid = 0; CurGrid < GridBefore; CurGrid++) {
|
|
SummaryGridSpan += Grid_Info[CurGrid];
|
|
}
|
|
TempRow.Set_Before(SummaryGridSpan);
|
|
}
|
|
var LastGrid = 0;
|
|
for (var CurCell = 0; CurCell < TempRow.Get_CellsCount(); CurCell++) {
|
|
var TempCell = TempRow.Get_Cell(CurCell);
|
|
var TempGridSpan = TempCell.Get_GridSpan();
|
|
var TempStartGrid = TempRow.Get_CellInfo(CurCell).StartGridCol;
|
|
var SummaryGridSpan = TempGridSpan;
|
|
LastGrid = TempStartGrid + TempGridSpan;
|
|
for (var CurGrid = TempStartGrid; CurGrid < TempStartGrid + TempGridSpan; CurGrid++) {
|
|
SummaryGridSpan += Grid_Info[CurGrid];
|
|
}
|
|
TempCell.Set_GridSpan(SummaryGridSpan);
|
|
}
|
|
if (GridAfter > 0) {
|
|
var SummaryGridSpan = GridAfter;
|
|
for (var CurGrid = LastGrid; CurGrid < OldTableGridLen; CurGrid++) {
|
|
SummaryGridSpan += Grid_Info[CurGrid];
|
|
}
|
|
TempRow.Set_After(SummaryGridSpan);
|
|
}
|
|
}
|
|
}
|
|
this.Internal_RecalculateGrid();
|
|
this.Internal_Recalculate_1();
|
|
return true;
|
|
},
|
|
Row_Add: function (bBefore) {
|
|
if ("undefined" === typeof(bBefore)) {
|
|
bBefore = true;
|
|
}
|
|
var bApplyToInnerTable = false;
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
bApplyToInnerTable = this.CurCell.Content.Table_AddRow(bBefore);
|
|
}
|
|
if (true === bApplyToInnerTable) {
|
|
return;
|
|
}
|
|
var Cells_pos = new Array();
|
|
var Count = 1;
|
|
var RowId = 0;
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
Cells_pos = this.Selection.Data;
|
|
var Prev_row = -1;
|
|
Count = 0;
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
if (Prev_row != this.Selection.Data[Index].Row) {
|
|
Count++;
|
|
Prev_row = this.Selection.Data[Index].Row;
|
|
}
|
|
}
|
|
} else {
|
|
Cells_pos[0] = {
|
|
Row: this.CurCell.Row.Index,
|
|
Cell: this.CurCell.Index
|
|
};
|
|
Count = 1;
|
|
}
|
|
if (Cells_pos.length <= 0) {
|
|
return;
|
|
}
|
|
if (true === bBefore) {
|
|
RowId = Cells_pos[0].Row;
|
|
} else {
|
|
RowId = Cells_pos[Cells_pos.length - 1].Row;
|
|
}
|
|
var Row = this.Content[RowId];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var Cells_info = new Array();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Cell_info = Row.Get_CellInfo(CurCell);
|
|
var Cell_grid_start = Cell_info.StartGridCol;
|
|
var Cell_grid_span = Cell.Get_GridSpan();
|
|
var VMerge_count_before = this.Internal_GetVertMergeCount2(RowId, Cell_grid_start, Cell_grid_span);
|
|
var VMerge_count_after = this.Internal_GetVertMergeCount(RowId, Cell_grid_start, Cell_grid_span);
|
|
Cells_info[CurCell] = {
|
|
VMerge_count_before: VMerge_count_before,
|
|
VMerge_count_after: VMerge_count_after
|
|
};
|
|
}
|
|
var CellSpacing = this.Content[0].Get_CellSpacing();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var New_Row = null;
|
|
if (true === bBefore) {
|
|
New_Row = this.Internal_Add_Row(RowId, CellsCount, true);
|
|
} else {
|
|
New_Row = this.Internal_Add_Row(RowId + 1, CellsCount, true);
|
|
}
|
|
New_Row.Copy_Pr(Row.Pr);
|
|
New_Row.Set_CellSpacing(CellSpacing);
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var New_Cell = New_Row.Get_Cell(CurCell);
|
|
var Old_Cell = Row.Get_Cell(CurCell);
|
|
New_Cell.Copy_Pr(Old_Cell.Pr);
|
|
if (true === bBefore) {
|
|
if (Cells_info[CurCell].VMerge_count_before > 1) {
|
|
New_Cell.Set_VMerge(vmerge_Continue);
|
|
} else {
|
|
New_Cell.Set_VMerge(vmerge_Restart);
|
|
}
|
|
} else {
|
|
if (Cells_info[CurCell].VMerge_count_after > 1) {
|
|
New_Cell.Set_VMerge(vmerge_Continue);
|
|
} else {
|
|
New_Cell.Set_VMerge(vmerge_Restart);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.Selection.Use = true;
|
|
if (null != this.Selection.Data) {
|
|
this.Selection.Data.length = 0;
|
|
} else {
|
|
this.Selection.Data = new Array();
|
|
}
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
var StartRow = (true === bBefore ? RowId : RowId + 1);
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Row = this.Content[StartRow + Index];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
continue;
|
|
}
|
|
this.Selection.Data.push({
|
|
Row: StartRow + Index,
|
|
Cell: CurCell
|
|
});
|
|
}
|
|
}
|
|
this.Internal_Recalculate_1();
|
|
},
|
|
Row_Remove: function (Ind) {
|
|
var bApplyToInnerTable = false;
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
bApplyToInnerTable = this.CurCell.Content.Table_RemoveRow(Ind);
|
|
}
|
|
if (true === bApplyToInnerTable) {
|
|
return true;
|
|
}
|
|
var Rows_to_delete = new Array();
|
|
if ("undefined" === typeof(Ind) || null === Ind) {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
var Counter = 0;
|
|
var PrevRow = -1;
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var CurPos = this.Selection.Data[Index];
|
|
if (CurPos.Row != PrevRow) {
|
|
Rows_to_delete[Counter++] = CurPos.Row;
|
|
}
|
|
PrevRow = CurPos.Row;
|
|
}
|
|
} else {
|
|
Rows_to_delete[0] = this.CurCell.Row.Index;
|
|
}
|
|
} else {
|
|
Rows_to_delete[0] = Ind;
|
|
}
|
|
if (Rows_to_delete.length <= 0) {
|
|
return;
|
|
}
|
|
var FirstRow_to_delete = Rows_to_delete[0];
|
|
var CurRow = Rows_to_delete[Rows_to_delete.length - 1] + 1;
|
|
if (CurRow < this.Content.length) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var VMerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue != VMerge) {
|
|
continue;
|
|
}
|
|
var VMerge_count = this.Internal_GetVertMergeCount2(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
if (CurRow - (VMerge_count - 1) >= FirstRow_to_delete) {
|
|
Cell.Set_VMerge(vmerge_Restart);
|
|
}
|
|
}
|
|
}
|
|
for (var Index = Rows_to_delete.length - 1; Index >= 0; Index--) {
|
|
this.Internal_Remove_Row(Rows_to_delete[Index]);
|
|
}
|
|
this.Selection_Remove();
|
|
this.DrawingDocument.TargetStart();
|
|
this.DrawingDocument.TargetShow();
|
|
this.DrawingDocument.SelectEnabled(false);
|
|
if (this.Content.length <= 0) {
|
|
return false;
|
|
}
|
|
var CurRow = Math.min(Rows_to_delete[0], this.Content.length - 1);
|
|
var Row = this.Content[CurRow];
|
|
this.CurCell = Row.Get_Cell(0);
|
|
this.CurCell.Content.Cursor_MoveToStartPos();
|
|
var PageNum = 0;
|
|
for (PageNum = 0; PageNum < this.Pages.length - 1; PageNum++) {
|
|
if (CurRow <= this.Pages[PageNum + 1].FirstRow) {
|
|
break;
|
|
}
|
|
}
|
|
this.Markup.Internal.RowIndex = CurRow;
|
|
this.Markup.Internal.CellIndex = 0;
|
|
this.Markup.Internal.PageNum = PageNum;
|
|
this.Internal_Recalculate_1();
|
|
return true;
|
|
},
|
|
Row_Remove2: function () {
|
|
if (false == this.Selection.Use || table_Selection_Text == this.Selection.Type) {
|
|
return true;
|
|
}
|
|
var Rows_to_delete = new Array();
|
|
for (var Index = 0; Index < this.Content.length; Index++) {
|
|
Rows_to_delete[Index] = 0;
|
|
}
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
var Pos = this.Selection.Data[Index];
|
|
if (0 == Rows_to_delete[Pos.Row]) {}
|
|
Rows_to_delete[Pos.Row] = 1;
|
|
}
|
|
for (var Index = this.Content.length - 1; Index >= 0; Index--) {
|
|
if (0 != Rows_to_delete[Index]) {
|
|
this.Internal_Remove_Row(Index);
|
|
}
|
|
}
|
|
if (this.Content.length <= 0) {
|
|
return false;
|
|
}
|
|
if (this.CurCell.Row.Index >= this.Content.length) {
|
|
this.CurCell = this.Content[this.Content.length - 1].Get_Cell(0);
|
|
}
|
|
this.Selection_Remove();
|
|
return true;
|
|
},
|
|
Col_Remove: function () {
|
|
var bApplyToInnerTable = false;
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
bApplyToInnerTable = this.CurCell.Content.Table_RemoveCol();
|
|
}
|
|
if (true === bApplyToInnerTable) {
|
|
return true;
|
|
}
|
|
var Cells_pos = new Array();
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
Cells_pos = this.Selection.Data;
|
|
} else {
|
|
Cells_pos[0] = {
|
|
Row: this.CurCell.Row.Index,
|
|
Cell: this.CurCell.Index
|
|
};
|
|
}
|
|
if (Cells_pos.length <= 0) {
|
|
return;
|
|
}
|
|
var Grid_start = -1;
|
|
var Grid_end = -1;
|
|
for (var Index = 0; Index < Cells_pos.length; Index++) {
|
|
var Row = this.Content[Cells_pos[Index].Row];
|
|
var Cell = Row.Get_Cell(Cells_pos[Index].Cell);
|
|
var Cur_Grid_start = Row.Get_CellInfo(Cells_pos[Index].Cell).StartGridCol;
|
|
var Cur_Grid_end = Cur_Grid_start + Cell.Get_GridSpan() - 1;
|
|
if (-1 === Grid_start || (-1 != Grid_start && Grid_start > Cur_Grid_start)) {
|
|
Grid_start = Cur_Grid_start;
|
|
}
|
|
if (-1 === Grid_end || (-1 != Grid_end && Grid_end < Cur_Grid_end)) {
|
|
Grid_end = Cur_Grid_end;
|
|
}
|
|
}
|
|
var Delete_info = new Array();
|
|
var Rows_info = new Array();
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
Delete_info[CurRow] = new Array();
|
|
Rows_info[CurRow] = new Array();
|
|
var Row = this.Content[CurRow];
|
|
var Before_Info = Row.Get_Before();
|
|
if (Before_Info.GridBefore > 0) {
|
|
Rows_info[CurRow].push({
|
|
W: this.TableSumGrid[Before_Info.GridBefore - 1],
|
|
Type: -1,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Cur_Grid_start = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var Cur_Grid_end = Cur_Grid_start + Cell.Get_GridSpan() - 1;
|
|
if (Cur_Grid_start <= Grid_end && Cur_Grid_end >= Grid_start) {
|
|
Delete_info[CurRow].push(CurCell);
|
|
} else {
|
|
var W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1];
|
|
Rows_info[CurRow].push({
|
|
W: W,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
}
|
|
}
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
for (var Index = Delete_info[CurRow].length - 1; Index >= 0; Index--) {
|
|
var CurCell = Delete_info[CurRow][Index];
|
|
Row.Remove_Cell(CurCell);
|
|
}
|
|
}
|
|
for (var CurRow = this.Content.length - 1; CurRow >= 0; CurRow--) {
|
|
var bRemove = true;
|
|
for (var Index = 0; Index < Rows_info[CurRow].length; Index++) {
|
|
if (0 === Rows_info[CurRow][Index].Type) {
|
|
bRemove = false;
|
|
break;
|
|
}
|
|
}
|
|
if (true === bRemove) {
|
|
this.Internal_Remove_Row(CurRow);
|
|
Rows_info.splice(CurRow, 1);
|
|
}
|
|
}
|
|
this.DrawingDocument.TargetStart();
|
|
this.DrawingDocument.TargetShow();
|
|
this.DrawingDocument.SelectEnabled(false);
|
|
if (this.Content.length <= 0) {
|
|
return false;
|
|
}
|
|
this.Internal_CreateNewGrid(Rows_info);
|
|
for (var CurRow = this.Content.length - 1; CurRow >= 0; CurRow--) {
|
|
var bRemove = true;
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue != Cell.Get_VMerge()) {
|
|
bRemove = false;
|
|
break;
|
|
}
|
|
}
|
|
if (true === bRemove) {
|
|
this.Internal_Remove_Row(CurRow);
|
|
}
|
|
}
|
|
var CurRow = 0;
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CurCell = Math.min(Delete_info[0][0], CellsCount - 1);
|
|
this.CurCell = Row.Get_Cell(CurCell);
|
|
this.CurCell.Content.Cursor_MoveToStartPos();
|
|
var PageNum = 0;
|
|
this.Markup.Internal.RowIndex = CurRow;
|
|
this.Markup.Internal.CellIndex = CurCell;
|
|
this.Markup.Internal.PageNum = PageNum;
|
|
this.Selection.Use = false;
|
|
this.Selection.Start = false;
|
|
this.Selection.StartPos.Pos = {
|
|
Row: CurRow,
|
|
Cell: CurCell
|
|
};
|
|
this.Selection.EndPos.Pos = {
|
|
Row: CurRow,
|
|
Cell: CurCell
|
|
};
|
|
this.Selection.CurRow = CurRow;
|
|
this.Internal_RecalculateGrid();
|
|
this.Internal_Recalculate_1();
|
|
return true;
|
|
},
|
|
Col_Add: function (bBefore) {
|
|
if ("undefined" === typeof(bBefore)) {
|
|
bBefore = true;
|
|
}
|
|
var bApplyToInnerTable = false;
|
|
if (false === this.Selection.Use || (true === this.Selection.Use && table_Selection_Text === this.Selection.Type)) {
|
|
bApplyToInnerTable = this.CurCell.Content.Table_AddCol(bBefore);
|
|
}
|
|
if (true === bApplyToInnerTable) {
|
|
return;
|
|
}
|
|
var Cells_pos = new Array();
|
|
var Count = 1;
|
|
var Width = 0;
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
Cells_pos = this.Selection.Data;
|
|
var Prev_row = -1;
|
|
Count = 0;
|
|
for (var Index = 0; Index < this.Selection.Data.length; Index++) {
|
|
if (-1 != Prev_row) {
|
|
if (Prev_row === this.Selection.Data[Index].Row) {
|
|
Count++;
|
|
} else {
|
|
break;
|
|
}
|
|
} else {
|
|
Count++;
|
|
Prev_row = this.Selection.Data[Index].Row;
|
|
}
|
|
}
|
|
} else {
|
|
Cells_pos[0] = {
|
|
Row: this.CurCell.Row.Index,
|
|
Cell: this.CurCell.Index
|
|
};
|
|
Count = 1;
|
|
}
|
|
if (Cells_pos.length <= 0) {
|
|
return;
|
|
}
|
|
if (true === bBefore) {
|
|
var FirstCell_Grid_start = this.Content[Cells_pos[0].Row].Get_CellInfo(Cells_pos[0].Cell).StartGridCol;
|
|
var FirstCell_Grid_end = FirstCell_Grid_start + this.Content[Cells_pos[0].Row].Get_Cell(Cells_pos[0].Cell).Get_GridSpan() - 1;
|
|
Width = this.TableSumGrid[FirstCell_Grid_end] - this.TableSumGrid[FirstCell_Grid_start - 1];
|
|
} else {
|
|
var LastPos = Cells_pos.length - 1;
|
|
var LastCell_Grid_start = this.Content[Cells_pos[LastPos].Row].Get_CellInfo(Cells_pos[LastPos].Cell).StartGridCol;
|
|
var LastCell_Grid_end = LastCell_Grid_start + this.Content[Cells_pos[LastPos].Row].Get_Cell(Cells_pos[LastPos].Cell).Get_GridSpan() - 1;
|
|
Width = this.TableSumGrid[LastCell_Grid_end] - this.TableSumGrid[LastCell_Grid_start - 1];
|
|
}
|
|
var Rows_info = new Array();
|
|
var Add_info = new Array();
|
|
if (true === bBefore) {
|
|
var Grid_start = -1;
|
|
for (var Index = 0; Index < Cells_pos.length; Index++) {
|
|
var Row = this.Content[Cells_pos[Index].Row];
|
|
var Cell = Row.Get_Cell(Cells_pos[Index].Cell);
|
|
var Cur_Grid_start = Row.Get_CellInfo(Cells_pos[Index].Cell).StartGridCol;
|
|
if (-1 === Grid_start || (-1 != Grid_start && Grid_start > Cur_Grid_start)) {
|
|
Grid_start = Cur_Grid_start;
|
|
}
|
|
}
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
Rows_info[CurRow] = new Array();
|
|
Add_info[CurRow] = 0;
|
|
var Before_Info = Row.Get_Before();
|
|
if (Before_Info.GridBefore > 0) {
|
|
Rows_info[CurRow].push({
|
|
W: this.TableSumGrid[Before_Info.GridBefore - 1],
|
|
Type: -1,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Cur_Grid_start = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var Cur_Grid_end = Cur_Grid_start + Cell.Get_GridSpan() - 1;
|
|
if (Cur_Grid_start <= Grid_start) {
|
|
Add_info[CurRow] = CurCell;
|
|
}
|
|
var W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1];
|
|
Rows_info[CurRow].push({
|
|
W: W,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
var After_Info = Row.Get_After();
|
|
if (After_Info.GridAfter > 0) {
|
|
if (Row.Get_CellInfo(CellsCount - 1).StartGridCol + Row.Get_Cell(CellsCount - 1).Get_GridSpan() <= Grid_start) {
|
|
Add_info[CurRow] = CellsCount;
|
|
}
|
|
}
|
|
}
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var bBefore2 = false;
|
|
if (Rows_info.length > 0 && Rows_info[CurRow][0].Type === -1) {
|
|
bBefore2 = true;
|
|
}
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var NewCell = Row.Add_Cell(Add_info[CurRow], Row, null, false);
|
|
var NextCell = (Add_info[CurRow] >= Row.Get_CellsCount() - 1 ? Row.Get_Cell(Add_info[CurRow] - 1) : Row.Get_Cell(Add_info[CurRow] + 1));
|
|
NewCell.Copy_Pr(NextCell.Pr, true);
|
|
if (false === bBefore2) {
|
|
Rows_info[CurRow].splice(Add_info[CurRow], 0, {
|
|
W: Width,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
} else {
|
|
Rows_info[CurRow].splice(Add_info[CurRow] + 1, 0, {
|
|
W: Width,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var Grid_end = -1;
|
|
for (var Index = 0; Index < Cells_pos.length; Index++) {
|
|
var Row = this.Content[Cells_pos[Index].Row];
|
|
var Cell = Row.Get_Cell(Cells_pos[Index].Cell);
|
|
var Cur_Grid_start = Row.Get_CellInfo(Cells_pos[Index].Cell).StartGridCol;
|
|
var Cur_Grid_end = Cur_Grid_start + Cell.Get_GridSpan() - 1;
|
|
if (-1 === Grid_end || (-1 != Grid_end && Grid_end < Cur_Grid_end)) {
|
|
Grid_end = Cur_Grid_end;
|
|
}
|
|
}
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
Rows_info[CurRow] = new Array();
|
|
Add_info[CurRow] = -1;
|
|
var Before_Info = Row.Get_Before();
|
|
if (Before_Info.GridBefore > 0) {
|
|
Rows_info[CurRow].push({
|
|
W: this.TableSumGrid[Before_Info.GridBefore - 1],
|
|
Type: -1,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Cur_Grid_start = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var Cur_Grid_end = Cur_Grid_start + Cell.Get_GridSpan() - 1;
|
|
if (Cur_Grid_end <= Grid_end) {
|
|
Add_info[CurRow] = CurCell;
|
|
}
|
|
var W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1];
|
|
Rows_info[CurRow].push({
|
|
W: W,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
}
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var bBefore2 = false;
|
|
if (Rows_info.length > 0 && Rows_info[CurRow][0].Type === -1) {
|
|
bBefore2 = true;
|
|
}
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var NewCell = Row.Add_Cell(Add_info[CurRow] + 1, Row, null, false);
|
|
var NextCell = (Add_info[CurRow] + 1 >= Row.Get_CellsCount() - 1 ? Row.Get_Cell(Add_info[CurRow]) : Row.Get_Cell(Add_info[CurRow] + 2));
|
|
NewCell.Copy_Pr(NextCell.Pr, true);
|
|
if (false === bBefore2) {
|
|
Rows_info[CurRow].splice(Add_info[CurRow] + 1, 0, {
|
|
W: Width,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
} else {
|
|
Rows_info[CurRow].splice(Add_info[CurRow] + 2, 0, {
|
|
W: Width,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.Internal_CreateNewGrid(Rows_info);
|
|
this.Selection.Use = true;
|
|
if (null != this.Selection.Data) {
|
|
this.Selection.Data.length = 0;
|
|
} else {
|
|
this.Selection.Data = new Array();
|
|
}
|
|
this.Selection.Use = true;
|
|
this.Selection.Type = table_Selection_Cell;
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var StartCell = (true === bBefore ? Add_info[CurRow] : Add_info[CurRow] + 1);
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
this.Selection.Data.push({
|
|
Row: CurRow,
|
|
Cell: StartCell + Index
|
|
});
|
|
}
|
|
}
|
|
this.Internal_RecalculateGrid();
|
|
this.Internal_Recalculate_1();
|
|
},
|
|
Update_TableMarkupFromRuler: function (NewMarkup, bCol, Index) {
|
|
var TablePr = this.Get_CompiledPr(false).TablePr;
|
|
if (true === bCol) {
|
|
var TableGrid_old = new Array();
|
|
for (var TempIndex = 0; TempIndex < this.TableGrid.length; TempIndex++) {
|
|
TableGrid_old[TempIndex] = this.TableGrid[TempIndex];
|
|
}
|
|
var RowIndex = NewMarkup.Internal.RowIndex;
|
|
var Row = this.Content[RowIndex];
|
|
var Col = 0;
|
|
var Dx = 0;
|
|
if (Index === NewMarkup.Cols.length) {
|
|
Col = Row.Get_CellInfo(Index - 1).StartGridCol + Row.Get_Cell(Index - 1).Get_GridSpan();
|
|
Dx = NewMarkup.Cols[Index - 1] - this.Markup.Cols[Index - 1];
|
|
} else {
|
|
Col = Row.Get_CellInfo(Index).StartGridCol;
|
|
if (0 != Index) {
|
|
Dx = NewMarkup.Cols[Index - 1] - this.Markup.Cols[Index - 1];
|
|
} else {
|
|
Dx = NewMarkup.X - this.Markup.X;
|
|
}
|
|
}
|
|
if (0 === Dx) {
|
|
return;
|
|
}
|
|
if (0 != Index && TablePr.TableW.Type != tblwidth_Auto) {
|
|
var TableW = TablePr.TableW.W;
|
|
var MinWidth = this.Internal_Get_TableMinWidth();
|
|
if (TableW < MinWidth) {
|
|
TableW = MinWidth;
|
|
}
|
|
this.Set_TableW(tblwidth_Mm, TableW + Dx);
|
|
}
|
|
if (0 === Col) {
|
|
Dx = this.Markup.X - NewMarkup.X;
|
|
this.Parent.setXfrm(-Dx, this.Parent.y, null, null, null, null, null);
|
|
} else {
|
|
var GridSpan = 1;
|
|
if (Dx > 0) {
|
|
if (Index != NewMarkup.Cols.length) {
|
|
var Cell = Row.Get_Cell(Index);
|
|
GridSpan = Cell.Get_GridSpan();
|
|
} else {
|
|
var GridAfter = Row.Get_After().GridAfter;
|
|
GridSpan = GridAfter;
|
|
}
|
|
this.TableGrid[Col - 1] = this.TableGridCalc[Col - 1] + Dx;
|
|
this.Internal_UpdateCellW(Col - 1);
|
|
if (tbllayout_AutoFit === this.Get_CompiledPr(false).TablePr.TableLayout) {
|
|
this.Set_TableLayout(tbllayout_Fixed);
|
|
var ColsCount = this.TableGrid.length;
|
|
for (var CurCol = 0; CurCol < ColsCount; CurCol++) {
|
|
if (CurCol != Col - 1) {
|
|
this.TableGrid[CurCol] = this.TableGridCalc[CurCol];
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (0 != Index) {
|
|
var Cell = Row.Get_Cell(Index - 1);
|
|
GridSpan = Cell.Get_GridSpan();
|
|
} else {
|
|
var GridBefore = Row.Get_Before().GridBefore;
|
|
GridSpan = GridBefore;
|
|
}
|
|
if (1 === GridSpan || -Dx < this.TableSumGrid[Col - 1] - this.TableSumGrid[Col - 2]) {
|
|
this.TableGrid[Col - 1] = this.TableGridCalc[Col - 1] + Dx;
|
|
this.Internal_UpdateCellW(Col - 1);
|
|
if (tbllayout_AutoFit === this.Get_CompiledPr(false).TablePr.TableLayout) {
|
|
this.Set_TableLayout(tbllayout_Fixed);
|
|
var ColsCount = this.TableGrid.length;
|
|
for (var CurCol = 0; CurCol < ColsCount; CurCol++) {
|
|
if (CurCol != Col - 1) {
|
|
this.TableGrid[CurCol] = this.TableGridCalc[CurCol];
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var Rows_info = new Array();
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
Rows_info[CurRow] = new Array();
|
|
var Row = this.Content[CurRow];
|
|
var Before_Info = Row.Get_Before();
|
|
if (Before_Info.GridBefore > 0) {
|
|
if (Before_Info.GridBefore >= Col) {
|
|
var W = Math.max(0, this.TableSumGrid[Before_Info.GridBefore - 1] + Dx);
|
|
if (W > 0.001) {
|
|
Rows_info[CurRow].push({
|
|
W: W,
|
|
Type: -1,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
} else {
|
|
Rows_info[CurRow].push({
|
|
W: this.TableSumGrid[Before_Info.GridBefore - 1],
|
|
Type: -1,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
}
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var CellMargins = Cell.Get_Margins();
|
|
var Cur_Grid_start = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var Cur_Grid_end = Cur_Grid_start + Cell.Get_GridSpan() - 1;
|
|
if (Cur_Grid_start <= Col - 1 && Cur_Grid_end >= Col - 1) {
|
|
var W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1] + Dx;
|
|
W = Math.max(1, Math.max(W, CellMargins.Left.W + CellMargins.Right.W));
|
|
Rows_info[CurRow].push({
|
|
W: W,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
} else {
|
|
var W = this.TableSumGrid[Cur_Grid_end] - this.TableSumGrid[Cur_Grid_start - 1];
|
|
W = Math.max(1, Math.max(W, CellMargins.Left.W + CellMargins.Right.W));
|
|
Rows_info[CurRow].push({
|
|
W: W,
|
|
Type: 0,
|
|
GridSpan: 1
|
|
});
|
|
}
|
|
}
|
|
}
|
|
this.Internal_CreateNewGrid(Rows_info);
|
|
}
|
|
}
|
|
this.Internal_RecalculateGrid();
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableGrid,
|
|
Old: TableGrid_old,
|
|
New: this.TableGrid
|
|
});
|
|
} else {
|
|
var RowIndex = this.Pages[NewMarkup.Internal.PageNum].FirstRow + Index;
|
|
if (0 === RowIndex) {
|
|
if (true === this.Is_Inline()) {
|
|
var Dy = this.Markup.Rows[0].Y - NewMarkup.Rows[0].Y;
|
|
this.Parent.setXfrm(this.Parent.x, -Dy, null, null, null, null, null);
|
|
} else {
|
|
var Dy = this.Markup.Rows[0].Y - NewMarkup.Rows[0].Y;
|
|
this.Y -= Dy;
|
|
this.Internal_UpdateFlowPosition(this.X, this.Y);
|
|
var NewH = NewMarkup.Rows[0].H;
|
|
this.Content[0].Set_Height(NewH, heightrule_AtLeast);
|
|
}
|
|
} else {
|
|
if (NewMarkup.Internal.PageNum > 0 && 0 === Index) {} else {
|
|
var NewH = NewMarkup.Rows[Index - 1].H;
|
|
this.Content[RowIndex - 1].Set_Height(NewH, heightrule_AtLeast);
|
|
}
|
|
}
|
|
}
|
|
this.Internal_Recalculate_1();
|
|
this.Internal_OnContentRecalculate(true, 0, this.Index);
|
|
editor.WordControl.m_oLogicDocument.Recalculate();
|
|
editor.WordControl.m_oLogicDocument.Document_UpdateSelectionState();
|
|
},
|
|
Internal_RecalculateGrid: function () {
|
|
var TablePr = this.Get_CompiledPr(false).TablePr;
|
|
var Grid = this.TableGrid;
|
|
var SumGrid = new Array();
|
|
var TempSum = 0;
|
|
SumGrid[-1] = 0;
|
|
for (var Index = 0; Index < Grid.length; Index++) {
|
|
TempSum += Grid[Index];
|
|
SumGrid[Index] = TempSum;
|
|
}
|
|
var MinWidth = this.Internal_Get_TableMinWidth();
|
|
var TableW = TablePr.TableW.W;
|
|
if (tblwidth_Auto === TablePr.TableW.Type) {
|
|
TableW = 0;
|
|
} else {
|
|
if (TableW < MinWidth) {
|
|
TableW = MinWidth;
|
|
}
|
|
}
|
|
var CurGridCol = 0;
|
|
for (var Index = 0; Index < this.Content.length; Index++) {
|
|
var Row = this.Content[Index];
|
|
Row.Set_Index(Index);
|
|
var BeforeInfo = Row.Get_Before();
|
|
CurGridCol = BeforeInfo.GridBefore;
|
|
if (CurGridCol > 0 && SumGrid[CurGridCol - 1] < BeforeInfo.WBefore.W) {
|
|
SumGrid[CurGridCol - 1] = BeforeInfo.WBefore.W;
|
|
}
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CellIndex = 0; CellIndex < CellsCount; CellIndex++) {
|
|
var Cell = Row.Get_Cell(CellIndex);
|
|
Cell.Set_Index(CellIndex);
|
|
var CellW = Cell.Get_W();
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
if (CurGridCol + GridSpan - 1 > SumGrid.length) {
|
|
for (var AddIndex = SumGrid.length; AddIndex <= CurGridCol + GridSpan - 1; AddIndex++) {
|
|
SumGrid[AddIndex] = SumGrid[AddIndex - 1] + 20;
|
|
}
|
|
}
|
|
if (tblwidth_Auto != CellW.Type && CellW.W + SumGrid[CurGridCol - 1] > SumGrid[CurGridCol + GridSpan - 1]) {
|
|
SumGrid[CurGridCol + GridSpan - 1] = CellW.W + SumGrid[CurGridCol - 1];
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
var AfterInfo = Row.Get_After();
|
|
if (CurGridCol + AfterInfo.GridAfter - 1 > SumGrid.length) {
|
|
for (var AddIndex = SumGrid.length; AddIndex <= CurGridCol + AfterInfo.GridAfter - 1; AddIndex++) {
|
|
SumGrid[AddIndex] = SumGrid[AddIndex - 1] + 20;
|
|
}
|
|
}
|
|
if (SumGrid[CurGridCol + AfterInfo.GridAfter - 1] < AfterInfo.WAfter + SumGrid[CurGridCol - 1]) {
|
|
SumGrid[CurGridCol + AfterInfo.GridAfter - 1] = AfterInfo.WAfter + SumGrid[CurGridCol - 1];
|
|
}
|
|
}
|
|
if (TableW > 0 && Math.abs(SumGrid[SumGrid.length - 1] - TableW) > 0.01) {
|
|
SumGrid = this.Internal_ScaleTableWidth(SumGrid, TableW);
|
|
} else {
|
|
if (MinWidth > SumGrid[SumGrid.length - 1]) {
|
|
SumGrid = this.Internal_ScaleTableWidth(SumGrid, SumGrid[SumGrid.length - 1]);
|
|
}
|
|
}
|
|
var TableGrid_old = new Array();
|
|
for (var Index = 0; Index < this.TableGrid.length; Index++) {
|
|
TableGrid_old[Index] = this.TableGrid[Index];
|
|
}
|
|
this.TableGrid[0] = SumGrid[0];
|
|
for (var Index = 1; Index < SumGrid.length; Index++) {
|
|
this.TableGrid[Index] = SumGrid[Index] - SumGrid[Index - 1];
|
|
}
|
|
this.Internal_SaveTableGridInHistory(this.TableGrid, TableGrid_old);
|
|
this.TableGridCalc = this.Internal_Copy_Grid(this.TableGrid);
|
|
this.TableSumGrid = SumGrid;
|
|
var TopTable = this.Parent.Is_InTable(true);
|
|
if ((null === TopTable && tbllayout_AutoFit === TablePr.TableLayout) || (null != TopTable && tbllayout_AutoFit === TopTable.Get_CompiledPr(false).TablePr.TableLayout)) {
|
|
var MinMargin = new Array(),
|
|
MinContent = new Array(),
|
|
MaxContent = new Array(),
|
|
MaxFlags = new Array();
|
|
var GridCount = this.TableGridCalc.length;
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
MinMargin[CurCol] = 0;
|
|
MinContent[CurCol] = 0;
|
|
MaxContent[CurCol] = 0;
|
|
MaxFlags[CurCol] = false;
|
|
}
|
|
var LeftMargin = 0,
|
|
RightMargin = 0;
|
|
var RowsCount = this.Content.length;
|
|
for (var CurRow = 0; CurRow < RowsCount; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CurGridCol = 0;
|
|
var BeforeInfo = Row.Get_Before();
|
|
var GridBefore = BeforeInfo.GridBefore;
|
|
var WBefore = BeforeInfo.WBefore;
|
|
if (1 === GridBefore) {
|
|
if (WBefore.Type === tblwidth_Mm) {
|
|
if (MinContent[CurGridCol] < WBefore.W) {
|
|
MinContent[CurGridCol] = WBefore.W;
|
|
}
|
|
if (false === MaxFlags[CurGridCol]) {
|
|
MaxFlags[CurGridCol] = true;
|
|
MaxContent[CurGridCol] = WBefore.W;
|
|
} else {
|
|
if (MaxContent[CurGridCol] < WBefore.W) {
|
|
MaxContent[CurGridCol] = WBefore.W;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (GridBefore > 1) {
|
|
var SumSpanMinContent = 0;
|
|
var SumSpanMaxContent = 0;
|
|
var SumSpanCurContent = 0;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridBefore; CurSpan++) {
|
|
SumSpanMinContent += MinContent[CurSpan];
|
|
SumSpanMaxContent += MaxContent[CurSpan];
|
|
SumSpanCurContent += this.TableGrid[CurSpan];
|
|
}
|
|
if (SumSpanMinContent < WBefore.W) {
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++) {
|
|
MinContent[CurSpan] = WBefore.W * this.TableGrid[CurSpan] / SumSpanCurContent;
|
|
}
|
|
}
|
|
if (WBefore.Type === tblwidth_Mm && WBefore.W > SumSpanMaxContent) {
|
|
var TempAdd = (WBefore.W - SumSpanMaxContent) / GridBefore;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridBefore; CurSpan++) {
|
|
MaxContent[CurSpan] = WBefore.W * this.TableGrid[CurSpan] / SumSpanCurContent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
CurGridCol = BeforeInfo.GridBefore;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var CellMinMax = Cell.Content.Recalculate_MinMaxContentWidth();
|
|
var CellMin = CellMinMax.Min;
|
|
var CellMax = CellMinMax.Max;
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var CellMargins = Cell.Get_Margins();
|
|
var CellMarginsW = CellMargins.Left.W + CellMargins.Right.W;
|
|
var CellW = Cell.Get_W();
|
|
if (MinMargin[CurGridCol] < CellMarginsW) {
|
|
MinMargin[CurGridCol] = CellMarginsW;
|
|
}
|
|
if (1 === GridSpan) {
|
|
if (MinContent[CurGridCol] < CellMin) {
|
|
MinContent[CurGridCol] = CellMin;
|
|
}
|
|
if (false === MaxFlags[CurGridCol] && MaxContent[CurGridCol] < CellMax) {
|
|
MaxContent[CurGridCol] = CellMax;
|
|
}
|
|
if (CellW.Type === tblwidth_Mm) {
|
|
if (false === MaxFlags[CurGridCol]) {
|
|
MaxFlags[CurGridCol] = true;
|
|
MaxContent[CurGridCol] = CellW.W;
|
|
} else {
|
|
if (MaxContent[CurGridCol] < CellW.W) {
|
|
MaxContent[CurGridCol] = CellW.W;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var SumSpanMinContent = 0;
|
|
var SumSpanMaxContent = 0;
|
|
var SumSpanCurContent = 0;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++) {
|
|
SumSpanMinContent += MinContent[CurSpan];
|
|
SumSpanMaxContent += MaxContent[CurSpan];
|
|
SumSpanCurContent += this.TableGrid[CurSpan];
|
|
}
|
|
if (SumSpanMinContent < CellMin) {
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++) {
|
|
MinContent[CurSpan] = CellMin * this.TableGrid[CurSpan] / SumSpanCurContent;
|
|
}
|
|
}
|
|
if (CellW.Type === tblwidth_Mm && CellW.W > CellMax) {
|
|
CellMax = CellW.W;
|
|
}
|
|
if (SumSpanMaxContent < CellMax) {
|
|
var TempAdd = (CellMax - SumSpanMaxContent) / GridSpan;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++) {
|
|
MaxContent[CurSpan] = CellMax * this.TableGrid[CurSpan] / SumSpanCurContent;
|
|
}
|
|
}
|
|
}
|
|
if (0 === CurRow && 0 === CurCell) {
|
|
LeftMargin = CellMargins.Left.W;
|
|
}
|
|
if (0 === CurRow && CellsCount - 1 === CurCell) {
|
|
RightMargin = CellMargins.Right.W;
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
var AfterInfo = Row.Get_After();
|
|
var GridAfter = AfterInfo.GridAfter;
|
|
var WAfter = AfterInfo.WAfter;
|
|
if (1 === GridAfter) {
|
|
if (WAfter.Type === tblwidth_Mm) {
|
|
if (MinContent[CurGridCol] < WAfter.W) {
|
|
MinContent[CurGridCol] = WAfter.W;
|
|
}
|
|
if (false === MaxFlags[CurGridCol]) {
|
|
MaxFlags[CurGridCol] = true;
|
|
MaxContent[CurGridCol] = WAfter.W;
|
|
} else {
|
|
if (MaxContent[CurGridCol] < WAfter.W) {
|
|
MaxContent[CurGridCol] = WAfter.W;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (GridAfter > 1) {
|
|
var SumSpanMinContent = 0;
|
|
var SumSpanMaxContent = 0;
|
|
var SumSpanCurContent = 0;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridAfter; CurSpan++) {
|
|
SumSpanMinContent += MinContent[CurSpan];
|
|
SumSpanMaxContent += MaxContent[CurSpan];
|
|
SumSpanCurContent += this.TableGrid[CurSpan];
|
|
}
|
|
if (SumSpanMinContent < WAfter.W) {
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++) {
|
|
MinContent[CurSpan] = WAfter.W * this.TableGrid[CurSpan] / SumSpanCurContent;
|
|
}
|
|
}
|
|
if (WAfter.Type === tblwidth_Mm && WAfter.W > SumSpanMaxContent) {
|
|
var TempAdd = (WAfter.W - SumSpanMaxContent) / GridAfter;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridAfter; CurSpan++) {
|
|
MaxContent[CurSpan] = WAfter.W * this.TableGrid[CurSpan] / SumSpanCurContent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
if (true === MaxFlags[CurCol]) {
|
|
MaxContent[CurCol] = Math.max(0, MaxContent[CurCol] - MinMargin[CurCol]);
|
|
}
|
|
}
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
if (MinMargin[CurCol] + MinContent[CurCol] > 558.7000000000001) {
|
|
MinContent[CurCol] = Math.max(558.7000000000001 - MinMargin[CurCol], 0);
|
|
}
|
|
if (MinMargin[CurCol] + MaxContent[CurCol] > 558.7000000000001) {
|
|
MaxContent[CurCol] = Math.max(558.7000000000001 - MinMargin[CurCol], 0);
|
|
}
|
|
}
|
|
var PageFields = this.Parent.Get_PageFields(this.PageNum);
|
|
var MaxTableW = PageFields.XLimit - PageFields.X - TablePr.TableInd;
|
|
if (null === TopTable) {
|
|
MaxTableW += LeftMargin + RightMargin;
|
|
}
|
|
var TableSpacing = this.Content[0].Get_CellSpacing();
|
|
if (null != TableSpacing) {
|
|
MaxTableW += 2 * TableSpacing;
|
|
}
|
|
var MaxContent2 = new Array();
|
|
var SumMin = 0,
|
|
SumMinMargin = 0,
|
|
SumMinContent = 0,
|
|
SumMax = 0,
|
|
SumMaxContent2 = 0;
|
|
var TableGrid2 = new Array();
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
var Temp = MinMargin[CurCol] + MinContent[CurCol];
|
|
TableGrid2[CurCol] = this.TableGridCalc[CurCol];
|
|
if (Temp < this.TableGridCalc[CurCol]) {
|
|
TableGrid2[CurCol] = this.TableGridCalc[CurCol];
|
|
} else {
|
|
TableGrid2[CurCol] = Temp;
|
|
}
|
|
MaxContent2[CurCol] = Math.max(0, MaxContent[CurCol] - MinContent[CurCol]);
|
|
SumMin += Temp;
|
|
SumMaxContent2 += MaxContent2[CurCol];
|
|
SumMinMargin += MinMargin[CurCol];
|
|
SumMinContent += MinContent[CurCol];
|
|
SumMax += MinMargin[CurCol] + MinContent[CurCol] + MaxContent2[CurCol];
|
|
}
|
|
if (SumMin < MaxTableW) {
|
|
if (SumMax <= MaxTableW || SumMaxContent2 < 0.001) {
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
this.TableGridCalc[CurCol] = MinMargin[CurCol] + Math.max(MinContent[CurCol], MaxContent[CurCol]);
|
|
}
|
|
} else {
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
this.TableGridCalc[CurCol] = MinMargin[CurCol] + MinContent[CurCol] + (MaxTableW - SumMin) * MaxContent2[CurCol] / SumMaxContent2;
|
|
}
|
|
}
|
|
} else {
|
|
if (MaxTableW < SumMinMargin) {
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
this.TableGridCalc[CurCol] = MinMargin[CurCol];
|
|
}
|
|
} else {
|
|
var ColsDiff = new Array();
|
|
var SumColsDiff = 0;
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
var Temp = TableGrid2[CurCol] - MinMargin[CurCol];
|
|
ColsDiff[CurCol] = Temp;
|
|
SumColsDiff += Temp;
|
|
}
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
TableGrid2[CurCol] = MinMargin[CurCol] + (MaxTableW - SumMinMargin) * ColsDiff[CurCol] / SumColsDiff;
|
|
}
|
|
var SumN = 0,
|
|
SumI = 0;
|
|
var GridCols = new Array();
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
var Temp = TableGrid2[CurCol] - (MinMargin[CurCol] + MinContent[CurCol]);
|
|
if (Temp >= 0) {
|
|
GridCols[CurCol] = Temp;
|
|
SumI += Temp;
|
|
} else {
|
|
GridCols[CurCol] = -1;
|
|
SumN -= Temp;
|
|
}
|
|
}
|
|
if (SumN > SumI || SumI <= 0) {
|
|
var SumDiff = MaxTableW - SumMinMargin;
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
this.TableGridCalc[CurCol] = MinMargin[CurCol] + SumDiff * MinContent[CurCol] / SumMinContent;
|
|
}
|
|
} else {
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
if (GridCols[CurCol] < 0) {
|
|
this.TableGridCalc[CurCol] = MinMargin[CurCol] + MinContent[CurCol];
|
|
} else {
|
|
this.TableGridCalc[CurCol] = TableGrid2[CurCol] - SumN * GridCols[CurCol] / SumI;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.TableSumGrid[-1] = 0;
|
|
for (var CurCol = 0; CurCol < GridCount; CurCol++) {
|
|
this.TableSumGrid[CurCol] = this.TableSumGrid[CurCol - 1] + this.TableGridCalc[CurCol];
|
|
}
|
|
}
|
|
this.RecalcInfo.TableGrid = false;
|
|
},
|
|
Internal_Recalculate_1: function () {
|
|
this.Parent.OnContentRecalculate();
|
|
return;
|
|
return editor.WordControl.m_oLogicDocument.Recalculate();
|
|
if (true === this.TurnOffRecalc) {
|
|
return;
|
|
}
|
|
this.TurnOffRecalc = true;
|
|
var TablePr = this.Get_CompiledPr(false).TablePr;
|
|
if (true === this.Is_Inline()) {
|
|
switch (TablePr.Jc) {
|
|
case align_Left:
|
|
this.X = this.X_origin + this.Get_TableOffsetCorrection() + TablePr.TableInd;
|
|
break;
|
|
case align_Right:
|
|
var TableWidth = this.TableSumGrid[this.TableSumGrid.length - 1];
|
|
if (false === this.Parent.Is_TableCellContent()) {
|
|
this.X = this.XLimit - TableWidth + 1.9;
|
|
} else {
|
|
this.X = this.XLimit - TableWidth;
|
|
}
|
|
break;
|
|
case align_Center:
|
|
var TableWidth = this.TableSumGrid[this.TableSumGrid.length - 1];
|
|
var RangeWidth = this.XLimit - this.X_origin;
|
|
this.X = this.X_origin + (RangeWidth - TableWidth) / 2;
|
|
break;
|
|
}
|
|
}
|
|
this.Pages.length = 0;
|
|
this.Pages[0] = {
|
|
Bounds: {
|
|
Top: this.Y,
|
|
Left: this.X,
|
|
Right: this.X + this.TableSumGrid[this.TableSumGrid.length - 1],
|
|
Bottom: this.Y
|
|
},
|
|
FirstRow: 0,
|
|
Height: 0,
|
|
Y: this.Y,
|
|
YLimit: this.YLimit,
|
|
MaxTopBorder: 0
|
|
};
|
|
var Y = this.Y;
|
|
var TableHeight = 0;
|
|
for (var Index = -1; Index < this.Content.length; Index++) {
|
|
this.TableRowsBottom[Index] = new Array();
|
|
this.TableRowsBottom[Index][0] = 0;
|
|
}
|
|
var MaxTopBorder = new Array();
|
|
var MaxBotBorder = new Array();
|
|
var MaxBotMargin = new Array();
|
|
for (var Index = 0; Index < this.Content.length; Index++) {
|
|
MaxBotBorder[Index] = 0;
|
|
MaxTopBorder[Index] = 0;
|
|
MaxBotMargin[Index] = 0;
|
|
}
|
|
var TableBorders = this.Get_Borders();
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var BeforeInfo = Row.Get_Before();
|
|
var AfterInfo = Row.Get_After();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
CurGridCol = BeforeInfo.GridBefore;
|
|
var bSpacing_Top = false;
|
|
var bSpacing_Bot = false;
|
|
if (null != CellSpacing) {
|
|
bSpacing_Bot = true;
|
|
bSpacing_Top = true;
|
|
} else {
|
|
if (0 != CurRow) {
|
|
var PrevCellSpacing = this.Content[CurRow - 1].Get_CellSpacing();
|
|
if (null != PrevCellSpacing) {
|
|
bSpacing_Top = true;
|
|
}
|
|
}
|
|
if (this.Content.length - 1 != CurRow) {
|
|
var NextCellSpacing = this.Content[CurRow + 1].Get_CellSpacing();
|
|
if (null != NextCellSpacing) {
|
|
bSpacing_Bot = true;
|
|
}
|
|
}
|
|
}
|
|
Row.Set_SpacingInfo(bSpacing_Top, bSpacing_Bot);
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
Row.Set_CellInfo(CurCell, CurGridCol, 0, 0, 0, 0, 0, 0);
|
|
if (vmerge_Continue === Vmerge) {
|
|
var VMergeCount2 = this.Internal_GetVertMergeCount2(CurRow, CurGridCol, GridSpan);
|
|
if (VMergeCount2 > 1) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
} else {
|
|
Cell.Set_VMerge(vmerge_Restart);
|
|
}
|
|
}
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var CellMargins = Cell.Get_Margins();
|
|
if (CellMargins.Bottom.W > MaxBotMargin[CurRow + VMergeCount - 1]) {
|
|
MaxBotMargin[CurRow + VMergeCount - 1] = CellMargins.Bottom.W;
|
|
}
|
|
var CellBorders = Cell.Get_Borders();
|
|
if (true === bSpacing_Top) {
|
|
if (border_Single === CellBorders.Top.Value && MaxTopBorder[CurRow] < CellBorders.Top.Size) {
|
|
MaxTopBorder[CurRow] = CellBorders.Top.Size;
|
|
}
|
|
Cell.Set_BorderInfo_Top([CellBorders.Top]);
|
|
} else {
|
|
if (0 === CurRow) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Top, CellBorders.Top, true, false);
|
|
if (border_Single === Result_Border.Value && MaxTopBorder[CurRow] < Result_Border.Size) {
|
|
MaxTopBorder[CurRow] = Result_Border.Size;
|
|
}
|
|
var BorderInfo_Top = new Array();
|
|
for (var TempIndex = 0; TempIndex < GridSpan; TempIndex++) {
|
|
BorderInfo_Top.push(Result_Border);
|
|
}
|
|
Cell.Set_BorderInfo_Top(BorderInfo_Top);
|
|
} else {
|
|
var Prev_Row = this.Content[CurRow - 1];
|
|
var Prev_CellsCount = Prev_Row.Get_CellsCount();
|
|
var Prev_BeforeInfo = Prev_Row.Get_Before();
|
|
var Prev_AfterInfo = Prev_Row.Get_After();
|
|
var Prev_Pos = -1;
|
|
var Prev_GridCol = Prev_BeforeInfo.GridBefore;
|
|
for (var PrevCell = 0; PrevCell < Prev_CellsCount; PrevCell++) {
|
|
var Prev_Cell = Prev_Row.Get_Cell(PrevCell);
|
|
var Prev_GridSpan = Prev_Cell.Get_GridSpan();
|
|
if (Prev_GridCol <= CurGridCol + GridSpan - 1 && Prev_GridCol + Prev_GridSpan - 1 >= CurGridCol) {
|
|
Prev_Pos = PrevCell;
|
|
break;
|
|
}
|
|
Prev_GridCol += Prev_GridSpan;
|
|
}
|
|
var Border_Top_Info = new Array();
|
|
if (CurGridCol <= Prev_BeforeInfo.GridBefore - 1) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Left, CellBorders.Top, true, false);
|
|
if (border_Single === Result_Border.Value && MaxTopBorder[CurRow] < Result_Border.Size) {
|
|
MaxTopBorder[CurRow] = Result_Border.Size;
|
|
}
|
|
var AddCount = Math.min(Prev_BeforeInfo.GridBefore - CurGridCol, GridSpan);
|
|
for (var TempIndex = 0; TempIndex < AddCount; TempIndex++) {
|
|
Border_Top_Info.push(Result_Border);
|
|
}
|
|
}
|
|
if (-1 != Prev_Pos) {
|
|
while (Prev_GridCol <= CurGridCol + GridSpan - 1 && Prev_Pos < Prev_CellsCount) {
|
|
var Prev_Cell = Prev_Row.Get_Cell(Prev_Pos);
|
|
var Prev_GridSpan = Prev_Cell.Get_GridSpan();
|
|
var Prev_VMerge = Prev_Cell.Get_VMerge();
|
|
if (vmerge_Continue === Prev_VMerge) {
|
|
Prev_Cell = this.Internal_Get_StartMergedCell(CurRow - 1, Prev_GridCol, Prev_GridSpan);
|
|
}
|
|
var PrevBorders = Prev_Cell.Get_Borders();
|
|
var Result_Border = this.Internal_CompareBorders(PrevBorders.Bottom, CellBorders.Top, false, false);
|
|
if (border_Single === Result_Border.Value && MaxTopBorder[CurRow] < Result_Border.Size) {
|
|
MaxTopBorder[CurRow] = Result_Border.Size;
|
|
}
|
|
var AddCount = 0;
|
|
if (Prev_GridCol >= CurGridCol) {
|
|
if (Prev_GridCol + Prev_GridSpan - 1 > CurGridCol + GridSpan - 1) {
|
|
AddCount = CurGridCol + GridSpan - Prev_GridCol;
|
|
} else {
|
|
AddCount = Prev_GridSpan;
|
|
}
|
|
} else {
|
|
if (Prev_GridCol + Prev_GridSpan - 1 > CurGridCol + GridSpan - 1) {
|
|
AddCount = GridSpan;
|
|
} else {
|
|
AddCount = Prev_GridCol + Prev_GridSpan - CurGridCol;
|
|
}
|
|
}
|
|
for (var TempIndex = 0; TempIndex < AddCount; TempIndex++) {
|
|
Border_Top_Info.push(Result_Border);
|
|
}
|
|
Prev_Pos++;
|
|
Prev_GridCol += Prev_GridSpan;
|
|
}
|
|
}
|
|
if (Prev_AfterInfo.GridAfter > 0) {
|
|
var StartAfterGrid = Prev_Row.Get_CellInfo(Prev_CellsCount - 1).StartGridCol + Prev_Row.Get_Cell(Prev_CellsCount - 1).Get_GridSpan();
|
|
if (CurGridCol + GridSpan - 1 >= StartAfterGrid) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Right, CellBorders.Top, true, false);
|
|
if (border_Single === Result_Border.Value && MaxTopBorder[CurRow] < Result_Border.Size) {
|
|
MaxTopBorder[CurRow] = Result_Border.Size;
|
|
}
|
|
var AddCount = Math.min(CurGridCol + GridSpan - StartAfterGrid, GridSpan);
|
|
for (var TempIndex = 0; TempIndex < AddCount; TempIndex++) {
|
|
Border_Top_Info.push(Result_Border);
|
|
}
|
|
}
|
|
}
|
|
Cell.Set_BorderInfo_Top(Border_Top_Info);
|
|
}
|
|
}
|
|
if (true === bSpacing_Bot) {
|
|
Cell.Set_BorderInfo_Bottom([CellBorders.Bottom], -1, -1);
|
|
if (border_Single === CellBorders.Bottom.Value && CellBorders.Bottom.Size > MaxBotBorder[CurRow + VMergeCount - 1]) {
|
|
MaxBotBorder[CurRow + VMergeCount - 1] = CellBorders.Bottom.Size;
|
|
}
|
|
} else {
|
|
if (this.Content.length - 1 === CurRow + VMergeCount - 1) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Bottom, CellBorders.Bottom, true, false);
|
|
if (border_Single === Result_Border.Value && Result_Border.Size > MaxBotBorder[CurRow + VMergeCount - 1]) {
|
|
MaxBotBorder[CurRow + VMergeCount - 1] = Result_Border.Size;
|
|
}
|
|
if (GridSpan > 0) {
|
|
for (var TempIndex = 0; TempIndex < GridSpan; TempIndex++) {
|
|
Cell.Set_BorderInfo_Bottom([Result_Border], -1, -1);
|
|
}
|
|
} else {
|
|
Cell.Set_BorderInfo_Bottom([], -1, -1);
|
|
}
|
|
} else {
|
|
var Next_Row = this.Content[CurRow + VMergeCount];
|
|
var Next_CellsCount = Next_Row.Get_CellsCount();
|
|
var Next_BeforeInfo = Next_Row.Get_Before();
|
|
var Next_AfterInfo = Next_Row.Get_After();
|
|
var Border_Bottom_Info = new Array();
|
|
var BeforeCount = 0;
|
|
if (CurGridCol <= Next_BeforeInfo.GridBefore - 1) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Left, CellBorders.Bottom, true, false);
|
|
BeforeCount = Math.min(Next_BeforeInfo.GridBefore - CurGridCol, GridSpan);
|
|
for (var TempIndex = 0; TempIndex < BeforeCount; TempIndex++) {
|
|
Border_Bottom_Info.push(Result_Border);
|
|
}
|
|
}
|
|
var Next_GridCol = Next_BeforeInfo.GridBefore;
|
|
for (var NextCell = 0; NextCell < Next_CellsCount; NextCell++) {
|
|
var Next_Cell = Next_Row.Get_Cell(NextCell);
|
|
var Next_GridSpan = Next_Cell.Get_GridSpan();
|
|
Next_GridCol += Next_GridSpan;
|
|
}
|
|
var AfterCount = 0;
|
|
if (Next_AfterInfo.GridAfter > 0) {
|
|
var StartAfterGrid = Next_GridCol;
|
|
if (CurGridCol + GridSpan - 1 >= StartAfterGrid) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Right, CellBorders.Bottom, true, false);
|
|
AfterCount = Math.min(CurGridCol + GridSpan - StartAfterGrid, GridSpan);
|
|
for (var TempIndex = 0; TempIndex < AfterCount; TempIndex++) {
|
|
Border_Bottom_Info.push(Result_Border);
|
|
}
|
|
}
|
|
}
|
|
Cell.Set_BorderInfo_Bottom(Border_Bottom_Info, BeforeCount, AfterCount);
|
|
}
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
}
|
|
this.MaxTopBorder = MaxTopBorder;
|
|
this.MaxBotBorder = MaxBotBorder;
|
|
this.MaxBotMargin = MaxBotMargin;
|
|
var X_max = -1;
|
|
var X_min = -1;
|
|
var CurPage = 0;
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var BeforeInfo = Row.Get_Before();
|
|
var AfterInfo = Row.Get_After();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
if (0 === CurRow) {
|
|
if (null != CellSpacing) {
|
|
var TableBorder_Top = this.Get_Borders().Top;
|
|
if (border_Single === TableBorder_Top.Value) {
|
|
Y += TableBorder_Top.Size;
|
|
TableHeight += TableBorder_Top.Size;
|
|
}
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
}
|
|
} else {
|
|
var PrevCellSpacing = this.Content[CurRow - 1].Get_CellSpacing();
|
|
if (null != CellSpacing && null != PrevCellSpacing) {
|
|
Y += (PrevCellSpacing + CellSpacing) / 2;
|
|
TableHeight += (PrevCellSpacing + CellSpacing) / 2;
|
|
} else {
|
|
if (null != CellSpacing) {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
} else {
|
|
if (null != PrevCellSpacing) {
|
|
Y += PrevCellSpacing / 2;
|
|
TableHeight += PrevCellSpacing / 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Y += MaxTopBorder[CurRow];
|
|
TableHeight += MaxTopBorder[CurRow];
|
|
var Row_x_max = 0;
|
|
var Row_x_min = 0;
|
|
var LastPage = CurPage;
|
|
var Pages_Y_Pos = new Array();
|
|
var Pages_Max_Top_Border = new Array();
|
|
var MaxBotValue_vmerge = -1;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var X_grid_start = this.X + this.TableSumGrid[CurGridCol - 1];
|
|
var X_grid_end = this.X + this.TableSumGrid[CurGridCol + GridSpan - 1];
|
|
var X_cell_start = X_grid_start;
|
|
var X_cell_end = X_grid_end;
|
|
if (null != CellSpacing) {
|
|
if (0 === CurCell) {
|
|
if (0 === BeforeInfo.GridBefore) {
|
|
if (border_None === TableBorders.Left.Value || CellSpacing > TableBorders.Left.Size / 2) {
|
|
X_cell_start += CellSpacing;
|
|
} else {
|
|
X_cell_start += TableBorders.Left.Size / 2;
|
|
}
|
|
} else {
|
|
if (border_None === TableBorders.Left.Value || CellSpacing > TableBorders.Left.Size) {
|
|
X_cell_start += CellSpacing / 2;
|
|
} else {
|
|
X_cell_start += TableBorders.Left.Size / 2;
|
|
}
|
|
}
|
|
} else {
|
|
X_cell_start += CellSpacing / 2;
|
|
}
|
|
if (CellsCount - 1 === CurCell) {
|
|
if (0 === AfterInfo.GridAfter) {
|
|
if (border_None === TableBorders.Right.Value || CellSpacing > TableBorders.Right.Size / 2) {
|
|
X_cell_end -= CellSpacing;
|
|
} else {
|
|
X_cell_end -= TableBorders.Right.Size / 2;
|
|
}
|
|
} else {
|
|
if (border_None === TableBorders.Right.Value || CellSpacing > TableBorders.Right.Size) {
|
|
X_cell_end -= CellSpacing / 2;
|
|
} else {
|
|
X_cell_end -= TableBorders.Right.Size / 2;
|
|
}
|
|
}
|
|
} else {
|
|
X_cell_end -= CellSpacing / 2;
|
|
}
|
|
}
|
|
var CellMar = Cell.Get_Margins();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var X_content_start = X_cell_start;
|
|
var X_content_end = X_cell_end;
|
|
var CellBorders = Cell.Get_Borders();
|
|
if (null != CellSpacing) {
|
|
X_content_start += CellMar.Left.W;
|
|
X_content_end -= CellMar.Right.W;
|
|
if (border_Single === CellBorders.Left.Value) {
|
|
X_content_start += CellBorders.Left.Size;
|
|
}
|
|
if (border_Single === CellBorders.Right.Value) {
|
|
X_content_end -= CellBorders.Right.Size;
|
|
}
|
|
} else {
|
|
if (vmerge_Continue === Vmerge) {
|
|
X_content_start += CellMar.Left.W;
|
|
X_content_end -= CellMar.Right.W;
|
|
} else {
|
|
var Max_r_w = 0;
|
|
var Max_l_w = 0;
|
|
var Borders_Info = {
|
|
Right: new Array(),
|
|
Left: new Array(),
|
|
Right_Max: 0,
|
|
Left_Max: 0
|
|
};
|
|
for (var Temp_CurRow = 0; Temp_CurRow < VMergeCount; Temp_CurRow++) {
|
|
var Temp_Row = this.Content[CurRow + Temp_CurRow];
|
|
var Temp_CellsCount = Temp_Row.Get_CellsCount();
|
|
var Temp_CurCell = this.Internal_Get_Cell_ByStartGridCol(CurRow + Temp_CurRow, CurGridCol);
|
|
if (Temp_CurCell < 0) {
|
|
continue;
|
|
}
|
|
if (0 === Temp_CurCell) {
|
|
var LeftBorder = this.Internal_CompareBorders(TableBorders.Left, CellBorders.Left, true, false);
|
|
if (border_Single === LeftBorder.Value && LeftBorder.Size > Max_l_w) {
|
|
Max_l_w = LeftBorder.Size;
|
|
}
|
|
Borders_Info.Left.push(LeftBorder);
|
|
} else {
|
|
var Temp_Prev_Cell = Temp_Row.Get_Cell(Temp_CurCell - 1);
|
|
var Temp_Prev_VMerge = Temp_Prev_Cell.Get_VMerge();
|
|
if (0 != Temp_CurRow && vmerge_Continue === Temp_Prev_VMerge) {
|
|
Borders_Info.Left.push(Borders_Info.Left[Borders_Info.Left.length - 1]);
|
|
} else {
|
|
var Temp_Prev_Main_Cell = this.Internal_Get_StartMergedCell(CurRow + Temp_CurRow, CurGridCol - Temp_Prev_Cell.Get_GridSpan(), Temp_Prev_Cell.Get_GridSpan());
|
|
var Temp_Prev_Main_Cell_Borders = Temp_Prev_Main_Cell.Get_Borders();
|
|
var LeftBorder = this.Internal_CompareBorders(Temp_Prev_Main_Cell_Borders.Right, CellBorders.Left, false, false);
|
|
if (border_Single === LeftBorder.Value && LeftBorder.Size > Max_l_w) {
|
|
Max_l_w = LeftBorder.Size;
|
|
}
|
|
Borders_Info.Left.push(LeftBorder);
|
|
}
|
|
}
|
|
if (Temp_CellsCount - 1 === Temp_CurCell) {
|
|
var RightBorder = this.Internal_CompareBorders(TableBorders.Right, CellBorders.Right, true, false);
|
|
if (border_Single === RightBorder.Value && RightBorder.Size > Max_r_w) {
|
|
Max_r_w = RightBorder.Size;
|
|
}
|
|
Borders_Info.Right.push(RightBorder);
|
|
} else {
|
|
var Temp_Next_Cell = Temp_Row.Get_Cell(Temp_CurCell + 1);
|
|
var Temp_Next_VMerge = Temp_Next_Cell.Get_VMerge();
|
|
if (0 != Temp_CurRow && vmerge_Continue === Temp_Next_VMerge) {
|
|
Borders_Info.Right.push(Borders_Info.Right[Borders_Info.Right.length - 1]);
|
|
} else {
|
|
var Temp_Next_Main_Cell = this.Internal_Get_StartMergedCell(CurRow + Temp_CurRow, CurGridCol + GridSpan, Temp_Next_Cell.Get_GridSpan());
|
|
var Temp_Next_Main_Cell_Borders = Temp_Next_Main_Cell.Get_Borders();
|
|
var RightBorder = this.Internal_CompareBorders(Temp_Next_Main_Cell_Borders.Left, CellBorders.Right, false, false);
|
|
if (border_Single === RightBorder.Value && RightBorder.Size > Max_r_w) {
|
|
Max_r_w = RightBorder.Size;
|
|
}
|
|
Borders_Info.Right.push(RightBorder);
|
|
}
|
|
}
|
|
}
|
|
Borders_Info.Right_Max = Max_r_w;
|
|
Borders_Info.Left_Max = Max_l_w;
|
|
if (Max_l_w / 2 > CellMar.Left.W) {
|
|
X_content_start += Max_l_w / 2;
|
|
} else {
|
|
X_content_start += CellMar.Left.W;
|
|
}
|
|
if (Max_r_w / 2 > CellMar.Right.W) {
|
|
X_content_end -= Max_r_w / 2;
|
|
} else {
|
|
X_content_end -= CellMar.Right.W;
|
|
}
|
|
Cell.Set_BorderInfo_Left(Borders_Info.Left, Max_l_w);
|
|
Cell.Set_BorderInfo_Right(Borders_Info.Right, Max_r_w);
|
|
}
|
|
}
|
|
if (0 === CurCell) {
|
|
if (null != CellSpacing) {
|
|
Row_x_min = X_grid_start;
|
|
if (border_Single === TableBorders.Left.Value) {
|
|
Row_x_min -= TableBorders.Left.Size / 2;
|
|
}
|
|
} else {
|
|
var BorderInfo = Cell.Get_BorderInfo();
|
|
Row_x_min = X_grid_start - BorderInfo.MaxLeft / 2;
|
|
}
|
|
}
|
|
if (CellsCount - 1 === CurCell) {
|
|
if (null != CellSpacing) {
|
|
Row_x_max = X_grid_end;
|
|
if (border_Single === TableBorders.Right.Value) {
|
|
Row_x_max += TableBorders.Right.Size / 2;
|
|
}
|
|
} else {
|
|
var BorderInfo = Cell.Get_BorderInfo();
|
|
Row_x_max = X_grid_end + BorderInfo.MaxRight / 2;
|
|
}
|
|
}
|
|
Row.Set_CellInfo(CurCell, CurGridCol, X_grid_start, X_grid_end, X_cell_start, X_cell_end, X_content_start, X_content_end);
|
|
var Y_content_start = Y + CellMar.Top.W;
|
|
var CurPage_old = CurPage;
|
|
Cell.Temp = {
|
|
CurPage: CurPage,
|
|
Y: Y
|
|
};
|
|
if (VMergeCount > 1) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
} else {
|
|
if (vmerge_Restart != Vmerge) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
CellMar = Cell.Get_Margins();
|
|
Y_content_start = Cell.Temp.Y + CellMar.Top.W;
|
|
CurPage = Cell.Temp.CurPage;
|
|
}
|
|
}
|
|
var Y_content_end = this.Pages[CurPage].YLimit;
|
|
if (null != CellSpacing) {
|
|
if (this.Content.length - 1 === CurRow) {
|
|
Y_content_end -= CellSpacing;
|
|
} else {
|
|
Y_content_end -= CellSpacing / 2;
|
|
}
|
|
}
|
|
var BottomMargin = this.MaxBotMargin[CurRow + VMergeCount - 1];
|
|
Y_content_end -= BottomMargin;
|
|
Cell.Content_Set_StartPage(CurPage);
|
|
Cell.Content_Reset(X_content_start, Y_content_start, X_content_end, 20000);
|
|
Cell.Recalculate();
|
|
var PagesCount = Cell.Content_Get_PagesCount();
|
|
for (var PageIndex = 0; PageIndex < PagesCount; PageIndex++) {
|
|
var CellContentBounds = Cell.Content_Get_PageBounds(PageIndex);
|
|
var CellContentBounds_Bottom = CellContentBounds.Bottom + BottomMargin;
|
|
if (CurPage + PageIndex >= CurPage_old) {
|
|
if (vmerge_Continue === Vmerge && CurPage + PageIndex === CurPage_old) {
|
|
if (-1 === MaxBotValue_vmerge || MaxBotValue_vmerge < CellContentBounds_Bottom) {
|
|
MaxBotValue_vmerge = CellContentBounds_Bottom;
|
|
}
|
|
}
|
|
if ("undefined" === typeof(this.TableRowsBottom[CurRow]) || "undefined" === typeof(this.TableRowsBottom[CurRow][CurPage + PageIndex]) || this.TableRowsBottom[CurRow][CurPage + PageIndex] < CellContentBounds_Bottom) {
|
|
if ("undefined" === typeof(this.TableRowsBottom[CurRow])) {
|
|
this.TableRowsBottom[CurRow] = new Array();
|
|
}
|
|
this.TableRowsBottom[CurRow][CurPage + PageIndex] = CellContentBounds_Bottom;
|
|
}
|
|
if (0 != PageIndex) {
|
|
if ("undefined" === typeof(this.Pages[CurPage + PageIndex])) {
|
|
var StartPos = this.Parent.Get_PageContentStartPos(CurPage + PageIndex);
|
|
var StartRowPos = this.Get_PageContentStartPos(CurPage + PageIndex, CurRow, CurCell);
|
|
this.Pages[CurPage + PageIndex] = {
|
|
Bounds: {
|
|
Top: StartPos.Y,
|
|
Left: this.X,
|
|
Right: this.X + this.TableSumGrid[this.TableSumGrid.length - 1],
|
|
Bottom: StartPos.Y
|
|
},
|
|
FirstRow: CurRow,
|
|
Height: 0,
|
|
Y: StartRowPos.Y,
|
|
YLimit: StartRowPos.YLimit,
|
|
MaxTopBorder: StartRowPos.MaxTopBorder
|
|
};
|
|
Pages_Y_Pos[CurPage + PageIndex] = StartRowPos.Y;
|
|
Pages_Max_Top_Border[CurPage + PageIndex] = StartRowPos.MaxTopBorder;
|
|
}
|
|
}
|
|
if (LastPage < CurPage + PageIndex) {
|
|
LastPage = CurPage + PageIndex;
|
|
}
|
|
} else {
|
|
var TempRow = this.Pages[CurPage + PageIndex + 1].FirstRow;
|
|
if (true === this.RowsInfo[TempRow].FirstPage) {
|
|
if ("undefined" === typeof(this.TableRowsBottom[TempRow]) || "undefined" === typeof(this.TableRowsBottom[TempRow][CurPage + PageIndex]) || this.TableRowsBottom[TempRow][CurPage + PageIndex] < CellContentBounds_Bottom) {
|
|
if ("undefined" === typeof(this.TableRowsBottom[TempRow])) {
|
|
this.TableRowsBottom[TempRow] = new Array();
|
|
}
|
|
this.TableRowsBottom[TempRow][CurPage + PageIndex] = CellContentBounds_Bottom;
|
|
}
|
|
} else {
|
|
if (TempRow > 0) {
|
|
if ("undefined" === typeof(this.TableRowsBottom[TempRow - 1]) || "undefined" === typeof(this.TableRowsBottom[TempRow - 1][CurPage + PageIndex]) || this.TableRowsBottom[TempRow - 1][CurPage + PageIndex] < CellContentBounds_Bottom) {
|
|
if ("undefined" === typeof(this.TableRowsBottom[TempRow - 1])) {
|
|
this.TableRowsBottom[TempRow - 1] = new Array();
|
|
}
|
|
this.TableRowsBottom[TempRow - 1][CurPage + PageIndex] = CellContentBounds_Bottom;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
CurPage = CurPage_old;
|
|
CurGridCol += GridSpan;
|
|
}
|
|
if (-1 === X_min || Row_x_min < X_min) {
|
|
X_min = Row_x_min;
|
|
}
|
|
if (-1 === X_max || Row_x_max > X_max) {
|
|
X_max = Row_x_max;
|
|
}
|
|
var RowH = Row.Get_Height();
|
|
this.RowsInfo[CurRow] = new Object();
|
|
this.RowsInfo[CurRow].Pages = LastPage - CurPage + 1;
|
|
this.RowsInfo[CurRow].Y = new Array();
|
|
this.RowsInfo[CurRow].H = new Array();
|
|
this.RowsInfo[CurRow].TopDy = new Array();
|
|
this.RowsInfo[CurRow].MaxTopBorder = new Array();
|
|
this.RowsInfo[CurRow].FirstPage = true;
|
|
this.RowsInfo[CurRow].StartPage = CurPage;
|
|
for (var PageIndex = 0; PageIndex < this.RowsInfo[CurRow].Pages; PageIndex++) {
|
|
var TempY = Y;
|
|
var TempMaxTopBorder = MaxTopBorder[CurRow];
|
|
if (0 != PageIndex) {
|
|
TempY = Pages_Y_Pos[CurPage + PageIndex];
|
|
TempMaxTopBorder = Pages_Max_Top_Border[CurPage + PageIndex];
|
|
if (1 === PageIndex) {
|
|
var bContentOnFirstPage = false;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
if (vmerge_Continue === Vmerge || VMergeCount > 1) {
|
|
continue;
|
|
}
|
|
if (true === Cell.Content_Is_ContentOnFirstPage()) {
|
|
bContentOnFirstPage = true;
|
|
break;
|
|
}
|
|
}
|
|
this.RowsInfo[CurRow].FirstPage = bContentOnFirstPage;
|
|
if (0 != CurRow && false === this.RowsInfo[CurRow].FirstPage) {
|
|
if (this.TableRowsBottom[CurRow - 1][CurPage] < MaxBotValue_vmerge) {
|
|
this.TableRowsBottom[CurRow - 1][CurPage] = MaxBotValue_vmerge;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (null != CellSpacing) {
|
|
this.RowsInfo[CurRow].Y[CurPage + PageIndex] = TempY;
|
|
this.RowsInfo[CurRow].TopDy[CurPage + PageIndex] = 0;
|
|
this.RowsInfo[CurRow].X0 = Row_x_min;
|
|
this.RowsInfo[CurRow].X1 = Row_x_max;
|
|
this.RowsInfo[CurRow].MaxTopBorder[CurPage + PageIndex] = TempMaxTopBorder;
|
|
this.RowsInfo[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
} else {
|
|
this.RowsInfo[CurRow].Y[CurPage + PageIndex] = TempY - TempMaxTopBorder;
|
|
this.RowsInfo[CurRow].TopDy[CurPage + PageIndex] = TempMaxTopBorder;
|
|
this.RowsInfo[CurRow].X0 = Row_x_min;
|
|
this.RowsInfo[CurRow].X1 = Row_x_max;
|
|
this.RowsInfo[CurRow].MaxTopBorder[CurPage + PageIndex] = TempMaxTopBorder;
|
|
this.RowsInfo[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
}
|
|
}
|
|
if (LastPage != CurPage) {
|
|
var TempCellHeight = this.TableRowsBottom[CurRow][CurPage] - Y;
|
|
TableHeight += TempCellHeight + MaxBotBorder[CurRow];
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
if (border_Single === TableBorders.Bottom.Value) {
|
|
TableHeight += TableBorders.Bottom.Size;
|
|
}
|
|
this.Pages[CurPage].Bounds.Bottom = this.Pages[CurPage].YLimit;
|
|
this.Pages[CurPage].Bounds.Left = X_min;
|
|
this.Pages[CurPage].Bounds.Right = X_max;
|
|
this.Pages[CurPage].Height = TableHeight;
|
|
for (var PageId = CurPage + 1; PageId < LastPage; PageId++) {
|
|
Y = this.Parent.Get_PageContentStartPos(CurPage + PageId, CurRow, 0).Y;
|
|
TableHeight = 0;
|
|
if (null != CellSpacing) {
|
|
if (border_Single === TableBorders.Top.Value) {
|
|
Y += TableBorders.Top.Size;
|
|
TableHeight += TableBorders.Top.Size;
|
|
}
|
|
if (0 === CurRow) {
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
} else {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
}
|
|
Y += Pages_Max_Top_Border[LastPage];
|
|
TableHeight += Pages_Max_Top_Border[LastPage];
|
|
TempCellHeight = this.TableRowsBottom[CurRow][PageId] - Y;
|
|
TableHeight += TempCellHeight + MaxBotBorder[CurRow];
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
if (border_Single === TableBorders.Bottom.Value) {
|
|
TableHeight += TableBorders.Bottom.Size;
|
|
}
|
|
this.Pages[PageId].Bounds.Bottom = this.Pages[PageId].YLimit;
|
|
this.Pages[PageId].Bounds.Left = X_min;
|
|
this.Pages[PageId].Bounds.Right = X_max;
|
|
this.Pages[PageId].Height = TableHeight;
|
|
}
|
|
TableHeight = 0;
|
|
Y = this.Parent.Get_PageContentStartPos(LastPage).Y;
|
|
if (null != CellSpacing) {
|
|
if (border_Single === TableBorders.Top.Value) {
|
|
Y += TableBorders.Top.Size;
|
|
TableHeight += TableBorders.Top.Size;
|
|
}
|
|
if (0 === CurRow) {
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
} else {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
}
|
|
Y += Pages_Max_Top_Border[LastPage];
|
|
TableHeight += Pages_Max_Top_Border[LastPage];
|
|
}
|
|
var CellHeight = this.TableRowsBottom[CurRow][LastPage] - Y;
|
|
if (LastPage === CurPage && heightrule_AtLeast === RowH.HRule && CellHeight < RowH.Value) {
|
|
CellHeight = RowH.Value;
|
|
this.TableRowsBottom[CurRow][CurPage] = Y + CellHeight;
|
|
}
|
|
Y += CellHeight;
|
|
TableHeight += CellHeight;
|
|
Row.Height = CellHeight;
|
|
Row.PagesCount = LastPage - CurPage + 1;
|
|
Y += MaxBotBorder[CurRow];
|
|
TableHeight += MaxBotBorder[CurRow];
|
|
if (this.Content.length - 1 === CurRow) {
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing;
|
|
var TableBorder_Bottom = this.Get_Borders().Bottom;
|
|
if (border_Single === TableBorder_Bottom.Value) {
|
|
TableHeight += TableBorder_Bottom.Size;
|
|
}
|
|
}
|
|
}
|
|
CurPage = LastPage;
|
|
}
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var StartPage = this.RowsInfo[CurRow].StartPage;
|
|
var RowH = Row.Get_Height();
|
|
for (var PageIndex = 0; PageIndex < this.RowsInfo[CurRow].Pages; PageIndex++) {
|
|
var TempMaxTopBorder = this.RowsInfo[CurRow].MaxTopBorder[StartPage + PageIndex];
|
|
var TempY = 0;
|
|
if (null != CellSpacing) {
|
|
TempY = this.RowsInfo[CurRow].Y[StartPage + PageIndex];
|
|
} else {
|
|
TempY = this.RowsInfo[CurRow].Y[StartPage + PageIndex] + TempMaxTopBorder;
|
|
}
|
|
var TempCellHeight = this.TableRowsBottom[CurRow][StartPage + PageIndex] - TempY;
|
|
if (1 === this.RowsInfo[CurRow].Pages && heightrule_AtLeast === RowH.HRule && TempCellHeight < RowH.Value) {
|
|
TempCellHeight = RowH.Value;
|
|
}
|
|
if (null != CellSpacing) {
|
|
this.RowsInfo[CurRow].H[StartPage + PageIndex] = TempCellHeight;
|
|
} else {
|
|
this.RowsInfo[CurRow].H[StartPage + PageIndex] = TempCellHeight + TempMaxTopBorder;
|
|
}
|
|
}
|
|
}
|
|
for (var Index = 0; Index < this.Pages.length - 1; Index++) {
|
|
var CurRow = this.Pages[Index + 1].FirstRow;
|
|
if (0 === CurRow && false === this.RowsInfo[CurRow].FirstPage) {
|
|
this.Pages[Index].MaxBotBorder = 0;
|
|
this.Pages[Index].BotBorders = new Array();
|
|
continue;
|
|
} else {
|
|
if (false === this.RowsInfo[CurRow].FirstPage) {
|
|
CurRow--;
|
|
}
|
|
}
|
|
var MaxBotBorder = 0;
|
|
var BotBorders = new Array();
|
|
if (this.Content.length - 1 === CurRow) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
}
|
|
var Border_Info = Cell.Get_BorderInfo().Bottom;
|
|
for (var BorderId = 0; BorderId < Border_Info.length; BorderId++) {
|
|
var Border = Border_Info[BorderId];
|
|
if (border_Single === Border.Value && MaxBotBorder < Border.Size) {
|
|
MaxBotBorder = Border.Size;
|
|
}
|
|
BotBorders.push(Border);
|
|
}
|
|
}
|
|
} else {
|
|
var Row = this.Content[CurRow];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var CellsCount = Row.Get_CellsCount();
|
|
if (null != CellSpacing) {
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Border = Cell.Get_Borders().Bottom;
|
|
if (border_Single === Border.Value && MaxBotBorder < Border.Size) {
|
|
MaxBotBorder = Border.Size;
|
|
}
|
|
}
|
|
} else {
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
if (null === Cell) {
|
|
BotBorders.push(TableBorders.Bottom);
|
|
continue;
|
|
}
|
|
}
|
|
var Border = Cell.Get_Borders().Bottom;
|
|
var Result_Border = this.Internal_CompareBorders(Border, TableBorders.Bottom, false, true);
|
|
if (border_Single === Result_Border.Value && MaxBotBorder < Result_Border.Size) {
|
|
MaxBotBorder = Result_Border.Size;
|
|
}
|
|
BotBorders.push(Result_Border);
|
|
}
|
|
}
|
|
}
|
|
this.Pages[Index].MaxBotBorder = MaxBotBorder;
|
|
this.Pages[Index].BotBorders = BotBorders;
|
|
}
|
|
this.Pages[CurPage].Bounds.Bottom = this.Pages[CurPage].Bounds.Top + TableHeight;
|
|
this.Pages[CurPage].Bounds.Left = X_min;
|
|
this.Pages[CurPage].Bounds.Right = X_max;
|
|
this.Pages[CurPage].Height = TableHeight;
|
|
this.Pages[CurPage].MaxBotBorder = 0;
|
|
this.Pages[CurPage].BotBorders = new Array();
|
|
this.TurnOffRecalc = false;
|
|
this.Bounds = this.Pages[this.Pages.length - 1].Bounds;
|
|
},
|
|
Internal_Recalculate_Header: function () {
|
|
if (true === this.Parent.Is_TableCellContent()) {
|
|
this.HeaderInfo.Count = 0;
|
|
return;
|
|
}
|
|
var Header_RowsCount = 0;
|
|
var Rows_Count = this.Content.length;
|
|
for (var Index = 0; Index < Rows_Count; Index++) {
|
|
var Row = this.Content[Index];
|
|
if (true != Row.Is_Header()) {
|
|
break;
|
|
}
|
|
Header_RowsCount++;
|
|
}
|
|
for (var CurRow = Header_RowsCount - 1; CurRow >= 0; CurRow--) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
var bContinue = false;
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var CurGridCol = Cell.Metrics.StartGridCol;
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
if (VMergeCount > 1) {
|
|
Header_RowsCount--;
|
|
bContinue = true;
|
|
break;
|
|
}
|
|
}
|
|
if (true != bContinue) {
|
|
break;
|
|
}
|
|
}
|
|
this.HeaderInfo.Count = Header_RowsCount;
|
|
},
|
|
Internal_Recalculate_Borders: function () {
|
|
for (var Index = -1; Index < this.Content.length; Index++) {
|
|
this.TableRowsBottom[Index] = new Array();
|
|
this.TableRowsBottom[Index][0] = 0;
|
|
}
|
|
var MaxTopBorder = new Array();
|
|
var MaxBotBorder = new Array();
|
|
var MaxBotMargin = new Array();
|
|
for (var Index = 0; Index < this.Content.length; Index++) {
|
|
MaxBotBorder[Index] = 0;
|
|
MaxTopBorder[Index] = 0;
|
|
MaxBotMargin[Index] = 0;
|
|
}
|
|
var TablePr = this.Get_CompiledPr(false).TablePr;
|
|
var TableBorders = this.Get_Borders();
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var BeforeInfo = Row.Get_Before();
|
|
var AfterInfo = Row.Get_After();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
var bSpacing_Top = false;
|
|
var bSpacing_Bot = false;
|
|
if (null != CellSpacing) {
|
|
bSpacing_Bot = true;
|
|
bSpacing_Top = true;
|
|
} else {
|
|
if (0 != CurRow) {
|
|
var PrevCellSpacing = this.Content[CurRow - 1].Get_CellSpacing();
|
|
if (null != PrevCellSpacing) {
|
|
bSpacing_Top = true;
|
|
}
|
|
}
|
|
if (this.Content.length - 1 != CurRow) {
|
|
var NextCellSpacing = this.Content[CurRow + 1].Get_CellSpacing();
|
|
if (null != NextCellSpacing) {
|
|
bSpacing_Bot = true;
|
|
}
|
|
}
|
|
}
|
|
Row.Set_SpacingInfo(bSpacing_Top, bSpacing_Bot);
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
Row.Set_CellInfo(CurCell, CurGridCol, 0, 0, 0, 0, 0, 0);
|
|
if (vmerge_Continue === Vmerge) {
|
|
var VMergeCount2 = this.Internal_GetVertMergeCount2(CurRow, CurGridCol, GridSpan);
|
|
if (VMergeCount2 > 1) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
} else {
|
|
Cell.Set_VMerge(vmerge_Restart);
|
|
}
|
|
}
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var CellMargins = Cell.Get_Margins();
|
|
if (CellMargins.Bottom.W > MaxBotMargin[CurRow + VMergeCount - 1]) {
|
|
MaxBotMargin[CurRow + VMergeCount - 1] = CellMargins.Bottom.W;
|
|
}
|
|
var CellBorders = Cell.Get_Borders();
|
|
if (true === bSpacing_Top) {
|
|
if (border_Single === CellBorders.Top.Value && MaxTopBorder[CurRow] < CellBorders.Top.Size) {
|
|
MaxTopBorder[CurRow] = CellBorders.Top.Size;
|
|
}
|
|
Cell.Set_BorderInfo_Top([CellBorders.Top]);
|
|
} else {
|
|
if (0 === CurRow) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Top, CellBorders.Top, true, false);
|
|
if (border_Single === Result_Border.Value && MaxTopBorder[CurRow] < Result_Border.Size) {
|
|
MaxTopBorder[CurRow] = Result_Border.Size;
|
|
}
|
|
var BorderInfo_Top = new Array();
|
|
for (var TempIndex = 0; TempIndex < GridSpan; TempIndex++) {
|
|
BorderInfo_Top.push(Result_Border);
|
|
}
|
|
Cell.Set_BorderInfo_Top(BorderInfo_Top);
|
|
} else {
|
|
var Prev_Row = this.Content[CurRow - 1];
|
|
var Prev_CellsCount = Prev_Row.Get_CellsCount();
|
|
var Prev_BeforeInfo = Prev_Row.Get_Before();
|
|
var Prev_AfterInfo = Prev_Row.Get_After();
|
|
var Prev_Pos = -1;
|
|
var Prev_GridCol = Prev_BeforeInfo.GridBefore;
|
|
for (var PrevCell = 0; PrevCell < Prev_CellsCount; PrevCell++) {
|
|
var Prev_Cell = Prev_Row.Get_Cell(PrevCell);
|
|
var Prev_GridSpan = Prev_Cell.Get_GridSpan();
|
|
if (Prev_GridCol <= CurGridCol + GridSpan - 1 && Prev_GridCol + Prev_GridSpan - 1 >= CurGridCol) {
|
|
Prev_Pos = PrevCell;
|
|
break;
|
|
}
|
|
Prev_GridCol += Prev_GridSpan;
|
|
}
|
|
var Border_Top_Info = new Array();
|
|
if (CurGridCol <= Prev_BeforeInfo.GridBefore - 1) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Left, CellBorders.Top, true, false);
|
|
if (border_Single === Result_Border.Value && MaxTopBorder[CurRow] < Result_Border.Size) {
|
|
MaxTopBorder[CurRow] = Result_Border.Size;
|
|
}
|
|
var AddCount = Math.min(Prev_BeforeInfo.GridBefore - CurGridCol, GridSpan);
|
|
for (var TempIndex = 0; TempIndex < AddCount; TempIndex++) {
|
|
Border_Top_Info.push(Result_Border);
|
|
}
|
|
}
|
|
if (-1 != Prev_Pos) {
|
|
while (Prev_GridCol <= CurGridCol + GridSpan - 1 && Prev_Pos < Prev_CellsCount) {
|
|
var Prev_Cell = Prev_Row.Get_Cell(Prev_Pos);
|
|
var Prev_GridSpan = Prev_Cell.Get_GridSpan();
|
|
var Prev_VMerge = Prev_Cell.Get_VMerge();
|
|
if (vmerge_Continue === Prev_VMerge) {
|
|
Prev_Cell = this.Internal_Get_StartMergedCell(CurRow - 1, Prev_GridCol, Prev_GridSpan);
|
|
}
|
|
var PrevBorders = Prev_Cell.Get_Borders();
|
|
var Result_Border = this.Internal_CompareBorders(PrevBorders.Bottom, CellBorders.Top, false, false);
|
|
if (border_Single === Result_Border.Value && MaxTopBorder[CurRow] < Result_Border.Size) {
|
|
MaxTopBorder[CurRow] = Result_Border.Size;
|
|
}
|
|
var AddCount = 0;
|
|
if (Prev_GridCol >= CurGridCol) {
|
|
if (Prev_GridCol + Prev_GridSpan - 1 > CurGridCol + GridSpan - 1) {
|
|
AddCount = CurGridCol + GridSpan - Prev_GridCol;
|
|
} else {
|
|
AddCount = Prev_GridSpan;
|
|
}
|
|
} else {
|
|
if (Prev_GridCol + Prev_GridSpan - 1 > CurGridCol + GridSpan - 1) {
|
|
AddCount = GridSpan;
|
|
} else {
|
|
AddCount = Prev_GridCol + Prev_GridSpan - CurGridCol;
|
|
}
|
|
}
|
|
for (var TempIndex = 0; TempIndex < AddCount; TempIndex++) {
|
|
Border_Top_Info.push(Result_Border);
|
|
}
|
|
Prev_Pos++;
|
|
Prev_GridCol += Prev_GridSpan;
|
|
}
|
|
}
|
|
if (Prev_AfterInfo.GridAfter > 0) {
|
|
var StartAfterGrid = Prev_Row.Get_CellInfo(Prev_CellsCount - 1).StartGridCol + Prev_Row.Get_Cell(Prev_CellsCount - 1).Get_GridSpan();
|
|
if (CurGridCol + GridSpan - 1 >= StartAfterGrid) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Right, CellBorders.Top, true, false);
|
|
if (border_Single === Result_Border.Value && MaxTopBorder[CurRow] < Result_Border.Size) {
|
|
MaxTopBorder[CurRow] = Result_Border.Size;
|
|
}
|
|
var AddCount = Math.min(CurGridCol + GridSpan - StartAfterGrid, GridSpan);
|
|
for (var TempIndex = 0; TempIndex < AddCount; TempIndex++) {
|
|
Border_Top_Info.push(Result_Border);
|
|
}
|
|
}
|
|
}
|
|
Cell.Set_BorderInfo_Top(Border_Top_Info);
|
|
}
|
|
}
|
|
if (true === bSpacing_Bot) {
|
|
Cell.Set_BorderInfo_Bottom([CellBorders.Bottom], -1, -1);
|
|
if (border_Single === CellBorders.Bottom.Value && CellBorders.Bottom.Size > MaxBotBorder[CurRow + VMergeCount - 1]) {
|
|
MaxBotBorder[CurRow + VMergeCount - 1] = CellBorders.Bottom.Size;
|
|
}
|
|
} else {
|
|
if (this.Content.length - 1 === CurRow + VMergeCount - 1) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Bottom, CellBorders.Bottom, true, false);
|
|
if (border_Single === Result_Border.Value && Result_Border.Size > MaxBotBorder[CurRow + VMergeCount - 1]) {
|
|
MaxBotBorder[CurRow + VMergeCount - 1] = Result_Border.Size;
|
|
}
|
|
if (GridSpan > 0) {
|
|
for (var TempIndex = 0; TempIndex < GridSpan; TempIndex++) {
|
|
Cell.Set_BorderInfo_Bottom([Result_Border], -1, -1);
|
|
}
|
|
} else {
|
|
Cell.Set_BorderInfo_Bottom([], -1, -1);
|
|
}
|
|
} else {
|
|
var Next_Row = this.Content[CurRow + VMergeCount];
|
|
var Next_CellsCount = Next_Row.Get_CellsCount();
|
|
var Next_BeforeInfo = Next_Row.Get_Before();
|
|
var Next_AfterInfo = Next_Row.Get_After();
|
|
var Border_Bottom_Info = new Array();
|
|
var BeforeCount = 0;
|
|
if (CurGridCol <= Next_BeforeInfo.GridBefore - 1) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Left, CellBorders.Bottom, true, false);
|
|
BeforeCount = Math.min(Next_BeforeInfo.GridBefore - CurGridCol, GridSpan);
|
|
for (var TempIndex = 0; TempIndex < BeforeCount; TempIndex++) {
|
|
Border_Bottom_Info.push(Result_Border);
|
|
}
|
|
}
|
|
var Next_GridCol = Next_BeforeInfo.GridBefore;
|
|
for (var NextCell = 0; NextCell < Next_CellsCount; NextCell++) {
|
|
var Next_Cell = Next_Row.Get_Cell(NextCell);
|
|
var Next_GridSpan = Next_Cell.Get_GridSpan();
|
|
Next_GridCol += Next_GridSpan;
|
|
}
|
|
var AfterCount = 0;
|
|
if (Next_AfterInfo.GridAfter > 0) {
|
|
var StartAfterGrid = Next_GridCol;
|
|
if (CurGridCol + GridSpan - 1 >= StartAfterGrid) {
|
|
var Result_Border = this.Internal_CompareBorders(TableBorders.Right, CellBorders.Bottom, true, false);
|
|
AfterCount = Math.min(CurGridCol + GridSpan - StartAfterGrid, GridSpan);
|
|
for (var TempIndex = 0; TempIndex < AfterCount; TempIndex++) {
|
|
Border_Bottom_Info.push(Result_Border);
|
|
}
|
|
}
|
|
}
|
|
Cell.Set_BorderInfo_Bottom(Border_Bottom_Info, BeforeCount, AfterCount);
|
|
}
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
}
|
|
this.MaxTopBorder = MaxTopBorder;
|
|
this.MaxBotBorder = MaxBotBorder;
|
|
this.MaxBotMargin = MaxBotMargin;
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var BeforeInfo = Row.Get_Before();
|
|
var AfterInfo = Row.Get_After();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
var Row_x_max = 0;
|
|
var Row_x_min = 0;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var X_grid_start = this.TableSumGrid[CurGridCol - 1];
|
|
var X_grid_end = this.TableSumGrid[CurGridCol + GridSpan - 1];
|
|
var X_cell_start = X_grid_start;
|
|
var X_cell_end = X_grid_end;
|
|
if (null != CellSpacing) {
|
|
if (0 === CurCell) {
|
|
if (0 === BeforeInfo.GridBefore) {
|
|
if (border_None === TableBorders.Left.Value || CellSpacing > TableBorders.Left.Size / 2) {
|
|
X_cell_start += CellSpacing;
|
|
} else {
|
|
X_cell_start += TableBorders.Left.Size / 2;
|
|
}
|
|
} else {
|
|
if (border_None === TableBorders.Left.Value || CellSpacing > TableBorders.Left.Size) {
|
|
X_cell_start += CellSpacing / 2;
|
|
} else {
|
|
X_cell_start += TableBorders.Left.Size / 2;
|
|
}
|
|
}
|
|
} else {
|
|
X_cell_start += CellSpacing / 2;
|
|
}
|
|
if (CellsCount - 1 === CurCell) {
|
|
if (0 === AfterInfo.GridAfter) {
|
|
if (border_None === TableBorders.Right.Value || CellSpacing > TableBorders.Right.Size / 2) {
|
|
X_cell_end -= CellSpacing;
|
|
} else {
|
|
X_cell_end -= TableBorders.Right.Size / 2;
|
|
}
|
|
} else {
|
|
if (border_None === TableBorders.Right.Value || CellSpacing > TableBorders.Right.Size) {
|
|
X_cell_end -= CellSpacing / 2;
|
|
} else {
|
|
X_cell_end -= TableBorders.Right.Size / 2;
|
|
}
|
|
}
|
|
} else {
|
|
X_cell_end -= CellSpacing / 2;
|
|
}
|
|
}
|
|
var CellMar = Cell.Get_Margins();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var X_content_start = X_cell_start;
|
|
var X_content_end = X_cell_end;
|
|
var CellBorders = Cell.Get_Borders();
|
|
if (null != CellSpacing) {
|
|
X_content_start += CellMar.Left.W;
|
|
X_content_end -= CellMar.Right.W;
|
|
if (border_Single === CellBorders.Left.Value) {
|
|
X_content_start += CellBorders.Left.Size;
|
|
}
|
|
if (border_Single === CellBorders.Right.Value) {
|
|
X_content_end -= CellBorders.Right.Size;
|
|
}
|
|
} else {
|
|
if (vmerge_Continue === Vmerge) {
|
|
X_content_start += CellMar.Left.W;
|
|
X_content_end -= CellMar.Right.W;
|
|
} else {
|
|
var Max_r_w = 0;
|
|
var Max_l_w = 0;
|
|
var Borders_Info = {
|
|
Right: new Array(),
|
|
Left: new Array(),
|
|
Right_Max: 0,
|
|
Left_Max: 0
|
|
};
|
|
for (var Temp_CurRow = 0; Temp_CurRow < VMergeCount; Temp_CurRow++) {
|
|
var Temp_Row = this.Content[CurRow + Temp_CurRow];
|
|
var Temp_CellsCount = Temp_Row.Get_CellsCount();
|
|
var Temp_CurCell = this.Internal_Get_Cell_ByStartGridCol(CurRow + Temp_CurRow, CurGridCol);
|
|
if (Temp_CurCell < 0) {
|
|
continue;
|
|
}
|
|
if (0 === Temp_CurCell) {
|
|
var LeftBorder = this.Internal_CompareBorders(TableBorders.Left, CellBorders.Left, true, false);
|
|
if (border_Single === LeftBorder.Value && LeftBorder.Size > Max_l_w) {
|
|
Max_l_w = LeftBorder.Size;
|
|
}
|
|
Borders_Info.Left.push(LeftBorder);
|
|
} else {
|
|
var Temp_Prev_Cell = Temp_Row.Get_Cell(Temp_CurCell - 1);
|
|
var Temp_Prev_VMerge = Temp_Prev_Cell.Get_VMerge();
|
|
if (0 != Temp_CurRow && vmerge_Continue === Temp_Prev_VMerge) {
|
|
Borders_Info.Left.push(Borders_Info.Left[Borders_Info.Left.length - 1]);
|
|
} else {
|
|
var Temp_Prev_Main_Cell = this.Internal_Get_StartMergedCell(CurRow + Temp_CurRow, CurGridCol - Temp_Prev_Cell.Get_GridSpan(), Temp_Prev_Cell.Get_GridSpan());
|
|
var Temp_Prev_Main_Cell_Borders = Temp_Prev_Main_Cell.Get_Borders();
|
|
var LeftBorder = this.Internal_CompareBorders(Temp_Prev_Main_Cell_Borders.Right, CellBorders.Left, false, false);
|
|
if (border_Single === LeftBorder.Value && LeftBorder.Size > Max_l_w) {
|
|
Max_l_w = LeftBorder.Size;
|
|
}
|
|
Borders_Info.Left.push(LeftBorder);
|
|
}
|
|
}
|
|
if (Temp_CellsCount - 1 === Temp_CurCell) {
|
|
var RightBorder = this.Internal_CompareBorders(TableBorders.Right, CellBorders.Right, true, false);
|
|
if (border_Single === RightBorder.Value && RightBorder.Size > Max_r_w) {
|
|
Max_r_w = RightBorder.Size;
|
|
}
|
|
Borders_Info.Right.push(RightBorder);
|
|
} else {
|
|
var Temp_Next_Cell = Temp_Row.Get_Cell(Temp_CurCell + 1);
|
|
var Temp_Next_VMerge = Temp_Next_Cell.Get_VMerge();
|
|
if (0 != Temp_CurRow && vmerge_Continue === Temp_Next_VMerge) {
|
|
Borders_Info.Right.push(Borders_Info.Right[Borders_Info.Right.length - 1]);
|
|
} else {
|
|
var Temp_Next_Main_Cell = this.Internal_Get_StartMergedCell(CurRow + Temp_CurRow, CurGridCol + GridSpan, Temp_Next_Cell.Get_GridSpan());
|
|
var Temp_Next_Main_Cell_Borders = Temp_Next_Main_Cell.Get_Borders();
|
|
var RightBorder = this.Internal_CompareBorders(Temp_Next_Main_Cell_Borders.Left, CellBorders.Right, false, false);
|
|
if (border_Single === RightBorder.Value && RightBorder.Size > Max_r_w) {
|
|
Max_r_w = RightBorder.Size;
|
|
}
|
|
Borders_Info.Right.push(RightBorder);
|
|
}
|
|
}
|
|
}
|
|
Borders_Info.Right_Max = Max_r_w;
|
|
Borders_Info.Left_Max = Max_l_w;
|
|
if (Max_l_w / 2 > CellMar.Left.W) {
|
|
X_content_start += Max_l_w / 2;
|
|
} else {
|
|
X_content_start += CellMar.Left.W;
|
|
}
|
|
if (Max_r_w / 2 > CellMar.Right.W) {
|
|
X_content_end -= Max_r_w / 2;
|
|
} else {
|
|
X_content_end -= CellMar.Right.W;
|
|
}
|
|
Cell.Set_BorderInfo_Left(Borders_Info.Left, Max_l_w);
|
|
Cell.Set_BorderInfo_Right(Borders_Info.Right, Max_r_w);
|
|
}
|
|
}
|
|
if (0 === CurCell) {
|
|
if (null != CellSpacing) {
|
|
Row_x_min = X_grid_start;
|
|
if (border_Single === TableBorders.Left.Value) {
|
|
Row_x_min -= TableBorders.Left.Size / 2;
|
|
}
|
|
} else {
|
|
var BorderInfo = Cell.Get_BorderInfo();
|
|
Row_x_min = X_grid_start - BorderInfo.MaxLeft / 2;
|
|
}
|
|
}
|
|
if (CellsCount - 1 === CurCell) {
|
|
if (null != CellSpacing) {
|
|
Row_x_max = X_grid_end;
|
|
if (border_Single === TableBorders.Right.Value) {
|
|
Row_x_max += TableBorders.Right.Size / 2;
|
|
}
|
|
} else {
|
|
var BorderInfo = Cell.Get_BorderInfo();
|
|
Row_x_max = X_grid_end + BorderInfo.MaxRight / 2;
|
|
}
|
|
}
|
|
Cell.Set_Metrics(CurGridCol, X_grid_start, X_grid_end, X_cell_start, X_cell_end, X_content_start, X_content_end);
|
|
CurGridCol += GridSpan;
|
|
}
|
|
Row.Set_Metrics_X(Row_x_min, Row_x_max);
|
|
}
|
|
this.RecalcInfo.TableBorders = false;
|
|
},
|
|
Internal_Recalculate_Position_1: function () {
|
|
var TablePr = this.Get_CompiledPr(false).TablePr;
|
|
var PageLimits = this.Parent.Get_PageLimits(this.PageNum);
|
|
if (true === this.Is_Inline()) {
|
|
switch (TablePr.Jc) {
|
|
case align_Left:
|
|
this.X = this.X_origin + this.Get_TableOffsetCorrection() + TablePr.TableInd;
|
|
break;
|
|
case align_Right:
|
|
var TableWidth = this.TableSumGrid[this.TableSumGrid.length - 1];
|
|
if (false === this.Parent.Is_TableCellContent()) {
|
|
this.X = this.XLimit - TableWidth + 1.9;
|
|
} else {
|
|
this.X = this.XLimit - TableWidth;
|
|
}
|
|
break;
|
|
case align_Center:
|
|
var TableWidth = this.TableSumGrid[this.TableSumGrid.length - 1];
|
|
var RangeWidth = this.XLimit - this.X_origin;
|
|
this.X = this.X_origin + (RangeWidth - TableWidth) / 2;
|
|
break;
|
|
}
|
|
this.AnchorPosition.CalcX = this.X_origin + TablePr.TableInd;
|
|
this.AnchorPosition.Set_X(this.TableSumGrid[this.TableSumGrid.length - 1], this.X_origin, X_Left_Field, X_Right_Field, Page_Width, PageLimits.X, PageLimits.XLimit);
|
|
} else {
|
|
var OffsetCorrection_Left = 0;
|
|
var OffsetCorrection_Right = 0;
|
|
if (this.Content.length > 0 && this.Content[0].Get_CellsCount() > 0) {
|
|
var FirstRow = this.Content[0];
|
|
var Cell_Left = FirstRow.Get_Cell(0);
|
|
var Cell_Right = FirstRow.Get_Cell(FirstRow.Get_CellsCount() - 1);
|
|
OffsetCorrection_Left = Cell_Left.Get_Margins().Left.W;
|
|
OffsetCorrection_Right = Cell_Right.Get_Margins().Right.W;
|
|
}
|
|
this.X = this.X_origin + this.Get_TableOffsetCorrection();
|
|
this.AnchorPosition.Set_X(this.TableSumGrid[this.TableSumGrid.length - 1], this.X_origin, X_Left_Field - OffsetCorrection_Left, X_Right_Field + OffsetCorrection_Right, Page_Width, PageLimits.X - OffsetCorrection_Left, PageLimits.XLimit + OffsetCorrection_Right);
|
|
this.X = this.AnchorPosition.Calculate_X(this.PositionH.RelativeFrom, this.PositionH.Align, this.PositionH.Value);
|
|
this.X_origin = this.X - this.Get_TableOffsetCorrection();
|
|
if (undefined != this.PositionH_Old) {
|
|
this.PositionH.RelativeFrom = this.PositionH_Old.RelativeFrom;
|
|
this.PositionH.Align = this.PositionH_Old.Align;
|
|
this.PositionH.Value = this.PositionH_Old.Value;
|
|
var Value = this.AnchorPosition.Calculate_X_Value(this.PositionH_Old.RelativeFrom);
|
|
this.Set_PositionH(this.PositionH_Old.RelativeFrom, false, Value);
|
|
this.X = this.AnchorPosition.Calculate_X(this.PositionH.RelativeFrom, this.PositionH.Align, this.PositionH.Value);
|
|
this.X_origin = this.X - this.Get_TableOffsetCorrection();
|
|
this.PositionH_Old = undefined;
|
|
}
|
|
}
|
|
},
|
|
Internal_Recalculate_Position_2: function (CurPage) {
|
|
var PageLimits = this.Parent.Get_PageLimits(this.PageNum);
|
|
if (true === this.Is_Inline() && 0 === CurPage) {
|
|
this.AnchorPosition.CalcY = this.Y;
|
|
this.AnchorPosition.Set_Y(this.Pages[CurPage].Height, this.Y, Y_Top_Field, Y_Bottom_Field, Page_Height, PageLimits.Y, PageLimits.YLimit);
|
|
} else {
|
|
if (true != this.Is_Inline() && (0 === CurPage || (1 === CurPage && false === this.RowsInfo[0].FirstPage))) {
|
|
this.AnchorPosition.Set_Y(this.Pages[CurPage].Height, this.Pages[CurPage].Y, Y_Top_Field, Y_Bottom_Field, Page_Height, PageLimits.Y, PageLimits.YLimit);
|
|
var OtherFlowTables = [];
|
|
this.AnchorPosition.Calculate_Y(this.PositionV.RelativeFrom, this.PositionV.Align, this.PositionV.Value);
|
|
this.AnchorPosition.Correct_Values(PageLimits.X, PageLimits.Y, PageLimits.XLimit, PageLimits.YLimit, this.AllowOverlap, OtherFlowTables, this);
|
|
if (undefined != this.PositionV_Old) {
|
|
this.PositionV.RelativeFrom = this.PositionV_Old.RelativeFrom;
|
|
this.PositionV.Align = this.PositionV_Old.Align;
|
|
this.PositionV.Value = this.PositionV_Old.Value;
|
|
var Value = this.AnchorPosition.Calculate_Y_Value(this.PositionV_Old.RelativeFrom);
|
|
this.Set_PositionV(this.PositionV_Old.RelativeFrom, false, Value);
|
|
this.AnchorPosition.Calculate_Y(this.PositionV.RelativeFrom, this.PositionV.Align, this.PositionV.Value);
|
|
this.PositionV_Old = undefined;
|
|
}
|
|
var NewX = this.AnchorPosition.CalcX;
|
|
var NewY = this.AnchorPosition.CalcY;
|
|
this.Shift(CurPage, NewX - this.Pages[CurPage].X, NewY - this.Pages[CurPage].Y);
|
|
}
|
|
}
|
|
},
|
|
Internal_Recalculate_1_: function (CurPage) {
|
|
if (true === this.TurnOffRecalc) {
|
|
return;
|
|
}
|
|
this.TurnOffRecalc = true;
|
|
var FirstRow = 0;
|
|
var LastRow = 0;
|
|
if (0 === CurPage) {
|
|
for (var Index = -1; Index < this.Content.length; Index++) {
|
|
this.TableRowsBottom[Index] = new Array();
|
|
this.TableRowsBottom[Index][0] = 0;
|
|
}
|
|
} else {
|
|
FirstRow = this.Pages[CurPage - 1].LastRow;
|
|
LastRow = FirstRow;
|
|
}
|
|
var MaxTopBorder = this.MaxTopBorder;
|
|
var MaxBotBorder = this.MaxBotBorder;
|
|
var MaxBotMargin = this.MaxBotMargin;
|
|
var TempMaxTopBorder = this.Get_MaxTopBorder(FirstRow);
|
|
var StartPos;
|
|
if (0 === CurPage) {
|
|
StartPos = {
|
|
X: this.X,
|
|
XLimit: this.XLimit,
|
|
Y: this.Y,
|
|
YLimit: this.YLimit,
|
|
MaxTopBorder: TempMaxTopBorder
|
|
};
|
|
this.HeaderInfo.PageIndex = -1;
|
|
} else {
|
|
StartPos = this.Parent.Get_PageContentStartPos(CurPage);
|
|
}
|
|
this.Pages[CurPage] = new CTablePage(StartPos.X, StartPos.Y, StartPos.XLimit, StartPos.YLimit, FirstRow, TempMaxTopBorder);
|
|
var Y = StartPos.Y;
|
|
var TableHeight = 0;
|
|
var TableBorders = this.Get_Borders();
|
|
var X_max = -1;
|
|
var X_min = -1;
|
|
if (this.HeaderInfo.Count > 0 && this.HeaderInfo.PageIndex != -1 && CurPage > this.HeaderInfo.PageIndex) {
|
|
this.HeaderInfo.Pages[CurPage] = new Object();
|
|
this.HeaderInfo.Pages[CurPage].RowsInfo = new Array();
|
|
var HeaderPage = this.HeaderInfo.Pages[CurPage];
|
|
HeaderPage.Draw = true;
|
|
HeaderPage.Rows = new Array();
|
|
g_oTableId.m_bTurnOff = true;
|
|
for (var Index = 0; Index < this.HeaderInfo.Count; Index++) {
|
|
HeaderPage.Rows[Index] = this.Content[Index].Copy(this);
|
|
HeaderPage.Rows[Index].Index = Index;
|
|
}
|
|
g_oTableId.m_bTurnOff = false;
|
|
var bHeaderNextPage = false;
|
|
for (var CurRow = 0; CurRow < this.HeaderInfo.Count; CurRow++) {
|
|
HeaderPage.RowsInfo[CurRow] = new Object();
|
|
HeaderPage.RowsInfo[CurRow].Y = 0;
|
|
HeaderPage.RowsInfo[CurRow].H = 0;
|
|
HeaderPage.RowsInfo[CurRow].TopDy = 0;
|
|
HeaderPage.RowsInfo[CurRow].MaxTopBorder = 0;
|
|
HeaderPage.RowsInfo[CurRow].TableRowsBottom = 0;
|
|
var Row = HeaderPage.Rows[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var BeforeInfo = Row.Get_Before();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
Y += MaxTopBorder[CurRow];
|
|
TableHeight += MaxTopBorder[CurRow];
|
|
if (0 === CurRow) {
|
|
if (null != CellSpacing) {
|
|
var TableBorder_Top = this.Get_Borders().Top;
|
|
if (border_Single === TableBorder_Top.Value) {
|
|
Y += TableBorder_Top.Size;
|
|
TableHeight += TableBorder_Top.Size;
|
|
}
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
}
|
|
} else {
|
|
var PrevCellSpacing = HeaderPage.Rows[CurRow - 1].Get_CellSpacing();
|
|
if (null != CellSpacing && null != PrevCellSpacing) {
|
|
Y += (PrevCellSpacing + CellSpacing) / 2;
|
|
TableHeight += (PrevCellSpacing + CellSpacing) / 2;
|
|
} else {
|
|
if (null != CellSpacing) {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
} else {
|
|
if (null != PrevCellSpacing) {
|
|
Y += PrevCellSpacing / 2;
|
|
TableHeight += PrevCellSpacing / 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var Row_x_max = Row.Metrics.X_max;
|
|
var Row_x_min = Row.Metrics.X_min;
|
|
if (-1 === X_min || Row_x_min < X_min) {
|
|
X_min = Row_x_min;
|
|
}
|
|
if (-1 === X_max || Row_x_max > X_max) {
|
|
X_max = Row_x_max;
|
|
}
|
|
var MaxBotValue_vmerge = -1;
|
|
var RowH = Row.Get_Height();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var CellMar = Cell.Get_Margins();
|
|
Row.Update_CellInfo(CurCell, this.X);
|
|
var CellMetrics = Row.Get_CellInfo(CurCell);
|
|
var X_content_start = CellMetrics.X_content_start;
|
|
var X_content_end = CellMetrics.X_content_end;
|
|
var Y_content_start = Y + CellMar.Top.W;
|
|
var Y_content_end = this.Pages[CurPage].YLimit;
|
|
if (null != CellSpacing) {
|
|
if (this.Content.length - 1 === CurRow) {
|
|
Y_content_end -= CellSpacing;
|
|
} else {
|
|
Y_content_end -= CellSpacing / 2;
|
|
}
|
|
}
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var BottomMargin = this.MaxBotMargin[CurRow + VMergeCount - 1];
|
|
Y_content_end -= BottomMargin;
|
|
Cell.Temp.Y = Y_content_start;
|
|
if (VMergeCount > 1) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
} else {
|
|
if (vmerge_Restart != Vmerge) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
var cIndex = Cell.Index;
|
|
var rIndex = Cell.Row.Index;
|
|
Cell = HeaderPage.Rows[rIndex].Get_Cell(cIndex);
|
|
CellMar = Cell.Get_Margins();
|
|
Y_content_start = Cell.Temp.Y + CellMar.Top.W;
|
|
}
|
|
}
|
|
Cell.Content.Set_StartPage(CurPage);
|
|
Cell.Content.Reset(X_content_start, Y_content_start, X_content_end, 20000);
|
|
if (recalcresult2_NextPage === Cell.Content.Recalculate_Page(0, true)) {
|
|
bHeaderNextPage = true;
|
|
break;
|
|
}
|
|
var CellContentBounds = Cell.Content.Get_PageBounds(0);
|
|
var CellContentBounds_Bottom = CellContentBounds.Bottom + BottomMargin;
|
|
if (undefined === HeaderPage.RowsInfo[CurRow].TableRowsBottom || HeaderPage.RowsInfo[CurRow].TableRowsBottom < CellContentBounds_Bottom) {
|
|
HeaderPage.RowsInfo[CurRow].TableRowsBottom = CellContentBounds_Bottom;
|
|
}
|
|
if (vmerge_Continue === Vmerge) {
|
|
if (-1 === MaxBotValue_vmerge || MaxBotValue_vmerge < CellContentBounds_Bottom) {
|
|
MaxBotValue_vmerge = CellContentBounds_Bottom;
|
|
}
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
if (true === bHeaderNextPage) {
|
|
Y = StartPos.Y;
|
|
TableHeight = 0;
|
|
HeaderPage.Draw = false;
|
|
break;
|
|
}
|
|
var TempY = Y;
|
|
var TempMaxTopBorder = MaxTopBorder[CurRow];
|
|
if (null != CellSpacing) {
|
|
HeaderPage.RowsInfo[CurRow].Y = TempY;
|
|
HeaderPage.RowsInfo[CurRow].TopDy = 0;
|
|
HeaderPage.RowsInfo[CurRow].X0 = Row_x_min;
|
|
HeaderPage.RowsInfo[CurRow].X1 = Row_x_max;
|
|
HeaderPage.RowsInfo[CurRow].MaxTopBorder = TempMaxTopBorder;
|
|
HeaderPage.RowsInfo[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
} else {
|
|
HeaderPage.RowsInfo[CurRow].Y = TempY - TempMaxTopBorder;
|
|
HeaderPage.RowsInfo[CurRow].TopDy = TempMaxTopBorder;
|
|
HeaderPage.RowsInfo[CurRow].X0 = Row_x_min;
|
|
HeaderPage.RowsInfo[CurRow].X1 = Row_x_max;
|
|
HeaderPage.RowsInfo[CurRow].MaxTopBorder = TempMaxTopBorder;
|
|
HeaderPage.RowsInfo[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
}
|
|
var CellHeight = HeaderPage.RowsInfo[CurRow].TableRowsBottom - Y;
|
|
if (false === bNextPage && heightrule_AtLeast === RowH.HRule && CellHeight < RowH.Value - MaxTopBorder[CurRow]) {
|
|
CellHeight = RowH.Value - MaxTopBorder[CurRow];
|
|
HeaderPage.RowsInfo[CurRow].TableRowsBottom = Y + CellHeight;
|
|
}
|
|
if (null != CellSpacing) {
|
|
HeaderPage.RowsInfo[CurRow].H = CellHeight;
|
|
} else {
|
|
HeaderPage.RowsInfo[CurRow].H = CellHeight + TempMaxTopBorder;
|
|
}
|
|
Y += CellHeight;
|
|
TableHeight += CellHeight;
|
|
Row.Height = CellHeight;
|
|
Y += MaxBotBorder[CurRow];
|
|
TableHeight += MaxBotBorder[CurRow];
|
|
}
|
|
if (false === bHeaderNextPage) {
|
|
for (var CurRow = 0; CurRow < this.HeaderInfo.Count; CurRow++) {
|
|
var Row = HeaderPage.Rows[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, Cell.Metrics.StartGridCol, Cell.Get_GridSpan());
|
|
if (VMergeCount > 1) {
|
|
continue;
|
|
} else {
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Restart != Vmerge) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Cell.Metrics.StartGridCol, Cell.Get_GridSpan());
|
|
var cIndex = Cell.Index;
|
|
var rIndex = Cell.Row.Index;
|
|
Cell = HeaderPage.Rows[rIndex].Get_Cell(cIndex);
|
|
}
|
|
}
|
|
var CellMar = Cell.Get_Margins();
|
|
var VAlign = Cell.Get_VAlign();
|
|
var CellPageIndex = CurPage - Cell.Content.Get_StartPage_Relative();
|
|
if (CellPageIndex >= Cell.PagesCount) {
|
|
continue;
|
|
}
|
|
if (vertalignjc_Top === VAlign || CellPageIndex > 1) {
|
|
Cell.Temp.Y_VAlign_offset[CellPageIndex] = 0;
|
|
continue;
|
|
}
|
|
var TempCurRow = Cell.Row.Index;
|
|
var TempCellSpacing = HeaderPage.Rows[TempCurRow].Get_CellSpacing();
|
|
var Y_0 = HeaderPage.RowsInfo[TempCurRow].Y;
|
|
if (null === TempCellSpacing) {
|
|
Y_0 += MaxTopBorder[TempCurRow];
|
|
}
|
|
Y_0 += CellMar.Top.W;
|
|
var Y_1 = HeaderPage.RowsInfo[CurRow].TableRowsBottom - CellMar.Bottom.W;
|
|
var CellHeight = Y_1 - Y_0;
|
|
var CellContentBounds = Cell.Content.Get_PageBounds(CellPageIndex);
|
|
var ContentHeight = CellContentBounds.Bottom - CellContentBounds.Top;
|
|
var Dy = 0;
|
|
if (CellHeight - ContentHeight > 0.001) {
|
|
if (vertalignjc_Bottom === VAlign) {
|
|
Dy = CellHeight - ContentHeight;
|
|
} else {
|
|
if (vertalignjc_Center === VAlign) {
|
|
Dy = (CellHeight - ContentHeight) / 2;
|
|
}
|
|
}
|
|
Cell.Content.Shift(CellPageIndex, 0, Dy);
|
|
}
|
|
Cell.Temp.Y_VAlign_offset[CellPageIndex] = Dy;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
this.HeaderInfo.Pages[CurPage] = new Object();
|
|
this.HeaderInfo.Pages[CurPage].Draw = false;
|
|
}
|
|
var bNextPage = false;
|
|
for (var CurRow = FirstRow; CurRow < this.Content.length; CurRow++) {
|
|
if ((0 === CurRow && 0 === CurPage) || CurRow != FirstRow) {
|
|
this.RowsInfo[CurRow] = new Object();
|
|
this.RowsInfo[CurRow].Pages = 1;
|
|
this.RowsInfo[CurRow].Y = new Array();
|
|
this.RowsInfo[CurRow].H = new Array();
|
|
this.RowsInfo[CurRow].TopDy = new Array();
|
|
this.RowsInfo[CurRow].MaxTopBorder = new Array();
|
|
this.RowsInfo[CurRow].FirstPage = true;
|
|
this.RowsInfo[CurRow].StartPage = CurPage;
|
|
} else {
|
|
this.RowsInfo[CurRow].Pages++;
|
|
}
|
|
this.TableRowsBottom[CurRow] = new Array();
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var BeforeInfo = Row.Get_Before();
|
|
var AfterInfo = Row.Get_After();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
Y += MaxTopBorder[CurRow];
|
|
TableHeight += MaxTopBorder[CurRow];
|
|
if (FirstRow === CurRow) {
|
|
if (null != CellSpacing) {
|
|
var TableBorder_Top = this.Get_Borders().Top;
|
|
if (border_Single === TableBorder_Top.Value) {
|
|
Y += TableBorder_Top.Size;
|
|
TableHeight += TableBorder_Top.Size;
|
|
}
|
|
if (true === this.HeaderInfo.Pages[CurPage].Draw || (0 === CurRow && (0 === CurPage || (1 === CurPage && false === this.RowsInfo[0].FirstPage)))) {
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
} else {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
}
|
|
} else {
|
|
var PrevCellSpacing = this.Content[CurRow - 1].Get_CellSpacing();
|
|
if (null != CellSpacing && null != PrevCellSpacing) {
|
|
Y += (PrevCellSpacing + CellSpacing) / 2;
|
|
TableHeight += (PrevCellSpacing + CellSpacing) / 2;
|
|
} else {
|
|
if (null != CellSpacing) {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
} else {
|
|
if (null != PrevCellSpacing) {
|
|
Y += PrevCellSpacing / 2;
|
|
TableHeight += PrevCellSpacing / 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var Row_x_max = Row.Metrics.X_max;
|
|
var Row_x_min = Row.Metrics.X_min;
|
|
if (-1 === X_min || Row_x_min < X_min) {
|
|
X_min = Row_x_min;
|
|
}
|
|
if (-1 === X_max || Row_x_max > X_max) {
|
|
X_max = Row_x_max;
|
|
}
|
|
var MaxBotValue_vmerge = -1;
|
|
var RowH = Row.Get_Height();
|
|
var Merged_Cell = new Array();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var CellMar = Cell.Get_Margins();
|
|
Row.Update_CellInfo(CurCell, this.X);
|
|
var CellMetrics = Row.Get_CellInfo(CurCell);
|
|
var X_content_start = CellMetrics.X_content_start;
|
|
var X_content_end = CellMetrics.X_content_end;
|
|
var Y_content_start = Y + CellMar.Top.W;
|
|
var Y_content_end = this.Pages[CurPage].YLimit;
|
|
if (null != CellSpacing) {
|
|
if (this.Content.length - 1 === CurRow) {
|
|
Y_content_end -= CellSpacing;
|
|
} else {
|
|
Y_content_end -= CellSpacing / 2;
|
|
}
|
|
}
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var BottomMargin = this.MaxBotMargin[CurRow + VMergeCount - 1];
|
|
Y_content_end -= BottomMargin;
|
|
Cell.Temp.Y = Y_content_start;
|
|
if (VMergeCount > 1) {
|
|
CurGridCol += GridSpan;
|
|
Merged_Cell.push(Cell);
|
|
continue;
|
|
} else {
|
|
if (vmerge_Restart != Vmerge) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
CellMar = Cell.Get_Margins();
|
|
Y_content_start = Cell.Temp.Y + CellMar.Top.W;
|
|
}
|
|
}
|
|
if ((0 === Cell.Row.Index && 0 === CurPage) || Cell.Row.Index > FirstRow) {
|
|
Cell.PagesCount = 1;
|
|
Cell.Content.Set_StartPage(CurPage);
|
|
Cell.Content.Reset(X_content_start, Y_content_start, X_content_end, 20000);
|
|
}
|
|
var CellPageIndex = CurPage - Cell.Content.Get_StartPage_Relative();
|
|
if (CellPageIndex < Cell.PagesCount) {
|
|
if (recalcresult2_NextPage === Cell.Content.Recalculate_Page(CellPageIndex, true)) {
|
|
Cell.PagesCount = Cell.Content.Pages.length + 1;
|
|
bNextPage = true;
|
|
}
|
|
var CellContentBounds = Cell.Content.Get_PageBounds(CellPageIndex);
|
|
var CellContentBounds_Bottom = CellContentBounds.Bottom + BottomMargin;
|
|
if (undefined === this.TableRowsBottom[CurRow][CurPage] || this.TableRowsBottom[CurRow][CurPage] < CellContentBounds_Bottom) {
|
|
this.TableRowsBottom[CurRow][CurPage] = CellContentBounds_Bottom;
|
|
}
|
|
if (vmerge_Continue === Vmerge) {
|
|
if (-1 === MaxBotValue_vmerge || MaxBotValue_vmerge < CellContentBounds_Bottom) {
|
|
MaxBotValue_vmerge = CellContentBounds_Bottom;
|
|
}
|
|
}
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
if (true === bNextPage) {
|
|
var bContentOnFirstPage = false;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, Cell.Metrics.StartGridCol, Cell.Get_GridSpan());
|
|
if (vmerge_Continue === Vmerge || VMergeCount > 1) {
|
|
continue;
|
|
}
|
|
if (true === Cell.Content_Is_ContentOnFirstPage()) {
|
|
bContentOnFirstPage = true;
|
|
break;
|
|
}
|
|
}
|
|
this.RowsInfo[CurRow].FirstPage = bContentOnFirstPage;
|
|
if (0 != CurRow && false === this.RowsInfo[CurRow].FirstPage) {
|
|
if (this.TableRowsBottom[CurRow - 1][CurPage] < MaxBotValue_vmerge) {
|
|
var Diff = MaxBotValue_vmerge - this.TableRowsBottom[CurRow - 1][CurPage];
|
|
this.TableRowsBottom[CurRow - 1][CurPage] = MaxBotValue_vmerge;
|
|
this.RowsInfo[CurRow - 1].H[CurPage] += Diff;
|
|
}
|
|
}
|
|
var CellsCount2 = Merged_Cell.length;
|
|
for (var TempCellIndex = 0; TempCellIndex < CellsCount2; TempCellIndex++) {
|
|
var Cell = Merged_Cell[TempCellIndex];
|
|
var CurCell = Cell.Index;
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var CurGridCol = Cell.Metrics.StartGridCol;
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
var CellMar = Cell.Get_Margins();
|
|
var CellMetrics = Row.Get_CellInfo(CurCell);
|
|
var X_content_start = CellMetrics.X_content_start;
|
|
var X_content_end = CellMetrics.X_content_end;
|
|
var Y_content_start = Cell.Temp.Y;
|
|
var Y_content_end = this.Pages[CurPage].YLimit;
|
|
if (null != CellSpacing) {
|
|
if (this.Content.length - 1 === CurRow) {
|
|
Y_content_end -= CellSpacing;
|
|
} else {
|
|
Y_content_end -= CellSpacing / 2;
|
|
}
|
|
}
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var BottomMargin = this.MaxBotMargin[CurRow + VMergeCount - 1];
|
|
Y_content_end -= BottomMargin;
|
|
if ((0 === Cell.Row.Index && 0 === CurPage) || Cell.Row.Index > FirstRow) {
|
|
Cell.PagesCount = 1;
|
|
Cell.Content.Set_StartPage(CurPage);
|
|
Cell.Content.Reset(X_content_start, Y_content_start, X_content_end, 20000);
|
|
}
|
|
var CellPageIndex = CurPage - Cell.Content.Get_StartPage_Relative();
|
|
if (CellPageIndex < Cell.PagesCount) {
|
|
if (recalcresult2_NextPage === Cell.Content.Recalculate_Page(CellPageIndex, true)) {
|
|
Cell.PagesCount = Cell.Content.Pages.length + 1;
|
|
bNextPage = true;
|
|
}
|
|
var CellContentBounds = Cell.Content.Get_PageBounds(CellPageIndex);
|
|
var CellContentBounds_Bottom = CellContentBounds.Bottom + BottomMargin;
|
|
if (0 != CurRow && false === this.RowsInfo[CurRow].FirstPage) {
|
|
if (this.TableRowsBottom[CurRow - 1][CurPage] < CellContentBounds_Bottom) {
|
|
var Diff = CellContentBounds_Bottom - this.TableRowsBottom[CurRow - 1][CurPage];
|
|
this.TableRowsBottom[CurRow - 1][CurPage] = CellContentBounds_Bottom;
|
|
this.RowsInfo[CurRow - 1].H[CurPage] += Diff;
|
|
}
|
|
} else {
|
|
if (undefined === this.TableRowsBottom[CurRow][CurPage] || this.TableRowsBottom[CurRow][CurPage] < CellContentBounds_Bottom) {
|
|
this.TableRowsBottom[CurRow][CurPage] = CellContentBounds_Bottom;
|
|
}
|
|
}
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
bContentOnFirstPage = false;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === Vmerge) {
|
|
continue;
|
|
}
|
|
if (true === Cell.Content_Is_ContentOnFirstPage()) {
|
|
bContentOnFirstPage = true;
|
|
break;
|
|
}
|
|
}
|
|
this.RowsInfo[CurRow].FirstPage = bContentOnFirstPage;
|
|
}
|
|
var TempY = Y;
|
|
var TempMaxTopBorder = MaxTopBorder[CurRow];
|
|
if (null != CellSpacing) {
|
|
this.RowsInfo[CurRow].Y[CurPage] = TempY;
|
|
this.RowsInfo[CurRow].TopDy[CurPage] = 0;
|
|
this.RowsInfo[CurRow].X0 = Row_x_min;
|
|
this.RowsInfo[CurRow].X1 = Row_x_max;
|
|
this.RowsInfo[CurRow].MaxTopBorder[CurPage] = TempMaxTopBorder;
|
|
this.RowsInfo[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
} else {
|
|
this.RowsInfo[CurRow].Y[CurPage] = TempY - TempMaxTopBorder;
|
|
this.RowsInfo[CurRow].TopDy[CurPage] = TempMaxTopBorder;
|
|
this.RowsInfo[CurRow].X0 = Row_x_min;
|
|
this.RowsInfo[CurRow].X1 = Row_x_max;
|
|
this.RowsInfo[CurRow].MaxTopBorder[CurPage] = TempMaxTopBorder;
|
|
this.RowsInfo[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
}
|
|
var CellHeight = this.TableRowsBottom[CurRow][CurPage] - Y;
|
|
if (false === bNextPage && heightrule_AtLeast === RowH.HRule && CellHeight < RowH.Value - MaxTopBorder[CurRow]) {
|
|
CellHeight = RowH.Value - MaxTopBorder[CurRow];
|
|
this.TableRowsBottom[CurRow][CurPage] = Y + CellHeight;
|
|
}
|
|
if (null != CellSpacing) {
|
|
this.RowsInfo[CurRow].H[CurPage] = CellHeight;
|
|
} else {
|
|
this.RowsInfo[CurRow].H[CurPage] = CellHeight + TempMaxTopBorder;
|
|
}
|
|
Y += CellHeight;
|
|
TableHeight += CellHeight;
|
|
Row.Height = CellHeight;
|
|
Y += MaxBotBorder[CurRow];
|
|
TableHeight += MaxBotBorder[CurRow];
|
|
if (this.Content.length - 1 === CurRow) {
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing;
|
|
var TableBorder_Bottom = this.Get_Borders().Bottom;
|
|
if (border_Single === TableBorder_Bottom.Value) {
|
|
TableHeight += TableBorder_Bottom.Size;
|
|
}
|
|
}
|
|
}
|
|
if (true === bNextPage) {
|
|
LastRow = CurRow;
|
|
this.Pages[CurPage].LastRow = CurRow;
|
|
if (-1 === this.HeaderInfo.PageIndex && this.HeaderInfo.Count > 0 && CurRow >= this.HeaderInfo.Count) {
|
|
this.HeaderInfo.PageIndex = CurPage;
|
|
}
|
|
break;
|
|
} else {
|
|
if (this.Content.length - 1 === CurRow) {
|
|
LastRow = this.Content.length - 1;
|
|
this.Pages[CurPage].LastRow = this.Content.length - 1;
|
|
}
|
|
}
|
|
}
|
|
for (var CurRow = FirstRow; CurRow <= LastRow; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, Cell.Metrics.StartGridCol, Cell.Get_GridSpan());
|
|
if (VMergeCount > 1 && CurRow != LastRow) {
|
|
continue;
|
|
} else {
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Restart != Vmerge) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Cell.Metrics.StartGridCol, Cell.Get_GridSpan());
|
|
}
|
|
}
|
|
var CellMar = Cell.Get_Margins();
|
|
var VAlign = Cell.Get_VAlign();
|
|
var CellPageIndex = CurPage - Cell.Content.Get_StartPage_Relative();
|
|
if (CellPageIndex >= Cell.PagesCount) {
|
|
continue;
|
|
}
|
|
if (vertalignjc_Top === VAlign || CellPageIndex > 1 || (1 === CellPageIndex && true === this.RowsInfo[CurRow].FirstPage)) {
|
|
if (!Cell.Temp.Y_VAlign_offset) {
|
|
Cell.Temp.Y_VAlign_offset = [];
|
|
}
|
|
Cell.Temp.Y_VAlign_offset[CellPageIndex] = 0;
|
|
continue;
|
|
}
|
|
var TempCurRow = Cell.Row.Index;
|
|
var TempCellSpacing = this.Content[TempCurRow].Get_CellSpacing();
|
|
var Y_0 = this.RowsInfo[TempCurRow].Y[CurPage];
|
|
if (null === TempCellSpacing) {
|
|
Y_0 += MaxTopBorder[TempCurRow];
|
|
}
|
|
Y_0 += CellMar.Top.W;
|
|
var Y_1 = this.TableRowsBottom[CurRow][CurPage] - CellMar.Bottom.W;
|
|
var CellHeight = Y_1 - Y_0;
|
|
var CellContentBounds = Cell.Content.Get_PageBounds(CellPageIndex);
|
|
var ContentHeight = CellContentBounds.Bottom - CellContentBounds.Top;
|
|
var Dy = 0;
|
|
if (CellHeight - ContentHeight > 0.001) {
|
|
if (vertalignjc_Bottom === VAlign) {
|
|
Dy = CellHeight - ContentHeight;
|
|
} else {
|
|
if (vertalignjc_Center === VAlign) {
|
|
Dy = (CellHeight - ContentHeight) / 2;
|
|
}
|
|
}
|
|
Cell.Content.Shift(CellPageIndex, 0, Dy);
|
|
}
|
|
Cell.Temp.Y_VAlign_offset[CellPageIndex] = Dy;
|
|
}
|
|
}
|
|
var CurRow = LastRow;
|
|
if (0 === CurRow && false === this.RowsInfo[CurRow].FirstPage && 0 === CurPage) {
|
|
this.Pages[0].MaxBotBorder = 0;
|
|
this.Pages[0].BotBorders = new Array();
|
|
} else {
|
|
if (false === this.RowsInfo[CurRow].FirstPage && CurPage === this.RowsInfo[CurRow].StartPage) {
|
|
CurRow--;
|
|
}
|
|
var MaxBotBorder = 0;
|
|
var BotBorders = new Array();
|
|
if (this.Content.length - 1 === CurRow) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
}
|
|
var Border_Info = Cell.Get_BorderInfo().Bottom;
|
|
for (var BorderId = 0; BorderId < Border_Info.length; BorderId++) {
|
|
var Border = Border_Info[BorderId];
|
|
if (border_Single === Border.Value && MaxBotBorder < Border.Size) {
|
|
MaxBotBorder = Border.Size;
|
|
}
|
|
BotBorders.push(Border);
|
|
}
|
|
}
|
|
} else {
|
|
var Row = this.Content[CurRow];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var CellsCount = Row.Get_CellsCount();
|
|
if (null != CellSpacing) {
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Border = Cell.Get_Borders().Bottom;
|
|
if (border_Single === Border.Value && MaxBotBorder < Border.Size) {
|
|
MaxBotBorder = Border.Size;
|
|
}
|
|
}
|
|
} else {
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
if (null === Cell) {
|
|
BotBorders.push(TableBorders.Bottom);
|
|
continue;
|
|
}
|
|
}
|
|
var Border = Cell.Get_Borders().Bottom;
|
|
var Result_Border = this.Internal_CompareBorders(Border, TableBorders.Bottom, false, true);
|
|
if (border_Single === Result_Border.Value && MaxBotBorder < Result_Border.Size) {
|
|
MaxBotBorder = Result_Border.Size;
|
|
}
|
|
BotBorders.push(Result_Border);
|
|
}
|
|
}
|
|
}
|
|
this.Pages[CurPage].MaxBotBorder = MaxBotBorder;
|
|
this.Pages[CurPage].BotBorders = BotBorders;
|
|
}
|
|
this.Pages[CurPage].Bounds.Bottom = this.Pages[CurPage].Bounds.Top + TableHeight;
|
|
this.Pages[CurPage].Bounds.Left = X_min + this.X;
|
|
this.Pages[CurPage].Bounds.Right = X_max + this.X;
|
|
this.Pages[CurPage].Height = TableHeight;
|
|
this.TurnOffRecalc = false;
|
|
this.Bounds = this.Pages[this.Pages.length - 1].Bounds;
|
|
if (true == bNextPage) {
|
|
return recalcresult_NextPage;
|
|
} else {
|
|
return recalcresult_NextElement;
|
|
}
|
|
},
|
|
Internal_RecalculateFrom: function (RowIndex, CellIndex, bChange, bForceRecalc) {
|
|
if (true === this.TurnOffRecalc) {
|
|
return;
|
|
}
|
|
this.TurnOffRecalc = true;
|
|
if (false === bChange) {
|
|
this.Internal_OnContentRecalculate(false, 0, this.Index);
|
|
this.TurnOffRecalc = false;
|
|
return;
|
|
}
|
|
var bNeedDocumentRecalculate = false;
|
|
var TableBorders = this.Get_Borders();
|
|
var Pages_new = new Array();
|
|
var TableRowsBottom_new = new Array();
|
|
var RowsInfo_new = new Array();
|
|
var Pages_old = this.Pages;
|
|
this.Pages = Pages_new;
|
|
Pages_new.length = 0;
|
|
Pages_new[0] = {
|
|
Bounds: {
|
|
Top: this.Y,
|
|
Left: this.X,
|
|
Right: this.X + this.TableSumGrid[this.TableSumGrid.length - 1],
|
|
Bottom: this.Y
|
|
},
|
|
FirstRow: 0,
|
|
Height: 0,
|
|
Y: this.Y,
|
|
YLimit: this.YLimit,
|
|
MaxTopBorder: 0
|
|
};
|
|
var Y = this.Y;
|
|
var TableHeight = 0;
|
|
for (var Index = -1; Index < this.Content.length; Index++) {
|
|
TableRowsBottom_new[Index] = new Array();
|
|
TableRowsBottom_new[Index][0] = 0;
|
|
}
|
|
var MaxTopBorder = this.MaxTopBorder;
|
|
var MaxBotBorder = this.MaxBotBorder;
|
|
var ChangeCell = this.Content[RowIndex].Get_Cell(CellIndex);
|
|
var ChangeVertAlign = this.Internal_GetVertMergeCount(RowIndex, this.Content[RowIndex].Get_CellInfo(CellIndex).StartGridCol, ChangeCell.Get_GridSpan());
|
|
var RowChange = RowIndex + ChangeVertAlign - 1;
|
|
var CurRow = 0;
|
|
var bNeedRecalc = false;
|
|
var X_max = this.Pages[0].Bounds.Right;
|
|
var X_min = this.Pages[0].Bounds.Left;
|
|
var CurPage = 0;
|
|
for (CurRow = 0; CurRow <= RowChange; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var BeforeInfo = Row.Get_Before();
|
|
var AfterInfo = Row.Get_After();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
if (0 === CurRow) {
|
|
if (null != CellSpacing) {
|
|
var TableBorder_Top = this.Get_Borders().Top;
|
|
if (border_Single === TableBorder_Top.Value) {
|
|
Y += TableBorder_Top.Size;
|
|
TableHeight += TableBorder_Top.Size;
|
|
}
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
}
|
|
} else {
|
|
var PrevCellSpacing = this.Content[CurRow - 1].Get_CellSpacing();
|
|
if (null != CellSpacing && null != PrevCellSpacing) {
|
|
Y += (PrevCellSpacing + CellSpacing) / 2;
|
|
TableHeight += (PrevCellSpacing + CellSpacing) / 2;
|
|
} else {
|
|
if (null != CellSpacing) {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
} else {
|
|
if (null != PrevCellSpacing) {
|
|
Y += PrevCellSpacing / 2;
|
|
TableHeight += PrevCellSpacing / 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Y += MaxTopBorder[CurRow];
|
|
TableHeight += MaxTopBorder[CurRow];
|
|
var LastPage = CurPage;
|
|
var Pages_Y_Pos = new Array();
|
|
var Pages_Max_Top_Border = new Array();
|
|
var MaxBotValue_vmerge = -1;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var CurPage_old = CurPage;
|
|
Cell.Temp.CurPage = CurPage;
|
|
if (VMergeCount > 1) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
} else {
|
|
if (vmerge_Restart != Vmerge) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
CurPage = Cell.Temp.CurPage;
|
|
}
|
|
}
|
|
var BottomMargin = this.MaxBotMargin[CurRow + VMergeCount - 1];
|
|
var PagesCount = Cell.Content_Get_PagesCount();
|
|
for (var PageIndex = 0; PageIndex < PagesCount; PageIndex++) {
|
|
var CellContentBounds = Cell.Content_Get_PageBounds(PageIndex);
|
|
var CellContentBounds_Bottom = CellContentBounds.Bottom + BottomMargin;
|
|
if (CurPage + PageIndex >= CurPage_old) {
|
|
if (vmerge_Continue === Vmerge && CurPage + PageIndex === CurPage_old) {
|
|
if (-1 === MaxBotValue_vmerge || MaxBotValue_vmerge < CellContentBounds_Bottom) {
|
|
MaxBotValue_vmerge = CellContentBounds_Bottom;
|
|
}
|
|
}
|
|
if ("undefined" === typeof(TableRowsBottom_new[CurRow]) || "undefined" === typeof(TableRowsBottom_new[CurRow][CurPage + PageIndex]) || TableRowsBottom_new[CurRow][CurPage + PageIndex] < CellContentBounds_Bottom) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[CurRow])) {
|
|
TableRowsBottom_new[CurRow] = new Array();
|
|
}
|
|
TableRowsBottom_new[CurRow][CurPage + PageIndex] = CellContentBounds_Bottom;
|
|
}
|
|
if (0 != PageIndex) {
|
|
if ("undefined" === typeof(Pages_new[CurPage + PageIndex])) {
|
|
var StartPos = this.Parent.Get_PageContentStartPos(CurPage + PageIndex);
|
|
var StartRowPos = this.Get_PageContentStartPos(CurPage + PageIndex, CurRow, CurCell);
|
|
Pages_new[CurPage + PageIndex] = {
|
|
Bounds: {
|
|
Top: StartPos.Y,
|
|
Left: this.X,
|
|
Right: this.X + this.TableSumGrid[this.TableSumGrid.length - 1],
|
|
Bottom: StartPos.Y
|
|
},
|
|
FirstRow: CurRow,
|
|
Height: 0,
|
|
Y: StartRowPos.Y,
|
|
YLimit: StartRowPos.YLimit,
|
|
MaxTopBorder: StartRowPos.MaxTopBorder
|
|
};
|
|
Pages_Y_Pos[CurPage + PageIndex] = StartRowPos.Y;
|
|
Pages_Max_Top_Border[CurPage + PageIndex] = StartRowPos.MaxTopBorder;
|
|
}
|
|
}
|
|
if (LastPage < CurPage + PageIndex) {
|
|
LastPage = CurPage + PageIndex;
|
|
}
|
|
} else {
|
|
var TempRow = Pages_new[CurPage + PageIndex + 1].FirstRow;
|
|
if (true === this.RowsInfo[TempRow].FirstPage) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[TempRow]) || "undefined" === typeof(TableRowsBottom_new[TempRow][CurPage + PageIndex]) || TableRowsBottom_new[TempRow][CurPage + PageIndex] < CellContentBounds_Bottom) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[TempRow])) {
|
|
TableRowsBottom_new[TempRow] = new Array();
|
|
}
|
|
TableRowsBottom_new[TempRow][CurPage + PageIndex] = CellContentBounds_Bottom;
|
|
}
|
|
} else {
|
|
if (TempRow > 0) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[TempRow - 1]) || "undefined" === typeof(TableRowsBottom_new[TempRow - 1][CurPage + PageIndex]) || TableRowsBottom_new[TempRow - 1][CurPage + PageIndex] < CellContentBounds_Bottom) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[TempRow - 1])) {
|
|
TableRowsBottom_new[TempRow - 1] = new Array();
|
|
}
|
|
TableRowsBottom_new[TempRow - 1][CurPage + PageIndex] = CellContentBounds_Bottom;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
CurPage = CurPage_old;
|
|
CurGridCol += GridSpan;
|
|
}
|
|
var RowH = Row.Get_Height();
|
|
RowsInfo_new[CurRow] = new Object();
|
|
RowsInfo_new[CurRow].Pages = LastPage - CurPage + 1;
|
|
RowsInfo_new[CurRow].Y = new Array();
|
|
RowsInfo_new[CurRow].H = new Array();
|
|
RowsInfo_new[CurRow].TopDy = new Array();
|
|
RowsInfo_new[CurRow].MaxTopBorder = new Array();
|
|
RowsInfo_new[CurRow].FirstPage = true;
|
|
RowsInfo_new[CurRow].StartPage = CurPage;
|
|
for (var PageIndex = 0; PageIndex < RowsInfo_new[CurRow].Pages; PageIndex++) {
|
|
var TempY = Y;
|
|
var TempMaxTopBorder = MaxTopBorder[CurRow];
|
|
if (0 != PageIndex) {
|
|
TempY = Pages_Y_Pos[CurPage + PageIndex];
|
|
TempMaxTopBorder = Pages_Max_Top_Border[CurPage + PageIndex];
|
|
if (1 === PageIndex) {
|
|
var bContentOnFirstPage = false;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
if (vmerge_Continue === Vmerge || VMergeCount > 1) {
|
|
continue;
|
|
}
|
|
if (true === Cell.Content_Is_ContentOnFirstPage()) {
|
|
bContentOnFirstPage = true;
|
|
break;
|
|
}
|
|
}
|
|
RowsInfo_new[CurRow].FirstPage = bContentOnFirstPage;
|
|
if (0 != CurRow && false === RowsInfo_new[CurRow].FirstPage) {
|
|
if (TableRowsBottom_new[CurRow - 1][CurPage] < MaxBotValue_vmerge) {
|
|
TableRowsBottom_new[CurRow - 1][CurPage] = MaxBotValue_vmerge;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (null != CellSpacing) {
|
|
RowsInfo_new[CurRow].Y[CurPage + PageIndex] = TempY;
|
|
RowsInfo_new[CurRow].TopDy[CurPage + PageIndex] = 0;
|
|
RowsInfo_new[CurRow].X0 = this.RowsInfo[CurRow].X0;
|
|
RowsInfo_new[CurRow].X1 = this.RowsInfo[CurRow].X1;
|
|
RowsInfo_new[CurRow].MaxTopBorder[CurPage + PageIndex] = TempMaxTopBorder;
|
|
RowsInfo_new[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
} else {
|
|
RowsInfo_new[CurRow].Y[CurPage + PageIndex] = TempY - TempMaxTopBorder;
|
|
RowsInfo_new[CurRow].TopDy[CurPage + PageIndex] = TempMaxTopBorder;
|
|
RowsInfo_new[CurRow].X0 = this.RowsInfo[CurRow].X0;
|
|
RowsInfo_new[CurRow].X1 = this.RowsInfo[CurRow].X1;
|
|
RowsInfo_new[CurRow].MaxTopBorder[CurPage + PageIndex] = TempMaxTopBorder;
|
|
RowsInfo_new[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
}
|
|
}
|
|
if (LastPage != CurPage) {
|
|
var TempCellHeight = TableRowsBottom_new[CurRow][CurPage] - Y;
|
|
TableHeight += TempCellHeight + MaxBotBorder[CurRow];
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
if (border_Single === TableBorders.Bottom.Value) {
|
|
TableHeight += TableBorders.Bottom.Size;
|
|
}
|
|
Pages_new[CurPage].Bounds.Bottom = Pages_new[CurPage].YLimit;
|
|
Pages_new[CurPage].Bounds.Left = X_min;
|
|
Pages_new[CurPage].Bounds.Right = X_max;
|
|
Pages_new[CurPage].Height = TableHeight;
|
|
for (var PageId = CurPage + 1; PageId < LastPage; PageId++) {
|
|
Y = this.Parent.Get_PageContentStartPos(CurPage + PageId, CurRow, 0).Y;
|
|
TableHeight = 0;
|
|
if (null != CellSpacing) {
|
|
if (border_Single === TableBorders.Top.Value) {
|
|
Y += TableBorders.Top.Size;
|
|
TableHeight += TableBorders.Top.Size;
|
|
}
|
|
if (0 === CurRow) {
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
} else {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
}
|
|
Y += Pages_Max_Top_Border[LastPage];
|
|
TableHeight += Pages_Max_Top_Border[LastPage];
|
|
TempCellHeight = TableRowsBottom_new[CurRow][PageId] - Y;
|
|
TableHeight += TempCellHeight + MaxBotBorder[CurRow];
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
if (border_Single === TableBorders.Bottom.Value) {
|
|
TableHeight += TableBorders.Bottom.Size;
|
|
}
|
|
Pages_new[PageId].Bounds.Bottom = Pages_new[PageId].YLimit;
|
|
Pages_new[PageId].Bounds.Left = X_min;
|
|
Pages_new[PageId].Bounds.Right = X_max;
|
|
Pages_new[PageId].Height = TableHeight;
|
|
}
|
|
TableHeight = 0;
|
|
Y = this.Parent.Get_PageContentStartPos(LastPage).Y;
|
|
if (null != CellSpacing) {
|
|
if (border_Single === TableBorders.Top.Value) {
|
|
Y += TableBorders.Top.Size;
|
|
TableHeight += TableBorders.Top.Size;
|
|
}
|
|
if (0 === CurRow) {
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
} else {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
}
|
|
Y += Pages_Max_Top_Border[LastPage];
|
|
TableHeight += Pages_Max_Top_Border[LastPage];
|
|
}
|
|
var CellHeight = TableRowsBottom_new[CurRow][LastPage] - Y;
|
|
if (LastPage === CurPage && heightrule_AtLeast === RowH.HRule && CellHeight < RowH.Value) {
|
|
CellHeight = RowH.Value;
|
|
TableRowsBottom_new[CurRow][CurPage] = Y + CellHeight;
|
|
}
|
|
Y += CellHeight;
|
|
TableHeight += CellHeight;
|
|
if (RowChange === CurRow && (Math.abs(Row.Height - CellHeight) > 0.01 || Row.PagesCount != LastPage - CurPage + 1)) {
|
|
Row.Height = CellHeight;
|
|
Row.PagesCount = LastPage - CurPage + 1;
|
|
bNeedRecalc = true;
|
|
}
|
|
Y += MaxBotBorder[CurRow];
|
|
TableHeight += MaxBotBorder[CurRow];
|
|
if (this.Content.length - 1 === CurRow) {
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing;
|
|
var TableBorder_Bottom = this.Get_Borders().Bottom;
|
|
if (border_Single === TableBorder_Bottom.Value) {
|
|
TableHeight += TableBorder_Bottom.Size;
|
|
}
|
|
}
|
|
}
|
|
CurPage = LastPage;
|
|
}
|
|
if (true === bNeedRecalc || true === bForceRecalc) {
|
|
for (CurRow = RowChange + 1; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var BeforeInfo = Row.Get_Before();
|
|
var AfterInfo = Row.Get_After();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
if (0 === CurRow) {
|
|
if (null != CellSpacing) {
|
|
var TableBorder_Top = this.Get_Borders().Top;
|
|
if (border_Single === TableBorder_Top.Value) {
|
|
Y += TableBorder_Top.Size;
|
|
TableHeight += TableBorder_Top.Size;
|
|
}
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
}
|
|
} else {
|
|
var PrevCellSpacing = this.Content[CurRow - 1].Get_CellSpacing();
|
|
if (null != CellSpacing && null != PrevCellSpacing) {
|
|
Y += (PrevCellSpacing + CellSpacing) / 2;
|
|
TableHeight += (PrevCellSpacing + CellSpacing) / 2;
|
|
} else {
|
|
if (null != CellSpacing) {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
} else {
|
|
if (null != PrevCellSpacing) {
|
|
Y += PrevCellSpacing / 2;
|
|
TableHeight += PrevCellSpacing / 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Y += MaxTopBorder[CurRow];
|
|
TableHeight += MaxTopBorder[CurRow];
|
|
var Row_x_max = 0;
|
|
var Row_x_min = 0;
|
|
var LastPage = CurPage;
|
|
var Pages_Y_Pos = new Array();
|
|
var Pages_Max_Top_Border = new Array();
|
|
var MaxBotValue_vmerge = -1;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var X_grid_start = this.X + this.TableSumGrid[CurGridCol - 1];
|
|
var X_grid_end = this.X + this.TableSumGrid[CurGridCol + GridSpan - 1];
|
|
var X_cell_start = X_grid_start;
|
|
var X_cell_end = X_grid_end;
|
|
if (null != CellSpacing) {
|
|
if (0 === CurCell) {
|
|
if (0 === BeforeInfo.GridBefore) {
|
|
if (border_None === TableBorders.Left.Value || CellSpacing > TableBorders.Left.Size / 2) {
|
|
X_cell_start += CellSpacing;
|
|
} else {
|
|
X_cell_start += TableBorders.Left.Size / 2;
|
|
}
|
|
} else {
|
|
if (border_None === TableBorders.Left.Value || CellSpacing > TableBorders.Left.Size) {
|
|
X_cell_start += CellSpacing / 2;
|
|
} else {
|
|
X_cell_start += TableBorders.Left.Size / 2;
|
|
}
|
|
}
|
|
} else {
|
|
X_cell_start += CellSpacing / 2;
|
|
}
|
|
if (CellsCount - 1 === CurCell) {
|
|
if (0 === AfterInfo.GridAfter) {
|
|
if (border_None === TableBorders.Right.Value || CellSpacing > TableBorders.Right.Size / 2) {
|
|
X_cell_end -= CellSpacing;
|
|
} else {
|
|
X_cell_end -= TableBorders.Right.Size / 2;
|
|
}
|
|
} else {
|
|
if (border_None === TableBorders.Right.Value || CellSpacing > TableBorders.Right.Size) {
|
|
X_cell_end -= CellSpacing / 2;
|
|
} else {
|
|
X_cell_end -= TableBorders.Right.Size / 2;
|
|
}
|
|
}
|
|
} else {
|
|
X_cell_end -= CellSpacing / 2;
|
|
}
|
|
}
|
|
var CellMar = Cell.Get_Margins();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
var X_content_start = X_cell_start;
|
|
var X_content_end = X_cell_end;
|
|
var CellBorders = Cell.Get_Borders();
|
|
if (null != CellSpacing) {
|
|
X_content_start += CellMar.Left.W;
|
|
X_content_end -= CellMar.Right.W;
|
|
if (border_Single === CellBorders.Left.Value) {
|
|
X_content_start += CellBorders.Left.Size;
|
|
}
|
|
if (border_Single === CellBorders.Right.Value) {
|
|
X_content_end -= CellBorders.Right.Size;
|
|
}
|
|
} else {
|
|
if (vmerge_Continue === Vmerge) {
|
|
X_content_start += CellMar.Left.W;
|
|
X_content_end -= CellMar.Right.W;
|
|
} else {
|
|
var BorderInfo = Cell.Get_BorderInfo();
|
|
var Max_r_w = BorderInfo.MaxRight;
|
|
var Max_l_w = BorderInfo.MaxLeft;
|
|
if (Max_l_w / 2 > CellMar.Left.W) {
|
|
X_content_start += Max_l_w / 2;
|
|
} else {
|
|
X_content_start += CellMar.Left.W;
|
|
}
|
|
if (Max_r_w / 2 > CellMar.Right.W) {
|
|
X_content_end -= Max_r_w / 2;
|
|
} else {
|
|
X_content_end -= CellMar.Right.W;
|
|
}
|
|
}
|
|
}
|
|
if (0 === CurCell) {
|
|
if (null != CellSpacing) {
|
|
Row_x_min = X_grid_start;
|
|
if (border_Single === TableBorders.Left.Value) {
|
|
Row_x_min -= TableBorders.Left.Size / 2;
|
|
}
|
|
} else {
|
|
var BorderInfo = Cell.Get_BorderInfo();
|
|
Row_x_min = X_grid_start - BorderInfo.MaxLeft / 2;
|
|
}
|
|
}
|
|
if (CellsCount - 1 === CurCell) {
|
|
if (null != CellSpacing) {
|
|
Row_x_max = X_grid_end;
|
|
if (border_Single === TableBorders.Right.Value) {
|
|
Row_x_max += TableBorders.Right.Size / 2;
|
|
}
|
|
} else {
|
|
var BorderInfo = Cell.Get_BorderInfo();
|
|
Row_x_max = X_grid_end + BorderInfo.MaxRight / 2;
|
|
}
|
|
}
|
|
Row.Set_CellInfo(CurCell, CurGridCol, X_grid_start, X_grid_end, X_cell_start, X_cell_end, X_content_start, X_content_end);
|
|
var Y_content_start = Y + CellMar.Top.W;
|
|
var CurPage_old = CurPage;
|
|
Cell.Temp = {
|
|
CurPage: CurPage,
|
|
Y: Y
|
|
};
|
|
if (VMergeCount > 1) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
} else {
|
|
if (vmerge_Restart != Vmerge) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
CellMar = Cell.Get_Margins();
|
|
Y_content_start = Cell.Temp.Y + CellMar.Top.W;
|
|
CurPage = Cell.Temp.CurPage;
|
|
}
|
|
}
|
|
var Y_content_end = Pages_new[CurPage].YLimit;
|
|
if (null != CellSpacing) {
|
|
if (this.Content.length - 1 === CurRow) {
|
|
Y_content_end -= CellSpacing;
|
|
} else {
|
|
Y_content_end -= CellSpacing / 2;
|
|
}
|
|
}
|
|
var BottomMargin = this.MaxBotMargin[CurRow + VMergeCount - 1];
|
|
Y_content_end -= BottomMargin;
|
|
Cell.Content_Set_StartPage(CurPage);
|
|
Cell.Content_Reset(X_content_start, Y_content_start, X_content_end, 20000);
|
|
Cell.Recalculate();
|
|
var PagesCount = Cell.Content_Get_PagesCount();
|
|
for (var PageIndex = 0; PageIndex < PagesCount; PageIndex++) {
|
|
var CellContentBounds = Cell.Content_Get_PageBounds(PageIndex);
|
|
var CellContentBounds_Bottom = CellContentBounds.Bottom + BottomMargin;
|
|
if (CurPage + PageIndex >= CurPage_old) {
|
|
if (vmerge_Continue === Vmerge && CurPage + PageIndex === CurPage_old) {
|
|
if (-1 === MaxBotValue_vmerge || MaxBotValue_vmerge < CellContentBounds_Bottom) {
|
|
MaxBotValue_vmerge = CellContentBounds_Bottom;
|
|
}
|
|
}
|
|
if ("undefined" === typeof(TableRowsBottom_new[CurRow]) || "undefined" === typeof(TableRowsBottom_new[CurRow][CurPage + PageIndex]) || TableRowsBottom_new[CurRow][CurPage + PageIndex] < CellContentBounds_Bottom) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[CurRow])) {
|
|
TableRowsBottom_new[CurRow] = new Array();
|
|
}
|
|
TableRowsBottom_new[CurRow][CurPage + PageIndex] = CellContentBounds_Bottom;
|
|
}
|
|
if (0 != PageIndex) {
|
|
if ("undefined" === typeof(Pages_new[CurPage + PageIndex])) {
|
|
var StartPos = this.Parent.Get_PageContentStartPos(CurPage + PageIndex);
|
|
var StartRowPos = this.Get_PageContentStartPos(CurPage + PageIndex, CurRow, CurCell);
|
|
Pages_new[CurPage + PageIndex] = {
|
|
Bounds: {
|
|
Top: StartPos.Y,
|
|
Left: this.X,
|
|
Right: this.X + this.TableSumGrid[this.TableSumGrid.length - 1],
|
|
Bottom: StartPos.Y
|
|
},
|
|
FirstRow: CurRow,
|
|
Height: 0,
|
|
Y: StartRowPos.Y,
|
|
YLimit: StartRowPos.YLimit,
|
|
MaxTopBorder: StartRowPos.MaxTopBorder
|
|
};
|
|
Pages_Y_Pos[CurPage + PageIndex] = StartRowPos.Y;
|
|
Pages_Max_Top_Border[CurPage + PageIndex] = StartRowPos.MaxTopBorder;
|
|
}
|
|
}
|
|
if (LastPage < CurPage + PageIndex) {
|
|
LastPage = CurPage + PageIndex;
|
|
}
|
|
} else {
|
|
var TempRow = Pages_new[CurPage + PageIndex + 1].FirstRow;
|
|
if (true === RowsInfo_new[TempRow].FirstPage) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[TempRow]) || "undefined" === typeof(TableRowsBottom_new[TempRow][CurPage + PageIndex]) || TableRowsBottom_new[TempRow][CurPage + PageIndex] < CellContentBounds_Bottom) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[TempRow])) {
|
|
TableRowsBottom_new[TempRow] = new Array();
|
|
}
|
|
TableRowsBottom_new[TempRow][CurPage + PageIndex] = CellContentBounds_Bottom;
|
|
}
|
|
} else {
|
|
if (TempRow > 0) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[TempRow - 1]) || "undefined" === typeof(TableRowsBottom_new[TempRow - 1][CurPage + PageIndex]) || TableRowsBottom_new[TempRow - 1][CurPage + PageIndex] < CellContentBounds_Bottom) {
|
|
if ("undefined" === typeof(TableRowsBottom_new[TempRow - 1])) {
|
|
TableRowsBottom_new[TempRow - 1] = new Array();
|
|
}
|
|
TableRowsBottom_new[TempRow - 1][CurPage + PageIndex] = CellContentBounds_Bottom;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
CurPage = CurPage_old;
|
|
CurGridCol += GridSpan;
|
|
}
|
|
var RowH = Row.Get_Height();
|
|
RowsInfo_new[CurRow] = new Object();
|
|
RowsInfo_new[CurRow].Pages = LastPage - CurPage + 1;
|
|
RowsInfo_new[CurRow].Y = new Array();
|
|
RowsInfo_new[CurRow].H = new Array();
|
|
RowsInfo_new[CurRow].TopDy = new Array();
|
|
RowsInfo_new[CurRow].MaxTopBorder = new Array();
|
|
RowsInfo_new[CurRow].FirstPage = true;
|
|
RowsInfo_new[CurRow].StartPage = CurPage;
|
|
for (var PageIndex = 0; PageIndex < RowsInfo_new[CurRow].Pages; PageIndex++) {
|
|
var TempY = Y;
|
|
var TempMaxTopBorder = MaxTopBorder[CurRow];
|
|
if (0 != PageIndex) {
|
|
TempY = Pages_Y_Pos[CurPage + PageIndex];
|
|
TempMaxTopBorder = Pages_Max_Top_Border[CurPage + PageIndex];
|
|
if (1 === PageIndex) {
|
|
var bContentOnFirstPage = false;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
if (vmerge_Continue === Vmerge || VMergeCount > 1) {
|
|
continue;
|
|
}
|
|
if (true === Cell.Content_Is_ContentOnFirstPage()) {
|
|
bContentOnFirstPage = true;
|
|
break;
|
|
}
|
|
}
|
|
RowsInfo_new[CurRow].FirstPage = bContentOnFirstPage;
|
|
if (0 != CurRow && false === RowsInfo_new[CurRow].FirstPage) {
|
|
if (TableRowsBottom_new[CurRow - 1][CurPage] < MaxBotValue_vmerge) {
|
|
TableRowsBottom_new[CurRow - 1][CurPage] = MaxBotValue_vmerge;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (null != CellSpacing) {
|
|
RowsInfo_new[CurRow].Y[CurPage + PageIndex] = TempY;
|
|
RowsInfo_new[CurRow].TopDy[CurPage + PageIndex] = 0;
|
|
RowsInfo_new[CurRow].X0 = Row_x_min;
|
|
RowsInfo_new[CurRow].X1 = Row_x_max;
|
|
RowsInfo_new[CurRow].MaxTopBorder[CurPage + PageIndex] = TempMaxTopBorder;
|
|
RowsInfo_new[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
} else {
|
|
RowsInfo_new[CurRow].Y[CurPage + PageIndex] = TempY - TempMaxTopBorder;
|
|
RowsInfo_new[CurRow].TopDy[CurPage + PageIndex] = TempMaxTopBorder;
|
|
RowsInfo_new[CurRow].X0 = Row_x_min;
|
|
RowsInfo_new[CurRow].X1 = Row_x_max;
|
|
RowsInfo_new[CurRow].MaxTopBorder[CurPage + PageIndex] = TempMaxTopBorder;
|
|
RowsInfo_new[CurRow].MaxBotBorder = MaxBotBorder[CurRow];
|
|
}
|
|
}
|
|
if (LastPage != CurPage) {
|
|
var TempCellHeight = TableRowsBottom_new[CurRow][CurPage] - Y;
|
|
TableHeight += TempCellHeight + MaxBotBorder[CurRow];
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
if (border_Single === TableBorders.Bottom.Value) {
|
|
TableHeight += TableBorders.Bottom.Size;
|
|
}
|
|
Pages_new[CurPage].Bounds.Bottom = Pages_new[CurPage].YLimit;
|
|
Pages_new[CurPage].Bounds.Left = X_min;
|
|
Pages_new[CurPage].Bounds.Right = X_max;
|
|
Pages_new[CurPage].Height = TableHeight;
|
|
for (var PageId = CurPage + 1; PageId < LastPage; PageId++) {
|
|
Y = this.Parent.Get_PageContentStartPos(CurPage + PageId, CurRow, 0).Y;
|
|
TableHeight = 0;
|
|
if (null != CellSpacing) {
|
|
if (border_Single === TableBorders.Top.Value) {
|
|
Y += TableBorders.Top.Size;
|
|
TableHeight += TableBorders.Top.Size;
|
|
}
|
|
if (0 === CurRow) {
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
} else {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
}
|
|
Y += Pages_Max_Top_Border[LastPage];
|
|
TableHeight += Pages_Max_Top_Border[LastPage];
|
|
TempCellHeight = TableRowsBottom_new[CurRow][PageId] - Y;
|
|
TableHeight += TempCellHeight + MaxBotBorder[CurRow];
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
if (border_Single === TableBorders.Bottom.Value) {
|
|
TableHeight += TableBorders.Bottom.Size;
|
|
}
|
|
Pages_new[PageId].Bounds.Bottom = Pages_new[PageId].YLimit;
|
|
Pages_new[PageId].Bounds.Left = X_min;
|
|
Pages_new[PageId].Bounds.Right = X_max;
|
|
Pages_new[PageId].Height = TableHeight;
|
|
}
|
|
TableHeight = 0;
|
|
Y = this.Parent.Get_PageContentStartPos(LastPage).Y;
|
|
if (null != CellSpacing) {
|
|
if (border_Single === TableBorders.Top.Value) {
|
|
Y += TableBorders.Top.Size;
|
|
TableHeight += TableBorders.Top.Size;
|
|
}
|
|
if (0 === CurRow) {
|
|
Y += CellSpacing;
|
|
TableHeight += CellSpacing;
|
|
} else {
|
|
Y += CellSpacing / 2;
|
|
TableHeight += CellSpacing / 2;
|
|
}
|
|
}
|
|
Y += Pages_Max_Top_Border[LastPage];
|
|
TableHeight += Pages_Max_Top_Border[LastPage];
|
|
}
|
|
var CellHeight = TableRowsBottom_new[CurRow][LastPage] - Y;
|
|
if (LastPage === CurPage && heightrule_AtLeast === RowH.HRule && CellHeight < RowH.Value) {
|
|
CellHeight = RowH.Value;
|
|
TableRowsBottom_new[CurRow][CurPage] = Y + CellHeight;
|
|
}
|
|
Y += CellHeight;
|
|
TableHeight += CellHeight;
|
|
Row.Height = CellHeight;
|
|
Row.PagesCount = LastPage - CurPage + 1;
|
|
Y += MaxBotBorder[CurRow];
|
|
TableHeight += MaxBotBorder[CurRow];
|
|
if (this.Content.length - 1 === CurRow) {
|
|
if (null != CellSpacing) {
|
|
TableHeight += CellSpacing;
|
|
var TableBorder_Bottom = this.Get_Borders().Bottom;
|
|
if (border_Single === TableBorder_Bottom.Value) {
|
|
TableHeight += TableBorder_Bottom.Size;
|
|
}
|
|
}
|
|
}
|
|
CurPage = LastPage;
|
|
}
|
|
this.TableRowsBottom = TableRowsBottom_new;
|
|
this.Pages = Pages_new;
|
|
this.RowsInfo = RowsInfo_new;
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var StartPage = this.RowsInfo[CurRow].StartPage;
|
|
var RowH = Row.Get_Height();
|
|
for (var PageIndex = 0; PageIndex < this.RowsInfo[CurRow].Pages; PageIndex++) {
|
|
var TempMaxTopBorder = this.RowsInfo[CurRow].MaxTopBorder[StartPage + PageIndex];
|
|
var TempY = 0;
|
|
if (null != CellSpacing) {
|
|
TempY = this.RowsInfo[CurRow].Y[StartPage + PageIndex];
|
|
} else {
|
|
TempY = this.RowsInfo[CurRow].Y[StartPage + PageIndex] + TempMaxTopBorder;
|
|
}
|
|
var TempCellHeight = this.TableRowsBottom[CurRow][StartPage + PageIndex] - TempY;
|
|
if (1 === this.RowsInfo[CurRow].Pages && heightrule_AtLeast === RowH.HRule && TempCellHeight < RowH.Value) {
|
|
TempCellHeight = RowH.Value;
|
|
}
|
|
if (null != CellSpacing) {
|
|
this.RowsInfo[CurRow].H[StartPage + PageIndex] = TempCellHeight;
|
|
} else {
|
|
this.RowsInfo[CurRow].H[StartPage + PageIndex] = TempCellHeight + TempMaxTopBorder;
|
|
}
|
|
}
|
|
}
|
|
for (var Index = 0; Index < this.Pages.length - 1; Index++) {
|
|
var CurRow = this.Pages[Index + 1].FirstRow;
|
|
if (0 === CurRow && false === this.RowsInfo[CurRow].FirstPage) {
|
|
this.Pages[Index].MaxBotBorder = 0;
|
|
this.Pages[Index].BotBorders = new Array();
|
|
continue;
|
|
} else {
|
|
if (false === this.RowsInfo[CurRow].FirstPage) {
|
|
CurRow--;
|
|
}
|
|
}
|
|
var MaxBotBorder = 0;
|
|
var BotBorders = new Array();
|
|
if (this.Content.length - 1 === CurRow) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
}
|
|
var Border_Info = Cell.Get_BorderInfo().Bottom;
|
|
for (var BorderId = 0; BorderId < Border_Info.length; BorderId++) {
|
|
var Border = Border_Info[BorderId];
|
|
if (border_Single === Border.Value && MaxBotBorder < Border.Size) {
|
|
MaxBotBorder = Border.Size;
|
|
}
|
|
BotBorders.push(Border);
|
|
}
|
|
}
|
|
} else {
|
|
var Row = this.Content[CurRow];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var CellsCount = Row.Get_CellsCount();
|
|
if (null != CellSpacing) {
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Border = Cell.Get_Borders().Bottom;
|
|
if (border_Single === Border.Value && MaxBotBorder < Border.Size) {
|
|
MaxBotBorder = Border.Size;
|
|
}
|
|
}
|
|
} else {
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
if (null === Cell) {
|
|
BotBorders.push(TableBorders.Bottom);
|
|
continue;
|
|
}
|
|
}
|
|
var Border = Cell.Get_Borders().Bottom;
|
|
var Result_Border = this.Internal_CompareBorders(Border, TableBorders.Bottom, false, true);
|
|
if (border_Single === Result_Border.Value && MaxBotBorder < Result_Border.Size) {
|
|
MaxBotBorder = Result_Border.Size;
|
|
}
|
|
BotBorders.push(Result_Border);
|
|
}
|
|
}
|
|
}
|
|
this.Pages[Index].MaxBotBorder = MaxBotBorder;
|
|
this.Pages[Index].BotBorders = BotBorders;
|
|
}
|
|
this.Pages[CurPage].Bounds.Bottom = this.Pages[CurPage].Bounds.Top + TableHeight;
|
|
this.Pages[CurPage].Bounds.Left = X_min;
|
|
this.Pages[CurPage].Bounds.Right = X_max;
|
|
this.Pages[CurPage].Height = TableHeight;
|
|
this.Pages[CurPage].MaxBotBorder = 0;
|
|
this.Pages[CurPage].BotBorders = new Array();
|
|
bNeedDocumentRecalculate = true;
|
|
} else {
|
|
for (var CurRow = 0; CurRow <= RowChange; CurRow++) {
|
|
this.TableRowsBottom[CurRow] = TableRowsBottom_new[CurRow];
|
|
this.RowsInfo[CurRow] = RowsInfo_new[CurRow];
|
|
}
|
|
var Pages_new = this.Pages;
|
|
this.Pages = Pages_old;
|
|
for (var PageId = 0; PageId < CurPage; PageId++) {
|
|
this.Pages[PageId] = Pages_new[PageId];
|
|
}
|
|
for (var CurRow = 0; CurRow <= RowChange; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var StartPage = this.RowsInfo[CurRow].StartPage;
|
|
var RowH = Row.Get_Height();
|
|
for (var PageIndex = 0; PageIndex < this.RowsInfo[CurRow].Pages; PageIndex++) {
|
|
var TempMaxTopBorder = this.RowsInfo[CurRow].MaxTopBorder[StartPage + PageIndex];
|
|
var TempY = 0;
|
|
if (null != CellSpacing) {
|
|
TempY = this.RowsInfo[CurRow].Y[StartPage + PageIndex];
|
|
} else {
|
|
TempY = this.RowsInfo[CurRow].Y[StartPage + PageIndex] + TempMaxTopBorder;
|
|
}
|
|
var TempCellHeight = this.TableRowsBottom[CurRow][StartPage + PageIndex] - TempY;
|
|
if (1 === this.RowsInfo[CurRow].Pages && heightrule_AtLeast === RowH.HRule && TempCellHeight < RowH.Value) {
|
|
TempCellHeight = RowH.Value;
|
|
}
|
|
if (null != CellSpacing) {
|
|
this.RowsInfo[CurRow].H[StartPage + PageIndex] = TempCellHeight;
|
|
} else {
|
|
this.RowsInfo[CurRow].H[StartPage + PageIndex] = TempCellHeight + TempMaxTopBorder;
|
|
}
|
|
}
|
|
}
|
|
for (var Index = 0; Index < CurPage; Index++) {
|
|
var CurRow = this.Pages[Index + 1].FirstRow;
|
|
if (0 === CurRow && false === this.RowsInfo[CurRow].FirstPage) {
|
|
this.Pages[Index].MaxBotBorder = 0;
|
|
this.Pages[Index].BotBorders = new Array();
|
|
continue;
|
|
} else {
|
|
if (false === this.RowsInfo[CurRow].FirstPage) {
|
|
CurRow--;
|
|
}
|
|
}
|
|
var MaxBotBorder = 0;
|
|
var BotBorders = new Array();
|
|
if (this.Content.length - 1 === CurRow) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
}
|
|
var Border_Info = Cell.Get_BorderInfo().Bottom;
|
|
for (var BorderId = 0; BorderId < Border_Info.length; BorderId++) {
|
|
var Border = Border_Info[BorderId];
|
|
if (border_Single === Border.Value && MaxBotBorder < Border.Size) {
|
|
MaxBotBorder = Border.Size;
|
|
}
|
|
BotBorders.push(Border);
|
|
}
|
|
}
|
|
} else {
|
|
var Row = this.Content[CurRow];
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
var CellsCount = Row.Get_CellsCount();
|
|
if (null != CellSpacing) {
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Border = Cell.Get_Borders().Bottom;
|
|
if (border_Single === Border.Value && MaxBotBorder < Border.Size) {
|
|
MaxBotBorder = Border.Size;
|
|
}
|
|
}
|
|
} else {
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
if (vmerge_Continue === Cell.Get_VMerge()) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
if (null === Cell) {
|
|
BotBorders.push(TableBorders.Bottom);
|
|
continue;
|
|
}
|
|
}
|
|
var Border = Cell.Get_Borders().Bottom;
|
|
var Result_Border = this.Internal_CompareBorders(Border, TableBorders.Bottom, false, true);
|
|
if (border_Single === Result_Border.Value && MaxBotBorder < Result_Border.Size) {
|
|
MaxBotBorder = Result_Border.Size;
|
|
}
|
|
BotBorders.push(Result_Border);
|
|
}
|
|
}
|
|
}
|
|
this.Pages[Index].MaxBotBorder = MaxBotBorder;
|
|
this.Pages[Index].BotBorders = BotBorders;
|
|
}
|
|
bNeedDocumentRecalculate = false;
|
|
}
|
|
this.Bounds = this.Pages[this.Pages.length - 1].Bounds;
|
|
this.TurnOffRecalc = false;
|
|
this.Internal_OnContentRecalculate(bNeedDocumentRecalculate, 0, this.Index);
|
|
},
|
|
Internal_GetCellByXY: function (X, Y, PageIndex) {
|
|
var CurGrid = 0;
|
|
var ColsCount = this.TableGrid.length;
|
|
if (X >= this.X) {
|
|
for (CurGrid = 0; CurGrid < ColsCount; CurGrid++) {
|
|
if (X >= this.X + this.TableSumGrid[CurGrid - 1] && X <= this.X + this.TableSumGrid[CurGrid]) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (CurGrid >= ColsCount.length) {
|
|
CurGrid = ColsCount.length - 1;
|
|
}
|
|
var PNum = PageIndex;
|
|
if (PNum < 0 || PNum >= this.Pages.length) {
|
|
return;
|
|
}
|
|
var Row_start = this.Pages[PNum].FirstRow;
|
|
var Row_last = Row_start;
|
|
if (PNum + 1 < this.Pages.length) {
|
|
Row_last = this.Pages[PNum + 1].FirstRow;
|
|
if (Row_last != Row_start && false === this.RowsInfo[Row_last].FirstPage) {
|
|
Row_last--;
|
|
}
|
|
} else {
|
|
Row_last = this.Content.length - 1;
|
|
}
|
|
if (Row_last < Row_start) {
|
|
return {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
}
|
|
for (var CurRow = Row_start; CurRow <= Row_last; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var BeforeInfo = Row.Get_Before();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === Vmerge && Row_start != CurRow) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
}
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, CurGridCol, GridSpan);
|
|
if (PNum + 1 < this.Pages.length) {
|
|
if (CurRow + VMergeCount - 1 >= this.Pages[PNum + 1].FirstRow) {
|
|
VMergeCount = this.Pages[PNum + 1].FirstRow + 1 - CurRow;
|
|
if (false === this.RowsInfo[CurRow + VMergeCount - 1].FirstPage && PNum === this.RowsInfo[CurRow + VMergeCount - 1].StartPage) {
|
|
VMergeCount--;
|
|
}
|
|
if (VMergeCount <= 0) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
if (CurGrid >= CurGridCol && CurGrid < CurGridCol + GridSpan) {
|
|
if ("undefined" != typeof(this.RowsInfo[CurRow + VMergeCount - 1].Y[PNum]) && "undefined" != typeof(this.RowsInfo[CurRow + VMergeCount - 1].H[PNum]) && (Y <= (this.RowsInfo[CurRow + VMergeCount - 1].Y[PNum] + this.RowsInfo[CurRow + VMergeCount - 1].H[PNum]) || CurRow + VMergeCount - 1 >= Row_last)) {
|
|
if (vmerge_Continue === Vmerge && Row_start === CurRow) {
|
|
Cell = this.Internal_Get_StartMergedCell(CurRow, CurGridCol, GridSpan);
|
|
if (null != Cell) {
|
|
return {
|
|
Row: Cell.Row.Index,
|
|
Cell: Cell.Index
|
|
};
|
|
} else {
|
|
return {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
}
|
|
} else {
|
|
return {
|
|
Row: CurRow,
|
|
Cell: CurCell
|
|
};
|
|
}
|
|
}
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
}
|
|
return {
|
|
Row: 0,
|
|
Cell: 0
|
|
};
|
|
},
|
|
Internal_GetVertMergeCount: function (StartRow, StartGridCol, GridSpan) {
|
|
var VmergeCount = 1;
|
|
for (var Index = StartRow + 1; Index < this.Content.length; Index++) {
|
|
var Row = this.Content[Index];
|
|
var BeforeInfo = Row.Get_Before();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
var CurCell = 0;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var bWasMerged = false;
|
|
while (CurGridCol <= StartGridCol && CurCell < CellsCount) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var CellGridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (CurGridCol === StartGridCol && GridSpan === CellGridSpan && vmerge_Continue === Vmerge) {
|
|
bWasMerged = true;
|
|
VmergeCount++;
|
|
break;
|
|
} else {
|
|
if (CurGridCol === StartGridCol && GridSpan === CellGridSpan && vmerge_Continue != Vmerge) {
|
|
bWasMerged = true;
|
|
return VmergeCount;
|
|
} else {
|
|
if (CurGridCol <= StartGridCol + GridSpan - 1 && CurGridCol + CellGridSpan - 1 >= StartGridCol) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
CurGridCol += CellGridSpan;
|
|
CurCell++;
|
|
}
|
|
if (false === bWasMerged) {
|
|
break;
|
|
}
|
|
}
|
|
return VmergeCount;
|
|
},
|
|
Internal_GetVertMergeCount2: function (StartRow, StartGridCol, GridSpan) {
|
|
var VmergeCount = 1;
|
|
var Start_Row = this.Content[StartRow];
|
|
var Start_VMerge = vmerge_Restart;
|
|
var Start_CellsCount = Start_Row.Get_CellsCount();
|
|
for (var Index = 0; Index < Start_CellsCount; Index++) {
|
|
var Temp_Grid_start = Start_Row.Get_CellInfo(Index).StartGridCol;
|
|
if (Temp_Grid_start === StartGridCol) {
|
|
Start_VMerge = Start_Row.Get_Cell(Index).Get_VMerge();
|
|
break;
|
|
}
|
|
}
|
|
if (vmerge_Restart === Start_VMerge) {
|
|
return VmergeCount;
|
|
}
|
|
for (var Index = StartRow - 1; Index >= 0; Index--) {
|
|
var Row = this.Content[Index];
|
|
var BeforeInfo = Row.Get_Before();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
var CurCell = 0;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var bWasMerged = false;
|
|
while (CurGridCol <= StartGridCol && CurCell < CellsCount) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var CellGridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (CurGridCol === StartGridCol && GridSpan === CellGridSpan && vmerge_Continue === Vmerge) {
|
|
bWasMerged = true;
|
|
VmergeCount++;
|
|
break;
|
|
} else {
|
|
if (CurGridCol === StartGridCol && GridSpan === CellGridSpan && vmerge_Continue != Vmerge) {
|
|
bWasMerged = true;
|
|
VmergeCount++;
|
|
return VmergeCount;
|
|
} else {
|
|
if (CurGridCol <= StartGridCol + GridSpan - 1 && CurGridCol + CellGridSpan - 1 >= StartGridCol) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
CurGridCol += CellGridSpan;
|
|
CurCell++;
|
|
}
|
|
if (false === bWasMerged) {
|
|
break;
|
|
}
|
|
}
|
|
return VmergeCount;
|
|
},
|
|
Internal_Check_TableRows: function (bSaveHeight) {
|
|
var Rows_to_Delete = new Array();
|
|
var Rows_to_CalcH = new Array();
|
|
var Rows_to_CalcH2 = new Array();
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var bVmerge_Restart = false;
|
|
var bVmerge_Continue = false;
|
|
var bNeedDeleteRow = true;
|
|
var bNeedCalcHeight = false;
|
|
if (Row.Get_Before().GridBefore > 0 || Row.Get_After().GridAfter > 0) {
|
|
bNeedCalcHeight = true;
|
|
}
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var VMerge = Cell.Get_VMerge();
|
|
if (VMerge != vmerge_Continue) {
|
|
var VMergeCount = this.Internal_GetVertMergeCount(CurRow, Row.Get_CellInfo(CurCell).StartGridCol, Cell.Get_GridSpan());
|
|
if (VMergeCount > 1) {
|
|
bVmerge_Restart = true;
|
|
}
|
|
bNeedDeleteRow = false;
|
|
if (true === bNeedCalcHeight) {
|
|
if (1 === VMergeCount) {
|
|
bNeedCalcHeight = false;
|
|
}
|
|
}
|
|
} else {
|
|
bVmerge_Continue = true;
|
|
}
|
|
}
|
|
if (true === bVmerge_Continue && true === bVmerge_Restart) {
|
|
Rows_to_CalcH2.push(CurRow);
|
|
} else {
|
|
if (true === bNeedCalcHeight) {
|
|
Rows_to_CalcH.push(CurRow);
|
|
}
|
|
}
|
|
if (true === bNeedDeleteRow) {
|
|
Rows_to_Delete.push(CurRow);
|
|
}
|
|
}
|
|
for (var Index = 0; Index < Rows_to_CalcH2.length; Index++) {
|
|
var RowIndex = Rows_to_CalcH2[Index];
|
|
var MinHeight = -1;
|
|
var Row = this.Content[RowIndex];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var VMerge = Cell.Get_VMerge();
|
|
if (vmerge_Restart === VMerge) {
|
|
var CurMinHeight = Cell.Content.Get_EmptyHeight();
|
|
if (CurMinHeight < MinHeight || MinHeight === -1) {
|
|
MinHeight = CurMinHeight;
|
|
}
|
|
}
|
|
}
|
|
var OldHeight = this.Content[RowIndex].Get_Height();
|
|
if (undefined === OldHeight || heightrule_Auto == OldHeight.HRule || (MinHeight > OldHeight.Value)) {
|
|
this.Content[RowIndex].Set_Height(MinHeight, heightrule_AtLeast);
|
|
}
|
|
}
|
|
if (Rows_to_Delete.length <= 0) {
|
|
return false;
|
|
}
|
|
if (true === bSaveHeight) {
|
|
for (var Index = 0; Index < Rows_to_CalcH.length; Index++) {
|
|
var RowIndex = Rows_to_CalcH[Index];
|
|
this.Content[RowIndex].Set_Height(this.RowsInfo[RowIndex].H, heightrule_AtLeast);
|
|
}
|
|
for (var Counter = 0; Counter < Rows_to_Delete.length;) {
|
|
var CurRowSpan = 1;
|
|
var StartRow = Rows_to_Delete[Counter];
|
|
while (Counter + CurRowSpan < Rows_to_Delete.length && Rows_to_Delete[Counter] + CurRowSpan === Rows_to_Delete[Counter + CurRowSpan]) {
|
|
CurRowSpan++;
|
|
}
|
|
if (this.RowsInfo[StartRow - 1 + CurRowSpan].StartPage === this.RowsInfo[StartRow - 1].StartPage) {
|
|
var StartPage = this.RowsInfo[StartRow - 1 + CurRowSpan].StartPage;
|
|
var Summary_Height = this.RowsInfo[StartRow - 1 + CurRowSpan].H[StartPage] + this.RowsInfo[StartRow - 1 + CurRowSpan].Y[StartPage] - this.RowsInfo[StartRow - 1].Y[StartPage];
|
|
this.Content[StartRow - 1].Set_Height(Summary_Height, heightrule_AtLeast);
|
|
}
|
|
Counter += CurRowSpan;
|
|
}
|
|
}
|
|
for (var Index = Rows_to_Delete.length - 1; Index >= 0; Index--) {
|
|
var Row_to_Delete = Rows_to_Delete[Index];
|
|
this.Internal_Remove_Row(Row_to_Delete);
|
|
}
|
|
return true;
|
|
},
|
|
Internal_Remove_Row: function (Index) {
|
|
if (Index >= this.Content.length || Index < 0) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_RemoveRow,
|
|
Pos: Index,
|
|
Item: {
|
|
Row: this.Content[Index],
|
|
TableRowsBottom: this.TableRowsBottom[Index],
|
|
RowsInfo: this.RowsInfo[Index]
|
|
}
|
|
});
|
|
this.Rows--;
|
|
this.Content.splice(Index, 1);
|
|
this.TableRowsBottom.splice(Index, 1);
|
|
this.RowsInfo.splice(Index, 1);
|
|
this.Internal_ReIndexing(Index);
|
|
},
|
|
Internal_Add_Row: function (Index, CellsCount, bReIndexing) {
|
|
if (Index < 0) {
|
|
Index = 0;
|
|
}
|
|
if (Index >= this.Content.length) {
|
|
Index = this.Content.length;
|
|
}
|
|
this.Rows++;
|
|
var NewRow = new CTableRow(this, CellsCount);
|
|
History.Add(this, {
|
|
Type: historyitem_Table_AddRow,
|
|
Pos: Index,
|
|
Item: {
|
|
Row: NewRow,
|
|
TableRowsBottom: {},
|
|
RowsInfo: {}
|
|
}
|
|
});
|
|
this.Content.splice(Index, 0, NewRow);
|
|
this.TableRowsBottom.splice(Index, 0, {});
|
|
this.RowsInfo.splice(Index, 0, {});
|
|
if (true === bReIndexing) {
|
|
this.Internal_ReIndexing(Index);
|
|
} else {
|
|
if (Index > 0) {
|
|
this.Content[Index - 1].Next = NewRow;
|
|
NewRow.Prev = this.Content[Index - 1];
|
|
} else {
|
|
NewRow.Prev = null;
|
|
}
|
|
if (Index < this.Content.length - 1) {
|
|
this.Content[Index + 1].Prev = NewRow;
|
|
NewRow.Next = this.Content[Index + 1];
|
|
} else {
|
|
NewRow.Next = null;
|
|
}
|
|
}
|
|
return NewRow;
|
|
},
|
|
Clear_ContentChanges: function () {
|
|
this.m_oContentChanges.Clear();
|
|
},
|
|
Add_ContentChanges: function (Changes) {
|
|
this.m_oContentChanges.Add(Changes);
|
|
},
|
|
Refresh_ContentChanges: function () {
|
|
this.m_oContentChanges.Refresh();
|
|
},
|
|
Internal_ReIndexing: function (StartIndex) {
|
|
if ("undefined" === typeof(StartIndex)) {
|
|
StartIndex = 0;
|
|
}
|
|
for (var Ind = StartIndex; Ind < this.Content.length; Ind++) {
|
|
this.Content[Ind].Set_Index(Ind);
|
|
this.Content[Ind].Prev = (Ind > 0 ? this.Content[Ind - 1] : null);
|
|
this.Content[Ind].Next = (Ind < this.Content.length - 1 ? this.Content[Ind + 1] : null);
|
|
}
|
|
},
|
|
Internal_CreateNewGrid: function (RowsInfo) {
|
|
var CurPos = new Array();
|
|
var CurX = new Array();
|
|
for (var Index = 0; Index < RowsInfo.length; Index++) {
|
|
CurPos[Index] = 0;
|
|
CurX[Index] = RowsInfo[Index][0].W;
|
|
for (var Index2 = 0; Index2 < RowsInfo[Index].length; Index2++) {
|
|
RowsInfo[Index][Index2].GridSpan = 1;
|
|
if (1 != RowsInfo[Index][RowsInfo[Index].length - 1].Type) {
|
|
RowsInfo[Index].push({
|
|
W: 0,
|
|
Type: 1,
|
|
GridSpan: 0
|
|
});
|
|
} else {
|
|
RowsInfo[Index][RowsInfo[Index].length - 1] = {
|
|
W: 0,
|
|
Type: 1,
|
|
GridSpan: 0
|
|
};
|
|
}
|
|
}
|
|
}
|
|
var TableGrid = new Array();
|
|
var bEnd = false;
|
|
var PrevX = 0;
|
|
while (true != bEnd) {
|
|
var MinX = -1;
|
|
for (var Index = 0; Index < RowsInfo.length; Index++) {
|
|
if ((MinX === -1 || CurX[Index] < MinX) && !(RowsInfo[Index].length - 1 === CurPos[Index] && 1 === RowsInfo[Index][CurPos[Index]].Type)) {
|
|
MinX = CurX[Index];
|
|
}
|
|
}
|
|
for (var Index = 0; Index < RowsInfo.length; Index++) {
|
|
if (RowsInfo[Index].length - 1 === CurPos[Index] && 1 === RowsInfo[Index][CurPos[Index]].Type) {
|
|
RowsInfo[Index][CurPos[Index]].GridSpan++;
|
|
} else {
|
|
if (Math.abs(MinX - CurX[Index]) < 0.001) {
|
|
CurPos[Index]++;
|
|
CurX[Index] += RowsInfo[Index][CurPos[Index]].W;
|
|
} else {
|
|
RowsInfo[Index][CurPos[Index]].GridSpan++;
|
|
}
|
|
}
|
|
}
|
|
TableGrid.push(MinX - PrevX);
|
|
PrevX = MinX;
|
|
bEnd = true;
|
|
for (var Index = 0; Index < RowsInfo.length; Index++) {
|
|
if (RowsInfo[Index].length - 1 != CurPos[Index]) {
|
|
bEnd = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
for (var CurRow = 0; CurRow < RowsInfo.length; CurRow++) {
|
|
var RowInfo = RowsInfo[CurRow];
|
|
var Row = this.Content[CurRow];
|
|
var CurIndex = 0;
|
|
if (-1 === RowInfo[0].Type) {
|
|
if (RowInfo[0].GridSpan > 0) {
|
|
Row.Set_Before(RowInfo[0].GridSpan);
|
|
}
|
|
CurIndex++;
|
|
} else {
|
|
Row.Set_Before(0);
|
|
}
|
|
for (var CurCell = 0; CurIndex < RowInfo.length; CurIndex++, CurCell++) {
|
|
if (1 === RowInfo[CurIndex].Type) {
|
|
break;
|
|
}
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
Cell.Set_GridSpan(RowInfo[CurIndex].GridSpan);
|
|
var WType = Cell.Get_W().Type;
|
|
if (tblwidth_Auto != WType && tblwidth_Nil != WType) {
|
|
Cell.Set_W(new CTableMeasurement(tblwidth_Mm, RowInfo[CurIndex].W));
|
|
}
|
|
}
|
|
CurIndex = RowInfo.length - 1;
|
|
if (1 === RowInfo[CurIndex].Type) {
|
|
Row.Set_After(RowInfo[CurIndex].GridSpan);
|
|
} else {
|
|
Row.Set_After(0);
|
|
}
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableGrid,
|
|
Old: this.TableGrid,
|
|
New: TableGrid
|
|
});
|
|
this.TableGrid = TableGrid;
|
|
return TableGrid;
|
|
},
|
|
Internal_UpdateCellW: function (Col) {
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
var CurGridCol = Row.Get_Before().GridBefore;
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
if (Col >= CurGridCol && Col < CurGridCol + GridSpan) {
|
|
CellWType = Cell.Get_W().Type;
|
|
if (tblwidth_Auto != CellWType && tblwidth_Nil != CellWType) {
|
|
var W = 0;
|
|
for (var CurSpan = CurGridCol; CurSpan < CurGridCol + GridSpan; CurSpan++) {
|
|
W += this.TableGrid[CurSpan];
|
|
}
|
|
Cell.Set_W(new CTableMeasurement(tblwidth_Mm, W));
|
|
}
|
|
break;
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
}
|
|
},
|
|
Internal_CompareBorders: function (Border1, Border2, bTableBorder1, bTableBorder2) {
|
|
if ("undefined" === typeof(bTableBorder1)) {
|
|
bTableBorder1 = false;
|
|
}
|
|
if ("undefined" === typeof(bTableBorder2)) {
|
|
bTableBorder2 = false;
|
|
}
|
|
if (true === bTableBorder1) {
|
|
return Border2;
|
|
}
|
|
if (true === bTableBorder2) {
|
|
return Border1;
|
|
}
|
|
if (border_None === Border1.Value) {
|
|
return Border2;
|
|
}
|
|
if (border_None === Border2.Value) {
|
|
return Border1;
|
|
}
|
|
var W_b_1 = Border1.Size;
|
|
var W_b_2 = Border2.Size;
|
|
if (W_b_1 > W_b_2) {
|
|
return Border1;
|
|
} else {
|
|
if (W_b_2 > W_b_1) {
|
|
return Border2;
|
|
}
|
|
}
|
|
var Brightness_1_1 = Border1.Color.r + Border1.Color.b + 2 * Border1.Color.g;
|
|
var Brightness_1_2 = Border2.Color.r + Border2.Color.b + 2 * Border2.Color.g;
|
|
if (Brightness_1_1 < Brightness_1_2) {
|
|
return Border1;
|
|
} else {
|
|
if (Brightness_1_2 < Brightness_1_1) {
|
|
return Border2;
|
|
}
|
|
}
|
|
var Brightness_2_1 = Border1.Color.b + 2 * Border1.Color.g;
|
|
var Brightness_2_2 = Border2.Color.b + 2 * Border2.Color.g;
|
|
if (Brightness_2_1 < Brightness_2_2) {
|
|
return Border1;
|
|
} else {
|
|
if (Brightness_2_2 < Brightness_2_1) {
|
|
return Border2;
|
|
}
|
|
}
|
|
var Brightness_3_1 = Border1.Color.g;
|
|
var Brightness_3_2 = Border2.Color.g;
|
|
if (Brightness_3_1 < Brightness_3_2) {
|
|
return Border1;
|
|
} else {
|
|
if (Brightness_3_2 < Brightness_3_1) {
|
|
return Border2;
|
|
}
|
|
}
|
|
return Border1;
|
|
},
|
|
Internal_Get_StartMergedCell: function (StartRow, StartGridCol, GridSpan) {
|
|
var Result = null;
|
|
for (var Index = StartRow; Index >= 0; Index--) {
|
|
var Row = this.Content[Index];
|
|
var BeforeInfo = Row.Get_Before();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
var CurCell = 0;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var bWasMerged = false;
|
|
while (CurGridCol <= StartGridCol && CurCell < CellsCount) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var CellGridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (CurGridCol === StartGridCol && GridSpan === CellGridSpan && vmerge_Continue === Vmerge) {
|
|
bWasMerged = true;
|
|
Result = Cell;
|
|
break;
|
|
} else {
|
|
if (CurGridCol === StartGridCol && GridSpan === CellGridSpan && vmerge_Continue != Vmerge) {
|
|
bWasMerged = true;
|
|
Result = Cell;
|
|
return Result;
|
|
} else {
|
|
if (CurGridCol <= StartGridCol + GridSpan - 1 && CurGridCol + CellGridSpan - 1 >= StartGridCol) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
CurGridCol += CellGridSpan;
|
|
CurCell++;
|
|
}
|
|
if (false === bWasMerged) {
|
|
break;
|
|
}
|
|
}
|
|
return Result;
|
|
},
|
|
Internal_Get_StartMergedCell2: function (CellIndex, RowIndex) {
|
|
var Row = this.Content[RowIndex];
|
|
var Cell = Row.Get_Cell(CellIndex);
|
|
var CellInfo = Row.Get_CellInfo(CellIndex);
|
|
return this.Internal_Get_StartMergedCell(RowIndex, CellInfo.StartGridCol, Cell.Get_GridSpan());
|
|
},
|
|
Internal_Get_Cell_ByStartGridCol: function (RowIndex, StartGridCol) {
|
|
var Row = this.Content[RowIndex];
|
|
var BeforeInfo = Row.Get_Before();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
if (StartGridCol === CurGridCol) {
|
|
return CurCell;
|
|
} else {
|
|
if (CurGridCol > StartGridCol) {
|
|
return -1;
|
|
}
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
return -1;
|
|
},
|
|
Internal_Update_TableMarkup: function (RowIndex, CellIndex, PageNum) {
|
|
this.Markup.Internal = {
|
|
RowIndex: RowIndex,
|
|
CellIndex: CellIndex,
|
|
PageNum: PageNum
|
|
};
|
|
var _x = this.Parent.transform.TransformPointX(0, 0);
|
|
var _y = this.Parent.transform.TransformPointY(0, 0);
|
|
this.Markup.X = this.X;
|
|
var Row = this.Content[RowIndex];
|
|
var CellSpacing = (null === Row.Get_CellSpacing() ? 0 : Row.Get_CellSpacing());
|
|
var CellsCount = Row.Get_CellsCount();
|
|
var GridBefore = Row.Get_Before().GridBefore;
|
|
this.Markup.X += this.TableSumGrid[GridBefore - 1];
|
|
this.Markup.Cols = new Array();
|
|
this.Markup.Margins = new Array();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var StartGridCol = Row.Get_CellInfo(CurCell).StartGridCol;
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var CellMargin = Cell.Get_Margins();
|
|
this.Markup.Cols.push(this.TableSumGrid[StartGridCol + GridSpan - 1] - this.TableSumGrid[StartGridCol - 1]);
|
|
var Margin_left = CellMargin.Left.W;
|
|
var Margin_right = CellMargin.Right.W;
|
|
if (0 === CurCell) {
|
|
Margin_left += CellSpacing;
|
|
} else {
|
|
Margin_left += CellSpacing / 2;
|
|
}
|
|
if (CellsCount - 1 === CurCell) {
|
|
Margin_right += CellSpacing;
|
|
} else {
|
|
Margin_right += CellSpacing / 2;
|
|
}
|
|
this.Markup.Margins.push({
|
|
Left: Margin_left,
|
|
Right: Margin_right
|
|
});
|
|
}
|
|
var Row_start = this.Pages[PageNum].FirstRow;
|
|
var Row_last = Row_start;
|
|
if (PageNum + 1 < this.Pages.length) {
|
|
Row_last = this.Pages[PageNum + 1].FirstRow;
|
|
if ((Row_start != Row_last || (0 === Row_start && 0 === Row_last)) && false === this.RowsInfo[Row_last].FirstPage) {
|
|
Row_last--;
|
|
}
|
|
} else {
|
|
Row_last = this.Content.length - 1;
|
|
}
|
|
this.Markup.Rows = new Array();
|
|
for (var CurRow = Row_start; CurRow <= Row_last; CurRow++) {
|
|
this.Markup.Rows.push({
|
|
Y: this.RowsInfo[CurRow].Y[PageNum],
|
|
H: this.RowsInfo[CurRow].H[PageNum]
|
|
});
|
|
}
|
|
this.Markup.CurCol = CellIndex;
|
|
this.Markup.CurRow = RowIndex - Row_start;
|
|
var _markup = this.Markup.CreateDublicate();
|
|
_markup.X += _x;
|
|
for (CurRow = Row_start; CurRow <= Row_last; CurRow++) {
|
|
_markup.Rows[CurRow].Y += _y;
|
|
}
|
|
this.DrawingDocument.Set_RulerState_Table(_markup);
|
|
},
|
|
Internal_CheckBorders: function (X, Y, PageNum) {
|
|
var CellPos = this.Internal_GetCellByXY(X, Y, PageNum);
|
|
var Row = this.Content[CellPos.Row];
|
|
var Cell = Row.Get_Cell(CellPos.Cell);
|
|
var CellInfo = Row.Get_CellInfo(CellPos.Cell);
|
|
var VMerge_count = this.Internal_GetVertMergeCount(CellPos.Row, CellInfo.StartGridCol, Cell.Get_GridSpan());
|
|
var VMerge_count_over = VMerge_count;
|
|
if (PageNum + 1 < this.Pages.length) {
|
|
if (CellPos.Row + VMerge_count - 1 >= this.Pages[PageNum + 1].FirstRow) {
|
|
VMerge_count = this.Pages[PageNum + 1].FirstRow + 1 - CellPos.Row;
|
|
if (false === this.RowsInfo[CellPos.Row + VMerge_count - 1].FirstPage) {
|
|
VMerge_count--;
|
|
}
|
|
}
|
|
}
|
|
var Row_end = this.Content[CellPos.Row + VMerge_count - 1];
|
|
var Cell_end = this.Internal_Get_Cell_ByStartGridCol(CellPos.Row + VMerge_count - 1, CellInfo.StartGridCol);
|
|
var CellInfo_end = Row_end.Get_CellInfo(Cell_end.Index);
|
|
var X_cell_start = CellInfo.X_grid_start;
|
|
var X_cell_end = CellInfo.X_grid_end;
|
|
var Y_cell_start = this.RowsInfo[CellPos.Row].Y[PageNum];
|
|
var Y_cell_end = this.RowsInfo[CellPos.Row + VMerge_count - 1].Y[PageNum] + this.RowsInfo[CellPos.Row + VMerge_count - 1].H[PageNum];
|
|
var Radius = this.DrawingDocument.GetMMPerDot(3);
|
|
if (Y <= Y_cell_start + Radius && Y >= Y_cell_start - Radius) {
|
|
return {
|
|
Pos: CellPos,
|
|
Border: 0
|
|
};
|
|
} else {
|
|
if (Y <= Y_cell_end + Radius && Y >= Y_cell_end - Radius) {
|
|
if (VMerge_count != VMerge_count_over) {
|
|
return {
|
|
Pos: CellPos,
|
|
Border: -1
|
|
};
|
|
}
|
|
return {
|
|
Pos: CellPos,
|
|
Border: 2,
|
|
Row: CellPos.Row + VMerge_count_over - 1
|
|
};
|
|
} else {
|
|
if (X <= X_cell_start + Radius && X >= X_cell_start - Radius) {
|
|
return {
|
|
Pos: CellPos,
|
|
Border: 3
|
|
};
|
|
} else {
|
|
if (X <= X_cell_end + Radius && X >= X_cell_end - Radius) {
|
|
return {
|
|
Pos: CellPos,
|
|
Border: 1
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
Pos: CellPos,
|
|
Border: -1
|
|
};
|
|
},
|
|
Internal_OnContentRecalculate: function (bNeedDocumentRecalc, PageNum, DocumentIndex) {
|
|
if (false === this.TurnOffRecalcEvent) {
|
|
this.Parent.OnContentRecalculate(bNeedDocumentRecalc, PageNum, DocumentIndex);
|
|
}
|
|
},
|
|
Internal_Selection_UpdateCells: function (bForceSelectByLines) {
|
|
if ("undefined" == typeof(bForceSelectByLines)) {
|
|
bForceSelectByLines = false;
|
|
}
|
|
this.Selection.Type = table_Selection_Cell;
|
|
this.Selection.Data = new Array();
|
|
if (true === this.Parent.Selection_Is_OneElement() && false == bForceSelectByLines) {
|
|
var StartRow = this.Selection.StartPos.Pos.Row;
|
|
var StartCell = this.Selection.StartPos.Pos.Cell;
|
|
var EndRow = this.Selection.EndPos.Pos.Row;
|
|
var EndCell = this.Selection.EndPos.Pos.Cell;
|
|
if (EndRow < StartRow) {
|
|
var TempRow = StartRow;
|
|
StartRow = EndRow;
|
|
EndRow = TempRow;
|
|
var TempCell = StartCell;
|
|
StartCell = EndCell;
|
|
EndCell = TempCell;
|
|
}
|
|
if (StartRow === EndRow) {
|
|
if (EndCell < StartCell) {
|
|
var TempCell = StartCell;
|
|
StartCell = EndCell;
|
|
EndCell = TempCell;
|
|
}
|
|
var Row = this.Content[StartRow];
|
|
for (var CurCell = StartCell; CurCell <= EndCell; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === Vmerge) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
}
|
|
this.Selection.Data.push({
|
|
Row: StartRow,
|
|
Cell: CurCell
|
|
});
|
|
}
|
|
} else {
|
|
var Cell_s = this.Content[StartRow].Get_Cell(StartCell);
|
|
var Cell_e = this.Content[EndRow].Get_Cell(EndCell);
|
|
var GridCol_cs_start = this.Content[StartRow].Get_CellInfo(StartCell).StartGridCol;
|
|
var GridCol_cs_end = Cell_s.Get_GridSpan() - 1 + GridCol_cs_start;
|
|
var GridCol_ce_start = this.Content[EndRow].Get_CellInfo(EndCell).StartGridCol;
|
|
var GridCol_ce_end = Cell_e.Get_GridSpan() - 1 + GridCol_ce_start;
|
|
var GridCol_start = GridCol_cs_start;
|
|
if (GridCol_ce_start < GridCol_start) {
|
|
GridCol_start = GridCol_ce_start;
|
|
}
|
|
var GridCol_end = GridCol_cs_end;
|
|
if (GridCol_end < GridCol_ce_end) {
|
|
GridCol_end = GridCol_ce_end;
|
|
}
|
|
for (var CurRow = StartRow; CurRow <= EndRow; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var BeforeInfo = Row.Get_Before();
|
|
var CurGridCol = BeforeInfo.GridBefore;
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === Vmerge) {
|
|
CurGridCol += GridSpan;
|
|
continue;
|
|
}
|
|
if ((StartRow === CurRow) || (EndRow === CurRow) || (CurRow > StartRow && CurRow < EndRow)) {
|
|
if ((CurGridCol >= GridCol_start && CurGridCol <= GridCol_end) || (CurGridCol + GridSpan - 1 >= GridCol_start && CurGridCol + GridSpan - 1 <= GridCol_end)) {
|
|
this.Selection.Data.push({
|
|
Row: CurRow,
|
|
Cell: CurCell
|
|
});
|
|
}
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var StartRow = this.Selection.StartPos.Pos.Row;
|
|
var EndRow = this.Selection.EndPos.Pos.Row;
|
|
if (EndRow < StartRow) {
|
|
var TempRow = StartRow;
|
|
StartRow = EndRow;
|
|
EndRow = TempRow;
|
|
}
|
|
for (var CurRow = StartRow; CurRow <= EndRow; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var CellsCount = Row.Get_CellsCount();
|
|
for (var CurCell = 0; CurCell < CellsCount; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === Vmerge) {
|
|
continue;
|
|
}
|
|
this.Selection.Data.push({
|
|
Row: CurRow,
|
|
Cell: CurCell
|
|
});
|
|
}
|
|
}
|
|
}
|
|
if (this.Selection.Data.length > 1) {
|
|
this.Selection.CurRow = this.Selection.Data[this.Selection.Data.length - 1].Row;
|
|
}
|
|
if (true != this.Is_Inline() && true === this.Selection.Use && false === this.Selection.Start) {
|
|
var ParaPr = this.Get_Paragraph_ParaPr();
|
|
if (null != ParaPr) {
|
|
editor.UpdateParagraphProp(ParaPr);
|
|
}
|
|
var TextPr = this.Get_Paragraph_TextPr();
|
|
if (null != TextPr) {
|
|
editor.UpdateTextPr(TextPr);
|
|
}
|
|
}
|
|
},
|
|
Internal_CompareBorders2: function (Border1, Border2) {
|
|
var ResultBorder = new CDocumentBorder();
|
|
if (Border1.Value != Border2.Value) {
|
|
ResultBorder.Value = undefined;
|
|
} else {
|
|
ResultBorder.Value = Border1.Value;
|
|
}
|
|
if (Border1.Size != Border2.Size) {
|
|
ResultBorder.Size = undefined;
|
|
} else {
|
|
ResultBorder.Size = Border1.Size;
|
|
}
|
|
if (undefined === Border1.Color || undefined === Border2.Color || Border1.Color.r != Border2.Color.r || Border1.Color.g != Border2.Color.g || Border1.Color.b != Border2.Color.b) {
|
|
ResultBorder.Color = undefined;
|
|
} else {
|
|
ResultBorder.Color.Set(Border1.Color.r, Border1.Color.g, Border1.Color.b);
|
|
}
|
|
return ResultBorder;
|
|
},
|
|
Internal_CompareBorders3: function (Border1, Border2) {
|
|
if (Border1.Value != Border2.Value) {
|
|
return false;
|
|
}
|
|
if (Border1.Size != Border2.Size) {
|
|
return false;
|
|
}
|
|
if (Border1.Color.r != Border2.Color.r || Border1.Color.g != Border2.Color.g || Border1.Color.b != Border2.Color.b) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
Internal_CheckNullBorder: function (Border) {
|
|
if (null === Border || undefined === Border) {
|
|
return true;
|
|
}
|
|
if (null != Border.Value) {
|
|
return false;
|
|
}
|
|
if (null != Border.Size) {
|
|
return false;
|
|
}
|
|
if (null != Border.Color && (null != Border.Color.r || null != Border.Color.g || null != Border.Color.b)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
Internal_Get_SelectionArray: function () {
|
|
var SelectionArray = null;
|
|
if (true === this.ApplyToAll) {
|
|
SelectionArray = new Array();
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
for (var CurCell = 0; CurCell < Row.Get_CellsCount(); CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Vmerge = Cell.Get_VMerge();
|
|
if (vmerge_Continue === Vmerge) {
|
|
continue;
|
|
}
|
|
SelectionArray.push({
|
|
Cell: CurCell,
|
|
Row: CurRow
|
|
});
|
|
}
|
|
}
|
|
} else {
|
|
if (true === this.Selection.Use && table_Selection_Cell === this.Selection.Type) {
|
|
SelectionArray = this.Selection.Data;
|
|
} else {
|
|
SelectionArray = [{
|
|
Cell: this.CurCell.Index,
|
|
Row: this.CurCell.Row.Index
|
|
}];
|
|
}
|
|
}
|
|
return SelectionArray;
|
|
},
|
|
Internal_Get_TableMinWidth: function () {
|
|
var MinWidth = 0;
|
|
for (var CurRow = 0; CurRow < this.Content.length; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
if (null === CellSpacing) {
|
|
CellSpacing = 0;
|
|
}
|
|
var RowWidth = CellSpacing * (Cells_Count + 1);
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Cell_Margins = Cell.Get_Margins();
|
|
RowWidth += Cell_Margins.Left.W + Cell_Margins.Right.W;
|
|
}
|
|
if (MinWidth < RowWidth) {
|
|
MinWidth = RowWidth;
|
|
}
|
|
}
|
|
return MinWidth;
|
|
},
|
|
Internal_Get_MinSumGrid: function () {
|
|
var ColsCount = this.TableGrid.length;
|
|
var SumGrid = new Array();
|
|
for (var Index = -1; Index < ColsCount; Index++) {
|
|
SumGrid[Index] = 0;
|
|
}
|
|
var RowsCount = this.Content.length;
|
|
for (var CurRow = 0; CurRow < RowsCount; CurRow++) {
|
|
var Row = this.Content[CurRow];
|
|
var Cells_Count = Row.Get_CellsCount();
|
|
var CellSpacing = Row.Get_CellSpacing();
|
|
if (null === CellSpacing) {
|
|
CellSpacing = 0;
|
|
}
|
|
var CurGridCol = 0;
|
|
for (var CurCell = 0; CurCell < Cells_Count; CurCell++) {
|
|
var Cell = Row.Get_Cell(CurCell);
|
|
var Cell_Margins = Cell.Get_Margins();
|
|
var GridSpan = Cell.Get_GridSpan();
|
|
var Cell_MinWidth = Cell_Margins.Left.W + Cell_Margins.Right.W;
|
|
if (0 === CurCell || Cells_Count - 1 === CurCell) {
|
|
Cell_MinWidth += CellSpacing * 1.5;
|
|
} else {
|
|
Cell_MinWidth += CellSpacing;
|
|
}
|
|
if (SumGrid[CurGridCol + GridSpan - 1] < SumGrid[CurGridCol - 1] + Cell_MinWidth) {
|
|
SumGrid[CurGridCol + GridSpan - 1] = SumGrid[CurGridCol - 1] + Cell_MinWidth;
|
|
}
|
|
CurGridCol += GridSpan;
|
|
}
|
|
}
|
|
return SumGrid;
|
|
},
|
|
Internal_ScaleTableWidth: function (SumGrid, TableW) {
|
|
var SumGrid_min = this.Internal_Get_MinSumGrid();
|
|
var Grids_to_scale = new Array();
|
|
for (var Index = 0; Index < SumGrid.length; Index++) {
|
|
Grids_to_scale[Index] = true;
|
|
}
|
|
var Grids_to_scale_count = Grids_to_scale.length;
|
|
var TableGrid = new Array();
|
|
TableGrid[0] = SumGrid[0];
|
|
for (var Index = 1; Index < SumGrid.length; Index++) {
|
|
TableGrid[Index] = SumGrid[Index] - SumGrid[Index - 1];
|
|
}
|
|
var TableGrid_min = new Array();
|
|
TableGrid_min[0] = SumGrid_min[0];
|
|
for (var Index = 1; Index < SumGrid_min.length; Index++) {
|
|
TableGrid_min[Index] = SumGrid_min[Index] - SumGrid_min[Index - 1];
|
|
}
|
|
var CurrentW = SumGrid[SumGrid.length - 1];
|
|
while (Grids_to_scale_count > 0) {
|
|
var Koef = TableW / CurrentW;
|
|
var TableGrid_cur = new Array();
|
|
for (var Index = 0; Index < TableGrid.length; Index++) {
|
|
TableGrid_cur[Index] = TableGrid[Index];
|
|
}
|
|
for (var AddIndex = 0; AddIndex <= TableGrid_cur.length - 1; AddIndex++) {
|
|
if (true === Grids_to_scale[AddIndex]) {
|
|
TableGrid_cur[AddIndex] = TableGrid_cur[AddIndex] * Koef;
|
|
}
|
|
}
|
|
var bBreak = true;
|
|
for (var AddIndex = 0; AddIndex <= TableGrid_cur.length - 1; AddIndex++) {
|
|
if (true === Grids_to_scale[AddIndex] && TableGrid_cur[AddIndex] - TableGrid_min[AddIndex] < 0.001) {
|
|
bBreak = false;
|
|
Grids_to_scale[AddIndex] = false;
|
|
Grids_to_scale_count--;
|
|
CurrentW -= TableGrid[AddIndex];
|
|
TableW -= TableGrid_min[AddIndex];
|
|
TableGrid[AddIndex] = TableGrid_min[AddIndex];
|
|
}
|
|
}
|
|
if (true === bBreak) {
|
|
for (var AddIndex = 0; AddIndex <= TableGrid_cur.length - 1; AddIndex++) {
|
|
if (true === Grids_to_scale[AddIndex]) {
|
|
TableGrid[AddIndex] = TableGrid_cur[AddIndex];
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
var SumGrid_new = new Array();
|
|
SumGrid_new[-1] = 0;
|
|
for (var Index = 0; Index < TableGrid.length; Index++) {
|
|
SumGrid_new[Index] = TableGrid[Index] + SumGrid_new[Index - 1];
|
|
}
|
|
return SumGrid_new;
|
|
},
|
|
Internal_SaveTableGridInHistory: function (TableGrid_new, TableGrid_old) {
|
|
var NeedSave = false;
|
|
if (TableGrid_new.length != TableGrid_old.length) {
|
|
NeedSave = true;
|
|
}
|
|
if (false === NeedSave) {
|
|
for (var Index = 0; Index < TableGrid_new.length; Index++) {
|
|
if (Math.abs(TableGrid_new[Index] - TableGrid_old[Index]) > 0.001) {
|
|
NeedSave = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (true === NeedSave) {
|
|
History.Add(this, {
|
|
Type: historyitem_Table_TableGrid,
|
|
Old: TableGrid_old,
|
|
New: TableGrid_new
|
|
});
|
|
}
|
|
},
|
|
Internal_Get_NextCell: function (Pos) {
|
|
var Cell_Index = Pos.Cell;
|
|
var Row_Index = Pos.Row;
|
|
if (Cell_Index < this.Content[Row_Index].Get_CellsCount() - 1) {
|
|
Pos.Cell = Cell_Index + 1;
|
|
return this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
} else {
|
|
if (Row_Index < this.Content.length - 1) {
|
|
Pos.Row = Row_Index + 1;
|
|
Pos.Cell = 0;
|
|
return this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
},
|
|
Internal_Get_PrevCell: function (Pos) {
|
|
var Cell_Index = Pos.Cell;
|
|
var Row_Index = Pos.Row;
|
|
if (Cell_Index > 0) {
|
|
Pos.Cell = Cell_Index - 1;
|
|
return this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
} else {
|
|
if (Row_Index > 0) {
|
|
Pos.Row = Row_Index - 1;
|
|
Pos.Cell = this.Content[Row_Index - 1].Get_CellsCount() - 1;
|
|
return this.Content[Pos.Row].Get_Cell(Pos.Cell);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
},
|
|
Internal_Copy_Grid: function (Grid) {
|
|
if (undefined !== Grid && null !== Grid) {
|
|
var Count = Grid.length;
|
|
var NewGrid = new Array(Count);
|
|
var Index = 0;
|
|
for (; Index < Count; Index++) {
|
|
NewGrid[Index] = Grid[Index];
|
|
}
|
|
return NewGrid;
|
|
}
|
|
return undefined;
|
|
}
|
|
};
|
|
function CTableRow(Table, Cols, TableGrid) {
|
|
this.Id = g_oIdCounter.Get_NewId();
|
|
this.Table = Table;
|
|
this.Next = null;
|
|
this.Prev = null;
|
|
this.Content = new Array();
|
|
for (var Index = 0; Index < Cols; Index++) {
|
|
var ColW = (undefined != TableGrid && undefined != TableGrid[Index] ? TableGrid[Index] : undefined);
|
|
this.Content[Index] = new CTableCell(this, ColW);
|
|
}
|
|
this.Internal_ReIndexing();
|
|
this.CellsInfo = new Array();
|
|
this.Metrics = {
|
|
X_min: 0,
|
|
X_max: 0
|
|
};
|
|
this.SpacingInfo = {
|
|
Top: false,
|
|
Bottom: false
|
|
};
|
|
this.CompiledPr = {
|
|
Pr: null,
|
|
NeedRecalc: true
|
|
};
|
|
this.Pr = new CTableRowPr();
|
|
this.Height = 0;
|
|
this.PagesCount = 1;
|
|
CollaborativeEditing.Add_NewDC(this);
|
|
this.m_oContentChanges = new CContentChanges();
|
|
g_oTableId.Add(this, this.Id);
|
|
}
|
|
CTableRow.prototype = {
|
|
Set_Id: function (newId) {
|
|
g_oTableId.Reset_Id(this, newId, this.Id);
|
|
this.Id = newId;
|
|
},
|
|
Get_Id: function () {
|
|
return this.Id;
|
|
},
|
|
Copy: function (Table) {
|
|
var Row = new CTableRow(Table, 0);
|
|
Row.Set_Pr(this.Pr.Copy());
|
|
var CellsCount = this.Content.length;
|
|
for (var Index = 0; Index < CellsCount; Index++) {
|
|
Row.Content[Index] = this.Content[Index].Copy(Row);
|
|
History.Add(Row, {
|
|
Type: historyitem_TableRow_AddCell,
|
|
Pos: Index,
|
|
Item: {
|
|
Cell: Row.Content[Index],
|
|
CellInfo: {}
|
|
}
|
|
});
|
|
}
|
|
Row.Internal_ReIndexing();
|
|
return Row;
|
|
},
|
|
Is_UseInDocument: function (Id) {
|
|
var bUse = false;
|
|
if (null != Id) {
|
|
var Count = this.Content.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
if (Id === this.Content[Index].Get_Id()) {
|
|
bUse = true;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
bUse = true;
|
|
}
|
|
if (true === bUse && null != this.Table) {
|
|
return this.Table.Is_UseInDocument(this.Get_Id());
|
|
}
|
|
return false;
|
|
},
|
|
Set_Index: function (Index) {
|
|
if (Index != this.Index) {
|
|
this.Index = Index;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
},
|
|
Set_Metrics_X: function (x_min, x_max) {
|
|
this.Metrics.X_min = x_min;
|
|
this.Metrics.X_max = x_max;
|
|
},
|
|
Recalc_CompiledPr: function () {
|
|
this.CompiledPr.NeedRecalc = true;
|
|
for (var i = 0; i < this.Content.length; ++i) {
|
|
this.Content[i].Recalc_CompiledPr();
|
|
}
|
|
},
|
|
Get_CompiledPr: function (bCopy) {
|
|
if (true === this.CompiledPr.NeedRecalc) {
|
|
this.CompiledPr.Pr = this.Internal_Compile_Pr();
|
|
this.CompiledPr.NeedRecalc = false;
|
|
}
|
|
if (false === bCopy) {
|
|
return this.CompiledPr.Pr;
|
|
} else {
|
|
return this.CompiledPr.Pr.Copy();
|
|
}
|
|
},
|
|
Internal_Compile_Pr: function () {
|
|
var TablePr = this.Table.Get_CompiledPr(false);
|
|
var TableLook = this.Table.Get_TableLook();
|
|
var CurIndex = this.Index;
|
|
var RowPr = TablePr.TableRowPr.Copy();
|
|
if (true === TableLook.Is_BandHor()) {
|
|
var RowBandSize = TablePr.TablePr.TableStyleRowBandSize;
|
|
var _CurIndex = (true != TableLook.Is_FirstRow() ? CurIndex : CurIndex - 1);
|
|
var GroupIndex = (1 != RowBandSize ? Math.floor(_CurIndex / RowBandSize) : _CurIndex);
|
|
if (0 === GroupIndex % 2) {
|
|
RowPr.Merge(TablePr.TableBand1Horz.TableRowPr);
|
|
} else {
|
|
RowPr.Merge(TablePr.TableBand2Horz.TableRowPr);
|
|
}
|
|
}
|
|
if (true === TableLook.Is_LastRow() && this.Table.Content.length - 1 === CurIndex) {
|
|
RowPr.Merge(TablePr.TableLastRow.TableRowPr);
|
|
}
|
|
if (true === TableLook.Is_FirstRow() && (0 === CurIndex || true === this.Pr.TableHeader)) {
|
|
RowPr.Merge(TablePr.TableFirstRow.TableRowPr);
|
|
}
|
|
RowPr.Merge(this.Pr);
|
|
return RowPr;
|
|
},
|
|
Clear_DirectFormatting: function (bClearMerge) {
|
|
if (true === bClearMerge) {
|
|
this.Set_After(undefined, undefined);
|
|
this.Set_Before(undefined, undefined);
|
|
}
|
|
this.Set_CellSpacing(undefined);
|
|
this.Set_Height(undefined, undefined);
|
|
var Count = this.Content.length;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
this.Content[Index].Clear_DirectFormatting(bClearMerge);
|
|
}
|
|
},
|
|
Set_Pr: function (RowPr) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_Pr,
|
|
Old: this.Pr,
|
|
New: RowPr
|
|
});
|
|
this.Pr = RowPr;
|
|
},
|
|
Get_Before: function () {
|
|
var RowPr = this.Get_CompiledPr(false);
|
|
var Before = {
|
|
WBefore: RowPr.WBefore.Copy(),
|
|
GridBefore: RowPr.GridBefore
|
|
};
|
|
return Before;
|
|
},
|
|
Set_Before: function (GridBefore, WBefore) {
|
|
if (this.Pr.GridBefore !== GridBefore || this.Pr.WBefore !== WBefore) {
|
|
var OldBefore = {
|
|
GridBefore: (undefined != this.Pr.GridBefore ? this.Pr.GridBefore : undefined),
|
|
WBefore: (undefined != this.Pr.WBefore ? this.Pr.WBefore : undefined)
|
|
};
|
|
var NewBefore = {
|
|
GridBefore: (undefined != GridBefore ? GridBefore : undefined),
|
|
WBefore: (undefined != WBefore ? WBefore : undefined)
|
|
};
|
|
if (false === WBefore) {
|
|
NewBefore.WBefore = OldBefore.WBefore;
|
|
} else {
|
|
if (undefined != WBefore) {
|
|
NewBefore.WBefore = new CTableMeasurement(tblwidth_Auto, 0);
|
|
NewBefore.WBefore.Set_FromObject(WBefore);
|
|
}
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_Before,
|
|
Old: OldBefore,
|
|
New: NewBefore
|
|
});
|
|
if (undefined != NewBefore.GridBefore) {
|
|
this.Pr.GridBefore = GridBefore;
|
|
} else {
|
|
this.Pr.GridBefore = undefined;
|
|
}
|
|
if (undefined != NewBefore.WBefore) {
|
|
this.Pr.WBefore = NewBefore.WBefore;
|
|
} else {
|
|
this.Pr.WBefore = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
},
|
|
Get_After: function () {
|
|
var RowPr = this.Get_CompiledPr(false);
|
|
var After = {
|
|
WAfter: RowPr.WAfter.Copy(),
|
|
GridAfter: RowPr.GridAfter
|
|
};
|
|
return After;
|
|
},
|
|
Set_After: function (GridAfter, WAfter) {
|
|
if (this.Pr.GridAfter !== GridAfter || this.Pr.WAfter !== WAfter) {
|
|
var OldAfter = {
|
|
GridAfter: (undefined != this.Pr.GridAfter ? this.Pr.GridAfter : undefined),
|
|
WAfter: (undefined != this.Pr.WAfter ? this.Pr.WAfter : undefined)
|
|
};
|
|
var NewAfter = {
|
|
GridAfter: (undefined != GridAfter ? GridAfter : undefined),
|
|
WAfter: (undefined != WAfter ? WAfter : undefined)
|
|
};
|
|
if (false === WAfter) {
|
|
NewAfter.WAfter = OldAfter.WAfter;
|
|
} else {
|
|
if (undefined != WAfter) {
|
|
NewAfter.WAfter = new CTableMeasurement(tblwidth_Auto, 0);
|
|
NewAfter.WAfter.Set_FromObject(WAfter);
|
|
}
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_After,
|
|
Old: OldAfter,
|
|
New: NewAfter
|
|
});
|
|
if (undefined != NewAfter.GridAfter) {
|
|
this.Pr.GridAfter = GridAfter;
|
|
} else {
|
|
this.Pr.GridAfter = undefined;
|
|
}
|
|
if (undefined != NewAfter.WAfter) {
|
|
this.Pr.WAfter = WAfter;
|
|
} else {
|
|
this.Pr.WAfter = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
},
|
|
Get_CellSpacing: function () {
|
|
var RowPr = this.Get_CompiledPr(false);
|
|
return RowPr.TableCellSpacing;
|
|
},
|
|
Set_CellSpacing: function (Value) {
|
|
if (undefined === Value) {
|
|
if (undefined === this.Pr.TableCellSpacing) {
|
|
return;
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_CellSpacing,
|
|
Old: this.Pr.TableCellSpacing,
|
|
New: undefined
|
|
});
|
|
this.Pr.TableCellSpacing = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (undefined === this.Pr.TableCellSpacing) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_CellSpacing,
|
|
Old: undefined,
|
|
New: Value
|
|
});
|
|
this.Pr.TableCellSpacing = Value;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (Value != this.Pr.TableCellSpacing) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_CellSpacing,
|
|
Old: this.Pr.TableCellSpacing,
|
|
New: Value
|
|
});
|
|
this.Pr.TableCellSpacing = Value;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Get_Height: function () {
|
|
var RowPr = this.Get_CompiledPr(false);
|
|
return RowPr.Height;
|
|
},
|
|
Set_Height: function (Value, HRule) {
|
|
if ((undefined === this.Pr.Height && undefined === Value) || (undefined != this.Pr.Height && HRule === this.Pr.Height.HRule && Math.abs(Value - this.Pr.Height.Value) < 0.001)) {
|
|
return;
|
|
}
|
|
var OldHeight = undefined != this.Pr.Height ? this.Pr.Height : undefined;
|
|
var NewHeight = undefined != Value ? new CTableRowHeight(Value, HRule) : undefined;
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_Height,
|
|
Old: OldHeight,
|
|
New: NewHeight
|
|
});
|
|
if (undefined === NewHeight) {
|
|
this.Pr.Height = undefined;
|
|
} else {
|
|
this.Pr.Height = NewHeight;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
},
|
|
Is_Header: function () {
|
|
var RowPr = this.Get_CompiledPr(false);
|
|
return RowPr.TableHeader;
|
|
},
|
|
Set_Header: function (Value) {
|
|
if ((undefined === this.Pr.TableHeader && undefined === Value) || (undefined != this.Pr.TableHeader && Value === this.Pr.TableHeader)) {
|
|
return;
|
|
}
|
|
var OldHeader = undefined != this.Pr.TableHeader ? this.Pr.TableHeader : undefined;
|
|
var NewHeader = undefined != Value ? Value : undefined;
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_TableHeader,
|
|
Old: OldHeader,
|
|
New: NewHeader
|
|
});
|
|
if (undefined === Value) {
|
|
this.Pr.TableHeader = undefined;
|
|
} else {
|
|
this.Pr.TableHeader = Value;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
},
|
|
Copy_Pr: function (OtherPr) {
|
|
if (undefined === OtherPr.WBefore) {
|
|
this.Set_Before(OtherPr.GridBefore, undefined);
|
|
} else {
|
|
this.Set_Before(OtherPr.GridBefore, {
|
|
W: OtherPr.WBefore.W,
|
|
Type: OtherPr.WBefore.Type
|
|
});
|
|
}
|
|
if (undefined === OtherPr.WAfter) {
|
|
this.Set_After(OtherPr.GridAfter, undefined);
|
|
} else {
|
|
this.Set_After(OtherPr.GridAfter, {
|
|
W: OtherPr.WAfter.W,
|
|
Type: OtherPr.WAfter.Type
|
|
});
|
|
}
|
|
if (undefined === OtherPr.Height) {
|
|
this.Set_Height(undefined, undefined);
|
|
} else {
|
|
this.Set_Height(OtherPr.Height.Value, OtherPr.Height.HRule);
|
|
}
|
|
if (undefined != OtherPr.TableCellSpacing) {
|
|
this.Set_CellSpacing(OtherPr.TableCellSpacing);
|
|
} else {
|
|
this.Set_CellSpacing(undefined);
|
|
}
|
|
if (undefined != OtherPr.TableHeader) {
|
|
this.Set_Header(OtherPr.TableHeader);
|
|
} else {
|
|
this.Set_Header(undefined);
|
|
}
|
|
},
|
|
Set_SpacingInfo: function (bSpacingTop, bSpacingBot) {
|
|
this.SpacingInfo = {
|
|
Top: bSpacingTop,
|
|
Bottom: bSpacingBot
|
|
};
|
|
},
|
|
Get_SpacingInfo: function () {
|
|
return this.SpacingInfo;
|
|
},
|
|
Get_Cell: function (Index) {
|
|
if (Index < 0 || Index >= this.Content.length) {
|
|
return null;
|
|
}
|
|
return this.Content[Index];
|
|
},
|
|
Get_CellsCount: function () {
|
|
return this.Content.length;
|
|
},
|
|
Set_CellInfo: function (Index, StartGridCol, X_grid_start, X_grid_end, X_cell_start, X_cell_end, X_content_start, X_content_end) {
|
|
this.CellsInfo[Index] = {
|
|
StartGridCol: StartGridCol,
|
|
X_grid_start: X_grid_start,
|
|
X_grid_end: X_grid_end,
|
|
X_cell_start: X_cell_start,
|
|
X_cell_end: X_cell_end,
|
|
X_content_start: X_content_start,
|
|
X_content_end: X_content_end
|
|
};
|
|
this.Content[Index].Content.Set_ClipInfo(X_cell_start, X_cell_end);
|
|
},
|
|
Update_CellInfo: function (Index, X_start) {
|
|
var Cell = this.Content[Index];
|
|
var StartGridCol = Cell.Metrics.StartGridCol;
|
|
var X_grid_start = X_start + Cell.Metrics.X_grid_start;
|
|
var X_grid_end = X_start + Cell.Metrics.X_grid_end;
|
|
var X_cell_start = X_start + Cell.Metrics.X_cell_start;
|
|
var X_cell_end = X_start + Cell.Metrics.X_cell_end;
|
|
var X_content_start = X_start + Cell.Metrics.X_content_start;
|
|
var X_content_end = X_start + Cell.Metrics.X_content_end;
|
|
this.Set_CellInfo(Index, StartGridCol, X_grid_start, X_grid_end, X_cell_start, X_cell_end, X_content_start, X_content_end);
|
|
},
|
|
Get_CellInfo: function (Index) {
|
|
return this.CellsInfo[Index];
|
|
},
|
|
Remove_Cell: function (Index) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_RemoveCell,
|
|
Pos: Index,
|
|
Item: {
|
|
Cell: this.Content[Index],
|
|
CellInfo: this.CellsInfo[Index]
|
|
}
|
|
});
|
|
this.Content.splice(Index, 1);
|
|
this.CellsInfo.splice(Index, 1);
|
|
this.Internal_ReIndexing(Index);
|
|
},
|
|
Add_Cell: function (Index, Row, Cell, bReIndexing) {
|
|
if ("undefined" === typeof(Cell) || null === Cell) {
|
|
Cell = new CTableCell(Row);
|
|
}
|
|
History.Add(this, {
|
|
Type: historyitem_TableRow_AddCell,
|
|
Pos: Index,
|
|
Item: {
|
|
Cell: Cell,
|
|
CellInfo: {}
|
|
}
|
|
});
|
|
this.Content.splice(Index, 0, Cell);
|
|
this.CellsInfo.splice(Index, 0, {});
|
|
if (true === bReIndexing) {
|
|
this.Internal_ReIndexing(Index);
|
|
} else {
|
|
if (Index > 0) {
|
|
this.Content[Index - 1].Next = Cell;
|
|
Cell.Prev = this.Content[Index - 1];
|
|
} else {
|
|
Cell.Prev = null;
|
|
}
|
|
if (Index < this.Content.length - 1) {
|
|
this.Content[Index + 1].Prev = Cell;
|
|
Cell.Next = this.Content[Index + 1];
|
|
} else {
|
|
Cell.Next = null;
|
|
}
|
|
}
|
|
return Cell;
|
|
},
|
|
Clear_ContentChanges: function () {
|
|
this.m_oContentChanges.Clear();
|
|
},
|
|
Add_ContentChanges: function (Changes) {
|
|
this.m_oContentChanges.Add(Changes);
|
|
},
|
|
Refresh_ContentChanges: function () {
|
|
this.m_oContentChanges.Refresh();
|
|
},
|
|
Internal_ReIndexing: function (StartIndex) {
|
|
if ("undefined" === typeof(StartIndex)) {
|
|
StartIndex = 0;
|
|
}
|
|
for (var Ind = StartIndex; Ind < this.Content.length; Ind++) {
|
|
this.Content[Ind].Set_Index(Ind);
|
|
this.Content[Ind].Prev = (Ind > 0 ? this.Content[Ind - 1] : null);
|
|
this.Content[Ind].Next = (Ind < this.Content.length - 1 ? this.Content[Ind + 1] : null);
|
|
}
|
|
},
|
|
Undo: function (Data) {
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_TableRow_Before:
|
|
if (undefined != Data.Old.GridBefore) {
|
|
this.Pr.GridBefore = Data.Old.GridBefore;
|
|
} else {
|
|
this.Pr.GridBefore = undefined;
|
|
}
|
|
if (undefined != Data.Old.WBefore) {
|
|
this.Pr.WBefore = Data.Old.WBefore;
|
|
} else {
|
|
this.Pr.WBefore = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_After:
|
|
if (undefined != Data.Old.GridAfter) {
|
|
this.Pr.GridAfter = Data.Old.GridAfter;
|
|
} else {
|
|
this.Pr.GridAfter = undefined;
|
|
}
|
|
if (undefined != Data.Old.WAfter) {
|
|
this.Pr.WAfter = Data.Old.WAfter;
|
|
} else {
|
|
this.Pr.WAfter = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_CellSpacing:
|
|
if (undefined != Data.Old) {
|
|
this.Pr.TableCellSpacing = Data.Old;
|
|
} else {
|
|
this.Pr.TableCellSpacing = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_Height:
|
|
if (undefined != Data.Old) {
|
|
this.Pr.Height = Data.Old;
|
|
} else {
|
|
this.Pr.Height = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_AddCell:
|
|
this.Content.splice(Data.Pos, 1);
|
|
this.CellsInfo.splice(Data.Pos, 1);
|
|
this.Internal_ReIndexing(Data.Pos);
|
|
break;
|
|
case historyitem_TableRow_RemoveCell:
|
|
this.Content.splice(Data.Pos, 0, Data.Item.Cell);
|
|
this.CellsInfo.splice(Data.Pos, 0, Data.Item.CellInfo);
|
|
this.Internal_ReIndexing(Data.Pos);
|
|
break;
|
|
case historyitem_TableRow_TableHeader:
|
|
if (undefined != Data.Old) {
|
|
this.Pr.TableHeader = Data.Old;
|
|
} else {
|
|
this.Pr.TableHeader = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_Pr:
|
|
this.Pr = Data.Old;
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
}
|
|
if (this.Table && this.Table.Parent) {
|
|
this.Table.Parent.onParagraphChanged();
|
|
}
|
|
},
|
|
Redo: function (Data) {
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_TableRow_Before:
|
|
if (undefined != Data.New.GridBefore) {
|
|
this.Pr.GridBefore = Data.New.GridBefore;
|
|
} else {
|
|
this.Pr.GridBefore = undefined;
|
|
}
|
|
if (undefined != Data.New.WBefore) {
|
|
this.Pr.WBefore = Data.New.WBefore;
|
|
} else {
|
|
this.Pr.WBefore = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_After:
|
|
if (undefined != Data.New.GridAfter) {
|
|
this.Pr.GridAfter = Data.New.GridAfter;
|
|
} else {
|
|
this.Pr.GridAfter = undefined;
|
|
}
|
|
if (undefined != Data.New.WAfter) {
|
|
this.Pr.WAfter = Data.New.WAfter;
|
|
} else {
|
|
this.Pr.WAfter = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_CellSpacing:
|
|
if (undefined != Data.New) {
|
|
this.Pr.TableCellSpacing = Data.New;
|
|
} else {
|
|
this.Pr.TableCellSpacing = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_Height:
|
|
if (undefined != Data.New) {
|
|
this.Pr.Height = Data.New;
|
|
} else {
|
|
this.Pr.Height = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_AddCell:
|
|
this.Content.splice(Data.Pos, 0, Data.Item.Cell);
|
|
this.CellsInfo.splice(Data.Pos, 0, Data.Item.CellInfo);
|
|
this.Internal_ReIndexing(Data.Pos);
|
|
break;
|
|
case historyitem_TableRow_RemoveCell:
|
|
this.Content.splice(Data.Pos, 1);
|
|
this.CellsInfo.splice(Data.Pos, 1);
|
|
this.Internal_ReIndexing(Data.Pos);
|
|
break;
|
|
case historyitem_TableRow_TableHeader:
|
|
if (undefined != Data.New) {
|
|
this.Pr.TableHeader = Data.New;
|
|
} else {
|
|
this.Pr.TableHeader = undefined;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_Pr:
|
|
this.Pr = Data.New;
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
}
|
|
if (this.Table && this.Table.Parent) {
|
|
this.Table.Parent.onParagraphChanged();
|
|
}
|
|
},
|
|
Get_ParentObject_or_DocumentPos: function () {
|
|
return this.Table.Get_ParentObject_or_DocumentPos(this.Table.Index);
|
|
},
|
|
Refresh_RecalcData: function (Data) {
|
|
var bNeedRecalc = false;
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_TableRow_Before:
|
|
case historyitem_TableRow_After:
|
|
case historyitem_TableRow_CellSpacing:
|
|
case historyitem_TableRow_Height:
|
|
case historyitem_TableRow_AddCell:
|
|
case historyitem_TableRow_RemoveCell:
|
|
case historyitem_TableRow_TableHeader:
|
|
case historyitem_TableRow_Pr:
|
|
bNeedRecalc = true;
|
|
break;
|
|
}
|
|
if (true === bNeedRecalc) {
|
|
this.Refresh_RecalcData2(0, 0);
|
|
}
|
|
},
|
|
Refresh_RecalcData2: function (CellIndex, Page_rel) {
|
|
this.Table.Refresh_RecalcData2(this.Index, Page_rel);
|
|
},
|
|
Save_Changes: function (Data, Writer) {
|
|
Writer.WriteLong(historyitem_type_TableRow);
|
|
var Type = Data.Type;
|
|
Writer.WriteLong(Type);
|
|
switch (Type) {
|
|
case historyitem_TableRow_Before:
|
|
if (undefined === Data.New.GridBefore) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteLong(Data.New.GridBefore);
|
|
}
|
|
if (undefined === Data.New.WBefore) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.WBefore.Write_ToBinary(Writer);
|
|
}
|
|
break;
|
|
case historyitem_TableRow_After:
|
|
if (undefined === Data.New.GridAfter) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteLong(Data.New.GridAfter);
|
|
}
|
|
if (undefined === Data.New.WAfter) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.WAfter.Write_ToBinary(Writer);
|
|
}
|
|
break;
|
|
case historyitem_TableRow_CellSpacing:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
if (null === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteDouble(Data.New);
|
|
}
|
|
}
|
|
break;
|
|
case historyitem_TableRow_Height:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Write_ToBinary(Writer);
|
|
}
|
|
break;
|
|
case historyitem_TableRow_AddCell:
|
|
var bArray = Data.UseArray;
|
|
var Count = 1;
|
|
Writer.WriteLong(Count);
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
if (true === bArray) {
|
|
Writer.WriteLong(Data.PosArray[Index]);
|
|
} else {
|
|
Writer.WriteLong(Data.Pos + Index);
|
|
}
|
|
Writer.WriteString2(Data.Item.Cell.Get_Id());
|
|
}
|
|
break;
|
|
case historyitem_TableRow_RemoveCell:
|
|
var bArray = Data.UseArray;
|
|
var Count = 1;
|
|
var StartPos = Writer.GetCurPosition();
|
|
Writer.Skip(4);
|
|
var RealCount = Count;
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
if (true === bArray) {
|
|
if (false === Data.PosArray[Index]) {
|
|
RealCount--;
|
|
} else {
|
|
Writer.WriteLong(Data.PosArray[Index]);
|
|
}
|
|
} else {
|
|
Writer.WriteLong(Data.Pos);
|
|
}
|
|
}
|
|
var EndPos = Writer.GetCurPosition();
|
|
Writer.Seek(StartPos);
|
|
Writer.WriteLong(RealCount);
|
|
Writer.Seek(EndPos);
|
|
break;
|
|
case historyitem_TableRow_TableHeader:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteBool(Data.New);
|
|
}
|
|
break;
|
|
case historyitem_TableRow_Pr:
|
|
Data.New.Write_ToBinary(Writer);
|
|
break;
|
|
}
|
|
return Writer;
|
|
},
|
|
Save_Changes2: function (Data, Writer) {
|
|
var bRetValue = false;
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_TableRow_Before:
|
|
case historyitem_TableRow_After:
|
|
case historyitem_TableRow_CellSpacing:
|
|
case historyitem_TableRow_Height:
|
|
break;
|
|
case historyitem_TableRow_AddCell:
|
|
break;
|
|
case historyitem_TableRow_RemoveCell:
|
|
break;
|
|
}
|
|
return bRetValue;
|
|
},
|
|
Load_Changes: function (Reader, Reader2) {
|
|
var ClassType = Reader.GetLong();
|
|
if (historyitem_type_TableRow != ClassType) {
|
|
return;
|
|
}
|
|
var Type = Reader.GetLong();
|
|
switch (Type) {
|
|
case historyitem_TableRow_Before:
|
|
var bUndefinedGB = Reader.GetBool();
|
|
if (true === bUndefinedGB) {
|
|
this.Pr.GridBefore = undefined;
|
|
} else {
|
|
this.Pr.GridBefore = Reader.GetLong();
|
|
}
|
|
var bUndefinedWB = Reader.GetBool();
|
|
if (true === bUndefinedWB) {
|
|
this.Pr.WBefore = undefined;
|
|
} else {
|
|
this.Pr.WBefore = new CTableMeasurement(tblwidth_Auto, 0);
|
|
this.Pr.WBefore.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_After:
|
|
var bUndefinedGA = Reader.GetBool();
|
|
if (true === bUndefinedGA) {
|
|
this.Pr.GridAfter = undefined;
|
|
} else {
|
|
this.Pr.GridAfter = Reader.GetLong();
|
|
}
|
|
var bUndefinedWA = Reader.GetBool();
|
|
if (true === bUndefinedWA) {
|
|
this.Pr.WAfter = undefined;
|
|
} else {
|
|
this.Pr.WAfter = new CTableMeasurement(tblwidth_Auto, 0);
|
|
this.Pr.WAfter.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_CellSpacing:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.TableCellSpacing = undefined;
|
|
} else {
|
|
var bNull = Reader.GetBool();
|
|
if (true === bNull) {
|
|
this.Pr.TableCellSpacing = null;
|
|
} else {
|
|
this.Pr.TableCellSpacing = Reader.GetDouble();
|
|
}
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_Height:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.Height = undefined;
|
|
} else {
|
|
this.Pr.Height = new CTableRowHeight(0, heightrule_Auto);
|
|
this.Pr.Height.Read_FromBinary(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_AddCell:
|
|
var Count = Reader.GetLong();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Pos = this.m_oContentChanges.Check(contentchanges_Add, Reader.GetLong());
|
|
var Element = g_oTableId.Get_ById(Reader.GetString2());
|
|
if (null != Element) {
|
|
this.Content.splice(Pos, 0, Element);
|
|
}
|
|
}
|
|
break;
|
|
case historyitem_TableRow_RemoveCell:
|
|
var Count = Reader.GetLong();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Pos = this.m_oContentChanges.Check(contentchanges_Remove, Reader.GetLong());
|
|
if (false === Pos) {
|
|
continue;
|
|
}
|
|
this.Content.splice(Pos, 1);
|
|
}
|
|
break;
|
|
case historyitem_TableRow_TableHeader:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.TableHeader = undefined;
|
|
} else {
|
|
this.Pr.TableHeader = Reader.GetBool();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableRow_Pr:
|
|
this.Pr = new CTableRowPr();
|
|
this.Pr.Read_FromBinary(Reader);
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
}
|
|
if (this.Table && this.Table.Parent) {
|
|
this.Table.Parent.onParagraphChanged();
|
|
}
|
|
return true;
|
|
},
|
|
Write_ToBinary2: function (Writer) {
|
|
Writer.WriteLong(historyitem_type_TableRow);
|
|
Writer.WriteString2(this.Id);
|
|
Writer.WriteString2(this.Table.Get_Id());
|
|
this.Pr.Write_ToBinary(Writer);
|
|
var Count = this.Content.length;
|
|
Writer.WriteLong(Count);
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
Writer.WriteString2(this.Content[Index].Get_Id());
|
|
}
|
|
},
|
|
Read_FromBinary2: function (Reader) {
|
|
this.Id = Reader.GetString2();
|
|
var LinkData = new Object();
|
|
LinkData.Table = Reader.GetString2();
|
|
CollaborativeEditing.Add_LinkData(this, LinkData);
|
|
this.Pr = new CTableRowPr();
|
|
this.Pr.Read_FromBinary(Reader);
|
|
this.Recalc_CompiledPr();
|
|
var Count = Reader.GetLong();
|
|
this.Content = new Array();
|
|
for (var Index = 0; Index < Count; Index++) {
|
|
var Cell = g_oTableId.Get_ById(Reader.GetString2());
|
|
this.Content.push(Cell);
|
|
}
|
|
this.Internal_ReIndexing();
|
|
CollaborativeEditing.Add_NewObject(this);
|
|
},
|
|
Load_LinkData: function (LinkData) {
|
|
if ("undefined" != typeof(LinkData.Table)) {
|
|
this.Table = g_oTableId.Get_ById(LinkData.Table);
|
|
}
|
|
}
|
|
};
|
|
function CTableCell(Row, ColW) {
|
|
this.Id = g_oIdCounter.Get_NewId();
|
|
this.Row = Row;
|
|
this.Prev = null;
|
|
this.Next = null;
|
|
this.Content = new CDocumentContent(this, editor.WordControl.m_oLogicDocument.DrawingDocument, 0, 0, 0, 20000, false, false);
|
|
this.Content.Set_StartPage((Row ? this.Row.Table.PageNum : 0));
|
|
this.CompiledPr = {
|
|
Pr: null,
|
|
TextPr: null,
|
|
ParaPr: null,
|
|
NeedRecalc: true
|
|
};
|
|
this.Pr = new CTableCellPr();
|
|
if (undefined != ColW) {
|
|
this.Pr.TableCellW = new CTableMeasurement(tblwidth_Mm, ColW);
|
|
}
|
|
this.BorderInfo = {
|
|
Top: null,
|
|
Left: null,
|
|
Right: null,
|
|
Bottom: null,
|
|
Bottom_BeforeCount: -1,
|
|
Bottom_AfterCount: -1,
|
|
MaxLeft: 0,
|
|
MaxRight: 0
|
|
};
|
|
this.Metrics = {
|
|
StartGridCol: 0,
|
|
X_grid_start: 0,
|
|
X_grid_end: 0,
|
|
X_cell_start: 0,
|
|
X_cell_end: 0,
|
|
X_content_start: 0,
|
|
X_content_end: 0
|
|
};
|
|
this.Temp = {
|
|
Y: 0,
|
|
CurPage: 0,
|
|
Y_VAlign_offset: new Array()
|
|
};
|
|
g_oTableId.Add(this, this.Id);
|
|
}
|
|
CTableCell.prototype = {
|
|
onParagraphChanged: function () {
|
|
this.Row.Table.Parent.onParagraphChanged();
|
|
},
|
|
getUnifill: function () {
|
|
return this.Get_CompiledPr(false).Shd.calculatedUnifill;
|
|
},
|
|
getStylesForParagraph: function () {
|
|
return this.Row.Table.getStylesForParagraph();
|
|
},
|
|
Set_Id: function (newId) {
|
|
g_oTableId.Reset_Id(this, newId, this.Id);
|
|
this.Id = newId;
|
|
},
|
|
Get_Id: function () {
|
|
return this.Id;
|
|
},
|
|
Copy: function (Row) {
|
|
var Cell = new CTableCell(Row);
|
|
Cell.Copy_Pr(this.Pr.Copy(), false);
|
|
Cell.Content.Copy2(this.Content);
|
|
Cell.BorderInfo.Top = this.BorderInfo.Top;
|
|
Cell.BorderInfo.Left = this.BorderInfo.Left;
|
|
Cell.BorderInfo.Right = this.BorderInfo.Right;
|
|
Cell.BorderInfo.Bottom = this.BorderInfo.Bottom;
|
|
Cell.BorderInfo.Bottom_BeforeCount = this.BorderInfo.Bottom_BeforeCount;
|
|
Cell.BorderInfo.Bottom_AfterCount = this.BorderInfo.Bottom_AfterCount;
|
|
Cell.BorderInfo.MaxLeft = this.BorderInfo.MaxLeft;
|
|
Cell.BorderInfo.MaxRight = this.BorderInfo.MaxRight;
|
|
Cell.Metrics.StartGridCol = this.Metrics.StartGridCol;
|
|
Cell.Metrics.X_grid_start = this.Metrics.X_grid_start;
|
|
Cell.Metrics.X_grid_end = this.Metrics.X_grid_end;
|
|
Cell.Metrics.X_cell_start = this.Metrics.X_cell_start;
|
|
Cell.Metrics.X_cell_end = this.Metrics.X_cell_end;
|
|
Cell.Metrics.X_content_start = this.Metrics.X_content_start;
|
|
Cell.Metrics.X_content_end = this.Metrics.X_content_end;
|
|
return Cell;
|
|
},
|
|
Set_Index: function (Index) {
|
|
if (Index != this.Index) {
|
|
this.Index = Index;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
},
|
|
Set_Metrics: function (StartGridCol, X_grid_start, X_grid_end, X_cell_start, X_cell_end, X_content_start, X_content_end) {
|
|
this.Metrics.StartGridCol = StartGridCol;
|
|
this.Metrics.X_grid_start = X_grid_start;
|
|
this.Metrics.X_grid_end = X_grid_end;
|
|
this.Metrics.X_cell_start = X_cell_start;
|
|
this.Metrics.X_cell_end = X_cell_end;
|
|
this.Metrics.X_content_start = X_content_start;
|
|
this.Metrics.X_content_end = X_content_end;
|
|
},
|
|
Recalc_CompiledPr: function () {
|
|
this.CompiledPr.NeedRecalc = true;
|
|
this.Content.Recalc_AllParagraphs_CompiledPr();
|
|
},
|
|
Get_CompiledPr: function (bCopy) {
|
|
if (true === this.CompiledPr.NeedRecalc) {
|
|
var FullPr = this.Internal_Compile_Pr();
|
|
this.CompiledPr.Pr = FullPr.CellPr;
|
|
this.CompiledPr.ParaPr = FullPr.ParaPr;
|
|
this.CompiledPr.TextPr = FullPr.TextPr;
|
|
this.CompiledPr.NeedRecalc = false;
|
|
}
|
|
if (false === bCopy) {
|
|
return this.CompiledPr.Pr;
|
|
} else {
|
|
return this.CompiledPr.Pr.Copy();
|
|
}
|
|
},
|
|
Internal_Compile_Pr: function () {
|
|
var Table = this.Row.Table;
|
|
var TablePr = Table.Get_CompiledPr(false);
|
|
var TableLook = Table.Get_TableLook();
|
|
var CellIndex = this.Index;
|
|
var RowIndex = this.Row.Index;
|
|
var CellPr = TablePr.TableCellPr.Copy();
|
|
var TextPr = TablePr.TextPr.Copy();
|
|
var ParaPr = TablePr.ParaPr.Copy();
|
|
if (true === TableLook.Is_BandVer() && !((true === TableLook.Is_LastCol() && this.Row.Get_CellsCount() - 1 === CellIndex) || (true === TableLook.Is_FirstCol() && 0 === CellIndex))) {
|
|
var ColBandSize = TablePr.TablePr.TableStyleColBandSize;
|
|
var _ColIndex = (true != TableLook.Is_FirstCol() ? CellIndex : CellIndex - 1);
|
|
var ColIndex = (1 != ColBandSize ? Math.floor(_ColIndex / ColBandSize) : _ColIndex);
|
|
var TableBandStyle = null;
|
|
if (0 === ColIndex % 2) {
|
|
TableBandStyle = TablePr.TableBand1Vert;
|
|
} else {
|
|
TableBandStyle = TablePr.TableBand2Vert;
|
|
}
|
|
CellPr.Merge(TableBandStyle.TableCellPr);
|
|
TextPr.Merge(TableBandStyle.TextPr);
|
|
ParaPr.Merge(TableBandStyle.ParaPr);
|
|
}
|
|
if (true === TableLook.Is_BandHor()) {
|
|
var RowBandSize = TablePr.TablePr.TableStyleRowBandSize;
|
|
var __RowIndex = (true != TableLook.Is_FirstRow() ? RowIndex : RowIndex - 1);
|
|
var _RowIndex = (1 != RowBandSize ? Math.floor(__RowIndex / RowBandSize) : __RowIndex);
|
|
var TableBandStyle = null;
|
|
if (0 === _RowIndex % 2) {
|
|
TableBandStyle = TablePr.TableBand1Horz;
|
|
} else {
|
|
TableBandStyle = TablePr.TableBand2Horz;
|
|
}
|
|
CellPr.Merge(TableBandStyle.TableCellPr);
|
|
TextPr.Merge(TableBandStyle.TextPr);
|
|
ParaPr.Merge(TableBandStyle.ParaPr);
|
|
}
|
|
if (true === TableLook.Is_LastCol() && this.Row.Get_CellsCount() - 1 === CellIndex) {
|
|
CellPr.Merge(TablePr.TableLastCol.TableCellPr);
|
|
TextPr.Merge(TablePr.TableLastCol.TextPr);
|
|
ParaPr.Merge(TablePr.TableLastCol.ParaPr);
|
|
}
|
|
if (true === TableLook.Is_FirstCol() && 0 === CellIndex) {
|
|
CellPr.Merge(TablePr.TableFirstCol.TableCellPr);
|
|
TextPr.Merge(TablePr.TableFirstCol.TextPr);
|
|
ParaPr.Merge(TablePr.TableFirstCol.ParaPr);
|
|
}
|
|
if (true === TableLook.Is_LastRow() && Table.Content.length - 1 === RowIndex) {
|
|
CellPr.Merge(TablePr.TableLastRow.TableCellPr);
|
|
TextPr.Merge(TablePr.TableLastRow.TextPr);
|
|
ParaPr.Merge(TablePr.TableLastRow.ParaPr);
|
|
}
|
|
if (true === TableLook.Is_FirstRow() && 0 === RowIndex) {
|
|
CellPr.Merge(TablePr.TableFirstRow.TableCellPr);
|
|
TextPr.Merge(TablePr.TableFirstRow.TextPr);
|
|
ParaPr.Merge(TablePr.TableFirstRow.ParaPr);
|
|
}
|
|
if (this.Row.Get_CellsCount() - 1 === CellIndex && Table.Content.length - 1 === RowIndex) {
|
|
CellPr.Merge(TablePr.TableBRCell.TableCellPr);
|
|
TextPr.Merge(TablePr.TableBRCell.TextPr);
|
|
ParaPr.Merge(TablePr.TableBRCell.ParaPr);
|
|
}
|
|
if (0 === CellIndex && Table.Content.length - 1 === RowIndex) {
|
|
CellPr.Merge(TablePr.TableBLCell.TableCellPr);
|
|
TextPr.Merge(TablePr.TableBLCell.TextPr);
|
|
ParaPr.Merge(TablePr.TableBLCell.ParaPr);
|
|
}
|
|
if (this.Row.Get_CellsCount() - 1 === CellIndex && 0 === RowIndex) {
|
|
CellPr.Merge(TablePr.TableTRCell.TableCellPr);
|
|
TextPr.Merge(TablePr.TableTRCell.TextPr);
|
|
ParaPr.Merge(TablePr.TableTRCell.ParaPr);
|
|
}
|
|
if (0 === CellIndex && 0 === RowIndex) {
|
|
CellPr.Merge(TablePr.TableTLCell.TableCellPr);
|
|
TextPr.Merge(TablePr.TableTLCell.TextPr);
|
|
ParaPr.Merge(TablePr.TableTLCell.ParaPr);
|
|
}
|
|
if (null === CellPr.TableCellMar && undefined != this.Pr.TableCellMar && null != this.Pr.TableCellMar) {
|
|
CellPr.TableCellMar = {};
|
|
}
|
|
CellPr.Merge(this.Pr);
|
|
if (CellPr.TableCellMar == null) {
|
|
CellPr.TableCellMar = {};
|
|
}
|
|
if (!CellPr.TableCellMar.Top || !(!isNaN(CellPr.TableCellMar.Top.W) && typeof CellPr.TableCellMar.Top.W === "number")) {
|
|
CellPr.TableCellMar.Top = new CTableMeasurement(tblwidth_Mm, 1.27);
|
|
}
|
|
if (!CellPr.TableCellMar.Left || !(!isNaN(CellPr.TableCellMar.Left.W) && typeof CellPr.TableCellMar.Left.W === "number")) {
|
|
CellPr.TableCellMar.Left = new CTableMeasurement(tblwidth_Mm, 2.54);
|
|
}
|
|
if (!CellPr.TableCellMar.Bottom || !(!isNaN(CellPr.TableCellMar.Bottom.W) && typeof CellPr.TableCellMar.Bottom.W === "number")) {
|
|
CellPr.TableCellMar.Bottom = new CTableMeasurement(tblwidth_Mm, 1.27);
|
|
}
|
|
if (!CellPr.TableCellMar.Right || !(!isNaN(CellPr.TableCellMar.Right.W) && typeof CellPr.TableCellMar.Right.W === "number")) {
|
|
CellPr.TableCellMar.Right = new CTableMeasurement(tblwidth_Mm, 2.54);
|
|
}
|
|
var _theme = null,
|
|
_master = null,
|
|
_layout = null,
|
|
_slide = null;
|
|
switch (this.Row.Table.Parent.parent.kind) {
|
|
case SLIDE_KIND:
|
|
_slide = this.Row.Table.Parent.parent;
|
|
if (_slide !== null && typeof _slide === "object") {
|
|
_layout = _slide.Layout;
|
|
if (_layout !== null && typeof _layout === "object") {
|
|
_master = _layout.Master;
|
|
if (_master !== null && typeof _master === "object") {
|
|
_theme = _master.Theme;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case LAYOUT_KIND:
|
|
_layout = this.Row.Table.Parent.parent;
|
|
if (_layout !== null && typeof _layout === "object") {
|
|
_master = _layout.Master;
|
|
if (_master !== null && typeof _master === "object") {
|
|
_theme = _master.Theme;
|
|
}
|
|
}
|
|
break;
|
|
case MASTER_KIND:
|
|
_master = this.Row.Table.Parent.parent;
|
|
if (_master !== null && typeof _master === "object") {
|
|
_theme = _master.Theme;
|
|
}
|
|
break;
|
|
}
|
|
var RGBA, _calculated_unifill;
|
|
if (CellPr !== null && typeof CellPr === "object") {
|
|
if (CellPr.Shd !== null && typeof CellPr.Shd === "object") {
|
|
if (_theme !== null && typeof _theme === "object" && CellPr.Shd.fillRef !== null && typeof CellPr.Shd.fillRef === "object") {
|
|
_calculated_unifill = _theme.getFillStyle(CellPr.Shd.fillRef.idx);
|
|
CellPr.Shd.fillRef.Color.Calculate(_theme, _slide, _layout, _master);
|
|
RGBA = CellPr.Shd.fillRef.Color.RGBA;
|
|
if (CellPr.Shd.fillRef.Color.color != null) {
|
|
if (_calculated_unifill.fill != null && (_calculated_unifill.fill.type == FILL_TYPE_SOLID)) {
|
|
_calculated_unifill.fill.color = CellPr.Shd.fillRef.Color.createDuplicate();
|
|
}
|
|
}
|
|
} else {
|
|
_calculated_unifill = new CUniFill();
|
|
}
|
|
if (CellPr.Shd.unifill !== null && typeof CellPr.Shd.unifill === "object" && CellPr.Shd.unifill.fill !== null && typeof CellPr.Shd.unifill.fill === "object") {
|
|
_calculated_unifill.merge(CellPr.Shd.unifill);
|
|
_calculated_unifill.calculate(_theme, _slide, _layout, _master, {
|
|
R: 0,
|
|
G: 0,
|
|
B: 0,
|
|
A: 255
|
|
});
|
|
}
|
|
CellPr.Shd.calculatedUnifill = _calculated_unifill;
|
|
if (_calculated_unifill.fill !== null && typeof _calculated_unifill.fill === "object") {
|
|
switch (_calculated_unifill.fill.type) {
|
|
case FILL_TYPE_GRAD:
|
|
if (_calculated_unifill.fill.colors && _calculated_unifill.fill.colors[0] && _calculated_unifill.fill.colors[0].color && _calculated_unifill.fill.colors[0].color.RGBA !== null && typeof _calculated_unifill.fill.colors[0].color.RGBA === "object") {
|
|
RGBA = _calculated_unifill.fill.colors[0].color.RGBA;
|
|
CellPr.Shd.Color = new CDocumentColor(RGBA.R, RGBA.G, RGBA.B);
|
|
}
|
|
break;
|
|
case FILL_TYPE_SOLID:
|
|
if (_calculated_unifill.fill.color && _calculated_unifill.fill.color.RGBA !== null && typeof _calculated_unifill.fill.color.RGBA === "object") {
|
|
RGBA = _calculated_unifill.fill.color.RGBA;
|
|
CellPr.Shd.Color = new CDocumentColor(RGBA.R, RGBA.G, RGBA.B);
|
|
}
|
|
break;
|
|
default:
|
|
CellPr.Shd.Value = shd_Nil;
|
|
}
|
|
}
|
|
}
|
|
if (CellPr.TableCellBorders !== null && typeof CellPr.TableCellBorders === "object") {
|
|
var _borders = CellPr.TableCellBorders;
|
|
var _border;
|
|
for (var key in _borders) {
|
|
if (_borders[key] instanceof CDocumentBorder) {
|
|
_border = _borders[key];
|
|
var _calculated_line;
|
|
if (_border.lnRef != null) {
|
|
_calculated_line = _theme.getLnStyle(_border.lnRef.idx);
|
|
_border.lnRef.Color.Calculate(_theme, _slide, _layout, _master);
|
|
RGBA = _border.lnRef.Color.RGBA;
|
|
} else {
|
|
_calculated_line = new CLn();
|
|
}
|
|
var _tmp_pen = new CLn();
|
|
_tmp_pen.Fill = _border.unifill;
|
|
_calculated_line.merge(_tmp_pen);
|
|
if (_calculated_line.Fill != null) {
|
|
_calculated_line.Fill.calculate(_theme, _slide, _layout, _master, RGBA);
|
|
}
|
|
if ((_calculated_line.Fill !== null && typeof _calculated_line.Fill === "object" && _calculated_line.Fill.fill !== null && typeof _calculated_line.Fill.fill === "object")) {
|
|
if (_calculated_line.Fill.fill.color && _calculated_line.Fill.fill.color.RGBA !== null && typeof _calculated_line.Fill.fill.color.RGBA === "object") {
|
|
RGBA = _calculated_line.Fill.fill.color.RGBA;
|
|
_border.Color = new CDocumentColor(RGBA.R, RGBA.G, RGBA.B);
|
|
}
|
|
if (_calculated_line.Fill.fill.type === FILL_TYPE_NONE || _calculated_line.Fill.fill.type === FILL_TYPE_NOFILL) {
|
|
_border.Value = border_None;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
CellPr: CellPr,
|
|
ParaPr: ParaPr,
|
|
TextPr: TextPr
|
|
};
|
|
},
|
|
OnContentRecalculate: function (bChange, bForceRecalc) {
|
|
this.Row.Table.Internal_RecalculateFrom(this.Row.Index, this.Index, bChange, false);
|
|
},
|
|
OnContentReDraw: function (StartPage, EndPage) {
|
|
this.Row.Table.Parent.OnContentReDraw(StartPage, EndPage);
|
|
},
|
|
Get_Styles: function (level, bParagraphStyles) {
|
|
return this.Row.Table.Get_Styles(level, bParagraphStyles);
|
|
},
|
|
Get_TableStyleForPara: function () {
|
|
this.Get_CompiledPr(false);
|
|
var TextPr = this.CompiledPr.TextPr.Copy();
|
|
var ParaPr = this.CompiledPr.ParaPr.Copy();
|
|
return {
|
|
TextPr: TextPr,
|
|
ParaPr: ParaPr
|
|
};
|
|
},
|
|
Get_Numbering: function () {
|
|
return this.Row.Table.Get_Numbering();
|
|
},
|
|
Is_Cell: function () {
|
|
return true;
|
|
},
|
|
Is_DrawingShape: function () {
|
|
return this.Row.Table.Parent.Is_DrawingShape();
|
|
},
|
|
Is_HdrFtr: function (bReturnHdrFtr) {
|
|
return this.Row.Table.Parent.Is_HdrFtr(bReturnHdrFtr);
|
|
},
|
|
Is_TopDocument: function (bReturnTopDocument) {
|
|
if (true === bReturnTopDocument) {
|
|
return this.Row.Table.Parent.Is_TopDocument(bReturnTopDocument);
|
|
}
|
|
return false;
|
|
},
|
|
Is_InTable: function (bReturnTopTable) {
|
|
if (true === bReturnTopTable) {
|
|
var CurTable = this.Row.Table;
|
|
var TopTable = CurTable.Parent.Is_InTable(true);
|
|
if (null === TopTable) {
|
|
return CurTable;
|
|
} else {
|
|
return TopTable;
|
|
}
|
|
}
|
|
return true;
|
|
},
|
|
Is_UseInDocument: function (Id) {
|
|
if (null != this.Row) {
|
|
return this.Row.Is_UseInDocument(this.Get_Id());
|
|
}
|
|
return false;
|
|
},
|
|
Get_PageContentStartPos: function (PageNum) {
|
|
return this.Row.Table.Get_PageContentStartPos(PageNum + this.Content.StartPage, this.Row.Index, this.Index, true);
|
|
},
|
|
Set_CurrentElement: function () {
|
|
var Table = this.Row.Table;
|
|
Table.Selection.Start = false;
|
|
Table.Selection.Type = table_Selection_Text;
|
|
Table.Selection.Use = this.Content.Is_SelectionUse();
|
|
Table.Selection.StartPos.Pos = {
|
|
Row: this.Row.Index,
|
|
Cell: this.Index
|
|
};
|
|
Table.Selection.EndPos.Pos = {
|
|
Row: this.Row.Index,
|
|
Cell: this.Index
|
|
};
|
|
Table.Markup.Internal.RowIndex = 0;
|
|
Table.Markup.Internal.CellIndex = 0;
|
|
Table.Markup.Internal.PageNum = 0;
|
|
Table.CurCell = this;
|
|
Table.Document_SetThisElementCurrent();
|
|
},
|
|
Is_ThisElementCurrent: function () {
|
|
var Table = this.Row.Table;
|
|
if (false === Table.Selection.Use && this === Table.CurCell) {
|
|
var Parent = Table.Parent;
|
|
if (docpostype_Content === Parent.CurPos.Type && false === Parent.Selection.Use && this.Index === Parent.CurPos.ContentPos) {
|
|
return Table.Parent.Is_ThisElementCurrent();
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
Check_TableCoincidence: function (Table) {
|
|
var CurTable = this.Row.Table;
|
|
if (Table === CurTable) {
|
|
return true;
|
|
} else {
|
|
return CurTable.Parent.Check_TableCoincidence(Table);
|
|
}
|
|
},
|
|
Get_StartPage_Absolute: function () {
|
|
return this.Row.Table.Get_StartPage_Absolute();
|
|
},
|
|
Get_StartPage_Relative: function () {
|
|
return this.Row.Table.Get_StartPage_Relative();
|
|
},
|
|
Content_Reset: function (X, Y, XLimit, YLimit) {
|
|
this.Content.Reset(X, Y, XLimit, YLimit);
|
|
this.Content.Set_CurPosXY(X, Y);
|
|
},
|
|
Content_Get_PageBounds: function (PageIndex) {
|
|
return this.Content.Get_PageBounds(PageIndex);
|
|
},
|
|
Content_Get_PagesCount: function () {
|
|
return this.Content.Get_PagesCount();
|
|
},
|
|
Content_Draw: function (PageIndex, pGraphics) {
|
|
this.Content.Draw(PageIndex, pGraphics);
|
|
},
|
|
Recalculate: function () {
|
|
this.Content.Recalculate(false);
|
|
},
|
|
Content_Merge: function (OtherContent) {
|
|
this.Content.Add_Content(OtherContent);
|
|
},
|
|
Content_Is_ContentOnFirstPage: function () {
|
|
return this.Content.Is_ContentOnFirstPage();
|
|
},
|
|
Content_Set_StartPage: function (PageNum) {
|
|
this.Content.Set_StartPage(PageNum);
|
|
},
|
|
Content_DocumentSearch: function (Str, Type) {
|
|
this.Content.DocumentSearch(Str, Type);
|
|
},
|
|
Content_Document_CreateFontMap: function (FontMap) {
|
|
this.Content.Document_CreateFontMap(FontMap);
|
|
},
|
|
Content_Cursor_MoveToStartPos: function () {
|
|
this.Content.Cursor_MoveToStartPos();
|
|
},
|
|
Content_Cursor_MoveToEndPos: function () {
|
|
this.Content.Cursor_MoveToEndPos();
|
|
},
|
|
Clear_DirectFormatting: function (bClearMerge) {
|
|
this.Set_Shd(undefined);
|
|
this.Set_Margins(undefined);
|
|
this.Set_Border(undefined, 0);
|
|
this.Set_Border(undefined, 1);
|
|
this.Set_Border(undefined, 2);
|
|
this.Set_Border(undefined, 3);
|
|
if (true === bClearMerge) {
|
|
this.Set_GridSpan(undefined);
|
|
this.Set_VMerge(undefined);
|
|
}
|
|
},
|
|
Copy_Pr: function (OtherPr, bCopyOnlyVisualProps) {
|
|
if (true != bCopyOnlyVisualProps) {
|
|
if (undefined === OtherPr.GridSpan) {
|
|
this.Set_GridSpan(undefined);
|
|
} else {
|
|
this.Set_GridSpan(OtherPr.GridSpan);
|
|
}
|
|
}
|
|
if (undefined === OtherPr.Shd) {
|
|
this.Set_Shd(undefined);
|
|
} else {
|
|
var Shd_new = {
|
|
Value: OtherPr.Shd.Value,
|
|
Color: {
|
|
r: OtherPr.Shd.Color.r,
|
|
g: OtherPr.Shd.Color.g,
|
|
b: OtherPr.Shd.Color.b
|
|
},
|
|
unifill: OtherPr.Shd.unifill ? OtherPr.Shd.unifill.createDuplicate() : null,
|
|
fillRef: OtherPr.Shd.fillRef ? OtherPr.Shd.fillRef.createDuplicate() : null
|
|
};
|
|
this.Set_Shd(Shd_new);
|
|
}
|
|
if (true != bCopyOnlyVisualProps) {
|
|
if (undefined === OtherPr.VMerge) {
|
|
this.Set_VMerge(OtherPr.VMerge);
|
|
} else {
|
|
this.Set_VMerge(OtherPr.VMerge);
|
|
}
|
|
}
|
|
if (undefined === OtherPr.TableCellBorders.Top) {
|
|
this.Set_Border(undefined, 0);
|
|
} else {
|
|
var Border_top_new = (null === OtherPr.TableCellBorders.Top ? null : {
|
|
Value: OtherPr.TableCellBorders.Top.Value,
|
|
Size: OtherPr.TableCellBorders.Top.Size,
|
|
Color: {
|
|
r: OtherPr.TableCellBorders.Top.Color.r,
|
|
g: OtherPr.TableCellBorders.Top.Color.g,
|
|
b: OtherPr.TableCellBorders.Top.Color.b
|
|
},
|
|
Space: OtherPr.TableCellBorders.Top.Space,
|
|
unifill: OtherPr.TableCellBorders.Top.unifill ? OtherPr.TableCellBorders.Top.unifill.createDuplicate() : null
|
|
});
|
|
this.Set_Border(Border_top_new, 0);
|
|
}
|
|
if (undefined === OtherPr.TableCellBorders.Bottom) {
|
|
this.Set_Border(undefined, 2);
|
|
} else {
|
|
var Border_bottom_new = (null === OtherPr.TableCellBorders.Bottom ? null : {
|
|
Value: OtherPr.TableCellBorders.Bottom.Value,
|
|
Size: OtherPr.TableCellBorders.Bottom.Size,
|
|
Color: {
|
|
r: OtherPr.TableCellBorders.Bottom.Color.r,
|
|
g: OtherPr.TableCellBorders.Bottom.Color.g,
|
|
b: OtherPr.TableCellBorders.Bottom.Color.b
|
|
},
|
|
Space: OtherPr.TableCellBorders.Bottom.Space,
|
|
unifill: OtherPr.TableCellBorders.Bottom.unifill ? OtherPr.TableCellBorders.Bottom.unifill.createDuplicate() : null
|
|
});
|
|
this.Set_Border(Border_bottom_new, 2);
|
|
}
|
|
if (undefined === OtherPr.TableCellBorders.Left) {
|
|
this.Set_Border(undefined, 3);
|
|
} else {
|
|
var Border_left_new = (null === OtherPr.TableCellBorders.Left ? null : {
|
|
Value: OtherPr.TableCellBorders.Left.Value,
|
|
Size: OtherPr.TableCellBorders.Left.Size,
|
|
Color: {
|
|
r: OtherPr.TableCellBorders.Left.Color.r,
|
|
g: OtherPr.TableCellBorders.Left.Color.g,
|
|
b: OtherPr.TableCellBorders.Left.Color.b
|
|
},
|
|
Space: OtherPr.TableCellBorders.Left.Space,
|
|
unifill: OtherPr.TableCellBorders.Left.unifill ? OtherPr.TableCellBorders.Left.unifill.createDuplicate() : null
|
|
});
|
|
this.Set_Border(Border_left_new, 3);
|
|
}
|
|
if (undefined === OtherPr.TableCellBorders.Right) {
|
|
this.Set_Border(undefined, 1);
|
|
} else {
|
|
var Border_right_new = (null === OtherPr.TableCellBorders.Right ? null : {
|
|
Value: OtherPr.TableCellBorders.Right.Value,
|
|
Size: OtherPr.TableCellBorders.Right.Size,
|
|
Color: {
|
|
r: OtherPr.TableCellBorders.Right.Color.r,
|
|
g: OtherPr.TableCellBorders.Right.Color.g,
|
|
b: OtherPr.TableCellBorders.Right.Color.b
|
|
},
|
|
Space: OtherPr.TableCellBorders.Right.Space,
|
|
unifill: OtherPr.TableCellBorders.Right.unifill ? OtherPr.TableCellBorders.Right.unifill.createDuplicate() : null
|
|
});
|
|
this.Set_Border(Border_right_new, 1);
|
|
}
|
|
if (undefined === OtherPr.TableCellMar) {
|
|
this.Set_Margins(undefined);
|
|
} else {
|
|
var Margins_new = ((null === OtherPr.TableCellMar || (!OtherPr.TableCellMar.Top || !OtherPr.TableCellMar.Left || !OtherPr.TableCellMar.Bottom || !OtherPr.TableCellMar.Right)) ? null : {
|
|
Top: {
|
|
W: OtherPr.TableCellMar.Top.W,
|
|
Type: OtherPr.TableCellMar.Top.Type
|
|
},
|
|
Left: {
|
|
W: OtherPr.TableCellMar.Left.W,
|
|
Type: OtherPr.TableCellMar.Left.Type
|
|
},
|
|
Bottom: {
|
|
W: OtherPr.TableCellMar.Bottom.W,
|
|
Type: OtherPr.TableCellMar.Bottom.Type
|
|
},
|
|
Right: {
|
|
W: OtherPr.TableCellMar.Right.W,
|
|
Type: OtherPr.TableCellMar.Right.Type
|
|
}
|
|
});
|
|
this.Set_Margins(Margins_new, -1);
|
|
}
|
|
},
|
|
Get_W: function () {
|
|
var W = this.Get_CompiledPr(false).TableCellW;
|
|
return W.Copy();
|
|
},
|
|
Set_W: function (CellW) {
|
|
if (undefined === CellW) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_W,
|
|
Old: this.Pr.TableCellW,
|
|
New: undefined
|
|
});
|
|
this.Pr.TableCellW = undefined;
|
|
} else {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_W,
|
|
Old: this.Pr.TableCellW,
|
|
New: CellW
|
|
});
|
|
this.Pr.TableCellW = CellW;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
},
|
|
Get_GridSpan: function () {
|
|
var GridSpan = this.Get_CompiledPr(false).GridSpan;
|
|
return GridSpan;
|
|
},
|
|
Set_GridSpan: function (Value) {
|
|
if (undefined === Value && undefined === this.Pr.GridSpan) {
|
|
return;
|
|
}
|
|
if (undefined === Value && undefined != this.Pr.GridSpan) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_GridSpan,
|
|
Old: this.Pr.GridSpan,
|
|
New: undefined
|
|
});
|
|
this.Pr.GridSpan = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (Value != this.Pr.GridSpan) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_GridSpan,
|
|
Old: (undefined === this.Pr.GridSpan ? undefined : this.Pr.GridSpan),
|
|
New: Value
|
|
});
|
|
this.Pr.GridSpan = Value;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
},
|
|
Get_Margins: function () {
|
|
var TableCellMar = this.Get_CompiledPr(false).TableCellMar;
|
|
if (null === TableCellMar) {
|
|
return this.Row.Table.Get_TableCellMar();
|
|
} else {
|
|
var TableCellDefMargins = this.Row.Table.Get_TableCellMar();
|
|
var Margins = {
|
|
Top: undefined != TableCellMar.Top ? TableCellMar.Top : TableCellDefMargins.Top,
|
|
Bottom: undefined != TableCellMar.Bottom ? TableCellMar.Bottom : TableCellDefMargins.Bottom,
|
|
Left: undefined != TableCellMar.Left ? TableCellMar.Left : TableCellDefMargins.Left,
|
|
Right: undefined != TableCellMar.Right ? TableCellMar.Right : TableCellDefMargins.Right
|
|
};
|
|
return Margins;
|
|
}
|
|
},
|
|
Is_TableMargins: function () {
|
|
var TableCellMar = this.Get_CompiledPr(false).TableCellMar;
|
|
if (null === TableCellMar) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
Set_Margins: function (Margin, Type) {
|
|
var OldValue = (undefined === this.Pr.TableCellMar ? undefined : this.Pr.TableCellMar);
|
|
if (undefined === Margin) {
|
|
if (undefined != this.Pr.TableCellMar) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_Margins,
|
|
Old: OldValue,
|
|
New: undefined
|
|
});
|
|
this.Pr.TableCellMar = undefined;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
return;
|
|
}
|
|
if (null === Margin) {
|
|
if (null != this.Pr.TableCellMar) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_Margins,
|
|
Old: OldValue,
|
|
New: null
|
|
});
|
|
this.Pr.TableCellMar = null;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
return;
|
|
}
|
|
var Margins_new = this.Pr.TableCellMar;
|
|
var bNeedChange = false;
|
|
var TableMargins = this.Row.Table.Get_TableCellMar();
|
|
if (null === Margins_new || undefined === Margins_new) {
|
|
Margins_new = {
|
|
Left: TableMargins.Left.Copy(),
|
|
Right: TableMargins.Right.Copy(),
|
|
Top: TableMargins.Top.Copy(),
|
|
Bottom: TableMargins.Bottom.Copy()
|
|
};
|
|
bNeedChange = true;
|
|
}
|
|
switch (Type) {
|
|
case -1:
|
|
bNeedChange = true;
|
|
Margins_new.Top.W = Margin.Top.W;
|
|
Margins_new.Top.Type = Margin.Top.Type;
|
|
Margins_new.Right.W = Margin.Right.W;
|
|
Margins_new.Right.Type = Margin.Right.Type;
|
|
Margins_new.Bottom.W = Margin.Bottom.W;
|
|
Margins_new.Bottom.Type = Margin.Bottom.Type;
|
|
Margins_new.Left.W = Margin.Left.W;
|
|
Margins_new.Left.Type = Margin.Left.Type;
|
|
break;
|
|
case 0:
|
|
if (true != bNeedChange && Margins_new.Top.W != Margin.W || Margins_new.Top.Type != Margin.Type) {
|
|
bNeedChange = true;
|
|
}
|
|
Margins_new.Top.W = Margin.W;
|
|
Margins_new.Top.Type = Margin.Type;
|
|
break;
|
|
case 1:
|
|
if (true != bNeedChange && Margins_new.Right.W != Margin.W || Margins_new.Right.Type != Margin.Type) {
|
|
bNeedChange = true;
|
|
}
|
|
Margins_new.Right.W = Margin.W;
|
|
Margins_new.Right.Type = Margin.Type;
|
|
break;
|
|
case 2:
|
|
if (true != bNeedChange && Margins_new.Bottom.W != Margin.W || Margins_new.Bottom.Type != Margin.Type) {
|
|
bNeedChange = true;
|
|
}
|
|
Margins_new.Bottom.W = Margin.W;
|
|
Margins_new.Bottom.Type = Margin.Type;
|
|
break;
|
|
case 3:
|
|
if (true != bNeedChange && Margins_new.Left.W != Margin.W || Margins_new.Left.Type != Margin.Type) {
|
|
bNeedChange = true;
|
|
}
|
|
Margins_new.Left.W = Margin.W;
|
|
Margins_new.Left.Type = Margin.Type;
|
|
break;
|
|
}
|
|
if (true === bNeedChange) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_Margins,
|
|
Old: OldValue,
|
|
New: Margins_new
|
|
});
|
|
this.Pr.TableCellMar = Margins_new;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
},
|
|
Get_Shd: function () {
|
|
var Shd = this.Get_CompiledPr(false).Shd;
|
|
return Shd;
|
|
},
|
|
Set_Shd: function (Shd) {
|
|
if (undefined === Shd && undefined === this.Pr.Shd) {
|
|
return;
|
|
}
|
|
if (undefined === Shd) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_Shd,
|
|
Old: this.Pr.Shd,
|
|
New: undefined
|
|
});
|
|
this.Pr.Shd = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (undefined === this.Pr.Shd || false === Shd.Compare(this.Pr.Shd)) {
|
|
var _Shd = new CDocumentShd();
|
|
_Shd.Set_FromObject(Shd);
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_Shd,
|
|
Old: (undefined === this.Pr.Shd ? undefined : this.Pr.Shd),
|
|
New: _Shd
|
|
});
|
|
this.Pr.Shd = _Shd;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
},
|
|
Get_VMerge: function () {
|
|
var VMerge = this.Get_CompiledPr(false).VMerge;
|
|
return VMerge;
|
|
},
|
|
Set_VMerge: function (Value) {
|
|
if (undefined === Value && undefined === this.Pr.VMerge) {
|
|
return;
|
|
}
|
|
if (undefined === Value) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_VMerge,
|
|
Old: this.Pr.VMerge,
|
|
New: undefined
|
|
});
|
|
this.Pr.VMerge = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (Value != this.Pr.VMerge) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_VMerge,
|
|
Old: (undefined === this.Pr.VMerge ? undefined : this.Pr.VMerge),
|
|
New: Value
|
|
});
|
|
this.Pr.VMerge = Value;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
},
|
|
Get_VAlign: function () {
|
|
var VAlign = this.Get_CompiledPr(false).VAlign;
|
|
return VAlign;
|
|
},
|
|
Set_VAlign: function (Value) {
|
|
if (undefined === Value && undefined === this.Pr.VAlign) {
|
|
return;
|
|
}
|
|
if (undefined === Value) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_VAlign,
|
|
Old: this.Pr.VAlign,
|
|
New: undefined
|
|
});
|
|
this.Pr.VMerge = undefined;
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
if (Value != this.Pr.VAlign) {
|
|
History.Add(this, {
|
|
Type: historyitem_TableCell_VAlign,
|
|
Old: (undefined === this.Pr.VAlign ? undefined : this.Pr.VAlign),
|
|
New: Value
|
|
});
|
|
this.Pr.VAlign = Value;
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
},
|
|
Get_Borders: function () {
|
|
var CellBorders = {
|
|
Top: this.Get_Border(0),
|
|
Right: this.Get_Border(1),
|
|
Bottom: this.Get_Border(2),
|
|
Left: this.Get_Border(3)
|
|
};
|
|
return CellBorders;
|
|
},
|
|
Get_Border: function (Type) {
|
|
var TableBorders = this.Row.Table.Get_TableBorders();
|
|
var Borders = this.Get_CompiledPr(false).TableCellBorders;
|
|
var Border = null;
|
|
switch (Type) {
|
|
case 0:
|
|
if (null != Borders.Top) {
|
|
Border = Borders.Top;
|
|
} else {
|
|
if (0 != this.Row.Index || null != this.Row.Get_CellSpacing()) {
|
|
Border = TableBorders.InsideH;
|
|
} else {
|
|
Border = TableBorders.Top;
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
if (null != Borders.Right) {
|
|
Border = Borders.Right;
|
|
} else {
|
|
if (this.Row.Content.length - 1 != this.Index || null != this.Row.Get_CellSpacing()) {
|
|
Border = TableBorders.InsideV;
|
|
} else {
|
|
Border = TableBorders.Right;
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (null != Borders.Bottom) {
|
|
Border = Borders.Bottom;
|
|
} else {
|
|
if (this.Row.Table.Content.length - 1 != this.Row.Index || null != this.Row.Get_CellSpacing()) {
|
|
Border = TableBorders.InsideH;
|
|
} else {
|
|
Border = TableBorders.Bottom;
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
if (null != Borders.Left) {
|
|
Border = Borders.Left;
|
|
} else {
|
|
if (0 != this.Index || null != this.Row.Get_CellSpacing()) {
|
|
Border = TableBorders.InsideV;
|
|
} else {
|
|
Border = TableBorders.Left;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return Border;
|
|
},
|
|
Set_Border: function (Border, Type) {
|
|
var DstBorder = this.Pr.TableCellBorders.Top;
|
|
var HistoryType = historyitem_TableCell_Border_Left;
|
|
switch (Type) {
|
|
case 0:
|
|
DstBorder = this.Pr.TableCellBorders.Top;
|
|
HistoryType = historyitem_TableCell_Border_Top;
|
|
break;
|
|
case 1:
|
|
DstBorder = this.Pr.TableCellBorders.Right;
|
|
HistoryType = historyitem_TableCell_Border_Right;
|
|
break;
|
|
case 2:
|
|
DstBorder = this.Pr.TableCellBorders.Bottom;
|
|
HistoryType = historyitem_TableCell_Border_Bottom;
|
|
break;
|
|
case 3:
|
|
DstBorder = this.Pr.TableCellBorders.Left;
|
|
HistoryType = historyitem_TableCell_Border_Left;
|
|
break;
|
|
}
|
|
if (undefined === Border) {
|
|
if (undefined === DstBorder) {
|
|
return;
|
|
} else {
|
|
History.Add(this, {
|
|
Type: HistoryType,
|
|
Old: DstBorder,
|
|
New: undefined
|
|
});
|
|
switch (Type) {
|
|
case 0:
|
|
this.Pr.TableCellBorders.Top = undefined;
|
|
break;
|
|
case 1:
|
|
this.Pr.TableCellBorders.Right = undefined;
|
|
break;
|
|
case 2:
|
|
this.Pr.TableCellBorders.Bottom = undefined;
|
|
break;
|
|
case 3:
|
|
this.Pr.TableCellBorders.Left = undefined;
|
|
break;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
} else {
|
|
if (null === Border) {
|
|
if (null === DstBorder) {
|
|
return;
|
|
} else {
|
|
History.Add(this, {
|
|
Type: HistoryType,
|
|
Old: DstBorder,
|
|
New: null
|
|
});
|
|
switch (Type) {
|
|
case 0:
|
|
this.Pr.TableCellBorders.Top = null;
|
|
break;
|
|
case 1:
|
|
this.Pr.TableCellBorders.Right = null;
|
|
break;
|
|
case 2:
|
|
this.Pr.TableCellBorders.Bottom = null;
|
|
break;
|
|
case 3:
|
|
this.Pr.TableCellBorders.Left = null;
|
|
break;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
} else {
|
|
if (null === DstBorder) {
|
|
var NewBorder = this.Get_Border(Type).Copy();
|
|
NewBorder.Value = (null != Border.Value ? Border.Value : NewBorder.Value);
|
|
NewBorder.Size = (null != Border.Size ? Border.Size : NewBorder.Size);
|
|
NewBorder.Color.r = (null != Border.Color ? Border.Color.r : NewBorder.Color.r);
|
|
NewBorder.Color.g = (null != Border.Color ? Border.Color.g : NewBorder.Color.g);
|
|
NewBorder.Color.b = (null != Border.Color ? Border.Color.b : NewBorder.Color.b);
|
|
NewBorder.unifill = Border.unifill ? Border.unifill.createDuplicate() : null;
|
|
History.Add(this, {
|
|
Type: HistoryType,
|
|
Old: null,
|
|
New: NewBorder
|
|
});
|
|
switch (Type) {
|
|
case 0:
|
|
this.Pr.TableCellBorders.Top = NewBorder;
|
|
break;
|
|
case 1:
|
|
this.Pr.TableCellBorders.Right = NewBorder;
|
|
break;
|
|
case 2:
|
|
this.Pr.TableCellBorders.Bottom = NewBorder;
|
|
break;
|
|
case 3:
|
|
this.Pr.TableCellBorders.Left = NewBorder;
|
|
break;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
} else {
|
|
var NewBorder = new CDocumentBorder();
|
|
NewBorder.Value = (null != Border.Value ? Border.Value : DstBorder.Value);
|
|
NewBorder.Size = (null != Border.Size ? Border.Size : DstBorder.Size);
|
|
NewBorder.Color.r = (null != Border.Color ? Border.Color.r : DstBorder.Color.r);
|
|
NewBorder.Color.g = (null != Border.Color ? Border.Color.g : DstBorder.Color.g);
|
|
NewBorder.Color.b = (null != Border.Color ? Border.Color.b : DstBorder.Color.b);
|
|
NewBorder.unifill = Border.unifill ? Border.unifill.createDuplicate() : null;
|
|
History.Add(this, {
|
|
Type: HistoryType,
|
|
Old: DstBorder,
|
|
New: NewBorder
|
|
});
|
|
switch (Type) {
|
|
case 0:
|
|
this.Pr.TableCellBorders.Top = NewBorder;
|
|
break;
|
|
case 1:
|
|
this.Pr.TableCellBorders.Right = NewBorder;
|
|
break;
|
|
case 2:
|
|
this.Pr.TableCellBorders.Bottom = NewBorder;
|
|
break;
|
|
case 3:
|
|
this.Pr.TableCellBorders.Left = NewBorder;
|
|
break;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Set_BorderInfo_Top: function (TopInfo) {
|
|
this.BorderInfo.Top = TopInfo;
|
|
},
|
|
Set_BorderInfo_Bottom: function (BottomInfo, BeforeCount, AfterCount) {
|
|
this.BorderInfo.Bottom = BottomInfo;
|
|
this.BorderInfo.Bottom_BeforeCount = BeforeCount;
|
|
this.BorderInfo.Bottom_AfterCount = AfterCount;
|
|
},
|
|
Set_BorderInfo_Left: function (LeftInfo, Max) {
|
|
this.BorderInfo.Left = LeftInfo;
|
|
this.BorderInfo.MaxLeft = Max;
|
|
},
|
|
Set_BorderInfo_Right: function (RightInfo, Max) {
|
|
this.BorderInfo.Right = RightInfo;
|
|
this.BorderInfo.MaxRight = Max;
|
|
},
|
|
Get_BorderInfo: function () {
|
|
return this.BorderInfo;
|
|
},
|
|
Undo: function (Data) {
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_TableCell_GridSpan:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.GridSpan = undefined;
|
|
} else {
|
|
this.Pr.GridSpan = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Margins:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableCellMar = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Shd:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.Shd = undefined;
|
|
} else {
|
|
this.Pr.Shd = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_VMerge:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.VMerge = undefined;
|
|
} else {
|
|
this.Pr.VMerge = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Left:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableCellBorders.Left = undefined;
|
|
} else {
|
|
this.Pr.TableCellBorders.Left = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Right:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableCellBorders.Right = undefined;
|
|
} else {
|
|
this.Pr.TableCellBorders.Right = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Top:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableCellBorders.Top = undefined;
|
|
} else {
|
|
this.Pr.TableCellBorders.Top = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Bottom:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableCellBorders.Bottom = undefined;
|
|
} else {
|
|
this.Pr.TableCellBorders.Bottom = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_VAlign:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.VAlign = undefined;
|
|
} else {
|
|
this.Pr.VAlign = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_W:
|
|
if (undefined === Data.Old) {
|
|
this.Pr.TableCellW = undefined;
|
|
} else {
|
|
this.Pr.TableCellW = Data.Old;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
}
|
|
if (this.Row && this.Row.Table && this.Row.Table.Parent) {
|
|
this.Row.Table.Parent.onParagraphChanged();
|
|
}
|
|
},
|
|
Redo: function (Data) {
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_TableCell_GridSpan:
|
|
if (undefined === Data.New) {
|
|
this.Pr.GridSpan = undefined;
|
|
} else {
|
|
this.Pr.GridSpan = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Margins:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableCellMar = undefined;
|
|
} else {
|
|
this.Pr.TableCellMar = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Shd:
|
|
if (undefined === Data.New) {
|
|
this.Pr.Shd = undefined;
|
|
} else {
|
|
this.Pr.Shd = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_VMerge:
|
|
if (undefined === Data.New) {
|
|
this.Pr.VMerge = undefined;
|
|
} else {
|
|
this.Pr.VMerge = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Left:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableCellBorders.Left = undefined;
|
|
} else {
|
|
this.Pr.TableCellBorders.Left = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Right:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableCellBorders.Right = undefined;
|
|
} else {
|
|
this.Pr.TableCellBorders.Right = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Top:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableCellBorders.Top = undefined;
|
|
} else {
|
|
this.Pr.TableCellBorders.Top = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Bottom:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableCellBorders.Bottom = undefined;
|
|
} else {
|
|
this.Pr.TableCellBorders.Bottom = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_VAlign:
|
|
if (undefined === Data.New) {
|
|
this.Pr.VAlign = undefined;
|
|
} else {
|
|
this.Pr.VAlign = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_W:
|
|
if (undefined === Data.New) {
|
|
this.Pr.TableCellW = undefined;
|
|
} else {
|
|
this.Pr.TableCellW = Data.New;
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
}
|
|
if (this.Row && this.Row.Table && this.Row.Table.Parent) {
|
|
this.Row.Table.Parent.onParagraphChanged();
|
|
}
|
|
},
|
|
Get_ParentObject_or_DocumentPos: function () {
|
|
return this.Row.Table.Get_ParentObject_or_DocumentPos(this.Row.Table.Index);
|
|
},
|
|
Refresh_RecalcData: function (Data) {
|
|
var bNeedRecalc = false;
|
|
var Type = Data.Type;
|
|
switch (Type) {
|
|
case historyitem_TableCell_GridSpan:
|
|
case historyitem_TableCell_Margins:
|
|
case historyitem_TableCell_VMerge:
|
|
case historyitem_TableCell_Border_Left:
|
|
case historyitem_TableCell_Border_Right:
|
|
case historyitem_TableCell_Border_Top:
|
|
case historyitem_TableCell_Border_Bottom:
|
|
case historyitem_TableCell_VAlign:
|
|
case historyitem_TableCell_W:
|
|
bNeedRecalc = true;
|
|
break;
|
|
case historyitem_TableCell_Shd:
|
|
break;
|
|
}
|
|
this.Refresh_RecalcData2(0, 0);
|
|
},
|
|
Refresh_RecalcData2: function (Page_Rel) {
|
|
var Table = this.Row.Table;
|
|
var TablePr = Table.Get_CompiledPr(false).TablePr;
|
|
if (tbllayout_AutoFit === TablePr.TableLayout) {
|
|
var CurCol;
|
|
var ColsCount = Table.TableGrid.length;
|
|
var TableGrid_old = new Array();
|
|
for (CurCol = 0; CurCol < ColsCount; CurCol++) {
|
|
TableGrid_old[CurCol] = Table.TableGrid[CurCol];
|
|
}
|
|
Table.Internal_RecalculateGrid();
|
|
var TableGrid_new = Table.TableGrid;
|
|
for (CurCol = 0; CurCol < ColsCount; CurCol++) {
|
|
if (Math.abs(TableGrid_old[CurCol] - TableGrid_new[CurCol]) > 0.001) {
|
|
return Table.Refresh_RecalcData2(0, 0);
|
|
}
|
|
}
|
|
}
|
|
this.Row.Refresh_RecalcData2(this.Index, Page_Rel);
|
|
},
|
|
Save_Changes: function (Data, Writer) {
|
|
Writer.WriteLong(historyitem_type_TableCell);
|
|
var Type = Data.Type;
|
|
Writer.WriteLong(Type);
|
|
switch (Type) {
|
|
case historyitem_TableCell_GridSpan:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteLong(Data.New);
|
|
}
|
|
break;
|
|
case historyitem_TableCell_Margins:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
if (null === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Top.Write_ToBinary(Writer);
|
|
Data.New.Left.Write_ToBinary(Writer);
|
|
Data.New.Bottom.Write_ToBinary(Writer);
|
|
Data.New.Right.Write_ToBinary(Writer);
|
|
}
|
|
}
|
|
break;
|
|
case historyitem_TableCell_Shd:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.writeToBinaryCollaborative(Writer);
|
|
}
|
|
break;
|
|
case historyitem_TableCell_VMerge:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteLong(Data.New);
|
|
}
|
|
break;
|
|
case historyitem_TableCell_Border_Left:
|
|
case historyitem_TableCell_Border_Right:
|
|
case historyitem_TableCell_Border_Top:
|
|
case historyitem_TableCell_Border_Bottom:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
if (null === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.writeToBinaryCollaborative(Writer);
|
|
}
|
|
}
|
|
break;
|
|
case historyitem_TableCell_VAlign:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Writer.WriteLong(Data.New);
|
|
}
|
|
break;
|
|
case historyitem_TableCell_W:
|
|
if (undefined === Data.New) {
|
|
Writer.WriteBool(true);
|
|
} else {
|
|
Writer.WriteBool(false);
|
|
Data.New.Write_ToBinary(Writer);
|
|
}
|
|
break;
|
|
}
|
|
return Writer;
|
|
},
|
|
Save_Changes2: function (Data, Writer) {
|
|
return false;
|
|
},
|
|
Load_Changes: function (Reader, Reader2) {
|
|
var ClassType = Reader.GetLong();
|
|
if (historyitem_type_TableCell != ClassType) {
|
|
return;
|
|
}
|
|
var Type = Reader.GetLong();
|
|
switch (Type) {
|
|
case historyitem_TableCell_GridSpan:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.GridSpan = undefined;
|
|
} else {
|
|
this.Pr.GridSpan = Reader.GetLong();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Margins:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.TableCellMar = undefined;
|
|
} else {
|
|
var bNull = Reader.GetBool();
|
|
if (true === bNull) {
|
|
this.Pr.TableCellMar = null;
|
|
} else {
|
|
this.Pr.TableCellMar = {
|
|
Top: new CTableMeasurement(tblwidth_Auto, 0),
|
|
Left: new CTableMeasurement(tblwidth_Auto, 0),
|
|
Bottom: new CTableMeasurement(tblwidth_Auto, 0),
|
|
Right: new CTableMeasurement(tblwidth_Auto, 0)
|
|
};
|
|
this.Pr.TableCellMar.Top.Read_FromBinary(Reader);
|
|
this.Pr.TableCellMar.Left.Read_FromBinary(Reader);
|
|
this.Pr.TableCellMar.Bottom.Read_FromBinary(Reader);
|
|
this.Pr.TableCellMar.Right.Read_FromBinary(Reader);
|
|
}
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Shd:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.Shd = undefined;
|
|
} else {
|
|
this.Pr.Shd = new CDocumentShd();
|
|
this.Pr.Shd.readFromBinaryCollaborative(Reader);
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_VMerge:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
delete this.Pr.VMerge;
|
|
} else {
|
|
this.Pr.VMerge = Reader.GetLong();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Left:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.TableCellBorders.Left = undefined;
|
|
} else {
|
|
var bNull = Reader.GetBool();
|
|
if (true === bNull) {
|
|
this.Pr.TableCellBorders.Left = null;
|
|
} else {
|
|
this.Pr.TableCellBorders.Left = new CDocumentBorder();
|
|
this.Pr.TableCellBorders.Left.readFromBinaryCollaborative(Reader);
|
|
}
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Right:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.TableCellBorders.Right = undefined;
|
|
} else {
|
|
var bNull = Reader.GetBool();
|
|
if (true === bNull) {
|
|
this.Pr.TableCellBorders.Right = null;
|
|
} else {
|
|
this.Pr.TableCellBorders.Right = new CDocumentBorder();
|
|
this.Pr.TableCellBorders.Right.readFromBinaryCollaborative(Reader);
|
|
}
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Top:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.TableCellBorders.Top = undefined;
|
|
} else {
|
|
var bNull = Reader.GetBool();
|
|
if (true === bNull) {
|
|
this.Pr.TableCellBorders.Top = null;
|
|
} else {
|
|
this.Pr.TableCellBorders.Top = new CDocumentBorder();
|
|
this.Pr.TableCellBorders.Top.readFromBinaryCollaborative(Reader);
|
|
}
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_Border_Bottom:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
this.Pr.TableCellBorders.Bottom = undefined;
|
|
} else {
|
|
var bNull = Reader.GetBool();
|
|
if (true === bNull) {
|
|
this.Pr.TableCellBorders.Bottom = null;
|
|
} else {
|
|
this.Pr.TableCellBorders.Bottom = new CDocumentBorder();
|
|
this.Pr.TableCellBorders.Bottom.readFromBinaryCollaborative(Reader);
|
|
}
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_VAlign:
|
|
var bUndefined = Reader.GetBool();
|
|
if (true === bUndefined) {
|
|
delete this.Pr.VAlign;
|
|
} else {
|
|
this.Pr.VAlign = Reader.GetLong();
|
|
}
|
|
this.Recalc_CompiledPr();
|
|
break;
|
|
case historyitem_TableCell_W:
|
|
if (true === Reader.GetBool()) {
|
|
delete this.Pr.TableCellW;
|
|
} else {
|
|
this.Pr.TableCellW = new CTableMeasurement(tblwidth_Auto, 0);
|
|
this.Pr.TableCellW.Read_FromBinary(Reader);
|
|
}
|
|
break;
|
|
}
|
|
if (this.Row && this.Row.Table && this.Row.Table.Parent) {
|
|
this.Row.Table.Parent.onParagraphChanged();
|
|
}
|
|
},
|
|
Write_ToBinary2: function (Writer) {
|
|
Writer.WriteLong(historyitem_type_TableCell);
|
|
Writer.WriteString2(this.Id);
|
|
Writer.WriteString2(this.Row.Get_Id());
|
|
this.Pr.Write_ToBinary(Writer);
|
|
Writer.WriteString2(this.Content.Get_Id());
|
|
},
|
|
Read_FromBinary2: function (Reader) {
|
|
this.Id = Reader.GetString2();
|
|
var LinkData = new Object();
|
|
LinkData.Row = Reader.GetString2();
|
|
CollaborativeEditing.Add_LinkData(this, LinkData);
|
|
this.Pr = new CTableCellPr();
|
|
this.Pr.Read_FromBinary(Reader);
|
|
this.Recalc_CompiledPr();
|
|
this.Content = g_oTableId.Get_ById(Reader.GetString2());
|
|
CollaborativeEditing.Add_NewObject(this);
|
|
},
|
|
Load_LinkData: function (LinkData) {
|
|
if ("undefined" != typeof(LinkData.Row)) {
|
|
this.Row = g_oTableId.Get_ById(LinkData.Row);
|
|
}
|
|
}
|
|
}; |