File indexing completed on 2025-04-27 03:58:28

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2008-12-10
0007  * Description : tool tip widget for iconview, thumbbar, and folderview items
0008  *
0009  * SPDX-FileCopyrightText: 2008-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 #ifndef DIGIKAM_DITEM_TOOL_TIP_H
0016 #define DIGIKAM_DITEM_TOOL_TIP_H
0017 
0018 // Qt includes
0019 
0020 #include <QFont>
0021 #include <QLabel>
0022 #include <QResizeEvent>
0023 #include <QString>
0024 #include <QImage>
0025 #include <QEvent>
0026 #include <QFontDatabase>
0027 
0028 // Local includes
0029 
0030 #include "digikam_export.h"
0031 
0032 namespace Digikam
0033 {
0034 
0035 class DIGIKAM_EXPORT DToolTipStyleSheet
0036 {
0037 
0038 public:
0039 
0040     explicit DToolTipStyleSheet(const QFont& font = QFontDatabase::systemFont(QFontDatabase::GeneralFont));
0041 
0042     QString breakString(const QString& input)                        const;
0043     QString elidedText(const QString& input, Qt::TextElideMode mode) const;
0044     QString imageAsBase64(const QImage& img)                         const;
0045 
0046 public:
0047 
0048     const int maxStringLength;
0049 
0050     QString   unavailable;
0051     QString   tipHeader;
0052     QString   tipFooter;
0053     QString   headBeg;
0054     QString   headEnd;
0055     QString   cellBeg;
0056     QString   cellMid;
0057     QString   cellEnd;
0058     QString   cellSpecBeg;
0059     QString   cellSpecMid;
0060     QString   cellSpecEnd;
0061 };
0062 
0063 // --------------------------------------------------------------------------------------
0064 
0065 class DIGIKAM_EXPORT DItemToolTip : public QLabel
0066 {
0067     Q_OBJECT
0068 
0069 public:
0070 
0071     explicit DItemToolTip(QWidget* const parent = nullptr);
0072     ~DItemToolTip() override;
0073 
0074 protected:
0075 
0076     bool    event(QEvent*)                    override;
0077     void    resizeEvent(QResizeEvent*)        override;
0078     void    paintEvent(QPaintEvent*)          override;
0079     void    updateToolTip();
0080     bool    toolTipIsEmpty()            const;
0081     void    reposition();
0082     void    renderArrows();
0083 
0084 protected:
0085 
0086     virtual QRect   repositionRect() = 0;
0087     virtual QString tipContents()    = 0;
0088 
0089 private:
0090 
0091     class Private;
0092     Private* const d;
0093 };
0094 
0095 } // namespace Digikam
0096 
0097 #endif // DIGIKAM_DITEM_TOOL_TIP_H