File indexing completed on 2025-02-02 05:43:17

0001 /*
0002     This file is part of the Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2009 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #ifndef KASTEN_ABSTRACTLINEPOPUP_P_HPP
0010 #define KASTEN_ABSTRACTLINEPOPUP_P_HPP
0011 
0012 #include "abstractlinepopup.hpp"
0013 
0014 class QIcon;
0015 class QLabel;
0016 class QHBoxLayout;
0017 class QEventLoop;
0018 
0019 namespace Kasten {
0020 
0021 class AbstractLinePopupPrivate
0022 {
0023 public:
0024     explicit AbstractLinePopupPrivate(AbstractLinePopup* parent);
0025     AbstractLinePopupPrivate(const AbstractLinePopupPrivate&) = delete;
0026 
0027     ~AbstractLinePopupPrivate();
0028 
0029     AbstractLinePopupPrivate& operator=(const AbstractLinePopupPrivate&) = delete;
0030 
0031 public:
0032     void init();
0033 
0034     void setPosition(QPoint globalPosition);
0035     void setIcon(const QIcon& icon);
0036     void setWidget(QWidget* widget);
0037 
0038     void setResult(int result);
0039     int exec();
0040     void open();
0041     void accept();
0042     void reject();
0043 
0044     int result() const;
0045 
0046 public: // QWidget API
0047     void setVisible(bool visible);
0048 
0049 public:
0050     bool isOrContainsObject(QObject* object) const;
0051 
0052 private:
0053     void done(int result);
0054 
0055 private:
0056     AbstractLinePopup* const p;
0057 
0058     QHBoxLayout* mBaseLayout;
0059     QLabel* mIconLabel;
0060     QWidget* mWidget = nullptr;
0061 
0062     QEventLoop* mEventLoop = nullptr;
0063     int mResult = AbstractLinePopup::Rejected;
0064 };
0065 
0066 inline AbstractLinePopupPrivate::AbstractLinePopupPrivate(AbstractLinePopup* parent)
0067     : p(parent)
0068 {
0069 }
0070 
0071 inline AbstractLinePopupPrivate::~AbstractLinePopupPrivate() = default;
0072 
0073 inline int AbstractLinePopupPrivate::result() const { return mResult; }
0074 inline void AbstractLinePopupPrivate::setResult(int result) { mResult = result; }
0075 
0076 inline bool AbstractLinePopupPrivate::isOrContainsObject(QObject* object) const
0077 {
0078     bool result = false;
0079 
0080     while (object) {
0081         if (object == p) {
0082             result = true;
0083             break;
0084         }
0085         object = object->parent();
0086     }
0087 
0088     return result;
0089 }
0090 
0091 }
0092 
0093 #endif