mirror of https://github.com/qTox/qTox.git
7 changed files with 220 additions and 26 deletions
@ -0,0 +1,95 @@
@@ -0,0 +1,95 @@
|
||||
#include "filetransfertwidget.h" |
||||
|
||||
FileTransfertWidget::FileTransfertWidget(ToxFile *File) |
||||
: file{File}, lastUpdate{QDateTime::currentDateTime()}, lastBytesSent{0} |
||||
{ |
||||
pic=new QLabel(), filename=new QLabel(), size=new QLabel(), speed=new QLabel(), eta=new QLabel(); |
||||
topright = new QPushButton(), bottomright = new QPushButton(); |
||||
progress = new QProgressBar(); |
||||
mainLayout = new QHBoxLayout(), textLayout = new QHBoxLayout(); |
||||
infoLayout = new QVBoxLayout(), buttonLayout = new QVBoxLayout(); |
||||
QFont prettysmall; |
||||
prettysmall.setPixelSize(10); |
||||
QPalette greybg; |
||||
greybg.setColor(QPalette::Window, Qt::gray); |
||||
setPalette(greybg); |
||||
setAutoFillBackground(true); |
||||
|
||||
setFixedSize(250,50); |
||||
setLayout(mainLayout); |
||||
|
||||
filename->setText(file->fileName); |
||||
filename->setFont(prettysmall); |
||||
size->setText(getHumanReadableSize(file->fileData.size())); |
||||
size->setFont(prettysmall); |
||||
speed->setText("0B/s"); |
||||
speed->setFont(prettysmall); |
||||
eta->setText("00:00"); |
||||
eta->setFont(prettysmall); |
||||
progress->setValue(0); |
||||
|
||||
topright->setIcon(QIcon("img/button icons/no_2x.png")); |
||||
if (file->direction == ToxFile::SENDING) |
||||
bottomright->setIcon(QIcon("img/button icons/pause_2x.png")); |
||||
else |
||||
bottomright->setIcon(QIcon("img/button icons/yes_2x.png")); |
||||
|
||||
topright->setIconSize(QSize(25,25)); |
||||
bottomright->setIconSize(QSize(25,25)); |
||||
|
||||
mainLayout->addWidget(pic); |
||||
mainLayout->addLayout(infoLayout); |
||||
mainLayout->addLayout(buttonLayout); |
||||
|
||||
infoLayout->addWidget(filename); |
||||
infoLayout->addLayout(textLayout); |
||||
infoLayout->addWidget(progress); |
||||
|
||||
textLayout->addWidget(size); |
||||
textLayout->addWidget(speed); |
||||
textLayout->addWidget(eta); |
||||
textLayout->setMargin(0); |
||||
textLayout->setSpacing(5); |
||||
} |
||||
|
||||
QString FileTransfertWidget::getHumanReadableSize(int size) |
||||
{ |
||||
static const char* suffix[] = {"B","kB","MB","GB","TB"}; |
||||
int exp = 0; |
||||
if (size) |
||||
exp = std::min( (int) (log(size) / log(1000)), (int) (sizeof(suffix) / sizeof(suffix[0]) - 1)); |
||||
return QString().setNum(size / pow(1000, exp),'g',3).append(suffix[exp]); |
||||
} |
||||
|
||||
void FileTransfertWidget::onFileTransferInfo(ToxFile* File) |
||||
{ |
||||
if (File != file) |
||||
return; |
||||
QDateTime newtime = QDateTime::currentDateTime(); |
||||
int timediff = lastUpdate.secsTo(newtime); |
||||
if (!timediff) |
||||
return; |
||||
int diff = File->bytesSent - lastBytesSent; |
||||
int rawspeed = diff / timediff; |
||||
speed->setText(getHumanReadableSize(rawspeed)+"/s"); |
||||
size->setText(getHumanReadableSize(File->fileData.size())); |
||||
if (!rawspeed) |
||||
return; |
||||
int etaSecs = (File->fileData.size() - File->bytesSent) / rawspeed; |
||||
QTime etaTime(0,0); |
||||
etaTime = etaTime.addSecs(etaSecs); |
||||
eta->setText(etaTime.toString("mm:ss")); |
||||
progress->setValue(File->bytesSent*100/File->fileData.size()); |
||||
lastUpdate = newtime; |
||||
lastBytesSent = File->bytesSent; |
||||
} |
||||
|
||||
void FileTransfertWidget::onFileTransferCancelled(ToxFile* File) |
||||
{ |
||||
|
||||
} |
||||
|
||||
void FileTransfertWidget::onFileTransferFinished(ToxFile* File) |
||||
{ |
||||
|
||||
} |
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
#ifndef FILETRANSFERTWIDGET_H |
||||
#define FILETRANSFERTWIDGET_H |
||||
|
||||
#include <QWidget> |
||||
#include <QLabel> |
||||
#include <QPushButton> |
||||
#include <QProgressBar> |
||||
#include <QHBoxLayout> |
||||
#include <QVBoxLayout> |
||||
#include <QDateTime> |
||||
|
||||
#include "core.h" |
||||
|
||||
class ToxFile; |
||||
|
||||
class FileTransfertWidget : public QWidget |
||||
{ |
||||
Q_OBJECT |
||||
public: |
||||
FileTransfertWidget(ToxFile* File); |
||||
|
||||
public slots: |
||||
void onFileTransferInfo(ToxFile* File); |
||||
void onFileTransferCancelled(ToxFile* File); |
||||
void onFileTransferFinished(ToxFile* File); |
||||
|
||||
private: |
||||
QString getHumanReadableSize(int size); |
||||
|
||||
private: |
||||
QLabel *pic, *filename, *size, *speed, *eta; |
||||
QPushButton *topright, *bottomright; |
||||
QProgressBar *progress; |
||||
ToxFile* file; |
||||
QHBoxLayout *mainLayout, *textLayout; |
||||
QVBoxLayout *infoLayout, *buttonLayout; |
||||
QDateTime lastUpdate; |
||||
long long lastBytesSent; |
||||
}; |
||||
|
||||
#endif // FILETRANSFERTWIDGET_H
|
Loading…
Reference in new issue