Blob Blame History Raw
From ba461282993202188ef16adb99220cf403356c57 Mon Sep 17 00:00:00 2001
From: Mihai Varga <mihai.varga@collabora.com>
Date: Thu, 10 Sep 2015 09:21:45 +0300
Subject: [PATCH 105/398] LOK: added a general getCommandValues method

This method returns a JSON mapping of the posible values for the given
command (e.g. .uno:StyleApply, etc).

returns:
{commandName: "cmdName", commandValues: {json_of_cmd_values}}
I've fixed the unit test this time

Change-Id: I30b0fba8ba1db33dd79f4b46026d293b9ea72402
(cherry picked from commit 39975c477a38be613e9e162acb6de241999f0ae1)
---
 desktop/qa/desktop_lib/test_desktop_lib.cxx |  7 +++++--
 desktop/source/lib/init.cxx                 | 24 ++++++++++++++++++++----
 include/LibreOfficeKit/LibreOfficeKit.h     |  2 +-
 include/LibreOfficeKit/LibreOfficeKit.hxx   |  9 ++++++---
 4 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index c88a53f41edb..842d209f8fb3 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -87,12 +87,15 @@ void DesktopLOKTest::testGetStyles()
 {
     LibLODocument_Impl* pDocument = loadDoc("blank_text.odt");
     boost::property_tree::ptree aTree;
-    char* pJSON = pDocument->m_pDocumentClass->getStyles(pDocument);
+    char* pJSON = pDocument->m_pDocumentClass->getCommandValues(pDocument, ".uno:StyleApply");
     std::stringstream aStream(pJSON);
     boost::property_tree::read_json(aStream, aTree);
     CPPUNIT_ASSERT( aTree.size() > 0 );
+    CPPUNIT_ASSERT( aTree.get_child("commandName").get_value<std::string>() == ".uno:StyleApply" );
 
-    for (const std::pair<std::string, boost::property_tree::ptree>& rPair : aTree)
+    boost::property_tree::ptree aValues = aTree.get_child("commandValues");
+    CPPUNIT_ASSERT( aValues.size() > 0 );
+    for (const std::pair<std::string, boost::property_tree::ptree>& rPair : aValues)
     {
         CPPUNIT_ASSERT( rPair.second.size() > 0);
         if (rPair.first != "CharacterStyles" &&
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index a20decd3afbe..7a020d142ddc 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -235,7 +235,7 @@ static void doc_setGraphicSelection (LibreOfficeKitDocument* pThis,
                                   int nX,
                                   int nY);
 static void doc_resetSelection (LibreOfficeKitDocument* pThis);
-static char* doc_getStyles(LibreOfficeKitDocument* pThis);
+static char* doc_getCommandValues(LibreOfficeKitDocument* pThis, const char* pCommand);
 
 
 LibLODocument_Impl::LibLODocument_Impl(const uno::Reference <css::lang::XComponent> &xComponent) :
@@ -266,7 +266,7 @@ LibLODocument_Impl::LibLODocument_Impl(const uno::Reference <css::lang::XCompone
         m_pDocumentClass->getTextSelection = doc_getTextSelection;
         m_pDocumentClass->setGraphicSelection = doc_setGraphicSelection;
         m_pDocumentClass->resetSelection = doc_resetSelection;
-        m_pDocumentClass->getStyles = doc_getStyles;
+        m_pDocumentClass->getCommandValues = doc_getCommandValues;
 
         gDocumentClass = m_pDocumentClass;
     }
@@ -865,15 +865,17 @@ static void doc_resetSelection(LibreOfficeKitDocument* pThis)
     pDoc->resetSelection();
 }
 
-static char* doc_getStyles(LibreOfficeKitDocument* pThis)
+static char* getStyles(LibreOfficeKitDocument* pThis, const char* pCommand)
 {
     LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis);
 
     boost::property_tree::ptree aTree;
+    aTree.put("commandName", pCommand);
     uno::Reference<css::style::XStyleFamiliesSupplier> xStyleFamiliesSupplier(pDocument->mxComponent, uno::UNO_QUERY);
     uno::Reference<container::XNameAccess> xStyleFamilies(xStyleFamiliesSupplier->getStyleFamilies(), uno::UNO_QUERY);
     uno::Sequence<OUString> aStyleFamilies = xStyleFamilies->getElementNames();
 
+    boost::property_tree::ptree aValues;
     for (sal_Int32 nStyleFam = 0; nStyleFam < aStyleFamilies.getLength(); ++nStyleFam)
     {
         boost::property_tree::ptree aChildren;
@@ -886,8 +888,9 @@ static char* doc_getStyles(LibreOfficeKitDocument* pThis)
             aChild.put("", aStyles[nInd]);
             aChildren.push_back(std::make_pair("", aChild));
         }
-        aTree.add_child(sStyleFam.toUtf8().getStr(), aChildren);
+        aValues.add_child(sStyleFam.toUtf8().getStr(), aChildren);
     }
+    aTree.add_child("commandValues", aValues);
     std::stringstream aStream;
     boost::property_tree::write_json(aStream, aTree);
     char* pJson = static_cast<char*>(malloc(aStream.str().size() + 1));
@@ -895,6 +898,19 @@ static char* doc_getStyles(LibreOfficeKitDocument* pThis)
     pJson[aStream.str().size()] = '\0';
     return pJson;
 }
+
+static char* doc_getCommandValues(LibreOfficeKitDocument* pThis, const char* pCommand)
+{
+    if (!strcmp(pCommand, ".uno:StyleApply"))
+    {
+        return getStyles(pThis, pCommand);
+    }
+    else {
+        gImpl->maLastExceptionMsg = "Unknown command, no values returned";
+        return NULL;
+    }
+}
+
 static char* lo_getError (LibreOfficeKit *pThis)
 {
     LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h
index af7155c4db67..8060f0e6ec7c 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.h
+++ b/include/LibreOfficeKit/LibreOfficeKit.h
@@ -161,7 +161,7 @@ struct _LibreOfficeKitDocumentClass
     void (*resetSelection) (LibreOfficeKitDocument* pThis);
 
     /// @see lok::Document:getStyles
-    char* (*getStyles) (LibreOfficeKitDocument* pThis);
+    char* (*getCommandValues) (LibreOfficeKitDocument* pThis, const char* pCommand);
 #endif // LOK_USE_UNSTABLE_API
 };
 
diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx
index c526bda95593..44599948e659 100644
--- a/include/LibreOfficeKit/LibreOfficeKit.hxx
+++ b/include/LibreOfficeKit/LibreOfficeKit.hxx
@@ -248,11 +248,14 @@ public:
     }
 
     /**
-     * Returns a json map, {"familyName1" : ["list of style names in the family1"], etc.}
+     * Returns a json mapping of the possible values for the given command
+     * e.g. {commandName: ".uno:StyleApply", commandValues: {"familyName1" : ["list of style names in the family1"], etc.}}
+     * @param pCommand a uno command for which the possible values are requested
+     * @return {commandName: unoCmd, commandValues: {possible_values}}
      */
-    inline char* getStyles()
+    inline char* getCommandValues(const char* pCommand)
     {
-        return mpDoc->pClass->getStyles(mpDoc);
+        return mpDoc->pClass->getCommandValues(mpDoc, pCommand);
     }
 #endif // LOK_USE_UNSTABLE_API
 };
-- 
2.12.0