File indexing completed on 2024-04-28 08:50:38
0001 /* This file is part of the KDE project 0002 SPDX-FileCopyrightText: 2007 David Faure <faure@kde.org> 0003 SPDX-FileCopyrightText: 2007 Eduardo Robles Elvira <edulix@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "konqcloseditem.h" 0009 #include "konqclosedwindowsmanager.h" 0010 #include <QFont> 0011 #include <QFontMetrics> 0012 #include <QPainter> 0013 #include <kconfig.h> 0014 #include "konqdebug.h" 0015 #include <QIcon> 0016 #include <kiconeffect.h> 0017 #include <kiconloader.h> 0018 #include <konqpixmapprovider.h> 0019 #include <kcolorscheme.h> 0020 0021 #include <QFontDatabase> 0022 0023 class KonqIcon 0024 { 0025 public: 0026 KonqIcon() 0027 : image(QIcon::fromTheme(QStringLiteral("konqueror")).pixmap(16).toImage()) 0028 { 0029 KIconEffect::deSaturate(image, 0.60f); 0030 } 0031 0032 QImage image; 0033 }; 0034 0035 Q_GLOBAL_STATIC(KonqIcon, s_lightIconImage) 0036 0037 KonqClosedItem::KonqClosedItem(const QString &title, KConfig *config, const QString &group, quint64 serialNumber) 0038 : m_title(title), m_configGroup(config, group), m_serialNumber(serialNumber) 0039 { 0040 } 0041 0042 KonqClosedItem::~KonqClosedItem() 0043 { 0044 //qCDebug(KONQUEROR_LOG) << "deleting group" << m_configGroup.name(); 0045 m_configGroup.deleteGroup(); 0046 } 0047 0048 KonqClosedTabItem::KonqClosedTabItem(const QString &url, KConfig *config, const QString &title, int pos, quint64 serialNumber) 0049 : KonqClosedItem(title, config, "Closed_Tab" + QString::number(reinterpret_cast<qint64>(this)), serialNumber), m_url(url), m_pos(pos) 0050 { 0051 qCDebug(KONQUEROR_LOG) << m_configGroup.name(); 0052 } 0053 0054 KonqClosedTabItem::~KonqClosedTabItem() 0055 { 0056 m_configGroup.deleteGroup(); 0057 qCDebug(KONQUEROR_LOG) << "deleted group" << m_configGroup.name(); 0058 } 0059 0060 QPixmap KonqClosedTabItem::icon() const 0061 { 0062 return KonqPixmapProvider::self()->pixmapFor(m_url, KIconLoader::SizeSmall); 0063 } 0064 0065 KonqClosedWindowItem::KonqClosedWindowItem(const QString &title, KConfig *config, quint64 serialNumber, int numTabs) 0066 : KonqClosedItem(title, config, "Closed_Window" + QString::number(reinterpret_cast<qint64>(this)), serialNumber), m_numTabs(numTabs) 0067 { 0068 qCDebug(KONQUEROR_LOG) << m_configGroup.name(); 0069 } 0070 0071 KonqClosedWindowItem::~KonqClosedWindowItem() 0072 { 0073 } 0074 0075 QPixmap KonqClosedWindowItem::icon() const 0076 { 0077 QImage overlayImg = s_lightIconImage->image.copy(); 0078 int oldWidth = overlayImg.width(); 0079 QString countStr = QString::number(m_numTabs); 0080 0081 QFont f = QFontDatabase::systemFont(QFontDatabase::GeneralFont); 0082 f.setBold(true); 0083 0084 float pointSize = f.pointSizeF(); 0085 QFontMetrics fm(f); 0086 int w = fm.boundingRect(countStr).width(); 0087 if (w > (oldWidth)) { 0088 pointSize *= float(oldWidth) / float(w); 0089 f.setPointSizeF(pointSize); 0090 } 0091 0092 // overlay 0093 QPainter p(&overlayImg); 0094 p.setFont(f); 0095 KColorScheme scheme(QPalette::Active, KColorScheme::Window); 0096 p.setPen(scheme.foreground(KColorScheme::LinkText).color()); 0097 p.drawText(overlayImg.rect(), Qt::AlignCenter, countStr); 0098 0099 return QPixmap::fromImage(overlayImg); 0100 } 0101 0102 int KonqClosedWindowItem::numTabs() const 0103 { 0104 return m_numTabs; 0105 } 0106 0107 KonqClosedRemoteWindowItem::KonqClosedRemoteWindowItem(const QString &title, KConfig *config, 0108 const QString &groupName, const QString &configFileName, quint64 serialNumber, 0109 int numTabs, const QString &dbusService) 0110 : KonqClosedWindowItem(title, config, serialNumber, numTabs), 0111 m_remoteGroupName(groupName), m_remoteConfigFileName(configFileName), 0112 m_dbusService(dbusService), m_remoteConfigGroup(nullptr), m_remoteConfig(nullptr) 0113 { 0114 qCDebug(KONQUEROR_LOG); 0115 } 0116 0117 KonqClosedRemoteWindowItem::~KonqClosedRemoteWindowItem() 0118 { 0119 delete m_remoteConfigGroup; 0120 delete m_remoteConfig; 0121 } 0122 0123 void KonqClosedRemoteWindowItem::readConfig() const 0124 { 0125 // only do this once 0126 if (m_remoteConfig || m_remoteConfigGroup) { 0127 return; 0128 } 0129 0130 m_remoteConfig = new KConfig(m_remoteConfigFileName, KConfig::SimpleConfig); 0131 m_remoteConfigGroup = new KConfigGroup(m_remoteConfig, m_remoteGroupName); 0132 qCDebug(KONQUEROR_LOG); 0133 } 0134 0135 const KConfigGroup &KonqClosedRemoteWindowItem::configGroup() const 0136 { 0137 readConfig(); 0138 return *m_remoteConfigGroup; 0139 } 0140 0141 KConfigGroup &KonqClosedRemoteWindowItem::configGroup() 0142 { 0143 readConfig(); 0144 return *m_remoteConfigGroup; 0145 } 0146 0147 bool KonqClosedRemoteWindowItem::equalsTo(const QString &groupName, 0148 const QString &configFileName) const 0149 { 0150 return (m_remoteGroupName == groupName && 0151 m_remoteConfigFileName == configFileName); 0152 }