67 lines
1.7 KiB
C++
67 lines
1.7 KiB
C++
#include "completionview.h"
|
|
|
|
#include <QHeaderView>
|
|
|
|
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<History::Entry> &entries)
|
|
{
|
|
clear();
|
|
if (entries.isEmpty()) {
|
|
hide();
|
|
return;
|
|
}
|
|
|
|
QList<QTreeWidgetItem *> 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);
|
|
}
|