1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2015 The Qt Company Ltd. 4 ** Contact: http://www.qt.io/licensing/ 5 ** 6 ** This file is part of the examples of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:BSD$ 9 ** You may use this file under the terms of the BSD license as follows: 10 ** 11 ** "Redistribution and use in source and binary forms, with or without 12 ** modification, are permitted provided that the following conditions are 13 ** met: 14 ** * Redistributions of source code must retain the above copyright 15 ** notice, this list of conditions and the following disclaimer. 16 ** * Redistributions in binary form must reproduce the above copyright 17 ** notice, this list of conditions and the following disclaimer in 18 ** the documentation and/or other materials provided with the 19 ** distribution. 20 ** * Neither the name of The Qt Company Ltd nor the names of its 21 ** contributors may be used to endorse or promote products derived 22 ** from this software without specific prior written permission. 23 ** 24 ** 25 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 26 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 27 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 28 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 29 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 30 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 31 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 32 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 33 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 34 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." 36 ** 37 ** $QT_END_LICENSE$ 38 ** 39 ****************************************************************************/ 40 41 #ifndef MAINWINDOW_H 42 #define MAINWINDOW_H 43 44 #include <QList> 45 #include <QStringList> 46 #include <QMainWindow> 47 48 #include "torrentclient.h" 49 50 QT_BEGIN_NAMESPACE 51 class QAction; 52 class QCloseEvent; 53 class QLabel; 54 class QProgressDialog; 55 class QSlider; 56 QT_END_NAMESPACE 57 class TorrentView; 58 59 class MainWindow : public QMainWindow 60 { 61 Q_OBJECT 62 63 public: 64 MainWindow(QWidget *parent = 0); 65 66 QSize sizeHint() const; 67 const TorrentClient *clientForRow(int row) const; 68 69 protected: 70 void closeEvent(QCloseEvent *event); 71 72 private slots: 73 void loadSettings(); 74 void saveSettings(); 75 76 bool addTorrent(); 77 void removeTorrent(); 78 void pauseTorrent(); 79 void moveTorrentUp(); 80 void moveTorrentDown(); 81 82 void torrentStopped(); 83 void torrentError(TorrentClient::Error error); 84 85 void updateState(TorrentClient::State state); 86 void updatePeerInfo(); 87 void updateProgress(int percent); 88 void updateDownloadRate(int bytesPerSecond); 89 void updateUploadRate(int bytesPerSecond); 90 91 void setUploadLimit(int bytes); 92 void setDownloadLimit(int bytes); 93 94 void about(); 95 void setActionsEnabled(); 96 void acceptFileDrop(const QString &fileName); 97 98 private: 99 int rowOfClient(TorrentClient *client) const; 100 bool addTorrent(const QString &fileName, const QString &destinationFolder, 101 const QByteArray &resumeState = QByteArray()); 102 103 TorrentView *torrentView; 104 QAction *pauseTorrentAction; 105 QAction *removeTorrentAction; 106 QAction *upActionTool; 107 QAction *downActionTool; 108 QSlider *uploadLimitSlider; 109 QSlider *downloadLimitSlider; 110 QLabel *uploadLimitLabel; 111 QLabel *downloadLimitLabel; 112 113 int uploadLimit; 114 int downloadLimit; 115 116 struct Job { 117 TorrentClient *client; 118 QString torrentFileName; 119 QString destinationDirectory; 120 }; 121 QList<Job> jobs; 122 int jobsStopped; 123 int jobsToStop; 124 125 QString lastDirectory; 126 QProgressDialog *quitDialog; 127 128 bool saveChanges; 129 }; 130 131 #endif 132