summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2019-11-18 22:50:46 +0100
committerTomaž Vajngerl <quikee@gmail.com>2019-11-19 08:57:05 +0100
commitf8ca5fb82db18a22f077a01fb1daf8056ab15ef4 (patch)
treecd488bb98fbab76ceb286e9d26b0f15347bdae5b /vcl
parentd5036b0e2bc50c991858e85760a8580cdf08629e (diff)
widget theme: add centeredTabs setting to theme definition file
Change-Id: I714a44d40a99e0bb5ff48e3d36ded73db60af5a0 Reviewed-on: https://gerrit.libreoffice.org/83133 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com> (cherry picked from commit b234743dd26e0be4be272d2d2c82f90c67e192b7) Reviewed-on: https://gerrit.libreoffice.org/83155 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/widgetdraw/WidgetDefinition.hxx7
-rw-r--r--vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx28
-rw-r--r--vcl/qa/cppunit/widgetdraw/data/definitionSettings1.xml5
-rw-r--r--vcl/qa/cppunit/widgetdraw/data/definitionSettings2.xml6
-rw-r--r--vcl/qa/cppunit/widgetdraw/data/definitionSettings3.xml6
-rw-r--r--vcl/source/gdi/FileDefinitionWidgetDraw.cxx12
-rw-r--r--vcl/source/gdi/WidgetDefinition.cxx2
-rw-r--r--vcl/source/gdi/WidgetDefinitionReader.cxx30
8 files changed, 93 insertions, 3 deletions
diff --git a/vcl/inc/widgetdraw/WidgetDefinition.hxx b/vcl/inc/widgetdraw/WidgetDefinition.hxx
index acaac53bfacf..1c76645b55c0 100644
--- a/vcl/inc/widgetdraw/WidgetDefinition.hxx
+++ b/vcl/inc/widgetdraw/WidgetDefinition.hxx
@@ -198,6 +198,12 @@ public:
std::vector<std::shared_ptr<WidgetDefinitionState>> maStates;
};
+class VCL_DLLPUBLIC WidgetDefinitionSettings
+{
+public:
+ OString msCenteredTabs;
+};
+
class VCL_DLLPUBLIC WidgetDefinitionStyle
{
public:
@@ -260,6 +266,7 @@ class VCL_DLLPUBLIC WidgetDefinition
{
public:
std::shared_ptr<WidgetDefinitionStyle> mpStyle;
+ std::shared_ptr<WidgetDefinitionSettings> mpSettings;
std::unordered_map<ControlTypeAndPart, std::shared_ptr<WidgetDefinitionPart>> maDefinitions;
std::shared_ptr<WidgetDefinitionPart> getDefinition(ControlType eType, ControlPart ePart);
};
diff --git a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
index 843f449b7901..4c507ec1c5da 100644
--- a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
+++ b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
@@ -29,18 +29,44 @@ private:
public:
void testRead();
+ void testReadSettings();
CPPUNIT_TEST_SUITE(WidgetDefinitionReaderTest);
CPPUNIT_TEST(testRead);
+ CPPUNIT_TEST(testReadSettings);
CPPUNIT_TEST_SUITE_END();
};
+void WidgetDefinitionReaderTest::testReadSettings()
+{
+ {
+ vcl::WidgetDefinition aDefinition;
+ vcl::WidgetDefinitionReader aReader(getFullUrl("definitionSettings1.xml"), getFullUrl(""));
+ CPPUNIT_ASSERT(aReader.read(aDefinition));
+ CPPUNIT_ASSERT_EQUAL(OString(""), aDefinition.mpSettings->msCenteredTabs);
+ }
+
+ {
+ vcl::WidgetDefinition aDefinition;
+ vcl::WidgetDefinitionReader aReader(getFullUrl("definitionSettings2.xml"), getFullUrl(""));
+ CPPUNIT_ASSERT(aReader.read(aDefinition));
+ CPPUNIT_ASSERT_EQUAL(OString("true"), aDefinition.mpSettings->msCenteredTabs);
+ }
+
+ {
+ vcl::WidgetDefinition aDefinition;
+ vcl::WidgetDefinitionReader aReader(getFullUrl("definitionSettings3.xml"), getFullUrl(""));
+ CPPUNIT_ASSERT(aReader.read(aDefinition));
+ CPPUNIT_ASSERT_EQUAL(OString("false"), aDefinition.mpSettings->msCenteredTabs);
+ }
+}
+
void WidgetDefinitionReaderTest::testRead()
{
vcl::WidgetDefinition aDefinition;
vcl::WidgetDefinitionReader aReader(getFullUrl("definition1.xml"), getFullUrl(""));
- aReader.read(aDefinition);
+ CPPUNIT_ASSERT(aReader.read(aDefinition));
CPPUNIT_ASSERT_EQUAL(OUString("123456"), aDefinition.mpStyle->maFaceColor.AsRGBHexString());
CPPUNIT_ASSERT_EQUAL(OUString("234567"), aDefinition.mpStyle->maCheckedColor.AsRGBHexString());
diff --git a/vcl/qa/cppunit/widgetdraw/data/definitionSettings1.xml b/vcl/qa/cppunit/widgetdraw/data/definitionSettings1.xml
new file mode 100644
index 000000000000..9ca7f894f29d
--- /dev/null
+++ b/vcl/qa/cppunit/widgetdraw/data/definitionSettings1.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widgets>
+ <settings>
+ </settings>
+</widgets>
diff --git a/vcl/qa/cppunit/widgetdraw/data/definitionSettings2.xml b/vcl/qa/cppunit/widgetdraw/data/definitionSettings2.xml
new file mode 100644
index 000000000000..0d6d6e11151a
--- /dev/null
+++ b/vcl/qa/cppunit/widgetdraw/data/definitionSettings2.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widgets>
+ <settings>
+ <centeredTabs value="true"/>
+ </settings>
+</widgets>
diff --git a/vcl/qa/cppunit/widgetdraw/data/definitionSettings3.xml b/vcl/qa/cppunit/widgetdraw/data/definitionSettings3.xml
new file mode 100644
index 000000000000..20541b2a219e
--- /dev/null
+++ b/vcl/qa/cppunit/widgetdraw/data/definitionSettings3.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widgets>
+ <settings>
+ <centeredTabs value="false"/>
+ </settings>
+</widgets>
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 4b913fa495d4..34707ea751cc 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -86,6 +86,15 @@ std::shared_ptr<WidgetDefinition> getWidgetDefinitionForTheme(OUString const& rT
return spDefinition;
}
+bool getSettingValueBool(OString const& rValue, bool bDefault)
+{
+ if (rValue.isEmpty())
+ return bDefault;
+ if (rValue == "true" || rValue == "false")
+ return rValue == "true";
+ return bDefault;
+}
+
} // end anonymous namespace
FileDefinitionWidgetDraw::FileDefinitionWidgetDraw(SalGraphics& rGraphics)
@@ -105,7 +114,8 @@ FileDefinitionWidgetDraw::FileDefinitionWidgetDraw(SalGraphics& rGraphics)
pSVData->maNWFData.mbNoFocusRects = true;
pSVData->maNWFData.mbNoFocusRectsForFlatButtons = true;
pSVData->maNWFData.mbNoActiveTabTextRaise = true;
- pSVData->maNWFData.mbCenteredTabs = true;
+ pSVData->maNWFData.mbCenteredTabs
+ = getSettingValueBool(m_pWidgetDefinition->mpSettings->msCenteredTabs, true);
pSVData->maNWFData.mbProgressNeedsErase = true;
pSVData->maNWFData.mnStatusBarLowerRightOffset = 10;
pSVData->maNWFData.mbCanDrawWidgetAnySize = true;
diff --git a/vcl/source/gdi/WidgetDefinition.cxx b/vcl/source/gdi/WidgetDefinition.cxx
index 2a8ae5025020..c16b1b6cf657 100644
--- a/vcl/source/gdi/WidgetDefinition.cxx
+++ b/vcl/source/gdi/WidgetDefinition.cxx
@@ -64,7 +64,7 @@ WidgetDefinitionPart::getStates(ControlType eType, ControlPart ePart, ControlSta
if (state->msButtonValue != "any"
&& !((state->msButtonValue == "true" && eButtonValue == ButtonValue::On)
- || (state->msButtonValue == "false" && eButtonValue != ButtonValue::On)))
+ || (state->msButtonValue == "false" && eButtonValue == ButtonValue::Off)))
{
bAdd = false;
}
diff --git a/vcl/source/gdi/WidgetDefinitionReader.cxx b/vcl/source/gdi/WidgetDefinitionReader.cxx
index 50c6d7b3de98..c9c38aefc1b5 100644
--- a/vcl/source/gdi/WidgetDefinitionReader.cxx
+++ b/vcl/source/gdi/WidgetDefinitionReader.cxx
@@ -55,6 +55,13 @@ bool readColor(OString const& rString, Color& rColor)
return true;
}
+bool readSetting(OString const& rInputString, OString& rOutputString)
+{
+ if (!rInputString.isEmpty())
+ rOutputString = rInputString;
+ return true;
+}
+
OString getValueOrAny(OString const& rInputString)
{
if (rInputString.isEmpty())
@@ -412,8 +419,17 @@ bool WidgetDefinitionReader::read(WidgetDefinition& rWidgetDefinition)
{ "toolTextColor", &pStyle->maToolTextColor },
{ "fontColor", &pStyle->maFontColor },
};
+
rWidgetDefinition.mpStyle = pStyle;
+ auto pSettings = std::make_shared<WidgetDefinitionSettings>();
+
+ std::unordered_map<OString, OString*> aSettingMap = {
+ { "centeredTabs", &pSettings->msCenteredTabs },
+ };
+
+ rWidgetDefinition.mpSettings = pSettings;
+
SvFileStream aFileStream(m_rDefinitionFile, StreamMode::READ);
tools::XmlWalker aWalker;
@@ -441,6 +457,20 @@ bool WidgetDefinitionReader::read(WidgetDefinition& rWidgetDefinition)
}
aWalker.parent();
}
+ if (aWalker.name() == "settings")
+ {
+ aWalker.children();
+ while (aWalker.isValid())
+ {
+ auto pair = aSettingMap.find(aWalker.name());
+ if (pair != aSettingMap.end())
+ {
+ readSetting(aWalker.attribute("value"), *pair->second);
+ }
+ aWalker.next();
+ }
+ aWalker.parent();
+ }
else if (getControlTypeForXmlString(aWalker.name(), eType))
{
readDefinition(aWalker, rWidgetDefinition, eType);