File indexing completed on 2024-04-28 15:40:26

0001 // SPDX-FileCopyrightText: 2012-2020 The KPhotoAlbum Development Team
0002 // SPDX-FileCopyrightText: 2022 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 
0006 #include "ToolTip.h"
0007 
0008 #include "DescriptionUtil.h"
0009 
0010 #include <DB/ImageDB.h>
0011 #include <ImageManager/AsyncLoader.h>
0012 #include <ImageManager/ImageRequest.h>
0013 #include <kpabase/SettingsData.h>
0014 
0015 #include <QEvent>
0016 #include <QTemporaryFile>
0017 
0018 namespace Utilities
0019 {
0020 
0021 ToolTip::ToolTip(QWidget *parent, Qt::WindowFlags f)
0022     : QLabel(parent, f)
0023     , m_tmpFileForThumbnailView(nullptr)
0024 {
0025     setAlignment(Qt::AlignLeft | Qt::AlignTop);
0026     setLineWidth(1);
0027     setMargin(1);
0028 
0029     setWindowOpacity(0.9);
0030     setAutoFillBackground(true);
0031     updatePalette();
0032 }
0033 
0034 void ToolTip::updatePalette()
0035 {
0036     QPalette p = palette();
0037     QColor bgColor = palette().shadow().color();
0038     p.setColor(QPalette::Window, bgColor);
0039     p.setColor(QPalette::WindowText, palette().brightText().color());
0040     setPalette(p);
0041     // re-enable palette-propagation:
0042     setAttribute(Qt::WA_SetPalette);
0043 }
0044 
0045 void ToolTip::requestImage(const DB::FileName &fileName)
0046 {
0047     int size = Settings::SettingsData::instance()->previewSize();
0048     DB::ImageInfoPtr info = DB::ImageDB::instance()->info(fileName);
0049     if (size != 0) {
0050         ImageManager::ImageRequest *request = new ImageManager::ImageRequest(fileName, QSize(size, size), info->angle(), this);
0051         request->setPriority(ImageManager::Viewer);
0052         ImageManager::AsyncLoader::instance()->load(request);
0053     } else
0054         renderToolTip();
0055 }
0056 
0057 void ToolTip::pixmapLoaded(ImageManager::ImageRequest *request, const QImage &image)
0058 {
0059     const DB::FileName fileName = request->databaseFileName();
0060 
0061     delete m_tmpFileForThumbnailView;
0062     m_tmpFileForThumbnailView = new QTemporaryFile(this);
0063     m_tmpFileForThumbnailView->open();
0064 
0065     image.save(m_tmpFileForThumbnailView, "PNG");
0066     if (fileName == m_currentFileName) {
0067         setMinimumWidth(3 * image.width());
0068         setMinimumHeight(image.height());
0069         renderToolTip();
0070     }
0071 }
0072 
0073 void ToolTip::requestToolTip(const DB::FileName &fileName)
0074 {
0075     if (fileName.isNull() || fileName == m_currentFileName)
0076         return;
0077     m_currentFileName = fileName;
0078     requestImage(fileName);
0079 }
0080 
0081 bool ToolTip::event(QEvent *e)
0082 {
0083     if (e->type() == QEvent::PaletteChange)
0084         updatePalette();
0085     return QLabel::event(e);
0086 }
0087 
0088 void ToolTip::renderToolTip()
0089 {
0090     const int size = Settings::SettingsData::instance()->previewSize();
0091     if (size != 0) {
0092         setText(QString::fromLatin1("<table cols='2' cellpadding='10'><tr><td><img src='%1' width=></td><td>%2</td></tr>")
0093                     .arg(m_tmpFileForThumbnailView->fileName(), Utilities::createInfoText(DB::ImageDB::instance()->info(m_currentFileName), nullptr)));
0094     } else
0095         setText(QString::fromLatin1("<p>%1</p>").arg(Utilities::createInfoText(DB::ImageDB::instance()->info(m_currentFileName), nullptr)));
0096 
0097     setWordWrap(true);
0098 
0099     resize(sizeHint());
0100     //    m_view->setFocus();
0101     show();
0102     placeWindow();
0103 }
0104 
0105 } // namespace Utilities
0106 // vi:expandtab:tabstop=4 shiftwidth=4:
0107 
0108 #include "moc_ToolTip.cpp"