File indexing completed on 2024-05-26 05:28:11

0001 /* Copyright (C) 2012 Thomas Lübking <thomas.luebking@gmail.com>
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 
0023 #pragma once
0024 
0025 #include <memory>
0026 #include <QList>
0027 #include <QListView>
0028 #include <QUrl>
0029 
0030 namespace Composer {
0031 class MessageComposer;
0032 }
0033 
0034 /** @short
0035     This class is used inside the ComposeWidget. @see GUI::ComposeWidget. It is positioned below
0036     the "Attach" button at the right of the ComposeWidget. When an item is dropped inside it an
0037     attachement is added to the @see Imap::Mailbox::MessageComposer model.
0038   */
0039 
0040 class QDropEvent;
0041 
0042 class ComposerAttachmentsList : public QListView {
0043     Q_OBJECT
0044 public:
0045     explicit ComposerAttachmentsList(QWidget *parent);
0046     void setComposer(std::shared_ptr<Composer::MessageComposer> composer);
0047 signals:
0048     void itemDroppedOut();
0049 protected:
0050     void startDrag(Qt::DropActions da);
0051     void dragEnterEvent(QDragEnterEvent *de);
0052     void dragLeaveEvent(QDragLeaveEvent *de);
0053     void dropEvent(QDropEvent* de);
0054 public slots:
0055     void slotRemoveAttachment();
0056     void slotToggledContentDispositionInline(bool checked);
0057     void slotRenameAttachment();
0058     void onAttachmentNumberChanged();
0059     void onCurrentChanged();
0060     void showContextMenu(const QPoint &pos);
0061 private:
0062     bool m_dragging, m_dragInside;
0063     std::shared_ptr<Composer::MessageComposer> m_composer;
0064     QAction *m_actionRemoveAttachment;
0065     QAction *m_actionSendInline;
0066     QAction *m_actionRename;
0067 };