diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2019-03-03 10:00:05 +0100 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2019-03-11 12:12:57 +0100 |
commit | 7906eb24c2f4d246adf4b88b0b52488af32f24d5 (patch) | |
tree | 52059f6f0e6d55c3ca3f3f7a89a11a096bd08132 | |
parent | a3fd726bc066eb3683f77fd255170fffcedae9e8 (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.hxx | 8 | ||||
-rw-r--r-- | vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx | 12 | ||||
-rw-r--r-- | vcl/source/gdi/FileDefinitionWidgetDraw.cxx | 2 | ||||
-rw-r--r-- | vcl/source/gdi/WidgetDefinition.cxx | 29 | ||||
-rw-r--r-- | vcl/source/gdi/WidgetDefinitionReader.cxx | 6 |
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); } |