#include "completionview.h" #include namespace { constexpr int kMaxVisibleRows = 12; } // namespace CompletionView::CompletionView(QWidget *parent) : QTreeWidget(parent) { setObjectName(QStringLiteral("completion")); setFocusPolicy(Qt::NoFocus); setColumnCount(2); setHeaderHidden(true); setRootIsDecorated(false); setUniformRowHeights(true); setFrameShape(QFrame::NoFrame); setSelectionMode(QAbstractItemView::SingleSelection); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setTextElideMode(Qt::ElideRight); header()->setStretchLastSection(false); header()->setSectionResizeMode(QHeaderView::Stretch); hide(); } void CompletionView::setEntries(const QList &entries) { clear(); if (entries.isEmpty()) { hide(); return; } QList items; items.reserve(entries.size()); for (const History::Entry &entry : entries) { auto *item = new QTreeWidgetItem({entry.url, entry.title}); item->setToolTip(0, entry.url); items.append(item); } addTopLevelItems(items); const int rows = qMin(int(entries.size()), kMaxVisibleRows); setFixedHeight(rows * sizeHintForRow(0) + 2 * frameWidth()); show(); } QString CompletionView::cycle(int step) { const int count = topLevelItemCount(); if (count == 0) return {}; QTreeWidgetItem *current = currentItem(); int row = current && current->isSelected() ? indexOfTopLevelItem(current) + step : (step > 0 ? 0 : count - 1); row = ((row % count) + count) % count; QTreeWidgetItem *item = topLevelItem(row); setCurrentItem(item); scrollToItem(item); return item->text(0); }