From 27cb075dbb1050b09ad8346da818f5b1e46d568a Mon Sep 17 00:00:00 2001 From: krepa098 Date: Mon, 17 Nov 2014 16:05:14 +0100 Subject: [PATCH] hooked up filetransferwidget --- res.qrc | 7 + src/chatlog/content/filetransferwidget.cpp | 186 +++++++++++- src/chatlog/content/filetransferwidget.h | 21 +- src/chatlog/content/filetransferwidget.ui | 271 ++++++++++-------- src/core.cpp | 25 +- src/core.h | 6 +- src/corestructs.cpp | 10 + src/corestructs.h | 8 +- src/widget/form/chatform.cpp | 14 +- ui/fileTransferInstance/background_green.png | Bin 0 -> 495 bytes ui/fileTransferInstance/background_grey.png | Bin 0 -> 487 bytes ui/fileTransferInstance/background_yellow.png | Bin 0 -> 495 bytes 12 files changed, 396 insertions(+), 152 deletions(-) create mode 100644 ui/fileTransferInstance/background_green.png create mode 100644 ui/fileTransferInstance/background_grey.png create mode 100644 ui/fileTransferInstance/background_yellow.png diff --git a/res.qrc b/res.qrc index 249642bfb..6c35d1e48 100644 --- a/res.qrc +++ b/res.qrc @@ -94,7 +94,14 @@ translations/fr.qm translations/ru.qm ui/fileTransferWidget/fileTransferWidget.css + ui/fileTransferInstance/red.css + ui/fileTransferInstance/green.css + ui/fileTransferInstance/grey.css + ui/fileTransferInstance/yellow.css ui/fileTransferInstance/background_red.png + ui/fileTransferInstance/background_yellow.png + ui/fileTransferInstance/background_green.png + ui/fileTransferInstance/background_grey.png ui/fileTransferInstance/pause_2x.png ui/fileTransferInstance/no_2x.png ui/fileTransferInstance/yes_2x.png diff --git a/src/chatlog/content/filetransferwidget.cpp b/src/chatlog/content/filetransferwidget.cpp index 3b66f14ff..a753ea741 100644 --- a/src/chatlog/content/filetransferwidget.cpp +++ b/src/chatlog/content/filetransferwidget.cpp @@ -18,6 +18,7 @@ #include "ui_filetransferwidget.h" #include "src/core.h" +#include "src/misc/style.h" #include #include @@ -26,15 +27,28 @@ FileTransferWidget::FileTransferWidget(QWidget *parent, ToxFile file) : QWidget(parent) , ui(new Ui::FileTransferWidget) , fileInfo(file) + , lastTick(QTime::currentTime()) { ui->setupUi(this); ui->filenameLabel->setText(file.fileName); ui->progressBar->setValue(0); + ui->fileSizeLabel->setText(getHumanReadableSize(file.filesize)); + ui->progressLabel->setText("0%"); + ui->etaLabel->setText("--:--"); + + setStyleSheet(Style::getStylesheet(":/ui/fileTransferInstance/grey.css")); + Style::repolish(this); connect(Core::getInstance(), &Core::fileTransferInfo, this, &FileTransferWidget::onFileTransferInfo); + connect(Core::getInstance(), &Core::fileTransferAccepted, this, &FileTransferWidget::onFileTransferAccepted); + connect(Core::getInstance(), &Core::fileTransferCancelled, this, &FileTransferWidget::onFileTransferCancelled); + connect(Core::getInstance(), &Core::fileTransferPaused, this, &FileTransferWidget::onFileTransferPaused); + connect(Core::getInstance(), &Core::fileTransferFinished, this, &FileTransferWidget::onFileTransferFinished); - setFixedHeight(100); + setupButtons(); + + setFixedHeight(85); } FileTransferWidget::~FileTransferWidget() @@ -42,12 +56,176 @@ FileTransferWidget::~FileTransferWidget() delete ui; } -void FileTransferWidget::onFileTransferInfo(int FriendId, int FileNum, int64_t Filesize, int64_t BytesSent, ToxFile::FileDirection direction) +void FileTransferWidget::onFileTransferInfo(ToxFile file) { - if(FileNum != fileInfo.fileNum) + if(fileInfo != file) return; + fileInfo = file; + // update progress - qreal progress = static_cast(Filesize)/static_cast(BytesSent); + qreal progress = static_cast(file.bytesSent) / static_cast(file.filesize); ui->progressBar->setValue(static_cast(progress * 100.0)); + + // eta, speed + QTime now = QTime::currentTime(); + qreal deltaSecs = lastTick.msecsTo(now) / 1000.0; + + if(deltaSecs >= 1.0) + { + qint64 deltaBytes = file.bytesSent - lastBytesSent; + qint64 bytesPerSec = static_cast(static_cast(deltaBytes) / deltaSecs); + + if(bytesPerSec > 0) + { + QTime toGo(0,0,file.filesize / bytesPerSec); + ui->etaLabel->setText(toGo.toString("mm:ss")); + } + else + { + ui->etaLabel->setText("--:--"); + } + + ui->progressLabel->setText(getHumanReadableSize(bytesPerSec) + "/s"); + + lastTick = now; + lastBytesSent = file.bytesSent; + } + + setupButtons(); + + repaint(); +} + +void FileTransferWidget::onFileTransferAccepted(ToxFile file) +{ + if(fileInfo != file) + return; + + fileInfo = file; + + setStyleSheet(Style::getStylesheet(":/ui/fileTransferInstance/yellow.css")); + Style::repolish(this); + + setupButtons(); +} + +void FileTransferWidget::onFileTransferCancelled(ToxFile file) +{ + if(fileInfo != file) + return; + + fileInfo = file; + + setStyleSheet(Style::getStylesheet(":/ui/fileTransferInstance/red.css")); + Style::repolish(this); + + setupButtons(); + hideWidgets(); + + disconnect(Core::getInstance()); +} + +void FileTransferWidget::onFileTransferPaused(ToxFile file) +{ + if(fileInfo != file) + return; + + fileInfo = file; + + setStyleSheet(Style::getStylesheet(":/ui/fileTransferInstance/grey.css")); + Style::repolish(this); + + setupButtons(); +} + +void FileTransferWidget::onFileTransferFinished(ToxFile file) +{ + if(fileInfo != file) + return; + + fileInfo = file; + + setStyleSheet(Style::getStylesheet(":/ui/fileTransferInstance/green.css")); + Style::repolish(this); + + setupButtons(); + hideWidgets(); + + disconnect(Core::getInstance()); +} + +QString FileTransferWidget::getHumanReadableSize(qint64 size) +{ + static const char* suffix[] = {"B","kiB","MiB","GiB","TiB"}; + int exp = 0; + + if (size > 0) + exp = std::min( (int) (log(size) / log(1024)), (int) (sizeof(suffix) / sizeof(suffix[0]) - 1)); + + return QString().setNum(size / pow(1024, exp),'f',2).append(suffix[exp]); +} + +void FileTransferWidget::hideWidgets() +{ + ui->buttonWidget->hide(); + ui->progressBar->hide(); + ui->progressLabel->hide(); + ui->etaLabel->hide(); +} + +void FileTransferWidget::setupButtons() +{ + switch(fileInfo.status) + { + case ToxFile::TRANSMITTING: + ui->topButton->setIcon(QIcon(":/ui/fileTransferInstance/no_2x.png")); + ui->topButton->setObjectName("cancel"); + + ui->bottomButton->setIcon(QIcon(":/ui/fileTransferInstance/pause_2x.png")); + ui->bottomButton->setObjectName("pause"); + break; + case ToxFile::PAUSED: + ui->topButton->setIcon(QIcon(":/ui/fileTransferInstance/no_2x.png")); + ui->topButton->setObjectName("cancel"); + + ui->bottomButton->setIcon(QIcon(":/ui/fileTransferInstance/arrow_white_2x.png")); + ui->bottomButton->setObjectName("resume"); + break; + case ToxFile::STOPPED: + case ToxFile::BROKEN: //TODO: ? + break; + } +} + +void FileTransferWidget::handleButton(QPushButton *btn) +{ + if(fileInfo.direction == ToxFile::SENDING) + { + if(btn->objectName() == "cancel") + Core::getInstance()->cancelFileSend(fileInfo.friendId, fileInfo.fileNum); + if(btn->objectName() == "pause") + Core::getInstance()->pauseResumeFileSend(fileInfo.friendId, fileInfo.fileNum); + if(btn->objectName() == "resume") + Core::getInstance()->pauseResumeFileSend(fileInfo.friendId, fileInfo.fileNum); + } + else + { + if(btn->objectName() == "cancel") + Core::getInstance()->cancelFileRecv(fileInfo.friendId, fileInfo.fileNum); + if(btn->objectName() == "pause") + Core::getInstance()->pauseResumeFileRecv(fileInfo.friendId, fileInfo.fileNum); + if(btn->objectName() == "resume") + Core::getInstance()->pauseResumeFileRecv(fileInfo.friendId, fileInfo.fileNum); + } +} + +void FileTransferWidget::on_topButton_clicked() +{ + handleButton(ui->topButton); +} + +void FileTransferWidget::on_bottomButton_clicked() +{ + handleButton(ui->bottomButton); } diff --git a/src/chatlog/content/filetransferwidget.h b/src/chatlog/content/filetransferwidget.h index e25a280b5..d4a32e6e0 100644 --- a/src/chatlog/content/filetransferwidget.h +++ b/src/chatlog/content/filetransferwidget.h @@ -18,6 +18,7 @@ #define FILETRANSFERWIDGET_H #include +#include #include "../chatlinecontent.h" #include "../../corestructs.h" @@ -25,6 +26,8 @@ namespace Ui { class FileTransferWidget; } +class QPushButton; + class FileTransferWidget : public QWidget { Q_OBJECT @@ -34,11 +37,27 @@ public: virtual ~FileTransferWidget(); protected slots: - void onFileTransferInfo(int FriendId, int FileNum, int64_t Filesize, int64_t BytesSent, ToxFile::FileDirection direction); + void onFileTransferInfo(ToxFile file); + void onFileTransferAccepted(ToxFile file); + void onFileTransferCancelled(ToxFile file); + void onFileTransferPaused(ToxFile file); + void onFileTransferFinished(ToxFile file); + +protected: + QString getHumanReadableSize(qint64 size); + void hideWidgets(); + void setupButtons(); + void handleButton(QPushButton* btn); + +private slots: + void on_topButton_clicked(); + void on_bottomButton_clicked(); private: Ui::FileTransferWidget *ui; ToxFile fileInfo; + QTime lastTick; + qint64 lastBytesSent = 0; }; diff --git a/src/chatlog/content/filetransferwidget.ui b/src/chatlog/content/filetransferwidget.ui index 11a0a63b0..7467ee60e 100644 --- a/src/chatlog/content/filetransferwidget.ui +++ b/src/chatlog/content/filetransferwidget.ui @@ -6,35 +6,29 @@ 0 0 - 619 - 86 + 544 + 207 Form - - false - - background-color:transparent; + #FileTransferWidget { + background-color:transparent; +} - + + + + 0 + 0 + + - QFrame { - border-image: url(:/ui/fileTransferInstance/background_red.png); - border-left:25;padding-top:-30; - border-top:28; - border-right:25; padding-right:-28; - border-bottom:28;padding-bottom:-30; - color:white; -} - -QPushButton { - margin:0; -} + QFrame::NoFrame @@ -45,70 +39,89 @@ QPushButton { 0 - + + + 6 + + + 6 + + + + 0 + 0 + + Filename - - - - - 10Mb - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - 24% - - - Qt::AlignCenter - - - - - - - ETA:10:10 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 10Mb + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + 24% + + + Qt::AlignCenter + + + + + + + ETA:10:10 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + 16777215 - 14 + 10 - QProgressBar { - border: 2px solid black; - border-radius: 0px; - color: white; - background-color:white; -} - -QProgressBar::chunk { - background-color: black; - width: 20px; -} + 24 @@ -140,64 +153,78 @@ QProgressBar::chunk { - - - 0 - - - - - - - - - :/ui/fileTransferInstance/pause_2x.png:/ui/fileTransferInstance/pause_2x.png - - - - 25 - 28 - - - - true - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - :/ui/fileTransferInstance/arrow_white_2x.png:/ui/fileTransferInstance/arrow_white_2x.png - - - - 25 - 28 - - - - true - - - - + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + :/ui/fileTransferInstance/pause_2x.png:/ui/fileTransferInstance/pause_2x.png + + + + 25 + 28 + + + + true + + + + + + + Qt::Vertical + + + + 20 + 92 + + + + + + + + + + + + :/ui/fileTransferInstance/arrow_white_2x.png:/ui/fileTransferInstance/arrow_white_2x.png + + + + 25 + 28 + + + + true + + + + + diff --git a/src/core.cpp b/src/core.cpp index f9bbd2cf4..f13948cd8 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -567,7 +567,7 @@ void Core::onFileControlCallback(Tox* tox, int32_t friendnumber, uint8_t receive qDebug() << QString("Core::onFileControlCallback: Transfer of file %1 cancelled by friend %2") .arg(file->fileNum).arg(file->friendId); file->status = ToxFile::STOPPED; - emit static_cast(core)->fileTransferCancelled(file->friendId, file->fileNum, ToxFile::SENDING); + emit static_cast(core)->fileTransferCancelled(*file); // Wait for sendAllFileData to return before deleting the ToxFile, we MUST ensure this or we'll use after free if (file->sendTimer) { @@ -594,7 +594,7 @@ void Core::onFileControlCallback(Tox* tox, int32_t friendnumber, uint8_t receive qDebug() << QString("Core::onFileControlCallback: Transfer of file %1 cancelled by friend %2") .arg(file->fileNum).arg(file->friendId); file->status = ToxFile::STOPPED; - emit static_cast(core)->fileTransferCancelled(file->friendId, file->fileNum, ToxFile::RECEIVING); + emit static_cast(core)->fileTransferCancelled(*file); removeFileFromQueue((bool)receive_send, file->friendId, file->fileNum); } else if (receive_send == 0 && control_type == TOX_FILECONTROL_FINISHED) @@ -669,8 +669,7 @@ void Core::onFileDataCallback(Tox*, int32_t friendnumber, uint8_t filenumber, co file->file->write((char*)data,length); file->bytesSent += length; //qDebug() << QString("Core::onFileDataCallback: received %1/%2 bytes").arg(file->bytesSent).arg(file->filesize); - emit static_cast(core)->fileTransferInfo(file->friendId, file->fileNum, - file->filesize, file->bytesSent, ToxFile::RECEIVING); + emit static_cast(core)->fileTransferInfo(*file); } void Core::onAvatarInfoCallback(Tox*, int32_t friendnumber, uint8_t format, @@ -852,7 +851,7 @@ void Core::pauseResumeFileSend(int friendId, int fileNum) if (file->status == ToxFile::TRANSMITTING) { file->status = ToxFile::PAUSED; - emit fileTransferPaused(file->friendId, file->fileNum, ToxFile::SENDING); + emit fileTransferPaused(*file); tox_file_send_control(tox, file->friendId, 0, file->fileNum, TOX_FILECONTROL_PAUSE, nullptr, 0); } else if (file->status == ToxFile::PAUSED) @@ -884,7 +883,7 @@ void Core::pauseResumeFileRecv(int friendId, int fileNum) if (file->status == ToxFile::TRANSMITTING) { file->status = ToxFile::PAUSED; - emit fileTransferPaused(file->friendId, file->fileNum, ToxFile::RECEIVING); + emit fileTransferPaused(*file); tox_file_send_control(tox, file->friendId, 1, file->fileNum, TOX_FILECONTROL_PAUSE, nullptr, 0); } else if (file->status == ToxFile::PAUSED) @@ -914,7 +913,7 @@ void Core::cancelFileSend(int friendId, int fileNum) return; } file->status = ToxFile::STOPPED; - emit fileTransferCancelled(file->friendId, file->fileNum, ToxFile::SENDING); + emit fileTransferCancelled(*file); tox_file_send_control(tox, file->friendId, 0, file->fileNum, TOX_FILECONTROL_KILL, nullptr, 0); while (file->sendTimer) QThread::msleep(1); // Wait until sendAllFileData returns before deleting removeFileFromQueue(true, friendId, fileNum); @@ -937,7 +936,7 @@ void Core::cancelFileRecv(int friendId, int fileNum) return; } file->status = ToxFile::STOPPED; - emit fileTransferCancelled(file->friendId, file->fileNum, ToxFile::RECEIVING); + emit fileTransferCancelled(*file); tox_file_send_control(tox, file->friendId, 1, file->fileNum, TOX_FILECONTROL_KILL, nullptr, 0); removeFileFromQueue(true, friendId, fileNum); } @@ -959,7 +958,7 @@ void Core::rejectFileRecvRequest(int friendId, int fileNum) return; } file->status = ToxFile::STOPPED; - emit fileTransferCancelled(file->friendId, file->fileNum, ToxFile::SENDING); + emit fileTransferCancelled(*file); tox_file_send_control(tox, file->friendId, 1, file->fileNum, TOX_FILECONTROL_KILL, nullptr, 0); removeFileFromQueue(false, friendId, fileNum); } @@ -1557,14 +1556,14 @@ void Core::sendAllFileData(Core *core, ToxFile* file) file->sendTimer = nullptr; return; } - emit core->fileTransferInfo(file->friendId, file->fileNum, file->filesize, file->bytesSent, ToxFile::SENDING); + emit core->fileTransferInfo(*file); // qApp->processEvents(); long long chunkSize = tox_file_data_size(core->tox, file->friendId); if (chunkSize == -1) { qWarning("Core::fileHeartbeat: Error getting preffered chunk size, aborting file send"); file->status = ToxFile::STOPPED; - emit core->fileTransferCancelled(file->friendId, file->fileNum, ToxFile::SENDING); + emit core->fileTransferCancelled(*file); tox_file_send_control(core->tox, file->friendId, 0, file->fileNum, TOX_FILECONTROL_KILL, nullptr, 0); removeFileFromQueue(true, file->friendId, file->fileNum); return; @@ -1579,7 +1578,7 @@ void Core::sendAllFileData(Core *core, ToxFile* file) qWarning() << QString("Core::sendAllFileData: Error reading from file: %1").arg(file->file->errorString()); delete[] data; file->status = ToxFile::STOPPED; - emit core->fileTransferCancelled(file->friendId, file->fileNum, ToxFile::SENDING); + emit core->fileTransferCancelled(*file); tox_file_send_control(core->tox, file->friendId, 0, file->fileNum, TOX_FILECONTROL_KILL, nullptr, 0); removeFileFromQueue(true, file->friendId, file->fileNum); return; @@ -1589,7 +1588,7 @@ void Core::sendAllFileData(Core *core, ToxFile* file) qWarning() << QString("Core::sendAllFileData: Nothing to read from file: %1").arg(file->file->errorString()); delete[] data; file->status = ToxFile::STOPPED; - emit core->fileTransferCancelled(file->friendId, file->fileNum, ToxFile::SENDING); + emit core->fileTransferCancelled(*file); tox_file_send_control(core->tox, file->friendId, 0, file->fileNum, TOX_FILECONTROL_KILL, nullptr, 0); removeFileFromQueue(true, file->friendId, file->fileNum); return; diff --git a/src/core.h b/src/core.h index 0c393ebfc..60ec5e67e 100644 --- a/src/core.h +++ b/src/core.h @@ -173,12 +173,12 @@ signals: void fileSendStarted(ToxFile file); void fileReceiveRequested(ToxFile file); void fileTransferAccepted(ToxFile file); - void fileTransferCancelled(int FriendId, int FileNum, ToxFile::FileDirection direction); + void fileTransferCancelled(ToxFile file); void fileTransferFinished(ToxFile file); void fileUploadFinished(const QString& path); void fileDownloadFinished(const QString& path); - void fileTransferPaused(int FriendId, int FileNum, ToxFile::FileDirection direction); - void fileTransferInfo(int FriendId, int FileNum, int64_t Filesize, int64_t BytesSent, ToxFile::FileDirection direction); + void fileTransferPaused(ToxFile file); + void fileTransferInfo(ToxFile file); void fileTransferRemotePausedUnpaused(ToxFile file, bool paused); void fileTransferBrokenUnbroken(ToxFile file, bool broken); diff --git a/src/corestructs.cpp b/src/corestructs.cpp index ecdca2abd..3f66354de 100644 --- a/src/corestructs.cpp +++ b/src/corestructs.cpp @@ -12,6 +12,16 @@ ToxFile::ToxFile(int FileNum, int FriendId, QByteArray FileName, QString FilePat { } +bool ToxFile::operator==(const ToxFile &other) const +{ + return fileNum == other.fileNum && friendId && other.friendId; +} + +bool ToxFile::operator!=(const ToxFile &other) const +{ + return !(*this == other); +} + void ToxFile::setFilePath(QString path) { filePath=path; diff --git a/src/corestructs.h b/src/corestructs.h index 1453db415..9826b4c0a 100644 --- a/src/corestructs.h +++ b/src/corestructs.h @@ -57,6 +57,10 @@ struct ToxFile ToxFile()=default; ToxFile(int FileNum, int FriendId, QByteArray FileName, QString FilePath, FileDirection Direction); ~ToxFile(){} + + bool operator==(const ToxFile& other) const; + bool operator!=(const ToxFile& other) const; + void setFilePath(QString path); bool open(bool write); @@ -65,8 +69,8 @@ struct ToxFile QByteArray fileName; QString filePath; QFile* file; - long long bytesSent; - long long filesize; + qint64 bytesSent; + qint64 filesize; FileStatus status; FileDirection direction; QTimer* sendTimer; diff --git a/src/widget/form/chatform.cpp b/src/widget/form/chatform.cpp index 2d81700e1..9a6aaac6d 100644 --- a/src/widget/form/chatform.cpp +++ b/src/widget/form/chatform.cpp @@ -197,13 +197,13 @@ void ChatForm::onFileRecvRequest(ToxFile file) FileTransferInstance* fileTrans = new FileTransferInstance(file); ftransWidgets.insert(fileTrans->getId(), fileTrans); - connect(Core::getInstance(), &Core::fileTransferInfo, fileTrans, &FileTransferInstance::onFileTransferInfo); - connect(Core::getInstance(), &Core::fileTransferCancelled, fileTrans, &FileTransferInstance::onFileTransferCancelled); - connect(Core::getInstance(), &Core::fileTransferFinished, fileTrans, &FileTransferInstance::onFileTransferFinished); - connect(Core::getInstance(), SIGNAL(fileTransferAccepted(ToxFile)), fileTrans, SLOT(onFileTransferAccepted(ToxFile))); - connect(Core::getInstance(), SIGNAL(fileTransferPaused(int,int,ToxFile::FileDirection)), fileTrans, SLOT(onFileTransferPaused(int,int,ToxFile::FileDirection))); - connect(Core::getInstance(), SIGNAL(fileTransferRemotePausedUnpaused(ToxFile,bool)), fileTrans, SLOT(onFileTransferRemotePausedUnpaused(ToxFile,bool))); - connect(Core::getInstance(), SIGNAL(fileTransferBrokenUnbroken(ToxFile, bool)), fileTrans, SLOT(onFileTransferBrokenUnbroken(ToxFile, bool))); +// connect(Core::getInstance(), &Core::fileTransferInfo, fileTrans, &FileTransferInstance::onFileTransferInfo); +// connect(Core::getInstance(), &Core::fileTransferCancelled, fileTrans, &FileTransferInstance::onFileTransferCancelled); +// connect(Core::getInstance(), &Core::fileTransferFinished, fileTrans, &FileTransferInstance::onFileTransferFinished); +// connect(Core::getInstance(), SIGNAL(fileTransferAccepted(ToxFile)), fileTrans, SLOT(onFileTransferAccepted(ToxFile))); +// connect(Core::getInstance(), SIGNAL(fileTransferPaused(int,int,ToxFile::FileDirection)), fileTrans, SLOT(onFileTransferPaused(int,int,ToxFile::FileDirection))); +// connect(Core::getInstance(), SIGNAL(fileTransferRemotePausedUnpaused(ToxFile,bool)), fileTrans, SLOT(onFileTransferRemotePausedUnpaused(ToxFile,bool))); +// connect(Core::getInstance(), SIGNAL(fileTransferBrokenUnbroken(ToxFile, bool)), fileTrans, SLOT(onFileTransferBrokenUnbroken(ToxFile, bool))); Widget* w = Widget::getInstance(); if (!w->isFriendWidgetCurActiveWidget(f)|| w->isMinimized() || !w->isActiveWindow()) diff --git a/ui/fileTransferInstance/background_green.png b/ui/fileTransferInstance/background_green.png new file mode 100644 index 0000000000000000000000000000000000000000..07c072b7b18bd8ef50fc271e8f05e0d21c9aa3a1 GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^-as6}!3HExojbJzNU;<lp#TxLhx5%tV>z@BxLtNt=*sXF)LF_T-k2zORO~cYgooUkP zbSux?Z~m{*#?-?q!EGRxpmQLiVIxB_tAqNq+hxWy*b_qPu_~szqm}~02vOiTYm0vXE9NmA2DWo~s;J`5pB-vFc*);~9w(_a@h<|BT5v;C@a0 z=GCbB`|J35N^f6zy4rfK-)t3oZ@1Di?$m34 zKYiYlgI~8^JN(7;&e4SJUovZN`7#TyPxUBz9@S>g&SLcH>Fic(V5Bg3y85}Sb4q9e E0HL0>9RL6T literal 0 HcmV?d00001 diff --git a/ui/fileTransferInstance/background_yellow.png b/ui/fileTransferInstance/background_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba362293bd38ab3f3d16d1175c498ded3a6e936 GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^-as6}!3HExojbJzNU;<lp#TxLhx5%tV>#wYiU|a^=`r2TnieE~TIrO+DW(~ZB0W@BR=8X`vyzkN z`Q*->#Yeoa)J|Ua`jYiK@zW}+RX(d+R#EMLKIh4lClgYPv&(M(JG$icE}8G$&sF3- z@3~2Rn6}mP+UB(HpGzteR=obD_kQyG_0v-)oi|**Q+U1V*PcroLOpHInC8RCAV8If-xN94VJ?{prO