diff options
-rw-r--r-- | fileview.cpp | 14 | ||||
-rw-r--r-- | fileview.h | 5 | ||||
-rw-r--r-- | helper.cpp | 34 | ||||
-rw-r--r-- | helper.h | 17 | ||||
-rw-r--r-- | shemov.cpp | 15 | ||||
-rw-r--r-- | shemov.h | 3 | ||||
-rw-r--r-- | smdirmodel.cpp | 10 |
7 files changed, 94 insertions, 4 deletions
diff --git a/fileview.cpp b/fileview.cpp index b5766ca..b864ed0 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -32,7 +32,6 @@ #include "smglobals.h" #include "filesystemfileproxy.h" #include "smdirmodel.h" -#include "helper.h" FileView::FileView(QWidget *parent) : QTreeView(parent), mDeleteA(0) { setAttribute(Qt::WA_Hover); @@ -50,6 +49,12 @@ void FileView::setModel(QAbstractItemModel *model){ QTreeView::setModel(model); } +const QVariant FileView::duration() const { + QVariant retval; + retval.setValue(mDuration); + return retval;; +} + void FileView::markFiles(){ bool ok; QString title = QString(tr("%1 - %2")).arg(qApp->applicationName()).arg(tr("Mark files")); @@ -221,10 +226,17 @@ void FileView::selectedFilesChanged(){ QModelIndexList selected = selectionModel()->selectedRows(); emit numSelected(selected.size()); qint64 selSize = 0; + Helper::Duration dur; foreach(QModelIndex i, selected){ selSize += i.data(SmDirModel::SizeRole).toLongLong(); + Helper::Duration curDur = i.data(SmDirModel::DurationRole).value<Helper::Duration>(); + dur = dur + curDur; } emit selectedSize(selSize); + mDuration = dur; + QVariant duration; + duration.setValue(dur); + emit selectedDuration(duration); } void FileView::saveSelection(){ @@ -10,6 +10,8 @@ #include <QtWidgets/QTreeView> +#include "helper.h" + class QContextMenuEvent; class QKeyEvent; class QResizeEvent; @@ -27,6 +29,7 @@ class FileView : public QTreeView { FileView(QWidget *parent = 0); ~FileView() {} virtual void setModel(QAbstractItemModel *model); + const QVariant duration() const; signals: void upDir(); @@ -36,6 +39,7 @@ class FileView : public QTreeView { void editorClosed(const QModelIndex &idx); void numSelected(int); void selectedSize(qint64); + void selectedDuration(QVariant); public slots: void markFiles(); @@ -73,6 +77,7 @@ class FileView : public QTreeView { QList<QString> mMd5Sums; FilesystemFileProxy *mProxy; SmDirModel *mModel; + Helper::Duration mDuration; }; #endif @@ -235,7 +235,7 @@ namespace Helper { QString llc = l.toLower(); if(llc.contains("duration")){ int idx = llc.indexOf("duration:"); - retval[0] = llc.mid(idx + 10, 8); + retval[0].setValue(Duration(llc.mid(idx + 10, 8))); idx = llc.indexOf("bitrate:"); retval[1] = llc.mid(idx + 9); break; @@ -243,5 +243,35 @@ namespace Helper { } return retval; } -} + Duration::Duration() : mHours(0), mMinutes(0), mSeconds(0) {} + + Duration::Duration(const QString &dur) : mHours(0), mMinutes(0), mSeconds(0){ + QStringList parts = dur.split(':'); + if(parts.size() == 3){ + mHours = parts.at(0).toInt(); + mMinutes = parts.at(1).toInt(); + mSeconds = parts.at(2).toInt(); + } + } + + Duration Duration::operator+(const Duration &dur) const{ + Duration retval; + retval.mSeconds = mSeconds + dur.mSeconds; + retval.mMinutes = mMinutes + dur.mMinutes + retval.mSeconds / 60; + retval.mSeconds %= 60; + retval.mHours = mHours + dur.mHours + retval.mMinutes / 60; + retval.mMinutes %= 60; + return retval; + } + + const QString Duration::toString() const { + QString retval = QString("%1:%2:%3").arg(QString::number(mHours), 2, '0').arg(QString::number(mMinutes), 2, '0').arg(QString::number(mSeconds), 2, '0'); + return retval; + } + + bool Duration::isNull() const { + return mHours == 0 && mMinutes == 0 && mSeconds == 0; + } + +} @@ -12,6 +12,7 @@ #include <QStringList> #include <QVariant> #include <QList> +#include <QMetaType> #include <magic.h> @@ -32,7 +33,23 @@ namespace Helper { const QString colorToHtml(const QColor &color); void centerWidget(QWidget *widget); QList<QVariant> duration(const QString &path); + class Duration { + public: + Duration(); + Duration(const QString &dur); + Duration operator+(const Duration &dur) const; + const QString toString() const; + bool isNull() const; + + private: + int mHours; + int mMinutes; + int mSeconds; + }; } + +Q_DECLARE_METATYPE(Helper::Duration) + #endif @@ -127,6 +127,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla splash.showMessage(tr("Finishing..."), Qt::AlignHCenter, Qt::yellow); qApp->processEvents(); connect(mFSWidget->fileView(), SIGNAL(selectedSize(qint64)), this, SLOT(setSize(qint64))); + connect(mFSWidget->fileView(), SIGNAL(selectedDuration(QVariant)), this, SLOT(setDuration(QVariant))); connect(mFSWidget->fileView(), SIGNAL(numSelected(int)), this, SLOT(updateSelectedCount(int))); connect(mFSWidget, SIGNAL(windowTitle(QString)), this, SLOT(setWindowTitle(QString))); connect(mFSWidget->fileView(), SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &))); @@ -202,14 +203,16 @@ void SheMov::tabChanged(int newTab){ mPVSelectAllA->disconnect(); mPVShowNPDialogA->setEnabled(newTab == 0); mPVAddToNPA->setEnabled(newTab == 0); + statusbarMessage(QString()); switch(newTab){ case 0: connect(mPVSelectAllA, SIGNAL(triggered()), mFSWidget, SLOT(selectAllPV())); + setDuration(mFSWidget->fileView()->duration()); break; case 2: connect(mPVSelectAllA, SIGNAL(triggered()), mPicWidget->picView(), SLOT(setPVAll())); - break; default: + setDuration(QVariant()); ;; } } @@ -327,6 +330,11 @@ void SheMov::setSize(qint64 size){ mSelectedSize->setText(val); } +void SheMov::setDuration(const QVariant dur){ + Helper::Duration d = dur.value<Helper::Duration>(); + mSelectedDuration->setText(d.toString()); +} + QAction *SheMov::createSeparator(){ QAction *tmp = new QAction(this); tmp->setSeparator(true); @@ -349,6 +357,11 @@ QSignalMapper *SheMov::createHeaderMapper(SmTreeModel *model, QActionGroup *grou } void SheMov::createStatusbar(){ + QLabel *selDurL = new QLabel(tr("Duration")); + mSelectedDuration = new QLabel("00:00:00"); + mSelectedDuration->setFrameStyle(QFrame::Panel | QFrame::Sunken); + statusBar()->addPermanentWidget(selDurL); + statusBar()->addPermanentWidget(mSelectedDuration); QLabel *selSizeL = new QLabel(tr("Sel. Size")); mSelectedSize = new QLabel(tr("nothing selected yet")); mSelectedSize->setFrameStyle(QFrame::Panel | QFrame::Sunken); @@ -11,6 +11,7 @@ #include <QtWidgets/QMainWindow> #include <QList> #include <QThread> +#include <QVariant> class QTabWidget; class FilesystemWidget; @@ -48,6 +49,7 @@ class SheMov : public QMainWindow { void newMovieWizard(); void newMovieWizardWithFiles(); void setSize(qint64 size); + void setDuration(const QVariant dur); void checkConsistency(); void analyzeDb(); void analyzeDelete(int mode, QList<int> &ids); @@ -76,6 +78,7 @@ class SheMov : public QMainWindow { void createPalette(); //Statusbar Items + QLabel *mSelectedDuration; QLabel *mSelectedItems; QLabel *mSlideLabel; QLabel *mSelectedSize; diff --git a/smdirmodel.cpp b/smdirmodel.cpp index ea44ccd..00857ab 100644 --- a/smdirmodel.cpp +++ b/smdirmodel.cpp @@ -69,6 +69,16 @@ QVariant SmDirModel::data(const QModelIndex &index, int role) const{ return mIcons.value(mime.at(0).toLower()); } } + case Qt::DisplayRole: { + if(index.column() == Duration){ + Helper::Duration d = i->data(Duration).value<Helper::Duration>(); + if(d.isNull()){ + return QVariant(); + } + return d.toString(); + } + } + default: return SmTreeModel::data(index, role); } |