diff options
author | Arno <am@disconnect.de> | 2010-07-17 17:43:01 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-07-17 17:43:01 +0200 |
commit | a7a6b1c9f8f718b3082e6cc373459a1eba508848 (patch) | |
tree | 9b78f8735222d5386a8f88b06dd5b57ee510bb70 | |
parent | 7be84b2dfb0d300ba03801f43b49364a41ed02f8 (diff) | |
download | SheMov-a7a6b1c9f8f718b3082e6cc373459a1eba508848.tar.gz SheMov-a7a6b1c9f8f718b3082e6cc373459a1eba508848.tar.bz2 SheMov-a7a6b1c9f8f718b3082e6cc373459a1eba508848.zip |
Preparation for new move to burn implementation
Show size of selected items in status bar when files are selected in the
FileView. Also show series name of current selected file in the general
status bar.
-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(); |