[Libreoffice-commits] core.git: Branch 'feature/gsoc-tiled-rendering' - 143 commits - basebmp/test basegfx/source bin/lo-commit-stat chart2/CppunitTest_chart2_trendcalculators.mk chart2/Module_chart2.mk chart2/qa chart2/source comphelper/source config_host/config_global.h.in configure.ac connectivity/source cui/source dbaccess/source desktop/scripts desktop/source download.lst editeng/source external/liborcus filter/source forms/source formula/source framework/source helpcontent2 i18nlangtag/source i18npool/source icon-themes/breeze icon-themes/sifr include/dbaccess include/editeng include/filter include/LibreOfficeKit include/rtl include/sfx2 include/svtools include/tools include/ucbhelper include/vcl libreofficekit/qa libreofficekit/source lotuswordpro/source offapi/com offapi/UnoApi_offapi.mk officecfg/registry qadevOOo/qa readlicense_oo/license sc/inc sc/qa sc/source sdext/source sd/qa sd/source sd/uiconfig sfx2/Library_sfx.mk sfx2/source solenv/gbuild starmath/inc svl/source svtools/source s vx/source sw/inc sw/qa sw/source toolkit/Library_tk.mk ucb/source unusedcode.easy vcl/headless vcl/inc vcl/opengl vcl/source vcl/unx writerfilter/source writerperfect/source xmloff/source

Pranav Kant pranavk at gnome.org
Mon Jun 22 03:01:08 PDT 2015


Rebased ref, commits from common ancestor:
commit 23c75e1b367b7687d42e8b77cedc72fb4f802748
Author: Pranav Kant <pranavk at gnome.org>
Date:   Mon Jun 22 15:27:24 2015 +0530

    lokdocview: fixed a signal name
    
    Change-Id: I645516d43562dfa03c27e2bea366e9a161829bfe

diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index c746b84..cff02ea 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -1352,7 +1352,7 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
      * @pDocView: the #LOKDocView on which the signal is emitted
      * @aHyperlink: the URI which the application should handle
      */
-    doc_view_signals[PART_CHANGED] =
+    doc_view_signals[HYPERLINK_CLICKED] =
         g_signal_new("hyperlinked-clicked",
                      G_TYPE_FROM_CLASS(pGObjectClass),
                      G_SIGNAL_RUN_FIRST,
commit a2451a94a680a05f6beef639a0c75b4e615197d1
Author: Pranav Kant <pranavk at gnome.org>
Date:   Fri Jun 19 01:06:50 2015 +0530

    lokdocview: Use *get_instance_private () to get private structure
    
    Let lok_doc_view_get_instance_private () do the pointer
    arithmatic. Additionally, we are saving sizeof (void*) already in
    the _LOKDocView struct with this approach.
    
    Change-Id: I6d991d5834ef15dad24acb14a1d4bbf7d03df762

diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h
index 3eaf283..3a1628b 100644
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
@@ -32,7 +32,6 @@ typedef struct _LOKDocViewPrivate LOKDocViewPrivate;
 struct _LOKDocView
 {
     GtkDrawingArea aDrawingArea;
-    LOKDocViewPrivate* priv;
 };
 
 struct _LOKDocViewClass
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index bc383c5..c746b84 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -229,7 +229,7 @@ isEmptyRectangle(const GdkRectangle& rRectangle)
 static void
 signalKey (LOKDocView* pDocView, const GdkEvent* pEvent)
 {
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
     int nCharCode = 0;
     int nKeyCode = 0;
     guint keyval;
@@ -292,7 +292,7 @@ static gboolean
 handleTimeout (gpointer pData)
 {
     LOKDocView* pDocView = LOK_DOC_VIEW (pData);
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
 
     if (priv->m_bEdit)
     {
@@ -366,7 +366,7 @@ globalCallbackWorker(int nType, const char* pPayload, void* pData)
 static GdkRectangle
 payloadToRectangle (LOKDocView* pDocView, const char* pPayload)
 {
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
     GdkRectangle aRet;
     gchar** ppCoordinates = g_strsplit(pPayload, ", ", 4);
     gchar** ppCoordinate = ppCoordinates;
@@ -418,7 +418,7 @@ payloadToRectangles(LOKDocView* pDocView, const char* pPayload)
 static void
 setTilesInvalid (LOKDocView* pDocView, const GdkRectangle& rRectangle)
 {
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
     GdkRectangle aRectanglePixels;
     GdkPoint aStart, aEnd;
 
@@ -442,7 +442,7 @@ callback (gpointer pData)
 {
     CallbackData* pCallback = static_cast<CallbackData*>(pData);
     LOKDocView* pDocView = LOK_DOC_VIEW (pCallback->m_pDocView);
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
 
     switch (pCallback->m_nType)
     {
@@ -560,7 +560,7 @@ renderHandle(LOKDocView* pDocView,
              cairo_surface_t* pHandle,
              GdkRectangle& rRectangle)
 {
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
     GdkPoint aCursorBottom;
     int nHandleWidth, nHandleHeight;
     double fHandleScale;
@@ -593,7 +593,7 @@ renderGraphicHandle(LOKDocView* pDocView,
                     const GdkRectangle& rSelection,
                     cairo_surface_t* pHandle)
 {
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
     int nHandleWidth, nHandleHeight;
     GdkRectangle aSelection;
 
@@ -660,7 +660,7 @@ renderGraphicHandle(LOKDocView* pDocView,
 static gboolean
 renderDocument(LOKDocView* pDocView, cairo_t* pCairo)
 {
-    LOKDocViewPrivate *priv = pDocView->priv;
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
     GdkRectangle aVisibleArea;
     long nDocumentWidthPixels = twipToPixel(priv->m_nDocumentWidthTwips, priv->m_fZoom);
     long nDocumentHeightPixels = twipToPixel(priv->m_nDocumentHeightTwips, priv->m_fZoom);
@@ -721,7 +721,7 @@ renderDocument(LOKDocView* pDocView, cairo_t* pCairo)
 static gboolean
 renderOverlay(LOKDocView* pDocView, cairo_t* pCairo)
 {
-    LOKDocViewPrivate *priv = pDocView->priv;
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
 
     if (priv->m_bEdit && priv->m_bCursorVisible && priv->m_bCursorOverlayVisible && !isEmptyRectangle(priv->m_aVisibleCursor))
     {
@@ -799,7 +799,7 @@ static gboolean
 lok_doc_view_signal_button(GtkWidget* pWidget, GdkEventButton* pEvent)
 {
     LOKDocView* pDocView = LOK_DOC_VIEW (pWidget);
-    LOKDocViewPrivate *priv = pDocView->priv;
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
 
     g_info("LOKDocView_Impl::signalButton: %d, %d (in twips: %d, %d)",
            (int)pEvent->x, (int)pEvent->y,
@@ -942,7 +942,7 @@ static gboolean
 lok_doc_view_signal_motion (GtkWidget* pWidget, GdkEventMotion* pEvent)
 {
     LOKDocView* pDocView = LOK_DOC_VIEW (pWidget);
-    LOKDocViewPrivate *priv = pDocView->priv;
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
     GdkPoint aPoint;
 
     if (priv->m_bInDragMiddleHandle)
@@ -1001,8 +1001,8 @@ lok_doc_view_signal_motion (GtkWidget* pWidget, GdkEventMotion* pEvent)
 
 static void lok_doc_view_init (LOKDocView* pDocView)
 {
-    pDocView->priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
-    pDocView->priv->m_bCursorVisible = true;
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    priv->m_bCursorVisible = true;
 
     gtk_widget_add_events(GTK_WIDGET(pDocView),
                           GDK_BUTTON_PRESS_MASK
@@ -1015,7 +1015,7 @@ static void lok_doc_view_init (LOKDocView* pDocView)
 static void lok_doc_view_set_property (GObject* object, guint propId, const GValue *value, GParamSpec *pspec)
 {
     LOKDocView* pDocView = LOK_DOC_VIEW (object);
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
 
     switch (propId)
     {
@@ -1045,7 +1045,7 @@ static void lok_doc_view_set_property (GObject* object, guint propId, const GVal
 static void lok_doc_view_get_property (GObject* object, guint propId, GValue *value, GParamSpec *pspec)
 {
     LOKDocView* pDocView = LOK_DOC_VIEW (object);
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
 
     switch (propId)
     {
@@ -1097,7 +1097,7 @@ static gboolean lok_doc_view_draw (GtkWidget* pWidget, cairo_t* pCairo)
 static void lok_doc_view_finalize (GObject* object)
 {
     LOKDocView* pDocView = LOK_DOC_VIEW (object);
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
 
     if (priv->m_pDocument)
         priv->m_pDocument->pClass->destroy (priv->m_pDocument);
@@ -1110,18 +1110,19 @@ static void lok_doc_view_finalize (GObject* object)
 static gboolean lok_doc_view_initable_init (GInitable *initable, GCancellable* /*cancellable*/, GError **error)
 {
     LOKDocView *pDocView = LOK_DOC_VIEW (initable);
+    LOKDocViewPrivate* priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
 
-    if (pDocView->priv->m_pOffice != NULL)
+    if (priv->m_pOffice != NULL)
         return TRUE;
 
-    pDocView->priv->m_pOffice = lok_init (pDocView->priv->m_aLOPath);
+    priv->m_pOffice = lok_init (priv->m_aLOPath);
 
-    if (pDocView->priv->m_pOffice == NULL)
+    if (priv->m_pOffice == NULL)
     {
         g_set_error (error,
                      g_quark_from_static_string ("LOK initialization error"), 0,
                      "Failed to get LibreOfficeKit context. Make sure path (%s) is correct",
-                     pDocView->priv->m_aLOPath);
+                     priv->m_aLOPath);
         return FALSE;
     }
 
@@ -1387,39 +1388,41 @@ lok_doc_view_new (const gchar* pPath, GCancellable *cancellable, GError **error)
 SAL_DLLPUBLIC_EXPORT gboolean
 lok_doc_view_open_document (LOKDocView* pDocView, const gchar* pPath)
 {
-    if ( pDocView->priv->m_pDocument )
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+
+    if ( priv->m_pDocument )
     {
-        pDocView->priv->m_pDocument->pClass->destroy( pDocView->priv->m_pDocument );
-        pDocView->priv->m_pDocument = 0;
+        priv->m_pDocument->pClass->destroy( priv->m_pDocument );
+        priv->m_pDocument = 0;
     }
 
-    pDocView->priv->m_pOffice->pClass->registerCallback(pDocView->priv->m_pOffice, globalCallbackWorker, pDocView);
-    pDocView->priv->m_pDocument = pDocView->priv->m_pOffice->pClass->documentLoad( pDocView->priv->m_pOffice, pPath );
-    if ( !pDocView->priv->m_pDocument )
+    priv->m_pOffice->pClass->registerCallback(priv->m_pOffice, globalCallbackWorker, pDocView);
+    priv->m_pDocument = priv->m_pOffice->pClass->documentLoad( priv->m_pOffice, pPath );
+    if ( !priv->m_pDocument )
     {
         // FIXME: should have a GError parameter and populate it.
-        char *pError = pDocView->priv->m_pOffice->pClass->getError( pDocView->priv->m_pOffice );
+        char *pError = priv->m_pOffice->pClass->getError( priv->m_pOffice );
         fprintf( stderr, "Error opening document '%s'\n", pError );
         return FALSE;
     }
     else
     {
-        pDocView->priv->m_pDocument->pClass->initializeForRendering(pDocView->priv->m_pDocument);
-        pDocView->priv->m_pDocument->pClass->registerCallback(pDocView->priv->m_pDocument, callbackWorker, pDocView);
-        pDocView->priv->m_pDocument->pClass->getDocumentSize(pDocView->priv->m_pDocument, &pDocView->priv->m_nDocumentWidthTwips, &pDocView->priv->m_nDocumentHeightTwips);
+        priv->m_pDocument->pClass->initializeForRendering(priv->m_pDocument);
+        priv->m_pDocument->pClass->registerCallback(priv->m_pDocument, callbackWorker, pDocView);
+        priv->m_pDocument->pClass->getDocumentSize(priv->m_pDocument, &priv->m_nDocumentWidthTwips, &priv->m_nDocumentHeightTwips);
         g_timeout_add(600, handleTimeout, pDocView);
 
-        float zoom = pDocView->priv->m_fZoom;
-        long nDocumentWidthTwips = pDocView->priv->m_nDocumentWidthTwips;
-        long nDocumentHeightTwips = pDocView->priv->m_nDocumentHeightTwips;
+        float zoom = priv->m_fZoom;
+        long nDocumentWidthTwips = priv->m_nDocumentWidthTwips;
+        long nDocumentHeightTwips = priv->m_nDocumentHeightTwips;
         long nDocumentWidthPixels = twipToPixel(nDocumentWidthTwips, zoom);
         long nDocumentHeightPixels = twipToPixel(nDocumentHeightTwips, zoom);
         // Total number of columns in this document.
         guint nColumns = ceil((double)nDocumentWidthPixels / nTileSizePixels);
 
 
-        pDocView->priv->m_aTileBuffer = TileBuffer(pDocView->priv->m_pDocument,
-                                                   nColumns);
+        priv->m_aTileBuffer = TileBuffer(priv->m_pDocument,
+                                         nColumns);
         gtk_widget_set_size_request(GTK_WIDGET(pDocView),
                                     nDocumentWidthPixels,
                                     nDocumentHeightPixels);
@@ -1436,7 +1439,8 @@ lok_doc_view_open_document (LOKDocView* pDocView, const gchar* pPath)
 SAL_DLLPUBLIC_EXPORT LibreOfficeKitDocument*
 lok_doc_view_get_document (LOKDocView* pDocView)
 {
-    return pDocView->priv->m_pDocument;
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    return priv->m_pDocument;
 }
 
 /**
@@ -1449,14 +1453,16 @@ lok_doc_view_get_document (LOKDocView* pDocView)
 SAL_DLLPUBLIC_EXPORT void
 lok_doc_view_set_zoom (LOKDocView* pDocView, float fZoom)
 {
-    pDocView->priv->m_fZoom = fZoom;
-    long nDocumentWidthPixels = twipToPixel(pDocView->priv->m_nDocumentWidthTwips, fZoom);
-    long nDocumentHeightPixels = twipToPixel(pDocView->priv->m_nDocumentHeightTwips, fZoom);
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+
+    priv->m_fZoom = fZoom;
+    long nDocumentWidthPixels = twipToPixel(priv->m_nDocumentWidthTwips, fZoom);
+    long nDocumentHeightPixels = twipToPixel(priv->m_nDocumentHeightTwips, fZoom);
     // Total number of columns in this document.
     guint nColumns = ceil((double)nDocumentWidthPixels / nTileSizePixels);
 
-    pDocView->priv->m_aTileBuffer = TileBuffer(pDocView->priv->m_pDocument,
-                                               nColumns);
+    priv->m_aTileBuffer = TileBuffer(priv->m_pDocument,
+                                     nColumns);
     gtk_widget_set_size_request(GTK_WIDGET(pDocView),
                                 nDocumentWidthPixels,
                                 nDocumentHeightPixels);
@@ -1471,38 +1477,44 @@ lok_doc_view_set_zoom (LOKDocView* pDocView, float fZoom)
 SAL_DLLPUBLIC_EXPORT float
 lok_doc_view_get_zoom (LOKDocView* pDocView)
 {
-    return pDocView->priv->m_fZoom;
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    return priv->m_fZoom;
 }
 
 SAL_DLLPUBLIC_EXPORT int
 lok_doc_view_get_parts (LOKDocView* pDocView)
 {
-    return pDocView->priv->m_pDocument->pClass->getParts( pDocView->priv->m_pDocument );
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    return priv->m_pDocument->pClass->getParts( priv->m_pDocument );
 }
 
 SAL_DLLPUBLIC_EXPORT int
 lok_doc_view_get_part (LOKDocView* pDocView)
 {
-    return pDocView->priv->m_pDocument->pClass->getPart( pDocView->priv->m_pDocument );
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    return priv->m_pDocument->pClass->getPart( priv->m_pDocument );
 }
 
 SAL_DLLPUBLIC_EXPORT void
 lok_doc_view_set_part (LOKDocView* pDocView, int nPart)
 {
-    pDocView->priv->m_pDocument->pClass->setPart( pDocView->priv->m_pDocument, nPart );
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    priv->m_pDocument->pClass->setPart( priv->m_pDocument, nPart );
 }
 
 SAL_DLLPUBLIC_EXPORT char*
 lok_doc_view_get_part_name (LOKDocView* pDocView, int nPart)
 {
-    return pDocView->priv->m_pDocument->pClass->getPartName( pDocView->priv->m_pDocument, nPart );
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    return priv->m_pDocument->pClass->getPartName( priv->m_pDocument, nPart );
 }
 
 SAL_DLLPUBLIC_EXPORT void
 lok_doc_view_set_partmode(LOKDocView* pDocView,
                           int nPartMode)
 {
-    pDocView->priv->m_pDocument->pClass->setPartMode( pDocView->priv->m_pDocument, nPartMode );
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    priv->m_pDocument->pClass->setPartMode( priv->m_pDocument, nPartMode );
 }
 
 /**
@@ -1516,16 +1528,17 @@ SAL_DLLPUBLIC_EXPORT void
 lok_doc_view_set_edit(LOKDocView* pDocView,
                       gboolean bEdit)
 {
-    gboolean bWasEdit = pDocView->priv->m_bEdit;
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    gboolean bWasEdit = priv->m_bEdit;
 
-    if (!pDocView->priv->m_bEdit && bEdit)
+    if (!priv->m_bEdit && bEdit)
         g_info("lok_doc_view_set_edit: entering edit mode");
-    else if (pDocView->priv->m_bEdit && !bEdit)
+    else if (priv->m_bEdit && !bEdit)
     {
         g_info("lok_doc_view_set_edit: leaving edit mode");
-        pDocView->priv->m_pDocument->pClass->resetSelection(pDocView->priv->m_pDocument);
+        priv->m_pDocument->pClass->resetSelection(priv->m_pDocument);
     }
-    pDocView->priv->m_bEdit = bEdit;
+    priv->m_bEdit = bEdit;
     g_signal_emit(pDocView, doc_view_signals[EDIT_CHANGED], 0, bWasEdit);
     gtk_widget_queue_draw(GTK_WIDGET(pDocView));
 }
@@ -1539,7 +1552,8 @@ lok_doc_view_set_edit(LOKDocView* pDocView,
 SAL_DLLPUBLIC_EXPORT gboolean
 lok_doc_view_get_edit (LOKDocView* pDocView)
 {
-    return pDocView->priv->m_bEdit;
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    return priv->m_bEdit;
 }
 
 /**
@@ -1555,7 +1569,8 @@ lok_doc_view_post_command (LOKDocView* pDocView,
                            const char* pCommand,
                            const char* pArguments)
 {
-    pDocView->priv->m_pDocument->pClass->postUnoCommand(pDocView->priv->m_pDocument, pCommand, pArguments);
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    priv->m_pDocument->pClass->postUnoCommand(priv->m_pDocument, pCommand, pArguments);
 }
 
 /**
@@ -1583,7 +1598,8 @@ lok_doc_view_post_key (LOKDocView* pDocView, GdkEvent* pEvent)
 SAL_DLLPUBLIC_EXPORT float
 lok_doc_view_pixel_to_twip (LOKDocView* pDocView, float fInput)
 {
-    return pixelToTwip(fInput, pDocView->priv->m_fZoom);
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    return pixelToTwip(fInput, priv->m_fZoom);
 }
 
 /**
@@ -1598,7 +1614,8 @@ lok_doc_view_pixel_to_twip (LOKDocView* pDocView, float fInput)
 SAL_DLLPUBLIC_EXPORT float
 lok_doc_view_twip_to_pixel (LOKDocView* pDocView, float fInput)
 {
-    return twipToPixel(fInput, pDocView->priv->m_fZoom);
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    return twipToPixel(fInput, priv->m_fZoom);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit cc00f73778e02f7d0f2630801d2e72a0a4231fc3
Author: Pranav Kant <pranavk at gnome.org>
Date:   Thu Jun 18 21:52:22 2015 +0530

    lokdocview: Use GInitable
    
    The construction of LokDocView widget can fail because it
    involves initializing the lok context via lok_init.
    
    Having lok_init calls in constructed virtual method is a bad idea
    since it assumes that construction will never fail. So, implement
    GInitable for this class, and move the object initialization from
    constructed to initable.
    
    Change-Id: Idf18a054cf8ef2e946392458ec52cb0107bd7454

diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h
index 7048dbe..3eaf283 100644
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
@@ -42,10 +42,12 @@ struct _LOKDocViewClass
 
 GType                          lok_doc_view_get_type               (void) G_GNUC_CONST;
 
-GtkWidget*                     lok_doc_view_new                    (const char* pPath);
+GtkWidget*                     lok_doc_view_new                    (const gchar* pPath,
+                                                                    GCancellable *cancellable,
+                                                                    GError **error);
 
 gboolean                       lok_doc_view_open_document          (LOKDocView* pDocView,
-                                                                    char* pPath);
+                                                                    const gchar* pPath);
 
 /// Gets the document the viewer displays.
 LibreOfficeKitDocument*        lok_doc_view_get_document           (LOKDocView* pDocView);
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index 575588e..a583323 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -521,7 +521,7 @@ int main( int argc, char* argv[] )
     gtk_box_pack_end(GTK_BOX(pVBox), pFindbar, FALSE, FALSE, 0);
 
     // Docview
-    pDocView = lok_doc_view_new(argv[1]);
+    pDocView = lok_doc_view_new (argv[1], NULL, NULL);
     if (pDocView == NULL)
         g_error ("Error while creating LOKDocView widget");
     g_signal_connect(pDocView, "edit-changed", G_CALLBACK(signalEdit), NULL);
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index 9e8cabb..bc383c5 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -137,12 +137,16 @@ enum
 
 static guint doc_view_signals[LAST_SIGNAL] = { 0 };
 
+static void lok_doc_view_initable_iface_init (GInitableIface *iface);
+
 SAL_DLLPUBLIC_EXPORT GType lok_doc_view_get_type();
 #ifdef __GNUC__
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-function"
 #endif
-G_DEFINE_TYPE_WITH_PRIVATE (LOKDocView, lok_doc_view, GTK_TYPE_DRAWING_AREA)
+G_DEFINE_TYPE_WITH_CODE (LOKDocView, lok_doc_view, GTK_TYPE_DRAWING_AREA,
+                         G_ADD_PRIVATE (LOKDocView)
+                         G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, lok_doc_view_initable_iface_init));
 #ifdef __GNUC__
 #pragma GCC diagnostic pop
 #endif
@@ -1103,14 +1107,30 @@ static void lok_doc_view_finalize (GObject* object)
     G_OBJECT_CLASS (lok_doc_view_parent_class)->finalize (object);
 }
 
-static void lok_doc_view_constructed (GObject* object)
+static gboolean lok_doc_view_initable_init (GInitable *initable, GCancellable* /*cancellable*/, GError **error)
 {
-    LOKDocView* pDocView = LOK_DOC_VIEW (object);
-    LOKDocViewPrivate* priv = pDocView->priv;
+    LOKDocView *pDocView = LOK_DOC_VIEW (initable);
+
+    if (pDocView->priv->m_pOffice != NULL)
+        return TRUE;
+
+    pDocView->priv->m_pOffice = lok_init (pDocView->priv->m_aLOPath);
+
+    if (pDocView->priv->m_pOffice == NULL)
+    {
+        g_set_error (error,
+                     g_quark_from_static_string ("LOK initialization error"), 0,
+                     "Failed to get LibreOfficeKit context. Make sure path (%s) is correct",
+                     pDocView->priv->m_aLOPath);
+        return FALSE;
+    }
 
-    G_OBJECT_CLASS (lok_doc_view_parent_class)->constructed (object);
+    return TRUE;
+}
 
-    pDocView->priv->m_pOffice = lok_init (priv->m_aLOPath);
+static void lok_doc_view_initable_iface_init (GInitableIface *iface)
+{
+    iface->init = lok_doc_view_initable_init;
 }
 
 static void lok_doc_view_class_init (LOKDocViewClass* pClass)
@@ -1121,7 +1141,6 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
     pGObjectClass->get_property = lok_doc_view_get_property;
     pGObjectClass->set_property = lok_doc_view_set_property;
     pGObjectClass->finalize = lok_doc_view_finalize;
-    pGObjectClass->constructed = lok_doc_view_constructed;
 
     pWidgetClass->draw = lok_doc_view_draw;
     pWidgetClass->button_press_event = lok_doc_view_signal_button;
@@ -1343,18 +1362,19 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
                      G_TYPE_STRING);
 }
 
-
-
 /**
  * lok_doc_view_new:
  * @pPath: LibreOffice install path.
+ * @cancellable: The cancellable object that you can use to cancel this
+ * operation.
+ * @error: The error that will be set if the object fails to initialize.
  *
- * Returns: The #LOKDocView widget instance.
+ * Returns: (transfer none): The #LOKDocView widget instance.
  */
 SAL_DLLPUBLIC_EXPORT GtkWidget*
-lok_doc_view_new (const char* pPath)
+lok_doc_view_new (const gchar* pPath, GCancellable *cancellable, GError **error)
 {
-    return GTK_WIDGET (g_object_new(LOK_TYPE_DOC_VIEW, "lopath", pPath, NULL));
+    return GTK_WIDGET (g_initable_new (LOK_TYPE_DOC_VIEW, cancellable, error, "lopath", pPath, NULL));
 }
 
 /**
@@ -1365,7 +1385,7 @@ lok_doc_view_new (const char* pPath)
  * Returns: %TRUE if the document is loaded succesfully, %FALSE otherwise
  */
 SAL_DLLPUBLIC_EXPORT gboolean
-lok_doc_view_open_document (LOKDocView* pDocView, char* pPath)
+lok_doc_view_open_document (LOKDocView* pDocView, const gchar* pPath)
 {
     if ( pDocView->priv->m_pDocument )
     {
@@ -1374,8 +1394,7 @@ lok_doc_view_open_document (LOKDocView* pDocView, char* pPath)
     }
 
     pDocView->priv->m_pOffice->pClass->registerCallback(pDocView->priv->m_pOffice, globalCallbackWorker, pDocView);
-    pDocView->priv->m_pDocument = pDocView->priv->m_pOffice->pClass->documentLoad( pDocView->priv->m_pOffice,
-                                                                   pPath );
+    pDocView->priv->m_pDocument = pDocView->priv->m_pOffice->pClass->documentLoad( pDocView->priv->m_pOffice, pPath );
     if ( !pDocView->priv->m_pDocument )
     {
         // FIXME: should have a GError parameter and populate it.
commit 35fd66e8648c6d82396486a9469dcb061c832b91
Author: Laurent Balland-Poirier <laurent.balland-poirier at laposte.net>
Date:   Thu Apr 16 22:32:07 2015 +0200

    tdf#70673 Power trendline: enable negative Y values
    
    With a negative intercept, Y values can be negative
    
    Change-Id: I9c23cc89b74498f7e7c7bcee00057627768f48aa
    Reviewed-on: https://gerrit.libreoffice.org/15357
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Philippe Jung <phil.jung at free.fr>

diff --git a/chart2/source/inc/PotentialRegressionCurveCalculator.hxx b/chart2/source/inc/PotentialRegressionCurveCalculator.hxx
index dba739e..d9ad473 100644
--- a/chart2/source/inc/PotentialRegressionCurveCalculator.hxx
+++ b/chart2/source/inc/PotentialRegressionCurveCalculator.hxx
@@ -57,9 +57,10 @@ private:
         throw (css::lang::IllegalArgumentException,
                css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
 
-    // formula is: f(x) = x ^ m_fSlope * m_fIntercept
+    // formula is: f(x) = x ^ m_fSlope * m_fSign * m_fIntercept
     double m_fSlope;
     double m_fIntercept;
+    double m_fSign;
 };
 
 } //  namespace chart
diff --git a/chart2/source/inc/RegressionCalculationHelper.hxx b/chart2/source/inc/RegressionCalculationHelper.hxx
index 2e0e3a4..7f0a693 100644
--- a/chart2/source/inc/RegressionCalculationHelper.hxx
+++ b/chart2/source/inc/RegressionCalculationHelper.hxx
@@ -127,6 +127,19 @@ public:
     }
 };
 
+class isValidAndXPositiveAndYNegative : public ::std::binary_function< double, double, bool >
+{
+public:
+    inline bool operator()( double x, double y )
+    { return ! ( ::rtl::math::isNan( x ) ||
+                 ::rtl::math::isNan( y ) ||
+                 ::rtl::math::isInf( x ) ||
+                 ::rtl::math::isInf( y ) ||
+                 x <= 0.0 ||
+                 y >= 0.0 );
+    }
+};
+
 } //  namespace RegressionCalculationHelper
 } //  namespace chart
 
diff --git a/chart2/source/tools/PotentialRegressionCurveCalculator.cxx b/chart2/source/tools/PotentialRegressionCurveCalculator.cxx
index 7495c91..0e4f4cd 100644
--- a/chart2/source/tools/PotentialRegressionCurveCalculator.cxx
+++ b/chart2/source/tools/PotentialRegressionCurveCalculator.cxx
@@ -50,14 +50,23 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression(
         RegressionCalculationHelper::cleanup(
             aXValues, aYValues,
             RegressionCalculationHelper::isValidAndBothPositive()));
+    m_fSign = 1.0;
 
-    const size_t nMax = aValues.first.size();
+    size_t nMax = aValues.first.size();
     if( nMax == 0 )
     {
-        ::rtl::math::setNan( & m_fSlope );
-        ::rtl::math::setNan( & m_fIntercept );
-        ::rtl::math::setNan( & m_fCorrelationCoeffitient );
-        return;
+        aValues = RegressionCalculationHelper::cleanup(
+                    aXValues, aYValues,
+                    RegressionCalculationHelper::isValidAndXPositiveAndYNegative());
+         nMax = aValues.first.size();
+         if( nMax == 0 )
+         {
+            ::rtl::math::setNan( & m_fSlope );
+            ::rtl::math::setNan( & m_fIntercept );
+            ::rtl::math::setNan( & m_fCorrelationCoeffitient );
+            return;
+         }
+         m_fSign = -1.0;
     }
 
     double fAverageX = 0.0, fAverageY = 0.0;
@@ -65,7 +74,7 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression(
     for( i = 0; i < nMax; ++i )
     {
         fAverageX += log( aValues.first[i] );
-        fAverageY += log( aValues.second[i] );
+        fAverageY += log( m_fSign * aValues.second[i] );
     }
 
     const double fN = static_cast< double >( nMax );
@@ -76,7 +85,7 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression(
     for( i = 0; i < nMax; ++i )
     {
         double fDeltaX = log( aValues.first[i] ) - fAverageX;
-        double fDeltaY = log( aValues.second[i] ) - fAverageY;
+        double fDeltaY = log( m_fSign * aValues.second[i] ) - fAverageY;
 
         fQx  += fDeltaX * fDeltaX;
         fQy  += fDeltaY * fDeltaY;
@@ -87,7 +96,7 @@ void SAL_CALL PotentialRegressionCurveCalculator::recalculateRegression(
     m_fIntercept = fAverageY - m_fSlope * fAverageX;
     m_fCorrelationCoeffitient = fQxy / sqrt( fQx * fQy );
 
-    m_fIntercept = exp( m_fIntercept );
+    m_fIntercept = m_fSign * exp( m_fIntercept );
 }
 
 double SAL_CALL PotentialRegressionCurveCalculator::getCurveValue( double x )
commit cad19fa8414b419f2e0f9ee88139e9b7a2dd4ff4
Author: Laurent Balland-Poirier <laurent.balland-poirier at laposte.net>
Date:   Thu Apr 16 21:45:58 2015 +0200

    tdf#70673 Exponential trendline: enable negative Y values
    
    With a negative intercept, Y values can be negative
    
    Rebase with forced intercept fec037e68f0dea164915fbfe1db4699a3861adf4
    
    Conflicts:
    	chart2/source/tools/ExponentialRegressionCurveCalculator.cxx
    
    Change-Id: Ie351c006fb1688ef3e657da7ce0789a9da1317f0
    Reviewed-on: https://gerrit.libreoffice.org/15353
    Reviewed-by: Philippe Jung <phil.jung at free.fr>
    Tested-by: Philippe Jung <phil.jung at free.fr>

diff --git a/chart2/source/inc/ExponentialRegressionCurveCalculator.hxx b/chart2/source/inc/ExponentialRegressionCurveCalculator.hxx
index 1247d41..782fb57 100644
--- a/chart2/source/inc/ExponentialRegressionCurveCalculator.hxx
+++ b/chart2/source/inc/ExponentialRegressionCurveCalculator.hxx
@@ -56,10 +56,11 @@ private:
         throw (css::lang::IllegalArgumentException,
                css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
 
-    // formula is: f(x) = exp(m_fLogIntercept) * exp( m_fLogSlope * x )
+    // formula is: f(x) = m_fSign * exp(m_fLogIntercept) * exp( m_fLogSlope * x )
     // mathematical model f(x) = Intercept * Slope^x
     double m_fLogSlope;
     double m_fLogIntercept;
+    double m_fSign;
 };
 
 } //  namespace chart
diff --git a/chart2/source/inc/RegressionCalculationHelper.hxx b/chart2/source/inc/RegressionCalculationHelper.hxx
index 32456cf..2e0e3a4 100644
--- a/chart2/source/inc/RegressionCalculationHelper.hxx
+++ b/chart2/source/inc/RegressionCalculationHelper.hxx
@@ -102,6 +102,18 @@ public:
     }
 };
 
+class isValidAndYNegative : public ::std::binary_function< double, double, bool >
+{
+public:
+    inline bool operator()( double x, double y )
+    { return ! ( ::rtl::math::isNan( x ) ||
+                 ::rtl::math::isNan( y ) ||
+                 ::rtl::math::isInf( x ) ||
+                 ::rtl::math::isInf( y ) ||
+                 y >= 0.0 );
+    }
+};
+
 class isValidAndBothPositive : public ::std::binary_function< double, double, bool >
 {
 public:
diff --git a/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx b/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx
index 3738d68..2e1dedd 100644
--- a/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx
+++ b/chart2/source/tools/ExponentialRegressionCurveCalculator.cxx
@@ -50,25 +50,34 @@ void SAL_CALL ExponentialRegressionCurveCalculator::recalculateRegression(
         RegressionCalculationHelper::cleanup(
             aXValues, aYValues,
             RegressionCalculationHelper::isValidAndYPositive()));
+    m_fSign = 1.0;
 
-    const size_t nMax = aValues.first.size();
+    size_t nMax = aValues.first.size();
     if( nMax == 0 )
     {
-        ::rtl::math::setNan( & m_fLogSlope );
-        ::rtl::math::setNan( & m_fLogIntercept );
-        ::rtl::math::setNan( & m_fCorrelationCoeffitient );// actual it is coefficient of determination
-        return;
+        aValues = RegressionCalculationHelper::cleanup(
+                    aXValues, aYValues,
+                    RegressionCalculationHelper::isValidAndYNegative());
+        nMax = aValues.first.size();
+        if( nMax == 0 )
+        {
+            ::rtl::math::setNan( & m_fLogSlope );
+            ::rtl::math::setNan( & m_fLogIntercept );
+            ::rtl::math::setNan( & m_fCorrelationCoeffitient );// actual it is coefficient of determination
+            return;
+        }
+        m_fSign = -1.0;
     }
 
     double fAverageX = 0.0, fAverageY = 0.0;
-    double fLogIntercept = mForceIntercept ? log(mInterceptValue) : 0.0;
+    double fLogIntercept = ( mForceIntercept && (m_fSign * mInterceptValue)>0 ) ? log(m_fSign * mInterceptValue) : 0.0;
     std::vector<double> yVector;
     yVector.resize(nMax, 0.0);
 
     size_t i = 0;
     for( i = 0; i < nMax; ++i )
     {
-        double yValue = log(aValues.second[i]);
+        double yValue = log( m_fSign *aValues.second[i] );
         if (mForceIntercept)
         {
             yValue -= fLogIntercept;
@@ -111,7 +120,7 @@ double SAL_CALL ExponentialRegressionCurveCalculator::getCurveValue( double x )
     if( ! ( ::rtl::math::isNan( m_fLogSlope ) ||
             ::rtl::math::isNan( m_fLogIntercept )))
     {
-        fResult = exp(m_fLogIntercept + x * m_fLogSlope);
+        fResult = m_fSign * exp(m_fLogIntercept + x * m_fLogSlope);
     }
 
     return fResult;
@@ -146,7 +155,7 @@ OUString ExponentialRegressionCurveCalculator::ImplGetRepresentation(
     const uno::Reference< util::XNumberFormatter >& xNumFormatter,
     ::sal_Int32 nNumberFormatKey ) const
 {
-    double fIntercept = exp(m_fLogIntercept);
+    double fIntercept = m_fSign * exp(m_fLogIntercept);
     double fSlope = exp(m_fLogSlope);
     bool bHasSlope = !rtl::math::approxEqual( fSlope, 1.0 );
     bool bHasIntercept = !rtl::math::approxEqual( fIntercept, 1.0 );
commit 733f5887af46d1d5e2fbea6be93cabb2a1749752
Author: Philippe Jung <phil.jung at free.fr>
Date:   Mon Jun 22 11:41:43 2015 +0200

    Add unit tests for chart2 trend calculators
    
    Will be used to check tdf#70673 is fixed. Test will fail before the fix
    and should pass after.
    
    Change-Id: I9e0fdc696fb99ac2f0e24b04273391d526c629a6
    Reviewed-on: https://gerrit.libreoffice.org/16406
    Reviewed-by: Philippe Jung <phil.jung at free.fr>
    Tested-by: Philippe Jung <phil.jung at free.fr>

diff --git a/chart2/CppunitTest_chart2_trendcalculators.mk b/chart2/CppunitTest_chart2_trendcalculators.mk
new file mode 100644
index 0000000..5187298
--- /dev/null
+++ b/chart2/CppunitTest_chart2_trendcalculators.mk
@@ -0,0 +1,136 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#*************************************************************************
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#*************************************************************************
+
+$(eval $(call gb_CppunitTest_CppunitTest,chart2_trendcalculators))
+
+$(eval $(call gb_CppunitTest_use_externals,chart2_trendcalculators, \
+	boost_headers \
+	libxml2 \
+))
+
+$(eval $(call gb_CppunitTest_add_exception_objects,chart2_trendcalculators, \
+    chart2/qa/extras/chart2_trendcalculators \
+))
+
+$(eval $(call gb_CppunitTest_use_libraries,chart2_trendcalculators, \
+    basegfx \
+    comphelper \
+    cppu \
+    cppuhelper \
+    drawinglayer \
+    editeng \
+    for \
+    forui \
+    i18nlangtag \
+    msfilter \
+    vcl \
+    oox \
+    sal \
+    salhelper \
+    sax \
+    sb \
+    sc \
+    sw \
+    sd \
+    sfx \
+    sot \
+    svl \
+    svt \
+    svx \
+    svxcore \
+    test \
+    tl \
+    tk \
+    ucbhelper \
+    unotest \
+    utl \
+    vbahelper \
+    xo \
+    sw \
+    $(gb_UWINAPI) \
+))
+
+$(eval $(call gb_CppunitTest_set_include,chart2_trendcalculators,\
+    -I$(SRCDIR)/chart2/inc \
+    $$(INCLUDE) \
+))
+
+$(eval $(call gb_CppunitTest_use_api,chart2_trendcalculators,\
+    offapi \
+    udkapi \
+))
+
+$(eval $(call gb_CppunitTest_use_ure,chart2_trendcalculators))
+$(eval $(call gb_CppunitTest_use_vcl,chart2_trendcalculators))
+
+$(eval $(call gb_CppunitTest_use_components,chart2_trendcalculators,\
+    basic/util/sb \
+    animations/source/animcore/animcore \
+    chart2/source/controller/chartcontroller \
+    chart2/source/chartcore \
+    comphelper/util/comphelp \
+    configmgr/source/configmgr \
+    dtrans/util/mcnttype \
+    embeddedobj/util/embobj \
+    eventattacher/source/evtatt \
+    filter/source/config/cache/filterconfig1 \
+    filter/source/odfflatxml/odfflatxml \
+    filter/source/storagefilterdetect/storagefd \
+    filter/source/xmlfilteradaptor/xmlfa \
+    filter/source/xmlfilterdetect/xmlfd \
+    forms/util/frm \
+    framework/util/fwk \
+    i18npool/util/i18npool \
+    linguistic/source/lng \
+    oox/util/oox \
+    package/source/xstor/xstor \
+    package/util/package2 \
+    sax/source/expatwrap/expwrap \
+    sc/util/sc \
+    sc/util/scd \
+    sc/util/scfilt \
+    sw/util/sw \
+    sw/util/swd \
+    sw/util/msword \
+    sd/util/sd \
+    sd/util/sdfilt \
+    sd/util/sdd \
+    $(call gb_Helper_optional,SCRIPTING, \
+	    sc/util/vbaobj) \
+    scaddins/source/analysis/analysis \
+    scaddins/source/datefunc/date \
+    scripting/source/basprov/basprov \
+    scripting/util/scriptframe \
+    sfx2/util/sfx \
+    sot/util/sot \
+    svl/source/fsstor/fsstorage \
+    svl/util/svl \
+    svtools/util/svt \
+    svx/util/svx \
+    svx/util/svxcore \
+    toolkit/util/tk \
+    ucb/source/core/ucb1 \
+    ucb/source/ucp/file/ucpfile1 \
+    ucb/source/ucp/tdoc/ucptdoc1 \
+    unotools/util/utl \
+    unoxml/source/rdf/unordf \
+    unoxml/source/service/unoxml \
+    writerfilter/util/writerfilter \
+    xmloff/util/xo \
+    xmlscript/util/xmlscript \
+))
+
+$(eval $(call gb_CppunitTest_use_configuration,chart2_trendcalculators))
+
+$(call gb_CppunitTest_get_target,chart2_trendcalculators): \
+    $(call gb_AllLangResTarget_get_target,sd)
+
+# vim: set noet sw=4 ts=4:
diff --git a/chart2/Module_chart2.mk b/chart2/Module_chart2.mk
index 16a74a1..de0ab12 100644
--- a/chart2/Module_chart2.mk
+++ b/chart2/Module_chart2.mk
@@ -24,6 +24,7 @@ $(eval $(call gb_Module_add_l10n_targets,chart2,\
 $(eval $(call gb_Module_add_slowcheck_targets,chart2,\
     CppunitTest_chart2_export \
     CppunitTest_chart2_import \
+    CppunitTest_chart2_trendcalculators \
 ))
 
 ifeq ($(ENABLE_CHART_TESTS),TRUE)
diff --git a/chart2/qa/extras/chart2_trendcalculators.cxx b/chart2/qa/extras/chart2_trendcalculators.cxx
new file mode 100644
index 0000000..7ddb4d8
--- /dev/null
+++ b/chart2/qa/extras/chart2_trendcalculators.cxx
@@ -0,0 +1,214 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "charttest.hxx"
+#include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
+#include <com/sun/star/chart2/XRegressionCurveCalculator.hpp>
+
+// Define the index of sheets in the test document
+#define SHEET_POTENTIAL1          0
+#define SHEET_POTENTIAL2          ( SHEET_POTENTIAL1 + 1)
+#define SHEET_POTENTIAL_LAST      ( SHEET_POTENTIAL2 )
+
+#define SHEET_LINEAR1             ( SHEET_POTENTIAL_LAST + 1 )
+#define SHEET_LINEAR_LAST         ( SHEET_LINEAR1 )
+
+#define SHEET_POLYNOMIAL1         ( SHEET_LINEAR_LAST + 1 )
+#define SHEET_POLYNOMIAL_LAST     ( SHEET_POLYNOMIAL1 )
+
+#define SHEET_EXPONENTIAL1        ( SHEET_POLYNOMIAL_LAST + 1 )
+#define SHEET_EXPONENTIAL2        ( SHEET_EXPONENTIAL1 + 1 )
+#define SHEET_EXPONENTIAL_LAST    ( SHEET_EXPONENTIAL2 )
+
+class Chart2TrendCalculators : public ChartTest
+{
+public:
+    void setUp();
+    void tearDown();
+
+    void testPotentialRegression1();
+    void testPotentialRegression2();
+    void testLinearRegression1();
+    void testPolynomialRegression1();
+    void testExponentialRegression1();
+    void testExponentialRegression2();
+
+    CPPUNIT_TEST_SUITE(Chart2TrendCalculators);
+    CPPUNIT_TEST(testPotentialRegression1);
+    CPPUNIT_TEST(testPotentialRegression2);
+    CPPUNIT_TEST(testLinearRegression1);
+    CPPUNIT_TEST(testPolynomialRegression1);
+    CPPUNIT_TEST(testExponentialRegression1);
+    CPPUNIT_TEST(testExponentialRegression2);
+    CPPUNIT_TEST_SUITE_END();
+
+private:
+
+    Reference<chart2::XRegressionCurve> m_xCurve;
+    Reference< chart2::XRegressionCurveCalculator > m_xRegressionCurveCalculator;
+
+    void loadCalculatorFromSheet(sal_Int32 nSheet);
+    void checkCalculator(
+        Sequence< double > xValues, Sequence< double > yValues,
+        OUString sExpectedFormula );
+
+};
+
+void Chart2TrendCalculators::setUp()
+{
+    ChartTest::setUp();
+    load("/chart2/qa/extras/data/ods/", "trend_calculators.ods");
+}
+
+void Chart2TrendCalculators::tearDown()
+{
+    m_xRegressionCurveCalculator.clear();
+    m_xCurve.clear();
+    ChartTest::tearDown();
+}
+
+void Chart2TrendCalculators::loadCalculatorFromSheet(sal_Int32 nSheet)
+{
+    Reference<chart2::XChartDocument> xChartDoc = getChartDocFromSheet(nSheet, mxComponent);
+    CPPUNIT_ASSERT_MESSAGE("failed to load chart", xChartDoc.is());
+    CPPUNIT_ASSERT(xChartDoc.is());
+
+    Reference<chart2::XDataSeries> xDataSeries = getDataSeriesFromDoc(xChartDoc, 0);
+    CPPUNIT_ASSERT(xDataSeries.is());
+
+    Reference<chart2::XRegressionCurveContainer> xRegressionCurveContainer(xDataSeries, UNO_QUERY_THROW);
+    CPPUNIT_ASSERT( xRegressionCurveContainer.is() );
+
+    Sequence< Reference< chart2::XRegressionCurve > > xRegressionCurveSequence = xRegressionCurveContainer->getRegressionCurves();
+    CPPUNIT_ASSERT_EQUAL((sal_Int32) 1, xRegressionCurveSequence.getLength());
+
+    m_xCurve = xRegressionCurveSequence[0];
+    CPPUNIT_ASSERT(m_xCurve.is());
+
+    m_xRegressionCurveCalculator = m_xCurve->getCalculator();
+    CPPUNIT_ASSERT(m_xRegressionCurveCalculator.is());
+}
+
+void Chart2TrendCalculators::checkCalculator(
+    Sequence< double > xValues, Sequence< double > yValues,
+    OUString sExpectedFormula )
+{
+    m_xRegressionCurveCalculator->recalculateRegression( xValues, yValues );
+    OUString aRepresentation = m_xRegressionCurveCalculator->getRepresentation ();
+    CPPUNIT_ASSERT_EQUAL( sExpectedFormula, aRepresentation );
+    double r2 = m_xRegressionCurveCalculator->getCorrelationCoefficient();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, r2, 1e-8 );
+}
+
+// test y = A x ^ B
+void Chart2TrendCalculators::testPotentialRegression1()
+{
+    loadCalculatorFromSheet( SHEET_POTENTIAL1 );
+    m_xRegressionCurveCalculator->setRegressionProperties( 0, false, 0, 0 );
+    Sequence< double > xValues( 7 );
+    Sequence< double > yValues( 7 );
+    double d;
+    for (int i=0; i<7; i++)
+    {
+        d = (double) i;
+        xValues[i] = d;
+        yValues[i] = 2.0 * pow ( d, 3 );
+    }
+    checkCalculator( xValues, yValues, "f(x) = 2 x^3");
+}
+
+// test y = A x ^ B
+void Chart2TrendCalculators::testPotentialRegression2()
+{
+    loadCalculatorFromSheet( SHEET_POTENTIAL2 );
+    m_xRegressionCurveCalculator->setRegressionProperties( 0, false, 0, 0 );
+    Sequence< double > xValues( 7 );
+    Sequence< double > yValues( 7 );
+    double d;
+    for (int i=0; i<7; i++)
+    {
+        d = (double) i;
+        xValues[i] = d;
+        yValues[i] = -2.0 * pow ( d, 3 );
+    }
+    checkCalculator( xValues, yValues, "f(x) = -2 x^3");
+}
+
+// test y = - 2 X - 5
+void Chart2TrendCalculators::testLinearRegression1()
+{
+    loadCalculatorFromSheet( SHEET_LINEAR1 );
+    m_xRegressionCurveCalculator->setRegressionProperties( 1, false, 0, 0 );
+    Sequence< double > xValues( 7 );
+    Sequence< double > yValues( 7 );
+    double d;
+    for (int i=0; i<7; i++)
+    {
+        d = (double) i;
+        xValues[i] = d;
+        yValues[i] = - 2.0 * d - 5.0 ;
+    }
+    checkCalculator( xValues, yValues, "f(x) =  - 2x - 5");
+}
+
+// test y = A x ^ B
+void Chart2TrendCalculators::testPolynomialRegression1()
+{
+    loadCalculatorFromSheet( SHEET_POLYNOMIAL1 );
+    m_xRegressionCurveCalculator->setRegressionProperties( 2, false, 0, 0 );
+    Sequence< double > xValues( 7 );
+    Sequence< double > yValues( 7 );
+    double d;
+    for (int i=0; i<7; i++)
+    {
+        d = (double) i;
+        xValues[i] = d;
+        yValues[i] =  - 2.0 * d * d + 4 * d - 5;
+    }
+    checkCalculator( xValues, yValues, "f(x) =  - 2x^2 + 4x - 5");
+}
+
+void Chart2TrendCalculators::testExponentialRegression1()
+{
+    loadCalculatorFromSheet( SHEET_EXPONENTIAL1 );
+    m_xRegressionCurveCalculator->setRegressionProperties( 0, false, 0, 0 );
+    Sequence< double > xValues( 7 );
+    Sequence< double > yValues( 7 );
+    double d;
+    for (int i=0; i<7; i++)
+    {
+        d = (double) i;
+        xValues[i] = d;
+        yValues[i] = 2.0 * exp ( 0.3 * d );
+    }
+    checkCalculator( xValues, yValues, "f(x) = 2 exp( 0.3 x )");
+}
+
+void Chart2TrendCalculators::testExponentialRegression2()
+{
+    loadCalculatorFromSheet( SHEET_EXPONENTIAL2 );
+    m_xRegressionCurveCalculator->setRegressionProperties( 0, false, 0, 0 );
+    Sequence< double > xValues( 7 );
+    Sequence< double > yValues( 7 );
+    double d;
+    for (int i=0; i<7; i++)
+    {
+        d = (double) i;
+        xValues[i] = d;
+        yValues[i] = -2.0 * exp ( 0.3 * d );
+    }
+    checkCalculator( xValues, yValues, "f(x) = -2 exp( 0.3 x )");
+}
+
+
+CPPUNIT_TEST_SUITE_REGISTRATION(Chart2TrendCalculators);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/qa/extras/data/ods/trend_calculators.ods b/chart2/qa/extras/data/ods/trend_calculators.ods
new file mode 100644
index 0000000..fdc5ea4
Binary files /dev/null and b/chart2/qa/extras/data/ods/trend_calculators.ods differ
commit 9908b6447ebbeec16544bd61eca6f22f1ecefbaa
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 22 11:03:45 2015 +0200

    Work around change in JNI func sigs between Java 6 and 7
    
    (same as dfba745437324b8e1a352ab5280c665c543fc37f)
    
    Change-Id: I3c79b406c2bf661717880def94989614860f9cb6

diff --git a/connectivity/source/drivers/jdbc/Blob.cxx b/connectivity/source/drivers/jdbc/Blob.cxx
index c8bc791..43db9c1 100644
--- a/connectivity/source/drivers/jdbc/Blob.cxx
+++ b/connectivity/source/drivers/jdbc/Blob.cxx
@@ -114,7 +114,15 @@ sal_Int64 SAL_CALL java_sql_Blob::position( const ::com::sun::star::uno::Sequenc
         obtainMethodId_throwSQL(t.pEnv, cMethodName,cSignature, mID);
         // convert Parameter
         jbyteArray pByteArray = t.pEnv->NewByteArray(pattern.getLength());
-        t.pEnv->SetByteArrayRegion(pByteArray,0,pattern.getLength(),pattern.getConstArray());
+        jbyte * patternData = reinterpret_cast<jbyte *>(
+            const_cast<sal_Int8 *>(pattern.getConstArray()));
+            // 4th param of Set*ArrayRegion changed from pointer to non-const to
+            // pointer to const between <http://docs.oracle.com/javase/6/docs/
+            // technotes/guides/jni/spec/functions.html#wp22933> and
+            // <http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/
+            // functions.html#wp22933>; work around that difference in a way
+            // that doesn't trigger loplugin:redundantcast
+        t.pEnv->SetByteArrayRegion(pByteArray,0,pattern.getLength(),patternData);
         out = t.pEnv->CallLongMethod( object, mID, pByteArray,start );
         t.pEnv->DeleteLocalRef(pByteArray);
         ThrowSQLException(t.pEnv,*this);
commit b990cdf57d6a85a36de713004a67a90ba2650623
Author: Dennis Roczek <dennisroczek at libreoffice.org>
Date:   Tue Jun 9 06:01:37 2015 +0200

    improve lo-commit-stat script
    
    'resolved' should also be removed
    and updating bug urls
    
    Change-Id: Ie8e71727856bcc44bd7f3311a9e1472327c9bf21
    Reviewed-on: https://gerrit.libreoffice.org/16207
    Reviewed-by: David Tardon <dtardon at redhat.com>
    Tested-by: David Tardon <dtardon at redhat.com>

diff --git a/bin/lo-commit-stat b/bin/lo-commit-stat
index 5a68820..92dd5e5 100755
--- a/bin/lo-commit-stat
+++ b/bin/lo-commit-stat
@@ -17,7 +17,8 @@ my %module_dirname = (
 
 
 my %bugzillas = (
-    fdo  => "https://bugs.libreoffice.org/show_bug.cgi?id=",
+    fdo  => "https://bugs.documentfoundation.org/show_bug.cgi?id=",
+    tdf  => "https://bugs.documentfoundation.org/show_bug.cgi?id=",
     bnc  => "https://bugzilla.novell.com/show_bug.cgi?id=",
     rhbz => "https://bugzilla.redhat.com/show_bug.cgi?id=",
     i    => "https://bz.apache.org/ooo/show_bug.cgi?id=",
@@ -54,7 +55,7 @@ sub search_bugs($$$$)
 #        print "   found $bug\n";
         # remove bug number from the comment; it will be added later a standardized way
         $bug_orig =~ s/\#/\\#/;
-        $line =~ s/[Rr]esolve[ds]:?\s*$bug_orig\s*//;
+        $line =~ s/(,\s)*[Rr](elated|esolve[ds]):?\s*$bug_orig\s*//;
         $line =~ s/\s*-\s*$bug_orig\s*//;
         $line =~ s/\(?$bug_orig\)?\s*[:,-]?\s*//;
 
commit 2885e157674dbefa7d9b984a399fabd1238eeedd
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 22 09:45:29 2015 +0200

    loplugin:vclwidgets
    
    Change-Id: I5f65681bf3e44cbce62f46b9ffc0e5bef3aeeda4

diff --git a/include/sfx2/sidebar/UnoPanel.hxx b/include/sfx2/sidebar/UnoPanel.hxx
index 051a00d..0d396e9 100644
--- a/include/sfx2/sidebar/UnoPanel.hxx
+++ b/include/sfx2/sidebar/UnoPanel.hxx
@@ -74,8 +74,8 @@ private:
     const OUString mPanelId;
     const OUString mDeckId;
 
-    sfx2::sidebar::Deck* mpDeck;
-    sfx2::sidebar::Panel* mpPanel;
+    VclPtr<sfx2::sidebar::Deck> mpDeck;
+    VclPtr<sfx2::sidebar::Panel> mpPanel;
 
     sal_Int32 GetMaxOrderIndex(sfx2::sidebar::ResourceManager::PanelContextDescriptorContainer aPanels);
     sal_Int32 GetMinOrderIndex(sfx2::sidebar::ResourceManager::PanelContextDescriptorContainer aPanels);
commit 284534679333ebe9b6a05e6f80436e836fa35da1
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 22 09:43:02 2015 +0200

    -Werror,-Wunused-private-field
    
    Change-Id: Icf9b843eff90c39110fc5b0436f85b0783cddb17

diff --git a/include/sfx2/sidebar/UnoDeck.hxx b/include/sfx2/sidebar/UnoDeck.hxx
index 1d9fcc2..8bf416b 100644
--- a/include/sfx2/sidebar/UnoDeck.hxx
+++ b/include/sfx2/sidebar/UnoDeck.hxx
@@ -67,7 +67,6 @@ private:
     sfx2::sidebar::SidebarController* getSidebarController();
 
     const OUString mDeckId;
-    const OUString mTitle;
 
     sal_Int32 GetMaxOrderIndex(sfx2::sidebar::ResourceManager::DeckContextDescriptorContainer aDecks);
     sal_Int32 GetMinOrderIndex(sfx2::sidebar::ResourceManager::DeckContextDescriptorContainer aDecks);
diff --git a/sfx2/source/sidebar/UnoDeck.cxx b/sfx2/source/sidebar/UnoDeck.cxx
index b90b266..f65b215 100644
--- a/sfx2/source/sidebar/UnoDeck.cxx
+++ b/sfx2/source/sidebar/UnoDeck.cxx
@@ -24,8 +24,7 @@ using namespace ::sfx2::sidebar;
 
 SfxUnoDeck::SfxUnoDeck(const uno::Reference<frame::XFrame>& rFrame, const OUString& deckId):
 xFrame(rFrame),
-mDeckId(deckId),
-mTitle(deckId)
+mDeckId(deckId)
 {
 
 }
commit b998be6e42eeb57abf5131adc06aa45588542f62
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 22 09:41:16 2015 +0200

    loplugin:salbool
    
    Change-Id: If5a3d79167264240ce9083800f15ed166eedd8bf

diff --git a/sfx2/source/sidebar/UnoDecks.cxx b/sfx2/source/sidebar/UnoDecks.cxx
index e088733..30882ea 100644
--- a/sfx2/source/sidebar/UnoDecks.cxx
+++ b/sfx2/source/sidebar/UnoDecks.cxx
@@ -94,7 +94,7 @@ sal_Bool SAL_CALL SfxUnoDecks::hasByName( const OUString& aName )
 
     SidebarController* pSidebarController = getSidebarController();
 
-    sal_Bool bFound = false;
+    bool bFound = false;
 
     if (pSidebarController)
     {
@@ -165,4 +165,4 @@ sal_Bool SAL_CALL SfxUnoDecks::hasElements() throw(::com::sun::star::uno::Runtim
     return decks.hasElements();
 }
 
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 92252af5fdea7268ef954bc2f95c50f905c39078
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 22 09:37:49 2015 +0200

    -Werror,-Wunused-private-field
    
    Change-Id: I47416559cc3d6c6679e1f9df3f24a24385903e04

diff --git a/include/sfx2/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx
index 0e1fe0e..58bca04 100644
--- a/include/sfx2/sidebar/SidebarController.hxx
+++ b/include/sfx2/sidebar/SidebarController.hxx
@@ -170,7 +170,6 @@ private:
     /// Use a combination of SwitchFlag_* as value.
     sal_Int32 mnRequestedForceFlags;
     ::rtl::OUString msCurrentDeckId;
-    ::rtl::OUString msCurrentDeckTitle;
     AsynchronousCall maPropertyChangeForwarder;
     AsynchronousCall maContextChangeUpdate;
     AsynchronousCall maAsynchronousDeckSwitch;
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index c81927e..cb03b2d 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -107,7 +107,6 @@ SidebarController::SidebarController (
       maRequestedContext(),
       mnRequestedForceFlags(SwitchFlag_NoForce),
       msCurrentDeckId(gsDefaultDeckId),
-      msCurrentDeckTitle(),
       maPropertyChangeForwarder(::boost::bind(&SidebarController::BroadcastPropertyChange, this)),
       maContextChangeUpdate(::boost::bind(&SidebarController::UpdateConfigurations, this)),
       maAsynchronousDeckSwitch(),
commit 8d4cb9cd86c04b9ae73943dded4ccc253942e70e
Author: andreask <kainz.a at gmail.com>
Date:   Sun Jun 21 23:21:41 2015 +0200

    Breeze: StartCenter close icons
    
    Change-Id: I2ae4876dfec86849991aa1199046c071e2cd6263
    Reviewed-on: https://gerrit.libreoffice.org/16404
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Adolfo Jayme Barrientos <fitojb at ubuntu.com>

diff --git a/icon-themes/breeze/res/recentdoc_remove.png b/icon-themes/breeze/res/recentdoc_remove.png
new file mode 100644
index 0000000..7bd7b03
Binary files /dev/null and b/icon-themes/breeze/res/recentdoc_remove.png differ
diff --git a/icon-themes/breeze/res/recentdoc_remove_highlighted.png b/icon-themes/breeze/res/recentdoc_remove_highlighted.png
new file mode 100644
index 0000000..9589680
Binary files /dev/null and b/icon-themes/breeze/res/recentdoc_remove_highlighted.png differ
commit ab7d58d4f240bb31461748926eb6db936546fe7d
Author: andreask <kainz.a at gmail.com>
Date:   Sun Jun 21 23:10:10 2015 +0200

    Breeze Signet - Icon is missing the ribbon part (StarShapes.signet)
    
    Change-Id: I589d34f24dbdc7017a19c0de57b1bcfc543c7a2d
    Reviewed-on: https://gerrit.libreoffice.org/16403
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Adolfo Jayme Barrientos <fitojb at ubuntu.com>

diff --git a/icon-themes/breeze/cmd/lc_starshapes.signet.png b/icon-themes/breeze/cmd/lc_starshapes.signet.png
index 2bbe072..321f6d3 100644
Binary files a/icon-themes/breeze/cmd/lc_starshapes.signet.png and b/icon-themes/breeze/cmd/lc_starshapes.signet.png differ
diff --git a/icon-themes/breeze/cmd/sc_starshapes.signet.png b/icon-themes/breeze/cmd/sc_starshapes.signet.png
index 76f2b5e..7bc8f7f 100644
Binary files a/icon-themes/breeze/cmd/sc_starshapes.signet.png and b/icon-themes/breeze/cmd/sc_starshapes.signet.png differ
commit 097406006266f1d59a57e0379fd195190c214df2
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Jun 22 09:35:30 2015 +0200

    loplugin:passstuffbyref
    
    Change-Id: Ib356214e2aee699d7def22ab84ad806cb801bcb5

diff --git a/include/sfx2/sidebar/Deck.hxx b/include/sfx2/sidebar/Deck.hxx
index edd735c..43fddcc 100644
--- a/include/sfx2/sidebar/Deck.hxx
+++ b/include/sfx2/sidebar/Deck.hxx
@@ -51,7 +51,7 @@ public:
     void ResetPanels (const SharedPanelContainer& rPanels);
     const SharedPanelContainer& GetPanels() const  { return maPanels; }
 
-    Panel* GetPanel(OUString panelId);
+    Panel* GetPanel(OUString const & panelId);
 
     void RequestLayout();
     vcl::Window* GetPanelParentWindow();
diff --git a/sfx2/source/sidebar/Deck.cxx b/sfx2/source/sidebar/Deck.cxx
index b2eb225..9866f4d 100644
--- a/sfx2/source/sidebar/Deck.cxx
+++ b/sfx2/source/sidebar/Deck.cxx
@@ -223,7 +223,7 @@ vcl::Window* Deck::GetPanelParentWindow()
     return mpScrollContainer.get();
 }
 
-Panel* Deck::GetPanel(const OUString panelId)
+Panel* Deck::GetPanel(const OUString & panelId)
 {
     for (size_t i = 0; i < maPanels.size(); i++)
     {
commit 2e32eff6f1a6ac8bc0ef65e07300531d6f45275b
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Jun 22 09:10:09 2015 +0200

    Use SAL_WARN{,_IF}
    
    Change-Id: Idd4693bd48b4bbe3ebfb5c86922ab0edfeba0def

diff --git a/writerfilter/source/dmapper/CellMarginHandler.cxx b/writerfilter/source/dmapper/CellMarginHandler.cxx
index 6e28f62..6d223c2 100644
--- a/writerfilter/source/dmapper/CellMarginHandler.cxx
+++ b/writerfilter/source/dmapper/CellMarginHandler.cxx
@@ -21,7 +21,6 @@
 #include <ConversionHelper.hxx>
 #include <ooxml/resourceids.hxx>
 #include <comphelper/sequence.hxx>
-#include <osl/diagnose.h>
 
 namespace writerfilter {
 namespace dmapper {
@@ -61,11 +60,11 @@ void CellMarginHandler::lcl_attribute(Id rName, Value & rVal)
             m_nValue = ConversionHelper::convertTwipToMM100Unsigned( nIntValue );
         break;
         case NS_ooxml::LN_CT_TblWidth_type:
-            OSL_ENSURE( NS_ooxml::LN_Value_ST_TblWidth_dxa == sal::static_int_cast<Id>(nIntValue), "cell margins work for absolute values, only");
+            SAL_WARN_IF(NS_ooxml::LN_Value_ST_TblWidth_dxa != sal::static_int_cast<Id>(nIntValue), "writerfilter", "CellMarginHandler: cell margins work for absolute values only");
             m_nType = nIntValue;
         break;
         default:
-            OSL_FAIL( "unknown attribute");
+            SAL_WARN("writerfilter", "CellMarginHandler::lcl_attribute: unknown attribute");
     }
 }
 
@@ -153,7 +152,7 @@ void CellMarginHandler::lcl_sprm(Sprm & rSprm)
                 createGrabBag("right");
             break;
             default:
-                OSL_FAIL( "unknown sprm");
+                SAL_WARN("writerfilter", "CellMarginHandler::lcl_sprm: unknown sprm");
         }
     }
     m_nValue = 0;
commit f43dd61f092e3df6c58a48f587f3cd2fe4238675
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Jun 22 09:08:22 2015 +0200

    Use comphelper::containerToSequence
    
    Change-Id: Ib227023eceacbcc3ca303af47794561eab708a39

diff --git a/writerfilter/source/dmapper/CellMarginHandler.cxx b/writerfilter/source/dmapper/CellMarginHandler.cxx
index 922a50b..6e28f62 100644
--- a/writerfilter/source/dmapper/CellMarginHandler.cxx
+++ b/writerfilter/source/dmapper/CellMarginHandler.cxx
@@ -20,6 +20,7 @@
 #include <PropertyMap.hxx>
 #include <ConversionHelper.hxx>
 #include <ooxml/resourceids.hxx>
+#include <comphelper/sequence.hxx>
 #include <osl/diagnose.h>
 
 namespace writerfilter {
@@ -167,13 +168,7 @@ beans::PropertyValue CellMarginHandler::getInteropGrabBag()
 {
     beans::PropertyValue aRet;
     aRet.Name = m_aInteropGrabBagName;
-
-    uno::Sequence<beans::PropertyValue> aSeq(m_aInteropGrabBag.size());
-    beans::PropertyValue* pSeq = aSeq.getArray();
-    for (std::vector<beans::PropertyValue>::iterator i = m_aInteropGrabBag.begin(); i != m_aInteropGrabBag.end(); ++i)
-        *pSeq++ = *i;
-
-    aRet.Value = uno::makeAny(aSeq);
+    aRet.Value = uno::makeAny(comphelper::containerToSequence(m_aInteropGrabBag));
     return aRet;
 }
 
diff --git a/writerfilter/source/dmapper/LatentStyleHandler.cxx b/writerfilter/source/dmapper/LatentStyleHandler.cxx
index 67e2cb6f..0e9eb58 100644
--- a/writerfilter/source/dmapper/LatentStyleHandler.cxx
+++ b/writerfilter/source/dmapper/LatentStyleHandler.cxx
@@ -68,13 +68,9 @@ void LatentStyleHandler::lcl_sprm(Sprm& /*rSprm*/)
 {
 }
 
-uno::Sequence<beans::PropertyValue> LatentStyleHandler::getAttributes() const
+std::vector<beans::PropertyValue> LatentStyleHandler::getAttributes() const
 {
-    uno::Sequence<beans::PropertyValue> aAttributes(m_aAttributes.size());
-    beans::PropertyValue* pAttributes = aAttributes.getArray();
-    for (std::vector<beans::PropertyValue>::const_iterator i = m_aAttributes.begin(); i != m_aAttributes.end(); ++i)
-        *pAttributes++ = *i;
-    return aAttributes;
+    return m_aAttributes;
 }
 
 } // namespace dmapper
diff --git a/writerfilter/source/dmapper/LatentStyleHandler.hxx b/writerfilter/source/dmapper/LatentStyleHandler.hxx
index 8b1a697..fd7bf6a 100644
--- a/writerfilter/source/dmapper/LatentStyleHandler.hxx
+++ b/writerfilter/source/dmapper/LatentStyleHandler.hxx
@@ -33,7 +33,7 @@ public:
     LatentStyleHandler();
     virtual ~LatentStyleHandler();
 
-    css::uno::Sequence<css::beans::PropertyValue> getAttributes() const;
+    std::vector<css::beans::PropertyValue> getAttributes() const;
 };
 
 typedef std::shared_ptr<LatentStyleHandler> LatentStyleHandlerPtr;
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 713c107..9e652ea 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -737,7 +737,7 @@ void StyleSheetTable::lcl_sprm(Sprm & rSprm)
                 pProperties->resolve(*pLatentStyleHandler);
                 beans::PropertyValue aValue;
                 aValue.Name = "lsdException";
-                aValue.Value = uno::makeAny(pLatentStyleHandler->getAttributes());
+                aValue.Value = uno::makeAny(comphelper::containerToSequence(pLatentStyleHandler->getAttributes()));
                 m_pImpl->m_pCurrentEntry->aLsdExceptions.push_back(aValue);
             }
         }
commit f403cecdaedf263f11081c91bed62640362a3a3e
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Jun 22 09:06:31 2015 +0200

    gtktiledviewer: do HTML copying if possible
    
    Change-Id: I24e7b18442cb08814a73dd33b368b368039a11e4

diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index 7d4960d..575588e 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -125,16 +125,49 @@ static void toggleFindbar(GtkWidget* /*pButton*/, gpointer /*pItem*/)
     }
 }
 
+/// Our GtkClipboardGetFunc implementation for HTML.
+static void htmlGetFunc(GtkClipboard* /*pClipboard*/, GtkSelectionData* pSelectionData, guint /*info*/, gpointer pUserData)
+{
+    GdkAtom aAtom(gdk_atom_intern("text/html", false));
+    const gchar* pSelection = static_cast<const gchar*>(pUserData);
+    gtk_selection_data_set(pSelectionData, aAtom, 8, reinterpret_cast<const guchar *>(pSelection), strlen(pSelection));
+}
+
+/// Our GtkClipboardClearFunc implementation for HTML.
+static void htmlClearFunc(GtkClipboard* /*pClipboard*/, gpointer pData)
+{
+    g_free(pData);
+}
+
+/// Same as gtk_clipboard_set_text(), but sets HTML.
+static void clipboardSetHtml(GtkClipboard* pClipboard, const char* pSelection)
+{
+    GtkTargetList* pList = gtk_target_list_new(0, 0);
+    GdkAtom aAtom(gdk_atom_intern("text/html", false));
+    gtk_target_list_add(pList, aAtom, 0, 0);
+    gint nTargets = 0;
+    GtkTargetEntry* pTargets = gtk_target_table_new_from_list(pList, &nTargets);
+
+    gtk_clipboard_set_with_data(pClipboard, pTargets, nTargets, htmlGetFunc, htmlClearFunc, g_strdup(pSelection));
+
+    gtk_target_table_free(pTargets, nTargets);
+    gtk_target_list_unref(pList);
+}
+
 /// Handler for the copy button: write clipboard.
 static void doCopy(GtkWidget* /*pButton*/, gpointer /*pItem*/)
 {
     LOKDocView* pLOKDocView = LOK_DOC_VIEW(pDocView);
     LibreOfficeKitDocument* pDocument = lok_doc_view_get_document(pLOKDocView);
     char* pUsedFormat = 0;
-    char* pSelection = pDocument->pClass->getTextSelection(pDocument, "text/plain;charset=utf-8", &pUsedFormat);
+    char* pSelection = pDocument->pClass->getTextSelection(pDocument, "text/html", &pUsedFormat);
 
     GtkClipboard* pClipboard = gtk_clipboard_get_for_display(gtk_widget_get_display(pDocView), GDK_SELECTION_CLIPBOARD);
-    gtk_clipboard_set_text(pClipboard, pSelection, -1);
+    std::string aUsedFormat(pUsedFormat);
+    if (aUsedFormat == "text/plain;charset=utf-8")
+        gtk_clipboard_set_text(pClipboard, pSelection, -1);
+    else
+        clipboardSetHtml(pClipboard, pSelection);
 
     free(pSelection);
     free(pUsedFormat);
commit 7b08304b55cf2284a3c583426c60baef618ba206
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Jun 22 09:05:30 2015 +0200

    tdf#92061 RTF import: fix missing body text after footnote
    
    A missing seek in the \footnote handler could result in a situation that
    the missed text contained a "{" but not its matching "}", which resulted
    in the parser terminating earlier than the end of the document.
    
    Change-Id: I6df476b2d6397dfa918111b33854dc2f95fbe81d

diff --git a/sw/qa/extras/rtfimport/data/tdf92061.rtf b/sw/qa/extras/rtfimport/data/tdf92061.rtf
new file mode 100644
index 0000000..03978b4
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/tdf92061.rtf
@@ -0,0 +1,5 @@
+{\rtf1
+body-before
+{\footnote AAAAA {B} C}
+body-after\par
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 8171b6d..8a22358 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -2307,6 +2307,12 @@ DECLARE_RTFIMPORT_TEST(testBinSkipping, "bin-skipping.rtf")
     CPPUNIT_ASSERT_EQUAL(OUString("text"), getRun(getParagraph(1), 1)->getString());
 }
 
+DECLARE_RTFIMPORT_TEST(testTdf92061, "tdf92061.rtf")
+{
+    // This was "C", i.e. part of the footnote ended up in the body text.
+    CPPUNIT_ASSERT_EQUAL(OUString("body-after"), getRun(getParagraph(1), 3)->getString());
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 31e62ee..9b16e5a 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -1682,11 +1682,13 @@ RTFError RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword)
                 // Check if this is an endnote.
                 OStringBuffer aBuf;
                 char ch;
+                sal_Size nCurrent = Strm().Tell();
                 for (int i = 0; i < 7; ++i)
                 {
                     Strm().ReadChar(ch);
                     aBuf.append(ch);
                 }
+                Strm().Seek(nCurrent);
                 OString aKeyword = aBuf.makeStringAndClear();
                 if (aKeyword.equals("\\ftnalt"))
                     nId = NS_ooxml::LN_endnote;
commit 16c2b60fc10b5fdfd36df64f8fca50b95d81871b
Author: Julien Nabet <serval2412 at yahoo.fr>
Date:   Mon Jun 22 07:31:57 2015 +0200

    Typo: erturn->return
    
    Change-Id: I6cb57f77c723fa252e7c21279e0c1b80e92010e1

diff --git a/include/editeng/unoedsrc.hxx b/include/editeng/unoedsrc.hxx
index 43c516a..9af69b3 100644
--- a/include/editeng/unoedsrc.hxx
+++ b/include/editeng/unoedsrc.hxx
@@ -525,7 +525,7 @@ public:
 
     /** Cut current selection to clipboard.
 
-        @eturn false if no selection or no view (the empty selection _is_ a selection)
+        @return false if no selection or no view (the empty selection _is_ a selection)
      */
     virtual bool Cut() = 0;
 
commit a64999511ae654131d997eec9a3d78478cfc1c75
Author: Laurent Godard <lgodard.libre at laposte.net>
Date:   Thu Apr 30 16:56:14 2015 +0200

    new uno sidebar api tdf#91806
    
    the entry point is SfxBaseController::getSidebar()
    
    the Decks and panels are now per SidebarController and not global anymore
    
    ' macro example
    Sub testSidebarApi
    
    	controller =  thisComponent.currentcontroller
    	frameIni =  thisComponent.currentcontroller.frame
    	sidebar =  thisComponent.currentcontroller.getSidebar()
    
    	sidebar.setVisible(true)
    
    	frame = sidebar.getFrame()
    
    	decks = sidebar.getdecks()
    
    	c = decks.count
    
    	h = decks.hasElements()
    
    	e = decks.getElementNames()
    
    	a =  decks.hasByName("MyDeck")
    
    	deck = decks.getByName("MyDeck")
    	deck.activate(true)
    
    	t = deck.getTitle()
    	deck.setTitle("new deck title")
    
            deck.moveFirst()
            deck.moveLast()
            deck.moveUp()
            deck.moveDown()
    
            index = deck.getOrderIndex()
    
    	panels = deck.getPanels()
    	ep = panels.getElementnames()
    
    	ap = panels.hasByName("aPanelName")
    
    	panel = panels.getByName("aPanelName")
    	panel.setTitle("new panel title")
    
    	panel.collapse()
    
    	panel.expand(true) ' expand and collapse other
    
            index = panel.getOrderIndex()
    
            panel.moveLast()
            panel.moveFirst()
            panel.moveDown()
            panel.moveUp()
    
    End Sub
    
    Change-Id: I7a4b953f2277dea483bb296ba6ead35de7205ace
    Reviewed-on: https://gerrit.libreoffice.org/15856
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/dbaccess/source/ui/browser/genericcontroller.cxx b/dbaccess/source/ui/browser/genericcontroller.cxx
index 405bb91..42bd37f 100644
--- a/dbaccess/source/ui/browser/genericcontroller.cxx
+++ b/dbaccess/source/ui/browser/genericcontroller.cxx
@@ -45,6 +45,10 @@
 #include "UITools.hxx"
 #include "commontypes.hxx"
 
+#include <com/sun/star/ui/XSidebarProvider.hpp>
+#include <sfx2/sidebar/UnoSidebar.hxx>
+
+
 #include <vcl/waitobj.hxx>
 #include <svl/urihelper.hxx>
 #include "datasourceconnector.hxx"
@@ -72,6 +76,7 @@ using namespace ::com::sun::star::sdbc;
 using namespace ::com::sun::star::sdb;
 using namespace ::com::sun::star::task;
 using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::ui;
 using namespace ::dbtools;
 using namespace ::comphelper;
 
@@ -367,6 +372,11 @@ Reference< XWindow > SAL_CALL OGenericUnoController::getComponentWindow() throw
     return VCLUnoHelper::GetInterface( getView() );
 }
 
+Reference<XSidebarProvider> SAL_CALL OGenericUnoController::getSidebar() throw (RuntimeException, std::exception)
+{
+        return NULL;
+}
+
 OUString SAL_CALL OGenericUnoController::getViewControllerName() throw (::com::sun::star::uno::RuntimeException, std::exception)
 {
     return OUString( "Default" );
diff --git a/include/dbaccess/genericcontroller.hxx b/include/dbaccess/genericcontroller.hxx
index 07a9dec..f195321 100644
--- a/include/dbaccess/genericcontroller.hxx
+++ b/include/dbaccess/genericcontroller.hxx
@@ -61,6 +61,8 @@
 #include <sfx2/userinputinterception.hxx>
 #include <vcl/vclptr.hxx>
 
+#include <com/sun/star/ui/XSidebarProvider.hpp>
+
 namespace dbtools
 {
     class SQLExceptionInfo;
@@ -465,6 +467,9 @@ namespace dbaui
         virtual OUString SAL_CALL getViewControllerName() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
         virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getCreationArguments() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
 
+        virtual ::com::sun::star::uno::Reference< ::com::sun::star::ui::XSidebarProvider > SAL_CALL getSidebar() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+
         // ::com::sun::star::frame::XController
         virtual void SAL_CALL attachFrame(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > & xFrame) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
         virtual sal_Bool SAL_CALL attachModel(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & xModel) throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
diff --git a/include/sfx2/sfxbasecontroller.hxx b/include/sfx2/sfxbasecontroller.hxx
index 0f77a44..d387d80 100644
--- a/include/sfx2/sfxbasecontroller.hxx
+++ b/include/sfx2/sfxbasecontroller.hxx
@@ -48,6 +48,8 @@
 #include <tools/link.hxx>
 #include <vcl/button.hxx>
 
+#include <com/sun/star/ui/XSidebarProvider.hpp>
+
 #include <sfx2/viewsh.hxx>
 #include <sfx2/sfxuno.hxx>
 
@@ -101,6 +103,8 @@ public:
     virtual OUString SAL_CALL getViewControllerName() throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
     virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getCreationArguments() throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
 
+    virtual css::uno::Reference< css::ui::XSidebarProvider > SAL_CALL getSidebar() throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
 
     //  XController
 
diff --git a/sfx2/source/sidebar/Accessible.hxx b/include/sfx2/sidebar/Accessible.hxx
similarity index 100%
rename from sfx2/source/sidebar/Accessible.hxx
rename to include/sfx2/sidebar/Accessible.hxx
diff --git a/sfx2/source/sidebar/AccessibleTitleBar.hxx b/include/sfx2/sidebar/AccessibleTitleBar.hxx
similarity index 100%
rename from sfx2/source/sidebar/AccessibleTitleBar.hxx
rename to include/sfx2/sidebar/AccessibleTitleBar.hxx
diff --git a/sfx2/source/sidebar/AsynchronousCall.hxx b/include/sfx2/sidebar/AsynchronousCall.hxx
similarity index 100%
rename from sfx2/source/sidebar/AsynchronousCall.hxx
rename to include/sfx2/sidebar/AsynchronousCall.hxx
diff --git a/sfx2/source/sidebar/Context.hxx b/include/sfx2/sidebar/Context.hxx
similarity index 100%
rename from sfx2/source/sidebar/Context.hxx
rename to include/sfx2/sidebar/Context.hxx
diff --git a/sfx2/source/sidebar/ContextList.hxx b/include/sfx2/sidebar/ContextList.hxx
similarity index 96%
rename from sfx2/source/sidebar/ContextList.hxx
rename to include/sfx2/sidebar/ContextList.hxx
index 9886007..5171072 100644
--- a/sfx2/source/sidebar/ContextList.hxx
+++ b/include/sfx2/sidebar/ContextList.hxx
@@ -19,7 +19,7 @@
 #ifndef INCLUDED_SFX2_SOURCE_SIDEBAR_CONTEXTLIST_HXX
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_CONTEXTLIST_HXX
 
-#include "Context.hxx"
+#include <sfx2/sidebar/Context.hxx>
 #include <sal/types.h>
 #include <rtl/ustring.hxx>
 
@@ -55,6 +55,8 @@ public:
         const bool bIsInitiallyVisible,
         const ::rtl::OUString& rsMenuCommand);
 
+    sal_Int32 GetCount();
+
 private:
     ::std::vector<Entry> maEntries;
 
diff --git a/sfx2/source/sidebar/Deck.hxx b/include/sfx2/sidebar/Deck.hxx
similarity index 94%
rename from sfx2/source/sidebar/Deck.hxx
rename to include/sfx2/sidebar/Deck.hxx
index 9efaadc..edd735c 100644
--- a/sfx2/source/sidebar/Deck.hxx
+++ b/include/sfx2/sidebar/Deck.hxx
@@ -19,7 +19,7 @@
 #ifndef INCLUDED_SFX2_SOURCE_SIDEBAR_DECK_HXX
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_DECK_HXX
 
-#include "Panel.hxx"
+#include <sfx2/sidebar/Panel.hxx>
 
 #include <vcl/window.hxx>
 #include <vcl/image.hxx>
@@ -44,17 +44,15 @@ public:
     virtual ~Deck();
     virtual void dispose() SAL_OVERRIDE;
 
-    const OUString& GetId() const
-    {
-        return msId;
-    }
+    const OUString& GetId() const { return msId; }
+
     DeckTitleBar* GetTitleBar() const;
     Rectangle GetContentArea() const;
     void ResetPanels (const SharedPanelContainer& rPanels);
-    const SharedPanelContainer& GetPanels() const
-    {
-        return maPanels;
-    }
+    const SharedPanelContainer& GetPanels() const  { return maPanels; }
+
+    Panel* GetPanel(OUString panelId);
+
     void RequestLayout();
     vcl::Window* GetPanelParentWindow();
 
diff --git a/sfx2/source/sidebar/DeckDescriptor.hxx b/include/sfx2/sidebar/DeckDescriptor.hxx
similarity index 96%
rename from sfx2/source/sidebar/DeckDescriptor.hxx
rename to include/sfx2/sidebar/DeckDescriptor.hxx
index 77f811e..a0980c6 100644
--- a/sfx2/source/sidebar/DeckDescriptor.hxx
+++ b/include/sfx2/sidebar/DeckDescriptor.hxx
@@ -23,6 +23,8 @@
 #include "ContextList.hxx"
 #include <boost/shared_ptr.hpp>
 
+#include <sfx2/sidebar/Deck.hxx>
+
 namespace sfx2 { namespace sidebar {
 
 class DeckDescriptor
@@ -41,6 +43,8 @@ public:
     sal_Int32 mnOrderIndex;
     bool mbExperimental;
 
+    VclPtr<Deck> mpDeck;
+
     DeckDescriptor();
     DeckDescriptor (const DeckDescriptor& rOther);
     ~DeckDescriptor();
diff --git a/sfx2/source/sidebar/DeckLayouter.hxx b/include/sfx2/sidebar/DeckLayouter.hxx
similarity index 98%
rename from sfx2/source/sidebar/DeckLayouter.hxx
rename to include/sfx2/sidebar/DeckLayouter.hxx
index 965fb56..8b3b248 100644
--- a/sfx2/source/sidebar/DeckLayouter.hxx
+++ b/include/sfx2/sidebar/DeckLayouter.hxx
@@ -19,7 +19,7 @@
 #ifndef INCLUDED_SFX2_SOURCE_SIDEBAR_DECKLAYOUTER_HXX
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_DECKLAYOUTER_HXX
 
-#include "Panel.hxx"
+#include <sfx2/sidebar/Panel.hxx>
 
 #include <tools/gen.hxx>
 
diff --git a/sfx2/source/sidebar/DeckTitleBar.hxx b/include/sfx2/sidebar/DeckTitleBar.hxx
similarity index 98%
rename from sfx2/source/sidebar/DeckTitleBar.hxx
rename to include/sfx2/sidebar/DeckTitleBar.hxx
index bd47883..3b42958 100644
--- a/sfx2/source/sidebar/DeckTitleBar.hxx
+++ b/include/sfx2/sidebar/DeckTitleBar.hxx
@@ -19,7 +19,7 @@
 #ifndef INCLUDED_SFX2_SOURCE_SIDEBAR_DECKTITLEBAR_HXX
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_DECKTITLEBAR_HXX
 
-#include "TitleBar.hxx"
+#include <sfx2/sidebar/TitleBar.hxx>
 
 namespace sfx2 { namespace sidebar {
 
diff --git a/sfx2/source/sidebar/DrawHelper.hxx b/include/sfx2/sidebar/DrawHelper.hxx
similarity index 100%
rename from sfx2/source/sidebar/DrawHelper.hxx
rename to include/sfx2/sidebar/DrawHelper.hxx
diff --git a/sfx2/source/sidebar/FocusManager.hxx b/include/sfx2/sidebar/FocusManager.hxx
similarity index 100%
rename from sfx2/source/sidebar/FocusManager.hxx
rename to include/sfx2/sidebar/FocusManager.hxx
diff --git a/sfx2/source/sidebar/MenuButton.hxx b/include/sfx2/sidebar/MenuButton.hxx
similarity index 100%
rename from sfx2/source/sidebar/MenuButton.hxx
rename to include/sfx2/sidebar/MenuButton.hxx
diff --git a/sfx2/source/sidebar/Paint.hxx b/include/sfx2/sidebar/Paint.hxx
similarity index 100%
rename from sfx2/source/sidebar/Paint.hxx
rename to include/sfx2/sidebar/Paint.hxx
diff --git a/sfx2/source/sidebar/Panel.hxx b/include/sfx2/sidebar/Panel.hxx
similarity index 91%
rename from sfx2/source/sidebar/Panel.hxx
rename to include/sfx2/sidebar/Panel.hxx
index 52e6e49..b42dbc9 100644
--- a/sfx2/source/sidebar/Panel.hxx
+++ b/include/sfx2/sidebar/Panel.hxx
@@ -19,11 +19,13 @@
 #ifndef INCLUDED_SFX2_SOURCE_SIDEBAR_PANEL_HXX
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_PANEL_HXX
 
-#include "Context.hxx"
+#include <sfx2/sidebar/Context.hxx>
+
 #include <vcl/window.hxx>
 
 #include <com/sun/star/ui/XUIElement.hpp>
 #include <com/sun/star/ui/XSidebarPanel.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
 
 #include <boost/scoped_ptr.hpp>
 #include <boost/shared_ptr.hpp>
@@ -40,7 +42,9 @@ class Panel : public vcl::Window
 public:
     Panel(const PanelDescriptor& rPanelDescriptor, vcl::Window* pParentWindow,
           const bool bIsInitiallyExpanded, const std::function<void()>& rDeckLayoutTrigger,
-          const std::function<Context()>& rContextAccess);
+          const std::function<Context()>& rContextAccess,
+          const css::uno::Reference<css::frame::XFrame>& rxFrame);
+
     virtual ~Panel();
     virtual void dispose() SAL_OVERRIDE;
 
@@ -69,6 +73,9 @@ private:
     bool mbIsExpanded;
     const std::function<void()> maDeckLayoutTrigger;
     const std::function<Context()> maContextAccess;
+
+    const css::uno::Reference<css::frame::XFrame>& mxFrame;
+
 };
 typedef std::vector<VclPtr<Panel> > SharedPanelContainer;
 
diff --git a/sfx2/source/sidebar/PanelDescriptor.hxx b/include/sfx2/sidebar/PanelDescriptor.hxx
similarity index 97%
rename from sfx2/source/sidebar/PanelDescriptor.hxx
rename to include/sfx2/sidebar/PanelDescriptor.hxx
index f67a128..fa490b9 100644
--- a/sfx2/source/sidebar/PanelDescriptor.hxx
+++ b/include/sfx2/sidebar/PanelDescriptor.hxx
@@ -20,7 +20,7 @@
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_PANELDESCRIPTOR_HXX
 
 #include <sfx2/sidebar/EnumContext.hxx>
-#include "ContextList.hxx"
+#include <sfx2/sidebar/ContextList.hxx>
 #include <boost/shared_ptr.hpp>
 
 namespace sfx2 { namespace sidebar {
diff --git a/sfx2/source/sidebar/PanelTitleBar.hxx b/include/sfx2/sidebar/PanelTitleBar.hxx
similarity index 98%
rename from sfx2/source/sidebar/PanelTitleBar.hxx
rename to include/sfx2/sidebar/PanelTitleBar.hxx
index 8c0f7e8..c081402 100644
--- a/sfx2/source/sidebar/PanelTitleBar.hxx
+++ b/include/sfx2/sidebar/PanelTitleBar.hxx
@@ -19,7 +19,7 @@
 #ifndef INCLUDED_SFX2_SOURCE_SIDEBAR_PANELTITLEBAR_HXX
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_PANELTITLEBAR_HXX
 
-#include "TitleBar.hxx"
+#include <sfx2/sidebar/TitleBar.hxx>
 
 #include <com/sun/star/frame/XFrame.hpp>
 #include <boost/function.hpp>
diff --git a/sfx2/source/sidebar/ResourceManager.hxx b/include/sfx2/sidebar/ResourceManager.hxx
similarity index 93%
rename from sfx2/source/sidebar/ResourceManager.hxx
rename to include/sfx2/sidebar/ResourceManager.hxx
index 9151760..4e6247d 100644
--- a/sfx2/source/sidebar/ResourceManager.hxx
+++ b/include/sfx2/sidebar/ResourceManager.hxx
@@ -21,7 +21,7 @@
 
 #include "DeckDescriptor.hxx"
 #include "PanelDescriptor.hxx"
-#include "Context.hxx"
+#include <sfx2/sidebar/Context.hxx>
 #include <unotools/confignode.hxx>
 #include <com/sun/star/frame/XFrame.hpp>
 #include <set>
@@ -40,6 +40,10 @@ class ContextList;
 class ResourceManager
 {
 public:
+
+     ResourceManager();
+    ~ResourceManager();
+
     static ResourceManager& Instance();
 
     const DeckDescriptor* GetDeckDescriptor(const OUString& rsDeckId) const;
@@ -54,6 +58,13 @@ public:
     */
     void SetIsDeckEnabled(const OUString& rsDeckId, const bool bIsEnabled);
 
+    void SetDeckToDescriptor(const OUString& rsDeckId, VclPtr<Deck> aDeck);
+
+    void SetDeckOrderIndex(const OUString& rsDeckId, const sal_Int32 orderIndex);
+
+    void SetPanelOrderIndex(const OUString& rsPanelId, const sal_Int32 orderIndex);
+
+
     class DeckContextDescriptor
     {
     public:
@@ -92,8 +103,7 @@ public:
                                   const Context& rContext);
 
 private:
-    ResourceManager();
-    ~ResourceManager();
+
 
     typedef std::vector<DeckDescriptor> DeckContainer;
     DeckContainer maDecks;
diff --git a/sfx2/source/sidebar/Sidebar.hrc b/include/sfx2/sidebar/Sidebar.hrc
similarity index 100%
rename from sfx2/source/sidebar/Sidebar.hrc
rename to include/sfx2/sidebar/Sidebar.hrc
diff --git a/sfx2/source/sidebar/SidebarController.hxx b/include/sfx2/sidebar/SidebarController.hxx
similarity index 91%
rename from sfx2/source/sidebar/SidebarController.hxx
rename to include/sfx2/sidebar/SidebarController.hxx
index 5fb8466..0e1fe0e 100644
--- a/sfx2/source/sidebar/SidebarController.hxx
+++ b/include/sfx2/sidebar/SidebarController.hxx
@@ -23,12 +23,12 @@
 
 #include <map>
 
-#include "AsynchronousCall.hxx"
-#include "Context.hxx"
-#include "FocusManager.hxx"
-#include "Panel.hxx"
-#include "ResourceManager.hxx"
-#include "TabBar.hxx"
+#include <sfx2/sidebar/AsynchronousCall.hxx>
+#include <sfx2/sidebar/Context.hxx>
+#include <sfx2/sidebar/FocusManager.hxx>
+#include <sfx2/sidebar/Panel.hxx>
+#include <sfx2/sidebar/ResourceManager.hxx>
+#include <sfx2/sidebar/TabBar.hxx>
 
 #include <vcl/menu.hxx>
 
@@ -45,6 +45,8 @@
 #include <cppuhelper/basemutex.hxx>
 #include <cppuhelper/weakref.hxx>
 
+
+
 namespace
 {
     typedef ::cppu::WeakComponentImplHelper4 <
@@ -137,6 +139,21 @@ public:
 
     FocusManager& GetFocusManager() { return maFocusManager;}
 
+    ResourceManager* GetResourceManager() { return mpResourceManager.get();}
+
+   // std::unique_ptr<ResourceManager> GetResourceManager() { return mpResourceManager;}
+
+    Context GetCurrentContext() const { return maCurrentContext;}
+    bool IsDocumentReadOnly (void) const { return mbIsDocumentReadOnly;}
+
+    void SwitchToDeck ( const ::rtl::OUString& rsDeckId);
+    void SwitchToDefaultDeck();
+
+    void CreateDeck(const ::rtl::OUString& rDeckId);
+
+    ResourceManager::DeckContextDescriptorContainer GetMatchingDecks();
+    ResourceManager::PanelContextDescriptorContainer GetMatchingPanels( const ::rtl::OUString& rDeckId);
+
 private:
     typedef ::std::map<
         const css::uno::Reference<css::frame::XFrame>,
@@ -198,13 +215,13 @@ private:
         const ::rtl::OUString& rsImplementationURL,
         const bool bWantsCanvas,
         const Context& rContext);
+
     VclPtr<Panel> CreatePanel (
         const ::rtl::OUString& rsPanelId,
         vcl::Window* pParentWindow,
         const bool bIsInitiallyExpanded,
         const Context& rContext);
-    void SwitchToDeck (
-        const ::rtl::OUString& rsDeckId);
+
     void SwitchToDeck (
         const DeckDescriptor& rDeckDescriptor,
         const Context& rContext);
@@ -245,9 +262,10 @@ private:
     */
     void ShowPanel (const Panel& rPanel);
 
-    Context GetCurrentContext() const { return maCurrentContext;}
-
     virtual void SAL_CALL disposing() SAL_OVERRIDE;
+
+    std::unique_ptr<ResourceManager> mpResourceManager;
+
 };
 
 } } // end of namespace sfx2::sidebar
diff --git a/sfx2/source/sidebar/SidebarDockingWindow.hxx b/include/sfx2/sidebar/SidebarDockingWindow.hxx
similarity index 100%
rename from sfx2/source/sidebar/SidebarDockingWindow.hxx
rename to include/sfx2/sidebar/SidebarDockingWindow.hxx
diff --git a/sfx2/source/sidebar/SidebarResource.hxx b/include/sfx2/sidebar/SidebarResource.hxx
similarity index 97%
rename from sfx2/source/sidebar/SidebarResource.hxx
rename to include/sfx2/sidebar/SidebarResource.hxx
index 3a6363a..78ce96b 100644
--- a/sfx2/source/sidebar/SidebarResource.hxx
+++ b/include/sfx2/sidebar/SidebarResource.hxx
@@ -19,7 +19,7 @@
 #ifndef INCLUDED_SFX2_SOURCE_SIDEBAR_SIDEBARRESOURCE_HXX
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_SIDEBARRESOURCE_HXX
 
-#include "Sidebar.hrc"
+#include <sfx2/sidebar/Sidebar.hrc>
 #include <sfx2/sfxresid.hxx>
 #include <tools/rc.hxx>
 
diff --git a/sfx2/source/sidebar/TabBar.hxx b/include/sfx2/sidebar/TabBar.hxx
similarity index 94%
rename from sfx2/source/sidebar/TabBar.hxx
rename to include/sfx2/sidebar/TabBar.hxx
index 37089f8..1fe2a27 100644
--- a/sfx2/source/sidebar/TabBar.hxx
+++ b/include/sfx2/sidebar/TabBar.hxx
@@ -20,7 +20,8 @@
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_TABBAR_HXX
 
 #include "DeckDescriptor.hxx"
-#include "ResourceManager.hxx"
+#include <sfx2/sidebar/ResourceManager.hxx>
+
 
 #include <vcl/menu.hxx>
 #include <vcl/window.hxx>
@@ -39,6 +40,7 @@ namespace sfx2 { namespace sidebar {
 class FocusManager;
 class TabBarConfiguration;
 class TabItem;
+class SidebarController;
 
 /** The tab bar is the container for the individual tabs.
 */
@@ -66,7 +68,9 @@ public:
         vcl::Window* pParentWindow,
         const css::uno::Reference<css::frame::XFrame>& rxFrame,
         const ::boost::function<void(const ::rtl::OUString&rsDeckId)>& rDeckActivationFunctor,
-        const PopupMenuProvider& rPopupMenuProvider);
+        const PopupMenuProvider& rPopupMenuProvider,
+        SidebarController* rParentSidebarController);
+
     virtual ~TabBar();
     virtual void dispose() SAL_OVERRIDE;
 
@@ -120,6 +124,8 @@ private:
     void ShowPopupMenu() const;
     DECL_LINK(OnToolboxClicked, void*);
 
+    SidebarController* pParentSidebarController;
+
 };
 
 
diff --git a/sfx2/source/sidebar/TabItem.hxx b/include/sfx2/sidebar/TabItem.hxx
similarity index 97%
rename from sfx2/source/sidebar/TabItem.hxx
rename to include/sfx2/sidebar/TabItem.hxx
index f63e4e2..c5eaabb 100644
--- a/sfx2/source/sidebar/TabItem.hxx
+++ b/include/sfx2/sidebar/TabItem.hxx
@@ -21,7 +21,7 @@
 
 #include <vcl/button.hxx>
 
-#include "DeckDescriptor.hxx"
+#include <sfx2/sidebar/DeckDescriptor.hxx>
 
 namespace vcl { class Window; }
 
diff --git a/sfx2/source/sidebar/TitleBar.hxx b/include/sfx2/sidebar/TitleBar.hxx
similarity index 95%
rename from sfx2/source/sidebar/TitleBar.hxx
rename to include/sfx2/sidebar/TitleBar.hxx
index b0bc5d8..9a4d343 100644
--- a/sfx2/source/sidebar/TitleBar.hxx
+++ b/include/sfx2/sidebar/TitleBar.hxx
@@ -19,7 +19,7 @@
 #ifndef INCLUDED_SFX2_SOURCE_SIDEBAR_TITLEBAR_HXX
 #define INCLUDED_SFX2_SOURCE_SIDEBAR_TITLEBAR_HXX
 
-#include "Paint.hxx"
+#include <sfx2/sidebar/Paint.hxx>
 
 #include <vcl/fixed.hxx>
 #include <sfx2/sidebar/SidebarToolBox.hxx>
@@ -35,7 +35,9 @@ public:
     virtual ~TitleBar();
     virtual void dispose() SAL_OVERRIDE;
 
-    void SetTitle (const ::rtl::OUString& rsTitle);
+    void SetTitle (const OUString& rsTitle);
+    const OUString GetTitle() {return msTitle; }
+
     void SetIcon (const Image& rIcon);
 
     virtual void ApplySettings(vcl::RenderContext& rRenderContext) SAL_OVERRIDE;
diff --git a/sfx2/source/sidebar/ToolBox.hxx b/include/sfx2/sidebar/ToolBox.hxx
similarity index 100%
rename from sfx2/source/sidebar/ToolBox.hxx
rename to include/sfx2/sidebar/ToolBox.hxx
diff --git a/include/sfx2/sidebar/UnoDeck.hxx b/include/sfx2/sidebar/UnoDeck.hxx
new file mode 100644
index 0000000..1d9fcc2
--- /dev/null
+++ b/include/sfx2/sidebar/UnoDeck.hxx
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#ifndef INCLUDED_SFX2_SIDEBAR_UNODECK_HXX
+#define INCLUDED_SFX2_SIDEBAR_UNODECK_HXX
+
+
+#include <com/sun/star/ui/XDeck.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/ui/XPanels.hpp>
+
+#include <cppuhelper/compbase1.hxx>
+#include <cppuhelper/weakref.hxx>
+
+#include <sfx2/sidebar/SidebarController.hxx>
+#include <sfx2/sidebar/ResourceManager.hxx>
+
+/** get the decks
+*/
+class SfxUnoDeck : public ::cppu::WeakImplHelper1< css::ui::XDeck >
+{
+
+public:
+
+    SfxUnoDeck(const css::uno::Reference<css::frame::XFrame>& , const OUString&);
+    virtual ~SfxUnoDeck() {};
+
+    virtual OUString SAL_CALL getId()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual OUString SAL_CALL  getTitle()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL setTitle( const OUString& newTitle )
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual sal_Bool SAL_CALL isActive()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL activate( const sal_Bool bActivate )
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual css::uno::Reference<css::ui::XPanels> SAL_CALL getPanels()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual sal_Int32 SAL_CALL getOrderIndex()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL setOrderIndex( const sal_Int32 newOrderIndex )
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL moveFirst()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL moveLast()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL moveUp()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL moveDown()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+private:
+
+    const css::uno::Reference<css::frame::XFrame> xFrame;
+    sfx2::sidebar::SidebarController* getSidebarController();
+
+    const OUString mDeckId;
+    const OUString mTitle;
+
+    sal_Int32 GetMaxOrderIndex(sfx2::sidebar::ResourceManager::DeckContextDescriptorContainer aDecks);
+    sal_Int32 GetMinOrderIndex(sfx2::sidebar::ResourceManager::DeckContextDescriptorContainer aDecks);
+
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/sfx2/sidebar/UnoDecks.hxx b/include/sfx2/sidebar/UnoDecks.hxx
new file mode 100644
index 0000000..5e00899
--- /dev/null
+++ b/include/sfx2/sidebar/UnoDecks.hxx
@@ -0,0 +1,75 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#ifndef INCLUDED_SFX2_SIDEBAR_DECKS_HXX
+#define INCLUDED_SFX2_SIDEBAR_DECKS_HXX
+
+
+#include <com/sun/star/ui/XDecks.hpp>
+
+#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+
+#include <cppuhelper/compbase1.hxx>
+#include <cppuhelper/weakref.hxx>
+
+#include <sfx2/sidebar/SidebarController.hxx>
+#include <sfx2/sidebar/ResourceManager.hxx>
+
+/** get the decks
+*/
+class SfxUnoDecks : public ::cppu::WeakImplHelper1< css::ui::XDecks >
+{
+
+public:
+
+    SfxUnoDecks(const css::uno::Reference<css::frame::XFrame>&);
+    virtual ~SfxUnoDecks() {};
+
+// XNameAccess
+
+    virtual css::uno::Any SAL_CALL getByName( const OUString& aName )
+                                throw(css::container::NoSuchElementException,
+                                    css::lang::WrappedTargetException,
+                                    css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual css::uno::Sequence< OUString > SAL_CALL getElementNames()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual sal_Bool SAL_CALL hasByName( const OUString& aName )
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+// XIndexAccess
+
+    virtual sal_Int32 SAL_CALL getCount()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual css::uno::Any SAL_CALL getByIndex( sal_Int32 Index )
+                                throw(css::lang::IndexOutOfBoundsException,
+                                      css::lang::WrappedTargetException,
+                                      css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+// XElementAccess
+    virtual css::uno::Type SAL_CALL getElementType()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual sal_Bool SAL_CALL hasElements()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+private:
+
+    const css::uno::Reference<css::frame::XFrame> xFrame;
+    sfx2::sidebar::SidebarController* getSidebarController();
+
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/include/sfx2/sidebar/UnoPanel.hxx b/include/sfx2/sidebar/UnoPanel.hxx
new file mode 100644
index 0000000..051a00d
--- /dev/null
+++ b/include/sfx2/sidebar/UnoPanel.hxx
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#ifndef INCLUDED_SFX2_SIDEBAR_UNOPANEL_HXX
+#define INCLUDED_SFX2_SIDEBAR_UNOPANEL_HXX
+
+#include <com/sun/star/ui/XPanel.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/awt/XWindow.hpp>
+
+
+#include <cppuhelper/compbase1.hxx>
+#include <cppuhelper/weakref.hxx>
+
+#include <sfx2/sidebar/SidebarController.hxx>
+#include <sfx2/sidebar/Panel.hxx>
+#include <sfx2/sidebar/Deck.hxx>
+#include <sfx2/sidebar/ResourceManager.hxx>
+
+
+/** get the Panel
+*/
+class SfxUnoPanel : public ::cppu::WeakImplHelper1< css::ui::XPanel >
+{
+
+public:
+
+    SfxUnoPanel(const css::uno::Reference<css::frame::XFrame>& , const OUString&, const OUString&);
+    virtual ~SfxUnoPanel() {};
+
+    virtual OUString SAL_CALL getId()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual OUString SAL_CALL  getTitle()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL setTitle( const OUString& newTitle )
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual sal_Bool SAL_CALL isExpanded()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL expand( const sal_Bool bCollapseOther )
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL collapse( )
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual sal_Int32 SAL_CALL getOrderIndex()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL setOrderIndex( const sal_Int32 newOrderIndex )
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL moveFirst()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL moveLast()
+                                throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+    virtual void SAL_CALL moveUp()

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list