sc: theme color export for cell fill color + test
Change-Id: Ibaad410f094f86d9f7197090db702ae45340c239 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151859 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
This commit is contained in:
committed by
Tomaž Vajngerl
parent
3537cef02c
commit
25aa310b92
67
sc/CppunitTest_sc_theme_import_export_test.mk
Normal file
67
sc/CppunitTest_sc_theme_import_export_test.mk
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# -*- 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,sc_theme_import_export_test))
|
||||||
|
|
||||||
|
$(eval $(call gb_CppunitTest_use_common_precompiled_header,sc_theme_import_export_test))
|
||||||
|
|
||||||
|
$(eval $(call gb_CppunitTest_add_exception_objects,sc_theme_import_export_test, \
|
||||||
|
sc/qa/unit/ThemeImportExportTest \
|
||||||
|
))
|
||||||
|
|
||||||
|
$(eval $(call gb_CppunitTest_use_externals,sc_theme_import_export_test, \
|
||||||
|
boost_headers \
|
||||||
|
mdds_headers \
|
||||||
|
libxml2 \
|
||||||
|
))
|
||||||
|
|
||||||
|
$(eval $(call gb_CppunitTest_use_libraries,sc_theme_import_export_test, \
|
||||||
|
basegfx \
|
||||||
|
comphelper \
|
||||||
|
cppu \
|
||||||
|
cppuhelper \
|
||||||
|
sal \
|
||||||
|
salhelper \
|
||||||
|
sax \
|
||||||
|
sc \
|
||||||
|
scqahelper \
|
||||||
|
sfx \
|
||||||
|
subsequenttest \
|
||||||
|
test \
|
||||||
|
tl \
|
||||||
|
unotest \
|
||||||
|
utl \
|
||||||
|
vcl \
|
||||||
|
))
|
||||||
|
|
||||||
|
$(eval $(call gb_CppunitTest_set_include,sc_theme_import_export_test,\
|
||||||
|
-I$(SRCDIR)/sc/source/ui/inc \
|
||||||
|
-I$(SRCDIR)/sc/inc \
|
||||||
|
$$(INCLUDE) \
|
||||||
|
))
|
||||||
|
|
||||||
|
$(eval $(call gb_CppunitTest_use_api,sc_theme_import_export_test,\
|
||||||
|
offapi \
|
||||||
|
udkapi \
|
||||||
|
))
|
||||||
|
|
||||||
|
$(eval $(call gb_CppunitTest_use_sdk_api,sc_theme_import_export_test))
|
||||||
|
$(eval $(call gb_CppunitTest_use_ure,sc_theme_import_export_test))
|
||||||
|
$(eval $(call gb_CppunitTest_use_vcl,sc_theme_import_export_test))
|
||||||
|
$(eval $(call gb_CppunitTest_use_rdb,sc_theme_import_export_test,services))
|
||||||
|
$(eval $(call gb_CppunitTest_use_components,sc_theme_import_export_test))
|
||||||
|
$(eval $(call gb_CppunitTest_use_configuration,sc_theme_import_export_test))
|
||||||
|
|
||||||
|
$(eval $(call gb_CppunitTest_add_arguments,sc_theme_import_export_test, \
|
||||||
|
-env:arg-env=$(gb_Helper_LIBRARY_PATH_VAR)"$$$${$(gb_Helper_LIBRARY_PATH_VAR)+=$$$$$(gb_Helper_LIBRARY_PATH_VAR)}" \
|
||||||
|
))
|
||||||
|
|
||||||
|
# vim: set noet sw=4 ts=4:
|
@@ -236,6 +236,7 @@ $(eval $(call gb_Module_add_subsequentcheck_targets,sc,\
|
|||||||
CppunitTest_sc_tablesheetsobj \
|
CppunitTest_sc_tablesheetsobj \
|
||||||
CppunitTest_sc_tablevalidationobj \
|
CppunitTest_sc_tablevalidationobj \
|
||||||
CppunitTest_sc_tabviewobj \
|
CppunitTest_sc_tabviewobj \
|
||||||
|
CppunitTest_sc_theme_import_export_test \
|
||||||
CppunitTest_sc_uniquecellformatsenumeration \
|
CppunitTest_sc_uniquecellformatsenumeration \
|
||||||
CppunitTest_sc_uniquecellformatsobj \
|
CppunitTest_sc_uniquecellformatsobj \
|
||||||
CppunitTest_sc_viewpaneobj \
|
CppunitTest_sc_viewpaneobj \
|
||||||
|
71
sc/qa/unit/ThemeImportExportTest.cxx
Normal file
71
sc/qa/unit/ThemeImportExportTest.cxx
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/* -*- 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 <test/unoapixml_test.hxx>
|
||||||
|
|
||||||
|
#include <com/sun/star/lang/XComponent.hpp>
|
||||||
|
#include <comphelper/servicehelper.hxx>
|
||||||
|
#include <docsh.hxx>
|
||||||
|
|
||||||
|
using namespace css;
|
||||||
|
|
||||||
|
class ThemeImportExportTest : public UnoApiXmlTest
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ThemeImportExportTest()
|
||||||
|
: UnoApiXmlTest("sc/qa/unit/data")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void test();
|
||||||
|
|
||||||
|
CPPUNIT_TEST_SUITE(ThemeImportExportTest);
|
||||||
|
CPPUNIT_TEST(test);
|
||||||
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
};
|
||||||
|
|
||||||
|
void ThemeImportExportTest::test()
|
||||||
|
{
|
||||||
|
loadFromURL(u"xlsx/CalcThemeTest.xlsx");
|
||||||
|
|
||||||
|
save("Calc Office Open XML");
|
||||||
|
|
||||||
|
xmlDocUniquePtr pXmlDoc = parseExport("xl/styles.xml");
|
||||||
|
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet", 1);
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fonts/x:font", 6);
|
||||||
|
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fonts/x:font[5]/x:color", "rgb",
|
||||||
|
"FFFFC000"); // need to be theme probably
|
||||||
|
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fonts/x:font[6]/x:color", "rgb",
|
||||||
|
"FF9C5700"); // need to be theme probably
|
||||||
|
|
||||||
|
// Fills
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fills/x:fill", 4);
|
||||||
|
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fills/x:fill[1]/x:patternFill", "patternType", "none");
|
||||||
|
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fills/x:fill[2]/x:patternFill", "patternType", "gray125");
|
||||||
|
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fills/x:fill[3]/x:patternFill", "patternType", "solid");
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fills/x:fill[3]/x:patternFill/x:fgColor", "rgb",
|
||||||
|
"FFFFEB9C");
|
||||||
|
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fills/x:fill[4]/x:patternFill", "patternType", "solid");
|
||||||
|
assertXPath(pXmlDoc, "/x:styleSheet/x:fills/x:fill[4]/x:patternFill/x:fgColor", "theme", "4");
|
||||||
|
}
|
||||||
|
|
||||||
|
CPPUNIT_TEST_SUITE_REGISTRATION(ThemeImportExportTest);
|
||||||
|
|
||||||
|
CPPUNIT_PLUGIN_IMPLEMENT();
|
||||||
|
|
||||||
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
BIN
sc/qa/unit/data/xlsx/CalcThemeTest.xlsx
Normal file
BIN
sc/qa/unit/data/xlsx/CalcThemeTest.xlsx
Normal file
Binary file not shown.
@@ -1871,8 +1871,8 @@ void XclExpCellBorder::SaveXml( XclExpXmlStream& rStrm ) const
|
|||||||
XclExpCellArea::XclExpCellArea() :
|
XclExpCellArea::XclExpCellArea() :
|
||||||
mnForeColorId(XclExpPalette::GetColorIdFromIndex(mnForeColor)),
|
mnForeColorId(XclExpPalette::GetColorIdFromIndex(mnForeColor)),
|
||||||
mnBackColorId(XclExpPalette::GetColorIdFromIndex(mnBackColor)),
|
mnBackColorId(XclExpPalette::GetColorIdFromIndex(mnBackColor)),
|
||||||
maForeColor(0),
|
maForeColor(COL_TRANSPARENT),
|
||||||
maBackColor(0)
|
maBackColor(COL_TRANSPARENT)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1888,6 +1888,10 @@ XclExpCellArea::XclExpCellArea(Color aForeColor, Color aBackColor)
|
|||||||
bool XclExpCellArea::FillFromItemSet( const SfxItemSet& rItemSet, XclExpPalette& rPalette, bool bStyle )
|
bool XclExpCellArea::FillFromItemSet( const SfxItemSet& rItemSet, XclExpPalette& rPalette, bool bStyle )
|
||||||
{
|
{
|
||||||
const SvxBrushItem& rBrushItem = rItemSet.Get( ATTR_BACKGROUND );
|
const SvxBrushItem& rBrushItem = rItemSet.Get( ATTR_BACKGROUND );
|
||||||
|
|
||||||
|
if (rBrushItem.getComplexColor().getType() != model::ColorType::Unused)
|
||||||
|
maForegroundComplexColor = rBrushItem.getComplexColor();
|
||||||
|
|
||||||
if( rBrushItem.GetColor().IsTransparent() )
|
if( rBrushItem.GetColor().IsTransparent() )
|
||||||
{
|
{
|
||||||
mnPattern = EXC_PATT_NONE;
|
mnPattern = EXC_PATT_NONE;
|
||||||
@@ -1958,39 +1962,53 @@ void XclExpCellArea::SaveXml( XclExpXmlStream& rStrm ) const
|
|||||||
|
|
||||||
XclExpPalette& rPalette = rStrm.GetRoot().GetPalette();
|
XclExpPalette& rPalette = rStrm.GetRoot().GetPalette();
|
||||||
|
|
||||||
if (mnPattern == EXC_PATT_NONE
|
if (mnPattern == EXC_PATT_NONE ||
|
||||||
|| (mnForeColor == 0 && mnBackColor == 0 && maForeColor == 0 && maBackColor == 0))
|
(mnForeColor == 0 && mnBackColor == 0 && maForeColor == COL_TRANSPARENT && maBackColor == COL_TRANSPARENT))
|
||||||
{
|
{
|
||||||
rStyleSheet->singleElement(XML_patternFill, XML_patternType, ToPatternType(mnPattern));
|
rStyleSheet->singleElement(XML_patternFill, XML_patternType, ToPatternType(mnPattern));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rStyleSheet->startElement(XML_patternFill, XML_patternType, ToPatternType(mnPattern));
|
rStyleSheet->startElement(XML_patternFill, XML_patternType, ToPatternType(mnPattern));
|
||||||
if (maForeColor != 0 || maBackColor != 0)
|
|
||||||
|
if (maForeColor != COL_TRANSPARENT || maBackColor != COL_TRANSPARENT)
|
||||||
{
|
{
|
||||||
if (maForeColor != 0)
|
if (maForegroundComplexColor.getType() == model::ColorType::Scheme)
|
||||||
{
|
{
|
||||||
rStyleSheet->singleElement(XML_fgColor, XML_rgb,
|
rStyleSheet->singleElement(XML_fgColor, XML_theme, OString::number(sal_Int32(maForegroundComplexColor.getSchemeType())));
|
||||||
XclXmlUtils::ToOString(maForeColor));
|
}
|
||||||
|
else if (maForeColor != COL_TRANSPARENT)
|
||||||
|
{
|
||||||
|
rStyleSheet->singleElement(XML_fgColor, XML_rgb, XclXmlUtils::ToOString(maForeColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (maBackColor != 0)
|
if (maBackgroundComplexColor.getType() == model::ColorType::Scheme)
|
||||||
{
|
{
|
||||||
rStyleSheet->singleElement(XML_bgColor, XML_rgb,
|
rStyleSheet->singleElement(XML_fgColor, XML_theme, OString::number(sal_Int32(maBackgroundComplexColor.getSchemeType())));
|
||||||
XclXmlUtils::ToOString(maBackColor));
|
}
|
||||||
|
else if (maBackColor != COL_TRANSPARENT)
|
||||||
|
{
|
||||||
|
rStyleSheet->singleElement(XML_bgColor, XML_rgb, XclXmlUtils::ToOString(maBackColor));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (mnForeColor != 0)
|
if (maForegroundComplexColor.getType() == model::ColorType::Scheme)
|
||||||
{
|
{
|
||||||
rStyleSheet->singleElement(XML_fgColor, XML_rgb,
|
rStyleSheet->singleElement(XML_fgColor, XML_theme, OString::number(sal_Int32(maForegroundComplexColor.getSchemeType())));
|
||||||
XclXmlUtils::ToOString(rPalette.GetColor(mnForeColor)));
|
|
||||||
}
|
}
|
||||||
if (mnBackColor != 0)
|
else if (mnForeColor != 0)
|
||||||
{
|
{
|
||||||
rStyleSheet->singleElement(XML_bgColor, XML_rgb,
|
rStyleSheet->singleElement(XML_fgColor, XML_rgb, XclXmlUtils::ToOString(rPalette.GetColor(mnForeColor)));
|
||||||
XclXmlUtils::ToOString(rPalette.GetColor(mnBackColor)));
|
}
|
||||||
|
|
||||||
|
if (maBackgroundComplexColor.getType() == model::ColorType::Scheme)
|
||||||
|
{
|
||||||
|
rStyleSheet->singleElement(XML_fgColor, XML_theme, OString::number(sal_Int32(maBackgroundComplexColor.getSchemeType())));
|
||||||
|
}
|
||||||
|
else if (mnBackColor != 0)
|
||||||
|
{
|
||||||
|
rStyleSheet->singleElement(XML_bgColor, XML_rgb, XclXmlUtils::ToOString(rPalette.GetColor(mnBackColor)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2007,6 +2025,7 @@ bool XclExpColor::FillFromItemSet( const SfxItemSet& rItemSet )
|
|||||||
|
|
||||||
const SvxBrushItem& rBrushItem = rItemSet.Get( ATTR_BACKGROUND );
|
const SvxBrushItem& rBrushItem = rItemSet.Get( ATTR_BACKGROUND );
|
||||||
maColor = rBrushItem.GetColor();
|
maColor = rBrushItem.GetColor();
|
||||||
|
maComplexColor = rBrushItem.getComplexColor();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -2016,6 +2035,9 @@ void XclExpColor::SaveXml( XclExpXmlStream& rStrm ) const
|
|||||||
sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream();
|
sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream();
|
||||||
rStyleSheet->startElement(XML_fill);
|
rStyleSheet->startElement(XML_fill);
|
||||||
rStyleSheet->startElement(XML_patternFill);
|
rStyleSheet->startElement(XML_patternFill);
|
||||||
|
if (maComplexColor.getType() == model::ColorType::Scheme)
|
||||||
|
rStyleSheet->singleElement(XML_bgColor, XML_theme, OString::number(sal_Int32(maComplexColor.getSchemeType())));
|
||||||
|
else
|
||||||
rStyleSheet->singleElement(XML_bgColor, XML_rgb, XclXmlUtils::ToOString(maColor));
|
rStyleSheet->singleElement(XML_bgColor, XML_rgb, XclXmlUtils::ToOString(maColor));
|
||||||
|
|
||||||
rStyleSheet->endElement( XML_patternFill );
|
rStyleSheet->endElement( XML_patternFill );
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <docmodel/color/ComplexColor.hxx>
|
||||||
|
|
||||||
/* ============================================================================
|
/* ============================================================================
|
||||||
- Buffers for style records (PALETTE, FONT, FORMAT, XF, STYLE).
|
- Buffers for style records (PALETTE, FONT, FORMAT, XF, STYLE).
|
||||||
@@ -375,6 +376,9 @@ struct XclExpCellArea : public XclCellArea
|
|||||||
Color maForeColor; // Actual foreground color
|
Color maForeColor; // Actual foreground color
|
||||||
Color maBackColor; // Actual background color
|
Color maBackColor; // Actual background color
|
||||||
|
|
||||||
|
model::ComplexColor maForegroundComplexColor;
|
||||||
|
model::ComplexColor maBackgroundComplexColor;
|
||||||
|
|
||||||
explicit XclExpCellArea();
|
explicit XclExpCellArea();
|
||||||
explicit XclExpCellArea(Color aForeColor, Color aBackColor);
|
explicit XclExpCellArea(Color aForeColor, Color aBackColor);
|
||||||
|
|
||||||
@@ -400,6 +404,7 @@ struct XclExpCellArea : public XclCellArea
|
|||||||
struct XclExpColor
|
struct XclExpColor
|
||||||
{
|
{
|
||||||
Color maColor;
|
Color maColor;
|
||||||
|
model::ComplexColor maComplexColor;
|
||||||
|
|
||||||
bool FillFromItemSet( const SfxItemSet& rItemSet );
|
bool FillFromItemSet( const SfxItemSet& rItemSet );
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user