3980 lines
136 KiB
JavaScript
3980 lines
136 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2014
|
|
*
|
|
* This program is a free software product. You can redistribute it and/or
|
|
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
|
* version 3 as published by the Free Software Foundation. In accordance with
|
|
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
|
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
|
* of any third-party rights.
|
|
*
|
|
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
|
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
*
|
|
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
|
* EU, LV-1021.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of the Program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU AGPL version 3.
|
|
*
|
|
* Pursuant to Section 7(b) of the License you must retain the original Product
|
|
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
|
* grant you any rights under trademark law for use of our trademarks.
|
|
*
|
|
* All the Product's GUI elements, including illustrations and icon sets, as
|
|
* well as technical writing content are licensed under the terms of the
|
|
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
|
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
|
*
|
|
*/
|
|
var 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_oThemeColorTint = [[0, -0.0499893185216834, -0.1499984740745262, -0.249977111117893, -0.3499862666707358, -0.499984740745262], [0, 0.499984740745262, 0.3499862666707358, 0.249977111117893, 0.1499984740745262, 0.0499893185216834], [0, -0.09997863704336681, -0.249977111117893, -0.499984740745262, -0.749992370372631, -0.8999908444471572], [0, 0.7999816888943144, 0.5999938962981049, 0.3999755851924192, -0.249977111117893, -0.499984740745262], [0, 0.7999816888943144, 0.5999938962981049, 0.3999755851924192, -0.249977111117893, -0.499984740745262], [0, 0.7999816888943144, 0.5999938962981049, 0.3999755851924192, -0.249977111117893, -0.499984740745262], [0, 0.7999816888943144, 0.5999938962981049, 0.3999755851924192, -0.249977111117893, -0.499984740745262], [0, 0.7999816888943144, 0.5999938962981049, 0.3999755851924192, -0.249977111117893, -0.499984740745262], [0, 0.7999816888943144, 0.5999938962981049, 0.3999755851924192, -0.249977111117893, -0.499984740745262], [0, 0.7999816888943144, 0.5999938962981049, 0.3999755851924192, -0.249977111117893, -0.499984740745262]];
|
|
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 = new Object();
|
|
for (var i in map_themeExcel_to_themePresentation) {
|
|
map_themePresentation_to_themeExcel[map_themeExcel_to_themePresentation[i]] = i - 0;
|
|
}
|
|
function RgbColor(rgb) {
|
|
this.Properties = {
|
|
rgb: 0
|
|
};
|
|
this.rgb = rgb;
|
|
}
|
|
RgbColor.prototype = {
|
|
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;
|
|
}
|
|
};
|
|
function ThemeColor() {
|
|
this.Properties = {
|
|
rgb: 0,
|
|
theme: 1,
|
|
tint: 2
|
|
};
|
|
this.rgb = null;
|
|
this.theme = null;
|
|
this.tint = null;
|
|
}
|
|
ThemeColor.prototype = {
|
|
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;
|
|
},
|
|
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);
|
|
var L = HSL.L / g_nHSLMaxValue;
|
|
if (this.tint < 0) {
|
|
L = L * (1 + this.tint);
|
|
} else {
|
|
L = L * (1 - this.tint) + (1 - 1 * (1 - this.tint));
|
|
}
|
|
HSL.L = Asc.floor(L * g_nHSLMaxValue);
|
|
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 = parseInt(asc_color.get_value());
|
|
var _id = (_index / 6) >> 0;
|
|
var _pos = _index - _id * 6;
|
|
var tint = g_oThemeColorTint[_id][_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 = new Object();
|
|
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 Font(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultFontAbs;
|
|
}
|
|
this.Properties = {
|
|
fn: 0,
|
|
scheme: 1,
|
|
fs: 2,
|
|
b: 3,
|
|
i: 4,
|
|
u: 5,
|
|
s: 6,
|
|
c: 7,
|
|
va: 8
|
|
};
|
|
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 (EFontScheme.fontschemeNone == this.scheme && EFontScheme.fontschemeNone == font.scheme) {
|
|
bRes = this.fn == font.fn;
|
|
} else {
|
|
if (EFontScheme.fontschemeNone != this.scheme && 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;
|
|
}
|
|
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;
|
|
}
|
|
}
|
|
};
|
|
function Fill(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultFillAbs;
|
|
}
|
|
this.Properties = {
|
|
bg: 0
|
|
};
|
|
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;
|
|
}
|
|
}
|
|
};
|
|
function BorderProp() {
|
|
this.Properties = {
|
|
s: 0,
|
|
c: 1
|
|
};
|
|
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;
|
|
}
|
|
}
|
|
};
|
|
function Border(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultBorderAbs;
|
|
}
|
|
this.Properties = {
|
|
l: 0,
|
|
t: 1,
|
|
r: 2,
|
|
b: 3,
|
|
d: 4,
|
|
ih: 5,
|
|
iv: 6,
|
|
dd: 7,
|
|
du: 8
|
|
};
|
|
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 = border.dd;
|
|
}
|
|
if (null != border.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;
|
|
}
|
|
}
|
|
};
|
|
function Num(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultNumAbs;
|
|
}
|
|
this.Properties = {
|
|
f: 0
|
|
};
|
|
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;
|
|
}
|
|
}
|
|
};
|
|
function CellXfs() {
|
|
this.Properties = {
|
|
border: 0,
|
|
fill: 1,
|
|
font: 2,
|
|
num: 3,
|
|
align: 4,
|
|
QuotePrefix: 5,
|
|
XfId: 6
|
|
};
|
|
this.border = null;
|
|
this.fill = null;
|
|
this.font = null;
|
|
this.num = null;
|
|
this.align = null;
|
|
this.QuotePrefix = null;
|
|
this.XfId = null;
|
|
}
|
|
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);
|
|
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;
|
|
}
|
|
}
|
|
};
|
|
function Align(val) {
|
|
if (null == val) {
|
|
val = g_oDefaultAlignAbs;
|
|
}
|
|
this.Properties = {
|
|
hor: 0,
|
|
indent: 1,
|
|
RelativeIndent: 2,
|
|
shrink: 3,
|
|
angle: 4,
|
|
ver: 5,
|
|
wrap: 6
|
|
};
|
|
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);
|
|
},
|
|
_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;
|
|
}
|
|
}
|
|
},
|
|
getDefaultStylesCount: function () {
|
|
var nCount = this.DefaultStyles.length;
|
|
for (var i = 0, length = nCount; i < length; ++i) {
|
|
if (this.DefaultStyles[i].Hidden) {
|
|
--nCount;
|
|
}
|
|
}
|
|
return nCount;
|
|
},
|
|
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;
|
|
},
|
|
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;
|
|
},
|
|
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;
|
|
},
|
|
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;
|
|
},
|
|
_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 null;
|
|
}
|
|
};
|
|
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;
|
|
},
|
|
getFill: function () {
|
|
if (null != this.xfs && null != this.xfs.fill) {
|
|
return this.xfs.fill.bg;
|
|
}
|
|
return g_oDefaultFill.bg;
|
|
},
|
|
getFontColor: function () {
|
|
if (null != this.xfs && null != this.xfs.font) {
|
|
return this.xfs.font.c;
|
|
}
|
|
return g_oDefaultFont.c;
|
|
},
|
|
getFont: function () {
|
|
if (null != this.xfs && null != this.xfs.font) {
|
|
return this.xfs.font;
|
|
}
|
|
return null;
|
|
},
|
|
getBorder: function () {
|
|
if (null != this.xfs && null != this.xfs.border) {
|
|
return this.xfs.border;
|
|
}
|
|
return g_oDefaultBorder;
|
|
},
|
|
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;
|
|
}
|
|
},
|
|
_prepareSet: function (oItemWithXfs) {
|
|
if (null == oItemWithXfs.xfs) {
|
|
oItemWithXfs.xfs = this.oDefaultXfs.clone();
|
|
}
|
|
return oItemWithXfs.xfs;
|
|
},
|
|
_prepareSetFont: function (oItemWithXfs) {
|
|
var xfs = this._prepareSet(oItemWithXfs);
|
|
if (null == xfs.font) {
|
|
xfs.font = new Font();
|
|
}
|
|
return xfs;
|
|
},
|
|
_prepareSetAlign: function (oItemWithXfs) {
|
|
var xfs = this._prepareSet(oItemWithXfs);
|
|
if (null == xfs.align) {
|
|
xfs.align = new Align();
|
|
}
|
|
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.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.num = null;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSet(oItemWithXfs);
|
|
if (null == xfs.num) {
|
|
xfs.num = new Num();
|
|
}
|
|
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.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.font.fn = g_oDefaultFont.fn;
|
|
xfs.font.scheme = EFontScheme.fontschemeNone;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSetFont(oItemWithXfs);
|
|
xfs.font.fn = val;
|
|
xfs.font.scheme = 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.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.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.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.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.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.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.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.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.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.fill.bg = g_oDefaultFill.bg;
|
|
}
|
|
} else {
|
|
xfs = this._prepareSet(oItemWithXfs);
|
|
if (null == xfs.fill) {
|
|
xfs.fill = new Fill();
|
|
}
|
|
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.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.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.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.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.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);
|
|
}
|
|
}
|
|
};
|
|
function Hyperlink() {
|
|
this.Properties = {
|
|
Ref: 0,
|
|
Location: 1,
|
|
Hyperlink: 2,
|
|
Tooltip: 3
|
|
};
|
|
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 () {
|
|
var oNewHyp = new Hyperlink();
|
|
if (null !== this.Ref) {
|
|
oNewHyp.Ref = this.Ref.clone();
|
|
}
|
|
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 = (false == rx_test_ws_name.test(this.LocationSheet)) ? "'" + this.LocationSheet + "'" : this.LocationSheet;
|
|
this.Location += "!" + 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:
|
|
var sRes = this.Ref.worksheet.getName();
|
|
if (false == rx_test_ws_name.test(sRes)) {
|
|
sRes = "'" + sRes + "'";
|
|
}
|
|
sRes += "!" + this.Ref.getName();
|
|
return sRes;
|
|
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 Col(worksheet, index) {
|
|
this.ws = worksheet;
|
|
this.sm = this.ws.workbook.oStyleManager;
|
|
this.cs = this.ws.workbook.CellStyles;
|
|
this.index = index;
|
|
this.id = this.ws.getNextColId();
|
|
this.BestFit = null;
|
|
this.hd = null;
|
|
this.CustomWidth = null;
|
|
this.width = null;
|
|
this.xfs = null;
|
|
}
|
|
Col.prototype = {
|
|
getId: function () {
|
|
return this.id;
|
|
},
|
|
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;
|
|
},
|
|
isEmptyToSave: function () {
|
|
return null == this.BestFit && null == this.hd && null == this.width && null == this.xfs && null == this.CustomWidth;
|
|
},
|
|
isEmpty: function () {
|
|
return this.isEmptyToSave();
|
|
},
|
|
Remove: function () {
|
|
this.ws._removeCol(this.index);
|
|
},
|
|
clone: function () {
|
|
var oNewCol = new Col(this.ws, 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;
|
|
}
|
|
}
|
|
},
|
|
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(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oldVal, newVal));
|
|
}
|
|
},
|
|
setCellStyle: function (val) {
|
|
var newVal = this.cs._prepareCellStyle(val);
|
|
var oRes = this.sm.setCellStyle(this, newVal);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
var oldStyleName = this.cs.getStyleNameByXfId(oRes.oldVal);
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_SetCellStyle, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oldStyleName, val));
|
|
var oStyle = this.cs.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.sm.setNumFormat(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_NumFormat, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFont: function (val) {
|
|
var oRes = this.sm.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(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oldVal, newVal));
|
|
}
|
|
},
|
|
setFontname: function (val) {
|
|
var oRes = this.sm.setFontname(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Fontname, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontsize: function (val) {
|
|
var oRes = this.sm.setFontsize(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Fontsize, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontcolor: function (val) {
|
|
var oRes = this.sm.setFontcolor(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Fontcolor, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setBold: function (val) {
|
|
var oRes = this.sm.setBold(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Bold, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setItalic: function (val) {
|
|
var oRes = this.sm.setItalic(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Italic, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setUnderline: function (val) {
|
|
var oRes = this.sm.setUnderline(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Underline, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setStrikeout: function (val) {
|
|
var oRes = this.sm.setStrikeout(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Strikeout, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontAlign: function (val) {
|
|
var oRes = this.sm.setFontAlign(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_FontAlign, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAlignVertical: function (val) {
|
|
var oRes = this.sm.setAlignVertical(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_AlignVertical, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAlignHorizontal: function (val) {
|
|
var oRes = this.sm.setAlignHorizontal(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_AlignHorizontal, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFill: function (val) {
|
|
var oRes = this.sm.setFill(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Fill, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setBorder: function (val) {
|
|
var oRes = this.sm.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(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oldVal, newVal));
|
|
}
|
|
},
|
|
setShrinkToFit: function (val) {
|
|
var oRes = this.sm.setShrinkToFit(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_ShrinkToFit, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setWrap: function (val) {
|
|
var oRes = this.sm.setShrinkToFit(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Wrap, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAngle: function (val) {
|
|
var oRes = this.sm.setAngle(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Angle, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setVerticalText: function (val) {
|
|
var oRes = this.sm.setVerticalText(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoCol, historyitem_RowCol_Angle, this.ws.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(this.index, false, oRes.oldVal, oRes.newVal));
|
|
}
|
|
}
|
|
};
|
|
function Row(worksheet) {
|
|
this.ws = worksheet;
|
|
this.sm = this.ws.workbook.oStyleManager;
|
|
this.cs = this.ws.workbook.CellStyles;
|
|
this.c = new Object();
|
|
this.id = this.ws.getNextRowId();
|
|
this.r = null;
|
|
this.index = null;
|
|
this.xfs = null;
|
|
this.h = null;
|
|
this.hd = null;
|
|
this.CustomHeight = null;
|
|
}
|
|
Row.prototype = {
|
|
getCells: function () {
|
|
return this.c;
|
|
},
|
|
getId: function () {
|
|
return this.id;
|
|
},
|
|
create: function (row) {
|
|
this.index = row - 1;
|
|
this.r = row;
|
|
this.xfs = null;
|
|
},
|
|
moveVer: function (nDif) {
|
|
this.r += nDif;
|
|
},
|
|
isEmptyToSave: function () {
|
|
if (null != this.xfs || null != this.h || null != this.hd || null != this.CustomHeight) {
|
|
return false;
|
|
}
|
|
var bEmptyCells = true;
|
|
for (var i in this.c) {
|
|
bEmptyCells = false;
|
|
break;
|
|
}
|
|
if (false == bEmptyCells) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
isEmpty: function () {
|
|
return this.isEmptyToSave();
|
|
},
|
|
Remove: function () {
|
|
this.ws._removeRow(this.index);
|
|
},
|
|
clone: function () {
|
|
var oNewRow = new Row(this.ws);
|
|
oNewRow.r = this.r;
|
|
if (null != this.xfs) {
|
|
oNewRow.xfs = this.xfs.clone();
|
|
}
|
|
if (null != this.h) {
|
|
oNewRow.h = this.h;
|
|
}
|
|
if (null != this.CustomHeight) {
|
|
oNewRow.CustomHeight = this.CustomHeight;
|
|
}
|
|
if (null != this.hd) {
|
|
oNewRow.hd = this.hd;
|
|
}
|
|
for (var i in this.c) {
|
|
oNewRow.c[i] = this.c[i].clone();
|
|
}
|
|
return oNewRow;
|
|
},
|
|
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 (null != prop.hd) {
|
|
this.hd = prop.hd;
|
|
} else {
|
|
this.hd = null;
|
|
}
|
|
if (null != prop.CustomHeight) {
|
|
this.CustomHeight = prop.CustomHeight;
|
|
} else {
|
|
this.CustomHeight = null;
|
|
}
|
|
}
|
|
},
|
|
copyProperty: function (otherRow) {
|
|
if (null != otherRow.xfs) {
|
|
this.xfs = otherRow.xfs.clone();
|
|
} else {
|
|
this.xfs = null;
|
|
}
|
|
this.h = otherRow.h;
|
|
this.CustomHeight = otherRow.CustomHeight;
|
|
this.hd = otherRow.hd;
|
|
},
|
|
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(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oldVal, newVal));
|
|
}
|
|
},
|
|
setCellStyle: function (val) {
|
|
var newVal = this.cs._prepareCellStyle(val);
|
|
var oRes = this.sm.setCellStyle(this, newVal);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
var oldStyleName = this.cs.getStyleNameByXfId(oRes.oldVal);
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_SetCellStyle, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oldStyleName, val));
|
|
var oStyle = this.cs.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.sm.setNumFormat(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_NumFormat, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFont: function (val) {
|
|
var oRes = this.sm.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(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oldVal, newVal));
|
|
}
|
|
},
|
|
setFontname: function (val) {
|
|
var oRes = this.sm.setFontname(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Fontname, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontsize: function (val) {
|
|
var oRes = this.sm.setFontsize(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Fontsize, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontcolor: function (val) {
|
|
var oRes = this.sm.setFontcolor(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Fontcolor, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setBold: function (val) {
|
|
var oRes = this.sm.setBold(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Bold, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setItalic: function (val) {
|
|
var oRes = this.sm.setItalic(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Italic, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setUnderline: function (val) {
|
|
var oRes = this.sm.setUnderline(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Underline, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setStrikeout: function (val) {
|
|
var oRes = this.sm.setStrikeout(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Strikeout, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFontAlign: function (val) {
|
|
var oRes = this.sm.setFontAlign(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_FontAlign, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAlignVertical: function (val) {
|
|
var oRes = this.sm.setAlignVertical(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_AlignVertical, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAlignHorizontal: function (val) {
|
|
var oRes = this.sm.setAlignHorizontal(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_AlignHorizontal, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setFill: function (val) {
|
|
var oRes = this.sm.setFill(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Fill, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setBorder: function (val) {
|
|
var oRes = this.sm.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(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oldVal, newVal));
|
|
}
|
|
},
|
|
setShrinkToFit: function (val) {
|
|
var oRes = this.sm.setShrinkToFit(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_ShrinkToFit, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setWrap: function (val) {
|
|
var oRes = this.sm.setShrinkToFit(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Wrap, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setAngle: function (val) {
|
|
var oRes = this.sm.setFontname(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Angle, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
},
|
|
setVerticalText: function (val) {
|
|
var oRes = this.sm.setVerticalText(this, val);
|
|
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
|
|
History.Add(g_oUndoRedoRow, historyitem_RowCol_Angle, this.ws.getId(), new Asc.Range(0, this.index, gc_nMaxCol0, this.index), new UndoRedoData_IndexSimpleProp(this.index, true, oRes.oldVal, oRes.newVal));
|
|
}
|
|
}
|
|
};
|
|
function CCellValueMultiText() {
|
|
this.Properties = {
|
|
text: 0,
|
|
format: 1
|
|
};
|
|
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;
|
|
}
|
|
}
|
|
};
|
|
function CCellValue(cell) {
|
|
this.Properties = {
|
|
text: 0,
|
|
multiText: 1,
|
|
number: 2,
|
|
type: 3
|
|
};
|
|
this.cell = cell;
|
|
this.text = null;
|
|
this.multiText = null;
|
|
this.number = null;
|
|
this.type = CellValueType.Number;
|
|
this.textValue = null;
|
|
this.aTextValue2 = new Array();
|
|
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) {
|
|
var sText = "";
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
sText += this.multiText[i].text;
|
|
}
|
|
if ("" != sText) {
|
|
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 (cell) {
|
|
var oRes = new CCellValue(cell);
|
|
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 = new Array();
|
|
this.textValueForEdit = null;
|
|
this.textValueForEdit2 = null;
|
|
},
|
|
makeSimpleText: function () {
|
|
var bRes = false;
|
|
if (null != this.multiText) {
|
|
var sRes = "";
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
sRes += this.multiText[i].text;
|
|
}
|
|
this.multiText = null;
|
|
this.text = sRes;
|
|
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) {
|
|
for (var i = 0, length = this.multiText.length; i < length; i++) {
|
|
sResult += this.multiText[i].text;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return sResult;
|
|
},
|
|
getValue: function () {
|
|
if (null == this.textValue) {
|
|
this.getValue2(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 () {
|
|
if (null == this.textValueForEdit) {
|
|
this.getValueForEdit2();
|
|
this.textValueForEdit = "";
|
|
for (var i = 0, length = this.textValueForEdit2.length; i < length; ++i) {
|
|
this.textValueForEdit += this.textValueForEdit2[i].text;
|
|
}
|
|
}
|
|
return this.textValueForEdit;
|
|
},
|
|
getValue2: function (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 = this.cell.getStyle();
|
|
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 = new Object();
|
|
if (null != this.number) {
|
|
aText = oNumFormat.format(this.number, this.type, dDigitsCount, oAdditionalResult);
|
|
sText = null;
|
|
} else {
|
|
if (CellValueType.String == this.type) {
|
|
if (null != this.text) {
|
|
aText = oNumFormat.format(this.text, this.type, dDigitsCount, oAdditionalResult);
|
|
sText = null;
|
|
} else {
|
|
if (null != this.multiText) {
|
|
if ("@" != oNumFormat.sFormat) {
|
|
var sSimpleString = "";
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
sSimpleString += this.multiText[i].text;
|
|
}
|
|
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(sText, aText);
|
|
if (true == fIsFitMeasurer(aRes)) {
|
|
bFindResult = true;
|
|
break;
|
|
}
|
|
aRes = null;
|
|
}
|
|
}
|
|
nTempDigCount--;
|
|
}
|
|
if (false == bFindResult) {
|
|
aRes = null;
|
|
sText = null;
|
|
if (dDigitsCount > 1) {
|
|
aText = [{
|
|
text: "#",
|
|
format: {
|
|
repeat: true
|
|
}
|
|
}];
|
|
} 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(sText, aText);
|
|
if (false == fIsFitMeasurer(aRes)) {
|
|
aRes = null;
|
|
sText = null;
|
|
aText = [{
|
|
text: "#",
|
|
format: {
|
|
repeat: true
|
|
}
|
|
}];
|
|
}
|
|
}
|
|
if (null == aRes) {
|
|
aRes = this._getValue2Result(sText, aText);
|
|
}
|
|
if (this.cell.sFormula) {
|
|
aRes[0].sFormula = this.cell.sFormula;
|
|
aRes[0].sId = this.cell.getName();
|
|
}
|
|
this.aTextValue2[dDigitsCount] = aRes;
|
|
}
|
|
return aRes;
|
|
},
|
|
getValueForEdit2: function () {
|
|
if (null == this.textValueForEdit2) {
|
|
var oValueText = null;
|
|
var oValueArray = null;
|
|
var xfs = this.cell.getStyle();
|
|
if (this.cell.sFormula) {
|
|
oValueText = "=" + this.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;
|
|
}
|
|
if (bDate && bTime) {
|
|
oNumFormat = oNumFormatCache.get("m/d/yyyy h:mm:ss AM/PM");
|
|
} else {
|
|
if (bTime) {
|
|
oNumFormat = oNumFormatCache.get("h:mm:ss AM/PM");
|
|
} else {
|
|
oNumFormat = oNumFormatCache.get("m/d/yyyy");
|
|
}
|
|
}
|
|
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 == this.cell.isFormula()) {
|
|
if (null != oValueText) {
|
|
oValueText = "'" + oValueText;
|
|
} else {
|
|
if (null != oValueArray) {
|
|
oValueArray = [{
|
|
text: "'"
|
|
}].concat(oValueArray);
|
|
}
|
|
}
|
|
}
|
|
this.textValueForEdit2 = this._getValue2Result(oValueText, oValueArray);
|
|
}
|
|
return this.textValueForEdit2;
|
|
},
|
|
_getValue2Result: function (sText, aText) {
|
|
var aResult = new Array();
|
|
if (null == sText && null == aText) {
|
|
sText = "";
|
|
}
|
|
var cellfont;
|
|
var xfs = this.cell.getStyle();
|
|
if (null != xfs && null != xfs.font) {
|
|
cellfont = xfs.font;
|
|
} else {
|
|
cellfont = g_oDefaultFont;
|
|
}
|
|
if (null != sText) {
|
|
var oNewItem = {
|
|
text: null,
|
|
format: null,
|
|
sFormula: null,
|
|
sId: null,
|
|
theme: null,
|
|
tint: null
|
|
};
|
|
oNewItem.text = sText;
|
|
oNewItem.format = cellfont.clone();
|
|
if (oNewItem.format.c instanceof ThemeColor) {
|
|
oNewItem.theme = oNewItem.format.c.theme;
|
|
oNewItem.tint = oNewItem.format.c.tint;
|
|
if (g_nColorHyperlink == oNewItem.theme && null == oNewItem.tint) {
|
|
var nRow = this.cell.oId.getRow0();
|
|
var nCol = this.cell.oId.getCol0();
|
|
var hyperlink = this.cell.ws.hyperlinkManager.getByCell(nRow, nCol);
|
|
if (null != hyperlink && hyperlink.data.getVisited()) {
|
|
oNewItem.format.c = g_oColorManager.getThemeColor(g_nColorHyperlinkVisited, null);
|
|
oNewItem.theme = g_nColorHyperlinkVisited;
|
|
}
|
|
}
|
|
}
|
|
oNewItem.format.c = oNewItem.format.getRgbOrNull();
|
|
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 = {
|
|
text: null,
|
|
format: null,
|
|
sFormula: null,
|
|
sId: null,
|
|
theme: null,
|
|
tint: null
|
|
};
|
|
var oCurtext = aText[i];
|
|
if (null != oCurtext.text) {
|
|
oNewItem.text = oCurtext.text;
|
|
var oCurFormat = new Font();
|
|
oCurFormat = new Font();
|
|
oCurFormat.set(cellfont);
|
|
if (null != oCurtext.format) {
|
|
oCurFormat.set(oCurtext.format);
|
|
}
|
|
oNewItem.format = oCurFormat;
|
|
if (oNewItem.format.c instanceof ThemeColor) {
|
|
oNewItem.theme = oNewItem.format.c.theme;
|
|
oNewItem.tint = oNewItem.format.c.tint;
|
|
if (g_nColorHyperlink == oNewItem.theme && null == oNewItem.tint) {
|
|
var nRow = this.cell.oId.getRow0();
|
|
var nCol = this.cell.oId.getCol0();
|
|
var hyperlink = this.cell.ws.hyperlinkManager.getByCell(nRow, nCol);
|
|
if (null != hyperlink && hyperlink.data.getVisited()) {
|
|
oNewItem.format.c = g_oColorManager.getThemeColor(g_nColorHyperlinkVisited, null);
|
|
oNewItem.theme = g_nColorHyperlinkVisited;
|
|
}
|
|
}
|
|
}
|
|
oNewItem.format.c = oNewItem.format.getRgbOrNull();
|
|
aResult.push(oNewItem);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return aResult;
|
|
},
|
|
setValue: function (val) {
|
|
this.clean();
|
|
if ("" == val) {
|
|
return;
|
|
}
|
|
var oNumFormat;
|
|
var xfs = this.cell.getStyle();
|
|
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 (Asc.isNumber(val)) {
|
|
this.type = CellValueType.Number;
|
|
this.number = parseFloat(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 bParsed = false;
|
|
var res = g_oFormatParser.parse(val);
|
|
if (null != res) {
|
|
var oTargetFormat = null;
|
|
if (null != oNumFormat) {
|
|
oTargetFormat = oNumFormat.getFormatByValue(res.value);
|
|
}
|
|
if (res.bDateTime) {
|
|
if (null == oTargetFormat || res.bDateTime != oTargetFormat.bDateTime) {
|
|
this.cell.setNumFormat(res.format);
|
|
}
|
|
} else {
|
|
if (res.format != oNumFormat.sFormat) {
|
|
this.cell.setNumFormat(res.format);
|
|
}
|
|
}
|
|
this.number = res.value;
|
|
this.type = CellValueType.Number;
|
|
bParsed = true;
|
|
}
|
|
if (false == bParsed) {
|
|
this.type = CellValueType.String;
|
|
if (val.length > 0 && "'" == val[0]) {
|
|
this.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 = this.cell.ws.getCell3(this.cell.oId.getRow0(), this.cell.oId.getCol0());
|
|
oNewHyperlink.Hyperlink = sRealUrl;
|
|
oNewHyperlink.Ref.setHyperlink(oNewHyperlink);
|
|
}
|
|
},
|
|
setValue2: function (aVal) {
|
|
var sSimpleText = "";
|
|
for (var i = 0, length = aVal.length; i < length; ++i) {
|
|
sSimpleText += aVal[i].text;
|
|
}
|
|
this.setValue(sSimpleText);
|
|
var nRow = this.cell.oId.getRow0();
|
|
var nCol = this.cell.oId.getCol0();
|
|
if (CellValueType.String == this.type && null == this.cell.ws.hyperlinkManager.getByCell(nRow, nCol)) {
|
|
this.clean();
|
|
this.type = CellValueType.String;
|
|
if (aVal.length > 0) {
|
|
this.multiText = new Array();
|
|
for (var i = 0, length = aVal.length; i < length; i++) {
|
|
var item = aVal[i];
|
|
var format = item.format;
|
|
if (null != item.theme) {
|
|
format.c = g_oColorManager.getThemeColor(item.theme, item.tint);
|
|
} else {
|
|
if (null != format && null != format.c) {
|
|
var color = format.c;
|
|
format.c = null;
|
|
if ("string" == typeof(color)) {
|
|
if (0 == color.indexOf("#")) {
|
|
var hex = color.substring(1);
|
|
if (hex.length == 3) {
|
|
hex = hex.charAt(0) + hex.charAt(0) + hex.charAt(1) + hex.charAt(1) + hex.charAt(2) + hex.charAt(2);
|
|
}
|
|
if (hex.length == 6) {
|
|
var r = parseInt("0x" + hex.substring(0, 2));
|
|
var g = parseInt("0x" + hex.substring(2, 4));
|
|
var b = parseInt("0x" + hex.substring(4, 6));
|
|
format.c = new RgbColor(r << 16 | g << 8 | b);
|
|
}
|
|
}
|
|
} else {
|
|
if ("number" == typeof(color)) {
|
|
format.c = new RgbColor(color);
|
|
} else {
|
|
if (color instanceof RgbColor || color instanceof ThemeColor) {
|
|
format.c = color;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var oNewElem = new CCellValueMultiText();
|
|
oNewElem.text = item.text;
|
|
oNewElem.format = new Font();
|
|
if (null != item.format) {
|
|
oNewElem.format.set(item.format);
|
|
}
|
|
this.multiText.push(oNewElem);
|
|
}
|
|
this.miminizeMultiText(true);
|
|
}
|
|
if (null != this.text) {
|
|
if (this.text.length > 0 && "'" == this.text[0]) {
|
|
this.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]) {
|
|
this.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 = new Array();
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
oRes.push(this.multiText[i].clone());
|
|
}
|
|
return oRes;
|
|
},
|
|
miminizeMultiText: function (bSetCellFont) {
|
|
var bRes = false;
|
|
if (null == bSetCellFont) {
|
|
bSetCellFont = true;
|
|
}
|
|
if (null != this.multiText && this.multiText.length > 0) {
|
|
var aVal = this.multiText;
|
|
var oIntersectFont = aVal[0].format.clone();
|
|
for (var i = 1, length = aVal.length; i < length; i++) {
|
|
oIntersectFont.intersect(aVal[i].format, g_oDefaultFont);
|
|
}
|
|
if (bSetCellFont) {
|
|
if (oIntersectFont.isEqual(g_oDefaultFont)) {
|
|
this.cell.setFont(null, false);
|
|
} else {
|
|
this.cell.setFont(oIntersectFont, false);
|
|
}
|
|
}
|
|
var bIsEqual = true;
|
|
for (var i = 0, length = aVal.length; i < length; i++) {
|
|
if (false == oIntersectFont.isEqual(aVal[i].format)) {
|
|
bIsEqual = false;
|
|
break;
|
|
}
|
|
}
|
|
if (bIsEqual) {
|
|
this.makeSimpleText();
|
|
bRes = true;
|
|
}
|
|
}
|
|
return bRes;
|
|
},
|
|
_setFontProp: function (fCheck, fAction) {
|
|
var bRes = false;
|
|
if (null != this.multiText) {
|
|
var bChange = false;
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
if (true == fCheck(this.multiText[i].format)) {
|
|
bChange = true;
|
|
break;
|
|
}
|
|
}
|
|
if (bChange) {
|
|
var backupObj = this.cell.getValueData();
|
|
for (var i = 0, length = this.multiText.length; i < length; ++i) {
|
|
fAction(this.multiText[i].format);
|
|
}
|
|
var cell = this.cell;
|
|
if (this.miminizeMultiText(false)) {
|
|
var DataNew = cell.getValueData();
|
|
History.Add(g_oUndoRedoCell, historyitem_Cell_ChangeValue, cell.ws.getId(), new Asc.Range(0, cell.oId.getRow0(), gc_nMaxCol0, cell.oId.getRow0()), new UndoRedoData_CellSimpleData(cell.oId.getRow0(), cell.oId.getCol0(), backupObj, DataNew));
|
|
} else {
|
|
var DataNew = this._cloneMultiText();
|
|
History.Add(g_oUndoRedoCell, historyitem_Cell_ChangeArrayValueFormat, cell.ws.getId(), new Asc.Range(0, cell.oId.getRow0(), gc_nMaxCol0, cell.oId.getRow0()), new UndoRedoData_CellSimpleData(cell.oId.getRow0(), cell.oId.getCol0(), backupObj.value.multiText, DataNew));
|
|
}
|
|
}
|
|
bRes = true;
|
|
}
|
|
return bRes;
|
|
},
|
|
setFontname: function (val) {
|
|
return this._setFontProp(function (format) {
|
|
return val != format.fn;
|
|
},
|
|
function (format) {
|
|
format.fn = val;
|
|
});
|
|
},
|
|
setFontsize: function (val) {
|
|
return this._setFontProp(function (format) {
|
|
return val != format.fs;
|
|
},
|
|
function (format) {
|
|
format.fs = val;
|
|
});
|
|
},
|
|
setFontcolor: function (val) {
|
|
return this._setFontProp(function (format) {
|
|
return val != format.c;
|
|
},
|
|
function (format) {
|
|
format.c = val;
|
|
});
|
|
},
|
|
setBold: function (val) {
|
|
return this._setFontProp(function (format) {
|
|
return val != format.b;
|
|
},
|
|
function (format) {
|
|
format.b = val;
|
|
});
|
|
},
|
|
setItalic: function (val) {
|
|
return this._setFontProp(function (format) {
|
|
return val != format.i;
|
|
},
|
|
function (format) {
|
|
format.i = val;
|
|
});
|
|
},
|
|
setUnderline: function (val) {
|
|
return this._setFontProp(function (format) {
|
|
return val != format.u;
|
|
},
|
|
function (format) {
|
|
format.u = val;
|
|
});
|
|
},
|
|
setStrikeout: function (val) {
|
|
return this._setFontProp(function (format) {
|
|
return val != format.s;
|
|
},
|
|
function (format) {
|
|
format.s = val;
|
|
});
|
|
},
|
|
setFontAlign: function (val) {
|
|
return this._setFontProp(function (format) {
|
|
return val != format.va;
|
|
},
|
|
function (format) {
|
|
format.va = val;
|
|
});
|
|
},
|
|
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 RangeDataManagerElem(bbox, data) {
|
|
this.bbox = bbox;
|
|
this.data = data;
|
|
this.id = 0;
|
|
}
|
|
function RangeDataManager(bAllowIntersect, fChange) {
|
|
this.oGCells = {};
|
|
this.oRows = {};
|
|
this.oCols = {};
|
|
this.oAll = null;
|
|
this.oElements = {};
|
|
this.nElementsCount = 0;
|
|
this.bbox = null;
|
|
this.nStopRecalculate = 0;
|
|
this.idGen = 0;
|
|
this.oDependenceManager = null;
|
|
this.bAllowIntersect = bAllowIntersect;
|
|
this.fChange = fChange;
|
|
}
|
|
RangeDataManager.prototype = {
|
|
add: function (bbox, data) {
|
|
var oNewElem = new RangeDataManagerElem(new Asc.Range(bbox.c1, bbox.r1, bbox.c2, bbox.r2), data);
|
|
oNewElem.id = this.idGen++;
|
|
var nRangeType = getRangeType(bbox);
|
|
if (c_oRangeType.Range == nRangeType) {
|
|
for (var i = bbox.r1; i <= bbox.r2; i++) {
|
|
var row = this.oGCells[i];
|
|
if (null == row) {
|
|
row = {};
|
|
this.oGCells[i] = row;
|
|
}
|
|
for (var j = bbox.c1; j <= bbox.c2; j++) {
|
|
if (this.bAllowIntersect) {
|
|
var elem = row[j];
|
|
if (null == elem) {
|
|
elem = [];
|
|
row[j] = elem;
|
|
}
|
|
elem.push(oNewElem);
|
|
} else {
|
|
row[j] = oNewElem;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (c_oRangeType.Col == nRangeType) {
|
|
for (var i = bbox.c1; i <= bbox.c2; i++) {
|
|
if (this.bAllowIntersect) {
|
|
var elem = this.oCols[i];
|
|
if (null == elem) {
|
|
elem = [];
|
|
this.oCols[i] = elem;
|
|
}
|
|
elem.push(oNewElem);
|
|
} else {
|
|
this.oCols[i] = oNewElem;
|
|
}
|
|
}
|
|
} else {
|
|
if (c_oRangeType.Row == nRangeType) {
|
|
for (var i = bbox.r1; i <= bbox.r2; i++) {
|
|
if (this.bAllowIntersect) {
|
|
var elem = this.oRows[i];
|
|
if (null == elem) {
|
|
elem = [];
|
|
this.oRows[i] = elem;
|
|
}
|
|
elem.push(oNewElem);
|
|
} else {
|
|
this.oRows[i] = oNewElem;
|
|
}
|
|
}
|
|
} else {
|
|
if (c_oRangeType.All == nRangeType) {
|
|
if (this.bAllowIntersect) {
|
|
this.oAll = [oNewElem];
|
|
} else {
|
|
this.oAll = oNewElem;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.oElements[this._getBBoxIndex(bbox)] = oNewElem;
|
|
this._recalculate();
|
|
if (null != this.fChange) {
|
|
this.fChange.call(this, oNewElem.data, null, oNewElem.bbox);
|
|
}
|
|
},
|
|
_getExecElem: function (elem, oFindElems) {
|
|
if (null != elem) {
|
|
if (this.bAllowIntersect) {
|
|
for (var i = 0, length = elem.length; i < length; ++i) {
|
|
var item = elem[i];
|
|
oFindElems[item.id] = item;
|
|
}
|
|
} else {
|
|
oFindElems[elem.id] = elem;
|
|
}
|
|
}
|
|
},
|
|
get: function (bbox) {
|
|
var oRes = {
|
|
all: [],
|
|
inner: [],
|
|
outer: []
|
|
};
|
|
if (null != this.bbox) {
|
|
bbox = this.bbox.intersectionSimple(bbox);
|
|
} else {
|
|
bbox = null;
|
|
}
|
|
if (null != bbox) {
|
|
var oFindElems = {};
|
|
var nRangeType = getRangeType(bbox);
|
|
if (bbox.r2 < gc_nMaxRow0 / 4) {
|
|
for (var i = bbox.r1; i <= bbox.r2; i++) {
|
|
var row = this.oGCells[i];
|
|
if (null != row) {
|
|
if (bbox.c2 < gc_nMaxCol0 / 4) {
|
|
for (var j = bbox.c1; j <= bbox.c2; j++) {
|
|
var cell = row[j];
|
|
if (null != cell) {
|
|
this._getExecElem(cell, oFindElems);
|
|
}
|
|
}
|
|
} else {
|
|
for (var j in row) {
|
|
var nIndexJ = j - 0;
|
|
if (bbox.c1 <= nIndexJ && nIndexJ <= bbox.c2) {
|
|
this._getExecElem(row[j], oFindElems);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
for (var i in this.oGCells) {
|
|
var nIndexI = i - 0;
|
|
if (bbox.r1 <= nIndexI && nIndexI <= bbox.r2) {
|
|
var row = this.oGCells[i];
|
|
if (null != row) {
|
|
if (bbox.c2 < gc_nMaxCol0 / 4) {
|
|
for (var j = bbox.c1; j <= bbox.c2; j++) {
|
|
var cell = row[j];
|
|
if (null != cell) {
|
|
this._getExecElem(cell, oFindElems);
|
|
}
|
|
}
|
|
} else {
|
|
for (var j in row) {
|
|
var nIndexJ = j - 0;
|
|
if (bbox.c1 <= nIndexJ && nIndexJ <= bbox.c2) {
|
|
this._getExecElem(row[j], oFindElems);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (bbox.c2 < gc_nMaxCol0 / 4) {
|
|
for (var i = bbox.c1; i <= bbox.c2; i++) {
|
|
this._getExecElem(this.oCols[i], oFindElems);
|
|
}
|
|
} else {
|
|
for (var i in this.oCols) {
|
|
var nIndex = i - 0;
|
|
if (bbox.c1 <= nIndex && nIndex <= bbox.c2) {
|
|
this._getExecElem(this.oCols[i], oFindElems);
|
|
}
|
|
}
|
|
}
|
|
if (bbox.r2 < gc_nMaxRow0 / 4) {
|
|
for (var i = bbox.r1; i <= bbox.r2; i++) {
|
|
this._getExecElem(this.oRows[i], oFindElems);
|
|
}
|
|
} else {
|
|
for (var i in this.oRows) {
|
|
var nIndex = i - 0;
|
|
if (bbox.r1 <= nIndex && nIndex <= bbox.r2) {
|
|
this._getExecElem(this.oRows[i], oFindElems);
|
|
}
|
|
}
|
|
}
|
|
this._getExecElem(this.oAll, oFindElems);
|
|
for (var i in oFindElems) {
|
|
var elem = oFindElems[i];
|
|
oRes.all.push(elem);
|
|
if (bbox.containsRange(elem.bbox)) {
|
|
oRes.inner.push(elem);
|
|
} else {
|
|
oRes.outer.push(elem);
|
|
}
|
|
}
|
|
}
|
|
return oRes;
|
|
},
|
|
_getByCellExecElem: function (elem) {
|
|
var oRes = null;
|
|
if (null != elem) {
|
|
if (this.bAllowIntersect) {
|
|
if (elem.length > 0) {
|
|
oRes = elem[0];
|
|
}
|
|
} else {
|
|
oRes = elem;
|
|
}
|
|
}
|
|
return oRes;
|
|
},
|
|
_getByCell: function (nRow, nCol) {
|
|
var oRes = null;
|
|
var row = this.oGCells[nRow];
|
|
if (null != row) {
|
|
oRes = this._getByCellExecElem(row[nCol]);
|
|
}
|
|
if (null == oRes) {
|
|
oRes = this._getByCellExecElem(this.oRows[nRow]);
|
|
if (null == oRes) {
|
|
oRes = this._getByCellExecElem(this.oCols[nCol]);
|
|
if (null == oRes) {
|
|
oRes = this._getByCellExecElem(this.oAll);
|
|
}
|
|
}
|
|
}
|
|
return oRes;
|
|
},
|
|
getByCell: function (nRow, nCol) {
|
|
var oRes = null;
|
|
if (null != this.bbox) {
|
|
if (this.bbox.contains(nCol, nRow)) {
|
|
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;
|
|
},
|
|
_removeExecElem: function (container, index, elemToDelete) {
|
|
var elem = null;
|
|
if (null != index) {
|
|
elem = container[index];
|
|
} else {
|
|
elem = container;
|
|
}
|
|
if (null != elem) {
|
|
if (this.bAllowIntersect) {
|
|
for (var i = 0, length = elem.length; i < length; ++i) {
|
|
var item = elem[i];
|
|
if (elemToDelete.data == item.data) {
|
|
elem.splice(i, 1);
|
|
break;
|
|
}
|
|
}
|
|
if (0 == elem.length) {
|
|
if (null != index) {
|
|
delete container[index];
|
|
} else {
|
|
container = null;
|
|
}
|
|
}
|
|
} else {
|
|
if (elemToDelete.data == elem.data) {
|
|
if (null != index) {
|
|
delete container[index];
|
|
} else {
|
|
container = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return container;
|
|
},
|
|
remove: function (bbox, elemToDelete) {
|
|
if (null != elemToDelete) {
|
|
var nRangeType = getRangeType(bbox);
|
|
if (c_oRangeType.Range == nRangeType) {
|
|
for (var i = bbox.r1; i <= bbox.r2; i++) {
|
|
var row = this.oGCells[i];
|
|
if (null != row) {
|
|
for (var j = bbox.c1; j <= bbox.c2; j++) {
|
|
this._removeExecElem(row, j, elemToDelete);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if (c_oRangeType.Col == nRangeType) {
|
|
for (var i = bbox.c1; i <= bbox.c2; i++) {
|
|
this._removeExecElem(this.oCols, i, elemToDelete);
|
|
}
|
|
} else {
|
|
if (c_oRangeType.Row == nRangeType) {
|
|
for (var i = bbox.r1; i <= bbox.r2; i++) {
|
|
this._removeExecElem(this.oRows, i, elemToDelete);
|
|
}
|
|
} else {
|
|
if (c_oRangeType.All == nRangeType) {
|
|
this.oAll = this._removeExecElem(this.oAll, null, elemToDelete);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
delete this.oElements[this._getBBoxIndex(elemToDelete.bbox)];
|
|
this._recalculate();
|
|
if (null != this.fChange) {
|
|
this.fChange.call(this, elemToDelete.data, elemToDelete.bbox, null);
|
|
}
|
|
} else {
|
|
this.stopRecalculate();
|
|
var aElems = this.get(bbox);
|
|
for (var i = 0, length = aElems.all.length; i < length; ++i) {
|
|
var elem = aElems.all[i];
|
|
this.remove(elem.bbox, elem);
|
|
}
|
|
this.startRecalculate();
|
|
}
|
|
},
|
|
shiftGet: function (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 {
|
|
bbox: bboxGet,
|
|
elems: this.get(bboxGet)
|
|
};
|
|
},
|
|
shift: function (bbox, bAdd, bHor, oGetRes) {
|
|
this.stopRecalculate();
|
|
if (null == oGetRes) {
|
|
oGetRes = this.shiftGet(bbox, bHor);
|
|
}
|
|
var aToChange = [];
|
|
var elems = oGetRes.elems;
|
|
if (elems.inner.length > 0) {
|
|
var offset = null;
|
|
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;
|
|
}
|
|
for (var i = 0, length = elems.inner.length; i < length; i++) {
|
|
var elem = elems.inner[i];
|
|
var from = elem.bbox;
|
|
var to = null;
|
|
if (bAdd) {
|
|
to = elem.bbox.clone();
|
|
to.setOffset(offset);
|
|
} else {
|
|
var bboxAsc = Asc.Range(bbox.c1, bbox.r1, bbox.c2, bbox.r2);
|
|
if (!bboxAsc.containsRange(from)) {
|
|
to = elem.bbox.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);
|
|
}
|
|
}
|
|
aToChange.push({
|
|
elem: elem,
|
|
to: to
|
|
});
|
|
}
|
|
}
|
|
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
|
|
});
|
|
}
|
|
}
|
|
}
|
|
for (var i = 0, length = aToChange.length; i < length; ++i) {
|
|
var item = aToChange[i];
|
|
var elem = item.elem;
|
|
this.remove(elem.bbox, elem);
|
|
}
|
|
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);
|
|
}
|
|
}
|
|
this.startRecalculate();
|
|
},
|
|
getAll: function () {
|
|
return this.oElements;
|
|
},
|
|
setDependenceManager: function (oDependenceManager) {
|
|
this.oDependenceManager = oDependenceManager;
|
|
},
|
|
stopRecalculate: function () {
|
|
this.nStopRecalculate++;
|
|
},
|
|
startRecalculate: function () {
|
|
this.nStopRecalculate--;
|
|
if (this.nStopRecalculate <= 0) {
|
|
this.nStopRecalculate = 0;
|
|
this._recalculate();
|
|
}
|
|
},
|
|
_getBBoxIndex: function (bbox) {
|
|
return bbox.r1 + "-" + bbox.c1 + "-" + bbox.r2 + "-" + bbox.c2;
|
|
},
|
|
_recalculate: function () {
|
|
if (0 == this.nStopRecalculate) {
|
|
this.nElementsCount = 0;
|
|
this.bbox = null;
|
|
for (var i in this.oElements) {
|
|
var elem = this.oElements[i];
|
|
if (null != elem) {
|
|
this.nElementsCount++;
|
|
if (null == this.bbox) {
|
|
this.bbox = elem.bbox.clone();
|
|
} else {
|
|
this.bbox.union2(elem.bbox);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}; |