123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881 |
- /* eslint-disable no-cond-assign */
- var bindAsEventListener = function (object, fun) {
- var args = Array.prototype.slice.call(arguments).slice(2);
- return function (event) {
- return fun.apply(object, [event || window.event].concat(args));
- };
- };
- /*
- Function: bind
- Description: 绑定对象到函数
- Input: object 对象, fun 函数
- Output: 无
- return: 关联后的函数
- *************************************************/
- var bind = function (object, fun) {
- return function () {
- return fun.apply(object, arguments);
- };
- };
- /*
- Function: addEventHandler
- Description: 添加事件
- Input: oTarget 目标对象, sEventType 事件, fnHandler 函数
- Output: 无
- return: 无
- *************************************************/
- var addEventHandler = function (oTarget, sEventType, fnHandler) {
- oTarget["on" + sEventType] = fnHandler;
- };
- var removeEventHandler = function (oTarget, sEventType) {
- oTarget["on" + sEventType] = null;
- };
- /*
- Function: getObjLeft
- Description: 获取对象相对网页的左上角坐标
- Input: obj 对象
- Output: 无
- return: 坐标
- *************************************************/
- function getObjLeft(obj) {
- var x = obj.offsetLeft;
- while (obj = obj.offsetParent) {
- x += obj.offsetLeft;
- }
- return x;
- }
- /*
- Function: getObjTop
- Description: 获取对象相对网页的左上角坐标
- Input: obj 对象
- Output: 无
- return: 坐标
- *************************************************/
- function getObjTop(obj) {
- var y = obj.offsetTop;
- while (obj = obj.offsetParent) {
- y += obj.offsetTop;
- }
- return y;
- }
- /*
- * Class ScaleInfo
- * @version v1.0
- * @function 工具类,时间刻度信息
- *************************************************/
- function ScaleInfo(x, y, iSeconds) {
- this.m_ix = x;
- this.m_iy = y;
- this.m_ixMin = 0;
- this.m_ixMax = 0;
- this.m_iHour = parseInt(iSeconds / 3600, 10);
- this.m_iMinute = parseInt(iSeconds % 3600 / 60, 10);
- this.m_iSecond = parseInt(iSeconds % 3600 % 60, 10);
- this.m_szTime = "";
- if (this.m_iHour < 10 && this.m_iMinute < 10) {
- this.m_szTime = "0" + this.m_iHour + ":0" + this.m_iMinute;
- } else if (this.m_iHour < 10 && this.m_iMinute >= 10) {
- this.m_szTime = "0" + this.m_iHour + ":" + this.m_iMinute;
- } else if (this.m_iHour >= 10 && this.m_iMinute >= 10) {
- this.m_szTime = "" + this.m_iHour + ":" + this.m_iMinute;
- } else {
- this.m_szTime = "" + this.m_iHour + ":0" + this.m_iMinute;
- }
- }
- /*
- Function: setPos
- Description: 设置刻度的位置
- Input: x 横坐标, y 纵坐标
- Output: 无
- return: 无
- *************************************************/
- ScaleInfo.prototype.setPos = function (x, y) {
- // this.x = x;
- if (x < this.m_ixMin) {
- x = this.m_ixMax - (this.m_ixMin - x);
- } else if (x > this.m_ixMax) {
- x = this.m_ixMin + (x - this.m_ixMax);
- }
- this.m_ix = x;
- this.m_iy = y;
- };
- /*
- Function: setPosRange
- Description: 设置刻度显示的范围
- Input: ixMin 最小横坐标, ixMax 最大横坐标
- Output: 无
- return: 无
- *************************************************/
- ScaleInfo.prototype.setPosRange = function (ixMin, ixMax) {
- this.m_ixMin = ixMin;
- this.m_ixMax = ixMax;
- };
- /*
- Function: isInRange
- Description: 是否在范围内
- Input: ixMin 最小横坐标, ixMax 最大横坐标
- Output: 无
- return: bool
- *************************************************/
- ScaleInfo.prototype.isInRange = function (iMin, iMax) {
- if (this.m_ix >= iMin && this.m_ix <= iMax) {
- return true;
- }
- return false;
- };
- /*
- Function: update
- Description: 更新刻度时间
- Input: iSeconds
- Output: 无
- return: 无
- *************************************************/
- ScaleInfo.prototype.update = function (iSeconds) {
- this.m_iHour = parseInt(iSeconds / 3600, 10);
- this.m_iMinute = parseInt(iSeconds % 3600 / 60, 10);
- this.m_iSecond = parseInt(iSeconds % 3600 % 60, 10);
- if (this.m_iHour < 10 && this.m_iMinute < 10) {
- this.m_szTime = "0" + this.m_iHour + ":0" + this.m_iMinute;
- } else if (this.m_iHour < 10 && this.m_iMinute >= 10) {
- this.m_szTime = "0" + this.m_iHour + ":" + this.m_iMinute;
- } else if (this.m_iHour >= 10 && this.m_iMinute >= 10) {
- this.m_szTime = "" + this.m_iHour + ":" + this.m_iMinute;
- } else {
- this.m_szTime = "" + this.m_iHour + ":0" + this.m_iMinute;
- }
- };
- /*
- * Class Time
- * @version v1.0
- * @function 工具类,时间相关信息
- *************************************************/
- function Time() {
- var tCurrentTime = new Date();
- this.m_iYear = tCurrentTime.getFullYear();
- this.m_iMonth = tCurrentTime.getMonth() + 1;
- this.m_iDay = tCurrentTime.getDate();
- this.m_iHour = tCurrentTime.getHours();
- this.m_iMinute = tCurrentTime.getMinutes();
- this.m_iSecond = tCurrentTime.getSeconds();
- this.m_iMilliseconds = tCurrentTime.getTime();//返回 1970 年 1 月 1 日至今的毫秒数
- }
- /*
- Function: setTimeByMis
- Description: 设置时间
- Input: iMilliseconds: 1970 年 1 月 1 日至今的毫秒数
- Output: 无
- return: 无
- *************************************************/
- Time.prototype.setTimeByMis = function (iMilliseconds) {
- var tSetTime = new Date(iMilliseconds);
- this.m_iYear = tSetTime.getFullYear();
- this.m_iMonth = tSetTime.getMonth() + 1;
- this.m_iDay = tSetTime.getDate();
- this.m_iHour = tSetTime.getHours();
- this.m_iMinute = tSetTime.getMinutes();
- this.m_iSecond = tSetTime.getSeconds();
- this.m_iMilliseconds = iMilliseconds;
- };
- /*
- Function: getStringTime
- Description: 获取时间字符串
- Input: 无
- Output: 无
- return: string yyyy-MM-dd HH:mm:ss
- *************************************************/
- Time.prototype.getStringTime = function () {
- var szYear = "" + this.m_iYear;
- var szMonth;
- if (this.m_iMonth < 10) {
- szMonth = "0" + this.m_iMonth;
- } else {
- szMonth = "" + this.m_iMonth;
- }
- var szDay;
- if (this.m_iDay < 10) {
- szDay = "0" + this.m_iDay;
- } else {
- szDay = "" + this.m_iDay;
- }
- var szHour;
- if (this.m_iHour < 10) {
- szHour = "0" + this.m_iHour;
- } else {
- szHour = "" + this.m_iHour;
- }
- var szMinute;
- if (this.m_iMinute < 10) {
- szMinute = "0" + this.m_iMinute;
- } else {
- szMinute = "" + this.m_iMinute;
- }
- var szSecond;
- if (this.m_iSecond < 10) {
- szSecond = "0" + this.m_iSecond;
- } else {
- szSecond = "" + this.m_iSecond;
- }
- var szCurrentTime = szYear + "-" + szMonth + "-" + szDay + " " + szHour + ":" + szMinute + ":" + szSecond;
- return szCurrentTime;
- };
- /*
- Function: parseTime
- Description: 通过时间字符串设置时间
- Input: szTime 时间 yyyy-MM-dd HH:mm:ss
- Output: 无
- return: 无
- *************************************************/
- Time.prototype.parseTime = function (szTime) {
- var aDate = szTime.split(' ')[0].split('-');
- var aTime = szTime.split(' ')[1].split(':');
- this.m_iYear = parseInt(aDate[0], 10);
- this.m_iMonth = parseInt(aDate[1], 10);
- this.m_iDay = parseInt(aDate[2], 10);
- this.m_iHour = parseInt(aTime[0], 10);
- this.m_iMinute = parseInt(aTime[1], 10);
- this.m_iSecond = parseInt(aTime[2], 10);
- var tTime = new Date();
- tTime.setFullYear(this.m_iYear);
- tTime.setMonth(this.m_iMonth - 1, this.m_iDay);
- tTime.setHours(this.m_iHour);
- tTime.setMinutes(this.m_iMinute);
- tTime.setSeconds(this.m_iSecond);
- this.m_iMilliseconds = tTime.getTime();
- };
- /*
- * Class FileInfo
- * @version v1.0
- * @function 工具类,录像文件相关信息
- *************************************************/
- function FileInfo(iX, iY, iWidth, iHeight, iType, cColor, tStartTime, tStopTime) {
- this.m_iX = iX;
- this.m_ixMin = 0;
- this.m_ixMax = 0;
- this.m_iY = iY;
- this.m_iWidth = iWidth;
- this.m_iHeight = iHeight;
- this.m_cColor = cColor;
- this.m_iType = iType;
- this.m_tStartTime = tStartTime;
- this.m_tStopTime = tStopTime;
- }
- /*
- Function: isInRange
- Description: 是否在范围之内
- Input: left 左起始点 right 右终点
- Output: 无
- return: 无
- *************************************************/
- FileInfo.prototype.isInRange = function (left, right) {
- if ((this.m_iX + this.m_iWidth) <= left || this.m_iX >= right) {
- return false;
- }
- return true;
- };
- /*
- Function: setPos
- Description: 设置位置内
- Input: iX iY左起始点坐标 iWidth 宽度 iHeight高度
- Output: 无
- return: 无
- *************************************************/
- FileInfo.prototype.setPos = function (iX, iY, iWidth, iHeight) {
- this.m_iX = iX;
- this.m_iWidth = iWidth;
- this.m_iY = iY;
- this.m_iHeight = iHeight;
- };
- /*
- Function: setPosRange
- Description: 设置范围
- Input: ixMin, ixMax
- Output: 无
- return: 无
- *************************************************/
- FileInfo.prototype.setPosRange = function (ixMin, ixMax) {
- this.m_ixMin = ixMin;
- this.m_ixMax = ixMax;
- };
- /*
- Function: draw
- Description: 画文件信息
- Input: g 设备资源
- Output: 无
- return: 无
- *************************************************/
- FileInfo.prototype.draw = function (g) {
- if (this.isInRange(this.m_ixMin, this.m_ixMax)) {
- var colorOld = g.fillStyle;
- g.fillStyle = this.m_cColor;
- if ((this.m_iX >= this.m_ixMin) && (this.m_iX + this.m_iWidth) <= this.m_ixMax) {
- g.fillRect(this.m_iX, this.m_iY, this.m_iWidth, this.m_iHeight);
- } else if ((this.m_iX < this.m_ixMax) && ((this.m_iX + this.m_iWidth) > this.m_ixMax)) {
- g.fillRect(this.m_iX, this.m_iY, this.m_ixMax - this.m_iX, this.m_iHeight);
- } else {
- g.fillRect(this.m_ixMin, this.m_iY, (this.m_iX + this.m_iWidth) - this.m_ixMin, this.m_iHeight);
- }
- g.fillStyle = colorOld;
- }
- };
- /*
- * Class TimeBar
- * @version v1.0
- * @function 工具类,时间条
- *************************************************/
- function TimeBar(canvas, iWidth, iHeight, options) {
- canvas.width = iWidth || 300;
- canvas.height = iHeight || 50;
- this.m_canvas = canvas;
- this.m_ctx = canvas.getContext("2d");
- this.m_iMinFileWidth = 1; //文件的最小宽度
- let backgroundColor = 'rgb(0, 0, 0)'; //时间条背景颜色
- let partLineColor = 'rgb(0,0,0)'; //分割线颜色
- let timeScaleColor = 'rgb(150, 250, 150)'; //时间条刻度颜色
- let middleLineColor = 'rgb(0, 250, 0)'; //中轴线颜色
- let middleLineTimeColor = 'rgb(0, 250, 0)'; //中轴时间颜色
- if (options) {
- if (options.backgroundColor) {
- backgroundColor = options.backgroundColor;
- }
- if (options.partLineColor) {
- partLineColor = options.partLineColor;
- }
- if (options.timeScaleColor) {
- timeScaleColor = options.timeScaleColor;
- }
- if (options.middleLineColor) {
- middleLineColor = options.middleLineColor;
- }
- if (options.middleLineTimeColor) {
- middleLineTimeColor = options.middleLineTimeColor;
- }
- }
- this.backgroundColor = backgroundColor; //时间条背景颜色
- this.partLineColor = partLineColor; //分割线颜色
- this.channelNameColor = 'rgb(150, 150, 150)'; //通道名称颜色
- this.timeScaleColor = timeScaleColor; //时间条刻度颜色
- this.middleLineColor = middleLineColor; //中轴线颜色
- this.middleLineTimeColor = middleLineTimeColor; //中轴时间颜色
- this.defaultFileColor = 'rgb(0, 255, 0)'; //默认录像类型颜色
- this.cmdFileColor = 'rgb(21, 184, 155)'; //命令触发录像颜色
- this.scheFileColor = 'rgb(33, 150, 243)'; //录像计划颜色
- this.alarmFileColor = 'rgb(255, 104, 66)'; //警告录像颜色
- this.manualFileColor = 'rgb(247, 199, 5)'; //手动录像颜色
- this.anrFileColor = 'rgb(138, 146, 153)'; //回传录像颜色
- this.m_fMidTimeFont = '14px Verdana'; //中线时间字体及大小
- this.m_fCurTimeFont = 'bold 12px Arial'; //鼠标当前时间字体及大小
- this.m_fScaleFont = 'bold 10px Arial'; //刻度字体及大小 sans-serif
- this.m_fChannelNameFont = '14px Verdana'; //通道名称字体
- canvas.style.backgroundColor = this.backgroundColor;
- this.m_szCurChannelName = ''; //当前通道名称
- this.m_fCellTime = parseFloat(2.0); //每个代表几个小时
- this.ScaleInfo = [];
- this.ScaleInfoNum = parseInt(24 / this.m_fCellTime, 10); //总的刻度数量
- this.ScaleInfoDisNum = 12; //显示的刻度数量
- //初始化刻度
- for (var i = 0; i < this.ScaleInfoNum; i++) {
- this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(i * 3600 * this.m_fCellTime, 10)));
- }
- this.m_iMaxWndNum = 16; //最大窗口数
- this.m_iSelWnd = 0; //选中的窗口号
- this.FileInfoSet = new Array(this.m_iMaxWndNum); //文件信息集合
- //初始化文件信息集合
- for (i = 0; i < this.m_iMaxWndNum; i++) {
- this.FileInfoSet[i] = [];
- }
- this.m_iHeight = parseInt(canvas.height, 10);
- this.m_iWidth = parseInt(canvas.width, 10);
- this.m_iFileListStartPos = 0; // 文件列表起始位置
- this.m_iBlankHeight = 4; // 中间及底边空白高度
- this.m_iTimeRectHeight = 30; //parseInt(this.m_iHeight * 4 / 7) 时间块的高度
- this.m_iFileRectHeight = this.m_iHeight - this.m_iTimeRectHeight - this.m_iBlankHeight; //文件块的高度
- this.m_iMiddleLinePos = parseInt((this.m_iFileListStartPos + this.m_iWidth) / 2, 10); //中轴线的位置
- this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum); //每个像素的秒数
- this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10); //每个像素的毫秒数
- this.m_tCurrentMidTime = new Time(); //当前中轴线的时间
- this.m_ctx.font = this.m_fMidTimeFont;
- this.m_iTextWidth = this.m_ctx.measureText(this.m_tCurrentMidTime.getStringTime()).width;
- this.m_tMouseCurTime = new Time(); //当前鼠标点的时间
- this.m_ctx.font = this.m_fCurTimeFont;
- this.m_iCurTextWidth = this.m_ctx.measureText(this.m_tMouseCurTime.getStringTime()).width;
- this.m_iCanvasLeft = getObjLeft(this.m_canvas);
- this.m_iCanvasTop = getObjTop(this.m_canvas);
- //初始化时间刻度信息
- for (i = 0; i < this.ScaleInfoNum; i++) {
- // 计算与中轴线的时间差(只计算时分秒)
- var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
- var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- // 设置刻度位置范围
- this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
- this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
- }
- //注册消息响应
- this.m_ieventX = 0;
- this.m_iMousePosX = 0;
- this.m_bMouseDown = false;
- this.m_bMouseOver = false;
- this.m_iMove = 0;
- this.m_iMiddleLineTime = 0;
- this.Start = function (oEvent) {
- this.m_iMove = 0;
- this.m_ieventX = oEvent.clientX;
- this.m_iMiddleLineTime = this.m_tCurrentMidTime.m_iMilliseconds;
- this.m_bMouseDown = true;
- this.mouseDownCallbackFunc();
- addEventHandler(document, 'mousemove', bindAsEventListener(this, this.Move));
- addEventHandler(document, 'mouseup', bind(this, this.Stop));
- addEventHandler(parent.document, 'mouseup', bind(this, this.Stop)); //解决鼠标在父页面释放时不能响应的问题
- //焦点丢失
- addEventHandler(window, "blur", bindAsEventListener(this, bindAsEventListener(this, this.Stop)));
- //阻止默认动作
- oEvent.preventDefault();
-
- removeEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
- };
- this.mouseDownCallbackFunc = function () {
- //
- };
- this.mouseUpCallbackFunc = function () {
- //
- };
- this.mouseMoveCallbackFunc = function () {
- //
- };
- this.Stop = function () {
- this.m_bMouseDown = false;
- if (this.m_iMove === 0) {
- this.m_tCurrentMidTime.setTimeByMis(this.m_tMouseCurTime.m_iMilliseconds);
- }
- this.mouseUpCallbackFunc();
- removeEventHandler(document, 'mousemove', bindAsEventListener(this, this.Move));
- removeEventHandler(document, 'mouseup', bindAsEventListener(this, this.Stop));
- removeEventHandler(window, "blur", bindAsEventListener(this, this.Stop));
- addEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
- };
- this.onMouseMoveIn = true;
- this.Move = function (oEvent) {
- this.m_iMove = oEvent.clientX - this.m_ieventX;
- if (this.m_bMouseDown) {
- //清除选择
- window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
- this.m_tCurrentMidTime.setTimeByMis(this.m_iMiddleLineTime - this.m_iMove * this.m_iCellMilliseconds);
- this.repaint();
- this.mouseMoveCallbackFunc();
- }
- };
- this.onMouseMove = function (oEvent) {
- this.m_iMousePosX = oEvent.clientX - this.m_iCanvasLeft;
- this.m_tMouseCurTime.setTimeByMis((this.m_iMousePosX - this.m_iMiddleLinePos) * this.m_iCellMilliseconds + this.m_tCurrentMidTime.m_iMilliseconds);
- this.repaint();
- var szCurMouseTime = this.m_tMouseCurTime.getStringTime();
- this.m_ctx.fillStyle = this.middleLineTimeColor;
- this.m_ctx.font = this.m_fCurTimeFont;
- this.m_ctx.fillText(szCurMouseTime.split(' ')[1], this.m_iMousePosX/*(this.m_iMousePosX - parseInt(this.m_iCurTextWidth / 2))*/, 20/*parseInt(this.m_iTimeRectHeight / 4)*/);
- };
- this.onMouseOut = function (/*oEvent*/) {
- this.repaint();
- };
- addEventHandler(canvas, 'mousedown', bindAsEventListener(this, this.Start));
- addEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
- addEventHandler(canvas, 'mouseout', bindAsEventListener(this, this.onMouseOut));
- this.repaint();
- }
- /*
- Function: repaint
- Description: 重绘
- Input: 无
- Output: 无
- return: 无
- *************************************************/
- TimeBar.prototype.repaint = function () {
- // var szCurrentTime = this.m_tCurrentMidTime.getStringTime();
- this.updateScalePos();
- this.updateFileListPos();
- this.m_ctx.clearRect(0, 0, this.m_iWidth, this.m_iHeight);
- //画通道名称分割线
- this.m_ctx.strokeStyle = this.partLineColor;
- this.m_ctx.lineWidth = 1;
- this.m_ctx.beginPath();
- this.m_ctx.moveTo(this.m_iFileListStartPos, this.m_iTimeRectHeight);
- this.m_ctx.lineTo(this.m_iFileListStartPos, this.m_iHeight);
- this.m_ctx.stroke();
- //画文件两条横轴和纵轴
- this.m_ctx.lineWidth = this.m_iBlankHeight;
- this.m_ctx.beginPath();
- this.m_ctx.moveTo(0, this.m_iTimeRectHeight);
- this.m_ctx.lineTo(this.m_iWidth, this.m_iTimeRectHeight);
- this.m_ctx.stroke();
- this.m_ctx.beginPath();
- this.m_ctx.moveTo(0, this.m_iHeight - this.m_iBlankHeight / 2);
- this.m_ctx.lineTo(this.m_iWidth, this.m_iHeight - this.m_iBlankHeight / 2);
- this.m_ctx.stroke();
- //显示通道名称
- this.m_ctx.fillStyle = this.channelNameColor;
- this.m_ctx.font = this.m_fChannelNameFont;
- this.m_ctx.fillText(this.m_szCurChannelName, 0, this.m_iTimeRectHeight + this.m_iBlankHeight + parseInt(this.m_iFileRectHeight / 2, 10) + 5, 90);
- this.m_ctx.strokeStyle = this.timeScaleColor;
- this.m_ctx.font = this.m_fScaleFont;
- this.m_ctx.lineWidth = 1;
- //画时间刻度
- var i;
- for (i = 0; i < this.ScaleInfoNum; i++) {
- if (this.ScaleInfo[i].isInRange(this.m_iFileListStartPos, this.m_iWidth)) {
- this.m_ctx.beginPath();
- this.m_ctx.moveTo(this.ScaleInfo[i].m_ix, 2/*this.m_iTimeRectHeight*/);
- this.m_ctx.lineTo(this.ScaleInfo[i].m_ix, 10/*this.m_iHeight*/);
- this.m_ctx.stroke();
- this.m_ctx.fillText(this.ScaleInfo[i].m_szTime, this.ScaleInfo[i].m_ix + 2/*this.ScaleInfo[i].m_ix - 15*/, 12/*this.m_iTimeRectHeight - 5*/);
- }
- }
- //画文件信息区域
- for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
- this.FileInfoSet[this.m_iSelWnd][i].draw(this.m_ctx);
- }
- //画中轴线
- this.m_ctx.strokeStyle = this.middleLineColor;
- this.m_ctx.lineWidth = 2;
- this.m_ctx.beginPath();
- this.m_ctx.moveTo(this.m_iMiddleLinePos, 0);
- this.m_ctx.lineTo(this.m_iMiddleLinePos, this.m_iHeight);
- this.m_ctx.stroke();
- };
- /*
- Function: updateScalePos
- Description: 更新刻度
- Input: 无
- Output: 无
- return: 无
- *************************************************/
- TimeBar.prototype.updateScalePos = function () {
- if (this.ScaleInfo.length === 0) {
- return;
- }
- // 以00:00移动的距离为准
- var seconds = (this.ScaleInfo[0].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[0].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[0].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
- var iPos0 = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- if (iPos0 < this.ScaleInfo[0].m_ixMin) {
- iPos0 = this.ScaleInfo[0].m_ixMax - (this.ScaleInfo[0].m_ixMin - iPos0);
- } else if (iPos0 > this.ScaleInfo[0].m_ixMax) {
- iPos0 = this.ScaleInfo[0].m_ixMin + (iPos0 - this.ScaleInfo[0].m_ixMax);
- }
- var iMoved = iPos0 - this.ScaleInfo[0].m_ix;
- //没有移动直接返回
- if (iMoved === 0) {
- return;
- }
- // 更新所有的刻度
- for (var i = 0; i < this.ScaleInfoNum; i++) {
- var iScalePos = this.ScaleInfo[i].m_ix + iMoved;
- // 设置刻度位置范围
- this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
- this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
- }
- };
- /*
- Function: updateFileListPos
- Description: 更新文件
- Input: 无
- Output: 无
- return: 无
- *************************************************/
- TimeBar.prototype.updateFileListPos = function () {
- var iFileLength = this.FileInfoSet[this.m_iSelWnd].length;
- if (iFileLength === 0) {
- return;
- }
- var tStartTime = this.FileInfoSet[this.m_iSelWnd][0].m_tStartTime;
- var seconds = parseInt((tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
- var iFile0Pos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- var iMoved = iFile0Pos - this.FileInfoSet[this.m_iSelWnd][0].m_iX;
- //没有移动直接返回
- if (iMoved === 0) {
- return;
- }
- // 更新所有
- for (var i = 0; i < iFileLength; i++) {
- var iX = this.FileInfoSet[this.m_iSelWnd][i].m_iX + iMoved;
- var iY = this.FileInfoSet[this.m_iSelWnd][i].m_iY;
- var iWidth = this.FileInfoSet[this.m_iSelWnd][i].m_iWidth;
- var iHeight = this.FileInfoSet[this.m_iSelWnd][i].m_iHeight;
- this.FileInfoSet[this.m_iSelWnd][i].setPos(iX, iY, iWidth, iHeight);
- }
- };
- /*
- Function: resize
- Description: 重置大小
- Input: iWidth宽度, iHeight高度
- Output: 无
- return: 无
- *************************************************/
- TimeBar.prototype.resize = function (iWidth, iHeight) {
- this.m_canvas.height = iHeight;
- this.m_canvas.width = iWidth;
- this.m_iHeight = iHeight;
- this.m_iWidth = iWidth;
- this.m_iTimeRectHeight = parseInt(this.m_iHeight * 4 / 7, 10);
- this.m_iFileRectHeight = this.m_iHeight - this.m_iTimeRectHeight - this.m_iBlankHeight;
- this.m_iMiddleLinePos = parseInt((this.m_iFileListStartPos + this.m_iWidth) / 2, 10);
- this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum);
- this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10);
- //初始化时间刻度信息
- var i;
- for (i = 0; i < this.ScaleInfoNum; i++) {
- // 计算与中轴线的时间差(只计算时分秒)
- var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
- var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- // 设置刻度位置范围
- this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
- this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
- }
- //初始化文件列表信息
- for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
- var FileInfoSetSel = this.FileInfoSet[this.m_iSelWnd][i];
- var iXLeftSeconds = parseInt((FileInfoSetSel.m_tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
- var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- var iXRightSeconds = parseInt((FileInfoSetSel.m_tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
- var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- if ((iFilePosRight - iFilePosLeft) < this.m_iMinFileWidth) {
- iFilePosRight = iFilePosLeft + this.m_iMinFileWidth;
- }
- FileInfoSetSel.setPos(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2, 10), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2);
- }
- this.repaint();
- };
- /*
- Function: setSpanType
- Description: 设置时间条的显示样式
- Input: 无
- Output: 无
- return: 无
- *************************************************/
- TimeBar.prototype.setSpanType = function (iSpanType) {
- switch (iSpanType) {
- case 6://每2小时一格
- this.ScaleInfoDisNum = 12;
- this.m_fCellTime = parseFloat(2.0);
- break;
- case 7://每小时一格
- this.ScaleInfoDisNum = 12;
- this.m_fCellTime = parseFloat(1.0);
- break;
- case 8://每半小时一格
- this.ScaleInfoDisNum = 12;
- this.m_fCellTime = parseFloat(0.5);
- break;
- case 9://每10分钟一格
- this.ScaleInfoDisNum = 12;
- this.m_fCellTime = parseFloat(1 / 6);
- break;
- case 10://每5分钟一格
- this.ScaleInfoDisNum = 12;
- this.m_fCellTime = parseFloat(1 / 12);
- break;
- case 11://每1分钟一格
- this.ScaleInfoDisNum = 12;
- this.m_fCellTime = parseFloat(1 / 60);
- break;
- default:
- this.ScaleInfoDisNum = 12;
- this.m_fCellTime = parseFloat(2.0);
- return;
- }
- this.ScaleInfoNum = parseInt(24 / this.m_fCellTime, 10);
- this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum);
- this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10);
- //初始化刻度
- this.ScaleInfo.length = 0;
- for (var i = 0; i < this.ScaleInfoNum; i++) {
- this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(i * 3600 * this.m_fCellTime, 10)));
- }
- //初始化时间刻度信息
- for (i = 0; i < this.ScaleInfoNum; i++) {
- // 计算与中轴线的时间差(只计算时分秒)
- var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
- var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- // 设置刻度位置范围
- this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
- this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
- }
- //初始化文件列表信息
- for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
- var FileInfoSetSel = this.FileInfoSet[this.m_iSelWnd][i];
- var iXLeftSeconds = parseInt((FileInfoSetSel.m_tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
- var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- var iXRightSeconds = parseInt((FileInfoSetSel.m_tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
- var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- if ((iFilePosRight - iFilePosLeft) < this.m_iMinFileWidth) {
- iFilePosRight = iFilePosLeft + this.m_iMinFileWidth;
- }
- FileInfoSetSel.setPos(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2, 10), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2);
- }
- this.repaint();
- };
- /*
- Function: addFile
- Description: 添加文件
- Input: StartTime 开始时间, StopTime 结束时间, iType 类型, iWndNum 默认当前窗口 添加到某个窗口
- Output: 无
- return: 无
- *************************************************/
- TimeBar.prototype.addFile = function (StartTime, StopTime, iType/*, iWndNum*/) {
- var tStartTime = new Time();
- var tStopTime = new Time();
- tStartTime.parseTime(StartTime);
- tStopTime.parseTime(StopTime);
- var fileColor;
- switch (iType) {
- case 1:
- fileColor = this.scheFileColor;
- break;
- case 2:
- fileColor = this.alarmFileColor;
- break;
- case 3:
- fileColor = this.cmdFileColor;
- break;
- case 4:
- fileColor = this.manualFileColor;
- break;
- case 5:
- fileColor = this.anrFileColor;
- break;
- default:
- fileColor = this.defaultFileColor;
- break;
- }
- var iXLeftSeconds = parseInt((tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
- var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- var iXRightSeconds = parseInt((tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
- var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
- var fileInfo = new FileInfo(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2, 10), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2, iType, fileColor, tStartTime, tStopTime);
- fileInfo.setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
- if (arguments.length >= 4) {
- this.FileInfoSet[arguments[3]].push(fileInfo);
- } else {
- this.FileInfoSet[this.m_iSelWnd].push(fileInfo);
- }
- };
- /*
- Function: clearWndFileList
- Description: 清空某个窗口的文件信息
- Input: iWndNum 窗口号 0-15 默认当前选中窗口
- Output: 无
- return: 无
- *************************************************/
- TimeBar.prototype.clearWndFileList = function ()/*iWndNum*/ {
- var iWndParam;
- if (arguments.length === 0) {
- iWndParam = this.m_iSelWnd;
- } else {
- iWndParam = arguments[0];
- }
- if (iWndParam < 0) {
- iWndParam = 0;
- }
- if (iWndParam >= 16) {
- iWndParam = 15;
- }
- this.FileInfoSet[iWndParam].length = 0;
- };
- /*
- Function: setMidLineTime
- Description: 设置中轴线时间
- Input: szTime yyyy-MM-dd HH:mm:ss
- Output: 无
- return: 无
- *************************************************/
- TimeBar.prototype.setMidLineTime = function (szTime) {
- var tCurTime = new Time();
- tCurTime.parseTime(szTime);
- this.m_tCurrentMidTime.setTimeByMis(tCurTime.m_iMilliseconds);
- this.repaint();
- };
- TimeBar.prototype.setMouseDownCallback = function (callbackFunc) {
- this.mouseDownCallbackFunc = callbackFunc;
- };
- /*
- Function: setMouseUpCallback
- Description: 设置鼠标弹起回调函数
- Input: func 回调函数 function(tStartTime, tStopTime)
- Output: 无
- return: 无
- *************************************************/
- TimeBar.prototype.setMouseUpCallback = function (callbackFunc) {
- this.mouseUpCallbackFunc = callbackFunc;
- };
- TimeBar.prototype.setMouseMoveCallback = function (callbackFunc) {
- this.mouseMoveCallbackFunc = callbackFunc;
- };
|