summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2019-03-03 10:00:05 +0100
committerTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2019-03-11 12:12:57 +0100
commit7906eb24c2f4d246adf4b88b0b52488af32f24d5 (patch)
tree52059f6f0e6d55c3ca3f3f7a89a11a096bd08132
parenta3fd726bc066eb3683f77fd255170fffcedae9e8 (diff)
Support first, last tab item for the widget definition
Add "extra" parameter for the widget definition states with the default set to "any". For tab item, the extra parameter can be "first", "last", "middle" and "first_last" (only one). This is needed to draw first and last tab item differently. Change-Id: I46b6897b485b4df94ab6fe9521925c3715eaa24e Reviewed-on: https://gerrit.libreoffice.org/68817 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com> (cherry picked from commit fd57cdfc772713c9d7ccd4544063deedf744c633)
-rw-r--r--vcl/inc/widgetdraw/WidgetDefinition.hxx8
-rw-r--r--vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx12
-rw-r--r--vcl/source/gdi/FileDefinitionWidgetDraw.cxx2
-rw-r--r--vcl/source/gdi/WidgetDefinition.cxx29
-rw-r--r--vcl/source/gdi/WidgetDefinitionReader.cxx6
5 files changed, 45 insertions, 12 deletions
diff --git a/vcl/inc/widgetdraw/WidgetDefinition.hxx b/vcl/inc/widgetdraw/WidgetDefinition.hxx
index 50aaed65ff2e..0ee545122ea9 100644
--- a/vcl/inc/widgetdraw/WidgetDefinition.hxx
+++ b/vcl/inc/widgetdraw/WidgetDefinition.hxx
@@ -172,10 +172,12 @@ public:
OString msDefault;
OString msSelected;
OString msButtonValue;
+ OString msExtra;
WidgetDefinitionState(OString const& sEnabled, OString const& sFocused, OString const& sPressed,
OString const& sRollover, OString const& sDefault,
- OString const& sSelected, OString const& sButtonValue);
+ OString const& sSelected, OString const& sButtonValue,
+ OString const& sExtra);
std::vector<std::shared_ptr<DrawCommand>> mpDrawCommands;
@@ -194,8 +196,8 @@ public:
class VCL_DLLPUBLIC WidgetDefinitionPart
{
public:
- std::vector<std::shared_ptr<WidgetDefinitionState>> getStates(ControlState eState,
- ImplControlValue const& rValue);
+ std::vector<std::shared_ptr<WidgetDefinitionState>>
+ getStates(ControlType eType, ControlState eState, ImplControlValue const& rValue);
std::vector<std::shared_ptr<WidgetDefinitionState>> maStates;
};
diff --git a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
index 24713e9795b3..20b3270267dd 100644
--- a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
+++ b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
@@ -56,11 +56,11 @@ void WidgetDefinitionReaderTest::testRead()
// Pushbutton
{
+ ControlState eState
+ = ControlState::DEFAULT | ControlState::ENABLED | ControlState::ROLLOVER;
std::vector<std::shared_ptr<vcl::WidgetDefinitionState>> aStates
= aDefinition.getDefinition(ControlType::Pushbutton, ControlPart::Entire)
- ->getStates(ControlState::DEFAULT | ControlState::ENABLED
- | ControlState::ROLLOVER,
- ImplControlValue());
+ ->getStates(ControlType::Pushbutton, eState, ImplControlValue());
CPPUNIT_ASSERT_EQUAL(size_t(2), aStates.size());
@@ -74,7 +74,8 @@ void WidgetDefinitionReaderTest::testRead()
{
std::vector<std::shared_ptr<vcl::WidgetDefinitionState>> aStates
= aDefinition.getDefinition(ControlType::Radiobutton, ControlPart::Entire)
- ->getStates(ControlState::NONE, ImplControlValue(ButtonValue::On));
+ ->getStates(ControlType::Radiobutton, ControlState::NONE,
+ ImplControlValue(ButtonValue::On));
CPPUNIT_ASSERT_EQUAL(size_t(1), aStates.size());
CPPUNIT_ASSERT_EQUAL(size_t(2), aStates[0]->mpDrawCommands.size());
}
@@ -82,7 +83,8 @@ void WidgetDefinitionReaderTest::testRead()
{
std::vector<std::shared_ptr<vcl::WidgetDefinitionState>> aStates
= aDefinition.getDefinition(ControlType::Radiobutton, ControlPart::Entire)
- ->getStates(ControlState::NONE, ImplControlValue(ButtonValue::Off));
+ ->getStates(ControlType::Radiobutton, ControlState::NONE,
+ ImplControlValue(ButtonValue::Off));
CPPUNIT_ASSERT_EQUAL(size_t(1), aStates.size());
CPPUNIT_ASSERT_EQUAL(size_t(1), aStates[0]->mpDrawCommands.size());
}
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index c1e15bc9d9c9..4160a2a0ada4 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -368,7 +368,7 @@ bool FileDefinitionWidgetDraw::resolveDefinition(ControlType eType, ControlPart
auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ePart);
if (pPart)
{
- auto const& aStates = pPart->getStates(eState, rValue);
+ auto const& aStates = pPart->getStates(eType, eState, rValue);
if (!aStates.empty())
{
// use last defined state
diff --git a/vcl/source/gdi/WidgetDefinition.cxx b/vcl/source/gdi/WidgetDefinition.cxx
index f861b9efb302..25eba80ecb13 100644
--- a/vcl/source/gdi/WidgetDefinition.cxx
+++ b/vcl/source/gdi/WidgetDefinition.cxx
@@ -26,7 +26,8 @@ std::shared_ptr<WidgetDefinitionPart> WidgetDefinition::getDefinition(ControlTyp
}
std::vector<std::shared_ptr<WidgetDefinitionState>>
-WidgetDefinitionPart::getStates(ControlState eState, ImplControlValue const& rValue)
+WidgetDefinitionPart::getStates(ControlType eType, ControlState eState,
+ ImplControlValue const& rValue)
{
std::vector<std::shared_ptr<WidgetDefinitionState>> aStatesToAdd;
@@ -64,7 +65,30 @@ WidgetDefinitionPart::getStates(ControlState eState, ImplControlValue const& rVa
if (state->msButtonValue != "any"
&& !((state->msButtonValue == "true" && eButtonValue == ButtonValue::On)
|| (state->msButtonValue == "false" && eButtonValue != ButtonValue::On)))
+ {
bAdd = false;
+ }
+
+ if (eType == ControlType::TabItem)
+ {
+ OString sExtra;
+
+ auto const& rTabItemValue = static_cast<TabitemValue const&>(rValue);
+
+ if (rTabItemValue.isFirst() && rTabItemValue.isLast())
+ sExtra = "first_last";
+ else if (rTabItemValue.isFirst())
+ sExtra = "first";
+ else if (rTabItemValue.isLast())
+ sExtra = "last";
+ else
+ sExtra = "middle";
+
+ if (state->msExtra != "any" && state->msExtra != sExtra)
+ {
+ bAdd = false;
+ }
+ }
if (bAdd)
aStatesToAdd.push_back(state);
@@ -76,7 +100,7 @@ WidgetDefinitionPart::getStates(ControlState eState, ImplControlValue const& rVa
WidgetDefinitionState::WidgetDefinitionState(OString const& sEnabled, OString const& sFocused,
OString const& sPressed, OString const& sRollover,
OString const& sDefault, OString const& sSelected,
- OString const& sButtonValue)
+ OString const& sButtonValue, OString const& sExtra)
: msEnabled(sEnabled)
, msFocused(sFocused)
, msPressed(sPressed)
@@ -84,6 +108,7 @@ WidgetDefinitionState::WidgetDefinitionState(OString const& sEnabled, OString co
, msDefault(sDefault)
, msSelected(sSelected)
, msButtonValue(sButtonValue)
+ , msExtra(sExtra)
{
}
diff --git a/vcl/source/gdi/WidgetDefinitionReader.cxx b/vcl/source/gdi/WidgetDefinitionReader.cxx
index cf361d8793ed..8a7270e718f1 100644
--- a/vcl/source/gdi/WidgetDefinitionReader.cxx
+++ b/vcl/source/gdi/WidgetDefinitionReader.cxx
@@ -315,9 +315,13 @@ void WidgetDefinitionReader::readPart(tools::XmlWalker& rWalker,
OString sDefault = rWalker.attribute("default");
OString sSelected = rWalker.attribute("selected");
OString sButtonValue = rWalker.attribute("button-value");
+ OString sExtra = rWalker.attribute("extra");
+ if (sExtra.isEmpty())
+ sExtra = "any";
std::shared_ptr<WidgetDefinitionState> pState = std::make_shared<WidgetDefinitionState>(
- sEnabled, sFocused, sPressed, sRollover, sDefault, sSelected, sButtonValue);
+ sEnabled, sFocused, sPressed, sRollover, sDefault, sSelected, sButtonValue, sExtra);
+
rpPart->maStates.push_back(pState);
readDrawingDefinition(rWalker, pState);
}