AUI Framework  master
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
By.h
    1/*
    2 * AUI Framework - Declarative UI toolkit for modern C++20
    3 * Copyright (C) 2020-2025 Alex2772 and Contributors
    4 *
    5 * SPDX-License-Identifier: MPL-2.0
    6 *
    7 * This Source Code Form is subject to the terms of the Mozilla Public
    8 * License, v. 2.0. If a copy of the MPL was not distributed with this
    9 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
   10 */
   11
   12#pragma once
   13
   14#include <AUI/Common/AString.h>
   15#include "UIMatcher.h"
   16
   21namespace By {
   22    API_AUI_UITESTS UIMatcher text(const AString& text);
   23    API_AUI_UITESTS UIMatcher name(const AString& name);
   24    API_AUI_UITESTS UIMatcher value(const _<AView>& value);
   25
   26    template<typename T>
   27    UIMatcher type() {
   28        class TypeMatcher: public IMatcher {
   29        public:
   30            ~TypeMatcher() override = default;
   31
   32            bool matches(const _<AView>& view) override {
   33                return dynamic_cast<T*>(view.get()) != nullptr;
   34            }
   35        };
   36        return { _new<TypeMatcher>() };
   37    }
   38    template<typename T>
   39    UIMatcher exactType() {
   40        class ExactTypeMatcher: public IMatcher {
   41        public:
   42            ~ExactTypeMatcher() override = default;
   43
   44            bool matches(const _<AView>& view) override {
   45                return typeid(*view.get()) == typeid(T);
   46            }
   47        };
   48        return { _new<ExactTypeMatcher>() };
   49    }
   50}
   51
   52