Commit d188c2ba authored by Igor.Zotov's avatar Igor.Zotov Committed by Alexander.Trofimov

перенос элементов легенды, если она не убирается по ширине(при её расположении сверху и снизу)

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@50034 954022d7-b5bf-4e40-9824-e11837661b57
parent a9b36be6
......@@ -715,27 +715,55 @@ function calcAllMargin(isFormatCell,isformatCellScOy,minX,maxX,minY,maxY, chart)
if(!chart.margins.key || (chart.margins.key && (!chart.margins.key.h && !chart.margins.key.w)))
{
var widthText;
var widthLine = 28;
//+ высота легенды
if(bar._otherProps._key_halign == 'top' || bar._otherProps._key_halign == 'bottom')
{
var font = getFontProperties("key");
var props = getMaxPropertiesText(context,font,bar._otherProps._key);
//длинные подписи, или их большое количество разделяем на несколько строк
var maxWidthOneLineKey = 0.9*chartCanvas.width;
var widthRow = 0;
var level = 0;
var levelKey = [];
var n = 0;
for(var i = 0; i < bar._otherProps._key.length; i++)
{
widthText = getMaxPropertiesText(context,font,bar._otherProps._key[i]).width/scale;
widthRow += widthText + 2 + widthLine;
if(!levelKey[level])
levelKey[level] = [];
if(widthRow > maxWidthOneLineKey)
{
level++;
widthRow = 0;
n = 0;
i--;
}
else
{
levelKey[level][n] = bar._otherProps._key[i];
n++;
}
}
bar._otherProps._key_levels = levelKey;
bar._otherProps._key_width = maxWidthOneLineKey;
var heigthTextKey = (context.getHeightText()/0.75);
var kF = 1;
if(bar.type == 'pie')
kF = 2;
if(bar._otherProps._key_halign == 'top')
top += (heigthTextKey + 7)*kF;
top += (heigthTextKey*kF)*(level + 1) + 7;
else
bottom += (heigthTextKey + 7)*kF;
bottom += (heigthTextKey*kF)*(level + 1) + 7;
}
//+ ширина легенды
if (bar._otherProps._key_halign == 'left' || bar._otherProps._key_halign == 'right')
{
var widthLine = 28;
//находим ширину текста легенды(то есть её максимального элемента), в дальнейшем будем возвращать ширину автофигуры
var font = getFontProperties("key");
var widthText = getMaxPropertiesText(context,font,bar._otherProps._key);
widthText = getMaxPropertiesText(context,font,bar._otherProps._key);
var widthKey = widthText.width/scale + 2 + widthLine;
//в MSExcel справа от легенды всегда остаётся такой маргин
//TODO - легенду нужно сделать как автофигуру
......@@ -1609,7 +1637,14 @@ function drawChart(chart, arrValues, width, height, options) {
bar._chartTitle._vpos = 32;
bar._chartTitle._hpos = 0.5;
}
if(chart.header.title != "")
{
bar._chartTitle._visibleTitle = chart.header.title;
if(chart.margins.title.h)
bar._chartTitle._marginTopTitle = chart.margins.title.h;
}
if (chart.xAxis.title && !chart.margins) {
var legendTop = 0;
var widthXtitle = bar.context.measureText(chart.xAxis.title).width;
......@@ -2398,10 +2433,17 @@ function calculatePosiitionObjects(type)
var font = getFontProperties("key");
var props = getMaxPropertiesText(context,font,bar._otherProps._key);
var heigthTextKey = (context.getHeightText()/0.75)*scale;
if(typeof(bar._chartTitle._text) == 'string' && bar._chartTitle._text != '')
if(bar._chartTitle._marginTopTitle)
{
return 7*scale + heigthTextKey + bar._chartTitle._marginTopTitle;
}
else if(typeof(bar._chartTitle._text) == 'string' && bar._chartTitle._text != '' || bar._chartTitle._visibleTitle != "")
{
var font = getFontProperties("title");
var axisTitleProp = getMaxPropertiesText(context,font, bar._chartTitle._text);
var text = bar._chartTitle._text;
if(bar._chartTitle._visibleTitle != "")
text = bar._chartTitle._visibleTitle;
var axisTitleProp = getMaxPropertiesText(context,font, text);
var hpos = (bar.canvas.width)/2 - axisTitleProp.width/2;
var heigthText = (context.getHeightText()/0.75)*scale;
return 7*scale + heigthTextKey + 7*scale + heigthText;
......
......@@ -265,48 +265,111 @@
if(obj._otherProps._key_halign == 'bottom' || obj._otherProps._key_halign == 'top')
{
for (var i=0; i<key.length; i++) {
// Draw the blob of color
var leftDiff = 0;
for(var n = 0 ; n < i; n++)
var levels;
if(obj._otherProps._key_levels)
levels = obj._otherProps._key_levels;
var gVpos = vpos;
// ,
if(levels && levels.length)
{
var widthCurKey = 0;
for(var i = 0; i < levels[0].length; i++)
{
leftDiff += widthEveryElemKey[n];
widthCurKey += widthEveryElemKey[i];
}
hpos = (canvas.width - widthCurKey)/2;
var startLevelNum = 0;
var elemeNum = 0;;
for (var i = 0; i < levels.length; i++) {
startLevelNum = elemeNum;
for(var j = 0; j < levels[i].length; j++)
{
// Draw the blob of color
var leftDiff = 0;
for(var n = startLevelNum ; n < elemeNum; n++)
{
leftDiff += widthEveryElemKey[n];
}
if(obj._otherProps._key_halign == 'top')
vpos = gVpos + props.height*(i);
else
vpos = gVpos - props.height*(levels.length - i - 1);
if (obj._otherProps._key_color_shape == 'line') {
context.beginPath();
context.strokeStyle = colors[elemeNum];
context.lineWidth = '2.7'
context.moveTo(hpos + leftDiff + 2*scale,vpos - props.height/2);
context.lineTo(hpos + leftDiff + sizeLine + 2*scale, vpos - props.height/2);
context.stroke();
} else {
context.fillStyle = colors[elemeNum];
context.fillRect(hpos + leftDiff + 2*scale, vpos - 7*scale, 7*scale, 7*scale);
}
context.beginPath();
context.fillStyle = 'black';
OfficeExcel.Text(context,
text_font,
text_size,
hpos + leftDiff + sizeLine + 3*scale,
vpos,
levels[i][j]);
elemeNum++;
}
}
}
else
{
for (var i=0; i<key.length; i++) {
// Draw the blob of color
var leftDiff = 0;
for(var n = 0 ; n < i; n++)
{
leftDiff += widthEveryElemKey[n];
}
if (obj._otherProps._key_color_shape == 'circle') {
context.beginPath();
context.strokeStyle = 'rgba(0,0,0,0)';
context.fillStyle = colors[i];
context.arc(hpos + 5 + (blob_size / 2), vpos + (5 * j) + (text_size * j) - text_size + (blob_size / 2), blob_size / 2, 0, 6.26, 0);
context.fill();
} else if (obj._otherProps._key_color_shape == 'line') {
context.beginPath();
context.strokeStyle = colors[i];
context.lineWidth = '2.7'
context.moveTo(hpos + leftDiff + 2*scale,vpos - props.height/2);
context.lineTo(hpos + leftDiff + sizeLine + 2*scale, vpos - props.height/2);
context.stroke();
} else {
context.fillStyle = colors[i];
context.fillRect(hpos + leftDiff + 2*scale, vpos - 7*scale, 7*scale, 7*scale);
//context.fillRect(hpos, vpos + (10 * j) + (text_size * j) - text_size, 22, obj._otherProps._linewidth);
}
context.beginPath();
if (obj._otherProps._key_color_shape == 'circle') {
context.beginPath();
context.strokeStyle = 'rgba(0,0,0,0)';
context.fillStyle = colors[i];
context.arc(hpos + 5 + (blob_size / 2), vpos + (5 * j) + (text_size * j) - text_size + (blob_size / 2), blob_size / 2, 0, 6.26, 0);
context.fill();
} else if (obj._otherProps._key_color_shape == 'line') {
context.beginPath();
context.strokeStyle = colors[i];
context.lineWidth = '2.7'
context.moveTo(hpos + leftDiff + 2*scale,vpos - props.height/2);
context.lineTo(hpos + leftDiff + sizeLine + 2*scale, vpos - props.height/2);
context.stroke();
} else {
context.fillStyle = colors[i];
context.fillRect(hpos + leftDiff + 2*scale, vpos - 7*scale, 7*scale, 7*scale);
//context.fillRect(hpos, vpos + (10 * j) + (text_size * j) - text_size, 22, obj._otherProps._linewidth);
}
context.beginPath();
context.fillStyle = 'black';
OfficeExcel.Text(context,
text_font,
text_size,
hpos + leftDiff + sizeLine + 3*scale,
vpos,
key[i]);
}
context.fillStyle = 'black';
OfficeExcel.Text(context,
text_font,
text_size,
hpos + leftDiff + sizeLine + 3*scale,
vpos,
key[i]);
}
}
}
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