diff options
-rw-r--r-- | archivetreeview.cpp | 1 | ||||
-rw-r--r-- | filestreemodel.cpp | 8 | ||||
-rw-r--r-- | filestreewidget.cpp | 45 | ||||
-rw-r--r-- | filestreewidget.h | 13 | ||||
-rw-r--r-- | seriestreemodel.cpp | 16 | ||||
-rw-r--r-- | seriestreemodel.h | 3 | ||||
-rw-r--r-- | shemov.cpp | 14 | ||||
-rw-r--r-- | shemov.h | 1 |
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 ¤t, 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 ¤t, 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 @@ -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")); @@ -49,6 +49,7 @@ class SheMov : public QMainWindow { void aboutShemov(); void showStatistics(); void newMovieWizard(); + void setSize(qint64 size); private: void createStatusbar(); |