Kaydet (Commit) ddc9626e authored tarafından Mihai Varga's avatar Mihai Varga Kaydeden (comit) Jan Holesovsky

LOK: getFonts method

Returns a json mapping of the available fonts to their possible font
sizes

Change-Id: I80c0bdd79e3ef2d814f64b8d38143d6c2b9ca720
üst 7705f4fa
...@@ -49,6 +49,7 @@ public: ...@@ -49,6 +49,7 @@ public:
void runAllTests(); void runAllTests();
void testGetStyles(); void testGetStyles();
void testGetFonts();
CPPUNIT_TEST_SUITE(DesktopLOKTest); CPPUNIT_TEST_SUITE(DesktopLOKTest);
CPPUNIT_TEST(runAllTests); CPPUNIT_TEST(runAllTests);
...@@ -81,6 +82,7 @@ void DesktopLOKTest::closeDoc() ...@@ -81,6 +82,7 @@ void DesktopLOKTest::closeDoc()
void DesktopLOKTest::runAllTests() void DesktopLOKTest::runAllTests()
{ {
testGetStyles(); testGetStyles();
testGetFonts();
} }
void DesktopLOKTest::testGetStyles() void DesktopLOKTest::testGetStyles()
...@@ -112,6 +114,26 @@ void DesktopLOKTest::testGetStyles() ...@@ -112,6 +114,26 @@ void DesktopLOKTest::testGetStyles()
closeDoc(); 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<std::string>() == ".uno:CharFontName" );
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)
{
// check that we have font sizes available for each font
CPPUNIT_ASSERT( rPair.second.size() > 0);
}
closeDoc();
}
CPPUNIT_TEST_SUITE_REGISTRATION(DesktopLOKTest); CPPUNIT_TEST_SUITE_REGISTRATION(DesktopLOKTest);
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
...@@ -45,10 +45,15 @@ ...@@ -45,10 +45,15 @@
#include <com/sun/star/ucb/XContentProvider.hpp> #include <com/sun/star/ucb/XContentProvider.hpp>
#include <com/sun/star/ucb/XUniversalContentBroker.hpp> #include <com/sun/star/ucb/XUniversalContentBroker.hpp>
#include <editeng/fontitem.hxx>
#include <editeng/flstitem.hxx>
#include <sfx2/objsh.hxx>
#include <svx/svxids.hrc>
#include <vcl/svapp.hxx> #include <vcl/svapp.hxx>
#include <vcl/svpforlokit.hxx> #include <vcl/svpforlokit.hxx>
#include <tools/resmgr.hxx> #include <tools/resmgr.hxx>
#include <tools/fract.hxx> #include <tools/fract.hxx>
#include <svtools/ctrltool.hxx>
#include <vcl/graphicfilter.hxx> #include <vcl/graphicfilter.hxx>
#include <vcl/sysdata.hxx> #include <vcl/sysdata.hxx>
#include <vcl/virdev.hxx> #include <vcl/virdev.hxx>
...@@ -864,6 +869,43 @@ static void doc_resetSelection(LibreOfficeKitDocument* pThis) ...@@ -864,6 +869,43 @@ static void doc_resetSelection(LibreOfficeKitDocument* pThis)
pDoc->resetSelection(); pDoc->resetSelection();
} }
static char* getFonts (const char* pCommand)
{
SfxObjectShell* pDocSh = SfxObjectShell::Current();
const SvxFontListItem* pFonts = static_cast<const SvxFontListItem*>(
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<char*>(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) static char* getStyles(LibreOfficeKitDocument* pThis, const char* pCommand)
{ {
...@@ -901,7 +943,11 @@ 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) 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); return getStyles(pThis, pCommand);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment