summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-07-17 17:43:01 +0200
committerArno <am@disconnect.de>2010-07-17 17:43:01 +0200
commita7a6b1c9f8f718b3082e6cc373459a1eba508848 (patch)
tree9b78f8735222d5386a8f88b06dd5b57ee510bb70
parent7be84b2dfb0d300ba03801f43b49364a41ed02f8 (diff)
downloadSheMov-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.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();