382 lines
14 KiB
JavaScript
382 lines
14 KiB
JavaScript
/*
|
|
* (c) Copyright Ascensio System SIA 2010-2015
|
|
*
|
|
* This program is a free software product. You can redistribute it and/or
|
|
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
|
* version 3 as published by the Free Software Foundation. In accordance with
|
|
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
|
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
|
* of any third-party rights.
|
|
*
|
|
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
|
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|
*
|
|
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
|
* EU, LV-1021.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of the Program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU AGPL version 3.
|
|
*
|
|
* Pursuant to Section 7(b) of the License you must retain the original Product
|
|
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
|
* grant you any rights under trademark law for use of our trademarks.
|
|
*
|
|
* All the Product's GUI elements, including illustrations and icon sets, as
|
|
* well as technical writing content are licensed under the terms of the
|
|
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
|
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
|
*
|
|
*/
|
|
"use strict";
|
|
function CBounds() {
|
|
this.L = 0;
|
|
this.T = 0;
|
|
this.R = 0;
|
|
this.B = 0;
|
|
this.isAbsL = false;
|
|
this.isAbsT = false;
|
|
this.isAbsR = false;
|
|
this.isAbsB = false;
|
|
this.AbsW = -1;
|
|
this.AbsH = -1;
|
|
this.SetParams = function (_l, _t, _r, _b, abs_l, abs_t, abs_r, abs_b, absW, absH) {
|
|
this.L = _l;
|
|
this.T = _t;
|
|
this.R = _r;
|
|
this.B = _b;
|
|
this.isAbsL = abs_l;
|
|
this.isAbsT = abs_t;
|
|
this.isAbsR = abs_r;
|
|
this.isAbsB = abs_b;
|
|
this.AbsW = absW;
|
|
this.AbsH = absH;
|
|
};
|
|
}
|
|
function CAbsolutePosition() {
|
|
this.L = 0;
|
|
this.T = 0;
|
|
this.R = 0;
|
|
this.B = 0;
|
|
}
|
|
var g_anchor_left = 1;
|
|
var g_anchor_top = 2;
|
|
var g_anchor_right = 4;
|
|
var g_anchor_bottom = 8;
|
|
function CControl() {
|
|
this.Bounds = new CBounds();
|
|
this.Anchor = g_anchor_left | g_anchor_top;
|
|
this.Name = null;
|
|
this.Parent = null;
|
|
this.TabIndex = null;
|
|
this.HtmlElement = null;
|
|
this.AbsolutePosition = new CBounds();
|
|
this.Resize = function (_width, _height, api) {
|
|
if ((null == this.Parent) || (null == this.HtmlElement)) {
|
|
return;
|
|
}
|
|
var _x = 0;
|
|
var _y = 0;
|
|
var _r = 0;
|
|
var _b = 0;
|
|
var hor_anchor = (this.Anchor & 5);
|
|
var ver_anchor = (this.Anchor & 10);
|
|
if (g_anchor_left == hor_anchor) {
|
|
if (this.Bounds.isAbsL) {
|
|
_x = this.Bounds.L;
|
|
} else {
|
|
_x = (this.Bounds.L * _width / 1000);
|
|
}
|
|
if (-1 != this.Bounds.AbsW) {
|
|
_r = _x + this.Bounds.AbsW;
|
|
} else {
|
|
if (this.Bounds.isAbsR) {
|
|
_r = (_width - this.Bounds.R);
|
|
} else {
|
|
_r = this.Bounds.R * _width / 1000;
|
|
}
|
|
}
|
|
} else {
|
|
if (g_anchor_right == hor_anchor) {
|
|
if (this.Bounds.isAbsR) {
|
|
_r = (_width - this.Bounds.R);
|
|
} else {
|
|
_r = (this.Bounds.R * _width / 1000);
|
|
}
|
|
if (-1 != this.Bounds.AbsW) {
|
|
_x = _r - this.Bounds.AbsW;
|
|
} else {
|
|
if (this.Bounds.isAbsL) {
|
|
_x = this.Bounds.L;
|
|
} else {
|
|
_x = this.Bounds.L * _width / 1000;
|
|
}
|
|
}
|
|
} else {
|
|
if ((g_anchor_left | g_anchor_right) == hor_anchor) {
|
|
if (this.Bounds.isAbsL) {
|
|
_x = this.Bounds.L;
|
|
} else {
|
|
_x = (this.Bounds.L * _width / 1000);
|
|
}
|
|
if (this.Bounds.isAbsR) {
|
|
_r = (_width - this.Bounds.R);
|
|
} else {
|
|
_r = (this.Bounds.R * _width / 1000);
|
|
}
|
|
} else {
|
|
_x = this.Bounds.L;
|
|
_r = this.Bounds.R;
|
|
}
|
|
}
|
|
}
|
|
if (g_anchor_top == ver_anchor) {
|
|
if (this.Bounds.isAbsT) {
|
|
_y = this.Bounds.T;
|
|
} else {
|
|
_y = (this.Bounds.T * _height / 1000);
|
|
}
|
|
if (-1 != this.Bounds.AbsH) {
|
|
_b = _y + this.Bounds.AbsH;
|
|
} else {
|
|
if (this.Bounds.isAbsB) {
|
|
_b = (_height - this.Bounds.B);
|
|
} else {
|
|
_b = this.Bounds.B * _height / 1000;
|
|
}
|
|
}
|
|
} else {
|
|
if (g_anchor_bottom == ver_anchor) {
|
|
if (this.Bounds.isAbsB) {
|
|
_b = (_height - this.Bounds.B);
|
|
} else {
|
|
_b = (this.Bounds.B * _height / 1000);
|
|
}
|
|
if (-1 != this.Bounds.AbsH) {
|
|
_y = _b - this.Bounds.AbsH;
|
|
} else {
|
|
if (this.Bounds.isAbsT) {
|
|
_y = this.Bounds.T;
|
|
} else {
|
|
_y = this.Bounds.T * _height / 1000;
|
|
}
|
|
}
|
|
} else {
|
|
if ((g_anchor_top | g_anchor_bottom) == ver_anchor) {
|
|
if (this.Bounds.isAbsT) {
|
|
_y = this.Bounds.T;
|
|
} else {
|
|
_y = (this.Bounds.T * _height / 1000);
|
|
}
|
|
if (this.Bounds.isAbsB) {
|
|
_b = (_height - this.Bounds.B);
|
|
} else {
|
|
_b = (this.Bounds.B * _height / 1000);
|
|
}
|
|
} else {
|
|
_y = this.Bounds.T;
|
|
_b = this.Bounds.B;
|
|
}
|
|
}
|
|
}
|
|
if (_r < _x) {
|
|
_r = _x;
|
|
}
|
|
if (_b < _y) {
|
|
_b = _y;
|
|
}
|
|
this.AbsolutePosition.L = _x;
|
|
this.AbsolutePosition.T = _y;
|
|
this.AbsolutePosition.R = _r;
|
|
this.AbsolutePosition.B = _b;
|
|
this.HtmlElement.style.left = ((_x * g_dKoef_mm_to_pix + 0.5) >> 0) + "px";
|
|
this.HtmlElement.style.top = ((_y * g_dKoef_mm_to_pix + 0.5) >> 0) + "px";
|
|
this.HtmlElement.style.width = (((_r - _x) * g_dKoef_mm_to_pix + 0.5) >> 0) + "px";
|
|
this.HtmlElement.style.height = (((_b - _y) * g_dKoef_mm_to_pix + 0.5) >> 0) + "px";
|
|
if (api !== undefined && api.CheckRetinaElement && api.CheckRetinaElement(this.HtmlElement)) {
|
|
var _W = ((_r - _x) * g_dKoef_mm_to_pix + 0.5) >> 0;
|
|
var _H = ((_b - _y) * g_dKoef_mm_to_pix + 0.5) >> 0;
|
|
this.HtmlElement.width = _W << 1;
|
|
this.HtmlElement.height = _H << 1;
|
|
} else {
|
|
this.HtmlElement.width = ((_r - _x) * g_dKoef_mm_to_pix + 0.5) >> 0;
|
|
this.HtmlElement.height = ((_b - _y) * g_dKoef_mm_to_pix + 0.5) >> 0;
|
|
}
|
|
};
|
|
this.GetCSS_width = function () {
|
|
return ((this.AbsolutePosition.R - this.AbsolutePosition.L) * g_dKoef_mm_to_pix + 0.5) >> 0;
|
|
};
|
|
this.GetCSS_height = function () {
|
|
return ((this.AbsolutePosition.B - this.AbsolutePosition.T) * g_dKoef_mm_to_pix + 0.5) >> 0;
|
|
};
|
|
}
|
|
function CControlContainer() {
|
|
this.Bounds = new CBounds();
|
|
this.Anchor = g_anchor_left | g_anchor_top;
|
|
this.Name = null;
|
|
this.Parent = null;
|
|
this.TabIndex = null;
|
|
this.HtmlElement = null;
|
|
this.AbsolutePosition = new CBounds();
|
|
this.Controls = [];
|
|
this.AddControl = function (ctrl) {
|
|
ctrl.Parent = this;
|
|
this.Controls[this.Controls.length] = ctrl;
|
|
};
|
|
this.Resize = function (_width, _height, api) {
|
|
if (null == this.Parent) {
|
|
this.AbsolutePosition.L = 0;
|
|
this.AbsolutePosition.T = 0;
|
|
this.AbsolutePosition.R = _width;
|
|
this.AbsolutePosition.B = _height;
|
|
if (null != this.HtmlElement) {
|
|
var lCount = this.Controls.length;
|
|
for (var i = 0; i < lCount; i++) {
|
|
this.Controls[i].Resize(_width, _height, api);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
var _x = 0;
|
|
var _y = 0;
|
|
var _r = 0;
|
|
var _b = 0;
|
|
var hor_anchor = (this.Anchor & 5);
|
|
var ver_anchor = (this.Anchor & 10);
|
|
if (g_anchor_left == hor_anchor) {
|
|
if (this.Bounds.isAbsL) {
|
|
_x = this.Bounds.L;
|
|
} else {
|
|
_x = (this.Bounds.L * _width / 1000);
|
|
}
|
|
if (-1 != this.Bounds.AbsW) {
|
|
_r = _x + this.Bounds.AbsW;
|
|
} else {
|
|
if (this.Bounds.isAbsR) {
|
|
_r = (_width - this.Bounds.R);
|
|
} else {
|
|
_r = this.Bounds.R * _width / 1000;
|
|
}
|
|
}
|
|
} else {
|
|
if (g_anchor_right == hor_anchor) {
|
|
if (this.Bounds.isAbsR) {
|
|
_r = (_width - this.Bounds.R);
|
|
} else {
|
|
_r = (this.Bounds.R * _width / 1000);
|
|
}
|
|
if (-1 != this.Bounds.AbsW) {
|
|
_x = _r - this.Bounds.AbsW;
|
|
} else {
|
|
if (this.Bounds.isAbsL) {
|
|
_x = this.Bounds.L;
|
|
} else {
|
|
_x = this.Bounds.L * _width / 1000;
|
|
}
|
|
}
|
|
} else {
|
|
if ((g_anchor_left | g_anchor_right) == hor_anchor) {
|
|
if (this.Bounds.isAbsL) {
|
|
_x = this.Bounds.L;
|
|
} else {
|
|
_x = (this.Bounds.L * _width / 1000);
|
|
}
|
|
if (this.Bounds.isAbsR) {
|
|
_r = (_width - this.Bounds.R);
|
|
} else {
|
|
_r = (this.Bounds.R * _width / 1000);
|
|
}
|
|
} else {
|
|
_x = this.Bounds.L;
|
|
_r = this.Bounds.R;
|
|
}
|
|
}
|
|
}
|
|
if (g_anchor_top == ver_anchor) {
|
|
if (this.Bounds.isAbsT) {
|
|
_y = this.Bounds.T;
|
|
} else {
|
|
_y = (this.Bounds.T * _height / 1000);
|
|
}
|
|
if (-1 != this.Bounds.AbsH) {
|
|
_b = _y + this.Bounds.AbsH;
|
|
} else {
|
|
if (this.Bounds.isAbsB) {
|
|
_b = (_height - this.Bounds.B);
|
|
} else {
|
|
_b = this.Bounds.B * _height / 1000;
|
|
}
|
|
}
|
|
} else {
|
|
if (g_anchor_bottom == ver_anchor) {
|
|
if (this.Bounds.isAbsB) {
|
|
_b = (_height - this.Bounds.B);
|
|
} else {
|
|
_b = (this.Bounds.B * _height / 1000);
|
|
}
|
|
if (-1 != this.Bounds.AbsH) {
|
|
_y = _b - this.Bounds.AbsH;
|
|
} else {
|
|
if (this.Bounds.isAbsT) {
|
|
_y = this.Bounds.T;
|
|
} else {
|
|
_y = this.Bounds.T * _height / 1000;
|
|
}
|
|
}
|
|
} else {
|
|
if ((g_anchor_top | g_anchor_bottom) == ver_anchor) {
|
|
if (this.Bounds.isAbsT) {
|
|
_y = this.Bounds.T;
|
|
} else {
|
|
_y = (this.Bounds.T * _height / 1000);
|
|
}
|
|
if (this.Bounds.isAbsB) {
|
|
_b = (_height - this.Bounds.B);
|
|
} else {
|
|
_b = (this.Bounds.B * _height / 1000);
|
|
}
|
|
} else {
|
|
_y = this.Bounds.T;
|
|
_b = this.Bounds.B;
|
|
}
|
|
}
|
|
}
|
|
if (_r < _x) {
|
|
_r = _x;
|
|
}
|
|
if (_b < _y) {
|
|
_b = _y;
|
|
}
|
|
this.AbsolutePosition.L = _x;
|
|
this.AbsolutePosition.T = _y;
|
|
this.AbsolutePosition.R = _r;
|
|
this.AbsolutePosition.B = _b;
|
|
this.HtmlElement.style.left = ((_x * g_dKoef_mm_to_pix + 0.5) >> 0) + "px";
|
|
this.HtmlElement.style.top = ((_y * g_dKoef_mm_to_pix + 0.5) >> 0) + "px";
|
|
this.HtmlElement.style.width = (((_r - _x) * g_dKoef_mm_to_pix + 0.5) >> 0) + "px";
|
|
this.HtmlElement.style.height = (((_b - _y) * g_dKoef_mm_to_pix + 0.5) >> 0) + "px";
|
|
var lCount = this.Controls.length;
|
|
for (var i = 0; i < lCount; i++) {
|
|
this.Controls[i].Resize(_r - _x, _b - _y, api);
|
|
}
|
|
};
|
|
this.GetCSS_width = function () {
|
|
return ((this.AbsolutePosition.R - this.AbsolutePosition.L) * g_dKoef_mm_to_pix + 0.5) >> 0;
|
|
};
|
|
this.GetCSS_height = function () {
|
|
return ((this.AbsolutePosition.B - this.AbsolutePosition.T) * g_dKoef_mm_to_pix + 0.5) >> 0;
|
|
};
|
|
}
|
|
function CreateControlContainer(name) {
|
|
var ctrl = new CControlContainer();
|
|
ctrl.Name = name;
|
|
ctrl.HtmlElement = document.getElementById(name);
|
|
return ctrl;
|
|
}
|
|
function CreateControl(name) {
|
|
var ctrl = new CControl();
|
|
ctrl.Name = name;
|
|
ctrl.HtmlElement = document.getElementById(name);
|
|
return ctrl;
|
|
} |