summaryrefslogtreecommitdiff
path: root/tests/manual/widgets/infolabel/tst_manual_widgets_infolabel.cpp
blob: 288c1fb4a9758723950f04b2d38b6b073cfa3b04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

#include "../common/themeselector.h"

#include <QApplication>
#include <QFormLayout>
#include <QMessageBox>
#include <QSettings>

#include <utils/infolabel.h>

#include <coreplugin/manhattanstyle.h>

using namespace Utils;

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    auto widget = new QWidget;
    auto mainLayout = new QVBoxLayout(widget);
    mainLayout->addWidget(new ManualTest::ThemeSelector);
    auto variationsLayout = new QGridLayout;
    mainLayout->addLayout(variationsLayout);

    const static struct {
        const InfoLabel::InfoType type;
        const char *text;
        const char *tooltip;
        const char *tooltipSeparator;
    } labels[] = {
        {InfoLabel::Information, "Information", "This is an informative Tooltip for you", "\n\n"},
        {InfoLabel::Warning, "Warning", "This is a warning Tooltip for you", " - "},
        {InfoLabel::Error, "Error", "This is an erroneous Tooltip for you", " | "},
        {InfoLabel::Ok, "Ok", "This is an ok Tooltip for you", " :) "},
        {InfoLabel::NotOk, "NotOk", "This Tooltip is just not ok", ""},
        {InfoLabel::None, "None", "", "----"},
    };

    int gridRow = 0;
    for (auto filled : {false, true}) {
        for (auto label : labels) {
            for (auto enabled : {true, false}) {
                auto infoLabel = new Utils::InfoLabel(
                            label.text + QLatin1String(filled ? " (filled)" : "")
                            + QLatin1String(enabled ? "" : " (disabled)"), label.type);
                infoLabel->setEnabled(enabled);
                infoLabel->setFilled(filled);
                infoLabel->setAdditionalToolTip(label.tooltip);
                infoLabel->setAdditionalToolTipSeparator(label.tooltipSeparator);
                variationsLayout->addWidget(infoLabel, gridRow, enabled ? 0 : 1);
            }
            gridRow++;
        }
        variationsLayout->addItem(new QSpacerItem(0, 10), gridRow++, 0);
    }

    auto withLink = new Utils::InfoLabel("With <a href=\"link clicked!\">link</a>", InfoLabel::Error);
    withLink->setElideMode(Qt::ElideNone);
    QObject::connect(withLink, &QLabel::linkActivated, [widget](const QString& link){
        QMessageBox::information(widget, {}, link);
    });
    mainLayout->addWidget(withLink);

    auto stretching = new Utils::InfoLabel("Stretching and centering vertically", InfoLabel::Warning);
    stretching->setFilled(true);
    mainLayout->addWidget(stretching, 2);

    auto formLayout = new QFormLayout;
    auto multiLine = new Utils::InfoLabel("Multi line<br/>in<br/>QFormLayout");
    multiLine->setElideMode(Qt::ElideNone);
    multiLine->setFilled(true);
    formLayout->addRow("Label:", multiLine);
    mainLayout->addLayout(formLayout);

    const QString lorem =
            "Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt "
            "ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation "
            "ullamco laboris nisi ut aliquid ex ea commodi consequat.";

    auto elideRight = new Utils::InfoLabel("Qt::ElideRight: " + lorem, InfoLabel::Information);
    elideRight->setAdditionalToolTip("This control will elide the right side and show an Information Icon to its left. The Elided text will be separated from this text by two \\n");
    mainLayout->addWidget(elideRight);

    auto elideLeft = new Utils::InfoLabel("Qt::ElideLeft: " + lorem, InfoLabel::Warning);
    elideLeft->setElideMode(Qt::ElideLeft);
    elideLeft->setAdditionalToolTip("This control will elide the left side and show a Warning Icon to its left. The Elided text will be separated from this text by \" :) \"");
    elideLeft->setAdditionalToolTipSeparator(" :) ");
    mainLayout->addWidget(elideLeft);

    auto elideMid= new Utils::InfoLabel("Qt::ElideMiddle: " + lorem, InfoLabel::Ok);
    elideMid->setElideMode(Qt::ElideMiddle);
    elideMid->setAdditionalToolTip("This control will elide the middle and show an Ok Icon to its left. The Elided text will be separated from this text by \" -> \"");
    elideMid->setAdditionalToolTipSeparator(" -> ");
    mainLayout->addWidget(elideMid);


    auto elideNone = new Utils::InfoLabel("Qt::ElideNone: " + lorem, InfoLabel::Information);
    elideNone->setElideMode(Qt::ElideNone);
    elideNone->setWordWrap(true);
    elideNone->setAdditionalToolTip("This control is never elided due to setElideMode(Qt::ElideNone) being used");
    mainLayout->addWidget(elideNone);

    widget->resize(350, 500);
    widget->show();

    return app.exec();
}