diff --git a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js index 29cf784bc..4d06df571 100644 --- a/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/controller/FormulaDialog.js @@ -45,7 +45,8 @@ define([ 'spreadsheeteditor/main/app/collection/FormulaGroups', 'spreadsheeteditor/main/app/view/FormulaDialog', 'spreadsheeteditor/main/app/view/FormulaTab', - 'spreadsheeteditor/main/app/view/FormulaWizard' + 'spreadsheeteditor/main/app/view/FormulaWizard', + 'spreadsheeteditor/main/app/view/WatchDialog' ], function () { 'use strict'; @@ -80,7 +81,8 @@ define([ }, 'FormulaTab': { 'function:apply': this.applyFunction, - 'function:calculate': this.onCalculate + 'function:calculate': this.onCalculate, + 'function:watch': this.onWatch }, 'Toolbar': { 'function:apply': this.applyFunction, @@ -409,6 +411,15 @@ define([ } }, + onWatch: function() { + (new SSE.Views.WatchDialog({ + api: this.api, + handler: function(result) { + Common.NotificationCenter.trigger('edit:complete'); + }, + })).show(); + }, + sCategoryAll: 'All', sCategoryLast10: '10 last used', sCategoryLogical: 'Logical', diff --git a/apps/spreadsheeteditor/main/app/template/Toolbar.template b/apps/spreadsheeteditor/main/app/template/Toolbar.template index 502449a0e..05a9fff2f 100644 --- a/apps/spreadsheeteditor/main/app/template/Toolbar.template +++ b/apps/spreadsheeteditor/main/app/template/Toolbar.template @@ -203,6 +203,10 @@
+
+ +
+
diff --git a/apps/spreadsheeteditor/main/app/template/WatchDialog.template b/apps/spreadsheeteditor/main/app/template/WatchDialog.template new file mode 100644 index 000000000..2c25cbf01 --- /dev/null +++ b/apps/spreadsheeteditor/main/app/template/WatchDialog.template @@ -0,0 +1,27 @@ +
+
+ + + + + + + + + + +
+ + +
+ + + + + + +
+
+
+
+
\ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/FormulaTab.js b/apps/spreadsheeteditor/main/app/view/FormulaTab.js index 9d5b26d81..b13fd8c2c 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaTab.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaTab.js @@ -69,6 +69,9 @@ define([ me.btnNamedRange.menu.on('item:click', function (menu, item, e) { me.fireEvent('function:namedrange', [menu, item, e]); }); + me.btnWatch.on('click', function(){ + me.fireEvent('function:watch'); + }); } return { options: {}, @@ -318,6 +321,20 @@ define([ }); this.lockedControls.push(this.btnNamedRange); + this.btnWatch = new Common.UI.Button({ + parentEl: $host.find('#slot-btn-watch-window'), + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'toolbar__icon btn-lookup', + caption: this.txtWatch, + hint: this.tipWatch, + disabled: true, + lock: [_set.editText, _set.lostConnect, _set.coAuth], + dataHint: '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' + }); + this.lockedControls.push(this.btnWatch); + Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); }, @@ -577,7 +594,9 @@ define([ textCalculateCurrentSheet: 'Calculate current sheet', textAutomatic: 'Automatic', textManual: 'Manual', - tipCalculateTheEntireWorkbook: 'Calculate the entire workbook' + tipCalculateTheEntireWorkbook: 'Calculate the entire workbook', + txtWatch: 'Watch Window', + tipWatch: 'Add cells to the Watch Window list' } }()), SSE.Views.FormulaTab || {})); }); diff --git a/apps/spreadsheeteditor/main/app/view/WatchDialog.js b/apps/spreadsheeteditor/main/app/view/WatchDialog.js new file mode 100644 index 000000000..76c392aca --- /dev/null +++ b/apps/spreadsheeteditor/main/app/view/WatchDialog.js @@ -0,0 +1,225 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2022 + * + * 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 + * +*/ +/** + * + * WatchDialogDialog.js + * + * Created by Julia.Radzhabova on 24.06.22 + * Copyright (c) 2022 Ascensio System SIA. All rights reserved. + * + */ + +define([ 'text!spreadsheeteditor/main/app/template/WatchDialog.template', + 'common/main/lib/view/AdvancedSettingsWindow', + 'common/main/lib/component/ListView' +], function (contentTemplate) { + 'use strict'; + + SSE.Views = SSE.Views || {}; + + SSE.Views.WatchDialog = Common.Views.AdvancedSettingsWindow.extend(_.extend({ + + options: { + alias: 'WatchDialog', + contentWidth: 560, + height: 294, + buttons: null + }, + + initialize: function (options) { + var me = this; + _.extend(this.options, { + title: this.txtTitle, + template: [ + '
', + '
' + _.template(contentTemplate)({scope: this}) + '
', + '
', + '' + ].join('') + }, options); + + this.api = options.api; + this.handler = options.handler; + + this.wrapEvents = { + onRefreshWatchList: _.bind(this.refreshList, this) + }; + + Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options); + }, + render: function () { + Common.Views.AdvancedSettingsWindow.prototype.render.call(this); + var me = this; + + this.watchList = new Common.UI.ListView({ + el: $('#watch-dialog-list', this.$window), + store: new Common.UI.DataViewStore(), + simpleAddMode: true, + itemTemplate: _.template([ + '
', + '
<%= Common.Utils.String.htmlEncode(book) %>
', + '
<%= Common.Utils.String.htmlEncode(sheet) %>
', + '
<%= Common.Utils.String.htmlEncode(name) %>
', + '
<%= cell %>
', + '
<%= value %>
', + '
<%= formula %>
', + '
' + ].join('')), + tabindex: 1 + }); + this.watchList.on('item:select', _.bind(this.onSelectWatch, this)) + .on('item:keydown', _.bind(this.onKeyDown, this)); + + this.btnAdd = new Common.UI.Button({ + el: $('#watch-dialog-btn-add', this.$window) + }); + this.btnAdd.on('click', _.bind(this.onAddWatch, this, false)); + + this.btnDelete = new Common.UI.Button({ + el: $('#watch-dialog-btn-delete', this.$window) + }); + this.btnDelete.on('click', _.bind(this.onDeleteWatch, this)); + + this.afterRender(); + }, + + afterRender: function() { + this._setDefaults(); + }, + + getFocusedComponents: function() { + return [ this.btnAdd, this.btnDelete, this.watchList ]; + }, + + getDefaultFocusableComponent: function () { + return this.watchList; + }, + + _setDefaults: function (props) { + this.refreshList(); + this.api.asc_registerCallback('asc_onRefreshWatchList', this.wrapEvents.onRefreshWatchList); + }, + + refreshList: function() { + var arr = []; + var watches = this.api.asc_getCellWatches(); + if (watches) { + for (var i=0; i