summaryrefslogtreecommitdiffstats
path: root/archivetreeview.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-06-24 21:26:44 +0200
committerArno <am@disconnect.de>2010-06-24 21:26:44 +0200
commit7ad391f932c9ec33cccf49eff8996ccaf2d303d5 (patch)
tree0d6afdf4c4d69505a122c842424f9f9def7a7a8c /archivetreeview.cpp
parent32243b83a02e479e772d7d6fd94ddc35fd7d6880 (diff)
downloadSheMov-7ad391f932c9ec33cccf49eff8996ccaf2d303d5.tar.gz
SheMov-7ad391f932c9ec33cccf49eff8996ccaf2d303d5.tar.bz2
SheMov-7ad391f932c9ec33cccf49eff8996ccaf2d303d5.zip
Made FilesTreeWidget work
It wasn't as easy as I thought. Quite big changes: 1. I changed the query for setIds in FilesTreeModel. Initially it executed a database query for every id. Changed it to WHERE seriespart_id IN (ids). I didn't have a chance to test the first version, but this one is blazing fast. 2. Fixed a recursio ad infinitum in FilesTreeModel. This happens if you call data() from data(). Either use the *item or use a role different from what you've been called. 3. Introduce a new function in SeriesTreeModel: QList<QVariant> childrenColumnList. It returns a QList from the children values of the given column. 4. Lot's of UI changes. Hide unneded columns, align the remaining ones properly. What doesn't work: we can't let the database do the sorting of files. We need a proxy for this.
Diffstat (limited to 'archivetreeview.cpp')
-rw-r--r--archivetreeview.cpp50
1 files changed, 42 insertions, 8 deletions
diff --git a/archivetreeview.cpp b/archivetreeview.cpp
index d59d723..211aa37 100644
--- a/archivetreeview.cpp
+++ b/archivetreeview.cpp
@@ -11,6 +11,7 @@
#include <QVBoxLayout>
#include <QItemSelectionModel>
#include <QAbstractItemModel>
+#include <QItemSelection>
#include "archivetreeview.h"
#include "smmodelsingleton.h"
@@ -18,18 +19,22 @@
#include "seriestreewidget.h"
#include "filestreewidget.h"
#include "filestreemodel.h"
+#include "seriestreemodel.h"
ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){
// series view
mSeriesWidget = new SeriesTreeWidget;
QItemSelectionModel *selModel = mSeriesWidget->seriesTree()->selectionModel();
- connect(selModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(currentChanged()));
+ connect(selModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(currentChanged(QItemSelection,QItemSelection)));
+ mSeriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel"));
// files view
mFilesWidget = new FilesTreeWidget;
- QAbstractItemModel *filesModel = SmModelSingleton::instance()->model("FilesTreeModel");
+ QAbstractItemModel *filesModel = SmModelSingleton::instance()->model("FilesModel");
mFilesModel = static_cast<FilesTreeModel*>(filesModel);
-
+ for(int i = 5; i < 11; ++i){
+ mFilesWidget->filesTree()->setColumnHidden(i, true);
+ }
// layout
QHBoxLayout *mainLayout = new QHBoxLayout;
@@ -40,13 +45,42 @@ ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){
setLayout(mainLayout);
}
-void ArchiveTreeView::currentChanged(){
- QModelIndexList sel = mSeriesWidget->seriesTree()->selectionModel()->selectedRows();
- if(sel.isEmpty()){
+void ArchiveTreeView::currentChanged(const QItemSelection &selected, const QItemSelection &deselected){
+ foreach(QModelIndex i, deselected.indexes()){
+ mSelectedItems.removeAll(i);
+ }
+ foreach(QModelIndex i, selected.indexes()){
+ if(!mSelectedItems.contains(i)){
+ mSelectedItems << i;
+ }
+ }
+ if(mSelectedItems.isEmpty()){
return;
}
- mSelectedPartIds.clear();
- foreach(QModelIndex i, sel){
+ QList<int> selectedPartIds;
+ QModelIndexList realSel = mSeriesWidget->mapToSource(mSelectedItems);
+ foreach(QModelIndex i, realSel){
+ if(i.data(SeriesTreeModel::TypeRole).toInt() == SeriesTreeModel::Series){
+ QList<QVariant> ids = mSeriesModel->childrenColumnList(i, SeriesTreeModel::SeriesPartId);
+ foreach(QVariant id, ids){
+ int thisId = id.toInt();
+ if(!selectedPartIds.contains(thisId)){
+ selectedPartIds << thisId;
+ }
+ }
+ }
+ if(i.data(SeriesTreeModel::TypeRole).toInt() == SeriesTreeModel::Part){
+ int thisId = i.data(SeriesTreeModel::SeriesPartIdRole).toInt();
+ if(!selectedPartIds.contains(thisId)){
+ selectedPartIds << thisId;
+ }
+ }
}
+ mFilesModel->setIds(selectedPartIds);
+ mFilesWidget->filesTree()->expandAll();
+ mFilesWidget->filesTree()->resizeColumnToContents(0);
+ mFilesWidget->filesTree()->resizeColumnToContents(1);
+ mFilesWidget->filesTree()->resizeColumnToContents(2);
+ mFilesWidget->filesTree()->resizeColumnToContents(3);
}