root/src/apps/haikudepot/ui_generic/MarkupTextView.cpp
/*
 * Copyright 2013-2014, Stephan Aßmus <superstippi@gmx.de>.
 * Copyright 2024 Haiku, Inc. All rights reserved.
 * All rights reserved. Distributed under the terms of the MIT License.
 */


#include "MarkupTextView.h"


MarkupTextView::MarkupTextView(const char* name)
        :
        TextDocumentView(name)
{
        SetEditingEnabled(false);
        CharacterStyle regularStyle;

        float fontSize = regularStyle.Font().Size();

        ParagraphStyle paragraphStyle;
        paragraphStyle.SetJustify(true);
        paragraphStyle.SetSpacingTop(ceilf(fontSize * 0.3f));
        paragraphStyle.SetLineSpacing(ceilf(fontSize * 0.2f));

        fMarkupParser.SetStyles(regularStyle, paragraphStyle);
}


void
MarkupTextView::SetText(const BString& markupText)
{
        TextDocumentRef document(new(std::nothrow) TextDocument(), true);

        CharacterStyle regularStyle(fMarkupParser.NormalCharacterStyle());
        regularStyle.SetForegroundColor(HighUIColor());

        fMarkupParser.SetStyles(regularStyle, fMarkupParser.NormalParagraphStyle());
        fMarkupParser.AppendMarkup(document, markupText);

        SetTextDocument(document);
}


void
MarkupTextView::SetText(const BString heading, const BString& markupText)
{
        TextDocumentRef document(new(std::nothrow) TextDocument(), true);

        Paragraph paragraph(fMarkupParser.HeadingParagraphStyle());
        paragraph.Append(TextSpan(heading,
                fMarkupParser.HeadingCharacterStyle()));
        document->Append(paragraph);

        fMarkupParser.AppendMarkup(document, markupText);

        SetTextDocument(document);
}


void
MarkupTextView::SetDisabledText(const BString& text)
{
        TextDocumentRef document(new(std::nothrow) TextDocument(), true);

        ParagraphStyle paragraphStyle;
        paragraphStyle.SetAlignment(ALIGN_CENTER);

        CharacterStyle disabledStyle(fMarkupParser.NormalCharacterStyle());
        rgb_color disabled = tint_color(HighColor(), HighColor().IsLight() ? B_DARKEN_1_TINT : 0.853);
        disabledStyle.SetForegroundColor(disabled);

        Paragraph paragraph(paragraphStyle);
        paragraph.Append(TextSpan(text, disabledStyle));
        document->Append(paragraph);

        SetTextDocument(document);
}