From 1c485d2af28ed27f8cdb174d82f4a6199a23e72e Mon Sep 17 00:00:00 2001 From: Mihai Varga Date: Thu, 10 Sep 2015 11:31:48 +0300 Subject: [PATCH 106/398] LOK: getFonts method Returns a json mapping of the available fonts to their possible font sizes Change-Id: I80c0bdd79e3ef2d814f64b8d38143d6c2b9ca720 (cherry picked from commit 1806882317af1162edce5c2389c9c5eeb18455ac) --- desktop/qa/desktop_lib/test_desktop_lib.cxx | 22 +++++++++++++ desktop/source/lib/init.cxx | 48 ++++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx index 842d209f8fb3..a08961403aac 100644 --- a/desktop/qa/desktop_lib/test_desktop_lib.cxx +++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx @@ -49,6 +49,7 @@ public: void runAllTests(); void testGetStyles(); + void testGetFonts(); CPPUNIT_TEST_SUITE(DesktopLOKTest); CPPUNIT_TEST(runAllTests); @@ -81,6 +82,7 @@ void DesktopLOKTest::closeDoc() void DesktopLOKTest::runAllTests() { testGetStyles(); + testGetFonts(); } void DesktopLOKTest::testGetStyles() @@ -112,6 +114,26 @@ void DesktopLOKTest::testGetStyles() closeDoc(); } +void DesktopLOKTest::testGetFonts() +{ + LibLODocument_Impl* pDocument = loadDoc("blank_text.odt"); + boost::property_tree::ptree aTree; + char* pJSON = pDocument->m_pDocumentClass->getCommandValues(pDocument, ".uno:CharFontName"); + std::stringstream aStream(pJSON); + boost::property_tree::read_json(aStream, aTree); + CPPUNIT_ASSERT( aTree.size() > 0 ); + CPPUNIT_ASSERT( aTree.get_child("commandName").get_value() == ".uno:CharFontName" ); + + boost::property_tree::ptree aValues = aTree.get_child("commandValues"); + CPPUNIT_ASSERT( aValues.size() > 0 ); + for (const std::pair& rPair : aValues) + { + // check that we have font sizes available for each font + CPPUNIT_ASSERT( rPair.second.size() > 0); + } + closeDoc(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(DesktopLOKTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 7a020d142ddc..be1a01867cf5 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -45,10 +45,15 @@ #include #include +#include +#include +#include +#include #include #include #include #include +#include #include #include #include @@ -864,6 +869,43 @@ static void doc_resetSelection(LibreOfficeKitDocument* pThis) pDoc->resetSelection(); } +static char* getFonts (const char* pCommand) +{ + SfxObjectShell* pDocSh = SfxObjectShell::Current(); + const SvxFontListItem* pFonts = static_cast( + pDocSh->GetItem(SID_ATTR_CHAR_FONTLIST)); + const FontList* pList = pFonts ? pFonts->GetFontList() : 0; + + boost::property_tree::ptree aTree; + aTree.put("commandName", pCommand); + boost::property_tree::ptree aValues; + if ( pList ) + { + sal_uInt16 nFontCount = pList->GetFontNameCount(); + for (sal_uInt16 i = 0; i < nFontCount; ++i) + { + boost::property_tree::ptree aChildren; + const vcl::FontInfo& rInfo = pList->GetFontName(i); + const sal_IntPtr* pAry = pList->GetSizeAry(rInfo); + sal_uInt16 nSizeCount = 0; + while (pAry[nSizeCount]) + { + boost::property_tree::ptree aChild; + aChild.put("", (float)pAry[nSizeCount] / 10); + aChildren.push_back(std::make_pair("", aChild)); + nSizeCount++; + } + aValues.add_child(rInfo.GetName().toUtf8().getStr(), aChildren); + } + } + aTree.add_child("commandValues", aValues); + std::stringstream aStream; + boost::property_tree::write_json(aStream, aTree); + char* pJson = static_cast(malloc(aStream.str().size() + 1)); + strcpy(pJson, aStream.str().c_str()); + pJson[aStream.str().size()] = '\0'; + return pJson; +} static char* getStyles(LibreOfficeKitDocument* pThis, const char* pCommand) { @@ -901,7 +943,11 @@ static char* getStyles(LibreOfficeKitDocument* pThis, const char* pCommand) static char* doc_getCommandValues(LibreOfficeKitDocument* pThis, const char* pCommand) { - if (!strcmp(pCommand, ".uno:StyleApply")) + if (!strcmp(pCommand, ".uno:CharFontName")) + { + return getFonts(pCommand); + } + else if (!strcmp(pCommand, ".uno:StyleApply")) { return getStyles(pThis, pCommand); } -- 2.12.0