From 292fba4783e362c1b0df94b53ae7bd109a469028 Mon Sep 17 00:00:00 2001
From: Julia Radzhabova <Julia.Radzhabova@onlyoffice.com>
Date: Tue, 26 Feb 2019 18:59:16 +0300
Subject: [PATCH] [DE] Bug 19378 (add rotation to context menu)

---
 .../main/app/view/DocumentHolder.js           | 56 ++++++++++++++++++-
 .../main/app/view/ImageSettings.js            |  4 +-
 .../main/app/view/ShapeSettings.js            |  4 +-
 apps/documenteditor/main/locale/en.json       |  5 ++
 4 files changed, 63 insertions(+), 6 deletions(-)

diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js
index fb767f637..a964ad09b 100644
--- a/apps/documenteditor/main/app/view/DocumentHolder.js
+++ b/apps/documenteditor/main/app/view/DocumentHolder.js
@@ -2357,6 +2357,31 @@ define([
             var menuSignatureEditSetup  = new Common.UI.MenuItem({caption: this.strSetup,     value: 2 }).on('click', _.bind(me.onSignatureClick, me));
             var menuEditSignSeparator = new Common.UI.MenuItem({ caption: '--' });
 
+            var menuImgRotate = new Common.UI.MenuItem({
+                caption     : me.textRotate,
+                menu        : new Common.UI.Menu({
+                    menuAlign: 'tl-tr',
+                    items: [
+                        new Common.UI.MenuItem({
+                            caption: this.textRotate270,
+                            value  : 0
+                        }).on('click', _.bind(me.onImgRotate, me)),
+                        new Common.UI.MenuItem({
+                            caption: this.textRotate90,
+                            value  : 1
+                        }).on('click', _.bind(me.onImgRotate, me)),
+                        new Common.UI.MenuItem({
+                            caption: this.textFlipH,
+                            value  : 1
+                        }).on('click', _.bind(me.onImgFlip, me)),
+                        new Common.UI.MenuItem({
+                            caption: this.textFlipV,
+                            value  : 0
+                        }).on('click', _.bind(me.onImgFlip, me))
+                    ]
+                })
+            });
+
             this.pictureMenu = new Common.UI.Menu({
                 initMenu: function(value){
                     if (_.isUndefined(value.imgProps))
@@ -2417,16 +2442,20 @@ define([
 
                     me.menuOriginalSize.setVisible(value.imgProps.isOnlyImg || !value.imgProps.isChart && !value.imgProps.isShape);
 
+                    var islocked = value.imgProps.locked || (value.headerProps!==undefined && value.headerProps.locked);
                     var pluginGuid = value.imgProps.value.asc_getPluginGuid();
                     menuImgReplace.setVisible(value.imgProps.isOnlyImg && (pluginGuid===null || pluginGuid===undefined));
                     if (menuImgReplace.isVisible())
                         menuImgReplace.setDisabled(islocked || pluginGuid===null);
 
-                    var islocked = value.imgProps.locked || (value.headerProps!==undefined && value.headerProps.locked);
+                    menuImgRotate.setVisible(!value.imgProps.isChart && (pluginGuid===null || pluginGuid===undefined));
+                    if (menuImgRotate.isVisible())
+                        menuImgRotate.setDisabled(islocked);
+
                     if (menuChartEdit.isVisible())
                         menuChartEdit.setDisabled(islocked || value.imgProps.value.get_SeveralCharts());
 
-                    me.pictureMenu.items[14].setVisible(menuChartEdit.isVisible());
+                    me.pictureMenu.items[15].setVisible(menuChartEdit.isVisible());
 
                     me.menuOriginalSize.setDisabled(islocked || value.imgProps.value.get_ImageUrl()===null || value.imgProps.value.get_ImageUrl()===undefined);
                     menuImageAdvanced.setDisabled(islocked);
@@ -2474,6 +2503,7 @@ define([
                     menuImageArrange,
                     menuImageAlign,
                     me.menuImageWrap,
+                    menuImgRotate,
                     { caption: '--' },
                     me.menuOriginalSize,
                     menuImgReplace,
@@ -3698,6 +3728,23 @@ define([
             }
         },
 
+        onImgRotate: function(item) {
+            var properties = new Asc.asc_CImgProperty();
+            properties.asc_putRotAdd((item.value==1 ? 90 : 270) * 3.14159265358979 / 180);
+            this.api.ImgApply(properties);
+            this.fireEvent('editcomplete', this);
+        },
+
+        onImgFlip: function(item) {
+            var properties = new Asc.asc_CImgProperty();
+            if (item.value==1)
+                properties.asc_putFlipHInvert(true);
+            else
+                properties.asc_putFlipVInvert(true);
+            this.api.ImgApply(properties);
+            this.fireEvent('editcomplete', this);
+        },
+
         focus: function() {
             var me = this;
             _.defer(function(){  me.cmpEl.focus(); }, 50);
@@ -3908,6 +3955,11 @@ define([
         bulletsText: 'Bullets and Numbering',
         txtDistribHor           : 'Distribute Horizontally',
         txtDistribVert          : 'Distribute Vertically',
+        textRotate270: 'Rotate Left 90°',
+        textRotate90: 'Rotate Right 90°',
+        textFlipV: 'Flip Vertically',
+        textFlipH: 'Flip Horizontally',
+        textRotate: 'Rotation'
 
     }, DE.Views.DocumentHolder || {}));
 });
\ No newline at end of file
diff --git a/apps/documenteditor/main/app/view/ImageSettings.js b/apps/documenteditor/main/app/view/ImageSettings.js
index 72d71c908..7f35b835a 100644
--- a/apps/documenteditor/main/app/view/ImageSettings.js
+++ b/apps/documenteditor/main/app/view/ImageSettings.js
@@ -525,8 +525,8 @@ define([
         textFlip: 'Flip',
         textHint270: 'Rotate Left 90°',
         textHint90: 'Rotate Right 90°',
-        textHintFlipV: 'Flip Vertical',
-        textHintFlipH: 'Flip Horizontal'
+        textHintFlipV: 'Flip Vertically',
+        textHintFlipH: 'Flip Horizontally'
 
     }, DE.Views.ImageSettings || {}));
 });
\ No newline at end of file
diff --git a/apps/documenteditor/main/app/view/ShapeSettings.js b/apps/documenteditor/main/app/view/ShapeSettings.js
index fc9bd2a04..ce9931af6 100644
--- a/apps/documenteditor/main/app/view/ShapeSettings.js
+++ b/apps/documenteditor/main/app/view/ShapeSettings.js
@@ -1846,7 +1846,7 @@ define([
         textFlip: 'Flip',
         textHint270: 'Rotate Left 90°',
         textHint90: 'Rotate Right 90°',
-        textHintFlipV: 'Flip Vertical',
-        textHintFlipH: 'Flip Horizontal'
+        textHintFlipV: 'Flip Vertically',
+        textHintFlipH: 'Flip Horizontally'
     }, DE.Views.ShapeSettings || {}));
 });
diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json
index 4bc90ef91..7129802e1 100644
--- a/apps/documenteditor/main/locale/en.json
+++ b/apps/documenteditor/main/locale/en.json
@@ -1242,6 +1242,11 @@
   "DE.Views.DocumentHolder.txtUngroup": "Ungroup",
   "DE.Views.DocumentHolder.updateStyleText": "Update %1 style",
   "DE.Views.DocumentHolder.vertAlignText": "Vertical Alignment",
+  "DE.Views.DocumentHolder.textRotate270": "Rotate Left 90°",
+  "DE.Views.DocumentHolder.textRotate90": "Rotate Right 90°",
+  "DE.Views.DocumentHolder.textFlipV": "Flip Vertically",
+  "DE.Views.DocumentHolder.textFlipH": "Flip Horizontally",
+  "DE.Views.DocumentHolder.textRotate": "Rotation",
   "DE.Views.DropcapSettingsAdvanced.cancelButtonText": "Cancel",
   "DE.Views.DropcapSettingsAdvanced.okButtonText": "Ok",
   "DE.Views.DropcapSettingsAdvanced.strBorders": "Borders & Fill",