File indexing completed on 2024-05-05 05:13:03

0001 /*
0002     This file is part of Akregator.
0003 
0004     SPDX-FileCopyrightText: 2005 Frank Osterfeld <osterfeld@kde.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0007 */
0008 
0009 #pragma once
0010 
0011 #include <QHash>
0012 #include <QObject>
0013 #include <QPointer>
0014 
0015 #include "akregator_export.h"
0016 
0017 class QIcon;
0018 class QString;
0019 class KConfigGroup;
0020 
0021 namespace Akregator
0022 {
0023 class Frame;
0024 class OpenUrlRequest;
0025 
0026 class AKREGATOR_EXPORT FrameManager : public QObject
0027 {
0028     Q_OBJECT
0029 
0030 public:
0031     explicit FrameManager(QObject *parent = nullptr);
0032     ~FrameManager() override;
0033 
0034     Frame *currentFrame() const;
0035 
0036     Frame *findFrameById(int id) const;
0037 
0038     /** session management **/
0039     void saveProperties(KConfigGroup &config);
0040 
0041 public Q_SLOTS:
0042 
0043     void slotAddFrame(Akregator::Frame *frame);
0044     void slotRemoveFrame(int frameId);
0045 
0046     void slotChangeFrame(int frameId);
0047     void slotOpenUrlRequest(Akregator::OpenUrlRequest &request, bool useOpenInBackgroundSetting = true);
0048 
0049 Q_SIGNALS:
0050 
0051     void signalFrameAdded(Akregator::Frame *);
0052     void signalFrameRemoved(int id);
0053 
0054     void signalRequestNewFrame(int &id);
0055 
0056     void signalSelectFrame(int id);
0057     /**
0058      * emitted when the active frame is switched
0059      * @param deactivated the deactivated frame
0060      * @param activated the activated frame
0061      */
0062     void signalCurrentFrameChanged(Akregator::Frame *deactivated, Akregator::Frame *activated);
0063 
0064     void signalStarted();
0065     void signalCanceled(const QString &);
0066     void signalCompleted();
0067     void signalCaptionChanged(const QString &);
0068     void signalTitleChanged(const QString &);
0069     void signalIconChanged(const QIcon &);
0070     void signalLoadingProgress(int);
0071     void signalStatusText(const QString &);
0072 
0073 private:
0074     void openInExternalBrowser(const OpenUrlRequest &request);
0075 
0076 private Q_SLOTS:
0077     void openUrl(Akregator::OpenUrlRequest &request);
0078     void slotSetStarted(Akregator::Frame *frame);
0079     void slotSetCanceled(Akregator::Frame *frame, const QString &reason);
0080     void slotSetCompleted(Akregator::Frame *frame);
0081     void slotSetProgress(Akregator::Frame *frame, int progress);
0082     void slotSetCaption(Akregator::Frame *frame, const QString &caption);
0083     void slotSetTitle(Akregator::Frame *frame, const QString &title);
0084     void slotSetStatusText(Akregator::Frame *frame, const QString &statusText);
0085 
0086 private:
0087     QPointer<Frame> m_currentFrame;
0088     QHash<int, Frame *> m_frames;
0089 };
0090 } // namespace Akregator