1 /*
2    SPDX-FileCopyrightText: 2010 Marco Mentasti <marcomentasti@gmail.com>
3 
4    SPDX-License-Identifier: LGPL-2.0-only
5 */
6 
7 #include "textoutputwidget.h"
8 
9 #include <KLocalizedString>
10 #include <KToolBar>
11 #include <QAction>
12 
13 #include <QDateTime>
14 #include <QFontDatabase>
15 #include <QLayout>
16 #include <QStyle>
17 #include <QTextEdit>
18 
TextOutputWidget(QWidget * parent)19 TextOutputWidget::TextOutputWidget(QWidget *parent)
20     : QWidget(parent)
21 {
22     m_succesTextColor = QColor::fromRgb(3, 191, 3);
23     m_succesBackgroundColor = QColor::fromRgb(231, 247, 231);
24 
25     m_errorTextColor = QColor::fromRgb(191, 3, 3);
26     m_errorBackgroundColor = QColor::fromRgb(247, 231, 231);
27 
28     m_layout = new QHBoxLayout(this);
29 
30     m_output = new QTextEdit();
31     m_output->setReadOnly(true);
32 
33     QFont fixedFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
34 
35     m_output->setCurrentFont(fixedFont);
36 
37     KToolBar *toolbar = new KToolBar(this);
38     toolbar->setOrientation(Qt::Vertical);
39     toolbar->setToolButtonStyle(Qt::ToolButtonIconOnly);
40 
41     // ensure reasonable icons sizes, like e.g. the quick-open and co. icons
42     // the normal toolbar sizes are TOO large, e.g. for scaled stuff even more!
43     const int iconSize = style()->pixelMetric(QStyle::PM_ButtonIconSize, nullptr, this);
44     toolbar->setIconSize(QSize(iconSize, iconSize));
45 
46     /// TODO: disable actions if no results are displayed
47 
48     QAction *action = new QAction(QIcon::fromTheme(QStringLiteral("edit-clear")), i18nc("@action:intoolbar", "Clear"), this);
49     toolbar->addAction(action);
50     connect(action, &QAction::triggered, m_output, &QTextEdit::clear);
51     m_layout->addWidget(toolbar);
52     m_layout->addWidget(m_output, 1);
53     m_layout->setContentsMargins(0, 0, 0, 0);
54 
55     setLayout(m_layout);
56 }
57 
~TextOutputWidget()58 TextOutputWidget::~TextOutputWidget()
59 {
60 }
61 
showErrorMessage(const QString & message)62 void TextOutputWidget::showErrorMessage(const QString &message)
63 {
64     QColor previousBackgroundColor = m_output->textBackgroundColor();
65     QColor previousColor = m_output->textColor();
66 
67     m_output->setTextBackgroundColor(m_errorBackgroundColor);
68     m_output->setTextColor(m_errorTextColor);
69 
70     writeMessage(message);
71 
72     m_output->setTextBackgroundColor(previousBackgroundColor);
73     m_output->setTextColor(previousColor);
74 }
75 
showSuccessMessage(const QString & message)76 void TextOutputWidget::showSuccessMessage(const QString &message)
77 {
78     QColor previousBackgroundColor = m_output->textBackgroundColor();
79     QColor previousColor = m_output->textColor();
80 
81     m_output->setTextBackgroundColor(m_succesBackgroundColor);
82     m_output->setTextColor(m_succesTextColor);
83 
84     writeMessage(message);
85 
86     m_output->setTextBackgroundColor(previousBackgroundColor);
87     m_output->setTextColor(previousColor);
88 }
89 
writeMessage(const QString & msg)90 void TextOutputWidget::writeMessage(const QString &msg)
91 {
92     m_output->append(QStringLiteral("%1: %2\n").arg(QDateTime::currentDateTime().toString(Qt::SystemLocaleDate), msg));
93 
94     raise();
95 }
96