diff --git a/apps/pdfeditor/main/app/controller/DocumentHolderExt.js b/apps/pdfeditor/main/app/controller/DocumentHolderExt.js index 7f41660d27..5344aa777f 100644 --- a/apps/pdfeditor/main/app/controller/DocumentHolderExt.js +++ b/apps/pdfeditor/main/app/controller/DocumentHolderExt.js @@ -60,6 +60,7 @@ define([], function () { this.api.asc_registerCallback('asc_onMouseMoveStart', _.bind(this.onMouseMoveStart, this)); this.api.asc_registerCallback('asc_onMouseMoveEnd', _.bind(this.onMouseMoveEnd, this)); this.api.asc_registerCallback('asc_onMouseMove', _.bind(this.onMouseMove, this)); + this.api.asc_registerCallback('asc_onSingleChartSelectionChanged', _.bind(this.onSingleChartSelectionChanged, this)); if (this.mode.isEdit === true) { this.api.asc_registerCallback('asc_onHideEyedropper', _.bind(this.hideEyedropper, this)); @@ -199,7 +200,16 @@ define([], function () { view.mnuCutPage.on('click', _.bind(me.onCutCopyPaste, me)); view.mnuPastePageBefore.on('click', _.bind(me.onCutCopyPaste, me)); view.mnuPastePageAfter.on('click', _.bind(me.onCutCopyPaste, me)); - + view.menuChartElement.on('item:click', _.bind(me.onChartElement, me)); + view.menuChartElement.menu.items.forEach(item => { + if (item.menu) { + item.menu.items.forEach(item => { + item.on('click', function() { + me.onChartElement(item.menu, item); + }); + }); + } + }); view.menuImgReplace.menu.on('item:click', _.bind(me.onImgReplace, me)); } }; @@ -2609,5 +2619,479 @@ define([], function () { this.api.asc_editChartInFrameEditor(); }; + const _set = Asc.c_oAscChartTypeSettings, + chartElementMap = { + [_set.barNormal]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.barStacked]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend'], + [_set.barStackedPer]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend'], + [_set.barNormal3d]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'gridLines', 'legend'], + [_set.barStacked3d]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'gridLines', 'legend'], + [_set.barStackedPer3d]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'gridLines', 'legend'], + [_set.barNormal3dPerspective]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'gridLines', 'legend'], + [_set.lineNormal]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines', 'upDownBars'], + [_set.lineStacked]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'upDownBars'], + [_set.lineStackedPer]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines', 'upDownBars'], + [_set.lineNormalMarker]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines', 'upDownBars'], + [_set.lineStackedMarker]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'upDownBars'], + [_set.lineStackedPerMarker]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'upDownBars'], + [_set.line3d]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'gridLines', 'legend'], + [_set.pie]: ['chartTitle', 'dataLabels', 'legend'], + [_set.pie3d]: ['chartTitle', 'dataLabels', 'legend'], + [_set.hBarNormal]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.hBarStacked]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend'], + [_set.hBarStackedPer]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend'], + [_set.hBarNormal3d]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'gridLines', 'legend'], + [_set.hBarStacked3d]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'gridLines', 'legend'], + [_set.hBarStackedPer3d]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'gridLines', 'legend'], + [_set.areaNormal]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend'], + [_set.areaStacked]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend'], + [_set.areaStackedPer]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend'], + [_set.doughnut]: ['chartTitle', 'dataLabels', 'legend'], + [_set.stock]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines', 'upDownBars'], + [_set.scatter]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.scatterLine]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.scatterLineMarker]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.scatterMarker]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.scatterNone]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.scatterSmooth]: ['axes', 'axisTitles', 'chartTitle', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.scatterSmoothMarker]: ['axes', 'axisTitles', 'chartTitle', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.surfaceNormal]: ['axes', 'axisTitles', 'chartTitle', 'gridLines', 'legend'], + [_set.surfaceWireframe]: ['axes', 'axisTitles', 'chartTitle', 'gridLines', 'legend'], + [_set.contourNormal]: ['axes', 'axisTitles', 'chartTitle', 'gridLines', 'legend'], + [_set.contourWireframe]: ['axes', 'axisTitles', 'chartTitle', 'gridLines', 'legend'], + [_set.comboCustom]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.comboBarLine]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.comboBarLineSecondary]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines'], + [_set.comboAreaBar]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend'], + [_set.radar]: ['axes', 'chartTitle', 'dataLabels', 'gridLines', 'legend'], + [_set.radarMarker]: ['axes', 'chartTitle', 'dataLabels', 'gridLines', 'legend'], + [_set.radarFilled]: ['axes', 'chartTitle', 'dataLabels', 'gridLines', 'legend'], + [_set.unknown]: ['axes', 'axisTitles', 'chartTitle', 'dataLabels', 'dataTable', 'errorBars', 'gridLines', 'legend', 'trendLines', 'upDownBars'] + }; + + dh.onChartElement = function(menu, item) { + var chartProps = this.chartProps, + HorAxis = chartProps.getHorAxesProps && chartProps.getHorAxesProps()[0], + SecHorAxis = chartProps.getHorAxesProps && chartProps.getHorAxesProps()[1], + VertAxis = chartProps.getVertAxesProps && chartProps.getVertAxesProps()[0], + SecVertAxis = chartProps.getVertAxesProps && chartProps.getVertAxesProps()[1], + DepthAxis = chartProps.getDepthAxesProps && chartProps.getDepthAxesProps()[0], + HorMajorGridlines = HorAxis && (HorAxis.getGridlines() === 1 || HorAxis.getGridlines() === 3), + HorMinorGridlines = HorAxis && (HorAxis.getGridlines() === 2 || HorAxis.getGridlines() === 3), + VertMajorGridlines = VertAxis && (VertAxis.getGridlines() === 1 || VertAxis.getGridlines() === 3), + VertMinorGridlines = VertAxis && (VertAxis.getGridlines() === 2 || VertAxis.getGridlines() === 3); + + const value = item.value, + type = chartProps.getType(), + RadarChart = [_set.radar, _set.radarMarker, _set.radarFilled].includes(type), + hBarChart = [_set.hBarNormal, _set.hBarStacked, _set.hBarStackedPer, _set.hBarNormal3d, _set.hBarStacked3d, _set.hBarStackedPer3d].includes(type), + scatterChart = [_set.scatter, _set.scatterLine, _set.scatterLineMarker, _set.scatterMarker, _set.scatterNone, _set.scatterSmooth, _set.scatterSmoothMarker, _set.surfaceNormal].includes(type), + comboCustom = [_set.comboCustom].includes(type); + + switch (value) { + case 'bShowHorAxis': + if (hBarChart) { + chartProps.setDisplayAxes(VertAxis && VertAxis.getShow(), SecVertAxis && SecVertAxis.getShow(), item.checked, SecHorAxis && SecHorAxis.getShow(), DepthAxis && DepthAxis.getShow()); + } else if (scatterChart) { + chartProps.setDisplayAxes(SecVertAxis && SecVertAxis.getShow(), SecHorAxis && SecHorAxis.getShow(), item.checked, VertAxis && VertAxis.getShow(), DepthAxis && DepthAxis.getShow()); + } else if (comboCustom) { + chartProps.setDisplayAxes(item.checked, SecVertAxis && SecVertAxis.getShow(), VertAxis && VertAxis.getShow(), SecHorAxis && SecHorAxis.getShow(), DepthAxis && DepthAxis.getShow()); + } else { + chartProps.setDisplayAxes(item.checked, SecHorAxis && SecHorAxis.getShow(), VertAxis && VertAxis.getShow(), SecVertAxis && SecVertAxis.getShow(), DepthAxis && DepthAxis.getShow()); + } + break; + case 'bShowVertAxis': + if (hBarChart) { + chartProps.setDisplayAxes(item.checked, SecVertAxis && SecVertAxis.getShow(), HorAxis && HorAxis.getShow(), SecHorAxis && SecHorAxis.getShow(), DepthAxis && DepthAxis.getShow()); + } else if (scatterChart) { + chartProps.setDisplayAxes(SecVertAxis && SecVertAxis.getShow(), SecHorAxis && SecHorAxis.getShow(), HorAxis && HorAxis.getShow(), item.checked, DepthAxis && DepthAxis.getShow()); + } else if (comboCustom) { + chartProps.setDisplayAxes(HorAxis && HorAxis.getShow(), SecVertAxis && SecVertAxis.getShow(), item.checked, SecHorAxis && SecHorAxis.getShow(), DepthAxis && DepthAxis.getShow()); + } else { + chartProps.setDisplayAxes(HorAxis && HorAxis.getShow(), SecHorAxis && SecHorAxis.getShow(), item.checked, SecVertAxis && SecVertAxis.getShow(), DepthAxis && DepthAxis.getShow()); + } + break; + case 'bShowHorAxSec': + if (comboCustom) { + chartProps.setDisplayAxes(HorAxis && HorAxis.getShow(), SecVertAxis && SecVertAxis.getShow(), VertAxis && VertAxis.getShow(), item.checked, DepthAxis && DepthAxis.getShow()); + } else { + chartProps.setDisplayAxes(HorAxis && HorAxis.getShow(), item.checked, VertAxis && VertAxis.getShow(), SecVertAxis && SecVertAxis.getShow(), DepthAxis && DepthAxis.getShow()); + } + break; + case 'bShowVertAxSec': + if (comboCustom) { + chartProps.setDisplayAxes(HorAxis && HorAxis.getShow(), item.checked, VertAxis && VertAxis.getShow(), SecHorAxis && SecHorAxis.getShow(), DepthAxis && DepthAxis.getShow()); + } else { + chartProps.setDisplayAxes(HorAxis && HorAxis.getShow(), SecHorAxis && SecHorAxis.getShow(), VertAxis && VertAxis.getShow(), item.checked, DepthAxis && DepthAxis.getShow()); + } + break; + case 'bShowDepthAxes': + chartProps.setDisplayAxes(HorAxis && HorAxis.getShow(), SecHorAxis && SecHorAxis.getShow(), VertAxis && VertAxis.getShow(), SecVertAxis && SecVertAxis.getShow(), item.checked); + break; + case 'bShowHorAxTitle': + if (hBarChart) { + chartProps.setDisplayAxisTitles((VertAxis && VertAxis.getLabel() === 1), (SecVertAxis && SecVertAxis.getLabel() === 1), item.checked, (SecHorAxis && SecHorAxis.getLabel() === 1), (DepthAxis && DepthAxis.getLabel() === 1)); + } else if (scatterChart) { + chartProps.setDisplayAxisTitles((SecHorAxis && SecHorAxis.getLabel() === 1), (SecVertAxis && SecVertAxis.getLabel() === 1), item.checked, (VertAxis && VertAxis.getLabel() === 1), (DepthAxis && DepthAxis.getLabel() === 1)); + } else if (comboCustom) { + chartProps.setDisplayAxisTitles(item.checked, (SecVertAxis && SecVertAxis.getLabel() === 1), (VertAxis && VertAxis.getLabel() === 1), (SecHorAxis && SecHorAxis.getLabel() === 1), (DepthAxis && DepthAxis.getLabel() === 1)); + } else { + chartProps.setDisplayAxisTitles(item.checked, (SecHorAxis && SecHorAxis.getLabel() === 1), (VertAxis && VertAxis.getLabel() === 1), (SecVertAxis && SecVertAxis.getLabel() === 1), (DepthAxis && DepthAxis.getLabel() === 1)); + } + break; + case 'bShowVertAxTitle': + if (hBarChart) { + chartProps.setDisplayAxisTitles(item.checked, (SecVertAxis && SecVertAxis.getLabel() === 1), (HorAxis && HorAxis.getLabel() === 1), (SecHorAxis && SecHorAxis.getLabel() === 1), (DepthAxis && DepthAxis.getLabel() === 1)); + } else if (scatterChart) { + chartProps.setDisplayAxisTitles((SecHorAxis && SecHorAxis.getLabel() === 1), (SecVertAxis && SecVertAxis.getLabel() === 1), (HorAxis && HorAxis.getLabel() === 1), item.checked, (DepthAxis && DepthAxis.getLabel() === 1)); + } else if (comboCustom) { + chartProps.setDisplayAxisTitles((HorAxis && HorAxis.getLabel() === 1), (SecVertAxis && SecVertAxis.getLabel() === 1), item.checked, (SecHorAxis && SecHorAxis.getLabel() === 1), (DepthAxis && DepthAxis.getLabel() === 1)); + } else { + chartProps.setDisplayAxisTitles((HorAxis && HorAxis.getLabel() === 1), (SecHorAxis && SecHorAxis.getLabel() === 1), item.checked, (SecVertAxis && SecVertAxis.getLabel() === 1), (DepthAxis && DepthAxis.getLabel() === 1)); + } + break; + case 'bShowHorAxTitleSec': + if (comboCustom) { + chartProps.setDisplayAxisTitles((HorAxis && HorAxis.getLabel() === 1), (SecVertAxis && SecVertAxis.getLabel() === 1), (VertAxis && VertAxis.getLabel() === 1), item.checked, (DepthAxis && DepthAxis.getLabel() === 1)); + } else { + chartProps.setDisplayAxisTitles((HorAxis && HorAxis.getLabel() === 1), item.checked, (VertAxis && VertAxis.getLabel() === 1), (SecVertAxis && SecVertAxis.getLabel() === 1), (DepthAxis && DepthAxis.getLabel() === 1)); + } + break; + case 'bShowVertAxisTitleSec': + if (comboCustom) { + chartProps.setDisplayAxisTitles((HorAxis && HorAxis.getLabel() === 1), item.checked, (VertAxis && VertAxis.getLabel() === 1), (SecHorAxis && SecHorAxis.getLabel() === 1), (DepthAxis && DepthAxis.getLabel() === 1)); + } else { + chartProps.setDisplayAxisTitles((HorAxis && HorAxis.getLabel() === 1), (SecHorAxis && SecHorAxis.getLabel() === 1), (VertAxis && VertAxis.getLabel() === 1), item.checked, (DepthAxis && DepthAxis.getLabel() === 1)); + } + break; + case 'bShowDepthAxisTitle': + chartProps.setDisplayAxes((HorAxis && HorAxis.getLabel() === 1), (SecHorAxis && SecHorAxis.getLabel() === 1), (VertAxis && VertAxis.getLabel() === 1), (SecVertAxis && SecVertAxis.getLabel() === 1), item.checked); + break; + case 'bShowChartTitleNone': + chartProps.setDisplayChartTitle(false, false); + break; + case 'bShowChartTitle': + chartProps.setDisplayChartTitle(true, false); + break; + case 'bOverlayTitle': + chartProps.setDisplayChartTitle(true, true); + break; + case 'CenterData': + chartProps.setDisplayDataLabels(true, Asc.c_oAscChartDataLabelsPos.ctr); + break; + case 'InnerBottomData': + chartProps.setDisplayDataLabels(true, Asc.c_oAscChartDataLabelsPos.inBase); + break; + case 'InnerTopData': + chartProps.setDisplayDataLabels(true, Asc.c_oAscChartDataLabelsPos.inEnd); + break; + case 'OuterTopData': + chartProps.setDisplayDataLabels(true, Asc.c_oAscChartDataLabelsPos.outEnd); + break; + case 'TopData': + chartProps.setDisplayDataLabels(true, Asc.c_oAscChartDataLabelsPos.t); + break; + case 'LeftData': + chartProps.setDisplayDataLabels(true, Asc.c_oAscChartDataLabelsPos.l); + break; + case 'RightData': + chartProps.setDisplayDataLabels(true, Asc.c_oAscChartDataLabelsPos.r); + break; + case 'BottomData': + chartProps.setDisplayDataLabels(true, Asc.c_oAscChartDataLabelsPos.b); + break; + case 'FitWidthData': + chartProps.setDisplayDataLabels(true, Asc.c_oAscChartDataLabelsPos.bestFit); + break; + case 'bShowDataLabels': + chartProps.setDisplayDataLabels(false, false); + break; + case 'standardError': + chartProps.setDisplayErrorBars(true, 4); + break; + case 'percentage': + chartProps.setDisplayErrorBars(true, 2); + break; + case 'standardDeviation': + chartProps.setDisplayErrorBars(true, 3); + break; + case 'bShowHorMajor': + if (hBarChart) { + chartProps.setDisplayGridlines(HorMajorGridlines, item.checked, HorMinorGridlines, VertMinorGridlines); + } else + chartProps.setDisplayGridlines(item.checked, HorMajorGridlines, VertMinorGridlines, HorMinorGridlines); + break; + case 'bShowVerMajor': + if (hBarChart || RadarChart) { + chartProps.setDisplayGridlines(item.checked, VertMajorGridlines, HorMinorGridlines, VertMinorGridlines); + } else + chartProps.setDisplayGridlines(VertMajorGridlines, item.checked, VertMinorGridlines, HorMinorGridlines); + break; + case 'bShowHorMinor': + if (hBarChart) { + chartProps.setDisplayGridlines(HorMajorGridlines, VertMajorGridlines, HorMinorGridlines, item.checked); + } else + chartProps.setDisplayGridlines(VertMajorGridlines, HorMajorGridlines, item.checked, HorMinorGridlines); + break; + case 'bShowVerMinor': + if (hBarChart || RadarChart) { + chartProps.setDisplayGridlines(HorMajorGridlines, VertMajorGridlines, item.checked, VertMinorGridlines); + }else + chartProps.setDisplayGridlines(VertMajorGridlines, HorMajorGridlines, VertMinorGridlines, item.checked); + break; + case 'LeftLegend': + if (chartProps.getLegendPos() === 1) { + chartProps.setDisplayLegend(false, 0); + } else { + chartProps.setDisplayLegend(true, 1); + } + break; + case 'TopLegend': + if (chartProps.getLegendPos() === 2) { + chartProps.setDisplayLegend(false, 0); + } else { + chartProps.setDisplayLegend(true, 2); + } + break; + case 'RightLegend': + if (chartProps.getLegendPos() === 3) { + chartProps.setDisplayLegend(false, 0); + } else { + chartProps.setDisplayLegend(true, 3); + } + break; + case 'BottomLegend': + if (chartProps.getLegendPos() === 4) { + chartProps.setDisplayLegend(false, 0); + } else { + chartProps.setDisplayLegend(true, 4); + } + break; + case 'LeftOverlay': + if (chartProps.getLegendPos() === 5) { + chartProps.setDisplayLegend(false, 0); + } else { + chartProps.setDisplayLegend(true,5); + } + break; + case 'RightOverlay': + if (chartProps.getLegendPos() === 6) { + chartProps.setDisplayLegend(false, 0); + } else { + chartProps.setDisplayLegend(true, 6); + } + break; + case 'trendLineNone': + chartProps.setDisplayTrendlines(false, false, 0, 0); + break; + case 'trendLineLinear': + chartProps.setDisplayTrendlines(true, 1, 0, 0); + break; + case 'trendLineExponential': + chartProps.setDisplayTrendlines(true, 0, 0, 0); + break; + case 'trendLineForecast': + chartProps.setDisplayTrendlines(true, 1, 2, 0); + break; + case 'trendLineMovingAverage': + chartProps.setDisplayTrendlines(true, 3, 0, 0); + break; + case 'bShowUpDownBars': + chartProps.setDisplayUpDownBars(true); + break; + case 'bShowUpDownNone': + chartProps.setDisplayUpDownBars(false); + break; + } + }; + + dh.updateChartElementMenu = function(menu, chartProps) { + const type = chartProps.getType(), + horAxes = chartProps.getHorAxesProps && chartProps.getHorAxesProps(), + vertAxes = chartProps.getVertAxesProps && chartProps.getVertAxesProps(), + depthAxes = chartProps.getDepthAxesProps && chartProps.getDepthAxesProps(), + dataLabelsPos = chartProps.getDataLabelsPos && chartProps.getDataLabelsPos(), + title = chartProps.getTitle && chartProps.getTitle(), + legendPos = chartProps.getLegendPos && chartProps.getLegendPos(), + GridMajor = Asc.c_oAscGridLinesSettings.major, + GridMinor = Asc.c_oAscGridLinesSettings.minor, + GridMajorMinor = Asc.c_oAscGridLinesSettings.majorMinor, + ComboChart = [_set.comboCustom, _set.comboBarLine,_set.comboBarLineSecondary,_set.comboAreaBar].includes(type), + RadarChart = [_set.radar, _set.radarMarker, _set.radarFilled].includes(type), + LabelGroup1Types = [_set.barNormal, _set.barStacked, _set.barStackedPer, _set.hBarNormal, _set.hBarStacked, _set.hBarStackedPer], + LabelGroup2Types = [_set.barNormal, _set.barStacked, _set.barStackedPer, _set.pie, _set.pie3d, _set.hBarNormal, _set.hBarStacked, _set.hBarStackedPer], + LabelGroup3Types = [_set.barNormal, _set.pie, _set.pie3d, _set.hBarNormal], + LabelGroup4Types = [_set.lineNormal, _set.lineStacked, _set.lineStackedPer, _set.lineNormalMarker, _set.lineStackedMarker, _set.lineStackedPerMarker, _set.stock, _set.scatter, _set.scatterLine, _set.scatterLineMarker, _set.scatterSmooth, _set.scatterSmoothMarker], + LabelGroup5Types = [_set.pie, _set.pie3d], + comboType = ComboChart ? (chartProps.getSeries && chartProps.getSeries()[0] && chartProps.getSeries()[0].asc_getChartType()) : type, + LabelGroup1 = LabelGroup1Types.includes(comboType), + LabelGroup2 = LabelGroup2Types.includes(comboType), + LabelGroup3 = LabelGroup3Types.includes(comboType), + LabelGroup4 = LabelGroup4Types.includes(comboType), + LabelGroup5 = LabelGroup5Types.includes(comboType); + + const axesMenu = menu.items[0].menu; + axesMenu.items[0].setVisible(!RadarChart); + axesMenu.items[0].setChecked(!RadarChart && horAxes && horAxes[0] && horAxes[0].getShow()); + axesMenu.items[1].setChecked(vertAxes && vertAxes[0] && vertAxes[0].getShow()); + axesMenu.items[4].setVisible(depthAxes && depthAxes[0]); + axesMenu.items[4].setChecked(depthAxes && depthAxes[0] && depthAxes[0].getShow()); + if (ComboChart) { + axesMenu.items[2].setVisible(horAxes && horAxes[1]); + axesMenu.items[2].setChecked(horAxes && horAxes[1] && horAxes[1].getShow()); + axesMenu.items[3].setVisible(vertAxes && vertAxes[1]); + axesMenu.items[3].setChecked(vertAxes && vertAxes[1] && vertAxes[1].getShow()); + } else { + axesMenu.items[2].setVisible(false); + axesMenu.items[3].setVisible(false); + } + + const titlesMenu = menu.items[1].menu; + titlesMenu.items[0].setChecked(horAxes && horAxes[0] && horAxes[0].getLabel() === Asc.c_oAscChartHorAxisLabelShowSettings.noOverlay); + titlesMenu.items[1].setChecked(vertAxes && vertAxes[0] && vertAxes[0].getLabel() === Asc.c_oAscChartVertAxisLabelShowSettings.rotated); + titlesMenu.items[4].setVisible(depthAxes && depthAxes[0]); + titlesMenu.items[4].setChecked(depthAxes && depthAxes[0] && depthAxes[0].getLabel() === Asc.c_oAscChartVertAxisLabelShowSettings.rotated); + if (ComboChart) { + titlesMenu.items[2].setVisible(horAxes && horAxes[1]); + titlesMenu.items[2].setChecked(horAxes && horAxes[1] && horAxes[1].getLabel() === Asc.c_oAscChartHorAxisLabelShowSettings.noOverlay); + titlesMenu.items[3].setVisible(vertAxes && vertAxes[1]); + titlesMenu.items[3].setChecked(vertAxes && vertAxes[1] && vertAxes[1].getLabel() === Asc.c_oAscChartVertAxisLabelShowSettings.rotated); + } else { + titlesMenu.items[2].setVisible(false); + titlesMenu.items[3].setVisible(false); + } + + const titleMenu = menu.items[2].menu; + titleMenu.items[0].setChecked(title === Asc.c_oAscChartTitleShowSettings.none); + titleMenu.items[1].setChecked(title === Asc.c_oAscChartTitleShowSettings.noOverlay); + titleMenu.items[2].setChecked(title === Asc.c_oAscChartTitleShowSettings.overlay); + + const labelsMenu = menu.items[3].menu; + labelsMenu.items[0].setChecked(dataLabelsPos === Asc.c_oAscChartDataLabelsPos.none); + labelsMenu.items[1].setChecked(dataLabelsPos === Asc.c_oAscChartDataLabelsPos.ctr); + labelsMenu.items[2].setChecked(LabelGroup1 && dataLabelsPos === Asc.c_oAscChartDataLabelsPos.inBase); + labelsMenu.items[3].setChecked(LabelGroup2 && dataLabelsPos === Asc.c_oAscChartDataLabelsPos.inEnd); + labelsMenu.items[4].setChecked(LabelGroup3 && dataLabelsPos === Asc.c_oAscChartDataLabelsPos.outEnd); + labelsMenu.items[5].setChecked(LabelGroup4 && dataLabelsPos === Asc.c_oAscChartDataLabelsPos.t); + labelsMenu.items[6].setChecked(LabelGroup4 && dataLabelsPos === Asc.c_oAscChartDataLabelsPos.l); + labelsMenu.items[7].setChecked(LabelGroup4 && dataLabelsPos === Asc.c_oAscChartDataLabelsPos.r); + labelsMenu.items[8].setChecked(LabelGroup4 && dataLabelsPos === Asc.c_oAscChartDataLabelsPos.b); + labelsMenu.items[9].setChecked(LabelGroup5 && dataLabelsPos === Asc.c_oAscChartDataLabelsPos.bestFit); + if (dataLabelsPos !== undefined) { + labelsMenu.items[2].setVisible(LabelGroup1); + labelsMenu.items[3].setVisible(LabelGroup2); + labelsMenu.items[4].setVisible(LabelGroup3); + labelsMenu.items[5].setVisible(LabelGroup4); + labelsMenu.items[6].setVisible(LabelGroup4); + labelsMenu.items[7].setVisible(LabelGroup4); + labelsMenu.items[8].setVisible(LabelGroup4); + labelsMenu.items[9].setVisible(LabelGroup5); + } + + const gridMenu = menu.items[5].menu; + gridMenu.items[0].setVisible(true); + gridMenu.items[2].setVisible(true); + if (RadarChart) { + gridMenu.items[0].setVisible(false); + gridMenu.items[0].setChecked(false); + gridMenu.items[1].setChecked(vertAxes && vertAxes[0] && (vertAxes[0].getGridlines() === GridMajor || vertAxes[0].getGridlines() === GridMajorMinor)); + gridMenu.items[2].setChecked(false); + gridMenu.items[2].setVisible(false); + gridMenu.items[3].setChecked(vertAxes && vertAxes[0] && (vertAxes[0].getGridlines() === GridMinor || vertAxes[0].getGridlines() === GridMajorMinor)); + } else if (type !== Asc.c_oAscChartTypeSettings.pie && type !== Asc.c_oAscChartTypeSettings.pie3d) { + gridMenu.items[0].setChecked(vertAxes && vertAxes[0] && (vertAxes[0].getGridlines() === GridMajor || vertAxes[0].getGridlines() === GridMajorMinor)); + gridMenu.items[1].setChecked(horAxes && horAxes[0] && (horAxes[0].getGridlines() === GridMajor || horAxes[0].getGridlines() === GridMajorMinor)); + gridMenu.items[2].setChecked(vertAxes && vertAxes[0] && (vertAxes[0].getGridlines() === GridMinor || vertAxes[0].getGridlines() === GridMajorMinor)); + gridMenu.items[3].setChecked(horAxes && horAxes[0] && (horAxes[0].getGridlines() === GridMinor || horAxes[0].getGridlines() === GridMajorMinor)); + } + + const legendMenu = menu.items[6].menu; + legendMenu.items[0].setChecked(legendPos === Asc.c_oAscChartLegendShowSettings.top); + legendMenu.items[1].setChecked(legendPos === Asc.c_oAscChartLegendShowSettings.left); + legendMenu.items[2].setChecked(legendPos === Asc.c_oAscChartLegendShowSettings.right); + legendMenu.items[3].setChecked(legendPos === Asc.c_oAscChartLegendShowSettings.bottom); + legendMenu.items[4].setChecked(legendPos === Asc.c_oAscChartLegendShowSettings.leftOverlay); + legendMenu.items[5].setChecked(legendPos === Asc.c_oAscChartLegendShowSettings.rightOverlay); + + const supportedElements = chartElementMap[type] || chartElementMap[45] || []; + + menu.items.forEach(function(item) { + item.setDisabled(supportedElements.indexOf(item.value) === -1); + }); + }; + + dh.onSingleChartSelectionChanged = function(asc_CRect) { + var me = this, + documentHolderView = me.documentHolder, + chartContainer = documentHolderView.cmpEl.find('#chart-element-container'); + me._state.currentChartRect = asc_CRect; + + me.getCurrentChartProps = function () { + var selectedElements = me.api.getSelectedElements(); + if (selectedElements && selectedElements.length > 0) { + var elType, elValue; + for (var i = selectedElements.length - 1; i >= 0; i--) { + elType = selectedElements[i].get_ObjectType(); + elValue = selectedElements[i].get_ObjectValue(); + + if (elType === Asc.c_oAscTypeSelectElement.Chart) { + return elValue.get_ChartProperties(); + } + } + } + return null; + }; + + me.chartProps = me.getCurrentChartProps(); + + if (chartContainer.length < 1) { + chartContainer = $('
'); + documentHolderView.cmpEl.append(chartContainer); + } + + me.isRtlSheet = me.api ? Common.UI.isRTL() : false; + + if (me.chartProps) { + var x = asc_CRect.asc_getX(), + y = asc_CRect.asc_getY(), + width = asc_CRect.asc_getWidth(), + btnLeft = me.isRtlSheet ? x - 55 : x + width - 10, + btnTop = y - 28; + + if (btnLeft < 25 || btnLeft + 50 > me._Width || btnTop + 30 > me._Height) { + chartContainer.hide(); + return; + } + + if (btnTop < 0) { + btnTop = 0 + } + + chartContainer.css({ + left: btnLeft + 'px', + top: btnTop + 'px' + }).show(); + + if (!me.btnChartElement) { + me.btnChartElement = new Common.UI.Button({ + parentEl: $('#id-document-holder-btn-chart-element'), + cls: 'btn-toolbar', + iconCls: 'toolbar__icon btn-chart-elements', + hint: me.documentHolder.btnChart, + menu: me.documentHolder.menuChartElement.menu + }); + + me.btnChartElement.on('click', function() { + me.chartProps = me.getCurrentChartProps(); + if (me.chartProps) { + me.updateChartElementMenu(me.documentHolder.menuChartElement.menu, me.chartProps); + } + }); + } + } else { + chartContainer.hide(); + } + }; + } }); \ No newline at end of file diff --git a/apps/pdfeditor/main/app/view/DocumentHolderExt.js b/apps/pdfeditor/main/app/view/DocumentHolderExt.js index 48373d011b..1792df2f48 100644 --- a/apps/pdfeditor/main/app/view/DocumentHolderExt.js +++ b/apps/pdfeditor/main/app/view/DocumentHolderExt.js @@ -665,6 +665,382 @@ define([], function () { }) }); + me.menuChartElement = new Common.UI.MenuItem({ + menu: new Common.UI.Menu({ + items: [ + { + caption: me.textAxes, + value: 'axes', + disabled: false, + menu: new Common.UI.Menu({ + cls: 'shifted-right', + menuAlign: 'tl-tr', + items: [ + { + caption: me.textHorAxis, + value: 'bShowHorAxis', + stopPropagation: true, + checkable: true + }, + { + caption: me.textVertAxis, + value: 'bShowVertAxis', + stopPropagation: true, + checkable: true + }, + { + caption: me.textHorAxisSec, + value: 'bShowHorAxSec', + stopPropagation: true, + checkable: true + }, + { + caption: me.textVertAxisSec, + value: 'bShowVertAxSec', + stopPropagation: true, + checkable: true + }, + { + caption: me.DepthAxis, + value: 'bShowDepthAxes', + stopPropagation: true, + checkable: true + } + ] + }) + }, + { + caption: me.textAxisTitles, + value: 'axisTitles', + disabled: false, + menu: new Common.UI.Menu({ + cls: 'shifted-right', + menuAlign: 'tl-tr', + items: [ + { + caption: me.textHorAxis, + value: 'bShowHorAxTitle', + stopPropagation: true, + checkable: true + }, + { + caption: me.textVertAxis, + value: 'bShowVertAxTitle', + stopPropagation: true, + checkable: true + }, + { + caption: me.textHorAxisSec, + value: 'bShowHorAxTitleSec', + stopPropagation: true, + checkable: true + }, + { + caption: me.textVertAxisSec, + value: 'bShowVertAxisTitleSec', + stopPropagation: true, + checkable: true + }, + { + caption: me.DepthAxis, + value: 'bShowDepthAxesTitle', + stopPropagation: true, + checkable: true + } + ] + }) + }, + { + caption: me.textChartTitle, + value: 'chartTitle', + disabled: false, + menu: new Common.UI.Menu({ + cls: 'shifted-right', + menuAlign: 'tl-tr', + items: [ + { + caption: me.textNone, + value: 'bShowChartTitleNone', + stopPropagation: true, + toggleGroup: 'chartTitle', + checkable: true + }, + { + caption: me.textNoOverlay, + value: 'bShowChartTitle', + stopPropagation: true, + toggleGroup: 'chartTitle', + checkable: true + }, + { + caption: me.textOverlay, + value: 'bOverlayTitle', + stopPropagation: true, + toggleGroup: 'chartTitle', + checkable: true + } + ] + }) + }, + { + caption: me.textDataLabels, + value: 'dataLabels', + disabled: false, + menu: new Common.UI.Menu({ + cls: 'shifted-right', + menuAlign: 'tl-tr', + items: [ + { + caption: me.textNone, + value: 'bShowDataLabels', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + }, + { + caption: me.textCenter, + value: 'CenterData', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + }, + { + caption: me.textInnerBottom, + value: 'InnerBottomData', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + }, + { + caption: me.textInnerTop, + value: 'InnerTopData', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + }, + { + caption: me.textOuterTop, + value: 'OuterTopData', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + }, + { + caption: me.textTop, + value: 'TopData', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + }, + { + caption: me.textLeft, + value: 'LeftData', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + }, + { + caption: me.textRight, + value: 'RightData', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + }, + { + caption: me.textBottom, + value: 'BottomData', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + }, + { + caption: me.textFit, + value: 'FitWidthData', + stopPropagation: true, + toggleGroup: 'dataLabels', + checkable: true + } + ] + }) + }, + { + caption: me.textErrorBars, + value: 'errorBars', + disabled: false, + menu: new Common.UI.Menu({ + cls: 'shifted-right', + menuAlign: 'tl-tr', + items: [ + { + caption: me.textStandardError, + value: 'standardError', + stopPropagation: true, + disabled: false + }, + { + caption: me.txtPercentage, + value: 'percentage', + stopPropagation: true, + disabled: false + }, + { + caption: me.textStandardDeviation, + value: 'standardDeviation', + stopPropagation: true, + disabled: false + } + ] + }) + }, + { + caption: me.textGridLines, + value: 'gridLines', + disabled: false, + menu: new Common.UI.Menu({ + cls: 'shifted-right', + menuAlign: 'tl-tr', + items: [ + { + caption: me.textHorizontalMajor, + value: 'bShowHorMajor', + stopPropagation: true, + checkable: true + }, + { + caption: me.textVerticalMajor, + value: 'bShowVerMajor', + stopPropagation: true, + checkable: true + }, + { + caption: me.textHorizontalMinor, + value: 'bShowHorMinor', + stopPropagation: true, + checkable: true + }, + { + caption: me.textVerticalMinor, + value: 'bShowVerMinor', + stopPropagation: true, + checkable: true + } + ] + }) + }, + { + caption: me.textLegendPos, + value: 'legend', + disabled: false, + menu: new Common.UI.Menu({ + cls: 'shifted-right', + menuAlign: 'tl-tr', + items: [ + { + caption: me.textTop, + value: 'TopLegend', + stopPropagation: true, + toggleGroup: 'legend', + checkable: true + }, + { + caption: me.textLeft, + value: 'LeftLegend', + stopPropagation: true, + toggleGroup: 'legend', + checkable: true + }, + { + caption: me.textRight, + value: 'RightLegend', + stopPropagation: true, + toggleGroup: 'legend', + checkable: true + }, + { + caption: me.textBottom, + value: 'BottomLegend', + stopPropagation: true, + toggleGroup: 'legend', + checkable: true + }, + { + caption: me.textLeftOverlay, + value: 'LeftOverlay', + stopPropagation: true, + toggleGroup: 'legend', + checkable: true + }, + { + caption: me.textRightOverlay, + value: 'RightOverlay', + stopPropagation: true, + toggleGroup: 'legend', + checkable: true + } + ] + }) + }, + { + caption: me.textTrendline, + value: 'trendLines', + disabled: false, + menu: new Common.UI.Menu({ + cls: 'shifted-right', + menuAlign: 'tl-tr', + items: [ + { + caption: me.textNone, + stopPropagation: true, + value: 'trendLineNone' + }, + { + caption: me.textLinear, + stopPropagation: true, + value: 'trendLineLinear' + }, + { + caption: me.textExponential, + stopPropagation: true, + value: 'trendLineExponential' + }, + { + caption: me.textLinearForecast, + stopPropagation: true, + value: 'trendLineForecast' + }, + { + caption: me.textMovingAverage, + stopPropagation: true, + value: 'trendLineMovingAverage' + } + ] + }) + }, + { + caption: me.textUpDownBars, + value: 'upDownBars', + disabled: false, + menu: new Common.UI.Menu({ + cls: 'shifted-right', + menuAlign: 'tl-tr', + items: [ + { + caption: me.textNone, + stopPropagation: true, + value: 'bShowUpDownNone' + }, + { + caption: me.textShowUpDown, + stopPropagation: true, + value: 'bShowUpDownBars' + } + ] + }) + } + ] + }) + }); + var menuImgShapeSeparator = new Common.UI.MenuItem({ caption : '--' }); diff --git a/apps/pdfeditor/main/locale/en.json b/apps/pdfeditor/main/locale/en.json index 532dc9a947..d0f24aa62d 100644 --- a/apps/pdfeditor/main/locale/en.json +++ b/apps/pdfeditor/main/locale/en.json @@ -1472,6 +1472,48 @@ "PDFE.Views.DocumentHolder.txtWarnUrl": "Clicking this link can be harmful to your device and data.
Are you sure you want to continue?", "PDFE.Views.DocumentHolder.unicodeText": "Unicode", "PDFE.Views.DocumentHolder.vertAlignText": "Vertical alignment", + "PDFE.Views.DocumentHolder.textAxes": "Axes", + "PDFE.Views.DocumentHolder.textAxisTitles": "Axis Titles", + "PDFE.Views.DocumentHolder.textGridLines": "Gridlines", + "PDFE.Views.DocumentHolder.textHorAxis": "Horizontal axis", + "PDFE.Views.DocumentHolder.textHorAxisSec": "Secondary horizontal axis", + "PDFE.Views.DocumentHolder.textHorizontalMajor": "Horizontal Major", + "PDFE.Views.DocumentHolder.textHorizontalMinor": "Horizontal Minor", + "PDFE.Views.DocumentHolder.textVertAxis": "Vertical axis", + "PDFE.Views.DocumentHolder.textVertAxisSec": "Secondary vertical axis", + "PDFE.Views.DocumentHolder.textVerticalMajor": "Vertical Major", + "PDFE.Views.DocumentHolder.textVerticalMinor": "Vertical Minor", + "PDFE.Views.DocumentHolder.DepthAxis": "Z axis", + "PDFE.Views.DocumentHolder.textChartTitle": "Chart Title", + "PDFE.Views.DocumentHolder.textNone": "None", + "PDFE.Views.DocumentHolder.textNoOverlay": "No overlay", + "PDFE.Views.DocumentHolder.textOverlay": "Overlay", + "PDFE.Views.DocumentHolder.textDataLabels": "Data labels", + "PDFE.Views.DocumentHolder.textCenter": "Center", + "PDFE.Views.DocumentHolder.textInnerBottom": "Inner bottom", + "PDFE.Views.DocumentHolder.textInnerTop": "Inner top", + "PDFE.Views.DocumentHolder.textOuterTop": "Outer top", + "PDFE.Views.DocumentHolder.textTop": "Top", + "PDFE.Views.DocumentHolder.textLeftData": "Left", + "PDFE.Views.DocumentHolder.textRight": "Right", + "PDFE.Views.DocumentHolder.textBottom": "Bottom", + "PDFE.Views.DocumentHolder.textFit": "Fit to width", + "PDFE.Views.DocumentHolder.textErrorBars": "Error Bars", + "PDFE.Views.DocumentHolder.textStandardDeviation": "Standard Deviation", + "PDFE.Views.DocumentHolder.textStandardError": "Standard Error", + "PDFE.Views.DocumentHolder.txtPercentage": "Percentage", + "PDFE.Views.DocumentHolder.textShowLegendKeys": "Show Legend Keys", + "PDFE.Views.DocumentHolder.textShowUpDown": "Show Up/Down Bars", + "PDFE.Views.DocumentHolder.textExponential": "Exponential", + "PDFE.Views.DocumentHolder.textRightOverlay": "Right overlay", + "PDFE.Views.DocumentHolder.textLeftOverlay": "Left overlay", + "PDFE.Views.DocumentHolder.textLegendPos": "Legend", + "PDFE.Views.DocumentHolder.textLinear": "Linear", + "PDFE.Views.DocumentHolder.textLinearForecast": "Linear Forecast", + "PDFE.Views.DocumentHolder.textLines": "Lines", + "PDFE.Views.DocumentHolder.textMovingAverage": "Moving Average (2)", + "PDFE.Views.DocumentHolder.textTrendline": "Trendline", + "PDFE.Views.DocumentHolder.textUpDownBars": " Up/Down Bars", "PDFE.Views.FileMenu.ariaFileMenu": "File menu", "PDFE.Views.FileMenu.btnBackCaption": "Open File Location", "PDFE.Views.FileMenu.btnCloseEditor": "Close File",