Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/LibreOffice/vcl/source/gdi/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 6 kB image not shown  

Quelle  WidgetDefinition.cxx   Sprache: 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: */

Messung V0.5
C=95 H=95 G=94

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.