#include #include #include //#include #include #include #include #include #include "collectionwidget.h" #include "collectionwidgetproxy.h" #include "helper.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); QLabel *filterL = new QLabel(tr("&Filter:")); QHBoxLayout *filterLayout = new QHBoxLayout; mFilter = new QLineEdit; filterL->setBuddy(mFilter); QAction *clearFilter = new QAction(Helper::iconFromQChar(QChar(0x2694), 28), tr("Clear filter"), this); connect(clearFilter, &QAction::triggered, [this, proxy] { mFilter->clear(); proxy->setFilterRegExp("");} ); QAction *activateFilter = new QAction(Helper::iconFromQChar(QChar(0x2245), 28), tr("Filter!"), this); connect(activateFilter, &QAction::triggered, [this, proxy] { proxy->setFilterRegExp(mFilter->text()); expandFirst(proxy); } ); connect(mFilter, &QLineEdit::returnPressed, activateFilter, &QAction::trigger); QToolBar *filterTB = new QToolBar; filterTB->addAction(activateFilter); filterTB->addAction(clearFilter); filterLayout->addWidget(filterL); filterLayout->addWidget(mFilter); filterLayout->addWidget(filterTB); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(filterLayout); 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); } }