// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include "torrentclient.h" QT_BEGIN_NAMESPACE class QAction; class QCloseEvent; class QLabel; class QProgressDialog; class QSlider; QT_END_NAMESPACE class TorrentView; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); QSize sizeHint() const override; const TorrentClient *clientForRow(int row) const; protected: void closeEvent(QCloseEvent *event) override; private slots: void loadSettings(); void saveSettings(); bool addTorrent(); void removeTorrent(); void pauseTorrent(); void moveTorrentUp(); void moveTorrentDown(); void torrentStopped(); void torrentError(TorrentClient::Error error); void updateState(TorrentClient::State state); void updatePeerInfo(); void updateProgress(int percent); void updateDownloadRate(int bytesPerSecond); void updateUploadRate(int bytesPerSecond); void setUploadLimit(int bytes); void setDownloadLimit(int bytes); void about(); void setActionsEnabled(); void acceptFileDrop(const QString &fileName); private: int rowOfClient(TorrentClient *client) const; bool addTorrent(const QString &fileName, const QString &destinationFolder, const QByteArray &resumeState = QByteArray()); TorrentView *torrentView; QAction *pauseTorrentAction; QAction *removeTorrentAction; QAction *upActionTool; QAction *downActionTool; QSlider *uploadLimitSlider; QSlider *downloadLimitSlider; QLabel *uploadLimitLabel; QLabel *downloadLimitLabel; int uploadLimit; int downloadLimit; struct Job { TorrentClient *client; QString torrentFileName; QString destinationDirectory; }; QList jobs; int jobsStopped; int jobsToStop; QString lastDirectory; QProgressDialog *quitDialog; bool saveChanges; }; #endif