From 685a0a42d3c670bcfd725d6538f09ef6d55d3277 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 Jun 2018 12:27:11 +0300 Subject: [PATCH 01/10] [SSE] Add layout tab --- apps/documenteditor/main/app/view/Toolbar.js | 8 +- .../main/app/controller/Main.js | 1 + .../main/app/controller/Print.js | 1 + .../main/app/controller/Toolbar.js | 183 +++++++- .../main/app/template/Toolbar.template | 14 + .../main/app/view/DocumentHolder.js | 8 +- .../main/app/view/PrintSettings.js | 10 +- .../main/app/view/Toolbar.js | 428 +++++++++++++++++- 8 files changed, 617 insertions(+), 36 deletions(-) diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 0a7c3e2de6..d4cfb509e1 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -2323,7 +2323,7 @@ define([ textTabFile: 'File', textTabHome: 'Home', textTabInsert: 'Insert', - textTabLayout: 'Page Layout', + textTabLayout: 'Layout', textTabReview: 'Review', capBtnInsShape: 'Shape', capBtnInsTextbox: 'Text Box', @@ -2338,12 +2338,12 @@ define([ tipImgAlign: 'Align objects', tipImgGroup: 'Group objects', tipImgWrapping: 'Wrap text', - tipSendForward: 'Send forward', + tipSendForward: 'Bring forward', tipSendBackward: 'Send backward', capImgAlign: 'Align', capImgGroup: 'Group', - capImgForward: 'Move forward', - capImgBackward: 'Move backward', + capImgForward: 'Bring Forward', + capImgBackward: 'Send Backward', capImgWrapping: 'Wrapping', capBtnComment: 'Comment', textColumnsCustom: 'Custom Columns', diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 509672c18f..0976cd2b5b 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -1791,6 +1791,7 @@ define([ Common.Utils.InternalSettings.set("sse-settings-unit", value); this.getApplication().getController('RightMenu').updateMetricUnit(); this.getApplication().getController('Print').getView('MainSettingsPrint').updateMetricUnit(); + this.getApplication().getController('Toolbar').getView('Toolbar').updateMetricUnit(); }, _compareActionStrong: function(obj1, obj2){ diff --git a/apps/spreadsheeteditor/main/app/controller/Print.js b/apps/spreadsheeteditor/main/app/controller/Print.js index bf207fff03..1075661554 100644 --- a/apps/spreadsheeteditor/main/app/controller/Print.js +++ b/apps/spreadsheeteditor/main/app/controller/Print.js @@ -203,6 +203,7 @@ define([ if (this._changedProps[index]) this.api.asc_setPageOptions(this._changedProps[index], index); } + Common.NotificationCenter.trigger('page:settings'); }, onShowMainSettingsPrint: function() { diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 871dba69fc..f5fae8d95c 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -117,6 +117,8 @@ define([ } } }); + Common.NotificationCenter.on('page:settings', _.bind(this.onApiSheetChanged, this)); + this.editMode = true; this._isAddingShape = false; this._state = { @@ -155,7 +157,10 @@ define([ numformatinfo: undefined, numformattype: undefined, numformat: undefined, - langId: undefined + langId: undefined, + pgsize: [0, 0], + pgmargins: undefined, + pgorient: undefined }; var checkInsertAutoshape = function(e, action) { @@ -343,6 +348,15 @@ define([ $('#id-toolbar-menu-new-fontcolor').on('click', _.bind(this.onNewTextColor, this)); $('#id-toolbar-menu-new-paracolor').on('click', _.bind(this.onNewBackColor, this)); $('#id-toolbar-menu-new-bordercolor').on('click', _.bind(this.onNewBorderColor, this)); + toolbar.btnPageOrient.menu.on('item:click', _.bind(this.onPageOrientSelect, this)); + toolbar.btnPageMargins.menu.on('item:click', _.bind(this.onPageMarginsSelect, this)); + toolbar.mnuPageSize.on('item:click', _.bind(this.onPageSizeClick, this)); + toolbar.btnImgGroup.menu.on('item:click', _.bind(this.onImgGroupSelect, this)); + toolbar.btnImgBackward.menu.on('item:click', _.bind(this.onImgArrangeSelect, this)); + toolbar.btnImgForward.menu.on('item:click', _.bind(this.onImgArrangeSelect, this)); + toolbar.btnImgAlign.menu.on('item:click', _.bind(this.onImgAlignSelect, this)); + toolbar.btnImgForward.on('click', this.onImgArrangeSelect.bind(this, 'forward')); + toolbar.btnImgBackward.on('click', this.onImgArrangeSelect.bind(this, 'backward')); this.onSetupCopyStyleButton(); } @@ -1669,7 +1683,68 @@ define([ onApiZoomChange: function(zf, type){}, - onApiSheetChanged: function() {}, + onApiSheetChanged: function() { + if (!this.toolbar.mode.isEdit) return; + + var props = this.api.asc_getPageOptions(this.api.asc_getActiveWorksheetIndex()), + opt = props.asc_getPageSetup(); + + this.onApiPageOrient(opt.asc_getOrientation()); + this.onApiPageSize(opt.asc_getWidth(), opt.asc_getHeight()); + this.onApiPageMargins(props.asc_getPageMargins()); + }, + + onApiPageSize: function(w, h) { + if (this._state.pgorient===undefined) return; + + if (Math.abs(this._state.pgsize[0] - w) > 0.01 || + Math.abs(this._state.pgsize[1] - h) > 0.01) { + this._state.pgsize = [w, h]; + if (this.toolbar.mnuPageSize) { + this.toolbar.mnuPageSize.clearAll(); + _.each(this.toolbar.mnuPageSize.items, function(item){ + if (item.value && typeof(item.value) == 'object' && + Math.abs(item.value[0] - w) < 0.01 && Math.abs(item.value[1] - h) < 0.01) { + item.setChecked(true); + return false; + } + }, this); + } + } + }, + + onApiPageMargins: function(props) { + if (props) { + var left = props.asc_getLeft(), + top = props.asc_getTop(), + right = props.asc_getRight(), + bottom = props.asc_getBottom(); + + if (!this._state.pgmargins || Math.abs(this._state.pgmargins[0] - top) > 0.01 || + Math.abs(this._state.pgmargins[1] - left) > 0.01 || Math.abs(this._state.pgmargins[2] - bottom) > 0.01 || + Math.abs(this._state.pgmargins[3] - right) > 0.01) { + this._state.pgmargins = [top, left, bottom, right]; + if (this.toolbar.btnPageMargins.menu) { + this.toolbar.btnPageMargins.menu.clearAll(); + _.each(this.toolbar.btnPageMargins.menu.items, function(item){ + if (item.value && typeof(item.value) == 'object' && + Math.abs(item.value[0] - top) < 0.01 && Math.abs(item.value[1] - left) < 0.01 && + Math.abs(item.value[2] - bottom) < 0.01 && Math.abs(item.value[3] - right) < 0.01) { + item.setChecked(true); + return false; + } + }, this); + } + } + } + }, + + onApiPageOrient: function(orient) { + if (this._state.pgorient !== orient) { + this.toolbar.btnPageOrient.menu.items[orient].setChecked(true); + this._state.pgorient = orient; + } + }, onApiEditorSelectionChanged: function(fontobj) { if (!this.editMode) return; @@ -1819,6 +1894,12 @@ define([ } */ + need_disable = (selectionType == Asc.c_oAscSelectionType.RangeCells || selectionType == Asc.c_oAscSelectionType.RangeCol || + selectionType == Asc.c_oAscSelectionType.RangeRow || selectionType == Asc.c_oAscSelectionType.RangeMax); + toolbar.lockToolbar(SSE.enumLock.selRange, need_disable, { array: [toolbar.btnImgAlign, toolbar.btnImgBackward, toolbar.btnImgForward, toolbar.btnImgGroup]}); + toolbar.btnImgGroup.menu.items[0].setDisabled(!this.api.asc_canGroupGraphicsObjects()); + toolbar.btnImgGroup.menu.items[1].setDisabled(!this.api.asc_canUnGroupGraphicsObjects()); + if (editOptionsDisabled) return; /* read font params */ @@ -2901,7 +2982,7 @@ define([ this.onApiEditCell(this.api.isRangeSelection ? Asc.c_oAscCellEditorState.editStart : Asc.c_oAscCellEditorState.editEnd); var toolbar = this.toolbar; - toolbar.lockToolbar(SSE.enumLock.selRange, this.api.isRangeSelection); + toolbar.lockToolbar(SSE.enumLock.selRangeEdit, this.api.isRangeSelection); this.setDisabledComponents([toolbar.btnUndo], this.api.isRangeSelection || !this.api.asc_getCanUndo()); this.setDisabledComponents([toolbar.btnRedo], this.api.isRangeSelection || !this.api.asc_getCanRedo()); @@ -2971,7 +3052,7 @@ define([ tab = {action: 'pivot', caption: me.textPivot}; $panel = me.getApplication().getController('PivotTable').createToolbarPanel(); if ($panel) { - me.toolbar.addTab(tab, $panel, 3); + me.toolbar.addTab(tab, $panel, 4); me.toolbar.setVisible('pivot', true); } } @@ -2979,7 +3060,7 @@ define([ var tab = {action: 'review', caption: me.toolbar.textTabCollaboration}; var $panel = me.getApplication().getController('Common.Controllers.ReviewChanges').createToolbarPanel(); if ( $panel ) - me.toolbar.addTab(tab, $panel, 4); + me.toolbar.addTab(tab, $panel, 5); if ( config.isDesktopApp ) { // hide 'print' and 'save' buttons group and next separator @@ -2996,7 +3077,7 @@ define([ tab = {action: 'protect', caption: me.toolbar.textTabProtect}; $panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel(); if ($panel) - me.toolbar.addTab(tab, $panel, 5); + me.toolbar.addTab(tab, $panel, 6); } } } @@ -3056,6 +3137,96 @@ define([ } }, + onPageSizeClick: function(menu, item, state) { + if (this.api && state) { + this._state.pgsize = [0, 0]; + // this.api.change_DocSize(item.value[0], item.value[1]); + + Common.component.Analytics.trackEvent('ToolBar', 'Page Size'); + } + + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + }, + + onPageMarginsSelect: function(menu, item) { + if (this.api) { + this._state.pgmargins = undefined; + if (item.value !== 'advanced') { + // var props = new Asc.CDocumentSectionProps(); + // props.put_TopMargin(item.value[0]); + // props.put_LeftMargin(item.value[1]); + // props.put_BottomMargin(item.value[2]); + // props.put_RightMargin(item.value[3]); + // this.api.asc_SetSectionProps(props); + } else { + // var win, props, + // me = this; + // win = new SSE.Views.PageMarginsDialog({ + // handler: function(dlg, result) { + // if (result == 'ok') { + // props = dlg.getSettings(); + // var mnu = me.toolbar.btnPageMargins.menu.items[0]; + // mnu.setVisible(true); + // mnu.setChecked(true); + // mnu.options.value = mnu.value = [props.get_TopMargin(), props.get_LeftMargin(), props.get_BottomMargin(), props.get_RightMargin()]; + // $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options})); + // Common.localStorage.setItem("sse-pgmargins-top", props.asc_getTopn()); + // Common.localStorage.setItem("sse-pgmargins-left", props.asc_getLeft()); + // Common.localStorage.setItem("sse-pgmargins-bottom", props.asc_getBottom()); + // Common.localStorage.setItem("sse-pgmargins-right", props.asc_getRight()); + // + // me.api.asc_SetSectionProps(props); + // Common.NotificationCenter.trigger('edit:complete', me.toolbar); + // } + // } + // }); + // win.show(); + // win.setSettings(me.api.asc_getPageOptions(me.api.asc_getActiveWorksheetIndex())); + } + + Common.component.Analytics.trackEvent('ToolBar', 'Page Margins'); + } + + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + }, + + onPageOrientSelect: function(menu, item) { + this._state.pgorient = undefined; + if (this.api && item.checked) { + // this.api.change_PageOrient(item.value); + } + + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + Common.component.Analytics.trackEvent('ToolBar', 'Page Orientation'); + }, + + onImgGroupSelect: function(menu, item) { + if (this.api) + this.api[(item.value == 'grouping') ? 'asc_groupGraphicsObjects' : 'asc_unGroupGraphicsObjects'](); + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + Common.component.Analytics.trackEvent('ToolBar', 'Objects Group'); + }, + + onImgArrangeSelect: function(menu, item) { + if (this.api) { + if ( menu == 'forward' ) + this.api.asc_setSelectedDrawingObjectLayer(Asc.c_oAscDrawingLayerType.BringForward); + else if ( menu == 'backward' ) + this.api.asc_setSelectedDrawingObjectLayer(Asc.c_oAscDrawingLayerType.SendBackward); + else + this.api.asc_setSelectedDrawingObjectLayer(item.value); + } + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + Common.component.Analytics.trackEvent('ToolBar', 'Objects Arrange'); + }, + + onImgAlignSelect: function(menu, item) { + if (this.api) + // this.api.asc_setSelectedDrawingObjectLayer(item.value); + Common.NotificationCenter.trigger('edit:complete', this.toolbar); + Common.component.Analytics.trackEvent('ToolBar', 'Objects Align'); + }, + textEmptyImgUrl : 'You need to specify image URL.', warnMergeLostData : 'Operation can destroy data in the selected cells.
Continue?', textWarning : 'Warning', diff --git a/apps/spreadsheeteditor/main/app/template/Toolbar.template b/apps/spreadsheeteditor/main/app/template/Toolbar.template index a7deee3737..708cb79365 100644 --- a/apps/spreadsheeteditor/main/app/template/Toolbar.template +++ b/apps/spreadsheeteditor/main/app/template/Toolbar.template @@ -136,6 +136,20 @@ +
+
+ + + +
+
+
+ + + + +
+
\ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js index cccc577efc..f518b031eb 100644 --- a/apps/spreadsheeteditor/main/app/view/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/view/DocumentHolder.js @@ -945,7 +945,13 @@ define([ txtPercentage: 'Percentage', txtFraction: 'Fraction', txtText: 'Text', - textMoreFormats: 'More formats' + textMoreFormats: 'More formats', + textShapeAlignLeft : 'Align Left', + textShapeAlignRight : 'Align Right', + textShapeAlignCenter : 'Align Center', + textShapeAlignTop : 'Align Top', + textShapeAlignBottom : 'Align Bottom', + textShapeAlignMiddle : 'Align Middle' }, SSE.Views.DocumentHolder || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/PrintSettings.js b/apps/spreadsheeteditor/main/app/view/PrintSettings.js index 16f5879daf..a36a1c201a 100644 --- a/apps/spreadsheeteditor/main/app/view/PrintSettings.js +++ b/apps/spreadsheeteditor/main/app/view/PrintSettings.js @@ -119,12 +119,12 @@ define([ 'text!spreadsheeteditor/main/app/template/PrintSettings.template', {value:'215.9|279.4', displayValue:'US Letter (21,59cm x 27,94cm)', caption: 'US Letter'}, {value:'215.9|355.6', displayValue:'US Legal (21,59cm x 35,56cm)', caption: 'US Legal'}, {value:'210|297', displayValue:'A4 (21cm x 29,7cm)', caption: 'A4'}, - {value:'148.1|209.9', displayValue:'A5 (14,81cm x 20,99cm)', caption: 'A5'}, - {value:'176|250.1', displayValue:'B5 (17,6cm x 25,01cm)', caption: 'B5'}, + {value:'148|210', displayValue:'A5 (14,8cm x 21cm)', caption: 'A5'}, + {value:'176|250', displayValue:'B5 (17,6cm x 25cm)', caption: 'B5'}, {value:'104.8|241.3', displayValue:'Envelope #10 (10,48cm x 24,13cm)', caption: 'Envelope #10'}, - {value:'110.1|220.1', displayValue:'Envelope DL (11,01cm x 22,01cm)', caption: 'Envelope DL'}, - {value:'279.4|431.7', displayValue:'Tabloid (27,94cm x 43,17cm)', caption: 'Tabloid'}, - {value:'297|420.1', displayValue:'A3 (29,7cm x 42,01cm)', caption: 'A3'}, + {value:'110|220', displayValue:'Envelope DL (11cm x 22cm)', caption: 'Envelope DL'}, + {value:'279.4|431.8', displayValue:'Tabloid (27,94cm x 43,18cm)', caption: 'Tabloid'}, + {value:'297|420', displayValue:'A3 (29,7cm x 42cm)', caption: 'A3'}, {value:'304.8|457.1', displayValue:'Tabloid Oversize (30,48cm x 45,71cm)', caption: 'Tabloid Oversize'}, {value:'196.8|273', displayValue:'ROC 16K (19,68cm x 27,3cm)', caption: 'ROC 16K'}, {value:'119.9|234.9', displayValue:'Envelope Choukei 3 (11,99cm x 23,49cm)', caption: 'Envelope Choukei 3'}, diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index d3557be920..d79915ab37 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -69,6 +69,7 @@ define([ selChart: 'sel-chart', selChartText: 'sel-chart-txt', selRange: 'sel-range', + selRangeEdit: 'sel-range-edit', lostConnect: 'disconnect', coAuth: 'co-auth', coAuthText: 'co-auth-text', @@ -232,7 +233,7 @@ define([ cls : 'btn-toolbar', iconCls : 'btn-formula', split : true, - lock : [_set.editText, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.selRange, _set.lostConnect, _set.coAuth], + lock : [_set.editText, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.selRangeEdit, _set.lostConnect, _set.coAuth], menu : new Common.UI.Menu({ style : 'min-width: 110px', items : [ @@ -279,7 +280,7 @@ define([ cls : 'input-group-nr', menuStyle : 'min-width: 180px;', hint : me.tipNumFormat, - lock : [_set.editCell, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.selRange, _set.lostConnect, _set.coAuth], + lock : [_set.editCell, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.selRangeEdit, _set.lostConnect, _set.coAuth], itemsTemplate: formatTemplate, editable : false, data : me.numFormatData @@ -338,7 +339,8 @@ define([ tabs: [ { caption: me.textTabFile, action: 'file', extcls: 'canedit', haspanel:false}, { caption: me.textTabHome, action: 'home', extcls: 'canedit'}, - { caption: me.textTabInsert, action: 'ins', extcls: 'canedit'} + { caption: me.textTabInsert, action: 'ins', extcls: 'canedit'}, + {caption: me.textTabLayout, action: 'layout', extcls: 'canedit'} ]} ); @@ -346,7 +348,7 @@ define([ cls : 'input-group-nr', menuStyle : 'min-width: 55px;', hint : me.tipFontSize, - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect], + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect], data : [ { value: 8, displayValue: "8" }, { value: 9, displayValue: "9" }, @@ -372,7 +374,7 @@ define([ menuCls : 'scrollable-menu', menuStyle : 'min-width: 325px;', hint : me.tipFontName, - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect], + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect], store : new Common.Collections.Fonts() }); @@ -395,21 +397,21 @@ define([ id : 'id-toolbar-btn-incfont', cls : 'btn-toolbar', iconCls : 'btn-incfont', - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect] + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect] }); me.btnDecFontSize = new Common.UI.Button({ id : 'id-toolbar-btn-decfont', cls : 'btn-toolbar', iconCls : 'btn-decfont', - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect] + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect] }); me.btnBold = new Common.UI.Button({ id : 'id-toolbar-btn-bold', cls : 'btn-toolbar', iconCls : 'btn-bold', - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect], + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect], enableToggle: true }); @@ -417,7 +419,7 @@ define([ id : 'id-toolbar-btn-italic', cls : 'btn-toolbar', iconCls : 'btn-italic', - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect], + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect], enableToggle: true }); @@ -425,7 +427,7 @@ define([ id : 'id-toolbar-btn-underline', cls : 'btn-toolbar', iconCls : 'btn-underline', - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect], + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect], enableToggle: true }); @@ -433,7 +435,7 @@ define([ id: 'id-toolbar-btn-strikeout', cls: 'btn-toolbar', iconCls: 'btn-strikeout', - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect], + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect], enableToggle: true }); @@ -444,7 +446,7 @@ define([ icls : 'btn-subscript', split : true, enableToggle: true, - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect], + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect], menu : new Common.UI.Menu({ items: [ { @@ -475,7 +477,7 @@ define([ cls : 'btn-toolbar', iconCls : 'btn-fontcolor', split : true, - lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect], + lock : [_set.selImage, _set.editFormula, _set.selRangeEdit, _set.coAuth, _set.coAuthText, _set.lostConnect], menu : new Common.UI.Menu({ items: [ { template: _.template('
') }, @@ -832,7 +834,7 @@ define([ cls : 'input-group-nr', menuStyle : 'min-width: 180px;', hint : me.tipNumFormat, - lock : [_set.editCell, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.selRange, _set.lostConnect, _set.coAuth], + lock : [_set.editCell, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.selRangeEdit, _set.lostConnect, _set.coAuth], itemsTemplate: formatTemplate, editable : false, data : me.numFormatData @@ -899,7 +901,7 @@ define([ cls : 'btn-toolbar', iconCls : 'btn-formula', split : true, - lock : [_set.editText, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.selRange, _set.lostConnect, _set.coAuth], + lock : [_set.editText, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.selRangeEdit, _set.lostConnect, _set.coAuth], menu : new Common.UI.Menu({ style : 'min-width: 110px', items : [ @@ -920,7 +922,7 @@ define([ id : 'id-toolbar-btn-insertrange', cls : 'btn-toolbar', iconCls : 'btn-named-range', - lock : [_set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.lostConnect, _set.coAuth, _set.selRange], + lock : [_set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.lostConnect, _set.coAuth, _set.selRangeEdit], menu : new Common.UI.Menu({ style : 'min-width: 110px', items : [ @@ -946,7 +948,7 @@ define([ id : 'id-toolbar-btn-clear', cls : 'btn-toolbar', iconCls : 'btn-clearstyle', - lock : [_set.lostConnect, _set.coAuth, _set.selRange], + lock : [_set.lostConnect, _set.coAuth, _set.selRangeEdit], menu : new Common.UI.Menu({ style : 'min-width: 110px', items : [ @@ -1202,6 +1204,237 @@ define([ var hidetip = Common.localStorage.getItem("sse-hide-synch"); me.showSynchTip = !(hidetip && parseInt(hidetip) == 1); // me.needShowSynchTip = false; + + me.btnPageOrient = new Common.UI.Button({ + id: 'tlbtn-pageorient', + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-pageorient', + caption: me.capBtnPageOrient, + lock : [_set.lostConnect, _set.coAuth], + menu: new Common.UI.Menu({ + cls: 'ppm-toolbar', + items: [ + { + caption: me.textPortrait, + iconCls: 'mnu-orient-portrait', + checkable: true, + toggleGroup: 'menuOrient', + value: true + }, + { + caption: me.textLandscape, + iconCls: 'mnu-orient-landscape', + checkable: true, + toggleGroup: 'menuOrient', + value: false + } + ] + }) + }); + + var pageMarginsTemplate = _.template('
<%= caption %>
' + + '<% if (options.value !== null) { %>
' + + '' + + '
' + + '' + + '
' + + '<% } %>
'); + + me.btnPageMargins = new Common.UI.Button({ + id: 'tlbtn-pagemargins', + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-pagemargins', + caption: me.capBtnMargins, + lock : [_set.lostConnect, _set.coAuth], + menu: new Common.UI.Menu({ + items: [ + { + caption: me.textMarginsLast, + checkable: true, + template: pageMarginsTemplate, + toggleGroup: 'menuPageMargins' + }, //top,left,bottom,right + { + caption: me.textMarginsNormal, + checkable: true, + template: pageMarginsTemplate, + toggleGroup: 'menuPageMargins', + value: [19.1, 17.8, 19.1, 17.8] + }, + { + caption: me.textMarginsNarrow, + checkable: true, + template: pageMarginsTemplate, + toggleGroup: 'menuPageMargins', + value: [19.1, 6.4, 19.1, 6.4] + }, + { + caption: me.textMarginsWide, + checkable: true, + template: pageMarginsTemplate, + toggleGroup: 'menuPageMargins', + value: [25.4, 25.4, 25.4, 25.4] + }, + {caption: '--'}, + {caption: me.textPageMarginsCustom, value: 'advanced'} + ] + }) + }); + + var pageSizeTemplate = _.template('
<%= caption %>
' + + '
<%= parseFloat(Common.Utils.Metric.fnRecalcFromMM(options.value[0]).toFixed(2)) %> <%= Common.Utils.Metric.getCurrentMetricName() %> x ' + + '<%= parseFloat(Common.Utils.Metric.fnRecalcFromMM(options.value[1]).toFixed(2)) %> <%= Common.Utils.Metric.getCurrentMetricName() %>
'); + + me.btnPageSize = new Common.UI.Button({ + id: 'tlbtn-pagesize', + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-pagesize', + caption: me.capBtnPageSize, + lock : [_set.lostConnect, _set.coAuth], + menu: new Common.UI.Menu({ + items: [ + { + caption: 'US Letter', + subtitle: '21,59cm x 27,94cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [215.9, 279.4] + }, + { + caption: 'US Legal', + subtitle: '21,59cm x 35,56cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [215.9, 355.6] + }, + { + caption: 'A4', + subtitle: '21cm x 29,7cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [210, 297], + checked: true + }, + { + caption: 'A5', + subtitle: '14,81cm x 20,99cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [148, 210] + }, + { + caption: 'B5', + subtitle: '17,6cm x 25,01cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [176, 250] + }, + { + caption: 'Envelope #10', + subtitle: '10,48cm x 24,13cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [104.8, 241.3] + }, + { + caption: 'Envelope DL', + subtitle: '11,01cm x 22,01cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [110, 220] + }, + { + caption: 'Tabloid', + subtitle: '27,94cm x 43,17cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [279.4, 431.8] + }, + { + caption: 'A3', + subtitle: '29,7cm x 42,01cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [297, 420] + }, + { + caption: 'Tabloid Oversize', + subtitle: '30,48cm x 45,71cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [304.8, 457.1] + }, + { + caption: 'ROC 16K', + subtitle: '19,68cm x 27,3cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [196.8, 273] + }, + { + caption: 'Envelope Choukei 3', + subtitle: '11,99cm x 23,49cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [119.9, 234.9] + }, + { + caption: 'Super B/A3', + subtitle: '33,02cm x 48,25cm', + template: pageSizeTemplate, + checkable: true, + toggleGroup: 'menuPageSize', + value: [330.2, 482.5] + } + ] + }) + }); + me.mnuPageSize = me.btnPageSize.menu; + + me.btnImgAlign = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-img-align', + caption: me.capImgAlign, + lock : [_set.selRange, _set.selRangeEdit, _set.lostConnect, _set.coAuth], + menu: true + }); + + me.btnImgGroup = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-img-group', + caption: me.capImgGroup, + lock : [_set.selRange, _set.selRangeEdit, _set.lostConnect, _set.coAuth], + menu: true + }); + me.btnImgForward = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-img-frwd', + caption: me.capImgForward, + split: true, + lock : [_set.selRange, _set.selRangeEdit, _set.lostConnect, _set.coAuth], + menu: true + }); + me.btnImgBackward = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'btn-img-bkwd', + caption: me.capImgBackward, + lock : [_set.selRange, _set.selRangeEdit, _set.lostConnect, _set.coAuth], + split: true, + menu: true + }); + } else { Common.UI.Mixtbar.prototype.initialize.call(this, { template: _.template(template_view), @@ -1240,7 +1473,8 @@ define([ me.cmbNumberFormat, me.btnBorders, me.btnInsertImage, me.btnInsertHyperlink, me.btnInsertChart, me.btnColorSchemas, me.btnAutofilter, me.btnCopy, me.btnPaste, me.listStyles, me.btnPrint, - /*me.btnSave,*/ me.btnClearStyle, me.btnCopyStyle + /*me.btnSave,*/ me.btnClearStyle, me.btnCopyStyle, + me.btnPageMargins, me.btnPageSize, me.btnPageOrient, me.btnImgAlign, me.btnImgBackward, me.btnImgForward, me.btnImgGroup ]; var _temp_array = [me.cmbFontName, me.cmbFontSize, me.btnAlignLeft,me.btnAlignCenter,me.btnAlignRight,me.btnAlignJust,me.btnAlignTop, @@ -1300,8 +1534,21 @@ define([ } }); - if ( mode.isEdit ) + if ( mode.isEdit ) { + var top = Common.localStorage.getItem("sse-pgmargins-top"), + left = Common.localStorage.getItem("sse-pgmargins-left"), + bottom = Common.localStorage.getItem("sse-pgmargins-bottom"), + right = Common.localStorage.getItem("sse-pgmargins-right"); + if ( top!==null && left!==null && bottom!==null && right!==null ) { + var mnu = this.btnPageMargins.menu.items[0]; + mnu.options.value = mnu.value = [parseFloat(top), parseFloat(left), parseFloat(bottom), parseFloat(right)]; + mnu.setVisible(true); + $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options})); + } else + this.btnPageMargins.menu.items[0].setVisible(false); + me.setTab('home'); + } if ( me.isCompactView ) me.setFolded(true); @@ -1391,6 +1638,14 @@ define([ _injectComponent('#slot-btn-inschart', this.btnInsertChart); _injectComponent('#slot-field-styles', this.listStyles); _injectComponent('#slot-btn-chart', this.btnEditChart); + _injectComponent('#slot-btn-pageorient', this.btnPageOrient); + _injectComponent('#slot-btn-pagemargins', this.btnPageMargins); + _injectComponent('#slot-btn-pagesize', this.btnPageSize); + _injectComponent('#slot-img-align', this.btnImgAlign); + _injectComponent('#slot-img-group', this.btnImgGroup); + _injectComponent('#slot-img-movefrwd', this.btnImgForward); + _injectComponent('#slot-img-movebkwd', this.btnImgBackward); + // replacePlacholder('#id-toolbar-short-placeholder-btn-halign', this.btnHorizontalAlign); // replacePlacholder('#id-toolbar-short-placeholder-btn-valign', this.btnVerticalAlign); // replacePlacholder('#id-toolbar-short-placeholder-btn-filter', this.btnAutofilter); @@ -1459,6 +1714,9 @@ define([ _updateHint(this.btnHorizontalAlign, this.tipHAligh); _updateHint(this.btnVerticalAlign, this.tipVAligh); _updateHint(this.btnAutofilter, this.tipAutofilter); + _updateHint(this.btnPageOrient, this.tipPageOrient); + _updateHint(this.btnPageSize, this.tipPageSize); + _updateHint(this.btnPageMargins, this.tipPageMargins); // set menus if (this.btnBorders && this.btnBorders.rendered) { @@ -1649,6 +1907,8 @@ define([ itemTemplate: _.template('
') }); } + + this.updateMetricUnit(); }, onToolbarAfterRender: function(toolbar) { @@ -1674,6 +1934,35 @@ define([ } }, + updateMetricUnit: function () { + var items = this.btnPageMargins.menu.items; + for (var i = 0; i < items.length; i++) { + var mnu = items[i]; + if (mnu.checkable) { + var checked = mnu.checked; + $(mnu.el).html(mnu.template({ + id: Common.UI.getId(), + caption: mnu.caption, + options: mnu.options + })); + if (checked) mnu.setChecked(checked); + } + } + items = this.btnPageSize.menu.items; + for (var i = 0; i < items.length; i++) { + var mnu = items[i]; + if (mnu.checkable) { + var checked = mnu.checked; + $(mnu.el).html(mnu.template({ + id: Common.UI.getId(), + caption: mnu.caption, + options: mnu.options + })); + if (checked) mnu.setChecked(checked); + } + } + }, + setApi: function(api) { this.api = api; @@ -1839,6 +2128,76 @@ define([ }, onAppReady: function (config) { + var me = this; + var _holder_view = SSE.getController('DocumentHolder').getView('DocumentHolder'); + me.btnImgForward.updateHint(me.tipSendForward); + me.btnImgForward.setMenu(new Common.UI.Menu({ + items: [{ + caption : _holder_view.textArrangeFront, + iconCls : 'mnu-arrange-front', + value : Asc.c_oAscDrawingLayerType.BringToFront + }, { + caption : _holder_view.textArrangeForward, + iconCls : 'mnu-arrange-forward', + value : Asc.c_oAscDrawingLayerType.BringForward + } + ]}) + ); + + me.btnImgBackward.updateHint(me.tipSendBackward); + me.btnImgBackward.setMenu(new Common.UI.Menu({ + items: [{ + caption : _holder_view.textArrangeBack, + iconCls : 'mnu-arrange-back', + value : Asc.c_oAscDrawingLayerType.SendToBack + }, { + caption : _holder_view.textArrangeBackward, + iconCls : 'mnu-arrange-backward', + value : Asc.c_oAscDrawingLayerType.SendBackward + }] + })); + + me.btnImgAlign.updateHint(me.tipImgAlign); + me.btnImgAlign.setMenu(new Common.UI.Menu({ + items: [{ + caption : _holder_view.textShapeAlignLeft, + iconCls : 'mnu-img-align-left', + // halign : Asc.c_oAscAlignH.Left + }, { + caption : _holder_view.textShapeAlignCenter, + iconCls : 'mnu-img-align-center', + // halign : Asc.c_oAscAlignH.Center + }, { + caption : _holder_view.textShapeAlignRight, + iconCls : 'mnu-img-align-right', + // halign : Asc.c_oAscAlignH.Right + }, { + caption : _holder_view.textShapeAlignTop, + iconCls : 'mnu-img-align-top', + // valign : Asc.c_oAscAlignV.Top + }, { + caption : _holder_view.textShapeAlignMiddle, + iconCls : 'mnu-img-align-middle', + // valign : Asc.c_oAscAlignV.Center + }, { + caption : _holder_view.textShapeAlignBottom, + iconCls : 'mnu-img-align-bottom', + // valign : Asc.c_oAscAlignV.Bottom + }] + })); + + me.btnImgGroup.updateHint(me.tipImgGroup); + me.btnImgGroup.setMenu(new Common.UI.Menu({ + items: [{ + caption : _holder_view.txtGroup, + iconCls : 'mnu-group', + value: 'grouping' + }, { + caption : _holder_view.txtUngroup, + iconCls : 'mnu-ungroup', + value: 'ungrouping' + }] + })); }, @@ -2032,6 +2391,35 @@ define([ textSurface: 'Surface', tipChangeChart: 'Change Chart Type', textTabCollaboration: 'Collaboration', - textTabProtect: 'Protection' + textTabProtect: 'Protection', + textTabLayout: 'Layout', + capBtnPageOrient: 'Orientation', + capBtnMargins: 'Margins', + capBtnPageSize: 'Size', + tipImgAlign: 'Align objects', + tipImgGroup: 'Group objects', + tipSendForward: 'Bring forward', + tipSendBackward: 'Send backward', + capImgAlign: 'Align', + capImgGroup: 'Group', + capImgForward: 'Bring Forward', + capImgBackward: 'Send Backward', + tipPageSize: 'Page Size', + tipPageOrient: 'Page Orientation', + tipPageMargins: 'Page Margins', + textMarginsLast: 'Last Custom', + textMarginsNormal: 'Normal', + textMarginsNarrow: 'Narrow', + textMarginsWide: 'Wide', + textPageMarginsCustom: 'Custom margins', + textTop: 'Top: ', + textLeft: 'Left: ', + textBottom: 'Bottom: ', + textRight: 'Right: ', + textPageSizeCustom: 'Custom Page Size', + textPortrait: 'Portrait', + textLandscape: 'Landscape' + + }, SSE.Views.Toolbar || {})); }); \ No newline at end of file From 2ff4e6ae979481227ef86a532900ae394b3231fc Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 Jun 2018 15:42:01 +0300 Subject: [PATCH 02/10] [SSE] Debug grouping objects --- .../main/app/controller/Toolbar.js | 24 +++++++++++++++---- .../main/app/view/Toolbar.js | 12 ++++++---- .../main/resources/less/toolbar.less | 10 ++++++++ 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index f5fae8d95c..318148bdb1 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -1741,7 +1741,7 @@ define([ onApiPageOrient: function(orient) { if (this._state.pgorient !== orient) { - this.toolbar.btnPageOrient.menu.items[orient].setChecked(true); + this.toolbar.btnPageOrient.menu.items[orient == Asc.c_oAscPageOrientation.PagePortrait ? 0 : 1].setChecked(true); this._state.pgorient = orient; } }, @@ -1897,8 +1897,13 @@ define([ need_disable = (selectionType == Asc.c_oAscSelectionType.RangeCells || selectionType == Asc.c_oAscSelectionType.RangeCol || selectionType == Asc.c_oAscSelectionType.RangeRow || selectionType == Asc.c_oAscSelectionType.RangeMax); toolbar.lockToolbar(SSE.enumLock.selRange, need_disable, { array: [toolbar.btnImgAlign, toolbar.btnImgBackward, toolbar.btnImgForward, toolbar.btnImgGroup]}); - toolbar.btnImgGroup.menu.items[0].setDisabled(!this.api.asc_canGroupGraphicsObjects()); - toolbar.btnImgGroup.menu.items[1].setDisabled(!this.api.asc_canUnGroupGraphicsObjects()); + + var cangroup = this.api.asc_canGroupGraphicsObjects(), + canungroup = this.api.asc_canUnGroupGraphicsObjects(); + toolbar.lockToolbar(SSE.enumLock.cantGroupUngroup, !cangroup && !canungroup, { array: [toolbar.btnImgGroup]}); + toolbar.btnImgGroup.menu.items[0].setDisabled(!cangroup); + toolbar.btnImgGroup.menu.items[1].setDisabled(!canungroup); + toolbar.lockToolbar(SSE.enumLock.cantGroup, !cangroup, { array: [toolbar.btnImgAlign]}); if (editOptionsDisabled) return; @@ -3140,7 +3145,12 @@ define([ onPageSizeClick: function(menu, item, state) { if (this.api && state) { this._state.pgsize = [0, 0]; - // this.api.change_DocSize(item.value[0], item.value[1]); + // var props = new Asc.asc_CPageOptions(), + // opt = new Asc.asc_CPageSetup(); + // opt.asc_setWidth(item.value[0]); + // opt.asc_setHeight(item.value[1]); + // props.asc_setPageSetup(opt); + // this.api.asc_setPageOptions(props, this.api.asc_getActiveWorksheetIndex()); Common.component.Analytics.trackEvent('ToolBar', 'Page Size'); } @@ -3193,7 +3203,11 @@ define([ onPageOrientSelect: function(menu, item) { this._state.pgorient = undefined; if (this.api && item.checked) { - // this.api.change_PageOrient(item.value); + // var props = new Asc.asc_CPageOptions(), + // opt = new Asc.asc_CPageSetup(); + // opt.asc_setOrientation(item.value); + // props.asc_setPageSetup(opt); + // this.api.asc_setPageOptions(props, this.api.asc_getActiveWorksheetIndex()); } Common.NotificationCenter.trigger('edit:complete', this.toolbar); diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index d79915ab37..7f1d872ca8 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -81,7 +81,9 @@ define([ multiselect: 'is-multiselect', cantHyperlink: 'cant-hyperlink', commentLock: 'can-comment', - cantModifyFilter: 'cant-filter' + cantModifyFilter: 'cant-filter', + cantGroup: 'cant-group', + cantGroupUngroup: 'cant-group-ungroup', }; SSE.Views.Toolbar = Common.UI.Mixtbar.extend(_.extend({ @@ -1219,14 +1221,14 @@ define([ iconCls: 'mnu-orient-portrait', checkable: true, toggleGroup: 'menuOrient', - value: true + value: Asc.c_oAscPageOrientation.PagePortrait }, { caption: me.textLandscape, iconCls: 'mnu-orient-landscape', checkable: true, toggleGroup: 'menuOrient', - value: false + value: Asc.c_oAscPageOrientation.PageLandscape } ] }) @@ -1407,7 +1409,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'btn-img-align', caption: me.capImgAlign, - lock : [_set.selRange, _set.selRangeEdit, _set.lostConnect, _set.coAuth], + lock : [_set.selRange, _set.selRangeEdit, _set.cantGroup, _set.lostConnect, _set.coAuth], menu: true }); @@ -1415,7 +1417,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'btn-img-group', caption: me.capImgGroup, - lock : [_set.selRange, _set.selRangeEdit, _set.lostConnect, _set.coAuth], + lock : [_set.selRange, _set.selRangeEdit, _set.cantGroupUngroup, _set.lostConnect, _set.coAuth], menu: true }); me.btnImgForward = new Common.UI.Button({ diff --git a/apps/spreadsheeteditor/main/resources/less/toolbar.less b/apps/spreadsheeteditor/main/resources/less/toolbar.less index ae1b1bd676..6579ca9d74 100644 --- a/apps/spreadsheeteditor/main/resources/less/toolbar.less +++ b/apps/spreadsheeteditor/main/resources/less/toolbar.less @@ -210,6 +210,16 @@ .menu-btn-icon(mnu-text-subscript, 38, @menu-icon-size); .menu-btn-icon(mnu-text-superscript, 39, @menu-icon-size); +.menu-btn-icon(mnu-orient-portrait, 19, @menu-icon-size); +.menu-btn-icon(mnu-orient-landscape, 20, @menu-icon-size); + +.menu-btn-icon(mnu-img-align-center, 0, @menu-icon-size); +.menu-btn-icon(mnu-img-align-left, 2, @menu-icon-size); +.menu-btn-icon(mnu-img-align-right, 3, @menu-icon-size); +.menu-btn-icon(mnu-img-align-bottom, 4, @menu-icon-size); +.menu-btn-icon(mnu-img-align-middle, 5, @menu-icon-size); +.menu-btn-icon(mnu-img-align-top, 6, @menu-icon-size); + .username-tip { background-color: #ee3525; border: none; From 63c404f80b4fa77b2c4b624ccb356d9074d0437b Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 28 Jun 2018 16:14:28 +0300 Subject: [PATCH 03/10] [SSE] Apply page margins --- .../main/app/controller/Toolbar.js | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 318148bdb1..17bf387410 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -3162,12 +3162,15 @@ define([ if (this.api) { this._state.pgmargins = undefined; if (item.value !== 'advanced') { - // var props = new Asc.CDocumentSectionProps(); - // props.put_TopMargin(item.value[0]); - // props.put_LeftMargin(item.value[1]); - // props.put_BottomMargin(item.value[2]); - // props.put_RightMargin(item.value[3]); - // this.api.asc_SetSectionProps(props); + // var props = new Asc.asc_CPageOptions(), + // opt = new Asc.asc_CPageMargins(); + // opt.asc_setLeft(item.value[1]); + // opt.asc_setTop(item.value[0]); + // opt.asc_setRight(item.value[3]); + // opt.asc_setBottom(item.value[2]); + // + // props.asc_setPageMargins(opt); + // this.api.asc_setPageOptions(props, this.api.asc_getActiveWorksheetIndex()); } else { // var win, props, // me = this; @@ -3180,12 +3183,14 @@ define([ // mnu.setChecked(true); // mnu.options.value = mnu.value = [props.get_TopMargin(), props.get_LeftMargin(), props.get_BottomMargin(), props.get_RightMargin()]; // $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options})); - // Common.localStorage.setItem("sse-pgmargins-top", props.asc_getTopn()); + // Common.localStorage.setItem("sse-pgmargins-top", props.asc_getTop()); // Common.localStorage.setItem("sse-pgmargins-left", props.asc_getLeft()); // Common.localStorage.setItem("sse-pgmargins-bottom", props.asc_getBottom()); // Common.localStorage.setItem("sse-pgmargins-right", props.asc_getRight()); // - // me.api.asc_SetSectionProps(props); + // var pageProps = new Asc.asc_CPageOptions(), + // pageProps.asc_setPageMargins(props); + // me.api.asc_setPageOptions(pageProps, me.api.asc_getActiveWorksheetIndex()); // Common.NotificationCenter.trigger('edit:complete', me.toolbar); // } // } From 9375a202fec465bf7e0cd6fe94821691bfa1fb52 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 29 Jun 2018 10:55:05 +0300 Subject: [PATCH 04/10] [SSE] Add custom page margins --- .../main/app/controller/Toolbar.js | 58 ++--- .../main/app/view/PageMarginsDialog.js | 209 ++++++++++++++++++ 2 files changed, 240 insertions(+), 27 deletions(-) create mode 100644 apps/spreadsheeteditor/main/app/view/PageMarginsDialog.js diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 17bf387410..9172c498d8 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -52,7 +52,8 @@ define([ 'spreadsheeteditor/main/app/view/NamedRangeEditDlg', 'spreadsheeteditor/main/app/view/NamedRangePasteDlg', 'spreadsheeteditor/main/app/view/NameManagerDlg', - 'spreadsheeteditor/main/app/view/FormatSettingsDialog' + 'spreadsheeteditor/main/app/view/FormatSettingsDialog', + 'spreadsheeteditor/main/app/view/PageMarginsDialog' ], function () { 'use strict'; SSE.Controllers.Toolbar = Backbone.Controller.extend(_.extend({ @@ -3151,7 +3152,7 @@ define([ // opt.asc_setHeight(item.value[1]); // props.asc_setPageSetup(opt); // this.api.asc_setPageOptions(props, this.api.asc_getActiveWorksheetIndex()); - + Common.NotificationCenter.trigger('page:settings'); Common.component.Analytics.trackEvent('ToolBar', 'Page Size'); } @@ -3171,32 +3172,34 @@ define([ // // props.asc_setPageMargins(opt); // this.api.asc_setPageOptions(props, this.api.asc_getActiveWorksheetIndex()); + Common.NotificationCenter.trigger('page:settings'); } else { - // var win, props, - // me = this; - // win = new SSE.Views.PageMarginsDialog({ - // handler: function(dlg, result) { - // if (result == 'ok') { - // props = dlg.getSettings(); - // var mnu = me.toolbar.btnPageMargins.menu.items[0]; - // mnu.setVisible(true); - // mnu.setChecked(true); - // mnu.options.value = mnu.value = [props.get_TopMargin(), props.get_LeftMargin(), props.get_BottomMargin(), props.get_RightMargin()]; - // $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options})); - // Common.localStorage.setItem("sse-pgmargins-top", props.asc_getTop()); - // Common.localStorage.setItem("sse-pgmargins-left", props.asc_getLeft()); - // Common.localStorage.setItem("sse-pgmargins-bottom", props.asc_getBottom()); - // Common.localStorage.setItem("sse-pgmargins-right", props.asc_getRight()); - // - // var pageProps = new Asc.asc_CPageOptions(), - // pageProps.asc_setPageMargins(props); - // me.api.asc_setPageOptions(pageProps, me.api.asc_getActiveWorksheetIndex()); - // Common.NotificationCenter.trigger('edit:complete', me.toolbar); - // } - // } - // }); - // win.show(); - // win.setSettings(me.api.asc_getPageOptions(me.api.asc_getActiveWorksheetIndex())); + var win, props, + me = this; + win = new SSE.Views.PageMarginsDialog({ + handler: function(dlg, result) { + if (result == 'ok') { + props = dlg.getSettings(); + var mnu = me.toolbar.btnPageMargins.menu.items[0]; + mnu.setVisible(true); + mnu.setChecked(true); + mnu.options.value = mnu.value = [props.asc_getTop(), props.asc_getLeft(), props.asc_getBottom(), props.asc_getRight()]; + $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options})); + Common.localStorage.setItem("sse-pgmargins-top", props.asc_getTop()); + Common.localStorage.setItem("sse-pgmargins-left", props.asc_getLeft()); + Common.localStorage.setItem("sse-pgmargins-bottom", props.asc_getBottom()); + Common.localStorage.setItem("sse-pgmargins-right", props.asc_getRight()); + + // var pageProps = new Asc.asc_CPageOptions(); + // pageProps.asc_setPageMargins(props); + // me.api.asc_setPageOptions(pageProps, me.api.asc_getActiveWorksheetIndex()); + Common.NotificationCenter.trigger('page:settings'); + Common.NotificationCenter.trigger('edit:complete', me.toolbar); + } + } + }); + win.show(); + win.setSettings(me.api.asc_getPageOptions(me.api.asc_getActiveWorksheetIndex())); } Common.component.Analytics.trackEvent('ToolBar', 'Page Margins'); @@ -3213,6 +3216,7 @@ define([ // opt.asc_setOrientation(item.value); // props.asc_setPageSetup(opt); // this.api.asc_setPageOptions(props, this.api.asc_getActiveWorksheetIndex()); + Common.NotificationCenter.trigger('page:settings'); } Common.NotificationCenter.trigger('edit:complete', this.toolbar); diff --git a/apps/spreadsheeteditor/main/app/view/PageMarginsDialog.js b/apps/spreadsheeteditor/main/app/view/PageMarginsDialog.js new file mode 100644 index 0000000000..c1965e8fa7 --- /dev/null +++ b/apps/spreadsheeteditor/main/app/view/PageMarginsDialog.js @@ -0,0 +1,209 @@ +/* + * + * (c) Copyright Ascensio System Limited 2010-2018 + * + * 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 Lubanas st. 125a-25, Riga, Latvia, + * EU, LV-1021. + * + * 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 + * +*/ +/** + * PageMarginsDialog.js + * + * Created by Julia Radzhabova on 06/29/18 + * Copyright (c) 2018 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'common/main/lib/component/Window', + 'common/main/lib/component/MetricSpinner' +], function () { 'use strict'; + + SSE.Views.PageMarginsDialog = Common.UI.Window.extend(_.extend({ + options: { + width: 215, + header: true, + style: 'min-width: 216px;', + cls: 'modal-dlg', + id: 'window-page-margins' + }, + + initialize : function(options) { + _.extend(this.options, { + title: this.textTitle + }, options || {}); + + this.template = [ + '
', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '
', + '', + '
', + '
', + '', + '
', + '
', + '', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '' + ].join(''); + + this.options.tpl = _.template(this.template)(this.options); + + this.spinners = []; + this._noApply = false; + this.maxMarginsW = this.maxMarginsH = 0; + + Common.UI.Window.prototype.initialize.call(this, this.options); + }, + + render: function() { + Common.UI.Window.prototype.render.call(this); + + this.spnTop = new Common.UI.MetricSpinner({ + el: $('#page-margins-spin-top'), + step: .1, + width: 86, + defaultUnit : "cm", + value: '0', + maxValue: 48.25, + minValue: 0 + }); + this.spinners.push(this.spnTop); + + this.spnBottom = new Common.UI.MetricSpinner({ + el: $('#page-margins-spin-bottom'), + step: .1, + width: 86, + defaultUnit : "cm", + value: '0', + maxValue: 48.25, + minValue: 0 + }); + this.spinners.push(this.spnBottom); + + this.spnLeft = new Common.UI.MetricSpinner({ + el: $('#page-margins-spin-left'), + step: .1, + width: 86, + defaultUnit : "cm", + value: '0.19 cm', + maxValue: 48.25, + minValue: 0 + }); + this.spinners.push(this.spnLeft); + + this.spnRight = new Common.UI.MetricSpinner({ + el: $('#page-margins-spin-right'), + step: .1, + width: 86, + defaultUnit : "cm", + value: '0.19 cm', + maxValue: 48.25, + minValue: 0 + }); + this.spinners.push(this.spnRight); + + var $window = this.getChild(); + $window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); + $window.find('input').on('keypress', _.bind(this.onKeyPress, this)); + + this.updateMetricUnit(); + }, + + _handleInput: function(state) { + if (this.options.handler) + this.options.handler.call(this, this, state); + + this.close(); + }, + + onBtnClick: function(event) { + this._handleInput(event.currentTarget.attributes['result'].value); + }, + + onKeyPress: function(event) { + if (event.keyCode == Common.UI.Keys.RETURN) { + this._handleInput('ok'); + } + }, + + setSettings: function (props) { + if (props) { + var margins = props.asc_getPageMargins(); + + this.spnTop.setValue(Common.Utils.Metric.fnRecalcFromMM(margins.asc_getTop()), true); + this.spnBottom.setValue(Common.Utils.Metric.fnRecalcFromMM(margins.asc_getBottom()), true); + this.spnLeft.setValue(Common.Utils.Metric.fnRecalcFromMM(margins.asc_getLeft()), true); + this.spnRight.setValue(Common.Utils.Metric.fnRecalcFromMM(margins.asc_getRight()), true); + } + }, + + getSettings: function() { + var props = new Asc.asc_CPageMargins(); + props.asc_setTop(Common.Utils.Metric.fnRecalcToMM(this.spnTop.getNumberValue())); + props.asc_setBottom(Common.Utils.Metric.fnRecalcToMM(this.spnBottom.getNumberValue())); + props.asc_setLeft(Common.Utils.Metric.fnRecalcToMM(this.spnLeft.getNumberValue())); + props.asc_setRight(Common.Utils.Metric.fnRecalcToMM(this.spnRight.getNumberValue())); + return props; + }, + + updateMetricUnit: function() { + if (this.spinners) { + for (var i=0; i Date: Fri, 29 Jun 2018 11:09:03 +0300 Subject: [PATCH 05/10] [SSE] Update translations --- .../main/app/view/Toolbar.js | 3 -- apps/spreadsheeteditor/main/locale/en.json | 41 ++++++++++++++++++- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 7f1d872ca8..0d79b23b07 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -2418,10 +2418,7 @@ define([ textLeft: 'Left: ', textBottom: 'Bottom: ', textRight: 'Right: ', - textPageSizeCustom: 'Custom Page Size', textPortrait: 'Portrait', textLandscape: 'Landscape' - - }, SSE.Views.Toolbar || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 560da6536c..3b317433dc 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -1241,6 +1241,12 @@ "SSE.Views.DocumentHolder.txtUngroup": "Ungroup", "SSE.Views.DocumentHolder.txtWidth": "Width", "SSE.Views.DocumentHolder.vertAlignText": "Vertical Alignment", + "SSE.Views.DocumentHolder.textShapeAlignBottom": "Align Bottom", + "SSE.Views.DocumentHolder.textShapeAlignCenter": "Align Center", + "SSE.Views.DocumentHolder.textShapeAlignLeft": "Align Left", + "SSE.Views.DocumentHolder.textShapeAlignMiddle": "Align Middle", + "SSE.Views.DocumentHolder.textShapeAlignRight": "Align Right", + "SSE.Views.DocumentHolder.textShapeAlignTop": "Align Top", "SSE.Views.FileMenu.btnBackCaption": "Go to Documents", "SSE.Views.FileMenu.btnCloseMenuCaption": "Close Menu", "SSE.Views.FileMenu.btnCreateNewCaption": "Create New", @@ -1462,6 +1468,13 @@ "SSE.Views.NameManagerDlg.textWorkbook": "Workbook", "SSE.Views.NameManagerDlg.tipIsLocked": "This element is being edited by another user.", "SSE.Views.NameManagerDlg.txtTitle": "Name Manager", + "SSE.Views.PageMarginsDialog.cancelButtonText": "Cancel", + "SSE.Views.PageMarginsDialog.okButtonText": "Ok", + "SSE.Views.PageMarginsDialog.textBottom": "Bottom", + "SSE.Views.PageMarginsDialog.textLeft": "Left", + "SSE.Views.PageMarginsDialog.textRight": "Right", + "SSE.Views.PageMarginsDialog.textTitle": "Margins", + "SSE.Views.PageMarginsDialog.textTop": "Top", "SSE.Views.ParagraphSettings.strLineHeight": "Line Spacing", "SSE.Views.ParagraphSettings.strParagraphSpacing": "Paragraph Spacing", "SSE.Views.ParagraphSettings.strSpacingAfter": "After", @@ -2014,5 +2027,31 @@ "SSE.Views.Top10FilterDialog.txtItems": "Item", "SSE.Views.Top10FilterDialog.txtPercent": "Percent", "SSE.Views.Top10FilterDialog.txtTitle": "Top 10 AutoFilter", - "SSE.Views.Top10FilterDialog.txtTop": "Top" + "SSE.Views.Top10FilterDialog.txtTop": "Top", + "SSE.Views.Toolbar.textTabLayout": "Layout", + "SSE.Views.Toolbar.capBtnMargins": "Margins", + "SSE.Views.Toolbar.capBtnPageOrient": "Orientation", + "SSE.Views.Toolbar.capBtnPageSize": "Size", + "SSE.Views.Toolbar.capImgAlign": "Align", + "SSE.Views.Toolbar.capImgBackward": "Send Backward", + "SSE.Views.Toolbar.capImgForward": "Bring Forward", + "SSE.Views.Toolbar.capImgGroup": "Group", + "SSE.Views.Toolbar.tipImgAlign": "Align objects", + "SSE.Views.Toolbar.tipImgGroup": "Group objects", + "SSE.Views.Toolbar.tipSendBackward": "Send backward", + "SSE.Views.Toolbar.tipSendForward": "Bring forward", + "SSE.Views.Toolbar.tipPageMargins": "Page margins", + "SSE.Views.Toolbar.tipPageOrient": "Page orientation", + "SSE.Views.Toolbar.tipPageSize": "Page size", + "SSE.Views.Toolbar.textMarginsLast": "Last Custom", + "SSE.Views.Toolbar.textMarginsNarrow": "Narrow", + "SSE.Views.Toolbar.textMarginsNormal": "Normal", + "SSE.Views.Toolbar.textMarginsWide": "Wide", + "SSE.Views.Toolbar.textPageMarginsCustom": "Custom margins", + "SSE.Views.Toolbar.textBottom": "Bottom: ", + "SSE.Views.Toolbar.textLeft": "Left: ", + "SSE.Views.Toolbar.textRight": "Right: ", + "SSE.Views.Toolbar.textTop": "Top: ", + "SSE.Views.Toolbar.textLandscape": "Landscape", + "SSE.Views.Toolbar.textPortrait": "Portrait" } \ No newline at end of file From 7217a0fbce08d678aae7d7001d57d43126b688d1 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 17 Jul 2018 11:41:25 +0300 Subject: [PATCH 06/10] [SSE] Apply page settings --- .../main/app/controller/Toolbar.js | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 9172c498d8..023b8aff3e 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -3146,12 +3146,7 @@ define([ onPageSizeClick: function(menu, item, state) { if (this.api && state) { this._state.pgsize = [0, 0]; - // var props = new Asc.asc_CPageOptions(), - // opt = new Asc.asc_CPageSetup(); - // opt.asc_setWidth(item.value[0]); - // opt.asc_setHeight(item.value[1]); - // props.asc_setPageSetup(opt); - // this.api.asc_setPageOptions(props, this.api.asc_getActiveWorksheetIndex()); + this.api.asc_changeDocSize(item.value[0], item.value[1], this.api.asc_getActiveWorksheetIndex()); Common.NotificationCenter.trigger('page:settings'); Common.component.Analytics.trackEvent('ToolBar', 'Page Size'); } @@ -3163,15 +3158,7 @@ define([ if (this.api) { this._state.pgmargins = undefined; if (item.value !== 'advanced') { - // var props = new Asc.asc_CPageOptions(), - // opt = new Asc.asc_CPageMargins(); - // opt.asc_setLeft(item.value[1]); - // opt.asc_setTop(item.value[0]); - // opt.asc_setRight(item.value[3]); - // opt.asc_setBottom(item.value[2]); - // - // props.asc_setPageMargins(opt); - // this.api.asc_setPageOptions(props, this.api.asc_getActiveWorksheetIndex()); + this.api.asc_changePageMargins(item.value[1], item.value[3], item.value[0], item.value[2], this.api.asc_getActiveWorksheetIndex()); Common.NotificationCenter.trigger('page:settings'); } else { var win, props, @@ -3190,9 +3177,7 @@ define([ Common.localStorage.setItem("sse-pgmargins-bottom", props.asc_getBottom()); Common.localStorage.setItem("sse-pgmargins-right", props.asc_getRight()); - // var pageProps = new Asc.asc_CPageOptions(); - // pageProps.asc_setPageMargins(props); - // me.api.asc_setPageOptions(pageProps, me.api.asc_getActiveWorksheetIndex()); + me.api.asc_changePageMargins( props.asc_getLeft(), props.asc_getRight(), props.asc_getTop(), props.asc_getBottom(), me.api.asc_getActiveWorksheetIndex()); Common.NotificationCenter.trigger('page:settings'); Common.NotificationCenter.trigger('edit:complete', me.toolbar); } @@ -3211,11 +3196,9 @@ define([ onPageOrientSelect: function(menu, item) { this._state.pgorient = undefined; if (this.api && item.checked) { - // var props = new Asc.asc_CPageOptions(), - // opt = new Asc.asc_CPageSetup(); - // opt.asc_setOrientation(item.value); - // props.asc_setPageSetup(opt); - // this.api.asc_setPageOptions(props, this.api.asc_getActiveWorksheetIndex()); + var props = this.api.asc_getPageOptions(), + opt = props.asc_getPageSetup(); + this.api.asc_setPageOptions(opt.asc_setOrientation, item.value, this.api.asc_getActiveWorksheetIndex()); Common.NotificationCenter.trigger('page:settings'); } From 413d4b713375492ac022fe41b3391057b02d76ad Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 17 Jul 2018 13:10:23 +0300 Subject: [PATCH 07/10] [SSE] Set page orientation --- apps/spreadsheeteditor/main/app/controller/Toolbar.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 023b8aff3e..61833b73ee 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -3196,9 +3196,7 @@ define([ onPageOrientSelect: function(menu, item) { this._state.pgorient = undefined; if (this.api && item.checked) { - var props = this.api.asc_getPageOptions(), - opt = props.asc_getPageSetup(); - this.api.asc_setPageOptions(opt.asc_setOrientation, item.value, this.api.asc_getActiveWorksheetIndex()); + this.api.asc_changePageOrient(item.value==Asc.c_oAscPageOrientation.PagePortrait, this.api.asc_getActiveWorksheetIndex()); Common.NotificationCenter.trigger('page:settings'); } From c5b49333d1848e3ef8d4921664191fb566730b43 Mon Sep 17 00:00:00 2001 From: nekurill Date: Wed, 18 Jul 2018 11:54:13 +0300 Subject: [PATCH 08/10] Add icons for aligne objects and page orientation --- .../main/resources/img/popupmenu-btns.png | Bin 6362 -> 7138 bytes .../main/resources/img/popupmenu-btns@2x.png | Bin 15639 -> 17129 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/spreadsheeteditor/main/resources/img/popupmenu-btns.png b/apps/spreadsheeteditor/main/resources/img/popupmenu-btns.png index c0c39cc2815b631e9be71baa501691c99a334714..50eea4ab4c217a84ad60a848e8702f1df1591406 100644 GIT binary patch literal 7138 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 a>YMgJ`RPY%t<**s^g63=grn-(k^Tpl&g;4W literal 6362 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 diff --git a/apps/spreadsheeteditor/main/resources/img/popupmenu-btns@2x.png b/apps/spreadsheeteditor/main/resources/img/popupmenu-btns@2x.png index 185eee39448fa7f7178eea6a339963e8d27b9883..03c4be231142445db539fca2606aa19eadbd2a58 100644 GIT binary patch literal 17129 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 literal 15639 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 From d8fc4566869b8ea63f67bd0d1ad10ad5c49b1a44 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 18 Jul 2018 14:07:24 +0300 Subject: [PATCH 09/10] Save to pdfa format --- apps/documenteditor/main/app/controller/Main.js | 3 ++- apps/documenteditor/main/app/controller/Toolbar.js | 3 ++- apps/documenteditor/main/app/view/FileMenuPanels.js | 1 + apps/documenteditor/main/index.html | 1 + apps/documenteditor/main/index.html.deploy | 1 + apps/presentationeditor/main/app/controller/Main.js | 3 ++- apps/presentationeditor/main/app/controller/Toolbar.js | 3 ++- apps/presentationeditor/main/app/view/FileMenuPanels.js | 1 + apps/presentationeditor/main/index.html | 1 + apps/presentationeditor/main/index.html.deploy | 1 + apps/spreadsheeteditor/main/app/controller/LeftMenu.js | 4 ++-- apps/spreadsheeteditor/main/app/controller/Main.js | 7 ++++--- apps/spreadsheeteditor/main/app/controller/Print.js | 5 +++-- apps/spreadsheeteditor/main/app/controller/Toolbar.js | 7 ++++--- apps/spreadsheeteditor/main/app/view/FileMenuPanels.js | 2 ++ apps/spreadsheeteditor/main/index.html | 1 + apps/spreadsheeteditor/main/index.html.deploy | 1 + 17 files changed, 31 insertions(+), 14 deletions(-) diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index d98b245366..5f4075f1f7 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -413,7 +413,8 @@ define([ Asc.c_oAscFileType.ODT, Asc.c_oAscFileType.DOCX, Asc.c_oAscFileType.HTML, - Asc.c_oAscFileType.PDF + Asc.c_oAscFileType.PDF, + Asc.c_oAscFileType.PDFA ]; if ( !_format || _supported.indexOf(_format) < 0 ) diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index 1f40167cf7..f062fd10ac 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -142,7 +142,8 @@ define([ Asc.c_oAscFileType.RTF, Asc.c_oAscFileType.ODT, Asc.c_oAscFileType.DOCX, - Asc.c_oAscFileType.HTML + Asc.c_oAscFileType.HTML, + Asc.c_oAscFileType.PDFA ]; if ( !_format || _supported.indexOf(_format) < 0 ) diff --git a/apps/documenteditor/main/app/view/FileMenuPanels.js b/apps/documenteditor/main/app/view/FileMenuPanels.js index 3819798c9b..44dd732c10 100644 --- a/apps/documenteditor/main/app/view/FileMenuPanels.js +++ b/apps/documenteditor/main/app/view/FileMenuPanels.js @@ -54,6 +54,7 @@ define([ formats: [[ {name: 'DOCX', imgCls: 'docx', type: Asc.c_oAscFileType.DOCX}, {name: 'PDF', imgCls: 'pdf', type: Asc.c_oAscFileType.PDF}, + {name: 'PDFA', imgCls: 'pdfa', type: Asc.c_oAscFileType.PDFA}, {name: 'TXT', imgCls: 'txt', type: Asc.c_oAscFileType.TXT} ],[ // {name: 'DOC', imgCls: 'doc-format btn-doc', type: Asc.c_oAscFileType.DOC}, diff --git a/apps/documenteditor/main/index.html b/apps/documenteditor/main/index.html index ffaf58340c..7aaa2df5d8 100644 --- a/apps/documenteditor/main/index.html +++ b/apps/documenteditor/main/index.html @@ -264,6 +264,7 @@ + diff --git a/apps/documenteditor/main/index.html.deploy b/apps/documenteditor/main/index.html.deploy index c505b375c0..32fdf0a44f 100644 --- a/apps/documenteditor/main/index.html.deploy +++ b/apps/documenteditor/main/index.html.deploy @@ -285,6 +285,7 @@ + diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js index 71e6c03515..2107e270f4 100644 --- a/apps/presentationeditor/main/app/controller/Main.js +++ b/apps/presentationeditor/main/app/controller/Main.js @@ -385,7 +385,8 @@ define([ _supported = [ Asc.c_oAscFileType.PPTX, Asc.c_oAscFileType.ODP, - Asc.c_oAscFileType.PDF + Asc.c_oAscFileType.PDF, + Asc.c_oAscFileType.PDFA ]; if ( !_format || _supported.indexOf(_format) < 0 ) diff --git a/apps/presentationeditor/main/app/controller/Toolbar.js b/apps/presentationeditor/main/app/controller/Toolbar.js index 2676340e15..2d2e92eb45 100644 --- a/apps/presentationeditor/main/app/controller/Toolbar.js +++ b/apps/presentationeditor/main/app/controller/Toolbar.js @@ -149,7 +149,8 @@ define([ var _supported = [ Asc.c_oAscFileType.PPTX, - Asc.c_oAscFileType.ODP + Asc.c_oAscFileType.ODP, + Asc.c_oAscFileType.PDFA ]; if ( !_format || _supported.indexOf(_format) < 0 ) diff --git a/apps/presentationeditor/main/app/view/FileMenuPanels.js b/apps/presentationeditor/main/app/view/FileMenuPanels.js index e068aaaad6..2e38b60ddf 100644 --- a/apps/presentationeditor/main/app/view/FileMenuPanels.js +++ b/apps/presentationeditor/main/app/view/FileMenuPanels.js @@ -55,6 +55,7 @@ define([ formats: [[ {name: 'PPTX', imgCls: 'pptx', type: Asc.c_oAscFileType.PPTX}, {name: 'PDF', imgCls: 'pdf', type: Asc.c_oAscFileType.PDF}, + {name: 'PDFA', imgCls: 'pdfa', type: Asc.c_oAscFileType.PDFA}, {name: 'ODP', imgCls: 'odp', type: Asc.c_oAscFileType.ODP} ]], diff --git a/apps/presentationeditor/main/index.html b/apps/presentationeditor/main/index.html index a75f2173c3..340badc672 100644 --- a/apps/presentationeditor/main/index.html +++ b/apps/presentationeditor/main/index.html @@ -263,6 +263,7 @@ +