File indexing completed on 2024-05-12 05:12:55

0001 /*
0002     This file is part of Akregator.
0003 
0004     SPDX-FileCopyrightText: 2004 Sashmit Bhaduri <smt@vfemail.net>
0005     SPDX-FileCopyrightText: 2005 Frank Osterfeld <osterfeld@kde.org>
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0008 */
0009 
0010 #pragma once
0011 
0012 #include <QIcon>
0013 #include <QWidget>
0014 
0015 #include <KConfigGroup>
0016 
0017 #include "akregator_export.h"
0018 
0019 class QUrl;
0020 
0021 namespace KPIM
0022 {
0023 class ProgressItem;
0024 }
0025 
0026 namespace Akregator
0027 {
0028 class OpenUrlRequest;
0029 
0030 class AKREGATOR_EXPORT Frame : public QWidget
0031 {
0032     Q_OBJECT
0033 
0034 public:
0035     explicit Frame(QWidget *parent = nullptr);
0036     ~Frame() override;
0037 
0038     enum State { Idle, Started, Completed, Canceled };
0039 
0040     virtual qreal zoomFactor() const = 0;
0041     /**
0042      * Returns whether the frame can be removed from
0043      * Akregator (via detach or close tab etc.)  Usually
0044      * all tabs but the main tab can be removed.
0045      * Default is @c true
0046      */
0047     [[nodiscard]] bool isRemovable() const;
0048 
0049     /**
0050      * returns the URL of the embedded part
0051      */
0052     virtual QUrl url() const = 0;
0053 
0054     [[nodiscard]] QString title() const;
0055     [[nodiscard]] QString caption() const;
0056     [[nodiscard]] State state() const;
0057     [[nodiscard]] int progress() const;
0058     [[nodiscard]] QString statusText() const;
0059     [[nodiscard]] QIcon icon() const;
0060     void setIcon(const QIcon &icon);
0061 
0062     [[nodiscard]] int id() const;
0063     /**
0064      * returns whether the embedded part is loading a website. If so, it can be stopped using slotStop() */
0065     virtual bool isLoading() const;
0066 
0067     virtual bool openUrl(const OpenUrlRequest &request) = 0;
0068 
0069     /**
0070      * Load a frame from a config file for session management.
0071      */
0072     virtual void loadConfig(const KConfigGroup & /*config*/, const QString & /*prefix*/)
0073     {
0074     }
0075 
0076     /**
0077      * Save a frame to a config file for session management.
0078      */
0079     virtual bool saveConfig(KConfigGroup & /*config*/, const QString & /*prefix*/)
0080     {
0081         return false;
0082     }
0083 
0084 public Q_SLOTS:
0085 
0086     /** reloads the current content, if possible. See also isReloadable(). */
0087     virtual void slotReload()
0088     {
0089     }
0090 
0091     virtual void slotStop();
0092 
0093     void slotSetStarted();
0094     void slotSetCanceled(const QString &);
0095     void slotSetCompleted();
0096     void slotSetState(State);
0097     void slotSetProgress(int);
0098     void slotSetCaption(const QString &);
0099     void slotSetTitle(const QString &);
0100     void slotSetStatusText(const QString &);
0101 
0102 Q_SIGNALS:
0103     void signalCaptionChanged(Akregator::Frame *, const QString &);
0104     void signalTitleChanged(Akregator::Frame *, const QString &);
0105     void signalStarted(Akregator::Frame *);
0106     void signalCanceled(Akregator::Frame *, const QString &);
0107     void signalCompleted(Akregator::Frame *);
0108     void signalLoadingProgress(Akregator::Frame *, int);
0109     void signalStatusText(Akregator::Frame *, const QString &);
0110 
0111     void signalOpenUrlRequest(Akregator::OpenUrlRequest &request);
0112     void showStatusBarMessage(const QString &msg);
0113 
0114 protected:
0115     void setRemovable(bool removable);
0116 
0117 protected:
0118     QIcon m_icon;
0119     QString m_title;
0120     QString m_caption;
0121     State m_state = Idle;
0122     int m_progress = -1;
0123     QString m_statusText;
0124     QString m_progressId;
0125     KPIM::ProgressItem *m_progressItem = nullptr;
0126     bool m_isRemovable = true;
0127     bool m_loading = false;
0128     int m_id;
0129     static int m_idCounter;
0130 };
0131 } // namespace Akregator