Files
qad/libs/widgets/qcodeedit_completer_p.cpp

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);
}