diff options
-rw-r--r-- | shemov.cpp | 53 | ||||
-rw-r--r-- | shemov.h | 2 |
2 files changed, 55 insertions, 0 deletions
@@ -19,6 +19,13 @@ #include <QMessageBox> #include <QSqlDatabase> #include <QSqlError> +#include <QImage> +#include <QPainter> +#include <QFont> +#include <QFontMetrics> +#include <QLocale> +#include <sys/vfs.h> + #include <QDebug> #include "shemov.h" @@ -77,6 +84,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla createStatusbar(); createActions(); createMenus(); + setFsFree(); mFSWidget->fileView()->findActions(); @@ -148,6 +156,45 @@ void SheMov::tabChanged(int newTab){ updateSelectionCount(QItemSelection(), QItemSelection()); } +void SheMov::setFsFree(){ + struct statfs buf; + QSettings s; + QString dir = s.value("paths/archive").toString(); + int success = statfs(qPrintable(dir), &buf); + if(success == -1){ + mFsFree->setText(tr("Error")); + return; + } + int blocksize = buf.f_bsize; + int free = buf.f_bfree; + int avail = buf.f_blocks; + int used = avail - free; + qreal freep = free * 100.0 / avail; + qreal usedp = used * 100.0 / avail; + int height = mFsFree->size().height(); + QImage img(100, height, QImage::Format_ARGB32); + img.fill(0); + QPainter p(&img); + p.setBrush(QBrush(Qt::red)); + p.setPen(QPen(Qt::blue)); + p.drawRect(QRectF(0, 0, usedp, height)); + p.setBrush(QBrush(Qt::green)); + p.drawRect(QRectF(usedp, 0, freep, height)); + quint64 freeb = static_cast<quint64>(free) * blocksize; + qreal freegib = freeb / 1024.0 / 1024.0 / 1024.0; + QFont f = qApp->font(); + QFontMetrics fm(f); + QLocale l; + QString freeString = l.toString(freegib, 'g', 2); + freeString.append(tr(" GiB free")); + QSize stringSize = fm.size(Qt::TextSingleLine, freeString); + int startx = (100 - stringSize.width()) / 2; + int starty = (height - stringSize.height()) / 2 + fm.ascent(); + qDebug() << startx << starty; + p.drawText(QPoint(startx, starty), freeString); + mFsFree->setPixmap(QPixmap::fromImage(img)); +} + void SheMov::createStatusbar(){ QLabel *selSizeL = new QLabel(tr("Sel. Size")); mSelectedSize = new QLabel(tr("nothing selected yet")); @@ -164,6 +211,11 @@ void SheMov::createStatusbar(){ mTemplate->setFrameStyle(QFrame::Panel | QFrame::Sunken); statusBar()->addPermanentWidget(templateL); statusBar()->addPermanentWidget(mTemplate); + QLabel *freeL = new QLabel(tr("Free space")); + mFsFree = new QLabel(tr("calculating...")); + mFsFree->setFrameStyle(QFrame::Panel | QFrame::Sunken); + statusBar()->addPermanentWidget(freeL); + statusBar()->addPermanentWidget(mFsFree); } void SheMov::createActions(){ @@ -197,6 +249,7 @@ void SheMov::createActions(){ mRefreshA->setShortcut(Qt::Key_F4); mRefreshA->setData("RE"); connect(mRefreshA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(refresh())); + connect(mRefreshA, SIGNAL(triggered()), this, SLOT(setFsFree())); mFSWidget->fileView()->addAction(mRefreshA); mCopyA = new QAction(tr("Copy file(s)..."), this); mCopyA->setShortcut(tr("CTRL+v")); @@ -39,6 +39,7 @@ class SheMov : public QMainWindow { void setTemplate(const QString &newTemplate); void configure(); void tabChanged(int newTab); + void setFsFree(); private: void createStatusbar(); @@ -50,6 +51,7 @@ class SheMov : public QMainWindow { QLabel *mSelectedItems; QLabel *mTemplate; QLabel *mSelectedSize; + QLabel *mFsFree; //Actions QAction *mQuitA; |