1 /*************************************************************************** 2 * * 3 * This program is free software; you can redistribute it and/or modify * 4 * it under the terms of the GNU General Public License as published by * 5 * the Free Software Foundation; either version 3 of the License, or * 6 * (at your option) any later version. * 7 * * 8 ***************************************************************************/ 9 10 #pragma once 11 12 #include <QWidget> 13 #include <QAction> 14 #include <QMenu> 15 #include <QCloseEvent> 16 #include <QResizeEvent> 17 #include <QHideEvent> 18 #include <QHeaderView> 19 20 #include "ui_UITransferView.h" 21 #include "TransferViewModel.h" 22 23 #include "dcpp/stdinc.h" 24 #include "dcpp/Singleton.h" 25 #include "dcpp/ConnectionManager.h" 26 #include "dcpp/DownloadManager.h" 27 #include "dcpp/LogManager.h" 28 #include "dcpp/QueueManager.h" 29 #include "dcpp/UploadManager.h" 30 31 32 class TransferViewModel; 33 34 class TransferView : public QWidget, 35 private Ui::UITransferView, 36 public dcpp::Singleton<TransferView>, 37 public dcpp::ConnectionManagerListener, 38 public dcpp::DownloadManagerListener, 39 public dcpp::QueueManagerListener, 40 public dcpp::UploadManagerListener 41 { 42 Q_OBJECT 43 44 friend class dcpp::Singleton<TransferView>; 45 46 typedef QMap<QString, QVariant> VarMap; 47 48 class Menu{ 49 50 public: 51 enum Action { 52 Browse=0, 53 SearchAlternates, 54 MatchQueue, 55 SendPM, 56 AddToFav, 57 GrantExtraSlot, 58 Copy, 59 RemoveFromQueue, 60 Force, 61 Close, 62 None 63 }; 64 65 Menu(); 66 virtual ~Menu(); 67 68 Action exec(); copyColumn()69 int copyColumn() const {return selectedColumn; } 70 71 private: 72 QMenu *menu; 73 QMenu *copy_column; 74 QMap <QAction*, Action> actions; 75 int selectedColumn; 76 }; 77 78 public: 79 QSize sizeHint() const; 80 81 Q_SIGNALS: 82 /** DownloadManger signals */ 83 void coreDMRequesting(VarMap); 84 void coreDMStarting(VarMap); 85 void coreDMTick(VarMap); 86 void coreDMComplete(VarMap); 87 void coreDMFailed(VarMap); 88 89 /** ConnectionManager signals */ 90 void coreCMAdded(VarMap); 91 void coreCMConnected(VarMap); 92 void coreCMRemoved(VarMap); 93 void coreCMFailed(VarMap); 94 void coreCMStatusChanged(VarMap); 95 96 /** QueueManager signals */ 97 void coreQMFinished(VarMap); 98 void coreQMRemoved(VarMap); 99 100 /** UploadManager signals */ 101 void coreUMStarting(VarMap); 102 void coreUMTick(VarMap); 103 void coreUMComplete(VarMap); 104 void coreUMFailed(VarMap); 105 106 void coreUpdateParents(); 107 void coreUpdateTransferPosition(VarMap, qint64); 108 109 void coreDownloadComplete(QString); 110 111 protected: 112 virtual void resizeEvent(QResizeEvent *); 113 virtual void closeEvent(QCloseEvent *); 114 virtual void hideEvent(QHideEvent *); 115 116 void getFileList(const QString &, const QString &); 117 void matchQueue(const QString &, const QString &); 118 void addFavorite(const QString&); 119 void grantSlot(const QString&, const QString&); 120 void removeFromQueue(const QString&); 121 void forceAttempt(const QString&); 122 void closeConection(const QString &, bool); 123 void searchAlternates(const QString &tth); 124 void onFailed(dcpp::Download* dl, const std::string& reason); 125 // DownloadManager 126 virtual void on(dcpp::DownloadManagerListener::Requesting, dcpp::Download* dl) noexcept; 127 virtual void on(dcpp::DownloadManagerListener::Starting, dcpp::Download* dl) noexcept; 128 virtual void on(dcpp::DownloadManagerListener::Tick, const dcpp::DownloadList& dls) noexcept; 129 virtual void on(dcpp::DownloadManagerListener::Complete, dcpp::Download* dl) noexcept; 130 virtual void on(dcpp::DownloadManagerListener::Failed, dcpp::Download* dl, const std::string& reason) noexcept; 131 // ConnectionManager 132 virtual void on(dcpp::ConnectionManagerListener::Added, dcpp::ConnectionQueueItem* cqi) noexcept; 133 virtual void on(dcpp::ConnectionManagerListener::Connected, dcpp::ConnectionQueueItem* cqi) noexcept; 134 virtual void on(dcpp::ConnectionManagerListener::Removed, dcpp::ConnectionQueueItem* cqi) noexcept; 135 virtual void on(dcpp::ConnectionManagerListener::Failed, dcpp::ConnectionQueueItem* cqi, const std::string&) noexcept; 136 virtual void on(dcpp::ConnectionManagerListener::StatusChanged, dcpp::ConnectionQueueItem* cqi) noexcept; 137 // QueueManager 138 virtual void on(dcpp::QueueManagerListener::Finished, dcpp::QueueItem*, const std::string&, int64_t size) noexcept; 139 virtual void on(dcpp::QueueManagerListener::Removed, dcpp::QueueItem*) noexcept; 140 virtual void on(dcpp::QueueManagerListener::CRCFailed, dcpp::Download* aDownload, const std::string& reason) noexcept; 141 // UploadManager 142 virtual void on(dcpp::UploadManagerListener::Starting, dcpp::Upload* ul) noexcept; 143 virtual void on(dcpp::UploadManagerListener::Tick, const dcpp::UploadList& uls) noexcept; 144 virtual void on(dcpp::UploadManagerListener::Complete, dcpp::Upload* ul) noexcept; 145 virtual void on(dcpp::UploadManagerListener::Failed, dcpp::Upload* ul, const std::string& reason) noexcept; 146 147 private Q_SLOTS: 148 void slotContextMenu(const QPoint&); 149 void slotHeaderMenu(const QPoint&); 150 void downloadComplete(QString); 151 \ 152 private: 153 TransferView(QWidget* = NULL); 154 virtual ~TransferView(); 155 156 void load(); 157 void save(); 158 vstr(const QVariant & var)159 inline QString vstr(const QVariant &var) { return var.toString(); } vint(const QVariant & var)160 inline int vint(const QVariant &var) { return var.toInt(); } vdbl(const QVariant & var)161 inline double vdbl(const QVariant &var) { return var.toDouble(); } vlng(const QVariant & var)162 inline qlonglong vlng(const QVariant &var) { return var.toLongLong(); } 163 164 QString getTTHFromItem(const TransferViewItem *); 165 166 void getParams(VarMap&, const dcpp::ConnectionQueueItem*); 167 void getParams(VarMap&, const dcpp::Transfer*); 168 169 void init(); 170 171 TransferViewModel *model; 172 }; 173