1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00
qTox/filetransfertwidget.cpp

96 lines
3.0 KiB
C++
Raw Normal View History

2014-06-26 06:30:24 +08:00
#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)
{
}