summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archivetreeview.cpp1
-rw-r--r--filestreemodel.cpp8
-rw-r--r--filestreewidget.cpp45
-rw-r--r--filestreewidget.h13
-rw-r--r--seriestreemodel.cpp16
-rw-r--r--seriestreemodel.h3
-rw-r--r--shemov.cpp14
-rw-r--r--shemov.h1
8 files changed, 100 insertions, 1 deletions
diff --git a/archivetreeview.cpp b/archivetreeview.cpp
index 19f5ae6..661cd20 100644
--- a/archivetreeview.cpp
+++ b/archivetreeview.cpp
@@ -87,6 +87,7 @@ void ArchiveTreeView::setFileViewMode(int mode){
default:
;
}
+ mFilesWidget->resetSize();
mFilesModel->setMode(mode);
mFilesWidget->filesTree()->expandAll();
mFilesWidget->filesTree()->resizeColumnToContents(0);
diff --git a/filestreemodel.cpp b/filestreemodel.cpp
index 655fc1e..348e536 100644
--- a/filestreemodel.cpp
+++ b/filestreemodel.cpp
@@ -100,6 +100,14 @@ QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{
return Qt::AlignRight;
}
}
+ if(role == Qt::ForegroundRole){
+ if(index.column() == SizeDisplay){
+ if(item->data(Size).toLongLong() > Q_INT64_C(2147483648)){
+ return QColor(Qt::red);
+ }
+ return QColor(Qt::green);
+ }
+ }
if(role == FileNameRole){
return item->data(FileName);
}
diff --git a/filestreewidget.cpp b/filestreewidget.cpp
index 8d9a435..7af3f6f 100644
--- a/filestreewidget.cpp
+++ b/filestreewidget.cpp
@@ -12,20 +12,63 @@
#include "filestreewidget.h"
#include "smmodelsingleton.h"
#include "filestreemodel.h"
+#include "seriestreemodel.h"
-FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent){
+FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent), mSelectedSize(0){
//the view
mView = new FilesTreeView;
+ mView->setSelectionMode(QAbstractItemView::ExtendedSelection);
mModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel"));
mProxy = new FilesTreeSortModel(this);
mProxy->setSourceModel(mModel);
mView->setModel(mProxy);
mView->setSortingEnabled(true);
+ QItemSelectionModel *selModel = mView->selectionModel();
+ connect(selModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(fileSelectionChanged(QModelIndex,QModelIndex)));
+ connect(selModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(fileSelectionChanged(QItemSelection,QItemSelection)));
//layout
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(mView);
setLayout(mainLayout);
+
+ //series model
+ mSeriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
+}
+
+void FilesTreeWidget::fileSelectionChanged(const QModelIndex &current, const QModelIndex &previous){
+ Q_UNUSED(previous);
+ int seriesPartId = current.data(FilesTreeModel::SeriesPartIdRole).toInt();
+ int seriesId = mSeriesModel->seriesIdByPartId(seriesPartId);
+ int filePart = current.data(FilesTreeModel::PartNoRole).toInt();
+ QModelIndex seriesIdx = mSeriesModel->findValue(seriesId, QModelIndex(), SeriesTreeModel::SeriesId);
+ if(seriesIdx.isValid()){
+ QModelIndex seriesPartIdx = mSeriesModel->findValue(seriesPartId, seriesIdx, SeriesTreeModel::SeriesPartId);
+ QString seriesNumber = QString::number(seriesPartIdx.data(SeriesTreeModel::SeriesPartRole).toInt());
+ QString msg;
+ if(filePart != 0){
+ msg = QString(tr("%1 %2 (%3)")).arg(seriesIdx.data(SeriesTreeModel::NameRole).toString()).arg(seriesNumber).arg(filePart);
+ }else{
+ msg = QString(tr("%1 %2")).arg(seriesIdx.data(SeriesTreeModel::NameRole).toString()).arg(seriesNumber);
+ }
+ emit statusMessage(msg);
+ }
+}
+
+void FilesTreeWidget::fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){
+ QModelIndexList sel = selected.indexes();
+ QModelIndexList desel = deselected.indexes();
+ foreach(QModelIndex i, sel){
+ if(i.column() == 0){
+ mSelectedSize += i.data(FilesTreeModel::SizeRole).toLongLong();
+ }
+ }
+ foreach(QModelIndex i, desel){
+ if(i.column() == 0){
+ mSelectedSize -= i.data(FilesTreeModel::SizeRole).toLongLong();
+ }
+ }
+ emit sizeChanged(mSelectedSize);
}
FilesTreeView::FilesTreeView(QWidget *parent) : QTreeView(parent){}
diff --git a/filestreewidget.h b/filestreewidget.h
index 55d80b5..a5ef9b6 100644
--- a/filestreewidget.h
+++ b/filestreewidget.h
@@ -15,17 +15,30 @@
class FilesTreeView;
class FilesTreeModel;
class FilesTreeSortModel;
+class SeriesTreeModel;
class FilesTreeWidget : public QWidget {
Q_OBJECT
public:
explicit FilesTreeWidget(QWidget *parent = 0);
FilesTreeView *filesTree() { return mView; }
+ void resetSize() { mSelectedSize = 0; }
+
+ private slots:
+ void fileSelectionChanged(const QModelIndex &current, const QModelIndex &previous);
+ void fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+
+ signals:
+ void sizeChanged(qint64);
+ void statusMessage(QString);
private:
FilesTreeView *mView;
FilesTreeModel *mModel;
FilesTreeSortModel *mProxy;
+ SeriesTreeModel *mSeriesModel;
+ QModelIndexList mSelectedFiles;
+ qint64 mSelectedSize;
};
class FilesTreeView : public QTreeView {
diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp
index 5113ae9..fb993bb 100644
--- a/seriestreemodel.cpp
+++ b/seriestreemodel.cpp
@@ -237,6 +237,13 @@ QFileInfoList SeriesTreeModel::findSortedMovies(const QModelIndex &from) const{
return retval;
}
+int SeriesTreeModel::seriesIdByPartId(int partId){
+ if(mSeriesPartSeriesMap.contains(partId)){
+ return mSeriesPartSeriesMap.value(partId);
+ }
+ return -1;
+}
+
int SeriesTreeModel::findNextDvdNo() const{
int dvdno = 0;
mNextDvdNoQuery->exec();
@@ -308,6 +315,7 @@ bool SeriesTreeModel::addSeriesPart(int seriesPart, const QModelIndex &parent){
partData << parent.data(NameRole) << seriesId << id << seriesPart << Part;
if(addRow(partData, parent)){
mDb.commit();
+ mSeriesPartSeriesMap.insert(id, seriesId);
return true;
}
}
@@ -331,6 +339,7 @@ void SeriesTreeModel::populate(){
partData << seriesData.at(Name) << seriesData.at(SeriesId) << mSeriesPartsQuery->value(0) << mSeriesPartsQuery->value(1) << Part;
SmTreeItem *partItem = new SmTreeItem(partData, seriesItem);
seriesItem->appendChild(partItem);
+ mSeriesPartSeriesMap.insert(mSeriesPartsQuery->value(0).toInt(), seriesData.at(1).toInt());
}
}
setRoot(rootItem);
@@ -358,6 +367,13 @@ bool SeriesTreeModel::mergeSeries(const QModelIndex &from, const QModelIndex &to
//series has to be empty
root()->removeChild(from.row());
}
+ //update seriespartmap
+ QList<int> seriesPartIds = mSeriesPartSeriesMap.keys(oldSeriesId);
+ foreach(int seriesPartId, seriesPartIds){
+ mSeriesPartSeriesMap.remove(seriesPartId);
+ mSeriesPartSeriesMap.insert(seriesPartId, newSeriesId);
+ }
+
reset();
return true;
}
diff --git a/seriestreemodel.h b/seriestreemodel.h
index b25198b..59d5b87 100644
--- a/seriestreemodel.h
+++ b/seriestreemodel.h
@@ -11,6 +11,7 @@
#include <QSqlDatabase>
#include <QFileInfoList>
#include <QList>
+#include <QHash>
#include "smtreemodel.h"
@@ -36,6 +37,7 @@ class SeriesTreeModel : public SmTreeModel {
QFileInfoList findFiles(const QModelIndex &where) const;
QFileInfoList findMovies(const QModelIndexList &from) const;
QFileInfoList findSortedMovies(const QModelIndex &from) const;
+ int seriesIdByPartId(int partId);
int findNextDvdNo() const;
//series data manipulation
@@ -63,6 +65,7 @@ class SeriesTreeModel : public SmTreeModel {
QSqlQuery *mSeriesPartInsertQuery;
QSqlQuery *mSortedMovieListQuery;
QSqlQuery *mNextDvdNoQuery;
+ QHash<int, int> mSeriesPartSeriesMap;
};
#endif // SERIESTREEMODEL_H
diff --git a/shemov.cpp b/shemov.cpp
index 4313d53..e662bdd 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -48,6 +48,7 @@
#include "smmodelsingleton.h"
#include "seriestreewidget.h"
#include "newmoviewizard.h"
+#include "filestreewidget.h"
SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), mOpenWithGroupFS(0), mOpenWithGroupAV(0) {
qApp->setWindowIcon(QIcon(":/shemov.png"));
@@ -80,6 +81,8 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla
connect(mAVWidget, SIGNAL(windowTitle(const QString &)), this, SLOT(newWindowTitle(const QString &)));
mATree = new ArchiveTreeView;
mTab->addTab(mATree, "Tree");
+ connect(mATree->filesWidget(), SIGNAL(statusMessage(QString)), this, SLOT(statusbarMessage(QString)));
+ connect(mATree->filesWidget(), SIGNAL(sizeChanged(qint64)), this, SLOT(setSize(qint64)));
mAEdit = new ArchiveEditDialog(this);
mFSWidget->setArchiveDialog(mAEdit);
@@ -253,6 +256,17 @@ void SheMov::newMovieWizard(){
wiz.exec();
}
+void SheMov::setSize(qint64 size){
+ QLocale l;
+ QString val;
+ if(size < Q_INT64_C(4707319808)){
+ val = QString("<span style=\"color:#008000\">%1</span>").arg(l.toString(size));
+ }else{
+ val = QString("<span style=\"color:#ff0000\">%1</span>").arg(l.toString(size));
+ }
+ mSelectedSize->setText(val);
+}
+
void SheMov::createStatusbar(){
QLabel *selSizeL = new QLabel(tr("Sel. Size"));
mSelectedSize = new QLabel(tr("nothing selected yet"));
diff --git a/shemov.h b/shemov.h
index 2c7477d..ca7e840 100644
--- a/shemov.h
+++ b/shemov.h
@@ -49,6 +49,7 @@ class SheMov : public QMainWindow {
void aboutShemov();
void showStatistics();
void newMovieWizard();
+ void setSize(qint64 size);
private:
void createStatusbar();