#include #include #include #include #include #include #include #include "collectionwidget.h" #include "collectionwidgetproxy.h" CollectionWidget::CollectionWidget(QWidget *parent) : QWidget(parent){ mCustomActions = new QActionGroup(this); mView = new BeetView; mModel = new QStandardItemModel(this); CollectionWidgetProxy *proxy = new CollectionWidgetProxy(this); proxy->setSourceModel(mModel); mView->setModel(proxy); mView->setSortingEnabled(true); mView->setAlternatingRowColors(true); mView->setSelectionMode(QAbstractItemView::ExtendedSelection); QGroupBox *filterGB = new QGroupBox(tr("Filter")); QHBoxLayout *filterGBL = new QHBoxLayout; mFilter = new QLineEdit; filterGBL->addWidget(mFilter); QToolBar *filterTB = new QToolBar; QAction *clearFilter = new QAction(QIcon(":/clean_tampon.png"), tr("Clear filter"), this); connect(clearFilter, &QAction::triggered, [this, proxy] { mFilter->clear(); proxy->setFilterRegExp("");} ); filterTB->addAction(clearFilter); QAction *activateFilter = new QAction(QIcon(":/stomp.png"), tr("Filter!"), this); connect(activateFilter, &QAction::triggered, [this, proxy] { proxy->setFilterRegExp(mFilter->text()); expandFirst(proxy); } ); connect(mFilter, &QLineEdit::returnPressed, activateFilter, &QAction::trigger); filterTB->addAction(activateFilter); filterGBL->addWidget(filterTB); filterGB->setLayout(filterGBL); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(filterGB); mainLayout->addWidget(mView); setLayout(mainLayout); } void CollectionWidget::enableSorting(int column, Qt::SortOrder sortOrder){ view()->setSortingEnabled(true); view()->sortByColumn(column, sortOrder); } void CollectionWidget::expandFirst(QSortFilterProxyModel *proxy){ int row = 0; QModelIndex idx = proxy->index(0, 0); while(idx.isValid()){ mView->expand(idx); idx = proxy->index(++row, 0); } }