File indexing completed on 2024-06-23 05:13:48

0001 /*  conf/labelledwidget.h
0002 
0003     This file is part of Kleopatra, the KDE keymanager
0004     SPDX-FileCopyrightText: 2022 g10 Code GmbH
0005     SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 #pragma once
0010 
0011 #include <QLabel>
0012 #include <QPointer>
0013 
0014 namespace Kleo
0015 {
0016 
0017 namespace _detail
0018 {
0019 class LabelledWidgetBase
0020 {
0021 protected:
0022     LabelledWidgetBase() = default;
0023 
0024     QWidget *widget() const;
0025 
0026 public:
0027     QLabel *label() const;
0028 
0029     void setWidgets(QWidget *widget, QLabel *label);
0030 
0031     void setEnabled(bool enabled);
0032 
0033 private:
0034     QPointer<QLabel> mLabel;
0035     QPointer<QWidget> mWidget;
0036 };
0037 }
0038 
0039 /**
0040  * LabelledWidget is a small value-like class for simplifying the management
0041  * of a QWidget with associated QLabel.
0042  */
0043 template<class Widget>
0044 class LabelledWidget : public _detail::LabelledWidgetBase
0045 {
0046 public:
0047     LabelledWidget()
0048         : _detail::LabelledWidgetBase{}
0049     {
0050     }
0051 
0052     void createWidgets(QWidget *parent)
0053     {
0054         setWidgets(new Widget{parent}, new QLabel{parent});
0055     }
0056 
0057     Widget *widget() const
0058     {
0059         return dynamic_cast<Widget *>(_detail::LabelledWidgetBase::widget());
0060     }
0061 };
0062 
0063 }