mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 22:09:52 +08:00
99 lines
2.1 KiB
C++
99 lines
2.1 KiB
C++
#include "vlineedit.h"
|
|
|
|
#include <QKeyEvent>
|
|
|
|
#include "utils/vutils.h"
|
|
|
|
VLineEdit::VLineEdit(QWidget *p_parent)
|
|
: QLineEdit(p_parent),
|
|
m_ctrlKEnabled(true),
|
|
m_ctrlEEnabled(true)
|
|
{
|
|
}
|
|
|
|
VLineEdit::VLineEdit(const QString &p_contents, QWidget *p_parent)
|
|
: QLineEdit(p_contents, p_parent),
|
|
m_ctrlKEnabled(true),
|
|
m_ctrlEEnabled(true)
|
|
{
|
|
}
|
|
|
|
void VLineEdit::keyPressEvent(QKeyEvent *p_event)
|
|
{
|
|
// Note that QKeyEvent starts with isAccepted() == true, so you do not
|
|
// need to call QKeyEvent::accept() - just do not call the base class
|
|
// implementation if you act upon the key.
|
|
|
|
bool accept = false;
|
|
int modifiers = p_event->modifiers();
|
|
switch (p_event->key()) {
|
|
case Qt::Key_H:
|
|
// Backspace.
|
|
if (VUtils::isControlModifierForVim(modifiers)) {
|
|
backspace();
|
|
accept = true;
|
|
}
|
|
|
|
break;
|
|
|
|
case Qt::Key_W:
|
|
// Delete one word backward.
|
|
if (VUtils::isControlModifierForVim(modifiers)) {
|
|
if (!hasSelectedText()) {
|
|
cursorWordBackward(true);
|
|
}
|
|
|
|
backspace();
|
|
accept = true;
|
|
}
|
|
|
|
break;
|
|
|
|
case Qt::Key_U:
|
|
{
|
|
if (VUtils::isControlModifierForVim(modifiers)) {
|
|
if (hasSelectedText()) {
|
|
backspace();
|
|
} else {
|
|
int pos = cursorPosition();
|
|
if (pos > 0) {
|
|
cursorBackward(true, pos);
|
|
backspace();
|
|
}
|
|
}
|
|
|
|
accept = true;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case Qt::Key_K:
|
|
{
|
|
if (VUtils::isControlModifierForVim(modifiers) && !m_ctrlKEnabled) {
|
|
QWidget::keyPressEvent(p_event);
|
|
accept = true;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case Qt::Key_E:
|
|
{
|
|
if (VUtils::isControlModifierForVim(modifiers) && !m_ctrlEEnabled) {
|
|
QWidget::keyPressEvent(p_event);
|
|
accept = true;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (!accept) {
|
|
QLineEdit::keyPressEvent(p_event);
|
|
}
|
|
}
|