summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shemov.cpp53
-rw-r--r--shemov.h2
2 files changed, 55 insertions, 0 deletions
diff --git a/shemov.cpp b/shemov.cpp
index c769709..cf29262 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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"));
diff --git a/shemov.h b/shemov.h
index 5b447d9..6d61d2e 100644
--- a/shemov.h
+++ b/shemov.h
@@ -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;