Hi all!

I'm working on Bug 34423 (more of a feature request).
There's this extension called OpenOffice Toolbox on the bug's page. It 
implements image rotation. I want to port that to C++.
I added a menu item to the right click menu of the image (Rotate... <- will 
call a dialog), now it just rotates the image with a hard coded value (90 
degrees).
To be precise it should rotate the image, but I don't really know this UNO 
thing, so I'm not sure what I'm doing (wrong) :)

My goal is to somehow get the selected image (XShape ?) and change its 
'RotateAngle' property (this was used in the extension code (basic)).
I hope someone can help me with this.

Szabolcs
                                          
From 2b65880c462367c71b2eb07b0787404260a193b1 Mon Sep 17 00:00:00 2001
From: Szabolcs Dezsi <dezsisz...@hotmail.com>
Date: Mon, 2 Apr 2012 19:15:17 +0200
Subject: [PATCH] Rotate help

---
 sw/inc/cmdid.h                |    2 ++
 sw/inc/swcommands.h           |    1 +
 sw/sdi/_grfsh.sdi             |    6 ++++++
 sw/sdi/swriter.sdi            |   23 +++++++++++++++++++++++
 sw/source/ui/app/mn.src       |    6 ++++++
 sw/source/ui/shells/grfsh.cxx |   23 +++++++++++++++++++++++
 6 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h
index 7802db7..d888c05 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -619,6 +619,8 @@ included in c-context files, so c++ style stuff will cause problems.
 #define FN_TABLE_AUTOSUM            (FN_FORMAT + 195)  /* */
 #define FN_SET_CONTROL_HANDLER      (FN_FORMAT + 199)  /* set macro */
 
+#define FN_ROTATE                   (FN_FORMAT + 196)  /* rotate picture */
+
 #define FN_IS_IMAGE                  (FN_FORMAT2 + 6)   /* numbering: with graphic? */
 
 #define FN_GOTO_NEXT_REGION          (FN_FORMAT2 + 9)   /* */
diff --git a/sw/inc/swcommands.h b/sw/inc/swcommands.h
index 411ec5c..e211ef5 100644
--- a/sw/inc/swcommands.h
+++ b/sw/inc/swcommands.h
@@ -439,6 +439,7 @@
 #define CMD_FN_HEADERFOOTER_BORDERBACK              ".uno:HeaderFooterBorderBackground"
 #define CMD_FN_PAGEBREAK_EDIT                       ".uno:PageBreakEdit"
 #define CMD_FN_PAGEBREAK_DELETE                     ".uno:PageBreakDelete"
+#define CMD_FN_ROTATE                               ".uno:RotatePicture"
 
 #endif
 
diff --git a/sw/sdi/_grfsh.sdi b/sw/sdi/_grfsh.sdi
index d60dc39..942b990 100644
--- a/sw/sdi/_grfsh.sdi
+++ b/sw/sdi/_grfsh.sdi
@@ -70,6 +70,12 @@ interface BaseTextGraphic
         DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
     ]
 
+    FN_ROTATE
+    [
+        ExecMethod = Execute ;
+        StateMethod = GetAttrState ;
+    ]
+
     SID_TWAIN_TRANSFER
     [
         ExecMethod = Execute ;
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index d7cb8b3..ee307f7 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -3536,6 +3536,29 @@ SfxVoidItem ExternalEdit FN_EXTERNAL_EDIT
 ]
 //------------------------------------------------------------------------
 
+SfxVoidItem RotatePicture FN_ROTATE
+()
+[
+    /* flags: */
+    AutoUpdate = FALSE,
+    Cachable = Cachable,
+    FastCall = FALSE,
+    HasCoreId = FALSE,
+    HasDialog = FALSE,
+    ReadOnlyDoc = TRUE,
+    Toggle = FALSE,
+    Container = FALSE,
+    RecordAbsolute = FALSE,
+    RecordPerSet;
+    Synchron;
+
+    /* config: */
+    AccelConfig = TRUE,
+    MenuConfig = TRUE,
+    StatusBarConfig = FALSE,
+    ToolBoxConfig = TRUE,
+    GroupId = GID_GRAPHIC;
+]
 
 //--------------------------------------------------------------------------
 SfxVoidItem Grow FN_GROW_FONT_SIZE
diff --git a/sw/source/ui/app/mn.src b/sw/source/ui/app/mn.src
index e1f2aa1..1933fec 100644
--- a/sw/source/ui/app/mn.src
+++ b/sw/source/ui/app/mn.src
@@ -1262,6 +1262,12 @@ Menu MN_GRF_POPUPMENU
     {
         MN_ALIGN_FRAME
         MN_MOUSE_FRAME_WITH_CONTOUR
+        MenuItem
+        {
+            Identifier = FN_ROTATE ;
+            HelpId = CMD_FN_ROTATE ;
+            Text [ en-US ] = "Rotate..." ;
+        };
         SEPARATOR ;
         MN_TITLE_DESCRIPTION_SHAPE
         SEPARATOR ;
diff --git a/sw/source/ui/shells/grfsh.cxx b/sw/source/ui/shells/grfsh.cxx
index 7b537e4..e1dcb25 100644
--- a/sw/source/ui/shells/grfsh.cxx
+++ b/sw/source/ui/shells/grfsh.cxx
@@ -81,8 +81,15 @@
 
 #include "swabstdlg.hxx"
 
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/view/XSelectionSupplier.hpp>
+
 #define TOOLBOX_NAME    ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "colorbar" ) )
 
+using namespace ::com::sun::star;
+
 SFX_IMPL_INTERFACE(SwGrfShell, SwBaseShell, SW_RES(STR_SHELLNAME_GRAPHIC))
 {
     SFX_POPUPMENU_REGISTRATION(SW_RES(MN_GRF_POPUPMENU));
@@ -125,6 +132,22 @@ void SwGrfShell::Execute(SfxRequest &rReq)
         }
         break;
 
+        case FN_ROTATE:
+        {
+            uno::Reference< frame::XModel > xModel = GetView().GetDocShell() ? GetView().GetDocShell()->GetModel() : NULL;
+            if ( xModel.is() )
+            {
+                uno::Reference< frame::XController > xController = xModel->getCurrentController();
+                uno::Reference< view::XSelectionSupplier >  xDocView( xModel->getCurrentController(), uno::UNO_QUERY );
+                uno::Any xShape = xDocView->getSelection();
+                uno::Reference< beans::XPropertySet > rShapeProps( xShape, uno::UNO_QUERY );
+                uno::Any Angle;
+                Angle <<= (long)9000;
+                rShapeProps->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "RotateAngle" )), Angle );
+            }
+        }
+        break;
+
         case SID_INSERT_GRAPHIC:
         case FN_FORMAT_GRAFIC_DLG:
         {
-- 
1.7.7

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to