4747 lines
163 KiB
JavaScript
4747 lines
163 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2015
|
|
*
|
|
* 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
|
|
*
|
|
*/
|
|
"use strict";
|
|
var g_oColorManager = null;
|
|
var g_nNumsMaxId = 160;
|
|
var g_oDefaultXfId = null;
|
|
var g_oDefaultFont = null;
|
|
var g_oDefaultFill = null;
|
|
var g_oDefaultNum = null;
|
|
var g_oDefaultBorder = null;
|
|
var g_oDefaultAlign = null;
|
|
var g_oDefaultFontAbs = null;
|
|
var g_oDefaultFillAbs = null;
|
|
var g_oDefaultNumAbs = null;
|
|
var g_oDefaultBorderAbs = null;
|
|
var g_oDefaultAlignAbs = null;
|
|
var g_nColorTextDefault = 1;
|
|
var g_nColorHyperlink = 10;
|
|
var g_nColorHyperlinkVisited = 11;
|
|
var g_oThemeColorsDefaultModsSpreadsheet = [[0, -0.0499893185216834, -0.1499984740745262, -0.249977111117893, -0.3499862666707358, -0.499984740745262], [0, -0.09997863704336681, -0.249977111117893, -0.499984740745262, -0.749992370372631, -0.8999908444471572], [0, 0.7999816888943144, 0.5999938962981049, 0.3999755851924192, -0.249977111117893, -0.499984740745262], [0, 0.8999908444471572, 0.749992370372631, 0.499984740745262, 0.249977111117893, 0.09997863704336681], [0, 0.499984740745262, 0.3499862666707358, 0.249977111117893, 0.1499984740745262, 0.0499893185216834]];
|
|
var map_themeExcel_to_themePresentation = {
|
|
0: 12,
|
|
1: 8,
|
|
2: 13,
|
|
3: 9,
|
|
4: 0,
|
|
5: 1,
|
|
6: 2,
|
|
7: 3,
|
|
8: 4,
|
|
9: 5,
|
|
10: 11,
|
|
11: 10
|
|
};
|
|
var map_themePresentation_to_themeExcel = {};
|
|
(function () {
|
|
for (var i in map_themeExcel_to_themePresentation) {
|
|
map_themePresentation_to_themeExcel[map_themeExcel_to_themePresentation[i]] = i - 0;
|
|
}
|
|
})();
|
|
function shiftGetBBox(bbox, bHor) {
|
|
var bboxGet = null;
|
|
if (bHor) {
|
|
bboxGet = Asc.Range(bbox.c1, bbox.r1, gc_nMaxCol0, bbox.r2);
|
|
} else {
|
|
bboxGet = Asc.Range(bbox.c1, bbox.r1, bbox.c2, gc_nMaxRow0);
|
|
}
|
|
return bboxGet;
|
|
}
|
|
function shiftSort(a, b, offset) {
|
|
var nRes = 0;
|
|
if (null == a.to || null == b.to) {
|
|
if (null == a.to && null == b.to) {
|
|
nRes = 0;
|
|
} else {
|
|
if (null == a.to) {
|
|
nRes = -1;
|
|
} else {
|
|
if (null == b.to) {
|
|
nRes = 1;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (0 != offset.offsetRow) {
|
|
if (offset.offsetRow > 0) {
|
|
nRes = b.to.r1 - a.to.r1;
|
|
} else {
|
|
nRes = a.to.r1 - b.to.r1;
|
|
}
|
|
}
|
|
if (0 == nRes && 0 != offset.offsetCol) {
|
|
if (offset.offsetCol > 0) {
|
|
nRes = b.to.c1 - a.to.c1;
|
|
} else {
|
|
nRes = a.to.c1 - b.to.c1;
|
|
}
|
|
}
|
|
}
|
|
return nRes;
|
|
}
|
|
var g_oRgbColorProperties = {
|
|
rgb: 0
|
|
};
|
|
function RgbColor(rgb) {
|
|
this.Properties = g_oRgbColorProperties;
|
|
this.rgb = rgb;
|
|
}
|
|
RgbColor.prototype = {
|
|
clone: function () {
|
|
return new RgbColor(this.rgb);
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.RgbColor;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.rgb:
|
|
return this.rgb;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.rgb:
|
|
this.rgb = value;
|
|
break;
|
|
}
|
|
},
|
|
Write_ToBinary2: function (oBinaryWriter) {
|
|
oBinaryWriter.WriteLong(this.rgb);
|
|
},
|
|
Read_FromBinary2: function (oBinaryReader) {
|
|
this.rgb = oBinaryReader.GetULongLE();
|
|
},
|
|
getRgb: function () {
|
|
return this.rgb;
|
|
},
|
|
getR: function () {
|
|
return (this.rgb >> 16) & 255;
|
|
},
|
|
getG: function () {
|
|
return (this.rgb >> 8) & 255;
|
|
},
|
|
getB: function () {
|
|
return this.rgb & 255;
|
|
},
|
|
getA: function () {
|
|
return 1;
|
|
}
|
|
};
|
|
var g_oThemeColorProperties = {
|
|
rgb: 0,
|
|
theme: 1,
|
|
tint: 2
|
|
};
|
|
function ThemeColor() {
|
|
this.Properties = g_oThemeColorProperties;
|
|
this.rgb = null;
|
|
this.theme = null;
|
|
this.tint = null;
|
|
}
|
|
ThemeColor.prototype = {
|
|
clone: function () {
|
|
var res = new ThemeColor();
|
|
res.rgb = this.rgb;
|
|
res.theme = this.theme;
|
|
res.tint = this.tint;
|
|
return res;
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.ThemeColor;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.rgb:
|
|
return this.rgb;
|
|
break;
|
|
case this.Properties.theme:
|
|
return this.theme;
|
|
break;
|
|
case this.Properties.tint:
|
|
return this.tint;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.rgb:
|
|
this.rgb = value;
|
|
break;
|
|
case this.Properties.theme:
|
|
this.theme = value;
|
|
break;
|
|
case this.Properties.tint:
|
|
this.tint = value;
|
|
break;
|
|
}
|
|
},
|
|
Write_ToBinary2: function (oBinaryWriter) {
|
|
oBinaryWriter.WriteByte(this.theme);
|
|
if (null != this.tint) {
|
|
oBinaryWriter.WriteByte(true);
|
|
oBinaryWriter.WriteDouble2(this.tint);
|
|
} else {
|
|
oBinaryWriter.WriteBool(false);
|
|
}
|
|
},
|
|
Read_FromBinary2AndReplace: function (oBinaryReader) {
|
|
this.theme = oBinaryReader.GetUChar();
|
|
var bTint = oBinaryReader.GetBool();
|
|
if (bTint) {
|
|
this.tint = oBinaryReader.GetDoubleLE();
|
|
}
|
|
return g_oColorManager.getThemeColor(this.theme, this.tint);
|
|
},
|
|
getRgb: function () {
|
|
return this.rgb;
|
|
},
|
|
getR: function () {
|
|
return (this.rgb >> 16) & 255;
|
|
},
|
|
getG: function () {
|
|
return (this.rgb >> 8) & 255;
|
|
},
|
|
getB: function () {
|
|
return this.rgb & 255;
|
|
},
|
|
getA: function () {
|
|
return 1;
|
|
},
|
|
rebuild: function (theme) {
|
|
var nRes = 0;
|
|
var r = 0;
|
|
var g = 0;
|
|
var b = 0;
|
|
if (null != this.theme && null != theme) {
|
|
var oUniColor = theme.themeElements.clrScheme.colors[map_themeExcel_to_themePresentation[this.theme]];
|
|
if (null != oUniColor) {
|
|
var rgba = oUniColor.color.RGBA;
|
|
if (null != rgba) {
|
|
r = rgba.R;
|
|
g = rgba.G;
|
|
b = rgba.B;
|
|
}
|
|
}
|
|
if (null != this.tint && 0 != this.tint) {
|
|
var oCColorModifiers = new CColorModifiers();
|
|
var HSL = {
|
|
H: 0,
|
|
S: 0,
|
|
L: 0
|
|
};
|
|
oCColorModifiers.RGB2HSL(r, g, b, HSL);
|
|
if (this.tint < 0) {
|
|
HSL.L = HSL.L * (1 + this.tint);
|
|
} else {
|
|
HSL.L = HSL.L * (1 - this.tint) + (g_nHSLMaxValue - g_nHSLMaxValue * (1 - this.tint));
|
|
}
|
|
HSL.L >>= 0;
|
|
var RGB = {
|
|
R: 0,
|
|
G: 0,
|
|
B: 0
|
|
};
|
|
oCColorModifiers.HSL2RGB(HSL, RGB);
|
|
r = RGB.R;
|
|
g = RGB.G;
|
|
b = RGB.B;
|
|
}
|
|
nRes |= b;
|
|
nRes |= g << 8;
|
|
nRes |= r << 16;
|
|
}
|
|
this.rgb = nRes;
|
|
}
|
|
};
|
|
function CorrectAscColor(asc_color) {
|
|
if (null == asc_color) {
|
|
return null;
|
|
}
|
|
var ret = null;
|
|
var _type = asc_color.get_type();
|
|
switch (_type) {
|
|
case c_oAscColor.COLOR_TYPE_SCHEME:
|
|
var _index = asc_color.get_value() >> 0;
|
|
var _id = (_index / 6) >> 0;
|
|
var _pos = _index - _id * 6;
|
|
var basecolor = g_oColorManager.getThemeColor(_id);
|
|
var aTints = g_oThemeColorsDefaultModsSpreadsheet[GetDefaultColorModsIndex(basecolor.getR(), basecolor.getG(), basecolor.getB())];
|
|
var tint = aTints[_pos];
|
|
ret = g_oColorManager.getThemeColor(_id, tint);
|
|
break;
|
|
default:
|
|
ret = new RgbColor((asc_color.get_r() << 16) + (asc_color.get_g() << 8) + asc_color.get_b());
|
|
}
|
|
return ret;
|
|
}
|
|
function ColorManager() {
|
|
this.theme = null;
|
|
this.aColors = new Array(12);
|
|
}
|
|
ColorManager.prototype = {
|
|
isEqual: function (color1, color2) {
|
|
var bRes = false;
|
|
if (null == color1 && null == color2) {
|
|
bRes = true;
|
|
} else {
|
|
if (null != color1 && null != color2) {
|
|
if ((color1 instanceof ThemeColor && color2 instanceof ThemeColor) || (color1 instanceof RgbColor && color2 instanceof RgbColor)) {
|
|
bRes = color1.getRgb() == color2.getRgb();
|
|
}
|
|
}
|
|
}
|
|
return bRes;
|
|
},
|
|
setTheme: function (theme) {
|
|
this.theme = theme;
|
|
this.rebuildColors();
|
|
},
|
|
getThemeColor: function (theme, tint) {
|
|
if (null == tint) {
|
|
tint = null;
|
|
}
|
|
var oColorObj = this.aColors[theme];
|
|
if (null == oColorObj) {
|
|
oColorObj = {};
|
|
this.aColors[theme] = oColorObj;
|
|
}
|
|
var oThemeColor = oColorObj[tint];
|
|
if (null == oThemeColor) {
|
|
oThemeColor = new ThemeColor();
|
|
oThemeColor.theme = theme;
|
|
oThemeColor.tint = tint;
|
|
if (null != this.theme) {
|
|
oThemeColor.rebuild(this.theme);
|
|
}
|
|
oColorObj[tint] = oThemeColor;
|
|
}
|
|
return oThemeColor;
|
|
},
|
|
rebuildColors: function () {
|
|
if (null != this.theme) {
|
|
for (var i = 0, length = this.aColors.length; i < length; ++i) {
|
|
var oColorObj = this.aColors[i];
|
|
for (var j in oColorObj) {
|
|
var oThemeColor = oColorObj[j];
|
|
oThemeColor.rebuild(this.theme);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
g_oColorManager = new ColorManager();
|
|
function Fragment(val) {
|
|
this.text = null;
|
|
this.format = null;
|
|
this.sFormula = null;
|
|
this.sId = null;
|
|
if (null != val) {
|
|
this.set(val);
|
|
}
|
|
}
|
|
Fragment.prototype = {
|
|
clone: function () {
|
|
return new Fragment(this);
|
|
},
|
|
set: function (oVal) {
|
|
if (null != oVal.text) {
|
|
this.text = oVal.text;
|
|
}
|
|
if (null != oVal.format) {
|
|
this.format = oVal.format;
|
|
}
|
|
if (null != oVal.sFormula) {
|
|
this.sFormula = oVal.sFormula;
|
|
}
|
|
if (null != oVal.sId) {
|
|
this.sId = oVal.sId;
|
|
}
|
|
}
|
|
};
|
|
var g_oFontProperties = {
|
|
fn: 0,
|
|
scheme: 1,
|
|
fs: 2,
|
|
b: 3,
|
|
i: 4,
|
|
u: 5,
|
|
s: 6,
|
|
c: 7,
|
|
va: 8
|
|
};
|
|
function Font(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultFontAbs;
|
|
}
|
|
this.Properties = g_oFontProperties;
|
|
this.fn = val.fn;
|
|
this.scheme = val.scheme;
|
|
this.fs = val.fs;
|
|
this.b = val.b;
|
|
this.i = val.i;
|
|
this.u = val.u;
|
|
this.s = val.s;
|
|
this.c = val.c;
|
|
this.va = val.va;
|
|
this.skip = val.skip;
|
|
this.repeat = val.repeat;
|
|
}
|
|
Font.prototype = {
|
|
clean: function () {
|
|
this.fn = null;
|
|
this.scheme = null;
|
|
this.fs = null;
|
|
this.b = null;
|
|
this.i = null;
|
|
this.u = null;
|
|
this.s = null;
|
|
this.c = null;
|
|
this.va = null;
|
|
this.skip = null;
|
|
this.repeat = null;
|
|
},
|
|
_mergeProperty: function (first, second, def) {
|
|
if (def != first) {
|
|
return first;
|
|
} else {
|
|
return second;
|
|
}
|
|
},
|
|
merge: function (font) {
|
|
var oRes = new Font();
|
|
oRes.fn = this._mergeProperty(this.fn, font.fn, g_oDefaultFontAbs.fn);
|
|
oRes.scheme = this._mergeProperty(this.scheme, font.scheme, g_oDefaultFontAbs.scheme);
|
|
oRes.fs = this._mergeProperty(this.fs, font.fs, g_oDefaultFontAbs.fs);
|
|
oRes.b = this._mergeProperty(this.b, font.b, g_oDefaultFontAbs.b);
|
|
oRes.i = this._mergeProperty(this.i, font.i, g_oDefaultFontAbs.i);
|
|
oRes.u = this._mergeProperty(this.u, font.u, g_oDefaultFontAbs.u);
|
|
oRes.s = this._mergeProperty(this.s, font.s, g_oDefaultFontAbs.s);
|
|
if (this.c instanceof ThemeColor && g_nColorTextDefault == this.c.theme && null == this.c.tint) {
|
|
oRes.c = this._mergeProperty(font.c, this.c, g_oDefaultFontAbs.c);
|
|
} else {
|
|
oRes.c = this._mergeProperty(this.c, font.c, g_oDefaultFontAbs.c);
|
|
}
|
|
oRes.va = this._mergeProperty(this.va, font.va, g_oDefaultFontAbs.va);
|
|
oRes.skip = this._mergeProperty(this.skip, font.skip, g_oDefaultFontAbs.skip);
|
|
oRes.repeat = this._mergeProperty(this.repeat, font.repeat, g_oDefaultFontAbs.repeat);
|
|
return oRes;
|
|
},
|
|
getRgbOrNull: function () {
|
|
var nRes = null;
|
|
if (null != this.c) {
|
|
nRes = this.c.getRgb();
|
|
}
|
|
return nRes;
|
|
},
|
|
getDif: function (val) {
|
|
var oRes = new Font(this);
|
|
var bEmpty = true;
|
|
if (this.fn == val.fn) {
|
|
oRes.fn = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.scheme == val.scheme) {
|
|
oRes.scheme = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.fs == val.fs) {
|
|
oRes.fs = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.b == val.b) {
|
|
oRes.b = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.i == val.i) {
|
|
oRes.i = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.u == val.u) {
|
|
oRes.u = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.s == val.s) {
|
|
oRes.s = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (g_oColorManager.isEqual(this.c, val.c)) {
|
|
oRes.c = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.va == val.va) {
|
|
oRes.va = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.skip == val.skip) {
|
|
oRes.skip = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.repeat == val.repeat) {
|
|
oRes.repeat = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (bEmpty) {
|
|
oRes = null;
|
|
}
|
|
return oRes;
|
|
},
|
|
isEqual: function (font) {
|
|
var bRes = this.fs == font.fs && this.b == font.b && this.i == font.i && this.u == font.u && this.s == font.s && g_oColorManager.isEqual(this.c, font.c) && this.va == font.va && this.skip == font.skip && this.repeat == font.repeat;
|
|
if (bRes) {
|
|
if (Asc.EFontScheme.fontschemeNone == this.scheme && Asc.EFontScheme.fontschemeNone == font.scheme) {
|
|
bRes = this.fn == font.fn;
|
|
} else {
|
|
if (Asc.EFontScheme.fontschemeNone != this.scheme && Asc.EFontScheme.fontschemeNone != font.scheme) {
|
|
bRes = this.scheme == font.scheme;
|
|
} else {
|
|
bRes = false;
|
|
}
|
|
}
|
|
}
|
|
return bRes;
|
|
},
|
|
clone: function () {
|
|
return new Font(this);
|
|
},
|
|
set: function (oVal) {
|
|
if (null != oVal.fn) {
|
|
this.fn = oVal.fn;
|
|
this.scheme = Asc.EFontScheme.fontschemeNone;
|
|
}
|
|
if (null != oVal.scheme) {
|
|
this.scheme = oVal.scheme;
|
|
}
|
|
if (null != oVal.fs) {
|
|
this.fs = oVal.fs;
|
|
}
|
|
if (null != oVal.b) {
|
|
this.b = oVal.b;
|
|
}
|
|
if (null != oVal.i) {
|
|
this.i = oVal.i;
|
|
}
|
|
if (null != oVal.u) {
|
|
this.u = oVal.u;
|
|
}
|
|
if (null != oVal.s) {
|
|
this.s = oVal.s;
|
|
}
|
|
if (null != oVal.c) {
|
|
this.c = oVal.c;
|
|
}
|
|
if (null != oVal.va) {
|
|
this.va = oVal.va;
|
|
}
|
|
if (null != oVal.skip) {
|
|
this.skip = oVal.skip;
|
|
}
|
|
if (null != oVal.repeat) {
|
|
this.repeat = oVal.repeat;
|
|
}
|
|
},
|
|
intersect: function (oFont, oDefVal) {
|
|
if (this.fn != oFont.fn) {
|
|
this.fn = oDefVal.fn;
|
|
}
|
|
if (this.scheme != oFont.scheme) {
|
|
this.scheme = oDefVal.scheme;
|
|
}
|
|
if (this.fs != oFont.fs) {
|
|
this.fs = oDefVal.fs;
|
|
}
|
|
if (this.b != oFont.b) {
|
|
this.b = oDefVal.b;
|
|
}
|
|
if (this.i != oFont.i) {
|
|
this.i = oDefVal.i;
|
|
}
|
|
if (this.u != oFont.u) {
|
|
this.u = oDefVal.u;
|
|
}
|
|
if (this.s != oFont.s) {
|
|
this.s = oDefVal.s;
|
|
}
|
|
if (false == g_oColorManager.isEqual(this.c, oFont.c)) {
|
|
this.c = oDefVal.c;
|
|
}
|
|
if (this.va != oFont.va) {
|
|
this.va = oDefVal.va;
|
|
}
|
|
if (this.skip != oFont.skip) {
|
|
this.skip = oDefVal.skip;
|
|
}
|
|
if (this.repeat != oFont.repeat) {
|
|
this.repeat = oDefVal.repeat;
|
|
}
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.StyleFont;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.fn:
|
|
return this.fn;
|
|
break;
|
|
case this.Properties.scheme:
|
|
return this.scheme;
|
|
break;
|
|
case this.Properties.fs:
|
|
return this.fs;
|
|
break;
|
|
case this.Properties.b:
|
|
return this.b;
|
|
break;
|
|
case this.Properties.i:
|
|
return this.i;
|
|
break;
|
|
case this.Properties.u:
|
|
return this.u;
|
|
break;
|
|
case this.Properties.s:
|
|
return this.s;
|
|
break;
|
|
case this.Properties.c:
|
|
return this.c;
|
|
break;
|
|
case this.Properties.va:
|
|
return this.va;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.fn:
|
|
this.fn = value;
|
|
break;
|
|
case this.Properties.scheme:
|
|
this.scheme = value;
|
|
break;
|
|
case this.Properties.fs:
|
|
this.fs = value;
|
|
break;
|
|
case this.Properties.b:
|
|
this.b = value;
|
|
break;
|
|
case this.Properties.i:
|
|
this.i = value;
|
|
break;
|
|
case this.Properties.u:
|
|
this.u = value;
|
|
break;
|
|
case this.Properties.s:
|
|
this.s = value;
|
|
break;
|
|
case this.Properties.c:
|
|
this.c = value;
|
|
break;
|
|
case this.Properties.va:
|
|
this.va = value;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
var g_oFillProperties = {
|
|
bg: 0
|
|
};
|
|
function Fill(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultFillAbs;
|
|
}
|
|
this.Properties = g_oFillProperties;
|
|
this.bg = val.bg;
|
|
}
|
|
Fill.prototype = {
|
|
_mergeProperty: function (first, second, def) {
|
|
if (def != first) {
|
|
return first;
|
|
} else {
|
|
return second;
|
|
}
|
|
},
|
|
merge: function (fill) {
|
|
var oRes = new Fill();
|
|
oRes.bg = this._mergeProperty(this.bg, fill.bg, g_oDefaultFill.bg);
|
|
return oRes;
|
|
},
|
|
getRgbOrNull: function () {
|
|
var nRes = null;
|
|
if (null != this.bg) {
|
|
nRes = this.bg.getRgb();
|
|
}
|
|
return nRes;
|
|
},
|
|
getDif: function (val) {
|
|
var oRes = new Fill(this);
|
|
var bEmpty = true;
|
|
if (g_oColorManager.isEqual(this.bg, val.bg)) {
|
|
oRes.bg = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (bEmpty) {
|
|
oRes = null;
|
|
}
|
|
return oRes;
|
|
},
|
|
isEqual: function (fill) {
|
|
return g_oColorManager.isEqual(this.bg, fill.bg);
|
|
},
|
|
clone: function () {
|
|
return new Fill(this);
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.StyleFill;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.bg:
|
|
return this.bg;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.bg:
|
|
this.bg = value;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
var g_oBorderPropProperties = {
|
|
s: 0,
|
|
c: 1
|
|
};
|
|
function BorderProp() {
|
|
this.Properties = g_oBorderPropProperties;
|
|
this.s = c_oAscBorderStyles.None;
|
|
this.w = c_oAscBorderWidth.None;
|
|
this.c = g_oColorManager.getThemeColor(1);
|
|
}
|
|
BorderProp.prototype = {
|
|
setStyle: function (style) {
|
|
this.s = style;
|
|
switch (this.s) {
|
|
case c_oAscBorderStyles.Thin:
|
|
case c_oAscBorderStyles.DashDot:
|
|
case c_oAscBorderStyles.DashDotDot:
|
|
case c_oAscBorderStyles.Dashed:
|
|
case c_oAscBorderStyles.Dotted:
|
|
case c_oAscBorderStyles.Hair:
|
|
this.w = c_oAscBorderWidth.Thin;
|
|
break;
|
|
case c_oAscBorderStyles.Medium:
|
|
case c_oAscBorderStyles.MediumDashDot:
|
|
case c_oAscBorderStyles.MediumDashDotDot:
|
|
case c_oAscBorderStyles.MediumDashed:
|
|
case c_oAscBorderStyles.SlantDashDot:
|
|
this.w = c_oAscBorderWidth.Medium;
|
|
break;
|
|
case c_oAscBorderStyles.Thick:
|
|
case c_oAscBorderStyles.Double:
|
|
this.w = c_oAscBorderWidth.Thick;
|
|
break;
|
|
default:
|
|
this.w = c_oAscBorderWidth.None;
|
|
break;
|
|
}
|
|
},
|
|
getRgbOrNull: function () {
|
|
var nRes = null;
|
|
if (null != this.c) {
|
|
nRes = this.c.getRgb();
|
|
}
|
|
return nRes;
|
|
},
|
|
isEmpty: function () {
|
|
return c_oAscBorderStyles.None === this.s;
|
|
},
|
|
isEqual: function (val) {
|
|
return this.s === val.s && g_oColorManager.isEqual(this.c, val.c);
|
|
},
|
|
clone: function () {
|
|
var res = new BorderProp();
|
|
res.merge(this);
|
|
return res;
|
|
},
|
|
merge: function (oBorderProp) {
|
|
if (null != oBorderProp.s && c_oAscBorderStyles.None !== oBorderProp.s) {
|
|
this.s = oBorderProp.s;
|
|
this.w = oBorderProp.w;
|
|
if (null != oBorderProp.c) {
|
|
this.c = oBorderProp.c;
|
|
}
|
|
}
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.StyleBorderProp;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.s:
|
|
return this.s;
|
|
break;
|
|
case this.Properties.c:
|
|
return this.c;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.s:
|
|
this.setStyle(value);
|
|
break;
|
|
case this.Properties.c:
|
|
this.c = value;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
var g_oBorderProperties = {
|
|
l: 0,
|
|
t: 1,
|
|
r: 2,
|
|
b: 3,
|
|
d: 4,
|
|
ih: 5,
|
|
iv: 6,
|
|
dd: 7,
|
|
du: 8
|
|
};
|
|
function Border(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultBorderAbs;
|
|
}
|
|
this.Properties = g_oBorderProperties;
|
|
this.l = val.l.clone();
|
|
this.t = val.t.clone();
|
|
this.r = val.r.clone();
|
|
this.b = val.b.clone();
|
|
this.d = val.d.clone();
|
|
this.ih = val.ih.clone();
|
|
this.iv = val.iv.clone();
|
|
this.dd = val.dd;
|
|
this.du = val.du;
|
|
}
|
|
Border.prototype = {
|
|
_mergeProperty: function (first, second, def) {
|
|
if ((null != def.isEqual && false == def.isEqual(first)) || (null == def.isEqual && def != first)) {
|
|
return first;
|
|
} else {
|
|
return second;
|
|
}
|
|
},
|
|
merge: function (border) {
|
|
var oRes = new Border();
|
|
oRes.l = this._mergeProperty(this.l, border.l, g_oDefaultBorder.l).clone();
|
|
oRes.t = this._mergeProperty(this.t, border.t, g_oDefaultBorder.t).clone();
|
|
oRes.r = this._mergeProperty(this.r, border.r, g_oDefaultBorder.r).clone();
|
|
oRes.b = this._mergeProperty(this.b, border.b, g_oDefaultBorder.b).clone();
|
|
oRes.d = this._mergeProperty(this.d, border.d, g_oDefaultBorder.d).clone();
|
|
oRes.ih = this._mergeProperty(this.ih, border.ih, g_oDefaultBorder.ih).clone();
|
|
oRes.iv = this._mergeProperty(this.iv, border.iv, g_oDefaultBorder.iv).clone();
|
|
oRes.dd = this._mergeProperty(this.dd, border.dd, g_oDefaultBorder.dd);
|
|
oRes.du = this._mergeProperty(this.du, border.du, g_oDefaultBorder.du);
|
|
return oRes;
|
|
},
|
|
getDif: function (val) {
|
|
var oRes = new Border(this);
|
|
var bEmpty = true;
|
|
if (true == this.l.isEqual(val.l)) {
|
|
oRes.l = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (true == this.t.isEqual(val.t)) {
|
|
oRes.t = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (true == this.r.isEqual(val.r)) {
|
|
oRes.r = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (true == this.b.isEqual(val.b)) {
|
|
oRes.b = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (true == this.d.isEqual(val.d)) {
|
|
oRes.d = null;
|
|
}
|
|
if (true == this.ih.isEqual(val.ih)) {
|
|
oRes.ih = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (true == this.iv.isEqual(val.iv)) {
|
|
oRes.iv = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.dd == val.dd) {
|
|
oRes.dd = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.du == val.du) {
|
|
oRes.du = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (bEmpty) {
|
|
oRes = null;
|
|
}
|
|
return oRes;
|
|
},
|
|
isEqual: function (val) {
|
|
return this.l.isEqual(val.l) && this.t.isEqual(val.t) && this.r.isEqual(val.r) && this.b.isEqual(val.b) && this.d.isEqual(val.d) && this.ih.isEqual(val.ih) && this.iv.isEqual(val.iv) && this.dd == val.dd && this.du == val.du;
|
|
},
|
|
clone: function () {
|
|
return new Border(this);
|
|
},
|
|
clean: function () {
|
|
this.l = g_oDefaultBorder.l.clone();
|
|
this.t = g_oDefaultBorder.t.clone();
|
|
this.r = g_oDefaultBorder.r.clone();
|
|
this.b = g_oDefaultBorder.b.clone();
|
|
this.d = g_oDefaultBorder.d.clone();
|
|
this.ih = g_oDefaultBorder.ih.clone();
|
|
this.iv = g_oDefaultBorder.iv.clone();
|
|
this.dd = g_oDefaultBorder.dd;
|
|
this.du = g_oDefaultBorder.du;
|
|
},
|
|
mergeInner: function (border) {
|
|
if (border) {
|
|
if (border.l) {
|
|
this.l.merge(border.l);
|
|
}
|
|
if (border.t) {
|
|
this.t.merge(border.t);
|
|
}
|
|
if (border.r) {
|
|
this.r.merge(border.r);
|
|
}
|
|
if (border.b) {
|
|
this.b.merge(border.b);
|
|
}
|
|
if (border.d) {
|
|
this.d.merge(border.d);
|
|
}
|
|
if (border.ih) {
|
|
this.ih.merge(border.ih);
|
|
}
|
|
if (border.iv) {
|
|
this.iv.merge(border.iv);
|
|
}
|
|
if (null != border.dd) {
|
|
this.dd = this.dd || border.dd;
|
|
}
|
|
if (null != border.du) {
|
|
this.du = this.du || border.du;
|
|
}
|
|
}
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.StyleBorder;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.l:
|
|
return this.l;
|
|
break;
|
|
case this.Properties.t:
|
|
return this.t;
|
|
break;
|
|
case this.Properties.r:
|
|
return this.r;
|
|
break;
|
|
case this.Properties.b:
|
|
return this.b;
|
|
break;
|
|
case this.Properties.d:
|
|
return this.d;
|
|
break;
|
|
case this.Properties.ih:
|
|
return this.ih;
|
|
break;
|
|
case this.Properties.iv:
|
|
return this.iv;
|
|
break;
|
|
case this.Properties.dd:
|
|
return this.dd;
|
|
break;
|
|
case this.Properties.du:
|
|
return this.du;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.l:
|
|
this.l = value;
|
|
break;
|
|
case this.Properties.t:
|
|
this.t = value;
|
|
break;
|
|
case this.Properties.r:
|
|
this.r = value;
|
|
break;
|
|
case this.Properties.b:
|
|
this.b = value;
|
|
break;
|
|
case this.Properties.d:
|
|
this.d = value;
|
|
break;
|
|
case this.Properties.ih:
|
|
this.ih = value;
|
|
break;
|
|
case this.Properties.iv:
|
|
this.iv = value;
|
|
break;
|
|
case this.Properties.dd:
|
|
this.dd = value;
|
|
break;
|
|
case this.Properties.du:
|
|
this.du = value;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
var g_oNumProperties = {
|
|
f: 0
|
|
};
|
|
function Num(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultNumAbs;
|
|
}
|
|
this.Properties = g_oNumProperties;
|
|
this.f = val.f;
|
|
}
|
|
Num.prototype = {
|
|
merge: function (num) {
|
|
var oRes = new Num();
|
|
if (g_oDefaultNum.f != this.f) {
|
|
oRes.f = this.f;
|
|
} else {
|
|
oRes.f = num.f;
|
|
}
|
|
return oRes;
|
|
},
|
|
getDif: function (val) {
|
|
var oRes = new Num(this);
|
|
var bEmpty = true;
|
|
if (this.f == val.f) {
|
|
oRes.f = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (bEmpty) {
|
|
oRes = null;
|
|
}
|
|
return oRes;
|
|
},
|
|
isEqual: function (val) {
|
|
return this.f == val.f;
|
|
},
|
|
clone: function () {
|
|
return new Num(this);
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.StyleNum;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.f:
|
|
return this.f;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.f:
|
|
this.f = value;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
var g_oCellXfsProperties = {
|
|
border: 0,
|
|
fill: 1,
|
|
font: 2,
|
|
num: 3,
|
|
align: 4,
|
|
QuotePrefix: 5,
|
|
XfId: 6
|
|
};
|
|
function CellXfs() {
|
|
this.Properties = g_oCellXfsProperties;
|
|
this.border = null;
|
|
this.fill = null;
|
|
this.font = null;
|
|
this.num = null;
|
|
this.align = null;
|
|
this.QuotePrefix = null;
|
|
this.XfId = null;
|
|
this.isReference = false;
|
|
}
|
|
CellXfs.prototype = {
|
|
_mergeProperty: function (first, second) {
|
|
var res = null;
|
|
if (null != first || null != second) {
|
|
if (null == first) {
|
|
res = second;
|
|
} else {
|
|
if (null == second) {
|
|
res = first;
|
|
} else {
|
|
if (null != first.merge) {
|
|
res = first.merge(second);
|
|
} else {
|
|
res = first;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return res;
|
|
},
|
|
merge: function (xfs) {
|
|
var oRes = new CellXfs();
|
|
oRes.border = this._mergeProperty(this.border, xfs.border);
|
|
oRes.fill = this._mergeProperty(this.fill, xfs.fill);
|
|
oRes.font = this._mergeProperty(this.font, xfs.font);
|
|
oRes.num = this._mergeProperty(this.num, xfs.num);
|
|
oRes.align = this._mergeProperty(this.align, xfs.align);
|
|
oRes.QuotePrefix = this._mergeProperty(this.QuotePrefix, xfs.QuotePrefix);
|
|
oRes.XfId = this._mergeProperty(this.XfId, xfs.XfId);
|
|
return oRes;
|
|
},
|
|
clone: function () {
|
|
var res = new CellXfs();
|
|
if (null != this.border) {
|
|
res.border = this.border.clone();
|
|
}
|
|
if (null != this.fill) {
|
|
res.fill = this.fill.clone();
|
|
}
|
|
if (null != this.font) {
|
|
res.font = this.font.clone();
|
|
}
|
|
if (null != this.num) {
|
|
res.num = this.num.clone();
|
|
}
|
|
if (null != this.align) {
|
|
res.align = this.align.clone();
|
|
}
|
|
if (null != this.QuotePrefix) {
|
|
res.QuotePrefix = this.QuotePrefix;
|
|
}
|
|
if (null !== this.XfId) {
|
|
res.XfId = this.XfId;
|
|
}
|
|
return res;
|
|
},
|
|
isEqual: function (xfs) {
|
|
if (false == ((null == this.border && null == xfs.border) || (null != this.border && null != xfs.border && this.border.isEqual(xfs.border)))) {
|
|
return false;
|
|
}
|
|
if (false == ((null == this.fill && null == xfs.fill) || (null != this.fill && null != xfs.fill && this.fill.isEqual(xfs.fill)))) {
|
|
return false;
|
|
}
|
|
if (false == ((null == this.font && null == xfs.font) || (null != this.font && null != xfs.font && this.font.isEqual(xfs.font)))) {
|
|
return false;
|
|
}
|
|
if (false == ((null == this.num && null == xfs.num) || (null != this.num && null != xfs.num && this.num.isEqual(xfs.num)))) {
|
|
return false;
|
|
}
|
|
if (false == ((null == this.align && null == xfs.align) || (null != this.align && null != xfs.align && this.align.isEqual(xfs.align)))) {
|
|
return false;
|
|
}
|
|
if (this.QuotePrefix != xfs.QuotePrefix) {
|
|
return false;
|
|
}
|
|
if (this.XfId != xfs.XfId) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.StyleXfs;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.border:
|
|
return this.border;
|
|
break;
|
|
case this.Properties.fill:
|
|
return this.fill;
|
|
break;
|
|
case this.Properties.font:
|
|
return this.font;
|
|
break;
|
|
case this.Properties.num:
|
|
return this.num;
|
|
break;
|
|
case this.Properties.align:
|
|
return this.align;
|
|
break;
|
|
case this.Properties.QuotePrefix:
|
|
return this.QuotePrefix;
|
|
break;
|
|
case this.Properties.XfId:
|
|
return this.XfId;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.border:
|
|
this.border = value;
|
|
break;
|
|
case this.Properties.fill:
|
|
this.fill = value;
|
|
break;
|
|
case this.Properties.font:
|
|
this.font = value;
|
|
break;
|
|
case this.Properties.num:
|
|
this.num = value;
|
|
break;
|
|
case this.Properties.align:
|
|
this.align = value;
|
|
break;
|
|
case this.Properties.QuotePrefix:
|
|
this.QuotePrefix = value;
|
|
break;
|
|
case this.Properties.XfId:
|
|
this.XfId = value;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
var g_oAlignProperties = {
|
|
hor: 0,
|
|
indent: 1,
|
|
RelativeIndent: 2,
|
|
shrink: 3,
|
|
angle: 4,
|
|
ver: 5,
|
|
wrap: 6
|
|
};
|
|
function Align(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultAlignAbs;
|
|
}
|
|
this.Properties = g_oAlignProperties;
|
|
this.hor = val.hor;
|
|
this.indent = val.indent;
|
|
this.RelativeIndent = val.RelativeIndent;
|
|
this.shrink = val.shrink;
|
|
this.angle = val.angle;
|
|
this.ver = val.ver;
|
|
this.wrap = val.wrap;
|
|
}
|
|
Align.prototype = {
|
|
_mergeProperty: function (first, second, def) {
|
|
if (false == def.isEqual(first)) {
|
|
return first;
|
|
} else {
|
|
return second;
|
|
}
|
|
},
|
|
merge: function (border) {
|
|
var oRes = new Align();
|
|
oRes.hor = this._mergeProperty(this.hor, border.hor, g_oDefaultAlign.hor);
|
|
oRes.indent = this._mergeProperty(this.indent, border.indent, g_oDefaultAlign.indent);
|
|
oRes.RelativeIndent = this._mergeProperty(this.RelativeIndent, border.RelativeIndent, g_oDefaultAlign.RelativeIndent);
|
|
oRes.shrink = this._mergeProperty(this.shrink, border.shrink, g_oDefaultAlign.shrink);
|
|
oRes.angle = this._mergeProperty(this.angle, border.angle, g_oDefaultAlign.angle);
|
|
oRes.ver = this._mergeProperty(this.ver, border.ver, g_oDefaultAlign.ver);
|
|
oRes.wrap = this._mergeProperty(this.wrap, border.wrap, g_oDefaultAlign.wrap);
|
|
return oRes;
|
|
},
|
|
getDif: function (val) {
|
|
var oRes = new Align(this);
|
|
var bEmpty = true;
|
|
if (this.hor == val.hor) {
|
|
oRes.hor = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.indent == val.indent) {
|
|
oRes.indent = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.RelativeIndent == val.RelativeIndent) {
|
|
oRes.RelativeIndent = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.shrink == val.shrink) {
|
|
oRes.shrink = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.angle == val.angle) {
|
|
oRes.angle = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.ver == val.ver) {
|
|
oRes.ver = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (this.wrap == val.wrap) {
|
|
oRes.wrap = null;
|
|
} else {
|
|
bEmpty = false;
|
|
}
|
|
if (bEmpty) {
|
|
oRes = null;
|
|
}
|
|
return oRes;
|
|
},
|
|
isEqual: function (val) {
|
|
return this.hor == val.hor && this.indent == val.indent && this.RelativeIndent == val.RelativeIndent && this.shrink == val.shrink && this.angle == val.angle && this.ver == val.ver && this.wrap == val.wrap;
|
|
},
|
|
clone: function () {
|
|
return new Align(this);
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.StyleAlign;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.hor:
|
|
return this.hor;
|
|
break;
|
|
case this.Properties.indent:
|
|
return this.indent;
|
|
break;
|
|
case this.Properties.RelativeIndent:
|
|
return this.RelativeIndent;
|
|
break;
|
|
case this.Properties.shrink:
|
|
return this.shrink;
|
|
break;
|
|
case this.Properties.angle:
|
|
return this.angle;
|
|
break;
|
|
case this.Properties.ver:
|
|
return this.ver;
|
|
break;
|
|
case this.Properties.wrap:
|
|
return this.wrap;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.hor:
|
|
this.hor = value;
|
|
break;
|
|
case this.Properties.indent:
|
|
this.indent = value;
|
|
break;
|
|
case this.Properties.RelativeIndent:
|
|
this.RelativeIndent = value;
|
|
break;
|
|
case this.Properties.shrink:
|
|
this.shrink = value;
|
|
break;
|
|
case this.Properties.angle:
|
|
this.angle = value;
|
|
break;
|
|
case this.Properties.ver:
|
|
this.ver = value;
|
|
break;
|
|
case this.Properties.wrap:
|
|
this.wrap = value;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
function CCellStyles() {
|
|
this.CustomStyles = [];
|
|
this.DefaultStyles = [];
|
|
this.AllStyles = {};
|
|
}
|
|
CCellStyles.prototype.generateFontMap = function (oFontMap) {
|
|
this._generateFontMap(oFontMap, this.DefaultStyles);
|
|
this._generateFontMap(oFontMap, this.CustomStyles);
|
|
};
|
|
CCellStyles.prototype._generateFontMap = function (oFontMap, aStyles) {
|
|
var i, length, oStyle;
|
|
for (i = 0, length = aStyles.length; i < length; ++i) {
|
|
oStyle = aStyles[i];
|
|
if (null != oStyle.xfs && null != oStyle.xfs.font && null != oStyle.xfs.font.fn) {
|
|
oFontMap[oStyle.xfs.font.fn] = 1;
|
|
}
|
|
}
|
|
};
|
|
CCellStyles.prototype.getDefaultStylesCount = function () {
|
|
var nCount = this.DefaultStyles.length;
|
|
for (var i = 0, length = nCount; i < length; ++i) {
|
|
if (this.DefaultStyles[i].Hidden) {
|
|
--nCount;
|
|
}
|
|
}
|
|
return nCount;
|
|
};
|
|
CCellStyles.prototype.getCustomStylesCount = function () {
|
|
var nCount = this.CustomStyles.length;
|
|
for (var i = 0, length = nCount; i < length; ++i) {
|
|
if (this.CustomStyles[i].Hidden || null != this.CustomStyles[i].BuiltinId) {
|
|
--nCount;
|
|
}
|
|
}
|
|
return nCount;
|
|
};
|
|
CCellStyles.prototype.getStyleByXfId = function (oXfId) {
|
|
for (var i = 0, length = this.CustomStyles.length; i < length; ++i) {
|
|
if (oXfId === this.CustomStyles[i].XfId) {
|
|
return this.CustomStyles[i];
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
CCellStyles.prototype.getStyleNameByXfId = function (oXfId) {
|
|
var styleName = null;
|
|
if (null === oXfId) {
|
|
return styleName;
|
|
}
|
|
var style = null;
|
|
for (var i = 0, length = this.CustomStyles.length; i < length; ++i) {
|
|
style = this.CustomStyles[i];
|
|
if (oXfId === style.XfId) {
|
|
if (null !== style.BuiltinId) {
|
|
styleName = this.getDefaultStyleNameByBuiltinId(style.BuiltinId);
|
|
if (null === styleName) {
|
|
styleName = style.Name;
|
|
}
|
|
break;
|
|
} else {
|
|
styleName = style.Name;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return styleName;
|
|
};
|
|
CCellStyles.prototype.getDefaultStyleNameByBuiltinId = function (oBuiltinId) {
|
|
var style = null;
|
|
for (var i = 0, length = this.DefaultStyles.length; i < length; ++i) {
|
|
style = this.DefaultStyles[i];
|
|
if (style.BuiltinId === oBuiltinId) {
|
|
return style.Name;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
CCellStyles.prototype.getCustomStyleByBuiltinId = function (oBuiltinId) {
|
|
var style = null;
|
|
for (var i = 0, length = this.CustomStyles.length; i < length; ++i) {
|
|
style = this.CustomStyles[i];
|
|
if (style.BuiltinId === oBuiltinId) {
|
|
return style;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
CCellStyles.prototype._prepareCellStyle = function (name) {
|
|
var defaultStyle = null;
|
|
var style = null;
|
|
var i, length;
|
|
var maxXfId = -1;
|
|
for (i = 0, length = this.DefaultStyles.length; i < length; ++i) {
|
|
if (name === this.DefaultStyles[i].Name) {
|
|
defaultStyle = this.DefaultStyles[i];
|
|
break;
|
|
}
|
|
}
|
|
if (defaultStyle) {
|
|
for (i = 0, length = this.CustomStyles.length; i < length; ++i) {
|
|
if (defaultStyle.BuiltinId === this.CustomStyles[i].BuiltinId) {
|
|
style = this.CustomStyles[i];
|
|
break;
|
|
}
|
|
maxXfId = Math.max(maxXfId, this.CustomStyles[i].XfId);
|
|
}
|
|
} else {
|
|
for (i = 0, length = this.CustomStyles.length; i < length; ++i) {
|
|
if (name === this.CustomStyles[i].Name) {
|
|
style = this.CustomStyles[i];
|
|
break;
|
|
}
|
|
maxXfId = Math.max(maxXfId, this.CustomStyles[i].XfId);
|
|
}
|
|
}
|
|
if (style) {
|
|
return style.XfId;
|
|
}
|
|
if (defaultStyle) {
|
|
this.CustomStyles[i] = defaultStyle.clone();
|
|
this.CustomStyles[i].XfId = ++maxXfId;
|
|
return this.CustomStyles[i].XfId;
|
|
}
|
|
return g_oDefaultXfId;
|
|
};
|
|
function CCellStyle() {
|
|
this.BuiltinId = null;
|
|
this.CustomBuiltin = null;
|
|
this.Hidden = null;
|
|
this.ILevel = null;
|
|
this.Name = null;
|
|
this.XfId = null;
|
|
this.xfs = null;
|
|
this.ApplyBorder = true;
|
|
this.ApplyFill = true;
|
|
this.ApplyFont = true;
|
|
this.ApplyNumberFormat = true;
|
|
}
|
|
CCellStyle.prototype.clone = function () {
|
|
var oNewStyle = new CCellStyle();
|
|
oNewStyle.BuiltinId = this.BuiltinId;
|
|
oNewStyle.CustomBuiltin = this.CustomBuiltin;
|
|
oNewStyle.Hidden = this.Hidden;
|
|
oNewStyle.ILevel = this.ILevel;
|
|
oNewStyle.Name = this.Name;
|
|
oNewStyle.ApplyBorder = this.ApplyBorder;
|
|
oNewStyle.ApplyFill = this.ApplyFill;
|
|
oNewStyle.ApplyFont = this.ApplyFont;
|
|
oNewStyle.ApplyNumberFormat = this.ApplyNumberFormat;
|
|
oNewStyle.xfs = this.xfs.clone();
|
|
return oNewStyle;
|
|
};
|
|
CCellStyle.prototype.getFill = function () {
|
|
if (null != this.xfs && null != this.xfs.fill) {
|
|
return this.xfs.fill.bg;
|
|
}
|
|
return g_oDefaultFill.bg;
|
|
};
|
|
CCellStyle.prototype.getFontColor = function () {
|
|
if (null != this.xfs && null != this.xfs.font) {
|
|
return this.xfs.font.c;
|
|
}
|
|
return g_oDefaultFont.c;
|
|
};
|
|
CCellStyle.prototype.getFont = function () {
|
|
if (null != this.xfs && null != this.xfs.font) {
|
|
return this.xfs.font;
|
|
}
|
|
return g_oDefaultFont;
|
|
};
|
|
CCellStyle.prototype.getBorder = function () {
|
|
if (null != this.xfs && null != this.xfs.border) {
|
|
return this.xfs.border;
|
|
}
|
|
return g_oDefaultBorder;
|
|
};
|
|
CCellStyle.prototype.getNumFormatStr = function () {
|
|
if (null != this.xfs && null != this.xfs.num) {
|
|
return this.xfs.num.f;
|
|
}
|
|
return g_oDefaultNum.f;
|
|
};
|
|
function StyleManager() {
|
|
this.oDefaultFont = null;
|
|
this.oDefaultAlign = null;
|
|
this.oDefaultQuotePrefix = null;
|
|
this.oDefaultXfs = new CellXfs();
|
|
}
|
|
StyleManager.prototype = {
|
|
init: function (oDefaultXfs) {
|
|
if (null != oDefaultXfs.font) {
|
|
g_oDefaultFont = oDefaultXfs.font.clone();
|
|
}
|
|
if (null != oDefaultXfs.fill) {
|
|
g_oDefaultFill = oDefaultXfs.fill.clone();
|
|
}
|
|
if (null != oDefaultXfs.border) {
|
|
g_oDefaultBorder = oDefaultXfs.border.clone();
|
|
}
|
|
if (null != oDefaultXfs.num) {
|
|
g_oDefaultNum = oDefaultXfs.num.clone();
|
|
}
|
|
if (null != oDefaultXfs.align) {
|
|
g_oDefaultAlign = oDefaultXfs.align.clone();
|
|
}
|
|
if (null !== oDefaultXfs.XfId) {
|
|
this.oDefaultXfs.XfId = oDefaultXfs.XfId;
|
|
g_oDefaultXfId = oDefaultXfs.XfId;
|
|
}
|
|
this.oDefaultXfs = oDefaultXfs;
|
|
},
|
|
_prepareSetReference: function (oItemWithXfs) {
|
|
if (oItemWithXfs.xfs.isReference) {
|
|
oItemWithXfs.xfs = oItemWithXfs.xfs.clone();
|
|
}
|
|
return oItemWithXfs.xfs;
|
|
},
|
|
_prepareSet: function (oItemWithXfs) {
|
|
if (null == oItemWithXfs.xfs) {
|
|
if (oItemWithXfs.getDefaultXfs) {
|
|
oItemWithXfs.xfs = oItemWithXfs.getDefaultXfs();
|
|
}
|
|
if (null == oItemWithXfs.xfs) {
|
|
oItemWithXfs.xfs = this.oDefaultXfs.clone();
|
|
}
|
|
} else {
|
|
this._prepareSetReference(oItemWithXfs);
|
|
}
|
|
return oItemWithXfs.xfs;
|
|
},
|
|
_prepareSetFont: function (oItemWithXfs) {
|
|
var xfs = this._prepareSet(oItemWithXfs);
|
|
if (null == xfs.font) {
|
|
xfs.font = g_oDefaultFont.clone();
|
|
}
|
|
return xfs;
|
|
},
|
|
_prepareSetAlign: function (oItemWithXfs) {
|
|
var xfs = this._prepareSet(oItemWithXfs);
|
|
if (null == xfs.align) {
|
|
xfs.align = g_oDefaultAlign.clone();
|
|
}
|
|
return xfs;
|
|
},
|
|
_prepareSetCellStyle: function (oItemWithXfs) {
|
|
return this._prepareSet(oItemWithXfs);
|
|
},
|
|
setCellStyle: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.XfId) {
|
|
oRes.oldVal = xfs.XfId;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultXfId;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.XfId = g_oDefaultXfId;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetCellStyle(oItemWithXfs);
|
|
xfs.XfId = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setNumFormat: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.num) {
|
|
oRes.oldVal = xfs.num.f;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultNum.f;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.num = null;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSet(oItemWithXfs);
|
|
if (null == xfs.num) {
|
|
xfs.num = g_oDefaultNum.clone();
|
|
}
|
|
xfs.num.f = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setFont: function (oItemWithXfs, val, oHistoryObj, nHistoryId, sSheetId, oRange) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.font) {
|
|
oRes.oldVal = xfs.font;
|
|
} else {
|
|
oRes.oldVal = null;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.font = null;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font = val.clone();
|
|
}
|
|
return oRes;
|
|
},
|
|
setFontname: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.font) {
|
|
oRes.oldVal = xfs.font.fn;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultFont.fn;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.font) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.font.fn = g_oDefaultFont.fn;
|
|
xfs.font.scheme = Asc.EFontScheme.fontschemeNone;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font.fn = val;
|
|
xfs.font.scheme = Asc.EFontScheme.fontschemeNone;
|
|
}
|
|
return oRes;
|
|
},
|
|
setFontsize: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.font) {
|
|
oRes.oldVal = xfs.font.fs;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultFont.fs;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.font) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.font.fs = g_oDefaultFont.fs;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font.fs = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setFontcolor: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.font) {
|
|
oRes.oldVal = xfs.font.c;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultFont.c;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.font) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.font.c = g_oDefaultFont.c;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font.c = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setBold: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.font) {
|
|
oRes.oldVal = xfs.font.b;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultFont.b;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.font) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.font.b = g_oDefaultFont.b;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font.b = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setItalic: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.font) {
|
|
oRes.oldVal = xfs.font.i;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultFont.i;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.font) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.font.i = g_oDefaultFont.i;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font.i = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setUnderline: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.font) {
|
|
oRes.oldVal = xfs.font.u;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultFont.u;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.font) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.font.u = g_oDefaultFont.u;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font.u = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setStrikeout: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.font) {
|
|
oRes.oldVal = xfs.font.s;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultFont.s;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.font) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.font.s = g_oDefaultFont.s;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font.s = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setFontAlign: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.font) {
|
|
oRes.oldVal = xfs.font.va;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultFont.va;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.font) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.font.va = g_oDefaultFont.va;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font.va = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setAlignVertical: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.align) {
|
|
oRes.oldVal = xfs.align.ver;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultAlign.ver;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.align) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.align.ver = g_oDefaultAlign.ver;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetAlign(oItemWithXfs);
|
|
xfs.align.ver = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setAlignHorizontal: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.align) {
|
|
oRes.oldVal = xfs.align.hor;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultAlign.hor;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.align) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.align.hor = g_oDefaultAlign.hor;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetAlign(oItemWithXfs);
|
|
xfs.align.hor = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setFill: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.fill) {
|
|
oRes.oldVal = xfs.fill.bg;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultFill.bg;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.fill) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.fill.bg = g_oDefaultFill.bg;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSet(oItemWithXfs);
|
|
if (null == xfs.fill) {
|
|
xfs.fill = g_oDefaultFill.clone();
|
|
}
|
|
xfs.fill.bg = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setBorder: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.border) {
|
|
oRes.oldVal = xfs.border;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultBorder;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.border) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.border = val;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSet(oItemWithXfs);
|
|
xfs.border = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setShrinkToFit: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.align) {
|
|
oRes.oldVal = xfs.align.shrink;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultAlign.shrink;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.align) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.align.shrink = g_oDefaultAlign.shrink;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetAlign(oItemWithXfs);
|
|
xfs.align.shrink = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setWrap: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.align) {
|
|
oRes.oldVal = xfs.align.wrap;
|
|
} else {
|
|
oRes.oldVal = g_oDefaultAlign.wrap;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.align) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.align.wrap = g_oDefaultAlign.wrap;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetAlign(oItemWithXfs);
|
|
xfs.align.wrap = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setQuotePrefix: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
if (null != xfs && null != xfs.QuotePrefix) {
|
|
oRes.oldVal = xfs.QuotePrefix;
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.QuotePrefix = val;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSet(oItemWithXfs);
|
|
xfs.QuotePrefix = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setAngle: function (oItemWithXfs, val) {
|
|
var xfs = oItemWithXfs.xfs;
|
|
var oRes = {
|
|
newVal: val,
|
|
oldVal: null
|
|
};
|
|
val = angleInterfaceToFormat(val);
|
|
if (null != xfs && null != xfs.align) {
|
|
oRes.oldVal = angleFormatToInterface2(xfs.align.angle);
|
|
} else {
|
|
oRes.oldVal = angleFormatToInterface2(g_oDefaultAlign.angle);
|
|
}
|
|
if (null == val) {
|
|
if (null != xfs && null != xfs.align) {
|
|
xfs = this._prepareSetReference(oItemWithXfs);
|
|
xfs.align.angle = g_oDefaultAlign.angle;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetAlign(oItemWithXfs);
|
|
xfs.align.angle = val;
|
|
}
|
|
return oRes;
|
|
},
|
|
setVerticalText: function (oItemWithXfs, val) {
|
|
if (true == val) {
|
|
return this.setAngle(oItemWithXfs, g_nVerticalTextAngle);
|
|
} else {
|
|
return this.setAngle(oItemWithXfs, 0);
|
|
}
|
|
}
|
|
};
|
|
var g_oHyperlinkProperties = {
|
|
Ref: 0,
|
|
Location: 1,
|
|
Hyperlink: 2,
|
|
Tooltip: 3
|
|
};
|
|
function Hyperlink() {
|
|
this.Properties = g_oHyperlinkProperties;
|
|
this.Ref = null;
|
|
this.Hyperlink = null;
|
|
this.Tooltip = null;
|
|
this.Location = null;
|
|
this.LocationSheet = null;
|
|
this.LocationRange = null;
|
|
this.bUpdateLocation = false;
|
|
this.bVisited = false;
|
|
}
|
|
Hyperlink.prototype = {
|
|
clone: function (oNewWs) {
|
|
var oNewHyp = new Hyperlink();
|
|
if (null !== this.Ref) {
|
|
oNewHyp.Ref = this.Ref.clone(oNewWs);
|
|
}
|
|
if (null !== this.getLocation()) {
|
|
oNewHyp.setLocation(this.getLocation());
|
|
}
|
|
if (null !== this.LocationSheet) {
|
|
oNewHyp.LocationSheet = this.LocationSheet;
|
|
}
|
|
if (null !== this.LocationRange) {
|
|
oNewHyp.LocationRange = this.LocationRange;
|
|
}
|
|
if (null !== this.Hyperlink) {
|
|
oNewHyp.Hyperlink = this.Hyperlink;
|
|
}
|
|
if (null !== this.Tooltip) {
|
|
oNewHyp.Tooltip = this.Tooltip;
|
|
}
|
|
if (null !== this.bVisited) {
|
|
oNewHyp.bVisited = this.bVisited;
|
|
}
|
|
return oNewHyp;
|
|
},
|
|
isEqual: function (obj) {
|
|
var bRes = (this.getLocation() == obj.getLocation() && this.Hyperlink == obj.Hyperlink && this.Tooltip == obj.Tooltip);
|
|
if (bRes) {
|
|
var oBBoxRef = this.Ref.getBBox0();
|
|
var oBBoxObj = obj.Ref.getBBox0();
|
|
bRes = (oBBoxRef.r1 == oBBoxObj.r1 && oBBoxRef.c1 == oBBoxObj.c1 && oBBoxRef.r2 == oBBoxObj.r2 && oBBoxRef.c2 == oBBoxObj.c2);
|
|
}
|
|
return bRes;
|
|
},
|
|
isValid: function () {
|
|
return null != this.Ref && (null != this.getLocation() || null != this.Hyperlink);
|
|
},
|
|
setLocationSheet: function (LocationSheet) {
|
|
this.LocationSheet = LocationSheet;
|
|
this.bUpdateLocation = true;
|
|
},
|
|
setLocationRange: function (LocationRange) {
|
|
this.LocationRange = LocationRange;
|
|
this.bUpdateLocation = true;
|
|
},
|
|
setLocation: function (Location) {
|
|
this.bUpdateLocation = false;
|
|
this.Location = Location;
|
|
this.LocationSheet = this.LocationRange = null;
|
|
if (null != this.Location) {
|
|
var result = parserHelp.parse3DRef(this.Location);
|
|
if (null !== result) {
|
|
this.LocationSheet = result.sheet;
|
|
this.LocationRange = result.range;
|
|
}
|
|
}
|
|
},
|
|
getLocation: function () {
|
|
if (this.bUpdateLocation) {
|
|
this._updateLocation();
|
|
}
|
|
return this.Location;
|
|
},
|
|
_updateLocation: function () {
|
|
this.bUpdateLocation = false;
|
|
if (null === this.LocationSheet || null === this.LocationRange) {
|
|
this.Location = null;
|
|
} else {
|
|
this.Location = parserHelp.get3DRef(this.LocationSheet, this.LocationRange);
|
|
}
|
|
},
|
|
setVisited: function (bVisited) {
|
|
this.bVisited = bVisited;
|
|
if (this.Ref) {
|
|
this.Ref.cleanCache();
|
|
}
|
|
},
|
|
getVisited: function () {
|
|
return this.bVisited;
|
|
},
|
|
getHyperlinkType: function () {
|
|
return null !== this.Hyperlink ? c_oAscHyperlinkType.WebLink : c_oAscHyperlinkType.RangeLink;
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.Hyperlink;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.Ref:
|
|
return parserHelp.get3DRef(this.Ref.worksheet.getName(), this.Ref.getName());
|
|
break;
|
|
case this.Properties.Location:
|
|
return this.getLocation();
|
|
break;
|
|
case this.Properties.Hyperlink:
|
|
return this.Hyperlink;
|
|
break;
|
|
case this.Properties.Tooltip:
|
|
return this.Tooltip;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.Ref:
|
|
var oRefParsed = parserHelp.parse3DRef(value);
|
|
if (null !== oRefParsed) {
|
|
var ws = window["Asc"]["editor"].wbModel.getWorksheetByName(oRefParsed.sheet);
|
|
if (ws) {
|
|
this.Ref = ws.getRange2(oRefParsed.range);
|
|
}
|
|
}
|
|
break;
|
|
case this.Properties.Location:
|
|
this.setLocation(value);
|
|
break;
|
|
case this.Properties.Hyperlink:
|
|
this.Hyperlink = value;
|
|
break;
|
|
case this.Properties.Tooltip:
|
|
this.Tooltip = value;
|
|
break;
|
|
}
|
|
},
|
|
applyCollaborative: function (nSheetId, collaborativeEditing) {
|
|
var bbox = this.Ref.getBBox0();
|
|
var OffsetFirst = {
|
|
offsetCol: 0,
|
|
offsetRow: 0
|
|
};
|
|
var OffsetLast = {
|
|
offsetCol: 0,
|
|
offsetRow: 0
|
|
};
|
|
OffsetFirst.offsetRow = collaborativeEditing.getLockMeRow2(nSheetId, bbox.r1) - bbox.r1;
|
|
OffsetFirst.offsetCol = collaborativeEditing.getLockMeColumn2(nSheetId, bbox.c1) - bbox.c1;
|
|
OffsetLast.offsetRow = collaborativeEditing.getLockMeRow2(nSheetId, bbox.r2) - bbox.r2;
|
|
OffsetLast.offsetCol = collaborativeEditing.getLockMeColumn2(nSheetId, bbox.c2) - bbox.c2;
|
|
this.Ref.setOffsetFirst(OffsetFirst);
|
|
this.Ref.setOffsetLast(OffsetLast);
|
|
}
|
|
};
|
|
function SheetFormatPr() {
|
|
this.nBaseColWidth = null;
|
|
this.dDefaultColWidth = null;
|
|
this.oAllRow = null;
|
|
}
|
|
SheetFormatPr.prototype = {
|
|
clone: function () {
|
|
var oRes = new SheetFormatPr();
|
|
oRes.nBaseColWidth = this.nBaseColWidth;
|
|
oRes.dDefaultColWidth = this.dDefaultColWidth;
|
|
if (null != this.oAllRow) {
|
|
oRes.oAllRow = this.oAllRow.clone();
|
|
}
|
|
return oRes;
|
|
}
|
|
};
|
|
function Col(worksheet, index) {
|
|
this.ws = worksheet;
|
|
this.index = index;
|
|
this.BestFit = null;
|
|
this.hd = null;
|
|
this.CustomWidth = null;
|
|
this.width = null;
|
|
this.xfs = null;
|
|
}
|
|
Col.prototype = {
|
|
moveHor: function (nDif) {
|
|
this.index += nDif;
|
|
},
|
|
isEqual: function (obj) {
|
|
var bRes = this.BestFit == obj.BestFit && this.hd == obj.hd && this.width == obj.width && this.CustomWidth == obj.CustomWidth;
|
|
if (bRes) {
|
|
if (null != this.xfs && null != obj.xfs) {
|
|
bRes = this.xfs.isEqual(obj.xfs);
|
|
} else {
|
|
if (null != this.xfs || null != obj.xfs) {
|
|
bRes = false;
|
|
}
|
|
}
|
|
}
|
|
return bRes;
|
|
},
|
|
isEmpty: function () {
|
|
return null == this.BestFit && null == this.hd && null == this.width && null == this.xfs && null == this.CustomWidth;
|
|
},
|
|
Remove: function () {
|
|
this.ws._removeCol(this.index);
|
|
},
|
|
clone: function (oNewWs) {
|
|
if (!oNewWs) {
|
|
oNewWs = this.ws;
|
|
}
|
|
var oNewCol = new Col(oNewWs, this.index);
|
|
if (null != this.BestFit) {
|
|
oNewCol.BestFit = this.BestFit;
|
|
}
|
|
if (null != this.hd) {
|
|
oNewCol.hd = this.hd;
|
|
}
|
|
if (null != this.width) {
|
|
oNewCol.width = this.width;
|
|
}
|
|
if (null != this.CustomWidth) {
|
|
oNewCol.CustomWidth = this.CustomWidth;
|
|
}
|
|
if (null != this.xfs) {
|
|
oNewCol.xfs = this.xfs.clone();
|
|
}
|
|
return oNewCol;
|
|
},
|
|
getWidthProp: function () {
|
|
return new UndoRedoData_ColProp(this);
|
|
},
|
|
setWidthProp: function (prop) {
|
|
if (null != prop) {
|
|
if (null != prop.width) {
|
|
this.width = prop.width;
|
|
} else {
|
|
this.width = null;
|
|
}
|
|
if (null != prop.hd) {
|
|
this.hd = prop.hd;
|
|
} else {
|
|
this.hd = null;
|
|
}
|
|
if (null != prop.CustomWidth) {
|
|
this.CustomWidth = prop.CustomWidth;
|
|
} else {
|
|
this.CustomWidth = null;
|
|
}
|
|
if (null != prop.BestFit) {
|
|
this.BestFit = prop.BestFit;
|
|
} else {
|
|
this.BestFit = null;
|
|
}
|
|
}
|
|
},
|
|
getStyle: function () {
|
|
return this.xfs;
|
|
},
|
|
_getUpdateRange: function () {
|
|
if (g_nAllColIndex == this.index) {
|
|
return new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0);
|
|
} else {
|
|
return new Asc.Range(this.index, 0, this.index, gc_nMaxRow0);
|
|
}
|
|
},
|
|
setStyle: function (xfs) {
|
|
var oldVal = this.xfs;
|
|
var newVal = null;
|
|
this.xfs = null;
|
|
if (null != xfs) {
|
|
this.xfs = xfs.clone();
|
|
newVal = xfs;
|
|
}
|
|
if (History.Is_On() && false == ((null == oldVal && null == newVal) || (null != oldVal && null != newVal && true == oldVal.isEqual(newVal)))) {
|
|
if (null != oldVal) {
|
|
oldVal = oldVal.clone();
|
|
}
|
|
if (null != newVal) {
|
|
newVal = newVal.clone();
|
|
}
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_SetStyle, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oldVal, newVal));
|
|
}
|
|
},
|
|
setCellStyle: function (val) {
|
|
var newVal = this.ws.workbook.CellStyles._prepareCellStyle(val);
|
|
var oRes = this.ws.workbook.oStyleManager.setCellStyle(this, newVal);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
var oldStyleName = this.ws.workbook.CellStyles.getStyleNameByXfId(oRes.oldVal);
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_SetCellStyle, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oldStyleName, val));
|
|
var oStyle = this.ws.workbook.CellStyles.getStyleByXfId(oRes.newVal);
|
|
if (oStyle.ApplyFont) {
|
|
this.setFont(oStyle.getFont());
|
|
}
|
|
if (oStyle.ApplyFill) {
|
|
this.setFill(oStyle.getFill());
|
|
}
|
|
if (oStyle.ApplyBorder) {
|
|
this.setBorder(oStyle.getBorder());
|
|
}
|
|
if (oStyle.ApplyNumberFormat) {
|
|
this.setNumFormat(oStyle.getNumFormatStr());
|
|
}
|
|
}
|
|
},
|
|
setNumFormat: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setNumFormat(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_NumFormat, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFont: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFont(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
var oldVal = null;
|
|
if (null != oRes.oldVal) {
|
|
oldVal = oRes.oldVal.clone();
|
|
}
|
|
var newVal = null;
|
|
if (null != oRes.newVal) {
|
|
newVal = oRes.newVal.clone();
|
|
}
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_SetFont, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oldVal, newVal));
|
|
}
|
|
},
|
|
setFontname: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFontname(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Fontname, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontsize: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFontsize(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Fontsize, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontcolor: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFontcolor(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Fontcolor, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setBold: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setBold(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Bold, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setItalic: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setItalic(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Italic, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setUnderline: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setUnderline(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Underline, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setStrikeout: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setStrikeout(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Strikeout, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontAlign: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFontAlign(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_FontAlign, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAlignVertical: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setAlignVertical(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_AlignVertical, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAlignHorizontal: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setAlignHorizontal(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_AlignHorizontal, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFill: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFill(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Fill, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setBorder: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setBorder(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
var oldVal = null;
|
|
if (null != oRes.oldVal) {
|
|
oldVal = oRes.oldVal.clone();
|
|
}
|
|
var newVal = null;
|
|
if (null != oRes.newVal) {
|
|
newVal = oRes.newVal.clone();
|
|
}
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Border, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oldVal, newVal));
|
|
}
|
|
},
|
|
setShrinkToFit: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setShrinkToFit(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_ShrinkToFit, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setWrap: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setShrinkToFit(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Wrap, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAngle: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setAngle(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Angle, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setVerticalText: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setVerticalText(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Angle, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
}
|
|
};
|
|
var g_nRowFlag_empty = 0;
|
|
var g_nRowFlag_hd = 1;
|
|
var g_nRowFlag_CustomHeight = 2;
|
|
function Row(worksheet) {
|
|
this.ws = worksheet;
|
|
this.c = {};
|
|
this.index = null;
|
|
this.xfs = null;
|
|
this.h = null;
|
|
this.flags = g_nRowFlag_empty;
|
|
}
|
|
Row.prototype = {
|
|
getCells: function () {
|
|
return this.c;
|
|
},
|
|
create: function (row) {
|
|
this.index = row - 1;
|
|
this.xfs = null;
|
|
},
|
|
moveVer: function (nDif) {
|
|
this.index += nDif;
|
|
},
|
|
isEmpty: function () {
|
|
if (!this.isEmptyProp()) {
|
|
return false;
|
|
}
|
|
var bEmptyCells = true;
|
|
for (var i in this.c) {
|
|
bEmptyCells = false;
|
|
break;
|
|
}
|
|
if (false == bEmptyCells) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
isEmptyProp: function () {
|
|
return null == this.xfs && null == this.h && g_nRowFlag_empty == this.flags;
|
|
},
|
|
Remove: function () {
|
|
this.ws._removeRow(this.index);
|
|
},
|
|
clone: function (oNewWs) {
|
|
if (!oNewWs) {
|
|
oNewWs = this.ws;
|
|
}
|
|
var oNewRow = new Row(oNewWs);
|
|
oNewRow.index = this.index;
|
|
oNewRow.flags = this.flags;
|
|
if (null != this.xfs) {
|
|
oNewRow.xfs = this.xfs.clone();
|
|
}
|
|
if (null != this.h) {
|
|
oNewRow.h = this.h;
|
|
}
|
|
for (var i in this.c) {
|
|
oNewRow.c[i] = this.c[i].clone(oNewWs);
|
|
}
|
|
return oNewRow;
|
|
},
|
|
getDefaultXfs: function () {
|
|
var oRes = null;
|
|
if (null != this.ws.oAllCol && null != this.ws.oAllCol.xfs) {
|
|
oRes = this.ws.oAllCol.xfs.clone();
|
|
}
|
|
return oRes;
|
|
},
|
|
getHeightProp: function () {
|
|
return new UndoRedoData_RowProp(this);
|
|
},
|
|
setHeightProp: function (prop) {
|
|
if (null != prop) {
|
|
if (null != prop.h) {
|
|
this.h = prop.h;
|
|
} else {
|
|
this.h = null;
|
|
}
|
|
if (true == prop.hd) {
|
|
this.flags |= g_nRowFlag_hd;
|
|
} else {
|
|
this.flags &= ~g_nRowFlag_hd;
|
|
}
|
|
if (true == prop.CustomHeight) {
|
|
this.flags |= g_nRowFlag_CustomHeight;
|
|
} else {
|
|
this.flags &= ~g_nRowFlag_CustomHeight;
|
|
}
|
|
}
|
|
},
|
|
copyProperty: function (otherRow) {
|
|
if (null != otherRow.xfs) {
|
|
this.xfs = otherRow.xfs.clone();
|
|
} else {
|
|
this.xfs = null;
|
|
}
|
|
this.h = otherRow.h;
|
|
this.flags = otherRow.flags;
|
|
},
|
|
getStyle: function () {
|
|
return this.xfs;
|
|
},
|
|
_getUpdateRange: function () {
|
|
if (g_nAllRowIndex == this.index) {
|
|
return new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0);
|
|
} else {
|
|
return new Asc.Range(0, this.index, gc_nMaxCol0, this.index);
|
|
}
|
|
},
|
|
setStyle: function (xfs) {
|
|
var oldVal = this.xfs;
|
|
var newVal = null;
|
|
this.xfs = null;
|
|
if (null != xfs) {
|
|
this.xfs = xfs.clone();
|
|
newVal = xfs;
|
|
}
|
|
if (History.Is_On() && false == ((null == oldVal && null == newVal) || (null != oldVal && null != newVal && true == oldVal.isEqual(newVal)))) {
|
|
if (null != oldVal) {
|
|
oldVal = oldVal.clone();
|
|
}
|
|
if (null != newVal) {
|
|
newVal = newVal.clone();
|
|
}
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_SetStyle, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oldVal, newVal));
|
|
}
|
|
},
|
|
setCellStyle: function (val) {
|
|
var newVal = this.ws.workbook.CellStyles._prepareCellStyle(val);
|
|
var oRes = this.ws.workbook.oStyleManager.setCellStyle(this, newVal);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
var oldStyleName = this.ws.workbook.CellStyles.getStyleNameByXfId(oRes.oldVal);
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_SetCellStyle, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oldStyleName, val));
|
|
var oStyle = this.ws.workbook.CellStyles.getStyleByXfId(oRes.newVal);
|
|
if (oStyle.ApplyFont) {
|
|
this.setFont(oStyle.getFont());
|
|
}
|
|
if (oStyle.ApplyFill) {
|
|
this.setFill(oStyle.getFill());
|
|
}
|
|
if (oStyle.ApplyBorder) {
|
|
this.setBorder(oStyle.getBorder());
|
|
}
|
|
if (oStyle.ApplyNumberFormat) {
|
|
this.setNumFormat(oStyle.getNumFormatStr());
|
|
}
|
|
}
|
|
},
|
|
setNumFormat: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setNumFormat(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_NumFormat, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFont: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFont(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
var oldVal = null;
|
|
if (null != oRes.oldVal) {
|
|
oldVal = oRes.oldVal.clone();
|
|
}
|
|
var newVal = null;
|
|
if (null != oRes.newVal) {
|
|
newVal = oRes.newVal.clone();
|
|
}
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_SetFont, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oldVal, newVal));
|
|
}
|
|
},
|
|
setFontname: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFontname(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Fontname, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontsize: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFontsize(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Fontsize, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontcolor: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFontcolor(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Fontcolor, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setBold: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setBold(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Bold, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setItalic: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setItalic(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Italic, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setUnderline: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setUnderline(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Underline, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setStrikeout: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setStrikeout(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Strikeout, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontAlign: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFontAlign(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_FontAlign, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAlignVertical: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setAlignVertical(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_AlignVertical, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAlignHorizontal: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setAlignHorizontal(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_AlignHorizontal, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFill: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setFill(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Fill, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setBorder: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setBorder(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
var oldVal = null;
|
|
if (null != oRes.oldVal) {
|
|
oldVal = oRes.oldVal.clone();
|
|
}
|
|
var newVal = null;
|
|
if (null != oRes.newVal) {
|
|
newVal = oRes.newVal.clone();
|
|
}
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Border, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oldVal, newVal));
|
|
}
|
|
},
|
|
setShrinkToFit: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setShrinkToFit(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_ShrinkToFit, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setWrap: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setShrinkToFit(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Wrap, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAngle: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setAngle(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Angle, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setVerticalText: function (val) {
|
|
var oRes = this.ws.workbook.oStyleManager.setVerticalText(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Angle, this.ws.getId(), this._getUpdateRange(), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
}
|
|
};
|
|
var g_oCCellValueMultiTextProperties = {
|
|
text: 0,
|
|
format: 1
|
|
};
|
|
function CCellValueMultiText() {
|
|
this.Properties = g_oCCellValueMultiTextProperties;
|
|
this.text = null;
|
|
this.format = null;
|
|
}
|
|
CCellValueMultiText.prototype = {
|
|
isEqual: function (val) {
|
|
if (null == val) {
|
|
return false;
|
|
}
|
|
return this.text == val.text && ((null == this.format && null == val.format) || (null != this.format && null != val.format && this.format.isEqual(val.format)));
|
|
},
|
|
clone: function () {
|
|
var oRes = new CCellValueMultiText();
|
|
if (null != this.text) {
|
|
oRes.text = this.text;
|
|
}
|
|
if (null != this.format) {
|
|
oRes.format = this.format.clone();
|
|
}
|
|
return oRes;
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.ValueMultiTextElem;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.text:
|
|
return this.text;
|
|
break;
|
|
case this.Properties.format:
|
|
return this.format;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.text:
|
|
this.text = value;
|
|
break;
|
|
case this.Properties.format:
|
|
this.format = value;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
var g_oCCellValueProperties = {
|
|
text: 0,
|
|
multiText: 1,
|
|
number: 2,
|
|
type: 3
|
|
};
|
|
function CCellValue() {
|
|
this.Properties = g_oCCellValueProperties;
|
|
this.text = null;
|
|
this.multiText = null;
|
|
this.number = null;
|
|
this.type = CellValueType.Number;
|
|
this.textValue = null;
|
|
this.aTextValue2 = [];
|
|
this.textValueForEdit = null;
|
|
this.textValueForEdit2 = null;
|
|
}
|
|
CCellValue.prototype = {
|
|
isEmpty: function () {
|
|
if (null != this.number || (null != this.text && "" != this.text)) {
|
|
return false;
|
|
}
|
|
if (null != this.multiText && "" != this.getStringFromMultiText()) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
isEqual: function (val) {
|
|
if (null == val) {
|
|
return false;
|
|
}
|
|
if (this.text != val.text) {
|
|
return false;
|
|
}
|
|
if (this.number != val.number) {
|
|
return false;
|
|
}
|
|
if (this.type != val.type) {
|
|
return false;
|
|
}
|
|
if (null != this.multiText && null != val.multiText) {
|
|
if (this.multiText.length == val.multiText.length) {
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
if (false == this.multiText[i].isEqual(val.multiText[i])) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
} else {
|
|
if (null == this.multiText && null == val.multiText) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
clean: function () {
|
|
this.text = null;
|
|
this.multiText = null;
|
|
this.number = null;
|
|
this.type = CellValueType.Number;
|
|
this.cleanCache();
|
|
},
|
|
clone: function () {
|
|
var oRes = new CCellValue();
|
|
if (null != this.text) {
|
|
oRes.text = this.text;
|
|
}
|
|
if (null != this.multiText) {
|
|
oRes.multiText = this._cloneMultiText();
|
|
}
|
|
if (null != this.number) {
|
|
oRes.number = this.number;
|
|
}
|
|
if (null != this.type) {
|
|
oRes.type = this.type;
|
|
}
|
|
return oRes;
|
|
},
|
|
cleanCache: function () {
|
|
this.textValue = null;
|
|
this.aTextValue2 = [];
|
|
this.textValueForEdit = null;
|
|
this.textValueForEdit2 = null;
|
|
},
|
|
getStringFromMultiText: function () {
|
|
var sRes = "";
|
|
if (null != this.multiText) {
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
var elem = this.multiText[i];
|
|
if (null != elem.text) {
|
|
sRes += elem.text;
|
|
}
|
|
}
|
|
}
|
|
return sRes;
|
|
},
|
|
makeSimpleText: function () {
|
|
var bRes = false;
|
|
if (null != this.multiText) {
|
|
this.text = this.getStringFromMultiText();
|
|
this.multiText = null;
|
|
bRes = true;
|
|
}
|
|
return bRes;
|
|
},
|
|
getValueWithoutFormat: function () {
|
|
var sResult = "";
|
|
if (null != this.number) {
|
|
if (CellValueType.Bool == this.type) {
|
|
sResult = this.number == 1 ? "TRUE" : "FALSE";
|
|
} else {
|
|
sResult = this.number.toString();
|
|
}
|
|
} else {
|
|
if (null != this.text) {
|
|
sResult = this.text;
|
|
} else {
|
|
if (null != this.multiText) {
|
|
sResult = this.getStringFromMultiText();
|
|
}
|
|
}
|
|
}
|
|
return sResult;
|
|
},
|
|
getValue: function (cell) {
|
|
if (null == this.textValue) {
|
|
this.getValue2(cell, gc_nMaxDigCountView, function () {
|
|
return true;
|
|
});
|
|
this.textValue = "";
|
|
var aText = this.aTextValue2[gc_nMaxDigCountView];
|
|
for (var i = 0, length = aText.length; i < length; ++i) {
|
|
if (aText[i].format && aText[i].format.skip == false) {
|
|
this.textValue += aText[i].text;
|
|
}
|
|
}
|
|
}
|
|
return this.textValue;
|
|
},
|
|
getValueForEdit: function (cell) {
|
|
if (null == this.textValueForEdit) {
|
|
this.getValueForEdit2(cell);
|
|
this.textValueForEdit = "";
|
|
for (var i = 0, length = this.textValueForEdit2.length; i < length; ++i) {
|
|
this.textValueForEdit += this.textValueForEdit2[i].text;
|
|
}
|
|
}
|
|
return this.textValueForEdit;
|
|
},
|
|
getValue2: function (cell, dDigitsCount, fIsFitMeasurer) {
|
|
var aRes = null;
|
|
if (null != this.aTextValue2[dDigitsCount]) {
|
|
aRes = this.aTextValue2[dDigitsCount];
|
|
}
|
|
if (null == aRes) {
|
|
var bNeedMeasure = true;
|
|
var sText = null;
|
|
var aText = null;
|
|
if (CellValueType.Number == this.type || CellValueType.String == this.type) {
|
|
if (null != this.text) {
|
|
sText = this.text;
|
|
} else {
|
|
if (null != this.multiText) {
|
|
aText = this.multiText;
|
|
}
|
|
}
|
|
if (CellValueType.String == this.type) {
|
|
bNeedMeasure = false;
|
|
}
|
|
var oNumFormat;
|
|
var xfs = cell.getCompiledStyle();
|
|
if (null != xfs && null != xfs.num) {
|
|
oNumFormat = oNumFormatCache.get(xfs.num.f);
|
|
} else {
|
|
oNumFormat = oNumFormatCache.get(g_oDefaultNum.f);
|
|
}
|
|
if (false == oNumFormat.isGeneralFormat()) {
|
|
var oAdditionalResult = {};
|
|
if (null != this.number) {
|
|
aText = oNumFormat.format(this.number, this.type, dDigitsCount, oAdditionalResult);
|
|
sText = null;
|
|
} else {
|
|
if (CellValueType.String == this.type) {
|
|
var oTextFormat = oNumFormat.getTextFormat();
|
|
if (null != oTextFormat && "@" != oTextFormat.formatString) {
|
|
if (null != this.text) {
|
|
aText = oNumFormat.format(this.text, this.type, dDigitsCount, oAdditionalResult);
|
|
sText = null;
|
|
} else {
|
|
if (null != this.multiText) {
|
|
var sSimpleString = this.getStringFromMultiText();
|
|
aText = oNumFormat.format(sSimpleString, this.type, dDigitsCount, oAdditionalResult);
|
|
sText = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (CellValueType.Number == this.type && null != this.number) {
|
|
bNeedMeasure = false;
|
|
var bFindResult = false;
|
|
var nTempDigCount = Math.ceil(dDigitsCount);
|
|
var sOriginText = this.number;
|
|
while (nTempDigCount >= 1) {
|
|
var sGeneral = DecodeGeneralFormat(sOriginText, this.type, nTempDigCount);
|
|
if (null != sGeneral) {
|
|
oNumFormat = oNumFormatCache.get(sGeneral);
|
|
}
|
|
if (null != oNumFormat) {
|
|
sText = null;
|
|
aText = oNumFormat.format(sOriginText, this.type, dDigitsCount);
|
|
if (true == oNumFormat.isTextFormat()) {
|
|
break;
|
|
} else {
|
|
aRes = this._getValue2Result(cell, sText, aText);
|
|
if (true == fIsFitMeasurer(aRes)) {
|
|
bFindResult = true;
|
|
break;
|
|
}
|
|
aRes = null;
|
|
}
|
|
}
|
|
nTempDigCount--;
|
|
}
|
|
if (false == bFindResult) {
|
|
aRes = null;
|
|
sText = null;
|
|
if (dDigitsCount > 1) {
|
|
var oNumFormatFont = new NumFormatFont();
|
|
oNumFormatFont.repeat = true;
|
|
aText = [{
|
|
text: "#",
|
|
format: oNumFormatFont
|
|
}];
|
|
} else {
|
|
aText = [{
|
|
text: "",
|
|
format: {}
|
|
}];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (CellValueType.Bool == this.type) {
|
|
if (null != this.number) {
|
|
sText = (0 != this.number) ? "TRUE" : "FALSE";
|
|
}
|
|
} else {
|
|
if (CellValueType.Error == this.type) {
|
|
if (null != this.text) {
|
|
sText = this.text;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (bNeedMeasure) {
|
|
aRes = this._getValue2Result(cell, sText, aText);
|
|
if (false == fIsFitMeasurer(aRes)) {
|
|
aRes = null;
|
|
sText = null;
|
|
var oNumFormatFont = new NumFormatFont();
|
|
oNumFormatFont.repeat = true;
|
|
aText = [{
|
|
text: "#",
|
|
format: oNumFormatFont
|
|
}];
|
|
}
|
|
}
|
|
if (null == aRes) {
|
|
aRes = this._getValue2Result(cell, sText, aText);
|
|
}
|
|
if (cell.sFormula) {
|
|
aRes[0].sFormula = cell.sFormula;
|
|
aRes[0].sId = cell.getName();
|
|
}
|
|
this.aTextValue2[dDigitsCount] = aRes;
|
|
}
|
|
return aRes;
|
|
},
|
|
getValueForEdit2: function (cell, cultureInfo) {
|
|
if (null == cultureInfo) {
|
|
cultureInfo = g_oDefaultCultureInfo;
|
|
}
|
|
if (null == this.textValueForEdit2) {
|
|
var oValueText = null;
|
|
var oValueArray = null;
|
|
var xfs = cell.getCompiledStyle();
|
|
if (cell.sFormula) {
|
|
oValueText = "=" + cell.sFormula;
|
|
} else {
|
|
if (null != this.text || null != this.number) {
|
|
if (CellValueType.Bool == this.type && null != this.number) {
|
|
oValueText = (this.number == 1) ? "TRUE" : "FALSE";
|
|
} else {
|
|
if (null != this.text) {
|
|
oValueText = this.text;
|
|
}
|
|
if (CellValueType.Number == this.type || CellValueType.String == this.type) {
|
|
var oNumFormat;
|
|
if (null != xfs && null != xfs.num) {
|
|
oNumFormat = oNumFormatCache.get(xfs.num.f);
|
|
} else {
|
|
oNumFormat = oNumFormatCache.get(g_oDefaultNum.f);
|
|
}
|
|
if (CellValueType.String != this.type && null != oNumFormat && null != this.number) {
|
|
var nValue = this.number;
|
|
var oTargetFormat = oNumFormat.getFormatByValue(nValue);
|
|
if (oTargetFormat) {
|
|
if (1 == oTargetFormat.nPercent) {
|
|
oValueText = oGeneralEditFormatCache.format(nValue * 100) + "%";
|
|
} else {
|
|
if (oTargetFormat.bDateTime) {
|
|
if (false == oTargetFormat.isInvalidDateValue(nValue)) {
|
|
var bDate = oTargetFormat.bDate;
|
|
var bTime = oTargetFormat.bTime;
|
|
if (false == bDate && nValue >= 1) {
|
|
bDate = true;
|
|
}
|
|
if (false == bTime && Math.floor(nValue) != nValue) {
|
|
bTime = true;
|
|
}
|
|
var sDateFormat = "";
|
|
if (bDate) {
|
|
for (var i = 0, length = cultureInfo.ShortDatePattern.length; i < length; i++) {
|
|
var nIndex = cultureInfo.ShortDatePattern[i] - 0;
|
|
if (0 != i) {
|
|
sDateFormat += "/";
|
|
}
|
|
if (0 == nIndex) {
|
|
sDateFormat += "d";
|
|
} else {
|
|
if (1 == nIndex) {
|
|
sDateFormat += "m";
|
|
} else {
|
|
if (2 == nIndex) {
|
|
sDateFormat += "yyyy";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (bDate && bTime) {
|
|
oNumFormat = oNumFormatCache.get(sDateFormat + " h:mm:ss AM/PM");
|
|
} else {
|
|
if (bTime) {
|
|
oNumFormat = oNumFormatCache.get("h:mm:ss AM/PM");
|
|
} else {
|
|
oNumFormat = oNumFormatCache.get(sDateFormat);
|
|
}
|
|
}
|
|
var aFormatedValue = oNumFormat.format(nValue, CellValueType.Number, gc_nMaxDigCount);
|
|
oValueText = "";
|
|
for (var i = 0, length = aFormatedValue.length; i < length; ++i) {
|
|
oValueText += aFormatedValue[i].text;
|
|
}
|
|
} else {
|
|
oValueText = oGeneralEditFormatCache.format(nValue);
|
|
}
|
|
} else {
|
|
oValueText = oGeneralEditFormatCache.format(nValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (this.multiText) {
|
|
oValueArray = this.multiText;
|
|
}
|
|
}
|
|
}
|
|
if (null != xfs && true == xfs.QuotePrefix && CellValueType.String == this.type && false == cell.isFormula()) {
|
|
if (null != oValueText) {
|
|
oValueText = "'" + oValueText;
|
|
} else {
|
|
if (null != oValueArray) {
|
|
oValueArray = [{
|
|
text: "'"
|
|
}].concat(oValueArray);
|
|
}
|
|
}
|
|
}
|
|
this.textValueForEdit2 = this._getValue2Result(cell, oValueText, oValueArray);
|
|
}
|
|
return this.textValueForEdit2;
|
|
},
|
|
_getValue2Result: function (cell, sText, aText) {
|
|
var aResult = [];
|
|
if (null == sText && null == aText) {
|
|
sText = "";
|
|
}
|
|
var color;
|
|
var cellfont;
|
|
var xfs = cell.getCompiledStyle();
|
|
if (null != xfs && null != xfs.font) {
|
|
cellfont = xfs.font;
|
|
} else {
|
|
cellfont = g_oDefaultFont;
|
|
}
|
|
if (null != sText) {
|
|
var oNewItem = new Fragment();
|
|
oNewItem.text = sText;
|
|
oNewItem.format = cellfont.clone();
|
|
color = oNewItem.format.c;
|
|
if (color instanceof ThemeColor) {
|
|
if (g_nColorHyperlink == color.theme && null == color.tint) {
|
|
var hyperlink = cell.ws.hyperlinkManager.getByCell(cell.nRow, cell.nCol);
|
|
if (null != hyperlink && hyperlink.data.getVisited()) {
|
|
oNewItem.format.c = g_oColorManager.getThemeColor(g_nColorHyperlinkVisited, null);
|
|
}
|
|
}
|
|
}
|
|
oNewItem.format.skip = false;
|
|
oNewItem.format.repeat = false;
|
|
aResult.push(oNewItem);
|
|
} else {
|
|
if (null != aText) {
|
|
for (var i = 0; i < aText.length; i++) {
|
|
var oNewItem = new Fragment();
|
|
var oCurtext = aText[i];
|
|
if (null != oCurtext.text) {
|
|
oNewItem.text = oCurtext.text;
|
|
var oCurFormat = new Font();
|
|
oCurFormat.set(cellfont);
|
|
if (null != oCurtext.format) {
|
|
oCurFormat.set(oCurtext.format);
|
|
}
|
|
oNewItem.format = oCurFormat;
|
|
color = oNewItem.format.c;
|
|
if (color instanceof ThemeColor) {
|
|
if (g_nColorHyperlink == color.theme && null == color.tint) {
|
|
var hyperlink = cell.ws.hyperlinkManager.getByCell(cell.nRow, cell.nCol);
|
|
if (null != hyperlink && hyperlink.data.getVisited()) {
|
|
oNewItem.format.c = g_oColorManager.getThemeColor(g_nColorHyperlinkVisited, null);
|
|
}
|
|
}
|
|
}
|
|
aResult.push(oNewItem);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return aResult;
|
|
},
|
|
setValue: function (cell, val) {
|
|
this.clean();
|
|
if ("" == val) {
|
|
return;
|
|
}
|
|
var oNumFormat;
|
|
var xfs = cell.getCompiledStyle();
|
|
if (null != xfs && null != xfs.num) {
|
|
oNumFormat = oNumFormatCache.get(xfs.num.f);
|
|
} else {
|
|
oNumFormat = oNumFormatCache.get(g_oDefaultNum.f);
|
|
}
|
|
if (oNumFormat.isTextFormat()) {
|
|
this.type = CellValueType.String;
|
|
this.text = val;
|
|
} else {
|
|
if (g_oFormatParser.isLocaleNumber(val)) {
|
|
this.type = CellValueType.Number;
|
|
this.number = g_oFormatParser.parseLocaleNumber(val);
|
|
} else {
|
|
var sUpText = val.toUpperCase();
|
|
if ("TRUE" == sUpText || "FALSE" == sUpText) {
|
|
this.type = CellValueType.Bool;
|
|
this.number = ("TRUE" == sUpText) ? 1 : 0;
|
|
} else {
|
|
if ("#NULL!" == sUpText || "#DIV/0!" == sUpText || "#NAME?" == sUpText || "#NUM!" == sUpText || "#N/A" == sUpText || "#REF!" == sUpText || "#VALUE!" == sUpText) {
|
|
this.type = CellValueType.Error;
|
|
this.text = sUpText;
|
|
} else {
|
|
var res = g_oFormatParser.parse(val);
|
|
if (null != res) {
|
|
var nFormatType = oNumFormat.getType();
|
|
if (! ((c_oAscNumFormatType.Percent == nFormatType && res.bPercent) || (c_oAscNumFormatType.Currency == nFormatType && res.bCurrency) || (c_oAscNumFormatType.Date == nFormatType && res.bDate) || (c_oAscNumFormatType.Time == nFormatType && res.bTime)) && res.format != oNumFormat.sFormat) {
|
|
cell.setNumFormat(res.format);
|
|
}
|
|
this.number = res.value;
|
|
this.type = CellValueType.Number;
|
|
} else {
|
|
this.type = CellValueType.String;
|
|
if (val.length > 0 && "'" == val[0]) {
|
|
cell.setQuotePrefix(true);
|
|
val = val.substring(1);
|
|
}
|
|
this.text = val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (0 == val.indexOf("http://") || 0 == val.indexOf("https://") || (0 == val.indexOf("www.") && val.length > 4)) {
|
|
var sRealUrl = val;
|
|
if (0 != val.indexOf("http://") && 0 != val.indexOf("https://")) {
|
|
sRealUrl = "http://" + sRealUrl;
|
|
}
|
|
var oNewHyperlink = new Hyperlink();
|
|
oNewHyperlink.Ref = cell.ws.getCell3(cell.nRow, cell.nCol);
|
|
oNewHyperlink.Hyperlink = sRealUrl;
|
|
oNewHyperlink.Ref.setHyperlink(oNewHyperlink);
|
|
}
|
|
},
|
|
setValue2: function (cell, aVal) {
|
|
var sSimpleText = "";
|
|
for (var i = 0, length = aVal.length; i < length; ++i) {
|
|
sSimpleText += aVal[i].text;
|
|
}
|
|
this.setValue(cell, sSimpleText);
|
|
var nRow = cell.nRow;
|
|
var nCol = cell.nCol;
|
|
if (CellValueType.String == this.type && null == cell.ws.hyperlinkManager.getByCell(nRow, nCol)) {
|
|
this.clean();
|
|
this.type = CellValueType.String;
|
|
if (aVal.length > 0) {
|
|
this.multiText = [];
|
|
for (var i = 0, length = aVal.length; i < length; i++) {
|
|
var item = aVal[i];
|
|
var oNewElem = new CCellValueMultiText();
|
|
oNewElem.text = item.text;
|
|
oNewElem.format = g_oDefaultFont.clone();
|
|
if (null != item.format) {
|
|
oNewElem.format.set(item.format);
|
|
}
|
|
this.multiText.push(oNewElem);
|
|
}
|
|
this.miminizeMultiText(cell, true);
|
|
}
|
|
if (null != this.text) {
|
|
if (this.text.length > 0 && "'" == this.text[0]) {
|
|
cell.setQuotePrefix(true);
|
|
this.text = this.text.substring(1);
|
|
}
|
|
} else {
|
|
if (null != this.multiText) {
|
|
if (this.multiText.length > 0) {
|
|
var oFirstItem = this.multiText[0];
|
|
if (null != oFirstItem.text && oFirstItem.text.length > 0 && "'" == oFirstItem.text[0]) {
|
|
cell.setQuotePrefix(true);
|
|
if (1 != oFirstItem.text.length) {
|
|
oFirstItem.text = oFirstItem.text.substring(1);
|
|
} else {
|
|
this.multiText.shift();
|
|
if (0 == this.multiText.length) {
|
|
this.multiText = null;
|
|
this.text = "";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
_cloneMultiText: function () {
|
|
var oRes = [];
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
oRes.push(this.multiText[i].clone());
|
|
}
|
|
return oRes;
|
|
},
|
|
miminizeMultiText: function (cell, bSetCellFont) {
|
|
var bRes = false;
|
|
if (null == bSetCellFont) {
|
|
bSetCellFont = true;
|
|
}
|
|
if (null != this.multiText && this.multiText.length > 0) {
|
|
var range = cell.ws.getCell3(cell.nRow, cell.nCol);
|
|
var cellFont = range.getFont();
|
|
var oIntersectFont;
|
|
for (var i = 0, length = this.multiText.length; i < length; i++) {
|
|
var elem = this.multiText[i];
|
|
if (null != elem.format) {
|
|
if (null == oIntersectFont) {
|
|
oIntersectFont = elem.format.clone();
|
|
}
|
|
oIntersectFont.intersect(elem.format, cellFont);
|
|
} else {
|
|
oIntersectFont = cellFont.clone();
|
|
break;
|
|
}
|
|
}
|
|
if (bSetCellFont) {
|
|
if (oIntersectFont.isEqual(g_oDefaultFont)) {
|
|
cell.setFont(null, false);
|
|
} else {
|
|
cell.setFont(oIntersectFont, false);
|
|
}
|
|
}
|
|
var bIsEqual = true;
|
|
for (var i = 0, length = this.multiText.length; i < length; i++) {
|
|
var elem = this.multiText[i];
|
|
if (null != elem.format && false == oIntersectFont.isEqual(elem.format)) {
|
|
bIsEqual = false;
|
|
break;
|
|
}
|
|
}
|
|
if (bIsEqual) {
|
|
this.makeSimpleText();
|
|
bRes = true;
|
|
}
|
|
}
|
|
return bRes;
|
|
},
|
|
_setFontProp: function (cell, fCheck, fAction) {
|
|
var bRes = false;
|
|
if (null != this.multiText) {
|
|
var bChange = false;
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
var elem = this.multiText[i];
|
|
if (null != elem.format && true == fCheck(elem.format)) {
|
|
bChange = true;
|
|
break;
|
|
}
|
|
}
|
|
if (bChange) {
|
|
var backupObj = cell.getValueData();
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
var elem = this.multiText[i];
|
|
if (null != elem.format) {
|
|
fAction(elem.format);
|
|
}
|
|
}
|
|
if (this.miminizeMultiText(cell, false)) {
|
|
var DataNew = cell.getValueData();
|
|
History.Add(g_oUndoRedoCell, historyitem_Cell_ChangeValue, cell.ws.getId(), new Asc.Range(cell.nCol, cell.nRow, cell.nCol, cell.nRow), new UndoRedoData_CellSimpleData(cell.nRow, cell.nCol, backupObj, DataNew));
|
|
} else {
|
|
var DataNew = this._cloneMultiText();
|
|
History.Add(g_oUndoRedoCell, historyitem_Cell_ChangeArrayValueFormat, cell.ws.getId(), new Asc.Range(cell.nCol, cell.nRow, cell.nCol, cell.nRow), new UndoRedoData_CellSimpleData(cell.nRow, cell.nCol, backupObj.value.multiText, DataNew));
|
|
}
|
|
}
|
|
bRes = true;
|
|
}
|
|
return bRes;
|
|
},
|
|
setFontname: function (cell, val) {
|
|
return this._setFontProp(cell, function (format) {
|
|
return val != format.fn;
|
|
},
|
|
function (format) {
|
|
format.fn = val;
|
|
});
|
|
},
|
|
setFontsize: function (cell, val) {
|
|
return this._setFontProp(cell, function (format) {
|
|
return val != format.fs;
|
|
},
|
|
function (format) {
|
|
format.fs = val;
|
|
});
|
|
},
|
|
setFontcolor: function (cell, val) {
|
|
return this._setFontProp(cell, function (format) {
|
|
return val != format.c;
|
|
},
|
|
function (format) {
|
|
format.c = val;
|
|
});
|
|
},
|
|
setBold: function (cell, val) {
|
|
return this._setFontProp(cell, function (format) {
|
|
return val != format.b;
|
|
},
|
|
function (format) {
|
|
format.b = val;
|
|
});
|
|
},
|
|
setItalic: function (cell, val) {
|
|
return this._setFontProp(cell, function (format) {
|
|
return val != format.i;
|
|
},
|
|
function (format) {
|
|
format.i = val;
|
|
});
|
|
},
|
|
setUnderline: function (cell, val) {
|
|
return this._setFontProp(cell, function (format) {
|
|
return val != format.u;
|
|
},
|
|
function (format) {
|
|
format.u = val;
|
|
});
|
|
},
|
|
setStrikeout: function (cell, val) {
|
|
return this._setFontProp(cell, function (format) {
|
|
return val != format.s;
|
|
},
|
|
function (format) {
|
|
format.s = val;
|
|
});
|
|
},
|
|
setFontAlign: function (cell, val) {
|
|
return this._setFontProp(cell, function (format) {
|
|
return val != format.va;
|
|
},
|
|
function (format) {
|
|
format.va = val;
|
|
});
|
|
},
|
|
setValueType: function (type) {
|
|
if (CellValueType.String == type && null != this.number) {
|
|
this.text = this.number.toString();
|
|
this.number = null;
|
|
}
|
|
this.type = type;
|
|
},
|
|
getType: function () {
|
|
return UndoRedoDataTypes.CellValue;
|
|
},
|
|
getProperties: function () {
|
|
return this.Properties;
|
|
},
|
|
getProperty: function (nType) {
|
|
switch (nType) {
|
|
case this.Properties.text:
|
|
return this.text;
|
|
break;
|
|
case this.Properties.multiText:
|
|
return this.multiText;
|
|
break;
|
|
case this.Properties.number:
|
|
return this.number;
|
|
break;
|
|
case this.Properties.type:
|
|
return this.type;
|
|
break;
|
|
}
|
|
},
|
|
setProperty: function (nType, value) {
|
|
switch (nType) {
|
|
case this.Properties.text:
|
|
this.text = value;
|
|
break;
|
|
case this.Properties.multiText:
|
|
this.multiText = value;
|
|
break;
|
|
case this.Properties.number:
|
|
this.number = value;
|
|
break;
|
|
case this.Properties.type:
|
|
this.type = value;
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
function TreeRBNode(key, storedValue) {
|
|
this.storedValue = storedValue;
|
|
this.key = key;
|
|
this.red = null;
|
|
this.left = null;
|
|
this.right = null;
|
|
this.parent = null;
|
|
}
|
|
TreeRBNode.prototype = {
|
|
constructor: TreeRBNode,
|
|
isEqual: function (x) {
|
|
return this.key == x.key;
|
|
}
|
|
};
|
|
function IntervalTreeRBNode(low, high, storedValue) {
|
|
IntervalTreeRBNode.superclass.constructor.call(this, low, storedValue);
|
|
this.high = high;
|
|
this.maxHigh = this.high;
|
|
this.minLow = this.key;
|
|
}
|
|
Asc.extendClass(IntervalTreeRBNode, TreeRBNode);
|
|
IntervalTreeRBNode.prototype.isEqual = function (x) {
|
|
return this.key == x.key && this.high == x.high;
|
|
};
|
|
function TreeRB() {
|
|
this.nil = null;
|
|
this.root = null;
|
|
this._init();
|
|
}
|
|
TreeRB.prototype = {
|
|
constructor: TreeRB,
|
|
_init: function () {
|
|
this.nil = new TreeRBNode();
|
|
this.nil.left = this.nil.right = this.nil.parent = this.nil;
|
|
this.nil.key = -Number.MAX_VALUE;
|
|
this.nil.red = 0;
|
|
this.nil.storedValue = null;
|
|
this.root = new TreeRBNode();
|
|
this.root.left = this.nil.right = this.nil.parent = this.nil;
|
|
this.root.key = Number.MAX_VALUE;
|
|
this.root.red = 0;
|
|
this.root.storedValue = null;
|
|
},
|
|
_treeInsertHelp: function (z) {
|
|
var oRes = z;
|
|
z.left = z.right = this.nil;
|
|
var y = this.root;
|
|
var x = this.root.left;
|
|
while (x != this.nil && !x.isEqual(z)) {
|
|
y = x;
|
|
if (x.key > z.key) {
|
|
x = x.left;
|
|
} else {
|
|
x = x.right;
|
|
}
|
|
}
|
|
if (x == this.nil) {
|
|
z.parent = y;
|
|
if (y == this.root || y.key > z.key) {
|
|
y.left = z;
|
|
} else {
|
|
y.right = z;
|
|
}
|
|
} else {
|
|
oRes = x;
|
|
}
|
|
return oRes;
|
|
},
|
|
_fixUpMaxHigh: function (x) {},
|
|
_cleanMaxHigh: function (x) {},
|
|
_leftRotate: function (x) {
|
|
var y = x.right;
|
|
x.right = y.left;
|
|
if (y.left != this.nil) {
|
|
y.left.parent = x;
|
|
}
|
|
y.parent = x.parent;
|
|
if (x == x.parent.left) {
|
|
x.parent.left = y;
|
|
} else {
|
|
x.parent.right = y;
|
|
}
|
|
y.left = x;
|
|
x.parent = y;
|
|
},
|
|
_rightRotate: function (y) {
|
|
var x = y.left;
|
|
y.left = x.right;
|
|
if (this.nil != x.right) {
|
|
x.right.parent = y;
|
|
}
|
|
x.parent = y.parent;
|
|
if (y == y.parent.left) {
|
|
y.parent.left = x;
|
|
} else {
|
|
y.parent.right = x;
|
|
}
|
|
x.right = y;
|
|
y.parent = x;
|
|
},
|
|
insertOrGet: function (x) {
|
|
var y = null;
|
|
var oRes = x;
|
|
oRes = this._treeInsertHelp(x);
|
|
if (x == oRes) {
|
|
this._fixUpMaxHigh(x.parent);
|
|
x.red = 1;
|
|
while (x.parent.red) {
|
|
if (x.parent == x.parent.parent.left) {
|
|
y = x.parent.parent.right;
|
|
if (y.red) {
|
|
x.parent.red = 0;
|
|
y.red = 0;
|
|
x.parent.parent.red = 1;
|
|
x = x.parent.parent;
|
|
} else {
|
|
if (x == x.parent.right) {
|
|
x = x.parent;
|
|
this._leftRotate(x);
|
|
}
|
|
x.parent.red = 0;
|
|
x.parent.parent.red = 1;
|
|
this._rightRotate(x.parent.parent);
|
|
}
|
|
} else {
|
|
y = x.parent.parent.left;
|
|
if (y.red) {
|
|
x.parent.red = 0;
|
|
y.red = 0;
|
|
x.parent.parent.red = 1;
|
|
x = x.parent.parent;
|
|
} else {
|
|
if (x == x.parent.left) {
|
|
x = x.parent;
|
|
this._rightRotate(x);
|
|
}
|
|
x.parent.red = 0;
|
|
x.parent.parent.red = 1;
|
|
this._leftRotate(x.parent.parent);
|
|
}
|
|
}
|
|
}
|
|
this.root.left.red = 0;
|
|
}
|
|
return oRes;
|
|
},
|
|
_getSuccessorOf: function (x) {
|
|
var y;
|
|
if (this.nil != (y = x.right)) {
|
|
while (y.left != this.nil) {
|
|
y = y.left;
|
|
}
|
|
return (y);
|
|
} else {
|
|
y = x.parent;
|
|
while (x == y.right) {
|
|
x = y;
|
|
y = y.parent;
|
|
}
|
|
if (y == this.root) {
|
|
return (this.nil);
|
|
}
|
|
return (y);
|
|
}
|
|
},
|
|
_deleteFixUp: function (x) {
|
|
var w;
|
|
var rootLeft = this.root.left;
|
|
while ((!x.red) && (rootLeft != x)) {
|
|
if (x == x.parent.left) {
|
|
w = x.parent.right;
|
|
if (w.red) {
|
|
w.red = 0;
|
|
x.parent.red = 1;
|
|
this._leftRotate(x.parent);
|
|
w = x.parent.right;
|
|
}
|
|
if ((!w.right.red) && (!w.left.red)) {
|
|
w.red = 1;
|
|
x = x.parent;
|
|
} else {
|
|
if (!w.right.red) {
|
|
w.left.red = 0;
|
|
w.red = 1;
|
|
this._rightRotate(w);
|
|
w = x.parent.right;
|
|
}
|
|
w.red = x.parent.red;
|
|
x.parent.red = 0;
|
|
w.right.red = 0;
|
|
this._leftRotate(x.parent);
|
|
x = rootLeft;
|
|
}
|
|
} else {
|
|
w = x.parent.left;
|
|
if (w.red) {
|
|
w.red = 0;
|
|
x.parent.red = 1;
|
|
this._rightRotate(x.parent);
|
|
w = x.parent.left;
|
|
}
|
|
if ((!w.right.red) && (!w.left.red)) {
|
|
w.red = 1;
|
|
x = x.parent;
|
|
} else {
|
|
if (!w.left.red) {
|
|
w.right.red = 0;
|
|
w.red = 1;
|
|
this._leftRotate(w);
|
|
w = x.parent.left;
|
|
}
|
|
w.red = x.parent.red;
|
|
x.parent.red = 0;
|
|
w.left.red = 0;
|
|
this._rightRotate(x.parent);
|
|
x = rootLeft;
|
|
}
|
|
}
|
|
}
|
|
x.red = 0;
|
|
},
|
|
deleteNode: function (z) {
|
|
var oRes = z.storedValue;
|
|
var y = ((z.left == this.nil) || (z.right == this.nil)) ? z : this._getSuccessorOf(z);
|
|
var x = (y.left == this.nil) ? y.right : y.left;
|
|
if (this.root == (x.parent = y.parent)) {
|
|
this.root.left = x;
|
|
} else {
|
|
if (y == y.parent.left) {
|
|
y.parent.left = x;
|
|
} else {
|
|
y.parent.right = x;
|
|
}
|
|
}
|
|
if (y != z) {
|
|
this._cleanMaxHigh(y);
|
|
y.left = z.left;
|
|
y.right = z.right;
|
|
y.parent = z.parent;
|
|
z.left.parent = z.right.parent = y;
|
|
if (z == z.parent.left) {
|
|
z.parent.left = y;
|
|
} else {
|
|
z.parent.right = y;
|
|
}
|
|
this._fixUpMaxHigh(x.parent);
|
|
if (! (y.red)) {
|
|
y.red = z.red;
|
|
this._deleteFixUp(x);
|
|
} else {
|
|
y.red = z.red;
|
|
}
|
|
} else {
|
|
this._fixUpMaxHigh(x.parent);
|
|
if (! (y.red)) {
|
|
this._deleteFixUp(x);
|
|
}
|
|
}
|
|
return oRes;
|
|
},
|
|
_enumerateRecursion: function (low, high, x, enumResultStack) {
|
|
if (x != this.nil) {
|
|
if (low > x.key) {
|
|
this._enumerateRecursion(low, high, x.right, enumResultStack);
|
|
} else {
|
|
if (high < x.key) {
|
|
this._enumerateRecursion(low, high, x.left, enumResultStack);
|
|
} else {
|
|
this._enumerateRecursion(low, high, x.left, enumResultStack);
|
|
enumResultStack.push(x);
|
|
this._enumerateRecursion(low, high, x.right, enumResultStack);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
enumerate: function (low, high) {
|
|
var enumResultStack = [];
|
|
if (low <= high) {
|
|
this._enumerateRecursion(low, high, this.root.left, enumResultStack);
|
|
}
|
|
return enumResultStack;
|
|
},
|
|
getElem: function (val) {
|
|
var oRes = null;
|
|
var aElems = this.enumerate(val, val);
|
|
if (aElems.length > 0) {
|
|
oRes = aElems[0];
|
|
}
|
|
return oRes;
|
|
},
|
|
getNodeAll: function () {
|
|
return this.enumerate(-Number.MAX_VALUE, Number.MAX_VALUE);
|
|
},
|
|
isEmpty: function () {
|
|
return this.nil == this.root.left;
|
|
}
|
|
};
|
|
function IntervalTreeRB() {
|
|
IntervalTreeRB.superclass.constructor.call(this);
|
|
}
|
|
Asc.extendClass(IntervalTreeRB, TreeRB);
|
|
IntervalTreeRB.prototype._init = function (x) {
|
|
this.nil = new IntervalTreeRBNode();
|
|
this.nil.left = this.nil.right = this.nil.parent = this.nil;
|
|
this.nil.key = this.nil.high = this.nil.maxHigh = -Number.MAX_VALUE;
|
|
this.nil.minLow = Number.MAX_VALUE;
|
|
this.nil.red = 0;
|
|
this.nil.storedValue = null;
|
|
this.root = new IntervalTreeRBNode();
|
|
this.root.left = this.nil.right = this.nil.parent = this.nil;
|
|
this.root.key = this.root.high = this.root.maxHigh = Number.MAX_VALUE;
|
|
this.root.minLow = -Number.MAX_VALUE;
|
|
this.root.red = 0;
|
|
this.root.storedValue = null;
|
|
};
|
|
IntervalTreeRB.prototype._fixUpMaxHigh = function (x) {
|
|
while (x != this.root) {
|
|
x.maxHigh = Math.max(x.high, Math.max(x.left.maxHigh, x.right.maxHigh));
|
|
x.minLow = Math.min(x.key, Math.min(x.left.minLow, x.right.minLow));
|
|
x = x.parent;
|
|
}
|
|
};
|
|
IntervalTreeRB.prototype._cleanMaxHigh = function (x) {
|
|
x.maxHigh = -Number.MAX_VALUE;
|
|
x.minLow = Number.MAX_VALUE;
|
|
};
|
|
IntervalTreeRB.prototype._overlap = function (a1, a2, b1, b2) {
|
|
if (a1 <= b1) {
|
|
return ((b1 <= a2));
|
|
} else {
|
|
return ((a1 <= b2));
|
|
}
|
|
};
|
|
IntervalTreeRB.prototype._enumerateRecursion = function (low, high, x, enumResultStack) {
|
|
if (x != this.nil) {
|
|
if (this._overlap(low, high, x.minLow, x.maxHigh)) {
|
|
this._enumerateRecursion(low, high, x.left, enumResultStack);
|
|
if (this._overlap(low, high, x.key, x.high)) {
|
|
enumResultStack.push(x);
|
|
}
|
|
this._enumerateRecursion(low, high, x.right, enumResultStack);
|
|
}
|
|
}
|
|
};
|
|
IntervalTreeRB.prototype._leftRotate = function (x) {
|
|
var y = x.right;
|
|
IntervalTreeRB.superclass._leftRotate.call(this, x);
|
|
x.maxHigh = Math.max(x.left.maxHigh, Math.max(x.right.maxHigh, x.high));
|
|
x.minLow = Math.min(x.left.minLow, Math.min(x.right.minLow, x.key));
|
|
y.maxHigh = Math.max(x.maxHigh, Math.max(y.right.maxHigh, y.high));
|
|
y.minLow = Math.min(x.minLow, Math.min(y.right.minLow, y.key));
|
|
};
|
|
IntervalTreeRB.prototype._rightRotate = function (y) {
|
|
var x = y.left;
|
|
IntervalTreeRB.superclass._rightRotate.call(this, y);
|
|
y.maxHigh = Math.max(y.left.maxHigh, Math.max(y.right.maxHigh, y.high));
|
|
y.minLow = Math.min(y.left.minLow, Math.min(y.right.minLow, y.key));
|
|
x.maxHigh = Math.max(x.left.maxHigh, Math.max(y.maxHigh, x.high));
|
|
x.minLow = Math.min(x.left.minLow, Math.min(y.minLow, y.key));
|
|
};
|
|
function RangeDataManagerElem(bbox, data) {
|
|
this.bbox = bbox;
|
|
this.data = data;
|
|
}
|
|
function RangeDataManager(fChange) {
|
|
this.oIntervalTreeRB = new IntervalTreeRB();
|
|
this.oDependenceManager = null;
|
|
this.fChange = fChange;
|
|
}
|
|
RangeDataManager.prototype = {
|
|
add: function (bbox, data, oChangeParam) {
|
|
var oNewNode = new IntervalTreeRBNode(bbox.r1, bbox.r2, null);
|
|
var oStoredNode = this.oIntervalTreeRB.insertOrGet(oNewNode);
|
|
if (oStoredNode == oNewNode) {
|
|
oStoredNode.storedValue = [];
|
|
}
|
|
var oNewElem = new RangeDataManagerElem(new Asc.Range(bbox.c1, bbox.r1, bbox.c2, bbox.r2), data);
|
|
oStoredNode.storedValue.push(oNewElem);
|
|
if (null != this.fChange) {
|
|
this.fChange.call(this, oNewElem.data, null, oNewElem.bbox, oChangeParam);
|
|
}
|
|
},
|
|
get: function (bbox) {
|
|
var bboxRange = new Asc.Range(bbox.c1, bbox.r1, bbox.c2, bbox.r2);
|
|
var oRes = {
|
|
all: [],
|
|
inner: [],
|
|
outer: []
|
|
};
|
|
var oNodes = this.oIntervalTreeRB.enumerate(bbox.r1, bbox.r2);
|
|
for (var i = 0, length = oNodes.length; i < length; i++) {
|
|
var oNode = oNodes[i];
|
|
if (oNode.storedValue) {
|
|
for (var j = 0, length2 = oNode.storedValue.length; j < length2; j++) {
|
|
var elem = oNode.storedValue[j];
|
|
if (elem.bbox.isIntersect(bbox)) {
|
|
oRes.all.push(elem);
|
|
if (bboxRange.containsRange(elem.bbox)) {
|
|
oRes.inner.push(elem);
|
|
} else {
|
|
oRes.outer.push(elem);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return oRes;
|
|
},
|
|
getExact: function (bbox) {
|
|
var oRes = null;
|
|
var oGet = this.get(bbox);
|
|
for (var i = 0, length = oGet.inner.length; i < length; i++) {
|
|
var elem = oGet.inner[i];
|
|
if (elem.bbox.isEqual(bbox)) {
|
|
oRes = elem;
|
|
break;
|
|
}
|
|
}
|
|
return oRes;
|
|
},
|
|
_getByCell: function (nRow, nCol) {
|
|
var oRes = null;
|
|
var aAll = this.get(new Asc.Range(nCol, nRow, nCol, nRow));
|
|
if (aAll.all.length > 0) {
|
|
oRes = aAll.all[0];
|
|
}
|
|
return oRes;
|
|
},
|
|
getByCell: function (nRow, nCol) {
|
|
var oRes = this._getByCell(nRow, nCol);
|
|
if (null == oRes && null != this.oDependenceManager) {
|
|
var oDependence = this.oDependenceManager._getByCell(nRow, nCol);
|
|
if (null != oDependence) {
|
|
var oTempRes = this.get(oDependence.bbox);
|
|
if (oTempRes.all.length > 0) {
|
|
oRes = oTempRes.all[0];
|
|
}
|
|
}
|
|
}
|
|
return oRes;
|
|
},
|
|
remove: function (bbox, bInnerOnly, oChangeParam) {
|
|
var aElems = this.get(bbox);
|
|
var aTargetArray;
|
|
if (bInnerOnly) {
|
|
aTargetArray = aElems.inner;
|
|
} else {
|
|
aTargetArray = aElems.all;
|
|
}
|
|
for (var i = 0, length = aTargetArray.length; i < length; ++i) {
|
|
var elem = aTargetArray[i];
|
|
this.removeElement(elem, oChangeParam);
|
|
}
|
|
},
|
|
removeElement: function (elemToDelete, oChangeParam) {
|
|
if (null != elemToDelete) {
|
|
var bbox = elemToDelete.bbox;
|
|
var oNodes = this.oIntervalTreeRB.enumerate(bbox.r1, bbox.r2);
|
|
for (var i = 0, length = oNodes.length; i < length; i++) {
|
|
var oNode = oNodes[i];
|
|
if (oNode.storedValue) {
|
|
for (var j = 0, length2 = oNode.storedValue.length; j < length2; j++) {
|
|
var elem = oNode.storedValue[j];
|
|
if (elem.bbox.isEqual(bbox)) {
|
|
oNode.storedValue.splice(j, 1);
|
|
break;
|
|
}
|
|
}
|
|
if (0 == oNode.storedValue.length) {
|
|
this.oIntervalTreeRB.deleteNode(oNode);
|
|
}
|
|
}
|
|
}
|
|
if (null != this.fChange) {
|
|
this.fChange.call(this, elemToDelete.data, elemToDelete.bbox, null, oChangeParam);
|
|
}
|
|
}
|
|
},
|
|
removeAll: function (oChangeParam) {
|
|
this.remove(new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), null, oChangeParam);
|
|
this.oIntervalTreeRB = new IntervalTreeRB();
|
|
},
|
|
shiftGet: function (bbox, bHor) {
|
|
var bboxGet = shiftGetBBox(bbox, bHor);
|
|
return {
|
|
bbox: bboxGet,
|
|
elems: this.get(bboxGet)
|
|
};
|
|
},
|
|
shift: function (bbox, bAdd, bHor, oGetRes, oChangeParam) {
|
|
var _this = this;
|
|
if (null == oGetRes) {
|
|
oGetRes = this.shiftGet(bbox, bHor);
|
|
}
|
|
var offset;
|
|
if (bHor) {
|
|
offset = {
|
|
offsetRow: 0,
|
|
offsetCol: bbox.c2 - bbox.c1 + 1
|
|
};
|
|
} else {
|
|
offset = {
|
|
offsetRow: bbox.r2 - bbox.r1 + 1,
|
|
offsetCol: 0
|
|
};
|
|
}
|
|
if (!bAdd) {
|
|
offset.offsetRow = -offset.offsetRow;
|
|
offset.offsetCol = -offset.offsetCol;
|
|
}
|
|
this._shiftmove(true, bbox, offset, oGetRes.elems, oChangeParam);
|
|
},
|
|
move: function (from, to, oChangeParam) {
|
|
var offset = {
|
|
offsetRow: to.r1 - from.r1,
|
|
offsetCol: to.c1 - from.c1
|
|
};
|
|
var oGetRes = this.get(from);
|
|
this._shiftmove(false, from, offset, oGetRes, oChangeParam);
|
|
},
|
|
_shiftmove: function (bShift, bbox, offset, elems, oChangeParam) {
|
|
var aToChange = [];
|
|
var bAdd = offset.offsetRow > 0 || offset.offsetCol > 0;
|
|
var bHor = 0 != offset.offsetCol ? true : false;
|
|
if (elems.inner.length > 0) {
|
|
var bboxAsc = Asc.Range(bbox.c1, bbox.r1, bbox.c2, bbox.r2);
|
|
for (var i = 0, length = elems.inner.length; i < length; i++) {
|
|
var elem = elems.inner[i];
|
|
var from = elem.bbox;
|
|
var to = null;
|
|
if (bShift) {
|
|
if (bAdd) {
|
|
to = from.clone();
|
|
to.setOffset(offset);
|
|
} else {
|
|
if (!bboxAsc.containsRange(from)) {
|
|
to = from.clone();
|
|
if (bHor) {
|
|
if (to.c1 <= bbox.c2) {
|
|
to.setOffsetFirst({
|
|
offsetRow: 0,
|
|
offsetCol: bbox.c2 - to.c1 + 1
|
|
});
|
|
}
|
|
} else {
|
|
if (to.r1 <= bbox.r2) {
|
|
to.setOffsetFirst({
|
|
offsetRow: bbox.r2 - to.r1 + 1,
|
|
offsetCol: 0
|
|
});
|
|
}
|
|
}
|
|
to.setOffset(offset);
|
|
}
|
|
}
|
|
} else {
|
|
to = from.clone();
|
|
to.setOffset(offset);
|
|
}
|
|
aToChange.push({
|
|
elem: elem,
|
|
to: to
|
|
});
|
|
}
|
|
}
|
|
if (bShift) {
|
|
if (elems.outer.length > 0) {
|
|
for (var i = 0, length = elems.outer.length; i < length; i++) {
|
|
var elem = elems.outer[i];
|
|
var from = elem.bbox;
|
|
var to = null;
|
|
if (bHor) {
|
|
if (from.c1 < bbox.c1 && bbox.r1 <= from.r1 && from.r2 <= bbox.r2) {
|
|
if (bAdd) {
|
|
to = from.clone();
|
|
to.setOffsetLast({
|
|
offsetRow: 0,
|
|
offsetCol: bbox.c2 - bbox.c1 + 1
|
|
});
|
|
} else {
|
|
to = from.clone();
|
|
var nTemp1 = from.c2 - bbox.c1 + 1;
|
|
var nTemp2 = bbox.c2 - bbox.c1 + 1;
|
|
to.setOffsetLast({
|
|
offsetRow: 0,
|
|
offsetCol: -Math.min(nTemp1, nTemp2)
|
|
});
|
|
}
|
|
}
|
|
} else {
|
|
if (from.r1 < bbox.r1 && bbox.c1 <= from.c1 && from.c2 <= bbox.c2) {
|
|
if (bAdd) {
|
|
to = from.clone();
|
|
to.setOffsetLast({
|
|
offsetRow: bbox.r2 - bbox.r1 + 1,
|
|
offsetCol: 0
|
|
});
|
|
} else {
|
|
to = from.clone();
|
|
var nTemp1 = from.r2 - bbox.r1 + 1;
|
|
var nTemp2 = bbox.r2 - bbox.r1 + 1;
|
|
to.setOffsetLast({
|
|
offsetRow: -Math.min(nTemp1, nTemp2),
|
|
offsetCol: 0
|
|
});
|
|
}
|
|
}
|
|
}
|
|
if (null != to) {
|
|
aToChange.push({
|
|
elem: elem,
|
|
to: to
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
aToChange.sort(function (a, b) {
|
|
return shiftSort(a, b, offset);
|
|
});
|
|
if (null != this.fChange) {
|
|
for (var i = 0, length = aToChange.length; i < length; ++i) {
|
|
var item = aToChange[i];
|
|
this.fChange.call(this, item.elem.data, item.elem.bbox, item.to, oChangeParam);
|
|
}
|
|
}
|
|
var fOldChange = this.fChange;
|
|
this.fChange = null;
|
|
for (var i = 0, length = aToChange.length; i < length; ++i) {
|
|
var item = aToChange[i];
|
|
var elem = item.elem;
|
|
this.removeElement(elem, oChangeParam);
|
|
}
|
|
for (var i = 0, length = aToChange.length; i < length; ++i) {
|
|
var item = aToChange[i];
|
|
if (null != item.to) {
|
|
this.add(item.to, item.elem.data, oChangeParam);
|
|
}
|
|
}
|
|
this.fChange = fOldChange;
|
|
},
|
|
getAll: function () {
|
|
var aRes = [];
|
|
var oNodes = this.oIntervalTreeRB.getNodeAll();
|
|
for (var i = 0, length = oNodes.length; i < length; i++) {
|
|
var oNode = oNodes[i];
|
|
if (oNode.storedValue) {
|
|
for (var j = 0, length2 = oNode.storedValue.length; j < length2; j++) {
|
|
var elem = oNode.storedValue[j];
|
|
aRes.push(elem);
|
|
}
|
|
}
|
|
}
|
|
return aRes;
|
|
},
|
|
setDependenceManager: function (oDependenceManager) {
|
|
this.oDependenceManager = oDependenceManager;
|
|
}
|
|
};
|
|
function CellAreaElem(row, col, data) {
|
|
this.row = row;
|
|
this.col = col;
|
|
this.data = data;
|
|
}
|
|
function CellArea(fChange) {
|
|
this.rows = new TreeRB();
|
|
this.fChange = fChange;
|
|
}
|
|
CellArea.prototype = {
|
|
add: function (row, col, value) {
|
|
var oNewNode = new TreeRBNode(row, null);
|
|
var oStoredNode = this.rows.insertOrGet(oNewNode);
|
|
if (oStoredNode == oNewNode) {
|
|
oStoredNode.storedValue = new TreeRB();
|
|
}
|
|
var oNewRow = oStoredNode.storedValue;
|
|
var oNewColNode = new TreeRBNode(col, null);
|
|
var oStoredColNode = oNewRow.insertOrGet(oNewColNode);
|
|
var storedValue = new RangeDataManagerElem(new Asc.Range(col, row, col, row), value);
|
|
oNewColNode.storedValue = storedValue;
|
|
if (null != this.fChange) {
|
|
this.fChange.call(this, storedValue.data, null, storedValue.bbox);
|
|
}
|
|
},
|
|
get: function (bbox) {
|
|
var aRes = [];
|
|
var aRows = this.rows.enumerate(bbox.r1, bbox.r2);
|
|
for (var i = 0, length = aRows.length; i < length; i++) {
|
|
var row = aRows[i];
|
|
var aCells = row.storedValue.enumerate(bbox.c1, bbox.c2);
|
|
for (var j = 0, length2 = aCells.length; j < length2; j++) {
|
|
aRes.push(aCells[j].storedValue);
|
|
}
|
|
}
|
|
return aRes;
|
|
},
|
|
remove: function (bbox) {
|
|
var aElems = this.get(bbox);
|
|
for (var i = 0, length = aElems.length; i < length; ++i) {
|
|
var elem = aElems[i];
|
|
this.removeElement(elem);
|
|
}
|
|
},
|
|
removeElement: function (elem) {
|
|
var rowElem = this.rows.getElem(elem.bbox.r1);
|
|
if (rowElem) {
|
|
var row = rowElem.storedValue;
|
|
var cellElem = row.getElem(elem.bbox.c1);
|
|
if (cellElem) {
|
|
row.deleteNode(cellElem);
|
|
if (row.isEmpty()) {
|
|
this.rows.deleteNode(rowElem);
|
|
}
|
|
if (null != this.fChange) {
|
|
this.fChange.call(this, cellElem.storedValue.data, cellElem.storedValue.bbox, null);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
removeAll: function () {
|
|
this.remove(new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0));
|
|
this.oIntervalTreeRB = new IntervalTreeRB();
|
|
},
|
|
shiftGet: function (bbox, bHor) {
|
|
var bboxGet = shiftGetBBox(bbox, bHor);
|
|
return {
|
|
bbox: bboxGet,
|
|
elems: this.get(bboxGet)
|
|
};
|
|
},
|
|
shift: function (bbox, bAdd, bHor, oGetRes) {
|
|
var _this = this;
|
|
if (null == oGetRes) {
|
|
oGetRes = this.shiftGet(bbox, bHor);
|
|
}
|
|
var offset;
|
|
if (bHor) {
|
|
offset = {
|
|
offsetRow: 0,
|
|
offsetCol: bbox.c2 - bbox.c1 + 1
|
|
};
|
|
} else {
|
|
offset = {
|
|
offsetRow: bbox.r2 - bbox.r1 + 1,
|
|
offsetCol: 0
|
|
};
|
|
}
|
|
if (!bAdd) {
|
|
offset.offsetRow = -offset.offsetRow;
|
|
offset.offsetCol = -offset.offsetCol;
|
|
}
|
|
this._shiftmove(true, bbox, offset, oGetRes.elems);
|
|
},
|
|
move: function (from, to) {
|
|
var offset = {
|
|
offsetRow: to.r1 - from.r1,
|
|
offsetCol: to.c1 - from.c1
|
|
};
|
|
var oGetRes = this.get(from);
|
|
this._shiftmove(false, from, offset, oGetRes);
|
|
},
|
|
_shiftmove: function (bShift, bbox, offset, elems) {
|
|
var aToChange = [];
|
|
if (elems.length > 0) {
|
|
var bboxAsc = Asc.Range(bbox.c1, bbox.r1, bbox.c2, bbox.r2);
|
|
var bAdd = offset.offsetRow > 0 || offset.offsetCol > 0;
|
|
for (var i = 0, length = elems.length; i < length; i++) {
|
|
var elem = elems[i];
|
|
var to = null;
|
|
if (!bShift || bAdd || !bboxAsc.containsRange(elem.bbox)) {
|
|
to = elem.bbox.clone();
|
|
to.setOffset(offset);
|
|
}
|
|
aToChange.push({
|
|
elem: elem,
|
|
to: to
|
|
});
|
|
}
|
|
}
|
|
aToChange.sort(function (a, b) {
|
|
return shiftSort(a, b, offset);
|
|
});
|
|
if (null != this.fChange) {
|
|
for (var i = 0, length = aToChange.length; i < length; ++i) {
|
|
var item = aToChange[i];
|
|
this.fChange.call(this, item.elem.data, item.elem.bbox, item.to);
|
|
}
|
|
}
|
|
var fOldChange = this.fChange;
|
|
this.fChange = null;
|
|
for (var i = 0, length = aToChange.length; i < length; ++i) {
|
|
var item = aToChange[i];
|
|
var elem = item.elem;
|
|
this.removeElement(elem);
|
|
}
|
|
for (var i = 0, length = aToChange.length; i < length; ++i) {
|
|
var item = aToChange[i];
|
|
if (null != item.to) {
|
|
this.add(item.to.r1, item.to.c1, item.elem.data);
|
|
}
|
|
}
|
|
this.fChange = fOldChange;
|
|
},
|
|
getAll: function () {
|
|
var aRes = [];
|
|
var oRows = this.rows.getNodeAll();
|
|
for (var i = 0, length = oRows.length; i < length; i++) {
|
|
var row = oRows[i];
|
|
if (row.storedValue) {
|
|
var cells = row.storedValue.getNodeAll();
|
|
for (var j = 0, length2 = cells.length; j < length2; j++) {
|
|
var elem = cells[j];
|
|
aRes.push(elem.storedValue);
|
|
}
|
|
}
|
|
}
|
|
return aRes;
|
|
}
|
|
};
|
|
function TablePart() {
|
|
this.Ref = null;
|
|
this.HeaderRowCount = null;
|
|
this.TotalsRowCount = null;
|
|
this.DisplayName = null;
|
|
this.AutoFilter = null;
|
|
this.SortState = null;
|
|
this.TableColumns = null;
|
|
this.TableStyleInfo = null;
|
|
this.result = null;
|
|
}
|
|
TablePart.prototype.clone = function (ws) {
|
|
var i, res = new TablePart();
|
|
res.Ref = this.Ref ? this.Ref.clone() : null;
|
|
res.HeaderRowCount = this.HeaderRowCount;
|
|
res.TotalsRowCount = this.TotalsRowCount;
|
|
if (this.AutoFilter) {
|
|
res.AutoFilter = this.AutoFilter.clone();
|
|
}
|
|
if (this.SortState) {
|
|
res.SortState = this.SortState.clone();
|
|
}
|
|
if (this.TableColumns) {
|
|
res.TableColumns = [];
|
|
for (i = 0; i < this.TableColumns.length; ++i) {
|
|
res.TableColumns.push(this.TableColumns[i].clone());
|
|
}
|
|
}
|
|
if (this.TableStyleInfo) {
|
|
res.TableStyleInfo = this.TableStyleInfo.clone();
|
|
}
|
|
if (this.result) {
|
|
res.result = [];
|
|
for (i = 0; i < this.result.length; ++i) {
|
|
res.result.push(this.result[i].clone());
|
|
}
|
|
}
|
|
res.recalc(ws);
|
|
return res;
|
|
};
|
|
TablePart.prototype.recalc = function (ws) {
|
|
this.DisplayName = ws.workbook.oNameGenerator.getNextTableName(ws, this.Ref);
|
|
};
|
|
function AutoFilter() {
|
|
this.Ref = null;
|
|
this.FilterColumns = null;
|
|
this.SortState = null;
|
|
this.result = null;
|
|
}
|
|
AutoFilter.prototype.clone = function () {
|
|
var i, res = new AutoFilter();
|
|
res.Ref = this.Ref ? this.Ref.clone() : null;
|
|
res.refTable = this.refTable ? this.refTable.clone() : null;
|
|
if (this.FilterColumns) {
|
|
res.FilterColumns = [];
|
|
for (i = 0; i < this.FilterColumns.length; ++i) {
|
|
res.FilterColumns.push(this.FilterColumns[i].clone());
|
|
}
|
|
}
|
|
if (this.SortState) {
|
|
res.SortState = this.SortState.clone();
|
|
}
|
|
if (this.result) {
|
|
res.result = [];
|
|
for (i = 0; i < this.result.length; ++i) {
|
|
res.result.push(this.result[i].clone());
|
|
}
|
|
}
|
|
return res;
|
|
};
|
|
function FilterColumns() {
|
|
this.ColId = null;
|
|
this.CustomFiltersObj = null;
|
|
}
|
|
FilterColumns.prototype.clone = function () {
|
|
var res = new FilterColumns();
|
|
res.ColId = this.ColId;
|
|
if (this.CustomFiltersObj) {
|
|
res.CustomFiltersObj = this.CustomFiltersObj.clone();
|
|
}
|
|
return res;
|
|
};
|
|
function SortState() {
|
|
this.Ref = null;
|
|
this.CaseSensitive = null;
|
|
this.SortConditions = null;
|
|
}
|
|
SortState.prototype.clone = function () {
|
|
var i, res = new SortState();
|
|
res.Ref = this.Ref;
|
|
res.CaseSensitive = this.CaseSensitive;
|
|
if (this.SortConditions) {
|
|
res.SortConditions = [];
|
|
for (i = 0; i < this.SortConditions.length; ++i) {
|
|
res.SortConditions.push(this.SortConditions[i].clone());
|
|
}
|
|
}
|
|
return res;
|
|
};
|
|
function TableColumn() {
|
|
this.Name = null;
|
|
this.TotalsRowLabel = null;
|
|
this.TotalsRowFunction = null;
|
|
this.TotalsRowFormula = null;
|
|
this.dxf = null;
|
|
this.CalculatedColumnFormula = null;
|
|
}
|
|
TableColumn.prototype.clone = function () {
|
|
var res = new TableColumn();
|
|
res.Name = this.Name;
|
|
res.TotalsRowLabel = this.TotalsRowLabel;
|
|
res.TotalsRowFunction = this.TotalsRowFunction;
|
|
res.TotalsRowFormula = this.TotalsRowFormula;
|
|
if (this.dxf) {
|
|
res.dxf = this.dxf.clone;
|
|
}
|
|
res.CalculatedColumnFormula = this.CalculatedColumnFormula;
|
|
return res;
|
|
};
|
|
function TableStyleInfo() {
|
|
this.Name = null;
|
|
this.ShowColumnStripes = null;
|
|
this.ShowRowStripes = null;
|
|
this.ShowFirstColumn = null;
|
|
this.ShowLastColumn = null;
|
|
}
|
|
TableStyleInfo.prototype.clone = function () {
|
|
var res = new TableStyleInfo();
|
|
res.Name = this.Name;
|
|
res.ShowColumnStripes = this.ShowColumnStripes;
|
|
res.ShowRowStripes = this.ShowRowStripes;
|
|
res.ShowFirstColumn = this.ShowFirstColumn;
|
|
res.ShowLastColumn = this.ShowLastColumn;
|
|
return res;
|
|
};
|
|
function FilterColumn() {
|
|
this.ColId = null;
|
|
this.Filters = null;
|
|
this.CustomFiltersObj = null;
|
|
this.DynamicFilter = null;
|
|
this.ColorFilter = null;
|
|
this.Top10 = null;
|
|
this.ShowButton = true;
|
|
}
|
|
FilterColumn.prototype.clone = function () {
|
|
var res = new FilterColumn();
|
|
res.ColId = this.ColId;
|
|
if (this.Filters) {
|
|
res.Filters = this.Filters.clone();
|
|
}
|
|
if (this.CustomFiltersObj) {
|
|
res.CustomFiltersObj = this.CustomFiltersObj.clone();
|
|
}
|
|
if (this.DynamicFilter) {
|
|
res.DynamicFilter = this.DynamicFilter.clone();
|
|
}
|
|
if (this.ColorFilter) {
|
|
res.ColorFilter = this.ColorFilter.clone();
|
|
}
|
|
if (this.Top10) {
|
|
res.Top10 = this.Top10.clone();
|
|
}
|
|
res.ShowButton = this.ShowButton;
|
|
return res;
|
|
};
|
|
function Filters() {
|
|
this.Values = [];
|
|
this.Dates = [];
|
|
this.Blank = null;
|
|
}
|
|
Filters.prototype.clone = function () {
|
|
var i, res = new Filters();
|
|
res.Values = this.Values.slice();
|
|
if (this.Dates) {
|
|
for (i = 0; i < this.Dates.length; ++i) {
|
|
res.Dates.push(this.Dates[i].clone());
|
|
}
|
|
}
|
|
res.Blank = this.Blank;
|
|
return res;
|
|
};
|
|
function Filter() {
|
|
this.Val = null;
|
|
}
|
|
function DateGroupItem() {
|
|
this.DateTimeGrouping = null;
|
|
this.Day = null;
|
|
this.Hour = null;
|
|
this.Minute = null;
|
|
this.Month = null;
|
|
this.Second = null;
|
|
this.Year = null;
|
|
}
|
|
DateGroupItem.prototype.clone = function () {
|
|
var res = new DateGroupItem();
|
|
res.DateTimeGrouping = this.DateTimeGrouping;
|
|
res.Day = this.Day;
|
|
res.Hour = this.Hour;
|
|
res.Minute = this.Minute;
|
|
res.Month = this.Month;
|
|
res.Second = this.Second;
|
|
res.Year = this.Year;
|
|
return res;
|
|
};
|
|
function CustomFilters() {
|
|
this.And = null;
|
|
this.CustomFilters = null;
|
|
}
|
|
CustomFilters.prototype.clone = function () {
|
|
var i, res = new CustomFilters();
|
|
res.And = this.And;
|
|
if (this.CustomFilters) {
|
|
res.CustomFilters = [];
|
|
for (i = 0; i < this.CustomFilters.length; ++i) {
|
|
res.CustomFilters.push(this.CustomFilters[i].clone());
|
|
}
|
|
}
|
|
return res;
|
|
};
|
|
function CustomFilter() {
|
|
this.Operator = null;
|
|
this.Val = null;
|
|
}
|
|
CustomFilter.prototype.clone = function () {
|
|
var res = new CustomFilter();
|
|
res.Operator = this.Operator;
|
|
res.Val = this.Val;
|
|
return res;
|
|
};
|
|
function DynamicFilter() {
|
|
this.Type = null;
|
|
this.Val = null;
|
|
this.MaxVal = null;
|
|
}
|
|
DynamicFilter.prototype.clone = function () {
|
|
var res = new DynamicFilter();
|
|
res.Type = this.Type;
|
|
res.Val = this.Val;
|
|
res.MaxVal = this.MaxVal;
|
|
return res;
|
|
};
|
|
function ColorFilter() {
|
|
this.CellColor = null;
|
|
this.dxf = null;
|
|
}
|
|
ColorFilter.prototype.clone = function () {
|
|
var res = new ColorFilter();
|
|
res.CellColor = this.CellColor;
|
|
if (this.dxf) {
|
|
res.dxf = this.dxf.clone();
|
|
}
|
|
return res;
|
|
};
|
|
function Top10() {
|
|
this.FilterVal = null;
|
|
this.Percent = null;
|
|
this.Top = null;
|
|
this.Val = null;
|
|
}
|
|
Top10.prototype.clone = function () {
|
|
var res = new Top10();
|
|
res.FilterVal = this.FilterVal;
|
|
res.Percent = this.Percent;
|
|
res.Top = this.Top;
|
|
res.Val = this.Val;
|
|
return res;
|
|
};
|
|
function SortCondition() {
|
|
this.Ref = null;
|
|
this.ConditionSortBy = null;
|
|
this.ConditionDescending = null;
|
|
this.dxf = null;
|
|
}
|
|
SortCondition.prototype.clone = function () {
|
|
var res = new SortCondition();
|
|
res.Ref = this.Ref;
|
|
res.ConditionSortBy = this.ConditionSortBy;
|
|
res.ConditionDescending = this.ConditionDescending;
|
|
if (this.dxf) {
|
|
res.dxf = this.dxf.clone();
|
|
}
|
|
return res;
|
|
};
|
|
function Result() {
|
|
this.x = null;
|
|
this.y = null;
|
|
this.width = null;
|
|
this.height = null;
|
|
this.id = null;
|
|
this.idNext = null;
|
|
this.hiddenRows = null;
|
|
}
|
|
Result.prototype.clone = function () {
|
|
var res = new Result();
|
|
res.x = this.x;
|
|
res.y = this.y;
|
|
res.width = this.width;
|
|
res.height = this.height;
|
|
res.id = this.id;
|
|
res.idNext = this.idNext;
|
|
res.hiddenRows = this.hiddenRows;
|
|
res.showButton = this.showButton;
|
|
return res;
|
|
}; |