store history using sqlite, add suggestion with open

This commit is contained in:
2026-10-15 23:22:32 +02:00
parent a841178cf7
commit 13c1488b0e
12 changed files with 435 additions and 5 deletions
+66
View File
@@ -0,0 +1,66 @@
#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);
}