┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/admin/bar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/admin/bar.cpp')
-rw-r--r--src/admin/bar.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/admin/bar.cpp b/src/admin/bar.cpp
new file mode 100644
index 000000000..2b65127f6
--- /dev/null
+++ b/src/admin/bar.cpp
@@ -0,0 +1,99 @@
+/*
+ This file is part of the KDE project
+ SPDX-FileCopyrightText: 2024 Felix Ernst <[email protected]>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include "bar.h"
+
+#include "workerintegration.h"
+
+#include <KColorScheme>
+#include <KContextualHelpButton>
+#include <KLocalizedString>
+
+#include <QEvent>
+#include <QGuiApplication>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QPushButton>
+#include <QStyle>
+#include <QToolButton>
+#include <QWidgetAction>
+
+using namespace Admin;
+
+Bar::Bar(QWidget *parent)
+ : AnimatedHeightWidget{parent}
+{
+ setAutoFillBackground(true);
+ updateColors();
+
+ QWidget *contenntsContainer = prepareContentsContainer();
+
+ m_fullLabelString = i18nc("@info label above the view explaining the state", "Acting as an Administrator – Be careful!");
+ m_shortLabelString = i18nc("@info label above the view explaining the state, keep short", "Acting as Admin");
+ m_label = new QLabel(contenntsContainer);
+ m_label->setMinimumWidth(0);
+ m_label->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard | Qt::LinksAccessibleByKeyboard); // for keyboard accessibility
+
+ m_warningButton = new KContextualHelpButton(warningMessage(), nullptr, contenntsContainer);
+ m_warningButton->setIcon(QIcon::fromTheme(QStringLiteral("emblem-warning")));
+
+ m_closeButton = new QPushButton(QIcon::fromTheme(QStringLiteral("window-close-symbolic")), "", contenntsContainer);
+ m_closeButton->setToolTip(i18nc("@action:button", "Stop Acting as an Administrator"));
+ m_closeButton->setFlat(true);
+ connect(m_closeButton, &QAbstractButton::clicked, this, &Bar::activated); // Make sure the view connected to this bar is active before exiting admin mode.
+ connect(m_closeButton, &QAbstractButton::clicked, this, &WorkerIntegration::exitAdminMode);
+
+ QHBoxLayout *layout = new QHBoxLayout(contenntsContainer);
+ auto contentsMargins = layout->contentsMargins();
+ m_preferredHeight = contentsMargins.top() + m_label->sizeHint().height() + contentsMargins.bottom();
+ m_warningButton->setFixedHeight(m_preferredHeight);
+ m_closeButton->setFixedHeight(m_preferredHeight);
+ layout->setContentsMargins(0, 0, 0, 0);
+
+ layout->addStretch();
+ layout->addWidget(m_label);
+ layout->addWidget(m_warningButton);
+ layout->addStretch();
+ layout->addWidget(m_closeButton);
+}
+
+bool Bar::event(QEvent *event)
+{
+ if (event->type() == QEvent::PaletteChange) {
+ updateColors();
+ }
+ return AnimatedHeightWidget::event(event);
+}
+
+void Bar::resizeEvent(QResizeEvent *resizeEvent)
+{
+ updateLabelString();
+ return QWidget::resizeEvent(resizeEvent);
+}
+
+void Bar::updateColors()
+{
+ QPalette palette = parentWidget()->palette();
+ KColorScheme colorScheme{QPalette::Normal, KColorScheme::ColorSet::Window};
+ colorScheme.adjustBackground(palette, KColorScheme::NegativeBackground, QPalette::Window, KColorScheme::ColorSet::Window);
+ colorScheme.adjustForeground(palette, KColorScheme::NegativeText, QPalette::WindowText, KColorScheme::ColorSet::Window);
+ setPalette(palette);
+}
+
+void Bar::updateLabelString()
+{
+ QFontMetrics fontMetrics = m_label->fontMetrics();
+ if (fontMetrics.horizontalAdvance(m_fullLabelString) + m_warningButton->sizeHint().width() + m_closeButton->sizeHint().width()
+ + style()->pixelMetric(QStyle::PM_LayoutLeftMargin) * 2 + style()->pixelMetric(QStyle::PM_LayoutRightMargin) * 2
+ < width()) {
+ m_label->setText(m_fullLabelString);
+ } else {
+ m_label->setText(m_shortLabelString);
+ }
+}
+
+#include "moc_bar.cpp"