QCodeEdit completer refactor and works fine!
This commit is contained in:
106
libs/widgets/qcodeedit_completer_p.cpp
Normal file
106
libs/widgets/qcodeedit_completer_p.cpp
Normal file
@@ -0,0 +1,106 @@
|
||||
#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::ACPair & 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.first);
|
||||
ni->setText(1, s.second);
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user