/* * (c) Copyright Ascensio System SIA 2010-2024 * * 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-6 Ernesta Birznieka-Upish * 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 * */ /** * GoalSeekDlg.js * * Created on 5.10.2023 * */ define([ 'common/main/lib/view/AdvancedSettingsWindow', ], function () { 'use strict'; SSE.Views.GoalSeekStatusDlg = Common.Views.AdvancedSettingsWindow.extend(_.extend({ options: { contentWidth: 330, separator: false, id: 'window-goal-seek-status' }, initialize : function(options) { var me = this; _.extend(this.options, { title: this.textTitle, contentStyle: 'padding: 10px 10px 0;', contentTemplate: _.template([ '
', '
', '
', '
', '', '
', '
', '
', '
', '
', '
', '
', '
', '', '
', '
', '
', '
', '
', '
', '
', '', '
', '
', '
', '', '
' ].join(''))({scope: this}) }, options); this.api = options.api; this.props = options.props; this._state = { isPause: false, cellName: undefined } this.options.handler = function(result, value) { if (options.handler) options.handler.call(this, result, value); return; }; this.api.asc_registerCallback('asc_onGoalSeekStop',_.bind(this.onStopSelection, this)); Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options); }, render: function() { Common.Views.AdvancedSettingsWindow.prototype.render.call(this); var me = this; this.$targetValue = $('#goal-seek-target-value'); this.$currentValue = $('#goal-seek-current-value'); this.$statusLabel = $('#goal-seek-status-label'); this.btnStep = new Common.UI.Button({ parentEl: $('#goal-seek-stop'), caption: this.textStep, cls: 'btn-text-default', disabled: true }); this.btnStep.on('click', _.bind(this.onBtnStep, this)); this.btnPause = new Common.UI.Button({ parentEl: $('#goal-seek-pause'), caption: this.textPause, cls: 'btn-text-default' }); this.btnPause.on('click', _.bind(this.onBtnPause, this)); this.btnOk = _.find(this.getFooterButtons(), function (item) { return (item.$el && item.$el.find('.primary').addBack().filter('.primary').length>0); }) || new Common.UI.Button({ el: this.getChild().find('.primary') }); this.btnOk.setDisabled(true); this.afterRender(); }, getFocusedComponents: function() { return [this.btnStep, this.btnPause].concat(this.getFooterButtons()); }, getDefaultFocusableComponent: function () { // if (this._alreadyRendered) return; // focus only at first show // this._alreadyRendered = true; return this.btnPause; }, afterRender: function() { this._setDefaults(this.props); }, _setDefaults: function (props) { var me = this; }, setSettings: function (props) { if (props) { if (this._state.cellName === undefined) this._state.cellName = props.cellName; this.$targetValue.text(props.targetValue); this.$currentValue.text(props.currentValue); this.$statusLabel.text(Common.Utils.String.format(this.textSearchIteration, props.cellName, props.iteration)); } }, onBtnPause: function () { this._state.isPause = !this._state.isPause; this.btnPause.setCaption(this._state.isPause ? this.textContinue : this.textPause); this.btnStep.setDisabled(!this._state.isPause); this._state.isPause ? this.api.asc_PauseGoalSeek() : this.api.asc_ContinueGoalSeek(); }, onBtnStep: function () { this.api.asc_StepGoalSeek(); }, onStopSelection: function (isFound) { this.btnPause.setDisabled(true); this.btnStep.setDisabled(true); this.btnOk.setDisabled(false); this.btnOk.focus(); this.$statusLabel.text(Common.Utils.String.format(isFound ? this.textFoundSolution : this.textNotFoundSolution, this._state.cellName)); }, textTitle: 'Goal Seek Status', textFoundSolution: 'Goal Seeking with Cell {0} found a solution.', textNotFoundSolution: 'Goal Seeking with Cell {0} may not have found a solution.', textSearchIteration: 'Goal Seeking with Cell {0} on iteration #{1}.', textTargetValue: 'Target value:', textCurrentValue: 'Current value:', textStep: 'Step', textPause: 'Pause', textContinue: 'Continue' }, SSE.Views.GoalSeekStatusDlg || {})) });