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 }