#include "qcodeedit_completer_p.h" #include QCodeEditCompleter::QCodeEditCompleter(QWidget * parent): QTreeWidget(parent) { setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setFocusPolicy(Qt::NoFocus); setColumnCount(2); setRootIsDecorated(false); setHeaderHidden(true); setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); header()->setDefaultAlignment(Qt::AlignCenter); header()-> #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) setSectionResizeMode #else setResizeMode #endif (QHeaderView::ResizeToContents); header()->setStretchLastSection(false); //connect(verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(adjust())); } QCodeEditCompleter::~QCodeEditCompleter() { } void QCodeEditCompleter::nextCompletition() { int ci = currentIndex().row(); if (ci >= topLevelItemCount() - 1) return; if (topLevelItem(ci + 1)->flags().testFlag(Qt::ItemIsSelectable)) setCurrentItem(topLevelItem(ci + 1)); else { if (ci >= topLevelItemCount() - 2) return; setCurrentItem(topLevelItem(ci + 2)); } } void QCodeEditCompleter::previousCompletition() { int ci = currentIndex().row(); if (ci <= 0) return; if (topLevelItem(ci - 1)->flags().testFlag(Qt::ItemIsSelectable)) setCurrentItem(topLevelItem(ci - 1)); else { if (ci <= 1) return; setCurrentItem(topLevelItem(ci - 2)); } } void QCodeEditCompleter::addItems(QFont f, const QCodeEdit::ACClass & cl, const QCodeEdit::ACSection & items) { QTreeWidgetItem * gi = new QTreeWidgetItem(); gi->setText(0, cl.name); gi->setTextAlignment(0, Qt::AlignCenter); gi->setTextAlignment(1, Qt::AlignCenter); gi->setFont(0, f); gi->setBackground(0, Qt::lightGray); gi->setFlags(Qt::ItemIsEnabled); addTopLevelItem(gi); gi->setFirstColumnSpanned(true); foreach (const auto & s, items.second) { QTreeWidgetItem * ni = new QTreeWidgetItem(); ni->setIcon(0, cl.icon); ni->setText(0, s.type); ni->setText(1, s.name); addTopLevelItem(ni); } } void QCodeEditCompleter::invoke(QPoint global_pos) { if (topLevelItemCount() > 1) setCurrentItem(topLevelItem(1)); if (isHidden()) move(global_pos); if (topLevelItemCount() > 0) { setVisible(true); adjust(); } else { hide(); } } QString QCodeEditCompleter::currentReturn() const { if (!currentItem()) return QString(); return currentItem()->text(0); } QString QCodeEditCompleter::currentValue() const { if (!currentItem()) return QString(); return currentItem()->text(1); } void QCodeEditCompleter::adjust() { int sz = sizeHint().width(); resize(sz, fontHeight() * 16); }