/* 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 "archivebrowser.h" #include "archivebrowsermodel.h" #include "smtreeview.h" #include "smglobals.h" #include "delegates.h" ArchiveBrowser::ArchiveBrowser(QWidget *parent) : QWidget(parent), mSelectedSize(0), mSelectedItems(0){ //prep mModel = static_cast(SmGlobals::instance()->model("BrowserModel")); mProxy = new ArchiveBrowserModelProxy; mProxy->setSourceModel(mModel); mTree = new SmTreeView("ui/archivebrowserheaders"); mTree->setModel(mProxy); mTree->setColumnHidden(ArchiveBrowserModel::GenericId, true); mTree->setColumnHidden(ArchiveBrowserModel::NodeType, true); mTree->setItemDelegateForColumn(ArchiveBrowserModel::TotalSize, new SizeDelegate(this)); mTree->setItemDelegateForColumn(ArchiveBrowserModel::FileType, new FileTypeDelegate(this)); mTree->setSelectionMode(QAbstractItemView::ExtendedSelection); //filters QHBoxLayout *filterLayout = new QHBoxLayout; mQualityFilter = new QComboBox; QLabel *filterL = new QLabel(tr("Filters:")); QLabel *qualityL = new QLabel(tr("Quality")); filterLayout->addWidget(filterL); filterLayout->addWidget(qualityL); setupQualityFilter(); connect(mQualityFilter, SIGNAL(currentIndexChanged(QString)), mProxy, SLOT(setQualityFilter(QString))); filterLayout->addWidget(mQualityFilter); mSizeFilter = new QCheckBox(tr("Size Filter")); connect(mSizeFilter, SIGNAL(stateChanged(int)), mProxy, SLOT(setSizeFilter(int))); filterLayout->addWidget(mSizeFilter); filterLayout->addStretch(); //connect connect(mTree->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(browserSelectionChanged(QItemSelection,QItemSelection))); //make widget QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(filterLayout); mainLayout->addWidget(mTree); setLayout(mainLayout); mTree->setSortingEnabled(true); } void ArchiveBrowser::browserSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { QModelIndexList selectedIdx = selectedRows(selected); QModelIndexList deselectedIdx = selectedRows(deselected); foreach(QModelIndex sel, selectedIdx){ mSelectedSize += sel.data(ArchiveBrowserModel::TotalSizeRole).toDouble(); ++mSelectedItems; mModel->setData(sel, true, ArchiveBrowserModel::SelectedRole); } foreach(QModelIndex desel, deselectedIdx){ mSelectedSize -= desel.data(ArchiveBrowserModel::TotalSizeRole).toDouble(); --mSelectedItems; mModel->setData(desel, false, ArchiveBrowserModel::SelectedRole); } emit sizeChanged(mSelectedSize); emit itemCountChanged(mSelectedItems); qint64 remaining = Q_INT64_C(1024 * 1024 * 1024 * 4) - mSelectedSize; mProxy->setBytesRemaining(remaining); } void ArchiveBrowser::readConfig(){ mTree->readHeaderConfig(); QSettings s; QString qualFilter = s.value("ui/browserquality", tr("(none)")).toString(); mQualityFilter->setCurrentText(qualFilter); } void ArchiveBrowser::writeSettings(){ mTree->writeHeaderConfig(); QSettings s; s.setValue("ui/browserquality", mQualityFilter->currentText()); } void ArchiveBrowser::setupQualityFilter(){ mQualityFilter->clear(); QList qualities = mModel->availableQualities(); qSort(qualities); QStringList qualityList = QStringList() << tr("(none)"); foreach(int q, qualities){ qualityList << QString::number(q); } mQualityFilter->addItems(qualityList); } QModelIndexList ArchiveBrowser::selectedRows(const QItemSelection &sel){ QModelIndexList retval; QModelIndexList selIdx = sel.indexes(); foreach(QModelIndex idx, selIdx){ QModelIndex real = mProxy->mapToSource(idx); if(real.column() == 0){ retval << real; } } return retval; }