\ No newline at end of file
diff --git a/apps/spreadsheeteditor/main/app/template/SlicerSettings.template b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template
new file mode 100644
index 000000000..304bf2cf6
--- /dev/null
+++ b/apps/spreadsheeteditor/main/app/template/SlicerSettings.template
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/spreadsheeteditor/main/app/view/RightMenu.js b/apps/spreadsheeteditor/main/app/view/RightMenu.js
index cf93f489d..a2f6f68bb 100644
--- a/apps/spreadsheeteditor/main/app/view/RightMenu.js
+++ b/apps/spreadsheeteditor/main/app/view/RightMenu.js
@@ -58,6 +58,7 @@ define([
'spreadsheeteditor/main/app/view/PivotSettings',
'spreadsheeteditor/main/app/view/SignatureSettings',
'spreadsheeteditor/main/app/view/CellSettings',
+ 'spreadsheeteditor/main/app/view/SlicerSettings',
'common/main/lib/component/Scroller'
], function (menuTemplate, $, _, Backbone) {
'use strict';
@@ -143,6 +144,14 @@ define([
toggleGroup: 'tabpanelbtnsGroup',
allowMouseEventsOnDisabled: true
});
+ this.btnSlicer = new Common.UI.Button({
+ hint: this.txtSlicerSettings,
+ asctype: Common.Utils.documentSettingsType.Slicer,
+ enableToggle: true,
+ disabled: true,
+ toggleGroup: 'tabpanelbtnsGroup',
+ allowMouseEventsOnDisabled: true
+ });
this._settings = [];
this._settings[Common.Utils.documentSettingsType.Paragraph] = {panel: "id-paragraph-settings", btn: this.btnText};
@@ -153,6 +162,7 @@ define([
this._settings[Common.Utils.documentSettingsType.Table] = {panel: "id-table-settings", btn: this.btnTable};
this._settings[Common.Utils.documentSettingsType.Pivot] = {panel: "id-pivot-settings", btn: this.btnPivot};
this._settings[Common.Utils.documentSettingsType.Cell] = {panel: "id-cell-settings", btn: this.btnCell};
+ this._settings[Common.Utils.documentSettingsType.Slicer] = {panel: "id-slicer-settings", btn: this.btnSlicer};
return this;
},
@@ -178,6 +188,7 @@ define([
this.btnTable.setElement($('#id-right-menu-table'), false); this.btnTable.render();
this.btnPivot.setElement($('#id-right-menu-pivot'), false); this.btnPivot.render();
this.btnCell.setElement($('#id-right-menu-cell'), false); this.btnCell.render();
+ this.btnSlicer.setElement($('#id-right-menu-slicer'), false); this.btnSlicer.render();
this.btnText.on('click', _.bind(this.onBtnMenuClick, this));
this.btnImage.on('click', _.bind(this.onBtnMenuClick, this));
@@ -187,6 +198,7 @@ define([
this.btnTable.on('click', _.bind(this.onBtnMenuClick, this));
this.btnPivot.on('click', _.bind(this.onBtnMenuClick, this));
this.btnCell.on('click', _.bind(this.onBtnMenuClick, this));
+ this.btnSlicer.on('click', _.bind(this.onBtnMenuClick, this));
this.paragraphSettings = new SSE.Views.ParagraphSettings();
this.imageSettings = new SSE.Views.ImageSettings();
@@ -196,6 +208,7 @@ define([
this.tableSettings = new SSE.Views.TableSettings();
this.pivotSettings = new SSE.Views.PivotSettings();
this.cellSettings = new SSE.Views.CellSettings();
+ this.slicerSettings = new SSE.Views.SlicerSettings();
if (mode && mode.isSignatureSupport) {
this.btnSignature = new Common.UI.Button({
@@ -244,6 +257,7 @@ define([
this.tableSettings.setApi(api);
this.pivotSettings.setApi(api);
this.cellSettings.setApi(api);
+ this.slicerSettings.setApi(api);
if (this.signatureSettings) this.signatureSettings.setApi(api);
return this;
},
@@ -329,6 +343,7 @@ define([
txtTableSettings: 'Table Settings',
txtPivotSettings: 'Pivot Table Settings',
txtSignatureSettings: 'Signature Settings',
- txtCellSettings: 'Cell Settings'
+ txtCellSettings: 'Cell Settings',
+ txtSlicerSettings: 'Slicer Settings'
}, SSE.Views.RightMenu || {}));
});
\ No newline at end of file
diff --git a/apps/spreadsheeteditor/main/app/view/SlicerSettings.js b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js
new file mode 100644
index 000000000..a98e2b830
--- /dev/null
+++ b/apps/spreadsheeteditor/main/app/view/SlicerSettings.js
@@ -0,0 +1,493 @@
+/*
+ *
+ * (c) Copyright Ascensio System SIA 2010-2020
+ *
+ * This program is a free software product. You can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License (AGPL)
+ * version 3 as published by the Free Software Foundation. In accordance with
+ * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
+ * that Ascensio System SIA expressly excludes the warranty of non-infringement
+ * of any third-party rights.
+ *
+ * This program is distributed WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
+ * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
+ *
+ * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
+ * street, Riga, Latvia, EU, LV-1050.
+ *
+ * The interactive user interfaces in modified source and object code versions
+ * of the Program must display Appropriate Legal Notices, as required under
+ * Section 5 of the GNU AGPL version 3.
+ *
+ * Pursuant to Section 7(b) of the License you must retain the original Product
+ * logo when distributing the program. Pursuant to Section 7(e) we decline to
+ * grant you any rights under trademark law for use of our trademarks.
+ *
+ * All the Product's GUI elements, including illustrations and icon sets, as
+ * well as technical writing content are licensed under the terms of the
+ * Creative Commons Attribution-ShareAlike 4.0 International. See the License
+ * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
+ *
+ */
+/**
+ * SlicerSettings.js
+ *
+ * Created by Julia Radzhabova on 5/26/20
+ * Copyright (c) 2020 Ascensio System SIA. All rights reserved.
+ *
+ */
+define([
+ 'text!spreadsheeteditor/main/app/template/SlicerSettings.template',
+ 'jquery',
+ 'underscore',
+ 'backbone',
+ 'common/main/lib/component/Button',
+ 'common/main/lib/component/MetricSpinner',
+ 'spreadsheeteditor/main/app/view/SlicerSettingsAdvanced'
+], function (menuTemplate, $, _, Backbone) {
+ 'use strict';
+
+ SSE.Views.SlicerSettings = Backbone.View.extend(_.extend({
+ el: '#id-slicer-settings',
+
+ // Compile our stats template
+ template: _.template(menuTemplate),
+
+ // Delegated events for creating new items, and clearing completed ones.
+ events: {
+ },
+
+ options: {
+ alias: 'SlicerSettings'
+ },
+
+ initialize: function () {
+ this._initSettings = true;
+
+ this._nRatio = 1;
+ this._state = {
+ Width: 0,
+ Height: 0,
+ DisabledControls: false,
+ keepRatio: false,
+ ColCount: 0,
+ ColWidth: 0,
+ ColHeight: 0,
+ PosVert: 0,
+ PosHor: 0
+ };
+ this.spinners = [];
+ this.lockedControls = [];
+ this._locked = false;
+
+ this._noApply = false;
+ this._originalProps = null;
+
+ this.render();
+ },
+
+ render: function () {
+ var el = $(this.el);
+ el.html(this.template({
+ scope: this
+ }));
+
+ this.linkAdvanced = $('#image-advanced-link');
+ },
+
+ setApi: function(api) {
+ if ( api == undefined ) return;
+ this.api = api;
+ if (this.api) {
+ // this.api.asc_registerCallback('asc_InitSlicerStyles', _.bind(this.onInitStyles, this));
+ }
+ return this;
+ },
+
+ setMode: function(mode) {
+ this.mode = mode;
+ },
+
+ updateMetricUnit: function() {
+ if (this.spinners) {
+ for (var i=0; i0) {
+ this._nRatio = this.spnWidth.getNumberValue()/this.spnHeight.getNumberValue();
+ }
+ if (this.api) {
+ var props = new Asc.asc_CImgProperty();
+ props.asc_putLockAspect(btn.pressed);
+ this.api.asc_setGraphicObjectProps(props);
+ }
+ }, this));
+
+ this.spnWidth.on('change', _.bind(this.onWidthChange, this));
+ this.spnHeight.on('change', _.bind(this.onHeightChange, this));
+ this.spnWidth.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);});
+ this.spnHeight.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);});
+
+ this.spnHor = new Common.UI.MetricSpinner({
+ el: $('#slicer-spin-hor'),
+ step: .1,
+ width: 85,
+ defaultUnit : "cm",
+ value: '0 cm',
+ maxValue: 5963.9,
+ minValue: 0
+ });
+ this.spinners.push(this.spnHor);
+ this.lockedControls.push(this.spnVert);
+
+ this.spnVert = new Common.UI.MetricSpinner({
+ el: $('#slicer-spin-vert'),
+ step: .1,
+ width: 85,
+ defaultUnit : "cm",
+ value: '0 cm',
+ maxValue: 5963.9,
+ minValue: 0
+ });
+ this.spinners.push(this.spnVert);
+ this.lockedControls.push(this.spnVert);
+
+ // this.spnHor.on('change', _.bind(this.onHorChange, this));
+ // this.spnVert.on('change', _.bind(this.onVertChange, this));
+ this.spnHor.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);});
+ this.spnVert.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);});
+
+ this.spnColWidth = new Common.UI.MetricSpinner({
+ el: $('#slicer-spin-col-width'),
+ step: .1,
+ width: 85,
+ defaultUnit : "cm",
+ value: '0 cm',
+ maxValue: 5963.9,
+ minValue: 0
+ });
+ this.spinners.push(this.spnColWidth);
+ this.lockedControls.push(this.spnColWidth);
+
+ this.spnColHeight = new Common.UI.MetricSpinner({
+ el: $('#slicer-spin-col-height'),
+ step: .1,
+ width: 85,
+ defaultUnit : "cm",
+ value: '0 cm',
+ maxValue: 5963.9,
+ minValue: 0
+ });
+ this.spinners.push(this.spnColHeight);
+ this.lockedControls.push(this.spnColHeight);
+
+ this.numCols = new Common.UI.MetricSpinner({
+ el: $('#slicer-spin-cols'),
+ step: 1,
+ width: 50,
+ defaultUnit : "",
+ defaultValue : 1,
+ value: '1',
+ allowDecimal: false,
+ maxValue: 20000,
+ minValue: 0
+ });
+ this.lockedControls.push(this.numCols);
+
+ // this.spnColWidth.on('change', _.bind(this.onColWidthChange, this));
+ // this.spnColHeight.on('change', _.bind(this.onColHeightChange, this));
+ // this.numCols.on('change', _.bind(this.onColChange, this));
+ this.spnColWidth.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);});
+ this.spnColHeight.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);});
+ this.numCols.on('inputleave', function(){ Common.NotificationCenter.trigger('edit:complete', me);});
+
+ $(this.el).on('click', '#slicer-advanced-link', _.bind(this.openAdvancedSettings, this));
+ },
+
+ createDelayedElements: function() {
+ this.createDelayedControls();
+ this.updateMetricUnit();
+ this._initSettings = false;
+ },
+
+ openAdvancedSettings: function(e) {
+ if (this.linkAdvanced.hasClass('disabled')) return;
+
+ var me = this;
+ var win;
+ if (me.api && !this._locked){
+ var selectedElements = me.api.asc_getGraphicObjectProps();
+ if (selectedElements && selectedElements.length>0){
+ var elType, elValue;
+ for (var i = selectedElements.length - 1; i >= 0; i--) {
+ elType = selectedElements[i].asc_getObjectType();
+ elValue = selectedElements[i].asc_getObjectValue();
+ if (Asc.c_oAscTypeSelectElement.Image == elType) {
+ (new SSE.Views.SlicerSettingsAdvanced(
+ {
+ imageProps: elValue,
+ api: me.api,
+ handler: function(result, value) {
+ if (result == 'ok') {
+ if (me.api) {
+ me.api.asc_setGraphicObjectProps(value.imageProps);
+ }
+ }
+
+ Common.NotificationCenter.trigger('edit:complete', me);
+ }
+ })).show();
+ break;
+ }
+ }
+ }
+ }
+ },
+
+ ChangeSettings: function(props) {
+ if (this._initSettings)
+ this.createDelayedElements();
+
+ this.disableControls(this._locked);
+
+ if (props ){
+ this._originalProps = new Asc.asc_CImgProperty(props);
+
+ var value = props.asc_getWidth();
+ if ( Math.abs(this._state.Width-value)>0.001 ||
+ (this._state.Width===null || value===null)&&(this._state.Width!==value)) {
+ this.spnWidth.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true);
+ this._state.Width = value;
+ }
+
+ value = props.asc_getHeight();
+ if ( Math.abs(this._state.Height-value)>0.001 ||
+ (this._state.Height===null || value===null)&&(this._state.Height!==value)) {
+ this.spnHeight.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true);
+ this._state.Height = value;
+ }
+
+ if (props.asc_getHeight()>0)
+ this._nRatio = props.asc_getWidth()/props.asc_getHeight();
+
+ value = props.asc_getLockAspect();
+ if (this._state.keepRatio!==value) {
+ this.btnRatio.toggle(value);
+ this._state.keepRatio=value;
+ }
+
+ var slicerprops = props.asc_getSlicerProperties();
+ if (slicerprops) {
+ value = slicerprops.asc_getColumnCount();
+ if ( Math.abs(this._state.ColCount-value)>0.1 ||
+ (this._state.ColCount===null || value===null)&&(this._state.ColCount!==value)) {
+ this.numCols.setValue((value!==null) ? value : '', true);
+ this._state.ColCount = value;
+ }
+
+ // value = props.asc_getColWidth()/36000;
+ // if ( Math.abs(this._state.ColWidth-value)>0.001 ||
+ // (this._state.ColWidth===null || value===null)&&(this._state.ColWidth!==value)) {
+ // this.spnColWidth.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true);
+ // this._state.ColWidth = value;
+ // }
+
+ value = slicerprops.asc_getRowHeight()/36000;
+ if ( Math.abs(this._state.ColHeight-value)>0.001 ||
+ (this._state.ColHeight===null || value===null)&&(this._state.ColHeight!==value)) {
+ this.spnColHeight.setValue((value!==null) ? Common.Utils.Metric.fnRecalcFromMM(value) : '', true);
+ this._state.ColHeight = value;
+ }
+
+ value = slicerprops.asc_getStyle();
+ if (!this.btnSlicerStyle)
+ this.onInitStyles();
+ // var rec = this.mnuSlicerPicker.store.findWhere({type: value});
+ // if (!rec) {
+ // rec = this.mnuSlicerPicker.store.at(0);
+ // }
+ // this.btnSlicerStyle.suspendEvents();
+ // this.mnuSlicerPicker.selectRecord(rec, true);
+ // this.btnSlicerStyle.resumeEvents();
+ // this.$el.find('.icon-template-table').css({'background-image': 'url(' + rec.get("imageUrl") + ')', 'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'});
+ this.$el.find('.icon-template-table').css({'height': '48px', 'width': '63px', 'background-position': 'center', 'background-size': 'cover'});
+ }
+ }
+ },
+
+ onWidthChange: function(field, newValue, oldValue, eOpts){
+ var w = field.getNumberValue();
+ var h = this.spnHeight.getNumberValue();
+ if (this.btnRatio.pressed) {
+ h = w/this._nRatio;
+ if (h>this.spnHeight.options.maxValue) {
+ h = this.spnHeight.options.maxValue;
+ w = h * this._nRatio;
+ this.spnWidth.setValue(w, true);
+ }
+ this.spnHeight.setValue(h, true);
+ }
+ if (this.api) {
+ var props = new Asc.asc_CImgProperty();
+ props.asc_putWidth(Common.Utils.Metric.fnRecalcToMM(w));
+ props.asc_putHeight(Common.Utils.Metric.fnRecalcToMM(h));
+ this.api.asc_setGraphicObjectProps(props);
+ }
+ },
+
+ onHeightChange: function(field, newValue, oldValue, eOpts){
+ var h = field.getNumberValue(), w = this.spnWidth.getNumberValue();
+ if (this.btnRatio.pressed) {
+ w = h * this._nRatio;
+ if (w>this.spnWidth.options.maxValue) {
+ w = this.spnWidth.options.maxValue;
+ h = w/this._nRatio;
+ this.spnHeight.setValue(h, true);
+ }
+ this.spnWidth.setValue(w, true);
+ }
+ if (this.api) {
+ var props = new Asc.asc_CImgProperty();
+ props.asc_putWidth(Common.Utils.Metric.fnRecalcToMM(w));
+ props.asc_putHeight(Common.Utils.Metric.fnRecalcToMM(h));
+ this.api.asc_setGraphicObjectProps(props);
+ }
+ },
+
+ onInitStyles: function(Templates){
+ var self = this;
+ this._isTemplatesChanged = true;
+
+ if (!this.btnSlicerStyle) {
+ this.btnSlicerStyle = new Common.UI.Button({
+ cls : 'btn-large-dataview sheet-template-table',
+ iconCls : 'icon-template-table',
+ menu : new Common.UI.Menu({
+ style: 'width: 400px;',
+ items: [
+ { template: _.template('') }
+ ]
+ })
+ });
+ this.btnSlicerStyle.on('render:after', function(btn) {
+ self.mnuSlicerPicker = new Common.UI.DataView({
+ el: $('#id-slicer-menu-style'),
+ parentMenu: btn.menu,
+ restoreHeight: 325,
+ groups: new Common.UI.DataViewGroupStore(),
+ store: new Common.UI.DataViewStore(),
+ itemTemplate: _.template('