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"