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