186 lines
6.7 KiB
C++
186 lines
6.7 KiB
C++
/* -*- 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 <utility>
|
|
#include <widgetdraw/WidgetDefinition.hxx>
|
|
|
|
#include <sal/config.h>
|
|
#include <unordered_map>
|
|
|
|
namespace vcl
|
|
{
|
|
std::shared_ptr<WidgetDefinitionPart> WidgetDefinition::getDefinition(ControlType eType,
|
|
ControlPart ePart)
|
|
{
|
|
auto aIterator = maDefinitions.find(ControlTypeAndPart(eType, ePart));
|
|
|
|
if (aIterator != maDefinitions.end())
|
|
return aIterator->second;
|
|
return std::shared_ptr<WidgetDefinitionPart>();
|
|
}
|
|
|
|
std::vector<std::shared_ptr<WidgetDefinitionState>>
|
|
WidgetDefinitionPart::getStates(ControlType eType, ControlPart ePart, ControlState eState,
|
|
ImplControlValue const& rValue)
|
|
{
|
|
std::vector<std::shared_ptr<WidgetDefinitionState>> aStatesToAdd;
|
|
|
|
for (const auto& state : maStates)
|
|
{
|
|
bool bAdd = true;
|
|
|
|
if (state->msEnabled != "any"
|
|
&& !((state->msEnabled == "true" && eState & ControlState::ENABLED)
|
|
|| (state->msEnabled == "false" && !(eState & ControlState::ENABLED))))
|
|
bAdd = false;
|
|
if (state->msFocused != "any"
|
|
&& !((state->msFocused == "true" && eState & ControlState::FOCUSED)
|
|
|| (state->msFocused == "false" && !(eState & ControlState::FOCUSED))))
|
|
bAdd = false;
|
|
if (state->msPressed != "any"
|
|
&& !((state->msPressed == "true" && eState & ControlState::PRESSED)
|
|
|| (state->msPressed == "false" && !(eState & ControlState::PRESSED))))
|
|
bAdd = false;
|
|
if (state->msRollover != "any"
|
|
&& !((state->msRollover == "true" && eState & ControlState::ROLLOVER)
|
|
|| (state->msRollover == "false" && !(eState & ControlState::ROLLOVER))))
|
|
bAdd = false;
|
|
if (state->msDefault != "any"
|
|
&& !((state->msDefault == "true" && eState & ControlState::DEFAULT)
|
|
|| (state->msDefault == "false" && !(eState & ControlState::DEFAULT))))
|
|
bAdd = false;
|
|
if (state->msSelected != "any"
|
|
&& !((state->msSelected == "true" && eState & ControlState::SELECTED)
|
|
|| (state->msSelected == "false" && !(eState & ControlState::SELECTED))))
|
|
bAdd = false;
|
|
|
|
ButtonValue eButtonValue = rValue.getTristateVal();
|
|
|
|
if (state->msButtonValue != "any"
|
|
&& !((state->msButtonValue == "true" && eButtonValue == ButtonValue::On)
|
|
|| (state->msButtonValue == "false" && eButtonValue == ButtonValue::Off)))
|
|
{
|
|
bAdd = false;
|
|
}
|
|
|
|
OString sExtra = "any"_ostr;
|
|
|
|
switch (eType)
|
|
{
|
|
case ControlType::TabItem:
|
|
{
|
|
auto const& rTabItemValue = static_cast<TabitemValue const&>(rValue);
|
|
|
|
if (rTabItemValue.isLeftAligned() && rTabItemValue.isRightAligned()
|
|
&& rTabItemValue.isFirst() && rTabItemValue.isLast())
|
|
sExtra = "first_last"_ostr;
|
|
else if (rTabItemValue.isLeftAligned() || rTabItemValue.isFirst())
|
|
sExtra = "first"_ostr;
|
|
else if (rTabItemValue.isRightAligned() || rTabItemValue.isLast())
|
|
sExtra = "last"_ostr;
|
|
else
|
|
sExtra = "middle"_ostr;
|
|
}
|
|
break;
|
|
case ControlType::ListHeader:
|
|
{
|
|
if (ePart == ControlPart::Arrow)
|
|
{
|
|
if (rValue.getNumericVal() == 1)
|
|
sExtra = "down"_ostr;
|
|
else
|
|
sExtra = "up"_ostr;
|
|
}
|
|
}
|
|
break;
|
|
case ControlType::Pushbutton:
|
|
{
|
|
auto const& rPushButtonValue = static_cast<PushButtonValue const&>(rValue);
|
|
if (rPushButtonValue.mbIsAction)
|
|
sExtra = "action"_ostr;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (state->msExtra != "any" && state->msExtra != sExtra)
|
|
{
|
|
bAdd = false;
|
|
}
|
|
|
|
if (bAdd)
|
|
aStatesToAdd.push_back(state);
|
|
}
|
|
|
|
return aStatesToAdd;
|
|
}
|
|
|
|
WidgetDefinitionState::WidgetDefinitionState(OString sEnabled, OString sFocused, OString sPressed,
|
|
OString sRollover, OString sDefault, OString sSelected,
|
|
OString sButtonValue, OString sExtra)
|
|
: msEnabled(std::move(sEnabled))
|
|
, msFocused(std::move(sFocused))
|
|
, msPressed(std::move(sPressed))
|
|
, msRollover(std::move(sRollover))
|
|
, msDefault(std::move(sDefault))
|
|
, msSelected(std::move(sSelected))
|
|
, msButtonValue(std::move(sButtonValue))
|
|
, msExtra(std::move(sExtra))
|
|
{
|
|
}
|
|
|
|
void WidgetDefinitionState::addDrawRectangle(Color aStrokeColor, sal_Int32 nStrokeWidth,
|
|
Color aFillColor, float fX1, float fY1, float fX2,
|
|
float fY2, sal_Int32 nRx, sal_Int32 nRy)
|
|
{
|
|
auto pCommand(std::make_shared<WidgetDrawActionRectangle>());
|
|
pCommand->maStrokeColor = aStrokeColor;
|
|
pCommand->maFillColor = aFillColor;
|
|
pCommand->mnStrokeWidth = nStrokeWidth;
|
|
pCommand->mnRx = nRx;
|
|
pCommand->mnRy = nRy;
|
|
pCommand->mfX1 = fX1;
|
|
pCommand->mfY1 = fY1;
|
|
pCommand->mfX2 = fX2;
|
|
pCommand->mfY2 = fY2;
|
|
mpWidgetDrawActions.push_back(std::move(pCommand));
|
|
}
|
|
|
|
void WidgetDefinitionState::addDrawLine(Color aStrokeColor, sal_Int32 nStrokeWidth, float fX1,
|
|
float fY1, float fX2, float fY2)
|
|
{
|
|
auto pCommand(std::make_shared<WidgetDrawActionLine>());
|
|
pCommand->maStrokeColor = aStrokeColor;
|
|
pCommand->mnStrokeWidth = nStrokeWidth;
|
|
pCommand->mfX1 = fX1;
|
|
pCommand->mfY1 = fY1;
|
|
pCommand->mfX2 = fX2;
|
|
pCommand->mfY2 = fY2;
|
|
mpWidgetDrawActions.push_back(std::move(pCommand));
|
|
}
|
|
|
|
void WidgetDefinitionState::addDrawImage(OUString const& sSource)
|
|
{
|
|
auto pCommand(std::make_shared<WidgetDrawActionImage>());
|
|
pCommand->msSource = sSource;
|
|
mpWidgetDrawActions.push_back(std::move(pCommand));
|
|
}
|
|
|
|
void WidgetDefinitionState::addDrawExternal(OUString const& sSource)
|
|
{
|
|
auto pCommand(std::make_shared<WidgetDrawActionExternal>());
|
|
pCommand->msSource = sSource;
|
|
mpWidgetDrawActions.push_back(std::move(pCommand));
|
|
}
|
|
|
|
} // end vcl namespace
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|