diff options
author | Arno <arno@disconnect.de> | 2016-11-27 04:43:53 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-11-27 04:43:53 +0100 |
commit | c034fce78687a7d65c61aa0348d09b4afea3648c (patch) | |
tree | 12053e7fb5e7e1cbae972ae3066f8b69d93d0c7b | |
parent | 5cde173217fd8cb1dbc21f3ac54f18e8234e709b (diff) | |
download | ShemovCleaner-c034fce78687a7d65c61aa0348d09b4afea3648c.tar.gz ShemovCleaner-c034fce78687a7d65c61aa0348d09b4afea3648c.tar.bz2 ShemovCleaner-c034fce78687a7d65c61aa0348d09b4afea3648c.zip |
Add free space widget to status bar
Red is used, green is free, obviously...
-rw-r--r-- | filewidget.cpp | 4 | ||||
-rw-r--r-- | filewidget.h | 3 | ||||
-rw-r--r-- | shemovcleaner.cpp | 47 | ||||
-rw-r--r-- | shemovcleaner.h | 3 | ||||
-rw-r--r-- | torrentwidget.cpp | 4 | ||||
-rw-r--r-- | torrentwidget.h | 4 |
6 files changed, 62 insertions, 3 deletions
diff --git a/filewidget.cpp b/filewidget.cpp index 4b22b77..966ad95 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -1,4 +1,3 @@ -#include <QLineEdit> #include <QPushButton> #include <QGridLayout> #include <QVBoxLayout> @@ -443,6 +442,7 @@ void FileWidget::paste(){ } gatherData(); qApp->restoreOverrideCursor(); + emit freeSpaceChanged(mDir->text()); } } @@ -515,6 +515,7 @@ void FileWidget::cd(const QString &to){ mDir->setText(QDir::toNativeSeparators(newDir)); mLastDir = ld; gatherData(); + emit freeSpaceChanged(mDir->text()); }else{ QString msg = QString(tr("Could not cd to %1")).arg(to); emit statusMessage(msg); @@ -542,6 +543,7 @@ void FileWidget::deleteFiles(){ deleteRecursive(fi); } gatherData(); + emit freeSpaceChanged(mDir->text()); } } diff --git a/filewidget.h b/filewidget.h index ef18603..a886914 100644 --- a/filewidget.h +++ b/filewidget.h @@ -8,6 +8,7 @@ #include <QMenuBar> #include <QToolBar> #include <QFileInfo> +#include <QLineEdit> class QLineEdit; class QStandardItemModel; @@ -32,6 +33,7 @@ class FileWidget : public QWidget { QTreeView *fileView() { return mFileView; } QMenuBar *menuBar() { return mMenuBar; } QToolBar *toolBar() { return mToolBar; } + const QString currentDir() const { return mDir->text(); } void setProgressBar(QProgressBar *progressBar) { mProgressBar = progressBar; } ~FileWidget(); @@ -39,6 +41,7 @@ class FileWidget : public QWidget { void statusMessage(const QString &msg); void selectionCountChanged(const QString &msg); void durationChanged(const QString &duration); + void freeSpaceChanged(const QString &dir); public slots: void fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); diff --git a/shemovcleaner.cpp b/shemovcleaner.cpp index 171d689..80f2cd3 100644 --- a/shemovcleaner.cpp +++ b/shemovcleaner.cpp @@ -13,6 +13,8 @@ #include <QKeyEvent> #include <QProgressBar> #include <QCloseEvent> +#include <QStorageInfo> +#include <QPainter> #include "shemovcleaner.h" #include "torrentwidget.h" @@ -53,9 +55,11 @@ ShemovCleaner::ShemovCleaner(QWidget *parent, Qt::WindowFlags f) : QMainWindow(p connect(mTorrentTab, SIGNAL(statusMessage(QString)), this, SLOT(statusBarMessage(QString))); connect(mTorrentTab, SIGNAL(selectionCountChanged(QString)), this, SLOT(setSelectionCount(QString))); + connect(mTorrentTab, SIGNAL(freeSpaceChanged(QString)), this, SLOT(updateFreeSpace(QString))); connect(mFileTab, SIGNAL(statusMessage(QString)), this, SLOT(statusBarMessage(QString))); connect(mFileTab, SIGNAL(selectionCountChanged(QString)), this, SLOT(setSelectionCount(QString))); connect(mFileTab, SIGNAL(durationChanged(QString)), this, SLOT(setDuration(QString))); + connect(mFileTab, SIGNAL(freeSpaceChanged(QString)), this, SLOT(updateFreeSpace(QString))); connect(mTab, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); QMenu *helpMenu = new QMenu(tr("&Help")); @@ -91,6 +95,34 @@ void ShemovCleaner::setDuration(const QString &msg){ mDuration->setText(msg); } +void ShemovCleaner::updateFreeSpace(const QString &path){ + QStorageInfo si(path); + QString drive = si.rootPath(); + if(drive.endsWith('/')){ + drive.chop(1); + } + mDrive->setText(drive); + QString textFree = QString(tr("%1/%2GB free")).arg(QString::number(si.bytesFree() / 1024 / 1024 / 1024)).arg(QString::number(si.bytesTotal() / 1024 / 1024 / 1024)); + + int usedPercent = (si.bytesTotal() - si.bytesFree()) * 100 / si.bytesTotal(); + int usedWidth = usedPercent * mFree->width() / 100; + + QImage img(mFree->size(), QImage::Format_ARGB32); + img.fill(Qt::green); + QPainter p(&img); + p.setBrush(QBrush(Qt::red)); + p.setPen(Qt::NoPen); + p.drawRect(QRect(0, 0, usedWidth, mFree->height())); + + QFont f(qApp->font()); + f.setBold(true); + p.setFont(f); + p.setPen(Qt::blue); + p.drawText(mFree->rect(), Qt::AlignCenter, textFree); + + mFree->setPixmap(QPixmap::fromImage(img)); +} + void ShemovCleaner::setSelectionCount(const QString &msg){ mSelected->setText(msg); } @@ -106,10 +138,13 @@ void ShemovCleaner::configure(){ void ShemovCleaner::tabChanged(int idx){ if(idx == Torrents){ setDuration("00:00:00"); + updateFreeSpace(mTorrentTab->currentDir()); }else if(idx == Videos){ mFileTab->fileView()->setFocus(); + updateFreeSpace(mFileTab->currentDir()); }else if(idx == Actors){ mActorTab->actorView()->setFocus(); + updateFreeSpace(mFileTab->currentDir()); } } @@ -136,11 +171,22 @@ void ShemovCleaner::createStatusBar(){ mProgressBar = new QProgressBar; mProgressBar->setMaximumWidth(150); mProgressBar->setMaximumHeight(10); + mDrive = new QLabel(tr("C:")); + mFree = new QLabel; + mFree->setFrameStyle(QFrame::Panel | QFrame::Sunken); + mFree->setMaximumWidth(120); + mFree->setMinimumWidth(120); + QFont f(qApp->font()); + f.setBold(true); + QFontMetrics fm(f); + mFree->setMaximumHeight(fm.height() + 6); statusBar()->addPermanentWidget(mProgressBar); statusBar()->addPermanentWidget(l1); statusBar()->addPermanentWidget(mSelected); statusBar()->addPermanentWidget(l2); statusBar()->addPermanentWidget(mDuration); + statusBar()->addPermanentWidget(mDrive); + statusBar()->addPermanentWidget(mFree); } void ShemovCleaner::createGlobalActions(){ @@ -183,6 +229,7 @@ void ShemovCleaner::readSettings(){ QSettings s; int curTab = s.value("startupTab").toInt(); mTab->setCurrentIndex(curTab); + tabChanged(curTab); } void ShemovCleaner::writeSettings(){ diff --git a/shemovcleaner.h b/shemovcleaner.h index 32fafba..9cd7f76 100644 --- a/shemovcleaner.h +++ b/shemovcleaner.h @@ -21,6 +21,7 @@ class ShemovCleaner : public QMainWindow { void statusBarMessage(const QString &msg); void setSelectionCount(const QString &msg); void setDuration(const QString &msg); + void updateFreeSpace(const QString &path); void configure(); void tabChanged(int idx); void aboutThisProgram(); @@ -37,6 +38,8 @@ class ShemovCleaner : public QMainWindow { QAction *createSeparator(); QLabel *mSelected; QLabel *mDuration; + QLabel *mDrive; + QLabel *mFree; QProgressBar *mProgressBar; QTabWidget *mTab; TorrentWidget *mTorrentTab; diff --git a/torrentwidget.cpp b/torrentwidget.cpp index b101598..16e70e8 100644 --- a/torrentwidget.cpp +++ b/torrentwidget.cpp @@ -5,7 +5,6 @@ #include <QPushButton> #include <QFileDialog> #include <QDir> -#include <QLineEdit> #include <QTreeView> #include <QStandardItemModel> #include <QStandardItem> @@ -240,6 +239,7 @@ void TorrentWidget::deleteFiles(){ QString msg = QString(tr("Successfully deleted %1 of %2 file(s)")).arg(QString::number(ctr)).arg(QString::number(sel.count())); emit statusMessage(msg); gatherData(); + emit freeSpaceChanged(mDir->text()); } } @@ -272,6 +272,7 @@ void TorrentWidget::moveFiles(){ QString msg = QString(tr("Successfully moved %1 of %2 file(s)")).arg(QString::number(ctr)).arg(QString::number(sel.count())); emit statusMessage(msg); gatherData(); + emit freeSpaceChanged(mDir->text()); } } @@ -362,6 +363,7 @@ void TorrentWidget::setDir(){ QSettings s; s.setValue("dirs/torrentdir", mDir->text()); gatherData(); + emit freeSpaceChanged(mDir->text()); } void TorrentWidget::copyToClipboard(){ diff --git a/torrentwidget.h b/torrentwidget.h index 2288e60..65c1161 100644 --- a/torrentwidget.h +++ b/torrentwidget.h @@ -5,9 +5,9 @@ #include <QItemSelection> #include <QString> #include <QContextMenuEvent> +#include <QLineEdit> class QPushButton; -class QLineEdit; class QTreeView; class QStandardItemModel; class QLabel; @@ -30,11 +30,13 @@ class TorrentWidget : public QWidget { TorrentDisplay *torrentDisplay() { return mTorrentDisplay; } QTreeView *torrentFileView() { return mFileView; } void setProgressBar(QProgressBar *progressBar) { mProgressBar = progressBar; } + const QString currentDir() const { return mDir->text(); } ~TorrentWidget(); signals: void statusMessage(const QString &msg); void selectionCountChanged(const QString &msg); + void freeSpaceChanged(const QString &dir); public slots: void selectDir(); |