/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include "archivetreeview.h" #include "smmodelsingleton.h" #include "smtreemodel.h" #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(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(currentChanged(QItemSelection,QItemSelection))); mSeriesModel = static_cast(SmModelSingleton::instance()->model("SeriesModel")); // files view mFilesWidget = new FilesTreeWidget; QAbstractItemModel *filesModel = SmModelSingleton::instance()->model("FilesModel"); mFilesModel = static_cast(filesModel); for(int i = 5; i < 11; ++i){ mFilesWidget->filesTree()->setColumnHidden(i, true); } // layout QHBoxLayout *mainLayout = new QHBoxLayout; QSplitter *splitter = new QSplitter; splitter->addWidget(mSeriesWidget); splitter->addWidget(mFilesWidget); mainLayout->addWidget(splitter); setLayout(mainLayout); } 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; } QList selectedPartIds; QModelIndexList realSel = mSeriesWidget->mapToSource(mSelectedItems); foreach(QModelIndex i, realSel){ if(i.data(SeriesTreeModel::TypeRole).toInt() == SeriesTreeModel::Series){ QList 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); }