[Libreoffice-commits] core.git: desktop/source include/LibreOfficeKit include/sfx2 include/svtools include/svx include/vcl libreofficekit/qa libreofficekit/source sfx2/source svtools/source svx/sdi svx/source sw/inc sw/sdi sw/source

Aditya Dewan iit2015097 at iiita.ac.in
Thu Aug 17 11:12:13 UTC 2017


 desktop/source/lib/init.cxx                              |   18 ++++++++
 include/LibreOfficeKit/LibreOfficeKitEnums.h             |   19 ++++++++
 include/sfx2/sfxsids.hrc                                 |    2 
 include/svtools/ruler.hxx                                |    1 
 include/svx/ruler.hxx                                    |    9 +++-
 include/svx/svxids.hrc                                   |    1 
 include/vcl/ITiledRenderable.hxx                         |    9 +++-
 libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx    |    1 
 libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx |    8 +++
 libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx |    2 
 libreofficekit/qa/gtktiledviewer/gtv.ui                  |   14 ++++++
 libreofficekit/source/gtk/lokdocview.cxx                 |   16 +++++++
 sfx2/source/appl/appuno.cxx                              |    2 
 svtools/source/control/ruler.cxx                         |    5 ++
 svx/sdi/svx.sdi                                          |   18 ++++++++
 svx/source/dialog/svxruler.cxx                           |   13 +++++
 sw/inc/unotxdoc.hxx                                      |    3 +
 sw/sdi/_viewsh.sdi                                       |    4 +
 sw/source/uibase/inc/swruler.hxx                         |    2 
 sw/source/uibase/misc/swruler.cxx                        |   33 ++++++++++++++-
 sw/source/uibase/uiview/viewtab.cxx                      |   19 ++++++++
 sw/source/uibase/uno/unotxdoc.cxx                        |    8 +++
 22 files changed, 202 insertions(+), 5 deletions(-)

New commits:
commit d64a7f4ba80fa2a0a0ad2bddc6906ab6b78a23c8
Author: Aditya Dewan <iit2015097 at iiita.ac.in>
Date:   Sat Jul 15 21:47:14 2017 +0530

    implementing callback for ruler invalidation
    
    adding commands to fetch and changee ruler state
    '.uno:RulerState' and '.uno:RulerStateChange'
    
    Change-Id: I66107039a7ae5893691feb45c8ab2e4aa476ea76
    Reviewed-on: https://gerrit.libreoffice.org/40727
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: pranavk <pranavk at collabora.co.uk>

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index c713b4b3831a..fca53b297529 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -65,6 +65,7 @@
 #include <svx/dialmgr.hxx>
 #include <svx/dialogs.hrc>
 #include <svx/strings.hrc>
+#include <svx/ruler.hxx>
 #include <svx/svxids.hrc>
 #include <svx/ucsubset.hxx>
 #include <vcl/svapp.hxx>
@@ -805,6 +806,7 @@ void CallbackFlushHandler::queue(const int type, const char* data)
             case LOK_CALLBACK_CURSOR_VISIBLE:
             case LOK_CALLBACK_SET_PART:
             case LOK_CALLBACK_STATUS_INDICATOR_SET_VALUE:
+            case LOK_CALLBACK_RULER_UPDATE:
             {
                 removeAll([type] (const queue_type::value_type& elem) { return (elem.first == type); });
             }
@@ -2044,6 +2046,18 @@ static char* getPostItsPos(LibreOfficeKitDocument* pThis)
     return strdup(aComments.toUtf8().getStr());
 }
 
+static char* getRulerState(LibreOfficeKitDocument* pThis)
+{
+    ITiledRenderable* pDoc = getTiledRenderable(pThis);
+    if (!pDoc)
+    {
+        gImpl->maLastExceptionMsg = "Document doesn't support tiled rendering";
+        return nullptr;
+    }
+    OUString state = pDoc->getRulerState();
+    return strdup(state.toUtf8().getStr());
+}
+
 static void doc_postKeyEvent(LibreOfficeKitDocument* pThis, int nType, int nCharCode, int nKeyCode)
 {
     SolarMutexGuard aGuard;
@@ -2651,6 +2665,10 @@ static char* doc_getCommandValues(LibreOfficeKitDocument* pThis, const char* pCo
     {
         return getPostItsPos(pThis);
     }
+    else if (aCommand == ".uno:RulerState")
+    {
+        return getRulerState(pThis);
+    }
     else if (aCommand.startsWith(aViewRowColumnHeaders))
     {
         ITiledRenderable* pDoc = getTiledRenderable(pThis);
diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h
index 300b71bb01ff..c3b71f3f1aad 100644
--- a/include/LibreOfficeKit/LibreOfficeKitEnums.h
+++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -504,7 +504,24 @@ typedef enum
     /**
      * The text content of the address field in Calc.
      */
-    LOK_CALLBACK_CELL_ADDRESS = 34
+    LOK_CALLBACK_CELL_ADDRESS = 34,
+    /**
+     * The key ruler related properties on change are reported by this.
+     *
+     * The payload format is:
+     *
+     * {
+     *      "margin1": "...",
+     *      "margin2": "...",
+     *      "leftOffset": "...",
+     *      "pageOffset": "...",
+     *      "pageWidth": "...",
+     *      "unit": "..."
+     *  }
+     *
+     * Here all aproperties are same as described in svxruler.
+     */
+    LOK_CALLBACK_RULER_UPDATE = 35
 
 }
 LibreOfficeKitCallbackType;
diff --git a/include/sfx2/sfxsids.hrc b/include/sfx2/sfxsids.hrc
index d8703674810e..ea38db1e3cea 100644
--- a/include/sfx2/sfxsids.hrc
+++ b/include/sfx2/sfxsids.hrc
@@ -541,6 +541,8 @@
 #define SID_COMP_BIBLIOGRAPHY               (SID_SVX_START + 880)
 #define SID_ADDRESS_DATA_SOURCE             (SID_SVX_START + 934)
 #define SID_OPEN_SMARTTAGOPTIONS            (SID_SVX_START + 1062)
+#define SID_RULER_MARGIN1                   (SID_SVX_START + 1063)
+#define SID_RULER_MARGIN2                   (SID_SVX_START + 1064)
 
 #define FID_SVX_START                       (SID_LIB_START + 500)
 #define FID_SEARCH_NOW                      (FID_SVX_START + 2)
diff --git a/include/svtools/ruler.hxx b/include/svtools/ruler.hxx
index e95febf8fabd..affdebf10099 100644
--- a/include/svtools/ruler.hxx
+++ b/include/svtools/ruler.hxx
@@ -773,6 +773,7 @@ public:
     void            SetMargin2() { SetMargin2( 0, RulerMarginStyle::Invisible ); }
     void            SetMargin2( long nPos, RulerMarginStyle nMarginStyle = RulerMarginStyle::Sizeable );
     long            GetMargin2() const;
+    long            GetPageWidth() const;
 
     void            SetLeftFrameMargin( long nPos );
     void            SetRightFrameMargin( long nPos );
diff --git a/include/svx/ruler.hxx b/include/svx/ruler.hxx
index 2fef8b7fb7c9..02baa710d2c8 100644
--- a/include/svx/ruler.hxx
+++ b/include/svx/ruler.hxx
@@ -41,6 +41,12 @@ class SvxObjectItem;
 class SfxBoolItem;
 struct SvxRuler_Impl;
 
+enum class RulerChangeType
+{
+    MARGIN1,
+    MARGIN2
+};
+
 enum class SvxRulerDragFlags
 {
     NONE                       = 0x00,
@@ -250,7 +256,6 @@ protected:
                 bool bForceDontConsiderHidden = false,
                 sal_uInt16 nAct=USHRT_MAX ) const;
     long CalcPropMaxRight(sal_uInt16 nCol = USHRT_MAX) const;
-    long GetPageWidth() const;
 
 public:
 
@@ -273,6 +278,8 @@ public:
 
     //#i24363# tab stops relative to indent
     void SetTabsRelativeToIndent( bool bRel );
+    void SetValues(RulerChangeType type, long value);
+    long GetPageWidth() const;
 };
 
 #endif
diff --git a/include/svx/svxids.hrc b/include/svx/svxids.hrc
index 2c37e45b9c21..157eb35431f1 100644
--- a/include/svx/svxids.hrc
+++ b/include/svx/svxids.hrc
@@ -234,6 +234,7 @@
 
 // CAUTION! Range <64 .. 67> used by EditEngine (!)
 
+#define SID_RULER_CHANGE_STATE                          ( SID_SVX_START + 78 )
 #define SID_RULER_NULL_OFFSET                           ( SID_SVX_START + 79 )
 #define SID_RULER_BORDERS                               ( SID_SVX_START + 80 )
 #define SID_RULER_OBJECT                                ( SID_SVX_START + 81 )
diff --git a/include/vcl/ITiledRenderable.hxx b/include/vcl/ITiledRenderable.hxx
index 1689eee3543d..7b0720a429b7 100644
--- a/include/vcl/ITiledRenderable.hxx
+++ b/include/vcl/ITiledRenderable.hxx
@@ -13,6 +13,7 @@
 
 #include <LibreOfficeKit/LibreOfficeKitTypes.h>
 #include <tools/gen.hxx>
+#include <svx/ruler.hxx>
 #include <vcl/pointr.hxx>
 #include <vcl/virdev.hxx>
 #include <com/sun/star/datatransfer/clipboard/XClipboardEx.hpp>
@@ -220,8 +221,14 @@ public:
     {
         return OUString();
     }
-};
 
+    /// Implementation for
+    /// lok::Document::getCommandValues(".uno:RulerState");
+    virtual OUString getRulerState()
+    {
+        return OUString();
+    }
+};
 } // namespace vcl
 
 #endif // INCLUDED_VCL_ITILEDRENDERABLE_HXX
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx
index 0da85fd89e65..f94ef776b6d2 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-main-toolbar.cxx
@@ -103,6 +103,7 @@ gtv_main_toolbar_init(GtvMainToolbar* toolbar)
     gtk_builder_add_callback_symbol(builder.get(), "doCopy", G_CALLBACK(doCopy));
     gtk_builder_add_callback_symbol(builder.get(), "doPaste", G_CALLBACK(doPaste));
     gtk_builder_add_callback_symbol(builder.get(), "createView", G_CALLBACK(createView));
+    gtk_builder_add_callback_symbol(builder.get(), "getRulerState", G_CALLBACK(getRulerState));
     gtk_builder_add_callback_symbol(builder.get(), "unoCommandDebugger", G_CALLBACK(unoCommandDebugger));
     gtk_builder_add_callback_symbol(builder.get(), "toggleEditing", G_CALLBACK(toggleEditing));
     gtk_builder_add_callback_symbol(builder.get(), "changePartMode", G_CALLBACK(changePartMode));
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx
index 3c9ee3e405f2..9e0b575dcdd5 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.cxx
@@ -133,6 +133,14 @@ void createView(GtkWidget* pButton, gpointer /*pItem*/)
     gtv_application_window_create_view_from_window(GTV_APPLICATION_WINDOW(window));
 }
 
+void getRulerState(GtkWidget* pButton, gpointer /*pItem*/)
+{
+    const std::string type = ".uno:RulerState";
+    GtvApplicationWindow* window = GTV_APPLICATION_WINDOW(gtk_widget_get_toplevel(pButton));
+    LibreOfficeKitDocument* pDocument = lok_doc_view_get_document(LOK_DOC_VIEW(window->lokdocview));
+    pDocument->pClass->getCommandValues(pDocument, type.c_str());
+}
+
 static void removeUnoParam(GtkWidget* pWidget, gpointer userdata)
 {
     GtkWidget* pParamAreaBox = GTK_WIDGET(userdata);
diff --git a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx
index a19a7b5cd744..2f9948fe61d7 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx
+++ b/libreofficekit/qa/gtktiledviewer/gtv-signal-handlers.hxx
@@ -20,6 +20,8 @@ void doPaste(GtkWidget* pButton, gpointer /*pItem*/);
 
 void createView(GtkWidget* pButton, gpointer /*pItem*/);
 
+void getRulerState(GtkWidget* pButton, gpointer /*pItem*/);
+
 void unoCommandDebugger(GtkWidget* pButton, gpointer /* pItem */);
 
 void toggleEditing(GtkWidget* pButton, gpointer /*pItem*/);
diff --git a/libreofficekit/qa/gtktiledviewer/gtv.ui b/libreofficekit/qa/gtktiledviewer/gtv.ui
index e27f79714a4b..eacec33b2d1b 100644
--- a/libreofficekit/qa/gtktiledviewer/gtv.ui
+++ b/libreofficekit/qa/gtktiledviewer/gtv.ui
@@ -486,6 +486,20 @@
         <property name="homogeneous">True</property>
       </packing>
     </child>
+    <child>
+      <object class="GtkToolButton" id="btn_rulerstate">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="label" translatable="yes">.uno:UpdateRuler</property>
+        <property name="use_underline">True</property>
+        <property name="icon_name">text-x-generic</property>
+        <signal name="clicked" handler="getRulerState" swapped="no"/>
+      </object>
+      <packing>
+        <property name="expand">False</property>
+        <property name="homogeneous">True</property>
+      </packing>
+    </child>
   </object>
   <object class="GtkToolbar" id="toolbar2">
     <property name="visible">True</property>
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index 37932525596c..3d4b0fa8279d 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -278,6 +278,7 @@ enum
     TEXT_SELECTION,
     PASSWORD_REQUIRED,
     COMMENT,
+    RULER,
 
     LAST_SIGNAL
 };
@@ -433,6 +434,8 @@ callbackTypeToString (int nType)
         return "LOK_CALLBACK_REDLINE_TABLE_ENTRY_MODIFIED";
     case LOK_CALLBACK_COMMENT:
         return "LOK_CALLBACK_COMMENT";
+    case LOK_CALLBACK_RULER_UPDATE:
+        return "LOK_CALLBACK_RULER_UPDATE";
     }
     g_assert(false);
     return nullptr;
@@ -1422,6 +1425,9 @@ callback (gpointer pData)
     case LOK_CALLBACK_COMMENT:
         g_signal_emit(pCallback->m_pDocView, doc_view_signals[COMMENT], 0, pCallback->m_aPayload.c_str());
         break;
+    case LOK_CALLBACK_RULER_UPDATE:
+        g_signal_emit(pCallback->m_pDocView, doc_view_signals[RULER], 0, pCallback->m_aPayload.c_str());
+        break;
     default:
         g_assert(false);
         break;
@@ -3208,6 +3214,16 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
                      g_cclosure_marshal_generic,
                      G_TYPE_NONE, 1,
                      G_TYPE_STRING);
+
+    doc_view_signals[RULER] =
+        g_signal_new("ruler",
+                     G_TYPE_FROM_CLASS(pGObjectClass),
+                     G_SIGNAL_RUN_FIRST,
+                     0,
+                     nullptr, nullptr,
+                     g_cclosure_marshal_generic,
+                     G_TYPE_NONE, 1,
+                     G_TYPE_STRING);
 }
 
 SAL_DLLPUBLIC_EXPORT GtkWidget*
diff --git a/sfx2/source/appl/appuno.cxx b/sfx2/source/appl/appuno.cxx
index d4d7cfbc9ab5..352dbcfb5511 100644
--- a/sfx2/source/appl/appuno.cxx
+++ b/sfx2/source/appl/appuno.cxx
@@ -88,6 +88,8 @@ SfxFormalArgument const aFormalArgs[] = {
     { reinterpret_cast<SfxType*>(&aSfxBoolItem_Impl), "VersionMajor", SID_DOCINFO_MAJOR },
     { reinterpret_cast<SfxType*>(&aSfxStringItem_Impl), "FilterOptions", SID_FILE_FILTEROPTIONS },
     { reinterpret_cast<SfxType*>(&aSfxStringItem_Impl), "FilterName", SID_FILTER_NAME },
+    { reinterpret_cast<SfxType*>(&aSfxStringItem_Impl), "Margin1", SID_RULER_MARGIN1 },
+    { reinterpret_cast<SfxType*>(&aSfxStringItem_Impl), "Margin2", SID_RULER_MARGIN2 },
 //    { reinterpret_cast<SfxType*>(&aSfxStringItem_Impl), "FileName", SID_FILE_NAME },
     { reinterpret_cast<SfxType*>(&aSfxStringItem_Impl), "URL", SID_FILE_NAME },
     { reinterpret_cast<SfxType*>(&aSfxStringItem_Impl), "OpenFlags", SID_OPTIONS },
diff --git a/svtools/source/control/ruler.cxx b/svtools/source/control/ruler.cxx
index 8392ba2fd678..f4deadc572e1 100644
--- a/svtools/source/control/ruler.cxx
+++ b/svtools/source/control/ruler.cxx
@@ -2678,6 +2678,11 @@ void Ruler::SetTextRTL(bool bRTL)
 
 }
 
+long Ruler::GetPageWidth() const
+{
+    return mpData->nPageWidth;
+}
+
 long Ruler::GetPageOffset() const
 {
     return mpData->nPageOff;
diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi
index b3583814bb40..ead2a6047ef3 100644
--- a/svx/sdi/svx.sdi
+++ b/svx/sdi/svx.sdi
@@ -7101,6 +7101,24 @@ SvxProtectItem RulerProtect SID_RULER_PROTECT
     GroupId = SfxGroupId::View;
 ]
 
+SfxVoidItem RulerChangeState SID_RULER_CHANGE_STATE
+(SfxStringItem Margin1 SID_RULER_MARGIN1, SfxStringItem Margin2 SID_RULER_MARGIN2)
+[
+    AutoUpdate = FALSE,
+    FastCall = TRUE,
+    ReadOnlyDoc = TRUE,
+    Toggle = FALSE,
+    Container = FALSE,
+    RecordAbsolute = FALSE,
+    RecordPerSet;
+
+
+    AccelConfig = FALSE,
+    MenuConfig = FALSE,
+    ToolBoxConfig = FALSE,
+    GroupId = ;
+]
+
 
 SfxVoidItem SbaExecuteSql SID_FM_EXECUTE
 ()
diff --git a/svx/source/dialog/svxruler.cxx b/svx/source/dialog/svxruler.cxx
index a506345821c3..01b6a2370323 100644
--- a/svx/source/dialog/svxruler.cxx
+++ b/svx/source/dialog/svxruler.cxx
@@ -37,6 +37,7 @@
 #include <editeng/tstpitem.hxx>
 #include <editeng/lrspitem.hxx>
 #include <editeng/protitem.hxx>
+#include <comphelper/lok.hxx>
 
 #include <svx/svdtrans.hxx>
 
@@ -3613,4 +3614,14 @@ void SvxRuler::SetTabsRelativeToIndent( bool bRel )
     mxRulerImpl->bIsTabsRelativeToIndent = bRel;
 }
 
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+void SvxRuler::SetValues(RulerChangeType type, long diffValue)
+{
+    if (diffValue == 0)
+        return;
+
+    if (type == RulerChangeType::MARGIN1)
+        AdjustMargin1(diffValue);
+    else if (type == RulerChangeType::MARGIN2)
+        SetMargin2( GetMargin2() - diffValue);
+    ApplyMargins();
+}
\ No newline at end of file
diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx
index 9316b919137e..797aec9512fa 100644
--- a/sw/inc/unotxdoc.hxx
+++ b/sw/inc/unotxdoc.hxx
@@ -64,6 +64,7 @@
 #include <rtl/ref.hxx>
 #include <svl/itemprop.hxx>
 #include <svx/fmdmod.hxx>
+#include <svx/ruler.hxx>
 #include <editeng/UnoForbiddenCharsTable.hxx>
 #include <cppuhelper/weak.hxx>
 #include <cppuhelper/implbase.hxx>
@@ -423,6 +424,8 @@ public:
     OUString getTrackedChanges() override;
     /// @see vcl::ITiledRenderable::getTrackedChangeAuthors().
     OUString getTrackedChangeAuthors() override;
+
+    OUString getRulerState() override;
     /// @see vcl::ITiledRenderable::getPostIts().
     OUString getPostIts() override;
     // css::tiledrendering::XTiledRenderable
diff --git a/sw/sdi/_viewsh.sdi b/sw/sdi/_viewsh.sdi
index 62e67f6b0d5c..d6ba21022c0e 100644
--- a/sw/sdi/_viewsh.sdi
+++ b/sw/sdi/_viewsh.sdi
@@ -235,6 +235,10 @@ interface BaseTextEditView
         StateMethod = StateTabWin ;
         DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
     ]
+    SID_RULER_CHANGE_STATE
+    [
+        ExecMethod = ExecTabWin ;
+    ]
     SID_RULER_BORDERS // status()
     [
         ExecMethod = ExecTabWin ;
diff --git a/sw/source/uibase/inc/swruler.hxx b/sw/source/uibase/inc/swruler.hxx
index c8f1deb12842..7821d3f89281 100644
--- a/sw/source/uibase/inc/swruler.hxx
+++ b/sw/source/uibase/inc/swruler.hxx
@@ -41,6 +41,7 @@ public:
      * \param rRect ignored
      */
     virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
+    const std::string CreateJsonNotification();
 
 protected:
     SwViewShell * mpViewShell;     //< Shell to check if there is any comments on doc and their visibility
@@ -50,6 +51,7 @@ protected:
     int         mnFadeRate;      //< From 0 to 100. 0 means not highlighted.
     ScopedVclPtr<VirtualDevice> maVirDev;      //< VirtualDevice of this window. Just for convenience.
 
+    void NotifyKit();
     /**
      * Callback function to handle a mouse button down event.
      *
diff --git a/sw/source/uibase/misc/swruler.cxx b/sw/source/uibase/misc/swruler.cxx
index c1c28dd50d9f..5c33febef4bc 100644
--- a/sw/source/uibase/misc/swruler.cxx
+++ b/sw/source/uibase/misc/swruler.cxx
@@ -24,9 +24,11 @@
 #include <vcl/window.hxx>
 #include <vcl/settings.hxx>
 #include "strings.hrc"
+#include <comphelper/lok.hxx>
+#include <LibreOfficeKit/LibreOfficeKitEnums.h>
+#include <boost/property_tree/json_parser.hpp>
 
 #define CONTROL_BORDER_WIDTH    1
-
 #define CONTROL_LEFT_OFFSET     6
 #define CONTROL_RIGHT_OFFSET    3
 #define CONTROL_TOP_OFFSET      4
@@ -246,12 +248,41 @@ void SwCommentRuler::MouseButtonDown( const MouseEvent& rMEvt )
     Invalidate();
 }
 
+const std::string SwCommentRuler::CreateJsonNotification()
+{
+    boost::property_tree::ptree jsonNotif;
+
+    jsonNotif.put("margin1", convertTwipToMm100(GetMargin1()));
+    jsonNotif.put("margin2", convertTwipToMm100(GetMargin2()));
+    jsonNotif.put("leftOffset", convertTwipToMm100(GetNullOffset()));
+    jsonNotif.put("pageOffset", convertTwipToMm100(GetPageOffset()));
+    jsonNotif.put("pageWidth", convertTwipToMm100(GetPageWidth()));
+
+    RulerUnitData aUnitData = GetCurrentRulerUnit();
+    jsonNotif.put("unit", aUnitData.aUnitStr);
+
+    std::stringstream aStream;
+    boost::property_tree::write_json(aStream, jsonNotif);
+    std::string aPayload = aStream.str();
+    return aPayload;
+}
+
+void SwCommentRuler::NotifyKit()
+{
+    if (!comphelper::LibreOfficeKit::isActive())
+        return;
+
+    const std::string test = CreateJsonNotification();
+    mpViewShell->GetSfxViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_RULER_UPDATE, test.c_str());
+}
+
 void SwCommentRuler::Update()
 {
     tools::Rectangle aPreviousControlRect = GetCommentControlRegion();
     SvxRuler::Update();
     if (aPreviousControlRect != GetCommentControlRegion())
         Invalidate();
+    NotifyKit();
 }
 
 void SwCommentRuler::UpdateCommentHelpText()
diff --git a/sw/source/uibase/uiview/viewtab.cxx b/sw/source/uibase/uiview/viewtab.cxx
index 84b1af29a751..ad92a7ae6e21 100644
--- a/sw/source/uibase/uiview/viewtab.cxx
+++ b/sw/source/uibase/uiview/viewtab.cxx
@@ -52,6 +52,7 @@
 #include "wview.hxx"
 #include "fmtcol.hxx"
 #include "section.hxx"
+#include "swruler.hxx"
 
 #include "ndtxt.hxx"
 #include "pam.hxx"
@@ -801,6 +802,24 @@ void SwView::ExecTabWin( SfxRequest const & rReq )
                 rSh.SetAttrItem( aULSpace );
         }
         break;
+
+    case SID_RULER_CHANGE_STATE:
+        {
+            const SfxPoolItem *pMargin1, *pMargin2;
+            if ( pReqArgs &&
+                 pReqArgs->GetItemState(SID_RULER_MARGIN1,true,&pMargin1) == SfxItemState::SET )
+            {
+                const OUString ratio = static_cast<const SfxStringItem*>(pMargin1)->GetValue();
+                GetHRuler().SetValues(RulerChangeType::MARGIN1, GetHRuler().GetPageWidth() * ratio.toFloat());
+            }
+            else if ( pReqArgs &&
+                 pReqArgs->GetItemState(SID_RULER_MARGIN2,true,&pMargin2) == SfxItemState::SET )
+            {
+                const OUString ratio = static_cast<const SfxStringItem*>(pMargin2)->GetValue();
+                GetHRuler().SetValues(RulerChangeType::MARGIN2, GetHRuler().GetPageWidth() * ratio.toFloat());
+            }
+        }
+        break;
     case SID_RULER_BORDERS_VERTICAL:
     case SID_RULER_BORDERS:
         if ( pReqArgs )
diff --git a/sw/source/uibase/uno/unotxdoc.cxx b/sw/source/uibase/uno/unotxdoc.cxx
index c3afd987974f..cc765f88feab 100644
--- a/sw/source/uibase/uno/unotxdoc.cxx
+++ b/sw/source/uibase/uno/unotxdoc.cxx
@@ -130,6 +130,8 @@
 #include <comphelper/storagehelper.hxx>
 #include <cppuhelper/supportsservice.hxx>
 #include <unotools/saveopt.hxx>
+#include "swruler.hxx"
+
 
 #include <EnhancedPDFExportHelper.hxx>
 #include <numrule.hxx>
@@ -3255,6 +3257,12 @@ OUString SwXTextDocument::getTrackedChangeAuthors()
     return SW_MOD()->GetRedlineAuthorInfo();
 }
 
+OUString SwXTextDocument::getRulerState()
+{
+    SwView* pView = pDocShell->GetView();
+    return OUString::fromUtf8((dynamic_cast<SwCommentRuler&>(pView->GetHRuler())).CreateJsonNotification().c_str());
+}
+
 OUString SwXTextDocument::getPostIts()
 {
     SolarMutexGuard aGuard;


More information about the Libreoffice-commits mailing list