diff options
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); } |