AUI Framework  develop
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
AText.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
   15#include "ATextBase.h"
   16
   33class API_AUI_VIEWS AText : public ATextBase<AWordWrappingEngine<>> {
   34public:
   35    using Flags = AVector<std::variant<WordBreak>>;
   36    struct ParsedFlags {
   37        WordBreak wordBreak = WordBreak::NORMAL;
   38    };
   39
   40
   41public:
   42    AText();
   43
   44    ~AText() override;
   45
   46    void clearContent() override;
   47
   48    void setItems(const AVector<std::variant<AString, _<AView>>>& init, const Flags& flags = {});
   49
   50    void setHtml(const AString& html, const Flags& flags = {});
   51
   52    void setString(const AString& string, const Flags& flags = {});
   53
   54    void setString(const AString& string) {
   55        setString(string, {});
   56    }
   57
   58    static _<AText> fromItems(std::initializer_list<std::variant<AString, _<AView>>> init, const Flags& flags = {}) {
   59        auto v = aui::ptr::manage(new AText());
   60        v->setItems(init, flags);
   61        return v;
   62    }
   63
   64    static _<AText> fromHtml(const AString& html, const Flags& flags = {}) {
   65        auto v = aui::ptr::manage(new AText());
   66        v->setHtml(html, flags);
   67        return v;
   68    }
   69
   70    static _<AText> fromString(const AString& string, const Flags& flags = {}) {
   71        auto v = aui::ptr::manage(new AText());
   72        v->setString(string, flags);
   73        return v;
   74    }
   75
   76protected:
   77    void fillStringCanvas(const _<IRenderer::IMultiStringCanvas>& canvas) override;
   78
   79private:
   80    class WordEntry final : public aui::detail::WordEntry {
   81    public:
   82        using aui::detail::WordEntry::WordEntry;
   83    };
   84
   85    class CharEntry final : public aui::detail::CharEntry {
   86    public:
   87        using aui::detail::CharEntry::CharEntry;
   88    };
   89
   90    ADeque<WordEntry> mWordEntries;
   91    ADeque<CharEntry> mCharEntries;
   92    ParsedFlags mParsedFlags;
   93    aui::detail::WhitespaceEntry mWhitespaceEntry = this;
   94    aui::detail::NextLineEntry mNextLineEntry = this;
   95
   96    void pushWord(Entries& entries,
   97                  AString word,
   98                  const ParsedFlags& flags);
   99
  100    static ParsedFlags parseFlags(const Flags& flags);
  101
  102    void processString(const AString& string, const ParsedFlags& parsedFlags,
  103                       Entries& entries);
  104};
Represents a Unicode character string.
Definition AString.h:38
A std::vector with AUI extensions.
Definition AVector.h:39
An std::weak_ptr with AUI extensions.
Definition SharedPtrTypes.h:179
Definition AText.h:36
static _< T > manage(T *raw)
Delegates memory management of the raw pointer T* raw to the shared pointer, which is returned.
Definition SharedPtrTypes.h:424