diff options
-rw-r--r-- | fswidget.cpp | 64 | ||||
-rw-r--r-- | fswidget.h | 5 |
2 files changed, 68 insertions, 1 deletions
diff --git a/fswidget.cpp b/fswidget.cpp index deefddf..8423450 100644 --- a/fswidget.cpp +++ b/fswidget.cpp @@ -4,13 +4,21 @@ #include <QHBoxLayout> #include <QVBoxLayout> #include <QTreeView> +#include <QStandardItemModel> +#include <QSortFilterProxyModel> #include <QFileDialog> #include <QInputDialog> +#include <QMimeDatabase> +#include <QDirIterator> +#include <QJsonObject> #include <QSettings> +#include <QApplication> #include "fswidget.h" +#include "helper.h" FSWidget::FSWidget(QWidget *parent) : QWidget(parent) { + setPalette(qApp->palette()); setupWidget(); } @@ -29,8 +37,8 @@ void FSWidget::setupWidget(){ QLabel *dirL = new QLabel(tr("Dir")); mDirCB = new QComboBox; - mDirCB->setInsertPolicy(QComboBox::InsertAlphabetically); mDirCB->setSizeAdjustPolicy(QComboBox::AdjustToContents); + connect(mDirCB, &QComboBox::currentTextChanged, this, &FSWidget::gatherData); QAction *addDirA = new QAction(QIcon(":/gaping_ass.png"), tr("Add dir..."), this); connect(addDirA, &QAction::triggered, [=] { QString newDir = QFileDialog::getExistingDirectory(this, tr("Select directory"), QDir::homePath()); @@ -68,10 +76,15 @@ void FSWidget::setupWidget(){ topWL->addStretch(); mFileView = new QTreeView; + mFileView->setAlternatingRowColors(true); mFileView->setSortingEnabled(true); mFileView->setUniformRowHeights(true); mFileView->setSelectionBehavior(QAbstractItemView::SelectRows); mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection); + mModel = new QStandardItemModel; + mProxy = new QSortFilterProxyModel; + mProxy->setSourceModel(mModel); + mFileView->setModel(mProxy); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(topWL); @@ -140,3 +153,52 @@ void FSWidget::removeItem(QComboBox *cb){ } } +void FSWidget::gatherData(const QString &curDir){ + mFileView->setSortingEnabled(false); + mModel->clear(); + QStandardItem *root = mModel->invisibleRootItem(); + QMimeDatabase mimedb; + mModel->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("MIME") << tr("Size") << tr("Duration") << tr("MD5")); + + QDirIterator it(curDir, QDir::Files); + mFileView->setUpdatesEnabled(false); + while(it.hasNext()){ + QFileInfo fi = it.next(); + QMimeType mimeType = mimedb.mimeTypeForFile(fi); + qint64 seconds = 0; + Helper::Duration dur; + QString durStr(tr("n/a")); + QLocale l; + QString size = l.toString(fi.size()); + QString md5 = Helper::md5Sum(fi.absoluteFilePath()); + QIcon i(":/huge_bra.png"); + if(mimeType.name().startsWith("video")){ + QJsonDocument jDoc = Helper::streamData(fi.absoluteFilePath()); + QJsonObject jObj = jDoc.object(); + QJsonValue durationV = jObj["format"].toObject()["duration"]; + seconds = durationV.toVariant().toDouble(); + dur = Helper::Duration(seconds); + durStr = dur.toString(); + } + QList<QStandardItem*> items; + QFont f("courier new"); + for(int i = 0; i < 5; ++i){ + QStandardItem *item = new QStandardItem; + item->setFont(f); + item->setEditable(false); + items << item; + } + items[0]->setText(fi.fileName()); + items[1]->setText(mimeType.name()); + items[2]->setText(size); + items[2]->setTextAlignment(Qt::AlignRight); + items[3]->setText(durStr); + items[4]->setText(md5); + root->appendRow(items); + for(int i = 0; i < 5; ++i){ + mFileView->resizeColumnToContents(i); + } + } + mFileView->setUpdatesEnabled(true); + mFileView->setSortingEnabled(true); +} @@ -5,6 +5,8 @@ class QComboBox; class QTreeView; +class QStandardItemModel; +class QSortFilterProxyModel; class FSWidget : public QWidget { Q_OBJECT @@ -19,12 +21,15 @@ class FSWidget : public QWidget { private slots: void insertItem(QComboBox *cb, const QString &text); void removeItem(QComboBox *cb); + void gatherData(const QString &curDir); private: void setupWidget(); QComboBox *mDirCB; QComboBox *mFilterCB; QTreeView *mFileView; + QStandardItemModel *mModel; + QSortFilterProxyModel *mProxy; }; #endif // FSWIDGET_H |