107 lines
2.6 KiB
C++
107 lines
2.6 KiB
C++
#include "qcodeedit_completer_p.h"
|
|
#include <QHeaderView>
|
|
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
|
|
bool QCodeEditCompleter::isEmpty() const {
|
|
return topLevelItemCount() <= 1;
|
|
}
|
|
|
|
|
|
void QCodeEditCompleter::invoke(QPoint global_pos) {
|
|
if (isEmpty()) {
|
|
hide();
|
|
return;
|
|
}
|
|
setCurrentItem(topLevelItem(1));
|
|
if (isHidden())
|
|
move(global_pos);
|
|
setVisible(true);
|
|
adjust();
|
|
}
|
|
|
|
|
|
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);
|
|
}
|