diff options
author | Arno <am@disconnect.de> | 2010-06-24 21:26:44 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-06-24 21:26:44 +0200 |
commit | 7ad391f932c9ec33cccf49eff8996ccaf2d303d5 (patch) | |
tree | 0d6afdf4c4d69505a122c842424f9f9def7a7a8c /archivetreeview.cpp | |
parent | 32243b83a02e479e772d7d6fd94ddc35fd7d6880 (diff) | |
download | SheMov-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.cpp | 50 |
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); } |