qTox  Version: nightly | Commit: bc751c8e1cac455f9690654fcfe0f560d2d7dfdd
filesform.h
Go to the documentation of this file.
1 /*
2  Copyright © 2014-2019 by The qTox Project Contributors
3 
4  This file is part of qTox, a Qt-based graphical interface for Tox.
5 
6  qTox is libre software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  qTox is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with qTox. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #pragma once
21 
22 #include "src/core/toxfile.h"
23 #include "src/core/corefile.h"
24 
25 #include <QLabel>
26 #include <QListWidgetItem>
27 #include <QHash>
28 #include <QString>
29 #include <QTabWidget>
30 #include <QVBoxLayout>
31 #include <QAbstractTableModel>
32 #include <QStyledItemDelegate>
33 #include <QTableView>
34 
35 class ContentLayout;
36 class QTableView;
37 
38 namespace FileTransferList
39 {
40 
41  enum class Column : int {
42  // NOTE: Order defines order in UI
43  fileName,
44  contact,
45  progress,
46  size,
47  speed,
48  status,
49  control,
50  invalid
51  };
52 
54  QString toQString(Column column);
55 
56  enum class EditorAction : int {
57  pause,
58  cancel,
59  invalid,
60  };
61 
63 
64  class Model : public QAbstractTableModel
65  {
66  Q_OBJECT
67  public:
68  Model(QObject* parent = nullptr);
69  ~Model() = default;
70 
71  void onFileUpdated(const ToxFile& file);
72 
73  QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
74  int rowCount(const QModelIndex& parent = QModelIndex()) const override;
75  int columnCount(const QModelIndex& parent = QModelIndex()) const override;
76  QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
77  bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
78 
79  signals:
80  void togglePause(ToxFile file);
81  void cancel(ToxFile file);
82 
83  private:
84  QHash<QByteArray /*file id*/, int /*row index*/> idToRow;
85  std::vector<ToxFile> files;
86  };
87 
88  class Delegate : public QStyledItemDelegate
89  {
90  public:
91  Delegate(QWidget* parent = nullptr);
92  void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
93 
94  bool editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index) override;
95  };
96 
97  class View : public QTableView
98  {
99  public:
100  View(QAbstractItemModel* model, QWidget* parent = nullptr);
101  ~View();
102 
103  };
104 } // namespace FileTransferList
105 
106 class FilesForm : public QObject
107 {
108  Q_OBJECT
109 
110 public:
111  FilesForm(CoreFile& coreFile);
112  ~FilesForm();
113 
114  bool isShown() const;
115  void show(ContentLayout* contentLayout);
116 
117 public slots:
118  void onFileUpdated(const ToxFile& file);
119 
120 private slots:
121  void onSentFileActivated(const QModelIndex& item);
122  void onReceivedFileActivated(const QModelIndex& item);
123 
124 private:
125  struct FileInfo
126  {
127  QListWidgetItem* item = nullptr;
129  };
130 
131  void retranslateUi();
132 
133  QWidget* head;
134  QLabel headLabel;
135  QVBoxLayout headLayout;
136  QTabWidget main;
137  QTableView *sent, *recvd;
139 };
FileTransferList::toFileTransferListColumn
Column toFileTransferListColumn(int in)
Definition: filesform.cpp:127
FileTransferList::Delegate::paint
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
Definition: filesform.cpp:328
FileTransferList::View
Definition: filesform.h:97
FileTransferList::EditorAction::pause
@ pause
FileTransferList::Column::speed
@ speed
FileTransferList::Model::rowCount
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition: filesform.cpp:235
FileTransferList::Model::togglePause
void togglePause(ToxFile file)
FilesForm
Definition: filesform.h:106
toxfile.h
FilesForm::retranslateUi
void retranslateUi()
Definition: filesform.cpp:521
FileTransferList::Model::columnCount
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Definition: filesform.cpp:240
FileTransferList::Model::data
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
Definition: filesform.cpp:245
FilesForm::main
QTabWidget main
Definition: filesform.h:136
FileTransferList::Delegate::Delegate
Delegate(QWidget *parent=nullptr)
Definition: filesform.cpp:324
FilesForm::~FilesForm
~FilesForm()
Definition: filesform.cpp:466
FileTransferList::toQString
QString toQString(Column column)
Definition: filesform.cpp:136
FileTransferList
Definition: filesform.cpp:125
HistMessageContentType::file
@ file
FilesForm::FilesForm
FilesForm(CoreFile &coreFile)
Definition: filesform.cpp:423
FilesForm::FileInfo
Definition: filesform.h:125
FilesForm::sentModel
FileTransferList::Model * sentModel
Definition: filesform.h:138
FileTransferList::Model::headerData
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition: filesform.cpp:173
FileTransferList::Delegate::editorEvent
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override
Definition: filesform.cpp:378
FileTransferList::Column::fileName
@ fileName
FileTransferList::Model
Definition: filesform.h:64
FilesForm::sent
QTableView * sent
Definition: filesform.h:137
FileTransferList::Column::size
@ size
FileTransferList::Model::cancel
void cancel(ToxFile file)
FileTransferList::View::View
View(QAbstractItemModel *model, QWidget *parent=nullptr)
Definition: filesform.cpp:401
FilesForm::onReceivedFileActivated
void onReceivedFileActivated(const QModelIndex &item)
Definition: filesform.cpp:515
FilesForm::onSentFileActivated
void onSentFileActivated(const QModelIndex &item)
Definition: filesform.cpp:509
FilesForm::FileInfo::file
ToxFile file
Definition: filesform.h:128
FilesForm::onFileUpdated
void onFileUpdated(const ToxFile &file)
Definition: filesform.cpp:492
FileTransferList::Delegate
Definition: filesform.h:88
FileTransferList::EditorAction
EditorAction
Definition: filesform.h:56
FileTransferList::View::~View
~View()
FileTransferList::EditorAction::invalid
@ invalid
FilesForm::FileInfo::item
QListWidgetItem * item
Definition: filesform.h:127
FileTransferList::Column
Column
Definition: filesform.h:41
FilesForm::show
void show(ContentLayout *contentLayout)
Definition: filesform.cpp:484
FileTransferList::Model::Model
Model(QObject *parent=nullptr)
Definition: filesform.cpp:169
FilesForm::head
QWidget * head
Definition: filesform.h:133
QHash
Definition: friendlist.h:27
FileTransferList::Column::invalid
@ invalid
FileTransferList::Column::control
@ control
FilesForm::headLabel
QLabel headLabel
Definition: filesform.h:134
ExifTransform::Orientation
Orientation
Definition: exiftransform.h:26
FileTransferList::Model::setData
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
Definition: filesform.cpp:294
FilesForm::headLayout
QVBoxLayout headLayout
Definition: filesform.h:135
FileTransferList::Model::files
std::vector< ToxFile > files
Definition: filesform.h:85
corefile.h
FileTransferList::Column::contact
@ contact
FileTransferList::Model::~Model
~Model()=default
FileTransferList::Column::progress
@ progress
FilesForm::recvd
QTableView * recvd
Definition: filesform.h:137
FilesForm::recvdModel
FileTransferList::Model * recvdModel
Definition: filesform.h:138
ContentLayout
Definition: contentlayout.h:25
FileTransferList::toEditorAction
EditorAction toEditorAction(int in)
Definition: filesform.cpp:160
FileTransferList::EditorAction::cancel
@ cancel
FilesForm::isShown
bool isShown() const
Definition: filesform.cpp:474
FileTransferList::Column::status
@ status
ToxFile
Definition: toxfile.h:32
FileTransferList::Model::idToRow
QHash< QByteArray, int > idToRow
Definition: filesform.h:84
CoreFile
Manages the file transfer service of toxcore.
Definition: corefile.h:46
FileTransferList::Model::onFileUpdated
void onFileUpdated(const ToxFile &file)
Definition: filesform.cpp:187