summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fileview.cpp14
-rw-r--r--fileview.h5
-rw-r--r--helper.cpp34
-rw-r--r--helper.h17
-rw-r--r--shemov.cpp15
-rw-r--r--shemov.h3
-rw-r--r--smdirmodel.cpp10
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(){
diff --git a/fileview.h b/fileview.h
index 9f82260..fac6f21 100644
--- a/fileview.h
+++ b/fileview.h
@@ -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
diff --git a/helper.cpp b/helper.cpp
index 174f585..07a66c0 100644
--- a/helper.cpp
+++ b/helper.cpp
@@ -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;
+ }
+
+}
diff --git a/helper.h b/helper.h
index a93406a..23ac261 100644
--- a/helper.h
+++ b/helper.h
@@ -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
diff --git a/shemov.cpp b/shemov.cpp
index 107959b..6aa7c74 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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);
diff --git a/shemov.h b/shemov.h
index 54bcb66..f42fc51 100644
--- a/shemov.h
+++ b/shemov.h
@@ -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);
}