Commit a210474f authored by Dmitry.Vikulov's avatar Dmitry.Vikulov

- Поправлен селект объектов

- Исправлен баг с построением диаграммы по одной ячейке
- Уровни для автофигур


git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@47977 954022d7-b5bf-4e40-9824-e11837661b57
parent dee27bda
...@@ -1105,7 +1105,7 @@ asc_CChart.prototype = { ...@@ -1105,7 +1105,7 @@ asc_CChart.prototype = {
var cell = _t.range.intervalObject.worksheet.getCell( new CellAddress(i, bbox.c1, 0) ); var cell = _t.range.intervalObject.worksheet.getCell( new CellAddress(i, bbox.c1, 0) );
var value = cell.getValue(); var value = cell.getValue();
if ( !isNumber(value) ) if ( !isNumber(value) && (value != "") )
cntLeft++; cntLeft++;
} }
if ( (cntLeft > 0) && (cntLeft >= bbox.r2 - bbox.r1) ) if ( (cntLeft > 0) && (cntLeft >= bbox.r2 - bbox.r1) )
...@@ -1115,7 +1115,7 @@ asc_CChart.prototype = { ...@@ -1115,7 +1115,7 @@ asc_CChart.prototype = {
var cell = _t.range.intervalObject.worksheet.getCell( new CellAddress(bbox.r1, i, 0) ); var cell = _t.range.intervalObject.worksheet.getCell( new CellAddress(bbox.r1, i, 0) );
var value = cell.getValue(); var value = cell.getValue();
if ( !isNumber(value) ) if ( !isNumber(value) && (value != "") )
cntTop++; cntTop++;
} }
if ( (cntTop > 0) && (cntTop >= bbox.c2 - bbox.c1) ) if ( (cntTop > 0) && (cntTop >= bbox.c2 - bbox.c1) )
...@@ -2080,1154 +2080,1161 @@ function DrawingObjects() { ...@@ -2080,1154 +2080,1161 @@ function DrawingObjects() {
_this.drawingDocument = null; _this.drawingDocument = null;
_this.asyncImageLoadedEvent = null; _this.asyncImageLoadedEvent = null;
_this.asyncImageLoadedBackgroundEvent = null; _this.asyncImageLoadedBackgroundEvent = null;
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
// Public methods // Create drawing
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
_this.init = function(currentSheet) { var DrawingBase = function(ws) {
userId = api.User.asc_getId();
documentId = api.documentId;
worksheet = currentSheet;
drawingCtx = currentSheet.drawingCtx;
overlayCtx = currentSheet.overlayCtx;
shapeCtx = currentSheet.shapeCtx;
shapeOverlayCtx = currentSheet.shapeOverlayCtx;
trackOverlay = new COverlay();
trackOverlay.init( shapeOverlayCtx.m_oContext, "ws-canvas-overlay", 0, 0, shapeOverlayCtx.m_lWidthPix, shapeOverlayCtx.m_lHeightPix, shapeOverlayCtx.m_dWidthMM, shapeOverlayCtx.m_dHeightMM );
autoShapeTrack = new CAutoshapeTrack(); var _t = this;
autoShapeTrack.init( trackOverlay, 0, 0, shapeOverlayCtx.m_lWidthPix, shapeOverlayCtx.m_lHeightPix, shapeOverlayCtx.m_dWidthMM, shapeOverlayCtx.m_dHeightMM ); _t.worksheet = ws;
_this.drawingDocument = new CDrawingDocument(this); _t.Properties = {
_this.drawingDocument.AutoShapesTrack = autoShapeTrack; Id: 1,
_this.drawingDocument.TargetHtmlElement = document.getElementById('id_target_cursor'); Type: 2,
PosX: 3,
isViewerMode = function() { return worksheet._trigger("getViewerMode"); }; PosY: 4,
ExtCx: 5,
ExtCy: 6,
ImageSrc: 7,
FlagCurrentCursor: 8,
FlagsTransactionState: 9,
ImageUrl: 10,
FromCol: 11,
FromColOff: 12,
FromRow: 13,
FromRowOff: 14,
ToCol: 15,
ToColOff: 16,
ToRow: 17,
ToRowOff: 18,
MoveX: 19,
MoveY: 20,
SizeCoeff: 21,
ChartData: 22,
GraphicObject: 23
};
aObjects = []; _t.id = g_oIdCounter ? g_oIdCounter.Get_NewId() : null;
aImagesSync = []; _t.image = new Image();
aObjectsSync = []; _t.imageUrl = "";
_t.Type = c_oAscCellAnchorType.cellanchorTwoCell;
for (var i = 0; currentSheet.model.Drawings && (i < currentSheet.model.Drawings.length); i++) { _t.Pos = { X: 0, Y: 0 };
currentSheet.model.Drawings[i].worksheet = worksheet; _t.from = { col: 0, colOff: 0, row: 0, rowOff: 0 };
var clone = _this.cloneDrawingObject(currentSheet.model.Drawings[i]); _t.to = { col: 0, colOff: 0, row: 0, rowOff: 0 };
_t.ext = { cx: 0, cy: 0 };
_t.size = { width: 0, height: 0, coeff: 1 };
_t.move = { x: 0, y: 0, inAction: false };
_t.chart = new asc_CChart();
_t.graphicObject = null; // CShape or GroupShape
_t.flags = {
selected: false,
anchorUpdated: false,
lockState: c_oAscObjectLockState.No,
currentCursor: null,
transactionState: c_oAscTransactionState.No,
redrawChart: false
};
// Свойства
_t.isImage = function() {
return !_t.isChart();
}
if ( currentSheet.model.Drawings[i].isChart() ) { _t.isChart = function() {
return _t.chart.type ? true : false;
_this.calcChartInterval(clone.chart);
clone.chart.worksheet = worksheet;
aObjects.push( clone );
}
if ( currentSheet.model.Drawings[i].isImage() ) {
aImagesSync[aImagesSync.length] = currentSheet.model.Drawings[i].imageUrl;
aObjectsSync[aObjectsSync.length] = currentSheet.model.Drawings[i];
}
} }
// Загружаем все картинки листа _t.isGraphicObject = function() {
api.ImageLoader.bIsAsyncLoadDocumentImages = true; return _t.graphicObject != null;
api.ImageLoader.LoadDocumentImages(aImagesSync); }
api.ImageLoader.bIsAsyncLoadDocumentImages = false;
for (var i = 0; i < aObjectsSync.length; i++) { _t.getWorkbook = function() {
return (_t.worksheet ? _t.worksheet.model.workbook : null);
var clone = aObjectsSync[i]; }
var image = api.ImageLoader.LoadImage(aImagesSync[i], 1); // Должна быть в мапе
_t.getCanvasContext = function() {
if ( image != null ) { return _this.drawingDocument.CanvasHitContext;
}
// Считаем From/To исходя из graphicObject
_t.setGraphicObjectCoords = function() {
if ( _t.isGraphicObject() ) {
var headerTop = worksheet.getCellTop(0, 0); if ( (_t.graphicObject.x < 0) || (_t.graphicObject.y < 0) || (_t.graphicObject.extX <= 0) || (_t.graphicObject.extY <= 0) )
var headerLeft = worksheet.getCellLeft(0, 0); return;
var x = pxToMm(clone.getVisibleLeftOffset() + headerLeft);
var y = pxToMm(clone.getVisibleTopOffset() + headerTop);
var w = pxToMm(clone.getWidthFromTo());
var h = pxToMm(clone.getHeightFromTo());
// CImage _t.from.col = _t.worksheet._findColUnderCursor( mmToPt(_t.graphicObject.x) /*+ _t.worksheet.getCellLeft(0, 1)*/, true).col;
clone.graphicObject = new CImage(clone, _this); _t.from.colOff = _t.graphicObject.x /*+ _t.worksheet.getCellLeft(0, 3)*/ - _t.worksheet.getCellLeft(_t.from.col, 3);
clone.graphicObject.initDefault( x, y, w, h, image.src );
aObjects.push(clone); _t.from.row = _t.worksheet._findRowUnderCursor( mmToPt(_t.graphicObject.y) /*+ _t.worksheet.getCellTop(0, 1)*/, true).row;
_t.from.rowOff = _t.graphicObject.y /*+ _t.worksheet.getCellTop(0, 3)*/ - _t.worksheet.getCellTop(_t.from.row, 3);
var _left = _t.getRealLeftOffset();
var _top = _t.getRealTopOffset();
var foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.graphicObject.extX)), true);
while (foundCol == null) {
_t.worksheet.expandColsOnScroll(true);
_t.worksheet._trigger("reinitializeScrollX");
foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.graphicObject.extX)), true);
}
_t.to.col = foundCol.col;
_t.to.colOff = pxToMm(_left + mmToPx(_t.graphicObject.extX) - _t.worksheet.getCellLeft(_t.to.col, 0));
var foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.graphicObject.extY)), true);
while (foundRow == null) {
_t.worksheet.expandRowsOnScroll(true);
_t.worksheet._trigger("reinitializeScrollY");
foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.graphicObject.extY)), true);
}
_t.to.row = foundRow.row;
_t.to.rowOff = pxToMm(_top + mmToPx(_t.graphicObject.extY) - _t.worksheet.getCellTop(_t.to.row, 0));
} }
} }
lastObjectIndex = aObjects.length; // Проверяет выход за границы
_t.canDraw = function() {
var result = true;
// Upload event if ( (_t.worksheet.getCellLeft(_t.worksheet.getFirstVisibleCol(), 0) > _t.worksheet.getCellLeft(_t.to.col, 0) + mmToPx(_t.to.colOff)) ||
if (window.addEventListener) { (_t.worksheet.getCellTop(_t.worksheet.getFirstVisibleRow(), 0) > _t.worksheet.getCellTop(_t.to.row, 0) + mmToPx(_t.to.rowOff)))
window.addEventListener("message", this._uploadMessage, false); { result = false; }
return result;
} }
else {
if (window.attachEvent) { _t.canResize = function(width, height) {
window.attachEvent("onmessage", this._uploadMessage); var result = true;
if (_t.flags.currentCursor != "move") {
if (_t.isChart()) {
if (width == minChartWidth) {
switch (_t.flags.currentCursor) {
case "w-resize": case "e-resize": case "ne-resize":
case "nw-resize": case "se-resize": case "sw-resize":
result = false;
}
}
else if (height == minChartHeight) {
switch (_t.flags.currentCursor) {
case "n-resize": case "s-resize": case "ne-resize":
case "nw-resize": case "se-resize": case "sw-resize":
result = false;
}
}
}
else { // Image
if (width == minImageWidth) {
switch (_t.flags.currentCursor) {
case "w-resize": case "e-resize": case "ne-resize":
case "nw-resize": case "se-resize": case "sw-resize":
result = false;
}
}
else if (height == minImageHeight) {
switch (_t.flags.currentCursor) {
case "n-resize": case "s-resize": case "ne-resize":
case "nw-resize": case "se-resize": case "sw-resize":
result = false;
}
}
}
} }
return result;
} }
}
_this.getOverlay = function() { _t.updateAnchorPosition = function() {
return trackOverlay;
};
_this.OnUpdateOverlay = function() { switch (_t.Type) {
/*if (this.IsUpdateOverlayOnlyEnd) case c_oAscCellAnchorType.cellanchorOneCell:
{ {
this.IsUpdateOverlayOnEndCheck = true; var _left = _t.getRealLeftOffset();
return false; var _top = _t.getRealTopOffset();
} */
//console.log("update_overlay");
var overlay = trackOverlay;
//if (!overlay.m_bIsShow)
// return;
overlay.Clear(); var foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.ext.cx)), true);
var ctx = overlay.m_oContext; while (foundCol == null) {
_t.worksheet.expandColsOnScroll(true);
_t.worksheet._trigger("reinitializeScrollX");
foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.ext.cx)), true);
}
_t.to.col = foundCol.col;
_t.to.colOff = pxToMm(_left + mmToPx(_t.ext.cx) - _t.worksheet.getCellLeft(_t.to.col, 0));
var drDoc = this.drawingDocument; var foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.ext.cy)), true);
while (foundRow == null) {
_t.worksheet.expandRowsOnScroll(true);
_t.worksheet._trigger("reinitializeScrollY");
foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.ext.cy)), true);
}
_t.to.row = foundRow.row;
_t.to.rowOff = pxToMm(_top + mmToPx(_t.ext.cy) - _t.worksheet.getCellTop(_t.to.row, 0));
}
break;
/* if (drDoc.m_bIsSearching) case c_oAscCellAnchorType.cellanchorAbsolute:
{ {
ctx.fillStyle = "rgba(255,200,0,1)"; if ( _t.Pos.X < 0 )
ctx.beginPath(); _t.Pos.X = 0;
if ( _t.Pos.Y < 0 )
var drDoc = this.drawingDocument; _t.Pos.Y = 0;
for (var i = drDoc.m_lDrawingFirst; i <= drDoc.m_lDrawingEnd; i++)
{ _t.from.col = _t.worksheet._findColUnderCursor(pxToPt(mmToPx(_t.Pos.X) + _t.worksheet.getCellLeft(0, 0)), true).col;
var drawPage = drDoc.m_arrPages[i].drawingPage; _t.from.colOff = pxToMm(mmToPx(_t.Pos.X) + _t.worksheet.getCellLeft(0, 0) - _t.worksheet.getCellLeft(_t.from.col, 0));
drDoc.m_arrPages[i].pageIndex = i;
drDoc.m_arrPages[i].DrawSearch(overlay, drawPage.left, drawPage.top, drawPage.right - drawPage.left, drawPage.bottom - drawPage.top, drDoc);
}
ctx.globalAlpha = 0.5;
ctx.fill();
ctx.beginPath();
ctx.globalAlpha = 1.0;
if (null != drDoc.CurrentSearchNavi)
{
ctx.globalAlpha = 0.2;
ctx.fillStyle = "rgba(51,102,204,255)";
var places = drDoc.CurrentSearchNavi.Place; _t.from.row = _t.worksheet._findRowUnderCursor(pxToPt(mmToPx(_t.Pos.Y) + _t.worksheet.getCellTop(0, 0)), true).row;
_t.from.rowOff = pxToMm(mmToPx(_t.Pos.Y) + _t.worksheet.getCellTop(0, 0) - _t.worksheet.getCellTop(_t.from.row, 0));
switch ((drDoc.CurrentSearchNavi.Type & 0xFF)) var _left = _t.getRealLeftOffset();
{ var _top = _t.getRealTopOffset();
case search_HdrFtr_All:
case search_HdrFtr_All_no_First:
case search_HdrFtr_First:
case search_HdrFtr_Even:
case search_HdrFtr_Odd:
case search_HdrFtr_Odd_no_First:
{
var _page_num = drDoc.CurrentSearchNavi.PageNum;
for (var i = 0; i < places.length; i++)
{
var place = places[i];
if (drDoc.m_lDrawingFirst <= _page_num && _page_num <= drDoc.m_lDrawingEnd)
{
var drawPage = drDoc.m_arrPages[_page_num].drawingPage;
drDoc.m_arrPages[place.PageNum].DrawSearchCur1(overlay, drawPage.left, drawPage.top, drawPage.right - drawPage.left, drawPage.bottom - drawPage.top, place);
}
}
break;
}
default:
{
for (var i = 0; i < places.length; i++)
{
var place = places[i];
if (drDoc.m_lDrawingFirst <= place.PageNum && place.PageNum <= drDoc.m_lDrawingEnd)
{
var drawPage = drDoc.m_arrPages[place.PageNum].drawingPage;
drDoc.m_arrPages[place.PageNum].DrawSearchCur1(overlay, drawPage.left, drawPage.top, drawPage.right - drawPage.left, drawPage.bottom - drawPage.top, place);
}
}
break;
}
}
ctx.fill(); var foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.ext.cx)), true);
ctx.globalAlpha = 1.0; while (foundCol == null) {
} _t.worksheet.expandColsOnScroll(true);
} */ _t.worksheet._trigger("reinitializeScrollX");
foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.ext.cx)), true);
}
_t.to.col = foundCol.col;
_t.to.colOff = pxToMm(_left + mmToPx(_t.ext.cx) - _t.worksheet.getCellLeft(_t.to.col, 0));
if (null == drDoc.m_oDocumentRenderer) var foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.ext.cy)), true);
{ while (foundRow == null) {
if (drDoc.m_bIsSelection) _t.worksheet.expandRowsOnScroll(true);
{ _t.worksheet._trigger("reinitializeScrollY");
if (drDoc.m_bIsSelection ) foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.ext.cy)), true);
{ }
_t.to.row = foundRow.row;
_t.to.rowOff = pxToMm(_top + mmToPx(_t.ext.cy) - _t.worksheet.getCellTop(_t.to.row, 0));
}
break;
}
_t.flags.anchorUpdated = true;
}
overlay.m_oControl.HtmlElement.style.display = "block"; _t.normalizeMetrics = function() {
var width = _t.getWidthFromTo();
var height = _t.getHeightFromTo();
if ( width < 2 )
_t.to.colOff = _t.from.colOff + 4;
if ( height < 2 )
_t.to.rowOff = _t.from.rowOff + 4;
}
// Реальное смещение по высоте
_t.getRealTopOffset = function() {
var val = _t.worksheet.getCellTop(_t.from.row, 0) + mmToPx(_t.from.rowOff);
return window["Asc"].round(val);
}
if (null == overlay.m_oContext) // Реальное смещение по ширине
overlay.m_oContext = overlay.m_oControl.HtmlElement.getContext('2d'); _t.getRealLeftOffset = function() {
} var val = _t.worksheet.getCellLeft(_t.from.col, 0) + mmToPx(_t.from.colOff);
drDoc.private_StartDrawSelection(overlay); return window["Asc"].round(val);
}
// Ширина по координатам
_t.getWidthFromTo = function(withoutRound) {
var val = _t.worksheet.getCellLeft(_t.to.col, 0) + mmToPx(_t.to.colOff) - _t.worksheet.getCellLeft(_t.from.col, 0) - mmToPx(_t.from.colOff);
return withoutRound ? val : window["Asc"].round(val);
}
this.controller.drawTextSelection(); // Высота по координатам
drDoc.private_EndDrawSelection(); _t.getHeightFromTo = function(withoutRound) {
var val = _t.worksheet.getCellTop(_t.to.row, 0) + mmToPx(_t.to.rowOff) - _t.worksheet.getCellTop(_t.from.row, 0) - mmToPx(_t.from.rowOff);
return withoutRound ? val : window["Asc"].round(val);
}
} // Видимая ширина при скролах
_t.getVisibleWidth = function() {
var fvc = _t.worksheet.getCellLeft(_t.worksheet.getFirstVisibleCol(), 0);
var off = _t.getRealLeftOffset() - fvc;
off = (off >= 0) ? 0 : Math.abs(off);
return _t.getWidthFromTo() - off;
}
ctx.globalAlpha = 1.0; // Видимая высота при скролах
_t.getVisibleHeight = function() {
var fvr = _t.worksheet.getCellTop(_t.worksheet.getFirstVisibleRow(), 0);
var off = _t.getRealTopOffset() - fvr;
off = (off >= 0) ? 0 : Math.abs(off);
return _t.getHeightFromTo() - off;
}
this.controller.drawSelection(drDoc); // Видимое смещение объекта от первой видимой строки
if (_this.controller.needUpdateOverlay()) _t.getVisibleTopOffset = function(withHeader) {
{ var headerRowOff = _t.worksheet.getCellTop(0, 0);
overlay.Show(); var fvr = _t.worksheet.getCellTop(_t.worksheet.getFirstVisibleRow(), 0);
this.drawingDocument.AutoShapesTrack.PageIndex = -1; var off = _t.getRealTopOffset() - fvr;
this.controller.drawTracks(this.m_oDrawingDocument.AutoShapesTrack); var off = (off > 0) ? off : 0;
this.drawingDocument.AutoShapesTrack.CorrectOverlayBounds(); return withHeader ? headerRowOff + off : off;
} }
} // Видимое смещение объекта от первой видимой колонки
else _t.getVisibleLeftOffset = function(withHeader) {
{ var headerColOff = _t.worksheet.getCellLeft(0, 0);
ctx.fillStyle = "rgba(51,102,204,255)"; var fvc = _t.worksheet.getCellLeft(_t.worksheet.getFirstVisibleCol(), 0);
ctx.beginPath(); var off = _t.getRealLeftOffset() - fvc;
var off = (off > 0) ? off : 0;
return withHeader ? headerColOff + off : off;
}
for (var i = drDoc.m_lDrawingFirst; i <= drDoc.m_lDrawingEnd; i++) // смещение по высоте внутри объекта
{ _t.getInnerOffsetTop = function() {
var drawPage = drDoc.m_arrPages[i].drawingPage; var fvr = _t.worksheet.getCellTop(_t.worksheet.getFirstVisibleRow(), 0);
drDoc.m_oDocumentRenderer.DrawSelection(i, overlay, drawPage.left, drawPage.top, drawPage.right - drawPage.left, drawPage.bottom - drawPage.top); var off = _t.getRealTopOffset() - fvr;
} return (off > 0) ? 0 : window["Asc"].round(Math.abs(off) * _t.getHeightCoeff());
}
ctx.globalAlpha = 0.2; // смещение по ширине внутри объекта
ctx.fill(); _t.getInnerOffsetLeft = function() {
ctx.beginPath(); var fvc = _t.worksheet.getCellLeft(_t.worksheet.getFirstVisibleCol(), 0);
ctx.globalAlpha = 1.0; var off = _t.getRealLeftOffset() - fvc;
} return (off > 0) ? 0 : window["Asc"].round(Math.abs(off) * _t.getWidthCoeff());
}
return true; // коэффициент по ширине если несоответствие с реальным размером
}; _t.getWidthCoeff = function() {
return _t.image.width / _t.getWidthFromTo();
}
_this.changeZoom = function(factor) { // коэффициент по высоте если несоответствие с реальным размером
} _t.getHeightCoeff = function() {
return _t.image.height / _t.getHeightFromTo();
_this.getWorkbook = function() { }
return (worksheet ? worksheet.model.workbook : null);
//if ( g_oTableId )
// g_oTableId.Add( _t, _t.id );
} }
_this.getCanvasContext = function() { DrawingBase.prototype = {
return _this.drawingDocument.CanvasHitContext;
} getObjectType: function() {
return CLASS_TYPE_DRAWING_BASE;
_this.getDrawingObjects = function() { },
return aObjects;
}
_this.getWorksheet = function() { getType: function() {
return worksheet; return UndoRedoDataTypes.DrawingObjectData;
} },
_this.initGlobalDrawingPointer = function() { getProperties: function() {
DrawingObject = DrawingBase; return this.Properties;
DrawingObjectLayer = DrawingLayer; },
}
_this._uploadMessage = function(event) { getProperty: function(nType) {
if ( null != event && null != event.data ) { switch (nType) {
case this.Properties.Id: return this.id; break;
case this.Properties.Type: return this.Type; break;
case this.Properties.PosX: return this.Pos.X; break;
case this.Properties.PosY: return this.Pos.Y; break;
case this.Properties.ExtCx: return this.ext.cx; break;
case this.Properties.ExtCy: return this.ext.cy; break;
var data = JSON.parse(event.data); case this.Properties.ImageSrc: return this.image.src; break;
if ( null != data && null != data.type )
{
if ( PostMessageType.UploadImage == data.type ) {
if(c_oAscServerError.NoError == data.error) {
var sheetId = null;
if(null != data.input)
sheetId = data.input.sheetId;
var url = data.url;
if (sheetId == worksheet.model.getId())
_this.addImageDrawingObject(url, false, null);
else
worksheet.model.workbook.handlers.trigger("asc_onEndAction", c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.LoadImage);
}
else {
worksheet.model.workbook.handlers.trigger("asc_onError", _mapAscServerErrorToAscError(data.error), c_oAscError.Level.NoCritical);
worksheet.model.workbook.handlers.trigger("asc_onEndAction", c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.LoadImage);
}
}
}
}
}
_this.clearDrawingObjects = function() { case this.Properties.FlagCurrentCursor: return this.flags.currentCursor; break;
worksheet._clean(); case this.Properties.FlagsTransactionState: return this.flags.transactionState; break;
worksheet._drawCorner();
worksheet._drawColumnHeaders();
worksheet._drawRowHeaders();
worksheet._drawGrid();
worksheet._drawCells();
worksheet._drawCellsBorders();
worksheet.cellCommentator.drawCommentCells(false);
worksheet.autoFilters.drawAutoF(worksheet);
}
_this.raiseLayerDrawingObjects = function(bSelect) { case this.Properties.ImageUrl: return this.imageUrl; break;
// слой c объектами должен быть выше селекта
for (var i = 0; i < _this.countDrawingObjects(); i++) {
var obj = aObjects[i];
var width = obj.getVisibleWidth();
var height = obj.getVisibleHeight();
if ( (width > 0) && (height > 0) ) {
overlayCtx.clearRect(pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)),
pxToPt(obj.getVisibleWidth()), pxToPt(obj.getVisibleHeight()));
if ( bSelect ) {
if (obj.flags.selected)
_this.selectDrawingObject(i);
if (obj.flags.lockState != c_oAscObjectLockState.No)
_this.selectLockedDrawingObject(obj.id, obj.flags.lockState);
}
}
}
}
_this.countDrawingObjects = function() { case this.Properties.FromCol: return this.from.col; break;
return aObjects ? aObjects.length : 0; case this.Properties.FromColOff: return this.from.colOff; break;
} case this.Properties.FromRow: return this.from.row; break;
case this.Properties.FromRowOff: return this.from.rowOff; break;
_this.checkDrawingObjectIndex = function(index) { case this.Properties.ToCol: return this.to.col; break;
if (_this.countDrawingObjects() && (index >= 0) && (index < _this.countDrawingObjects())) case this.Properties.ToColOff: return this.to.colOff; break;
return true; case this.Properties.ToRow: return this.to.row; break;
else case this.Properties.ToRowOff: return this.to.rowOff; break;
return false;
}
//----------------------------------------------------------------------------------- case this.Properties.MoveX: return this.move.x; break;
// Optimization of drawing case this.Properties.MoveY: return this.move.y; break;
//-----------------------------------------------------------------------------------
_this.needDrawingObjects = function() { case this.Properties.SizeCoeff: return this.size.coeff; break;
var result = false; case this.Properties.ChartData: return this.chart; break;
var fvr = worksheet.getFirstVisibleRow(); case this.Properties.GraphicObject: return this.graphicObject; break;
var fvc = worksheet.getFirstVisibleCol();
for (var i = 0; i < _this.countDrawingObjects(); i++) {
if ((fvr < aObjects[i].to.row + 1) && (fvc < aObjects[i].to.col + 1)) {
result = true;
break;
} }
} },
return result;
}
_this.showOverlayDrawingObject = function(index) { setProperty: function(nType, value) {
if (_this.checkDrawingObjectIndex(index)) { switch (nType) {
var obj = aObjects[index]; case this.Properties.Id: this.id = value; break;
if ( !obj.image.complete ) // complete - дополнительная проверка в случае base64 case this.Properties.Type: this.Type = value; break;
return; case this.Properties.PosX: this.Pos.X = value; break;
case this.Properties.PosY: this.Pos.Y = value; break;
case this.Properties.ExtCx: this.ext.cx = value; break;
case this.Properties.ExtCy: this.ext.cy = value; break;
if (obj.image.width && obj.image.height) { case this.Properties.ImageSrc: this.image.src = value; break;
var sWidth = obj.image.width - obj.getInnerOffsetLeft();
var sHeight = obj.image.height - obj.getInnerOffsetTop();
// Проверка для IE case this.Properties.FlagCurrentCursor: this.flags.currentCursor = value; break;
var dWidth = obj.getVisibleWidth(); case this.Properties.FlagsTransactionState: this.flags.transactionState = value; break;
var dHeight = obj.getVisibleHeight();
if ((dWidth <= 0) || (dHeight <= 0))
return;
overlayCtx.drawImage(obj.image, case this.Properties.ImageUrl: this.imageUrl = value; break;
// обрезаем
pxToPt(obj.getInnerOffsetLeft()), pxToPt(obj.getInnerOffsetTop()),
pxToPt(sWidth), pxToPt(sHeight),
// вставляем
pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)),
pxToPt(dWidth), pxToPt(dHeight));
}
}
}
_this.showDrawingObjects = function(clearCanvas, printOptions, bUpdateCharts) { case this.Properties.FromCol: this.from.col = value; break;
case this.Properties.FromColOff: this.from.colOff = value; break;
case this.Properties.FromRow: this.from.row = value; break;
case this.Properties.FromRowOff: this.from.rowOff = value; break;
/*********** Print Options *************** case this.Properties.ToCol: this.to.col = value; break;
printOptions : { case this.Properties.ToColOff: this.to.colOff = value; break;
ctx, case this.Properties.ToRow: this.to.row = value; break;
margin : { case this.Properties.ToRowOff: this.to.rowOff = value; break;
left: 0, // pt
right: 0, // pt case this.Properties.MoveX: this.move.x = value; break;
top: 0, // pt case this.Properties.MoveY: this.move.y = value; break;
button: 0 // pt
case this.Properties.SizeCoeff: this.size.coeff = value; break;
case this.Properties.ChartData: this.chart = value; break;
case this.Properties.GraphicObject: this.graphicObject = value; break;
}
} }
}
//-----------------------------------------------------------------------------------
// Create drawing layer
//-----------------------------------------------------------------------------------
var DrawingLayer = function() {
this.Properties = {
aLayerBefore: 1,
aLayerAfter: 2
} }
*****************************************/
this.aLayerBefore = [];
if (!_this.countDrawingObjects()) this.aLayerAfter = [];
return; }
worksheet.model.Drawings = aObjects; DrawingLayer.prototype = {
getType: function() {
return UndoRedoDataTypes.DrawingObjectLayer;
},
if (drawingCtx && _this.needDrawingObjects()) { getProperties: function() {
return this.Properties;
},
// всё чистим getProperty: function(nType) {
if (clearCanvas) { switch (nType) {
_this.clearDrawingObjects(); case this.Properties.aLayerBefore: return this.aLayerBefore; break;
} case this.Properties.aLayerAfter: return this.aLayerAfter; break;
if ( !imageLoader.isReady() ) {
//console.log("imageLoader - False");
imageLoader.setReadyCallback(_this.showDrawingObjects);
} }
else { },
//console.log("imageLoader - Ok");
imageLoader.removeReadyCallback(); setProperty: function(nType, value) {
switch (nType) {
case this.Properties.aLayerBefore: this.aLayerBefore = value; break;
case this.Properties.aLayerAfter: this.aLayerAfter = value; break;
} }
}
}
//-----------------------------------------------------------------------------------
// Constructor
//-----------------------------------------------------------------------------------
_this.createDrawingObject = function() {
var drawing = new DrawingBase(worksheet);
drawing.chart.range.interval = function() {
var result = "";
if (worksheet) {
var selectedRange = worksheet.getSelectedRange();
if (selectedRange) {
var box = selectedRange.getBBox0();
var startCell = new CellAddress(box.r1, box.c1, 0);
var endCell = new CellAddress(box.r2, box.c2, 0);
for (var i = 0; i < _this.countDrawingObjects(); i++) { if (startCell && endCell) {
var wsName = worksheet.model.sName;
var index = i; if ( !rx_test_ws_name.test(wsName) )
var obj = aObjects[i]; wsName = "'" + wsName + "'";
// Shape render if (startCell.getID() == endCell.getID())
if ( obj.isGraphicObject() ) { result = wsName + "!" + startCell.getID();
obj.graphicObject.draw(shapeCtx); else
continue; result = wsName + "!" + startCell.getID() + ":" + endCell.getID();
} }
}
obj.normalizeMetrics(); }
return result;
obj.size.coeff = obj.getHeightFromTo(true) / obj.getWidthFromTo(true); }();
if (!obj.flags.anchorUpdated)
obj.updateAnchorPosition();
// History
if (obj.move.inAction && undoRedoObject && (undoRedoObject.id == obj.id)) {
History.Create_NewPoint(); drawing.chart.range.intervalObject = function() {
History.StartTransaction(); return worksheet ? worksheet.getSelectedRange() : null;
}();
undoRedoObject.flags.transactionState = c_oAscTransactionState.Start;
History.Add(g_oUndoRedoDrawingObject, historyitem_DrawingObject_Edit, worksheet.model.getId(), null, undoRedoObject); return drawing;
undoRedoObject = null; }
History.Create_NewPoint();
var urObj = _this.cloneDrawingObject(obj);
urObj.flags.transactionState = c_oAscTransactionState.Stop;
History.Add(g_oUndoRedoDrawingObject, historyitem_DrawingObject_Edit, worksheet.model.getId(), null, urObj);
History.EndTransaction(); _this.cloneDrawingObject = function(obj) {
}
var srcForPrint; var copyObject = _this.createDrawingObject();
copyObject.worksheet = obj.worksheet;
copyObject.id = obj.id;
// Выход за границы copyObject.Type = obj.Type;
while (worksheet.nColsCount < obj.to.col + 1) { copyObject.Pos.X = obj.Pos.X;
worksheet.expandColsOnScroll(true); copyObject.Pos.Y = obj.Pos.Y;
} copyObject.ext.cx = obj.ext.cx;
while (worksheet.nRowsCount < obj.to.row + 1) { copyObject.ext.cy = obj.ext.cy;
worksheet.expandRowsOnScroll(true);
}
if ( obj.isChart() && (obj.flags.redrawChart || bUpdateCharts) ) { var img = new Image();
if ( !obj.chart.range.intervalObject ) img.src = obj.image.src;
_this.intervalToIntervalObject(obj.chart); copyObject.image = img;
obj.chart.rebuildSeries();
obj.chart.worksheet = worksheet;
var chartBase64 = chartRender.insertChart(obj.chart, null, obj.getWidthFromTo(), obj.getHeightFromTo());
if ( !chartBase64 )
continue;
imageLoader.addImage(chartBase64);
imageLoader.setReadyCallback(_this.showDrawingObjects);
obj.image.onload = function() { copyObject.flags.currentCursor = obj.flags.currentCursor;
obj.flags.currentCursor = null; copyObject.flags.transactionState = obj.flags.transactionState;
} copyObject.flags.redrawChart = obj.flags.redrawChart;
obj.image.src = chartBase64;
obj.flags.redrawChart = false;
continue;
}
if ( !obj.canDraw() ) copyObject.imageUrl = obj.imageUrl;
continue;
var sWidth = obj.image.width - obj.getInnerOffsetLeft(); copyObject.from.col = obj.from.col;
var sHeight = obj.image.height - obj.getInnerOffsetTop(); copyObject.from.colOff = obj.from.colOff;
copyObject.from.row = obj.from.row;
copyObject.from.rowOff = obj.from.rowOff;
if ( printOptions ) { copyObject.to.col = obj.to.col;
if ( obj.isChart() ) { copyObject.to.colOff = obj.to.colOff;
srcForPrint = obj.image.src; // base64 copyObject.to.row = obj.to.row;
} copyObject.to.rowOff = obj.to.rowOff;
else {
srcForPrint = obj.imageUrl;
}
var marginRight = 0; copyObject.move.x = obj.move.x;
if (worksheet.getCellLeft(worksheet.getLastVisibleCol(), 0) + worksheet.getColumnWidth(worksheet.getLastVisibleCol()) < obj.getRealLeftOffset() + obj.getVisibleWidth()) copyObject.move.y = obj.move.y;
marginRight = printOptions.margin.right; copyObject.size.coeff = obj.size.coeff;
copyObject.chart = new asc_CChart(obj.chart);
copyObject.graphicObject = obj.graphicObject;
copyObject.chart.worksheet = obj.chart.worksheet;
printOptions.ctx.drawImage(srcForPrint, return copyObject;
// обрезаем }
pxToPt(obj.getInnerOffsetLeft()), pxToPt(obj.getInnerOffsetTop()),
pxToPt(sWidth) - marginRight, pxToPt(sHeight),
// вставляем
pxToPt(obj.getVisibleLeftOffset(true)) + printOptions.margin.left, pxToPt(obj.getVisibleTopOffset(true)) + printOptions.margin.top,
pxToPt(obj.getVisibleWidth()), pxToPt(obj.getVisibleHeight()),
pxToPt(obj.image.width), pxToPt(obj.image.height));
}
else {
if ( !obj.image.width || !obj.image.height )
continue;
// Проверка для IE //-----------------------------------------------------------------------------------
var dWidth = obj.getVisibleWidth(); // Public methods
var dHeight = obj.getVisibleHeight(); //-----------------------------------------------------------------------------------
if ( (dWidth <= 0) || (dHeight <= 0) )
continue; _this.init = function(currentSheet) {
drawingCtx.drawImage(obj.image, userId = api.User.asc_getId();
// обрезаем documentId = api.documentId;
pxToPt(obj.getInnerOffsetLeft()), pxToPt(obj.getInnerOffsetTop()), worksheet = currentSheet;
pxToPt(sWidth), pxToPt(sHeight),
// вставляем drawingCtx = currentSheet.drawingCtx;
pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)), overlayCtx = currentSheet.overlayCtx;
pxToPt(dWidth), pxToPt(dHeight)); shapeCtx = currentSheet.shapeCtx;
} shapeOverlayCtx = currentSheet.shapeOverlayCtx;
trackOverlay = new COverlay();
trackOverlay.init( shapeOverlayCtx.m_oContext, "ws-canvas-overlay", 0, 0, shapeOverlayCtx.m_lWidthPix, shapeOverlayCtx.m_lHeightPix, shapeOverlayCtx.m_dWidthMM, shapeOverlayCtx.m_dHeightMM );
autoShapeTrack = new CAutoshapeTrack();
autoShapeTrack.init( trackOverlay, 0, 0, shapeOverlayCtx.m_lWidthPix, shapeOverlayCtx.m_lHeightPix, shapeOverlayCtx.m_dWidthMM, shapeOverlayCtx.m_dHeightMM );
_this.drawingDocument = new CDrawingDocument(this);
_this.drawingDocument.AutoShapesTrack = autoShapeTrack;
_this.drawingDocument.TargetHtmlElement = document.getElementById('id_target_cursor');
isViewerMode = function() { return worksheet._trigger("getViewerMode"); };
if ( obj.flags.selected && !printOptions ) aObjects = [];
_this.selectDrawingObject(index); aImagesSync = [];
if ( obj.flags.lockState != c_oAscObjectLockState.No ) aObjectsSync = [];
_this.selectLockedDrawingObject(obj.id, obj.flags.lockState);
for (var i = 0; currentSheet.model.Drawings && (i < currentSheet.model.Drawings.length); i++) {
obj.move.inAction = false; currentSheet.model.Drawings[i].worksheet = worksheet;
var clone = _this.cloneDrawingObject(currentSheet.model.Drawings[i]);
if ( currentSheet.model.Drawings[i].isChart() ) {
_this.calcChartInterval(clone.chart);
clone.chart.worksheet = worksheet;
aObjects.push( clone );
}
if ( currentSheet.model.Drawings[i].isImage() ) {
aImagesSync[aImagesSync.length] = currentSheet.model.Drawings[i].imageUrl;
aObjectsSync[aObjectsSync.length] = currentSheet.model.Drawings[i];
} }
} }
if ( !printOptions ) {
worksheet._drawCollaborativeElements();
if ( _this.getSelectedDrawingObjectIndex() < 0 ) { // Загружаем все картинки листа
worksheet.cleanSelection(); api.ImageLoader.bIsAsyncLoadDocumentImages = true;
worksheet._drawSelectionRange(); api.ImageLoader.LoadDocumentImages(aImagesSync);
_this.raiseLayerDrawingObjects(true); api.ImageLoader.bIsAsyncLoadDocumentImages = false;
for (var i = 0; i < aObjectsSync.length; i++) {
var clone = aObjectsSync[i];
var image = api.ImageLoader.LoadImage(aImagesSync[i], 1); // Должна быть в мапе
if ( image != null ) {
var headerTop = worksheet.getCellTop(0, 0);
var headerLeft = worksheet.getCellLeft(0, 0);
var x = pxToMm(clone.getVisibleLeftOffset() + headerLeft);
var y = pxToMm(clone.getVisibleTopOffset() + headerTop);
var w = pxToMm(clone.getWidthFromTo());
var h = pxToMm(clone.getHeightFromTo());
// CImage
clone.graphicObject = new CImage(clone, _this);
clone.graphicObject.initDefault( x, y, w, h, image.src );
aObjects.push(clone);
} }
} }
}
lastObjectIndex = aObjects.length;
_this.showOverlayGraphicObjects = function() { // Upload event
shapeOverlayCtx.put_GlobalAlpha(true, 0.5); if (window.addEventListener) {
shapeOverlayCtx.m_oContext.clearRect(0, 0, shapeOverlayCtx.m_lWidthPix, shapeOverlayCtx.m_lHeightPix); window.addEventListener("message", this._uploadMessage, false);
_this.controller.drawTracks(shapeOverlayCtx); }
shapeOverlayCtx.put_GlobalAlpha(true, 1); else {
if (window.attachEvent) {
window.attachEvent("onmessage", this._uploadMessage);
}
}
} }
_this.showOverlayDrawingObjects = function() {
if (overlayCtx) { _this.getOverlay = function() {
return trackOverlay;
};
overlayCtx.clear(); _this.OnUpdateOverlay = function() {
var index = _this.getSelectedDrawingObjectIndex(); /*if (this.IsUpdateOverlayOnlyEnd)
var obj = aObjects[index]; {
if (!obj.flags.currentCursor) this.IsUpdateOverlayOnEndCheck = true;
return; return false;
} */
//console.log("update_overlay");
var overlay = trackOverlay;
//if (!overlay.m_bIsShow)
// return;
// выход за границы overlay.Clear();
if (!obj.canDraw()) var ctx = overlay.m_oContext;
return;
var sWidth = obj.image.width - obj.getInnerOffsetLeft(); var drDoc = this.drawingDocument;
var sHeight = obj.image.height - obj.getInnerOffsetTop();
setCanvasZIndex(overlayCtx.ctx, 0.5);
if (obj.isImage()) { /* if (drDoc.m_bIsSearching)
{
ctx.fillStyle = "rgba(255,200,0,1)";
ctx.beginPath();
// Проверка для IE var drDoc = this.drawingDocument;
var dWidth = obj.getVisibleWidth(); for (var i = drDoc.m_lDrawingFirst; i <= drDoc.m_lDrawingEnd; i++)
var dHeight = obj.getVisibleHeight(); {
if ((dWidth <= 0) || (dHeight <= 0)) var drawPage = drDoc.m_arrPages[i].drawingPage;
return; drDoc.m_arrPages[i].pageIndex = i;
drDoc.m_arrPages[i].DrawSearch(overlay, drawPage.left, drawPage.top, drawPage.right - drawPage.left, drawPage.bottom - drawPage.top, drDoc);
}
overlayCtx.drawImage(obj.image, ctx.globalAlpha = 0.5;
/* обрезаем */pxToPt(obj.getInnerOffsetLeft()), pxToPt(obj.getInnerOffsetTop()), ctx.fill();
pxToPt(sWidth), pxToPt(sHeight), ctx.beginPath();
ctx.globalAlpha = 1.0;
/* вставляем */pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)), if (null != drDoc.CurrentSearchNavi)
pxToPt(dWidth), pxToPt(dHeight)); {
} ctx.globalAlpha = 0.2;
else { ctx.fillStyle = "rgba(51,102,204,255)";
overlayCtx.beginPath();
overlayCtx.rect(pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)), pxToPt(obj.getVisibleWidth()), pxToPt(obj.getVisibleHeight()));
overlayCtx.setLineWidth(1);
overlayCtx.setStrokeStyle("#000000");
overlayCtx.setFillStyle("#ffffff");
overlayCtx.fillRect(pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)), pxToPt(obj.getVisibleWidth()), pxToPt(obj.getVisibleHeight()));
overlayCtx.stroke();
}
}
}
_this.getDrawingAreaMetrics = function() { var places = drDoc.CurrentSearchNavi.Place;
/* switch ((drDoc.CurrentSearchNavi.Type & 0xFF))
* Объект, определяющий max колонку и строчку для отрисовки объектов листа {
*/ case search_HdrFtr_All:
case search_HdrFtr_All_no_First:
case search_HdrFtr_First:
case search_HdrFtr_Even:
case search_HdrFtr_Odd:
case search_HdrFtr_Odd_no_First:
{
var _page_num = drDoc.CurrentSearchNavi.PageNum;
for (var i = 0; i < places.length; i++)
{
var place = places[i];
if (drDoc.m_lDrawingFirst <= _page_num && _page_num <= drDoc.m_lDrawingEnd)
{
var drawPage = drDoc.m_arrPages[_page_num].drawingPage;
drDoc.m_arrPages[place.PageNum].DrawSearchCur1(overlay, drawPage.left, drawPage.top, drawPage.right - drawPage.left, drawPage.bottom - drawPage.top, place);
}
}
break;
}
default:
{
for (var i = 0; i < places.length; i++)
{
var place = places[i];
if (drDoc.m_lDrawingFirst <= place.PageNum && place.PageNum <= drDoc.m_lDrawingEnd)
{
var drawPage = drDoc.m_arrPages[place.PageNum].drawingPage;
drDoc.m_arrPages[place.PageNum].DrawSearchCur1(overlay, drawPage.left, drawPage.top, drawPage.right - drawPage.left, drawPage.bottom - drawPage.top, place);
}
}
break;
}
}
var metrics = { ctx.fill();
maxCol: 0, ctx.globalAlpha = 1.0;
maxRow: 0 }
} } */
for (var i = 0; i < _this.countDrawingObjects(); i++) { if (null == drDoc.m_oDocumentRenderer)
if (aObjects[i].to.col >= metrics.maxCol) {
metrics.maxCol = aObjects[i].to.col + 1; // учитываем colOff if (drDoc.m_bIsSelection)
if (aObjects[i].to.row >= metrics.maxRow) {
metrics.maxRow = aObjects[i].to.row + 1; // учитываем rowOff if (drDoc.m_bIsSelection )
} {
return metrics; overlay.m_oControl.HtmlElement.style.display = "block";
}
//----------------------------------------------------------------------------------- if (null == overlay.m_oContext)
// Create drawing overlay.m_oContext = overlay.m_oControl.HtmlElement.getContext('2d');
//----------------------------------------------------------------------------------- }
drDoc.private_StartDrawSelection(overlay);
var DrawingBase = function(ws) {
var _t = this;
_t.worksheet = ws;
_t.Properties = {
Id: 1,
Type: 2,
PosX: 3,
PosY: 4,
ExtCx: 5,
ExtCy: 6,
ImageSrc: 7,
FlagCurrentCursor: 8,
FlagsTransactionState: 9,
ImageUrl: 10,
FromCol: 11,
FromColOff: 12,
FromRow: 13,
FromRowOff: 14,
ToCol: 15,
ToColOff: 16,
ToRow: 17,
ToRowOff: 18,
MoveX: 19,
MoveY: 20,
SizeCoeff: 21,
ChartData: 22,
GraphicObject: 23
};
_t.id = g_oIdCounter ? g_oIdCounter.Get_NewId() : null;
_t.image = new Image();
_t.imageUrl = "";
_t.Type = c_oAscCellAnchorType.cellanchorTwoCell;
_t.Pos = { X: 0, Y: 0 };
_t.from = { col: 0, colOff: 0, row: 0, rowOff: 0 }; this.controller.drawTextSelection();
_t.to = { col: 0, colOff: 0, row: 0, rowOff: 0 }; drDoc.private_EndDrawSelection();
_t.ext = { cx: 0, cy: 0 };
_t.size = { width: 0, height: 0, coeff: 1 };
_t.move = { x: 0, y: 0, inAction: false };
_t.chart = new asc_CChart(); }
_t.graphicObject = null; // CShape or GroupShape
_t.flags = { ctx.globalAlpha = 1.0;
selected: false,
anchorUpdated: false,
lockState: c_oAscObjectLockState.No,
currentCursor: null,
transactionState: c_oAscTransactionState.No,
redrawChart: false
};
// Свойства this.controller.drawSelection(drDoc);
_t.isImage = function() { if (_this.controller.needUpdateOverlay())
return !_t.isChart(); {
} overlay.Show();
this.drawingDocument.AutoShapesTrack.PageIndex = -1;
_t.isChart = function() { this.controller.drawTracks(this.m_oDrawingDocument.AutoShapesTrack);
return _t.chart.type ? true : false; this.drawingDocument.AutoShapesTrack.CorrectOverlayBounds();
} }
_t.isGraphicObject = function() {
return _t.graphicObject != null;
}
_t.getWorkbook = function() {
return (_t.worksheet ? _t.worksheet.model.workbook : null);
}
_t.getCanvasContext = function() {
return _this.drawingDocument.CanvasHitContext;
} }
else
{
ctx.fillStyle = "rgba(51,102,204,255)";
ctx.beginPath();
// Считаем From/To исходя из graphicObject for (var i = drDoc.m_lDrawingFirst; i <= drDoc.m_lDrawingEnd; i++)
_t.setGraphicObjectCoords = function() { {
if ( _t.isGraphicObject() ) { var drawPage = drDoc.m_arrPages[i].drawingPage;
drDoc.m_oDocumentRenderer.DrawSelection(i, overlay, drawPage.left, drawPage.top, drawPage.right - drawPage.left, drawPage.bottom - drawPage.top);
if ( (_t.graphicObject.x < 0) || (_t.graphicObject.y < 0) || (_t.graphicObject.extX <= 0) || (_t.graphicObject.extY <= 0) ) }
return;
_t.from.col = _t.worksheet._findColUnderCursor( mmToPt(_t.graphicObject.x) /*+ _t.worksheet.getCellLeft(0, 1)*/, true).col;
_t.from.colOff = _t.graphicObject.x /*+ _t.worksheet.getCellLeft(0, 3)*/ - _t.worksheet.getCellLeft(_t.from.col, 3);
_t.from.row = _t.worksheet._findRowUnderCursor( mmToPt(_t.graphicObject.y) /*+ _t.worksheet.getCellTop(0, 1)*/, true).row;
_t.from.rowOff = _t.graphicObject.y /*+ _t.worksheet.getCellTop(0, 3)*/ - _t.worksheet.getCellTop(_t.from.row, 3);
var _left = _t.getRealLeftOffset();
var _top = _t.getRealTopOffset();
var foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.graphicObject.extX)), true); ctx.globalAlpha = 0.2;
while (foundCol == null) { ctx.fill();
_t.worksheet.expandColsOnScroll(true); ctx.beginPath();
_t.worksheet._trigger("reinitializeScrollX"); ctx.globalAlpha = 1.0;
foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.graphicObject.extX)), true); }
}
_t.to.col = foundCol.col;
_t.to.colOff = pxToMm(_left + mmToPx(_t.graphicObject.extX) - _t.worksheet.getCellLeft(_t.to.col, 0));
var foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.graphicObject.extY)), true); return true;
while (foundRow == null) { };
_t.worksheet.expandRowsOnScroll(true);
_t.worksheet._trigger("reinitializeScrollY");
foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.graphicObject.extY)), true);
}
_t.to.row = foundRow.row;
_t.to.rowOff = pxToMm(_top + mmToPx(_t.graphicObject.extY) - _t.worksheet.getCellTop(_t.to.row, 0));
}
}
// Проверяет выход за границы
_t.canDraw = function() {
var result = true;
if (!_t.image.src || _this.changeZoom = function(factor) {
(_t.worksheet.getCellLeft(_t.worksheet.getFirstVisibleCol(), 0) > _t.worksheet.getCellLeft(_t.to.col, 0) + mmToPx(_t.to.colOff)) || }
(_t.worksheet.getCellTop(_t.worksheet.getFirstVisibleRow(), 0) > _t.worksheet.getCellTop(_t.to.row, 0) + mmToPx(_t.to.rowOff)))
{ result = false; } _this.getWorkbook = function() {
return (worksheet ? worksheet.model.workbook : null);
}
_this.getCanvasContext = function() {
return _this.drawingDocument.CanvasHitContext;
}
_this.getDrawingObjects = function() {
return aObjects;
}
_this.getWorksheet = function() {
return worksheet;
}
return result; _this.initGlobalDrawingPointer = function() {
} DrawingObject = DrawingBase;
DrawingObjectLayer = DrawingLayer;
}
_t.canResize = function(width, height) { _this._uploadMessage = function(event) {
var result = true; if ( null != event && null != event.data ) {
if (_t.flags.currentCursor != "move") { var data = JSON.parse(event.data);
if (_t.isChart()) { if ( null != data && null != data.type )
if (width == minChartWidth) { {
switch (_t.flags.currentCursor) { if ( PostMessageType.UploadImage == data.type ) {
case "w-resize": case "e-resize": case "ne-resize": if(c_oAscServerError.NoError == data.error) {
case "nw-resize": case "se-resize": case "sw-resize": var sheetId = null;
result = false; if(null != data.input)
} sheetId = data.input.sheetId;
} var url = data.url;
else if (height == minChartHeight) {
switch (_t.flags.currentCursor) { if (sheetId == worksheet.model.getId())
case "n-resize": case "s-resize": case "ne-resize": _this.addImageDrawingObject(url, false, null);
case "nw-resize": case "se-resize": case "sw-resize": else
result = false; worksheet.model.workbook.handlers.trigger("asc_onEndAction", c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.LoadImage);
}
}
}
else { // Image
if (width == minImageWidth) {
switch (_t.flags.currentCursor) {
case "w-resize": case "e-resize": case "ne-resize":
case "nw-resize": case "se-resize": case "sw-resize":
result = false;
}
} }
else if (height == minImageHeight) { else {
switch (_t.flags.currentCursor) { worksheet.model.workbook.handlers.trigger("asc_onError", _mapAscServerErrorToAscError(data.error), c_oAscError.Level.NoCritical);
case "n-resize": case "s-resize": case "ne-resize": worksheet.model.workbook.handlers.trigger("asc_onEndAction", c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.LoadImage);
case "nw-resize": case "se-resize": case "sw-resize":
result = false;
}
} }
} }
} }
return result;
} }
}
_t.updateAnchorPosition = function() { _this.clearDrawingObjects = function() {
worksheet._clean();
switch (_t.Type) { worksheet._drawCorner();
case c_oAscCellAnchorType.cellanchorOneCell: worksheet._drawColumnHeaders();
{ worksheet._drawRowHeaders();
var _left = _t.getRealLeftOffset(); worksheet._drawGrid();
var _top = _t.getRealTopOffset(); worksheet._drawCells();
worksheet._drawCellsBorders();
var foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.ext.cx)), true); worksheet.cellCommentator.drawCommentCells(false);
while (foundCol == null) { worksheet.autoFilters.drawAutoF(worksheet);
_t.worksheet.expandColsOnScroll(true); }
_t.worksheet._trigger("reinitializeScrollX");
foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.ext.cx)), true);
}
_t.to.col = foundCol.col;
_t.to.colOff = pxToMm(_left + mmToPx(_t.ext.cx) - _t.worksheet.getCellLeft(_t.to.col, 0));
var foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.ext.cy)), true);
while (foundRow == null) {
_t.worksheet.expandRowsOnScroll(true);
_t.worksheet._trigger("reinitializeScrollY");
foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.ext.cy)), true);
}
_t.to.row = foundRow.row;
_t.to.rowOff = pxToMm(_top + mmToPx(_t.ext.cy) - _t.worksheet.getCellTop(_t.to.row, 0));
}
break;
case c_oAscCellAnchorType.cellanchorAbsolute:
{
if ( _t.Pos.X < 0 )
_t.Pos.X = 0;
if ( _t.Pos.Y < 0 )
_t.Pos.Y = 0;
_t.from.col = _t.worksheet._findColUnderCursor(pxToPt(mmToPx(_t.Pos.X) + _t.worksheet.getCellLeft(0, 0)), true).col;
_t.from.colOff = pxToMm(mmToPx(_t.Pos.X) + _t.worksheet.getCellLeft(0, 0) - _t.worksheet.getCellLeft(_t.from.col, 0));
_t.from.row = _t.worksheet._findRowUnderCursor(pxToPt(mmToPx(_t.Pos.Y) + _t.worksheet.getCellTop(0, 0)), true).row;
_t.from.rowOff = pxToMm(mmToPx(_t.Pos.Y) + _t.worksheet.getCellTop(0, 0) - _t.worksheet.getCellTop(_t.from.row, 0));
var _left = _t.getRealLeftOffset();
var _top = _t.getRealTopOffset();
var foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.ext.cx)), true);
while (foundCol == null) {
_t.worksheet.expandColsOnScroll(true);
_t.worksheet._trigger("reinitializeScrollX");
foundCol = _t.worksheet._findColUnderCursor(pxToPt(_left + mmToPx(_t.ext.cx)), true);
}
_t.to.col = foundCol.col;
_t.to.colOff = pxToMm(_left + mmToPx(_t.ext.cx) - _t.worksheet.getCellLeft(_t.to.col, 0));
var foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.ext.cy)), true);
while (foundRow == null) {
_t.worksheet.expandRowsOnScroll(true);
_t.worksheet._trigger("reinitializeScrollY");
foundRow = _t.worksheet._findRowUnderCursor(pxToPt(_top + mmToPx(_t.ext.cy)), true);
}
_t.to.row = foundRow.row;
_t.to.rowOff = pxToMm(_top + mmToPx(_t.ext.cy) - _t.worksheet.getCellTop(_t.to.row, 0));
}
break;
}
_t.flags.anchorUpdated = true;
}
_t.normalizeMetrics = function() { _this.raiseLayerDrawingObjects = function(bSelect) {
var width = _t.getWidthFromTo();
var height = _t.getHeightFromTo();
if ( width < 2 )
_t.to.colOff = _t.from.colOff + 4;
if ( height < 2 )
_t.to.rowOff = _t.from.rowOff + 4;
}
// Реальное смещение по высоте // слой c объектами должен быть выше селекта
_t.getRealTopOffset = function() { var range = worksheet.getSelectedRange().bbox;
var val = _t.worksheet.getCellTop(_t.from.row, 0) + mmToPx(_t.from.rowOff); for (var i = 0; i < _this.countDrawingObjects(); i++) {
return window["Asc"].round(val);
var obj = aObjects[i];
/*var width = obj.getVisibleWidth();
var height = obj.getVisibleHeight();
if ( (width > 0) && (height > 0) ) {
overlayCtx.clearRect(pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)),
pxToPt(obj.getVisibleWidth()), pxToPt(obj.getVisibleHeight()));
if ( bSelect ) {
if (obj.flags.selected)
_this.selectDrawingObject(i);
if (obj.flags.lockState != c_oAscObjectLockState.No)
_this.selectLockedDrawingObject(obj.id, obj.flags.lockState);
}
}*/
/*if ( (range.c1 >= obj.from.col) && (range.c1 <= obj.to.col) && (range.r1 >= obj.from.row) && (range.r1 <= obj.to.row) ) {
obj.graphicObject.draw(shapeCtx);
}*/
} }
}
// Реальное смещение по ширине _this.countDrawingObjects = function() {
_t.getRealLeftOffset = function() { return aObjects ? aObjects.length : 0;
var val = _t.worksheet.getCellLeft(_t.from.col, 0) + mmToPx(_t.from.colOff); }
return window["Asc"].round(val);
}
// Ширина по координатам _this.checkDrawingObjectIndex = function(index) {
_t.getWidthFromTo = function(withoutRound) { if (_this.countDrawingObjects() && (index >= 0) && (index < _this.countDrawingObjects()))
var val = _t.worksheet.getCellLeft(_t.to.col, 0) + mmToPx(_t.to.colOff) - _t.worksheet.getCellLeft(_t.from.col, 0) - mmToPx(_t.from.colOff); return true;
return withoutRound ? val : window["Asc"].round(val); else
} return false;
}
// Высота по координатам //-----------------------------------------------------------------------------------
_t.getHeightFromTo = function(withoutRound) { // Optimization of drawing
var val = _t.worksheet.getCellTop(_t.to.row, 0) + mmToPx(_t.to.rowOff) - _t.worksheet.getCellTop(_t.from.row, 0) - mmToPx(_t.from.rowOff); //-----------------------------------------------------------------------------------
return withoutRound ? val : window["Asc"].round(val);
}
// Видимая ширина при скролах _this.needDrawingObjects = function() {
_t.getVisibleWidth = function() { var result = false;
var fvc = _t.worksheet.getCellLeft(_t.worksheet.getFirstVisibleCol(), 0); var fvr = worksheet.getFirstVisibleRow();
var off = _t.getRealLeftOffset() - fvc; var fvc = worksheet.getFirstVisibleCol();
off = (off >= 0) ? 0 : Math.abs(off); for (var i = 0; i < _this.countDrawingObjects(); i++) {
return _t.getWidthFromTo() - off; if ((fvr < aObjects[i].to.row + 1) && (fvc < aObjects[i].to.col + 1)) {
result = true;
break;
}
} }
return result;
}
// Видимая высота при скролах _this.showOverlayDrawingObject = function(index) {
_t.getVisibleHeight = function() { if (_this.checkDrawingObjectIndex(index)) {
var fvr = _t.worksheet.getCellTop(_t.worksheet.getFirstVisibleRow(), 0); var obj = aObjects[index];
var off = _t.getRealTopOffset() - fvr; if ( !obj.image.complete ) // complete - дополнительная проверка в случае base64
off = (off >= 0) ? 0 : Math.abs(off); return;
return _t.getHeightFromTo() - off;
}
// Видимое смещение объекта от первой видимой строки if (obj.image.width && obj.image.height) {
_t.getVisibleTopOffset = function(withHeader) { var sWidth = obj.image.width - obj.getInnerOffsetLeft();
var headerRowOff = _t.worksheet.getCellTop(0, 0); var sHeight = obj.image.height - obj.getInnerOffsetTop();
var fvr = _t.worksheet.getCellTop(_t.worksheet.getFirstVisibleRow(), 0);
var off = _t.getRealTopOffset() - fvr;
var off = (off > 0) ? off : 0;
return withHeader ? headerRowOff + off : off;
}
// Видимое смещение объекта от первой видимой колонки // Проверка для IE
_t.getVisibleLeftOffset = function(withHeader) { var dWidth = obj.getVisibleWidth();
var headerColOff = _t.worksheet.getCellLeft(0, 0); var dHeight = obj.getVisibleHeight();
var fvc = _t.worksheet.getCellLeft(_t.worksheet.getFirstVisibleCol(), 0); if ((dWidth <= 0) || (dHeight <= 0))
var off = _t.getRealLeftOffset() - fvc; return;
var off = (off > 0) ? off : 0;
return withHeader ? headerColOff + off : off;
}
// смещение по высоте внутри объекта overlayCtx.drawImage(obj.image,
_t.getInnerOffsetTop = function() { // обрезаем
var fvr = _t.worksheet.getCellTop(_t.worksheet.getFirstVisibleRow(), 0); pxToPt(obj.getInnerOffsetLeft()), pxToPt(obj.getInnerOffsetTop()),
var off = _t.getRealTopOffset() - fvr; pxToPt(sWidth), pxToPt(sHeight),
return (off > 0) ? 0 : window["Asc"].round(Math.abs(off) * _t.getHeightCoeff()); // вставляем
pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)),
pxToPt(dWidth), pxToPt(dHeight));
}
} }
}
// смещение по ширине внутри объекта _this.showDrawingObjects = function(clearCanvas, printOptions, bUpdateCharts) {
_t.getInnerOffsetLeft = function() {
var fvc = _t.worksheet.getCellLeft(_t.worksheet.getFirstVisibleCol(), 0);
var off = _t.getRealLeftOffset() - fvc;
return (off > 0) ? 0 : window["Asc"].round(Math.abs(off) * _t.getWidthCoeff());
}
// коэффициент по ширине если несоответствие с реальным размером /*********** Print Options ***************
_t.getWidthCoeff = function() { printOptions : {
return _t.image.width / _t.getWidthFromTo(); ctx,
margin : {
left: 0, // pt
right: 0, // pt
top: 0, // pt
button: 0 // pt
} }
// коэффициент по высоте если несоответствие с реальным размером
_t.getHeightCoeff = function() {
return _t.image.height / _t.getHeightFromTo();
} }
*****************************************/
if ( g_oTableId )
g_oTableId.Add( _t, _t.id );
}
DrawingBase.prototype = {
getObjectType: function() { if (!_this.countDrawingObjects())
return CLASS_TYPE_DRAWING_BASE; return;
},
getType: function() {
return UndoRedoDataTypes.DrawingObjectData;
},
getProperties: function() { worksheet.model.Drawings = aObjects;
return this.Properties;
},
getProperty: function(nType) { if (drawingCtx && _this.needDrawingObjects()) {
switch (nType) {
case this.Properties.Id: return this.id; break;
case this.Properties.Type: return this.Type; break;
case this.Properties.PosX: return this.Pos.X; break;
case this.Properties.PosY: return this.Pos.Y; break;
case this.Properties.ExtCx: return this.ext.cx; break;
case this.Properties.ExtCy: return this.ext.cy; break;
case this.Properties.ImageSrc: return this.image.src; break; // всё чистим
if (clearCanvas) {
_this.clearDrawingObjects();
}
if ( !imageLoader.isReady() ) {
//console.log("imageLoader - False");
imageLoader.setReadyCallback(_this.showDrawingObjects);
}
else {
//console.log("imageLoader - Ok");
imageLoader.removeReadyCallback();
}
case this.Properties.FlagCurrentCursor: return this.flags.currentCursor; break; for (var i = 0; i < _this.countDrawingObjects(); i++) {
case this.Properties.FlagsTransactionState: return this.flags.transactionState; break;
case this.Properties.ImageUrl: return this.imageUrl; break; var index = i;
var obj = aObjects[i];
// Shape render
if ( obj.isGraphicObject() ) {
obj.graphicObject.draw(shapeCtx);
continue;
}
obj.normalizeMetrics();
obj.size.coeff = obj.getHeightFromTo(true) / obj.getWidthFromTo(true);
case this.Properties.FromCol: return this.from.col; break; if (!obj.flags.anchorUpdated)
case this.Properties.FromColOff: return this.from.colOff; break; obj.updateAnchorPosition();
case this.Properties.FromRow: return this.from.row; break;
case this.Properties.FromRowOff: return this.from.rowOff; break;
case this.Properties.ToCol: return this.to.col; break; // History
case this.Properties.ToColOff: return this.to.colOff; break; if (obj.move.inAction && undoRedoObject && (undoRedoObject.id == obj.id)) {
case this.Properties.ToRow: return this.to.row; break;
case this.Properties.ToRowOff: return this.to.rowOff; break;
case this.Properties.MoveX: return this.move.x; break; History.Create_NewPoint();
case this.Properties.MoveY: return this.move.y; break; History.StartTransaction();
case this.Properties.SizeCoeff: return this.size.coeff; break; undoRedoObject.flags.transactionState = c_oAscTransactionState.Start;
case this.Properties.ChartData: return this.chart; break; History.Add(g_oUndoRedoDrawingObject, historyitem_DrawingObject_Edit, worksheet.model.getId(), null, undoRedoObject);
case this.Properties.GraphicObject: return this.graphicObject; break; undoRedoObject = null;
}
},
setProperty: function(nType, value) { History.Create_NewPoint();
switch (nType) { var urObj = _this.cloneDrawingObject(obj);
case this.Properties.Id: this.id = value; break; urObj.flags.transactionState = c_oAscTransactionState.Stop;
case this.Properties.Type: this.Type = value; break; History.Add(g_oUndoRedoDrawingObject, historyitem_DrawingObject_Edit, worksheet.model.getId(), null, urObj);
case this.Properties.PosX: this.Pos.X = value; break;
case this.Properties.PosY: this.Pos.Y = value; break; History.EndTransaction();
case this.Properties.ExtCx: this.ext.cx = value; break; }
case this.Properties.ExtCy: this.ext.cy = value; break;
var srcForPrint;
// Выход за границы
while (worksheet.nColsCount < obj.to.col + 1) {
worksheet.expandColsOnScroll(true);
}
while (worksheet.nRowsCount < obj.to.row + 1) {
worksheet.expandRowsOnScroll(true);
}
case this.Properties.ImageSrc: this.image.src = value; break; if ( obj.isChart() && (obj.flags.redrawChart || bUpdateCharts) ) {
if ( !obj.chart.range.intervalObject )
_this.intervalToIntervalObject(obj.chart);
obj.chart.rebuildSeries();
obj.chart.worksheet = worksheet;
var chartBase64 = chartRender.insertChart(obj.chart, null, obj.getWidthFromTo(), obj.getHeightFromTo());
if ( !chartBase64 )
continue;
imageLoader.addImage(chartBase64);
imageLoader.setReadyCallback(_this.showDrawingObjects);
case this.Properties.FlagCurrentCursor: this.flags.currentCursor = value; break; obj.image.onload = function() {
case this.Properties.FlagsTransactionState: this.flags.transactionState = value; break; obj.flags.currentCursor = null;
}
obj.image.src = chartBase64;
obj.flags.redrawChart = false;
continue;
}
case this.Properties.ImageUrl: this.imageUrl = value; break; if ( !obj.canDraw() )
continue;
case this.Properties.FromCol: this.from.col = value; break; var sWidth = obj.image.width - obj.getInnerOffsetLeft();
case this.Properties.FromColOff: this.from.colOff = value; break; var sHeight = obj.image.height - obj.getInnerOffsetTop();
case this.Properties.FromRow: this.from.row = value; break;
case this.Properties.FromRowOff: this.from.rowOff = value; break;
case this.Properties.ToCol: this.to.col = value; break; if ( printOptions ) {
case this.Properties.ToColOff: this.to.colOff = value; break; if ( obj.isChart() ) {
case this.Properties.ToRow: this.to.row = value; break; srcForPrint = obj.image.src; // base64
case this.Properties.ToRowOff: this.to.rowOff = value; break; }
else {
srcForPrint = obj.imageUrl;
}
case this.Properties.MoveX: this.move.x = value; break; var marginRight = 0;
case this.Properties.MoveY: this.move.y = value; break; if (worksheet.getCellLeft(worksheet.getLastVisibleCol(), 0) + worksheet.getColumnWidth(worksheet.getLastVisibleCol()) < obj.getRealLeftOffset() + obj.getVisibleWidth())
marginRight = printOptions.margin.right;
case this.Properties.SizeCoeff: this.size.coeff = value; break; printOptions.ctx.drawImage(srcForPrint,
case this.Properties.ChartData: this.chart = value; break; // обрезаем
case this.Properties.GraphicObject: this.graphicObject = value; break; pxToPt(obj.getInnerOffsetLeft()), pxToPt(obj.getInnerOffsetTop()),
} pxToPt(sWidth) - marginRight, pxToPt(sHeight),
} // вставляем
} pxToPt(obj.getVisibleLeftOffset(true)) + printOptions.margin.left, pxToPt(obj.getVisibleTopOffset(true)) + printOptions.margin.top,
pxToPt(obj.getVisibleWidth()), pxToPt(obj.getVisibleHeight()),
//----------------------------------------------------------------------------------- pxToPt(obj.image.width), pxToPt(obj.image.height));
// Create drawing layer }
//----------------------------------------------------------------------------------- else {
if ( !obj.image.width || !obj.image.height )
var DrawingLayer = function() { continue;
this.Properties = {
aLayerBefore: 1,
aLayerAfter: 2
}
this.aLayerBefore = [];
this.aLayerAfter = [];
}
DrawingLayer.prototype = { // Проверка для IE
var dWidth = obj.getVisibleWidth();
getType: function() { var dHeight = obj.getVisibleHeight();
return UndoRedoDataTypes.DrawingObjectLayer; if ( (dWidth <= 0) || (dHeight <= 0) )
}, continue;
getProperties: function() { drawingCtx.drawImage(obj.image,
return this.Properties; // обрезаем
}, pxToPt(obj.getInnerOffsetLeft()), pxToPt(obj.getInnerOffsetTop()),
pxToPt(sWidth), pxToPt(sHeight),
// вставляем
pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)),
pxToPt(dWidth), pxToPt(dHeight));
}
getProperty: function(nType) { if ( obj.flags.selected && !printOptions )
switch (nType) { _this.selectDrawingObject(index);
case this.Properties.aLayerBefore: return this.aLayerBefore; break; if ( obj.flags.lockState != c_oAscObjectLockState.No )
case this.Properties.aLayerAfter: return this.aLayerAfter; break; _this.selectLockedDrawingObject(obj.id, obj.flags.lockState);
obj.move.inAction = false;
} }
}, }
if ( !printOptions ) {
worksheet._drawCollaborativeElements();
setProperty: function(nType, value) { if ( _this.getSelectedDrawingObjectIndex() < 0 ) {
switch (nType) { worksheet.cleanSelection();
case this.Properties.aLayerBefore: this.aLayerBefore = value; break; worksheet._drawSelectionRange();
case this.Properties.aLayerAfter: this.aLayerAfter = value; break; _this.raiseLayerDrawingObjects(true);
} }
} }
} }
_this.showOverlayGraphicObjects = function() {
shapeOverlayCtx.put_GlobalAlpha(true, 0.5);
shapeOverlayCtx.m_oContext.clearRect(0, 0, shapeOverlayCtx.m_lWidthPix, shapeOverlayCtx.m_lHeightPix);
_this.controller.drawTracks(shapeOverlayCtx);
shapeOverlayCtx.put_GlobalAlpha(true, 1);
}
//----------------------------------------------------------------------------------- _this.showOverlayDrawingObjects = function() {
// Constructor
//-----------------------------------------------------------------------------------
_this.createDrawingObject = function() {
var drawing = new DrawingBase(worksheet);
drawing.chart.range.interval = function() {
var result = "";
if (worksheet) {
var selectedRange = worksheet.getSelectedRange();
if (selectedRange) {
var box = selectedRange.getBBox0();
var startCell = new CellAddress(box.r1, box.c1, 0);
var endCell = new CellAddress(box.r2, box.c2, 0);
if (startCell && endCell) { if (overlayCtx) {
var wsName = worksheet.model.sName;
if ( !rx_test_ws_name.test(wsName) )
wsName = "'" + wsName + "'";
if (startCell.getID() == endCell.getID())
result = wsName + "!" + startCell.getID();
else
result = wsName + "!" + startCell.getID() + ":" + endCell.getID();
}
}
}
return result;
}();
drawing.chart.range.intervalObject = function() { overlayCtx.clear();
return worksheet ? worksheet.getSelectedRange() : null; var index = _this.getSelectedDrawingObjectIndex();
}(); var obj = aObjects[index];
if (!obj.flags.currentCursor)
return drawing; return;
}
_this.cloneDrawingObject = function(obj) { // выход за границы
if (!obj.canDraw())
return;
var copyObject = _this.createDrawingObject(); var sWidth = obj.image.width - obj.getInnerOffsetLeft();
var sHeight = obj.image.height - obj.getInnerOffsetTop();
copyObject.worksheet = obj.worksheet;
copyObject.id = obj.id; setCanvasZIndex(overlayCtx.ctx, 0.5);
copyObject.Type = obj.Type; if (obj.isImage()) {
copyObject.Pos.X = obj.Pos.X;
copyObject.Pos.Y = obj.Pos.Y;
copyObject.ext.cx = obj.ext.cx;
copyObject.ext.cy = obj.ext.cy;
var img = new Image(); // Проверка для IE
img.src = obj.image.src; var dWidth = obj.getVisibleWidth();
copyObject.image = img; var dHeight = obj.getVisibleHeight();
if ((dWidth <= 0) || (dHeight <= 0))
return;
copyObject.flags.currentCursor = obj.flags.currentCursor; overlayCtx.drawImage(obj.image,
copyObject.flags.transactionState = obj.flags.transactionState; /* обрезаем */pxToPt(obj.getInnerOffsetLeft()), pxToPt(obj.getInnerOffsetTop()),
copyObject.flags.redrawChart = obj.flags.redrawChart; pxToPt(sWidth), pxToPt(sHeight),
copyObject.imageUrl = obj.imageUrl; /* вставляем */pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)),
pxToPt(dWidth), pxToPt(dHeight));
}
else {
overlayCtx.beginPath();
overlayCtx.rect(pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)), pxToPt(obj.getVisibleWidth()), pxToPt(obj.getVisibleHeight()));
overlayCtx.setLineWidth(1);
overlayCtx.setStrokeStyle("#000000");
overlayCtx.setFillStyle("#ffffff");
overlayCtx.fillRect(pxToPt(obj.getVisibleLeftOffset(true)), pxToPt(obj.getVisibleTopOffset(true)), pxToPt(obj.getVisibleWidth()), pxToPt(obj.getVisibleHeight()));
overlayCtx.stroke();
}
}
}
copyObject.from.col = obj.from.col; _this.getDrawingAreaMetrics = function() {
copyObject.from.colOff = obj.from.colOff;
copyObject.from.row = obj.from.row;
copyObject.from.rowOff = obj.from.rowOff;
copyObject.to.col = obj.to.col; /*
copyObject.to.colOff = obj.to.colOff; * Объект, определяющий max колонку и строчку для отрисовки объектов листа
copyObject.to.row = obj.to.row; */
copyObject.to.rowOff = obj.to.rowOff;
copyObject.move.x = obj.move.x; var metrics = {
copyObject.move.y = obj.move.y; maxCol: 0,
copyObject.size.coeff = obj.size.coeff; maxRow: 0
}
copyObject.chart = new asc_CChart(obj.chart);
copyObject.graphicObject = obj.graphicObject;
copyObject.chart.worksheet = obj.chart.worksheet;
return copyObject; for (var i = 0; i < _this.countDrawingObjects(); i++) {
if (aObjects[i].to.col >= metrics.maxCol)
metrics.maxCol = aObjects[i].to.col + 1; // учитываем colOff
if (aObjects[i].to.row >= metrics.maxRow)
metrics.maxRow = aObjects[i].to.row + 1; // учитываем rowOff
}
return metrics;
} }
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
...@@ -4276,6 +4283,11 @@ function DrawingObjects() { ...@@ -4276,6 +4283,11 @@ function DrawingObjects() {
var obj = aObjects[index]; var obj = aObjects[index];
if (!obj.canDraw()) if (!obj.canDraw())
return bResult; return bResult;
if ( obj.isGraphicObject() ) {
_this.selectGraphicObject();
return;
}
if ( !lockState ) { if ( !lockState ) {
obj.flags.selected = true; obj.flags.selected = true;
...@@ -4665,7 +4677,7 @@ function DrawingObjects() { ...@@ -4665,7 +4677,7 @@ function DrawingObjects() {
_this.getSelectedDrawingObjectIndex = function() { _this.getSelectedDrawingObjectIndex = function() {
for (var i = 0; i < _this.countDrawingObjects(); i++) { for (var i = 0; i < _this.countDrawingObjects(); i++) {
if (aObjects[i].flags.selected == true) if (aObjects[i].flags.selected || (aObjects[i].graphicObject && aObjects[i].graphicObject.selected) )
return i; return i;
} }
return -1; return -1;
...@@ -4782,7 +4794,7 @@ function DrawingObjects() { ...@@ -4782,7 +4794,7 @@ function DrawingObjects() {
_this.getSelectedDrawingObjectId = function() { _this.getSelectedDrawingObjectId = function() {
for (var i = 0; i < _this.countDrawingObjects(); i++) { for (var i = 0; i < _this.countDrawingObjects(); i++) {
if (aObjects[i].flags.selected == true) if (aObjects[i].flags.selected || (aObjects[i].graphicObject && aObjects[i].graphicObject.selected) )
return aObjects[i].id; return aObjects[i].id;
} }
return null; return null;
......
...@@ -1088,6 +1088,11 @@ ...@@ -1088,6 +1088,11 @@
t.handlers.trigger("graphicObjectMouseDown", event, coord.x, coord.y); t.handlers.trigger("graphicObjectMouseDown", event, coord.x, coord.y);
if ( t.isCellEditMode ) if ( t.isCellEditMode )
t.handlers.trigger("stopCellEditing"); t.handlers.trigger("stopCellEditing");
if (2 === event.button)
t.handlers.trigger("changeSelectionRightClick", coord.x, coord.y);
else
t.handlers.trigger("changeSelection", /*isStartPoint*/true, coord.x, coord.y, /*isCoord*/true, /*isSelectMode*/true);
return; return;
} }
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment