From 0a0a34b1dc9fbe83cdca8fc9df6015f7979f5237 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 15 Dec 2023 18:21:34 +0300 Subject: [PATCH] Lock header buttons --- .../main/lib/controller/ReviewChanges.js | 1 + apps/common/main/lib/view/Header.js | 29 ++++++++----------- apps/common/main/lib/view/ReviewChanges.js | 2 +- .../main/app/controller/FormsTab.js | 1 + .../main/app/controller/Main.js | 1 + .../main/app/controller/Toolbar.js | 19 +++++++----- .../main/app/controller/Viewport.js | 24 ++++----------- .../main/app/view/MailMergeSettings.js | 1 + .../main/app/view/SignatureSettings.js | 1 + apps/documenteditor/main/app/view/Toolbar.js | 4 ++- .../pdfeditor/main/app/controller/Viewport.js | 15 +++------- apps/pdfeditor/main/app/view/Toolbar.js | 3 +- .../main/app/controller/Toolbar.js | 2 ++ .../main/app/controller/Viewport.js | 16 +++------- .../main/app/view/Toolbar.js | 3 +- .../main/app/controller/Toolbar.js | 2 ++ .../main/app/controller/Viewport.js | 16 +++------- .../main/app/view/Toolbar.js | 3 +- 18 files changed, 60 insertions(+), 83 deletions(-) diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 03acbff802..3efc27a61a 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -894,6 +894,7 @@ define([ viewMode: false, reviewMode: true, fillFormMode: false, + viewDocMode: false, allowMerge: false, allowSignature: false, allowProtect: false, diff --git a/apps/common/main/lib/view/Header.js b/apps/common/main/lib/view/Header.js index 39a01978ae..e0234082fd 100644 --- a/apps/common/main/lib/view/Header.js +++ b/apps/common/main/lib/view/Header.js @@ -630,11 +630,12 @@ define([ getPanel: function (role, config) { var me = this; - function createTitleButton(iconid, slot, disabled, hintDirection, hintOffset, hintTitle) { + function createTitleButton(iconid, slot, disabled, hintDirection, hintOffset, hintTitle, lock) { return (new Common.UI.Button({ cls: 'btn-header', iconCls: iconid, disabled: disabled === true, + lock: lock, dataHint:'0', dataHintDirection: hintDirection ? hintDirection : (config.isDesktopApp ? 'right' : 'left'), dataHintOffset: hintOffset ? hintOffset : (config.isDesktopApp ? '10, -18' : '10, 10'), @@ -753,6 +754,7 @@ define([ caption: config.isReviewOnly ? me.textReview : me.textEdit, menu: true, visible: config.isReviewOnly || !config.canReview, + lock: [Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.disableOnStart, Common.enumLock.docLockView, Common.enumLock.docLockComments, Common.enumLock.docLockForms, Common.enumLock.fileMenuOpened, Common.enumLock.changeModeLock], dataHint: '0', dataHintDirection: 'bottom', dataHintOffset: 'big' @@ -803,8 +805,10 @@ define([ me.btnPrintQuick = createTitleButton('toolbar__icon icon--inverse btn-quick-print', $html.findById('#slot-btn-dt-print-quick'), true, undefined, undefined, 'Q'); me.btnSave = createTitleButton('toolbar__icon icon--inverse btn-save', $html.findById('#slot-btn-dt-save'), true, undefined, undefined, 'S'); - me.btnUndo = createTitleButton('toolbar__icon icon--inverse btn-undo', $html.findById('#slot-btn-dt-undo'), true, undefined, undefined, 'Z'); - me.btnRedo = createTitleButton('toolbar__icon icon--inverse btn-redo', $html.findById('#slot-btn-dt-redo'), true, undefined, undefined, 'Y'); + me.btnUndo = createTitleButton('toolbar__icon icon--inverse btn-undo', $html.findById('#slot-btn-dt-undo'), true, undefined, undefined, 'Z', + [Common.enumLock.undoLock, Common.enumLock.fileMenuOpened]); + me.btnRedo = createTitleButton('toolbar__icon icon--inverse btn-redo', $html.findById('#slot-btn-dt-redo'), true, undefined, undefined, 'Y', + [Common.enumLock.redoLock, Common.enumLock.fileMenuOpened]); return $html; } @@ -1023,9 +1027,11 @@ define([ return $panelUsers; else if (type == 'share') return this.btnShare; + else if (type == 'mode') + return this.btnDocMode; }, - lockHeaderBtns: function (alias, lock) { + lockHeaderBtns: function (alias, lock, cause) { var me = this; if ( alias == 'users' ) { if ( lock ) { @@ -1042,23 +1048,12 @@ define([ } } else { var _lockButton = function (btn) { - if ( btn ) { - if ( lock ) { - btn.keepState = { - disabled: btn.isDisabled() - }; - btn.setDisabled( true ); - } else { - btn.setDisabled( btn.keepState && btn.keepState.disabled || lock); - delete btn.keepState; - } - } + btn && Common.Utils.lockControls(cause, lock, {array: [btn]}); }; - switch ( alias ) { case 'undo': _lockButton(me.btnUndo); break; case 'redo': _lockButton(me.btnRedo); break; - case 'mode': me.btnDocMode && _lockButton(me.btnDocMode); break; + case 'mode': _lockButton(me.btnDocMode); break; default: break; } } diff --git a/apps/common/main/lib/view/ReviewChanges.js b/apps/common/main/lib/view/ReviewChanges.js index 7ab82348b6..dab7de765d 100644 --- a/apps/common/main/lib/view/ReviewChanges.js +++ b/apps/common/main/lib/view/ReviewChanges.js @@ -63,7 +63,7 @@ define([ hasCoeditingUsers: 'has-coediting-users', previewReviewMode: 'preview-review-mode', // display mode on Collaboration tab viewFormMode: 'view-form-mode', // view form mode on Forms tab - viewMode: 'view-mode', // view mode on disconnect, version history etc (used for locking buttons not in toolbar) + viewMode: 'view-mode', // view mode on disconnect, version history etc (used for locking buttons not in toolbar) or view mode from header mode button (for toolbar) hideComments: 'hide-comments', // no live comments and left panel is closed cantShare: 'cant-share' }; diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index 9ad0e2f5e0..5e3b3f0f3c 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -378,6 +378,7 @@ define([ viewMode: false, reviewMode: false, fillFormMode: true, + viewDocMode: false, allowMerge: false, allowSignature: false, allowProtect: false, diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 71675f39ec..990cff62a9 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -834,6 +834,7 @@ define([ viewMode: disable, reviewMode: false, fillFormMode: false, + viewDocMode: false, allowMerge: false, allowSignature: false, allowProtect: false, diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index ca136db52e..52921e6396 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -3390,7 +3390,8 @@ define([ }, onAppShowed: function (config) { - var me = this; + var me = this, + application = this.getApplication(); var compactview = !(config.isEdit || config.isRestrictedEdit && config.canFillForms && config.isFormCreator); if ( config.isEdit || config.isRestrictedEdit && config.canFillForms && config.isFormCreator) { @@ -3432,12 +3433,12 @@ define([ // if ( config.isDesktopApp ) { // if ( config.canProtect ) { // tab = {action: 'protect', caption: me.toolbar.textTabProtect, dataHintTitle: 'T', layoutname: 'toolbar-protect'}; - // $panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel(); + // $panel = application.getController('Common.Controllers.Protection').createToolbarPanel(); // // if ($panel) me.toolbar.addTab(tab, $panel, 6); // } // } - var drawtab = me.getApplication().getController('Common.Controllers.Draw'); + var drawtab = application.getController('Common.Controllers.Draw'); drawtab.setApi(me.api).setMode(config); $panel = drawtab.createToolbarPanel(); if ($panel) { @@ -3450,10 +3451,10 @@ define([ if ( config.canProtect ) { tab = {action: 'protect', caption: me.toolbar.textTabProtect, layoutname: 'toolbar-protect', dataHintTitle: 'T'}; - $panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel(); + $panel = application.getController('Common.Controllers.Protection').createToolbarPanel(); if ($panel) { (config.isSignatureSupport || config.isPasswordSupport) && $panel.append($('
')); - var doctab = me.getApplication().getController('DocProtection'); + var doctab = application.getController('DocProtection'); $panel.append(doctab.createToolbarPanel()); me.toolbar.addTab(tab, $panel, 7); me.toolbar.setVisible('protect', Common.UI.LayoutManager.isElementVisible('toolbar-protect')); @@ -3461,15 +3462,17 @@ define([ } } - var links = me.getApplication().getController('Links'); + var links = application.getController('Links'); links.setApi(me.api).setConfig({toolbar: me}); Array.prototype.push.apply(me.toolbar.lockControls, links.getView('Links').getButtons()); + + me.toolbar.lockControls.push(application.getController('Viewport').getView('Common.Views.Header').getButton('mode')); } if ( config.isEdit && config.canFeatureContentControl && config.canFeatureForms || config.isRestrictedEdit && config.canFillForms ) { if (config.isFormCreator) { tab = {caption: me.textTabForms, action: 'forms', dataHintTitle: 'M'}; - var forms = me.getApplication().getController('FormsTab'); + var forms = application.getController('FormsTab'); forms.setApi(me.api).setConfig({toolbar: me, config: config}); $panel = forms.createToolbarPanel(); if ($panel) { @@ -3483,7 +3486,7 @@ define([ config.isEdit && config.canFeatureContentControl && me.onChangeSdtGlobalSettings(); tab = {caption: me.toolbar.textTabView, action: 'view', extcls: config.isEdit ? 'canedit' : '', layoutname: 'toolbar-view', dataHintTitle: 'W'}; - var viewtab = me.getApplication().getController('ViewTab'); + var viewtab = application.getController('ViewTab'); viewtab.setApi(me.api).setConfig({toolbar: me, mode: config}); $panel = viewtab.createToolbarPanel(); if ($panel) { diff --git a/apps/documenteditor/main/app/controller/Viewport.js b/apps/documenteditor/main/app/controller/Viewport.js index 4d9735c89b..871e49bca8 100644 --- a/apps/documenteditor/main/app/controller/Viewport.js +++ b/apps/documenteditor/main/app/controller/Viewport.js @@ -90,23 +90,13 @@ define([ Common.Utils.InternalSettings.get('toolbar-height-compact') : Common.Utils.InternalSettings.get('toolbar-height-normal'); }, 'undo:disabled' : function (state) { - if ( me.header.btnUndo ) { - if ( me.header.btnUndo.keepState ) - me.header.btnUndo.keepState.disabled = state; - else me.header.btnUndo.setDisabled(state); - } + me.header.lockHeaderBtns( 'undo', state, Common.enumLock.undoLock ); }, 'redo:disabled' : function (state) { - if ( me.header.btnRedo ) - if ( me.header.btnRedo.keepState ) - me.header.btnRedo.keepState.disabled = state; - else me.header.btnRedo.setDisabled(state); + me.header.lockHeaderBtns( 'redo', state, Common.enumLock.redoLock ); }, 'docmode:disabled' : function (state) { - if ( me.header.btnDocMode ) - if ( me.header.btnDocMode.keepState ) - me.header.btnDocMode.keepState.disabled = state; - else me.header.btnDocMode.setDisabled(state); + me.header.lockHeaderBtns( 'mode', state, Common.enumLock.changeModeLock); }, 'print:disabled' : function (state) { if ( me.header.btnPrint ) @@ -263,10 +253,10 @@ define([ var me = this; var _need_disable = opts == 'show'; - me.header.lockHeaderBtns( 'undo', _need_disable ); - me.header.lockHeaderBtns( 'redo', _need_disable ); + me.header.lockHeaderBtns( 'undo', _need_disable, Common.enumLock.fileMenuOpened ); + me.header.lockHeaderBtns( 'redo', _need_disable, Common.enumLock.fileMenuOpened ); me.header.lockHeaderBtns( 'users', _need_disable ); - me.header.lockHeaderBtns( 'mode', _need_disable ); + me.header.lockHeaderBtns( 'mode', _need_disable, Common.enumLock.fileMenuOpened ); }, applySettings: function () { @@ -287,13 +277,11 @@ define([ if (this.header.btnEdit) this.header.btnEdit.hide(); this.header.lockHeaderBtns( 'rename-user', true); - this.header.lockHeaderBtns( 'mode', true); } }, SetDisabled: function(disable) { this.header && this.header.lockHeaderBtns( 'rename-user', disable); - this.header && this.header.lockHeaderBtns( 'mode', disable); }, onSearchShow: function () { diff --git a/apps/documenteditor/main/app/view/MailMergeSettings.js b/apps/documenteditor/main/app/view/MailMergeSettings.js index 7299efb748..1f474e3d6d 100644 --- a/apps/documenteditor/main/app/view/MailMergeSettings.js +++ b/apps/documenteditor/main/app/view/MailMergeSettings.js @@ -839,6 +839,7 @@ define([ viewMode: disable, reviewMode: false, fillFormMode: false, + viewDocMode: false, allowMerge: true, allowSignature: false, allowProtect: false, diff --git a/apps/documenteditor/main/app/view/SignatureSettings.js b/apps/documenteditor/main/app/view/SignatureSettings.js index 34e1896284..b189887029 100644 --- a/apps/documenteditor/main/app/view/SignatureSettings.js +++ b/apps/documenteditor/main/app/view/SignatureSettings.js @@ -409,6 +409,7 @@ define([ viewMode: disable, reviewMode: false, fillFormMode: false, + viewDocMode: false, allowMerge: false, allowSignature: true, allowProtect: true, diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index f7d8ffac0b..32614b62bf 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -117,7 +117,9 @@ define([ disableOnStart: 'on-start', complexForm: 'complex-form', formsNoRoles: 'no-roles', - fixedForm: 'fixed-form' + fixedForm: 'fixed-form', + fileMenuOpened: 'file-menu-opened', + changeModeLock: 'change-mode-lock' }; for (var key in enumLock) { if (enumLock.hasOwnProperty(key)) { diff --git a/apps/pdfeditor/main/app/controller/Viewport.js b/apps/pdfeditor/main/app/controller/Viewport.js index 0e731e04f1..481b88c958 100644 --- a/apps/pdfeditor/main/app/controller/Viewport.js +++ b/apps/pdfeditor/main/app/controller/Viewport.js @@ -90,17 +90,10 @@ define([ Common.Utils.InternalSettings.get('toolbar-height-compact') : Common.Utils.InternalSettings.get('toolbar-height-normal'); }, 'undo:disabled' : function (state) { - if ( me.header.btnUndo ) { - if ( me.header.btnUndo.keepState ) - me.header.btnUndo.keepState.disabled = state; - else me.header.btnUndo.setDisabled(state); - } + me.header.lockHeaderBtns( 'undo', state, Common.enumLock.undoLock ); }, 'redo:disabled' : function (state) { - if ( me.header.btnRedo ) - if ( me.header.btnRedo.keepState ) - me.header.btnRedo.keepState.disabled = state; - else me.header.btnRedo.setDisabled(state); + me.header.lockHeaderBtns( 'redo', state, Common.enumLock.redoLock ); }, 'print:disabled' : function (state) { if ( me.header.btnPrint ) @@ -243,8 +236,8 @@ define([ var me = this; var _need_disable = opts == 'show'; - me.header.lockHeaderBtns( 'undo', _need_disable ); - me.header.lockHeaderBtns( 'redo', _need_disable ); + me.header.lockHeaderBtns( 'undo', _need_disable, Common.enumLock.fileMenuOpened ); + me.header.lockHeaderBtns( 'redo', _need_disable, Common.enumLock.fileMenuOpened ); me.header.lockHeaderBtns( 'users', _need_disable ); }, diff --git a/apps/pdfeditor/main/app/view/Toolbar.js b/apps/pdfeditor/main/app/view/Toolbar.js index 91a3299ad2..a73db31536 100644 --- a/apps/pdfeditor/main/app/view/Toolbar.js +++ b/apps/pdfeditor/main/app/view/Toolbar.js @@ -77,7 +77,8 @@ define([ lostConnect: 'disconnect', disableOnStart: 'on-start', firstPage: 'first-page', - lastPage: 'last-page' + lastPage: 'last-page', + fileMenuOpened: 'file-menu-opened' }; for (var key in enumLock) { if (enumLock.hasOwnProperty(key)) { diff --git a/apps/presentationeditor/main/app/controller/Toolbar.js b/apps/presentationeditor/main/app/controller/Toolbar.js index 91d17af381..50525d371a 100644 --- a/apps/presentationeditor/main/app/controller/Toolbar.js +++ b/apps/presentationeditor/main/app/controller/Toolbar.js @@ -376,6 +376,8 @@ define([ toolbar.btnInsVideo && toolbar.btnInsVideo.on('click', _.bind(this.onAddVideo, this)); this.onSetupCopyStyleButton(); + this.onBtnChangeState('undo:disabled', toolbar.btnUndo, toolbar.btnUndo.isDisabled()); + this.onBtnChangeState('redo:disabled', toolbar.btnRedo, toolbar.btnRedo.isDisabled()); }, setApi: function(api) { diff --git a/apps/presentationeditor/main/app/controller/Viewport.js b/apps/presentationeditor/main/app/controller/Viewport.js index 7bf8e7b0b8..d243da09c5 100644 --- a/apps/presentationeditor/main/app/controller/Viewport.js +++ b/apps/presentationeditor/main/app/controller/Viewport.js @@ -90,18 +90,10 @@ define([ Common.Utils.InternalSettings.get('toolbar-height-compact') : Common.Utils.InternalSettings.get('toolbar-height-normal'); }, 'undo:disabled' : function (state) { - if ( me.header.btnUndo ) { - if ( me.header.btnUndo.keepState ) - me.header.btnUndo.keepState.disabled = state; - else me.header.btnUndo.setDisabled(state); - } + me.header.lockHeaderBtns( 'undo', state, Common.enumLock.undoLock ); }, 'redo:disabled' : function (state) { - if ( me.header.btnRedo ) { - if ( me.header.btnRedo.keepState ) - me.header.btnRedo.keepState.disabled = state; - else me.header.btnRedo.setDisabled(state); - } + me.header.lockHeaderBtns( 'redo', state, Common.enumLock.redoLock ); }, 'print:disabled' : function (state) { if ( me.header.btnPrint ) @@ -313,8 +305,8 @@ define([ var me = this; var _need_disable = opts == 'show'; - me.header.lockHeaderBtns( 'undo', _need_disable ); - me.header.lockHeaderBtns( 'redo', _need_disable ); + me.header.lockHeaderBtns( 'undo', _need_disable, Common.enumLock.fileMenuOpened ); + me.header.lockHeaderBtns( 'redo', _need_disable, Common.enumLock.fileMenuOpened ); me.header.lockHeaderBtns( 'users', _need_disable ); }, diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js index 37cca0df7d..275102498f 100644 --- a/apps/presentationeditor/main/app/view/Toolbar.js +++ b/apps/presentationeditor/main/app/view/Toolbar.js @@ -100,7 +100,8 @@ define([ noAnimationRepeat: 'no-animation-repeat', noAnimationDuration: 'no-animation-duration', timingLock: 'timing-lock', - copyLock: 'can-copy' + copyLock: 'can-copy', + fileMenuOpened: 'file-menu-opened' }; for (var key in enumLock) { if (enumLock.hasOwnProperty(key)) { diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 272ce78e88..888dec05ca 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -496,6 +496,8 @@ define([ Common.Gateway.on('insertimage', _.bind(this.insertImage, this)); this.onSetupCopyStyleButton(); + this.onBtnChangeState('undo:disabled', toolbar.btnUndo, toolbar.btnUndo.isDisabled()); + this.onBtnChangeState('redo:disabled', toolbar.btnRedo, toolbar.btnRedo.isDisabled()); } }, diff --git a/apps/spreadsheeteditor/main/app/controller/Viewport.js b/apps/spreadsheeteditor/main/app/controller/Viewport.js index 3518737755..58b61d8c53 100644 --- a/apps/spreadsheeteditor/main/app/controller/Viewport.js +++ b/apps/spreadsheeteditor/main/app/controller/Viewport.js @@ -99,18 +99,10 @@ define([ Common.Utils.InternalSettings.get('toolbar-height-compact') : Common.Utils.InternalSettings.get('toolbar-height-normal'); }, 'undo:disabled' : function (state) { - if ( me.header.btnUndo ) { - if ( me.header.btnUndo.keepState ) - me.header.btnUndo.keepState.disabled = state; - else me.header.btnUndo.setDisabled(state); - } + me.header.lockHeaderBtns( 'undo', state, Common.enumLock.undoLock ); }, 'redo:disabled' : function (state) { - if ( me.header.btnRedo ) { - if ( me.header.btnRedo.keepState ) - me.header.btnRedo.keepState.disabled = state; - else me.header.btnRedo.setDisabled(state); - } + me.header.lockHeaderBtns( 'redo', state, Common.enumLock.redoLock ); }, 'print:disabled' : function (state) { if ( me.header.btnPrint ) @@ -286,8 +278,8 @@ define([ var me = this; var _need_disable = opts == 'show'; - me.header.lockHeaderBtns( 'undo', _need_disable ); - me.header.lockHeaderBtns( 'redo', _need_disable ); + me.header.lockHeaderBtns( 'undo', _need_disable, Common.enumLock.fileMenuOpened ); + me.header.lockHeaderBtns( 'redo', _need_disable, Common.enumLock.fileMenuOpened ); me.header.lockHeaderBtns( 'users', _need_disable ); }, diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index e4df8bd568..03e971ef9a 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -113,7 +113,8 @@ define([ wsLockFormatFill: 'worksheet-lock-format-fill', editVisibleArea: 'is-visible-area', userProtected: 'cell-user-protected', - pageBreakLock: 'page-break-lock' + pageBreakLock: 'page-break-lock', + fileMenuOpened: 'file-menu-opened' }; for (var key in enumLock) { if (enumLock.hasOwnProperty(key)) {