File indexing completed on 2024-11-24 04:53:01

0001 /* Copyright (C) 2006 - 2014 Jan Kundrát <jkt@flaska.net>
0002 
0003    This file is part of the Trojita Qt IMAP e-mail client,
0004    http://trojita.flaska.net/
0005 
0006    This program is free software; you can redistribute it and/or
0007    modify it under the terms of the GNU General Public License as
0008    published by the Free Software Foundation; either version 2 of
0009    the License or (at your option) version 3 or any later version
0010    accepted by the membership of KDE e.V. (or its successor approved
0011    by the membership of KDE e.V.), which shall act as a proxy
0012    defined in Section 14 of version 3 of the license.
0013 
0014    This program is distributed in the hope that it will be useful,
0015    but WITHOUT ANY WARRANTY; without even the implied warranty of
0016    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0017    GNU General Public License for more details.
0018 
0019    You should have received a copy of the GNU General Public License
0020    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0021 */
0022 #ifndef LOADABLEPARTWIDGET_H
0023 #define LOADABLEPARTWIDGET_H
0024 
0025 #include <QPersistentModelIndex>
0026 #include <QStackedWidget>
0027 
0028 #include "Gui/AbstractPartWidget.h"
0029 #include "Gui/PartWalker.h"
0030 
0031 class QPushButton;
0032 
0033 namespace Gui
0034 {
0035 
0036 class MessageView;
0037 
0038 /** @short Widget which implements delayed loading of message parts
0039 
0040   This class supports two modes of loading, either a "click-through" one for loading message parts
0041   on demand after the user clicks a button, or an "automated" mode where the data are loaded after
0042   this widget becomes visible.
0043 
0044 */
0045 class LoadablePartWidget : public QStackedWidget, public AbstractPartWidget
0046 {
0047     Q_OBJECT
0048 public:
0049     LoadablePartWidget(QWidget *parent, Imap::Network::MsgPartNetAccessManager *manager, const QModelIndex &part,
0050                        PartWidgetFactory *factory, int recursionDepth,
0051                        const UiUtils::PartLoadingOptions loadingMode);
0052     QString quoteMe() const override;
0053     bool searchDialogRequested() override;
0054     void reloadContents() override;
0055     void zoomIn() override;
0056     void zoomOut() override;
0057     void zoomOriginal() override;
0058 protected:
0059     void showEvent(QShowEvent *event) override;
0060 private slots:
0061     void loadClicked();
0062 private:
0063     Imap::Network::MsgPartNetAccessManager *manager;
0064     QPersistentModelIndex partIndex;
0065     PartWidgetFactory *m_factory;
0066     int m_recursionDepth;
0067     UiUtils::PartLoadingOptions m_loadingMode;
0068     QWidget *realPart;
0069     QPushButton *loadButton;
0070     bool m_loadOnShow;
0071 
0072     LoadablePartWidget(const LoadablePartWidget &); // don't implement
0073     LoadablePartWidget &operator=(const LoadablePartWidget &); // don't implement
0074 };
0075 
0076 }
0077 
0078 #endif // LOADABLEPARTWIDGET_H