aboutsummaryrefslogtreecommitdiff
path: root/src/widgets/InputLine.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/widgets/InputLine.cpp27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/widgets/InputLine.cpp b/src/widgets/InputLine.cpp
index 130732c..7e0a2dd 100644
--- a/src/widgets/InputLine.cpp
+++ b/src/widgets/InputLine.cpp
@@ -9,6 +9,8 @@
#include <QWidgetAction>
#include <QWindow>
#include <QtCore>
+#include <QtWidgets/qboxlayout.h>
+#include <QtWidgets/qlineedit.h>
#include "completion/CommandsAdapter.hpp"
#include "widgets/InputLine.hpp"
@@ -29,17 +31,19 @@ InputLine::InputLine(QString defaultInput, QWidget *parentNode)
: QWidget(parentNode) {
setContentsMargins(0, 0, 0, 0);
move(0, 0);
- setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setStyleSheet(rootStyles);
auto layout = new QVBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
+ setLayout(layout);
auto cmdLineBox = new QWidget();
layout->addWidget(cmdLineBox);
auto cmdLineLayout = new QHBoxLayout();
cmdLineBox->setLayout(cmdLineLayout);
cmdLineBox->layout()->setContentsMargins(0, 0, 0, 0);
+ cmdLineBox->setContentsMargins(0, 0, 0, 0);
cmdLineLayout->setSpacing(0);
promptPrefix = new QLabel();
@@ -47,31 +51,44 @@ InputLine::InputLine(QString defaultInput, QWidget *parentNode)
promptPrefix->setContentsMargins(0, 0, 0, 0);
input = new QLineEdit(defaultInput);
input->setFocusPolicy(Qt::StrongFocus);
+ input->setContentsMargins(0, 0, 0, 0);
cmdLineLayout->addWidget(promptPrefix);
cmdLineLayout->addWidget(input);
- setFixedHeight(input->sizeHint().height());
+ cmdLineBox->setFixedHeight(input->sizeHint().height());
setAdapter(new CommandsAdapter());
}
void InputLine::setAdapter(Adapter *adapter) {
- if (this->adapterInstance)
+ if (this->adapterInstance) {
+ layout()->removeWidget(this->adapterInstance->completer());
delete this->adapterInstance;
+ }
this->adapterInstance = adapter;
promptPrefix->setText(adapter->prompt());
- input->setCompleter(adapter->completer());
+
+ auto completer = adapter->completer();
+ layout()->addWidget(completer);
+ completer->move(0, 0);
+ connect(input, &QLineEdit::textChanged, completer, &Completer::onTextChange);
+ connect(completer, &Completer::accepted, input, &QLineEdit::setText);
}
void InputLine::emitSubmit() { emit submitted(getInputText()); }
void InputLine::keyPressEvent(QKeyEvent *event) {
auto combo = event->keyCombination();
+
+ // Forward events to completer first
+ bool shouldStop = adapterInstance->completer()->onKeyPressEvent(event);
+ if (shouldStop)
+ return;
+
auto ctrlL = combo.key() == Qt::Key_L &&
combo.keyboardModifiers().testFlag(Qt::ControlModifier);
auto esc = combo.key() == Qt::Key_Escape;
auto enter = combo.key() == Qt::Key_Return || combo.key() == Qt::Key_Enter;
-
if (esc || ctrlL)
emit cancelled();
else if (enter)