vlineedit.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "vlineedit.h"
  2. #include <QKeyEvent>
  3. #include "utils/vutils.h"
  4. VLineEdit::VLineEdit(QWidget *p_parent)
  5. : QLineEdit(p_parent)
  6. {
  7. }
  8. VLineEdit::VLineEdit(const QString &p_contents, QWidget *p_parent)
  9. : QLineEdit(p_contents, p_parent)
  10. {
  11. }
  12. void VLineEdit::keyPressEvent(QKeyEvent *p_event)
  13. {
  14. // Note that QKeyEvent starts with isAccepted() == true, so you do not
  15. // need to call QKeyEvent::accept() - just do not call the base class
  16. // implementation if you act upon the key.
  17. bool accept = false;
  18. int modifiers = p_event->modifiers();
  19. switch (p_event->key()) {
  20. case Qt::Key_H:
  21. // Backspace.
  22. if (VUtils::isControlModifierForVim(modifiers)) {
  23. backspace();
  24. accept = true;
  25. }
  26. break;
  27. case Qt::Key_W:
  28. // Delete one word backward.
  29. if (VUtils::isControlModifierForVim(modifiers)) {
  30. if (!hasSelectedText()) {
  31. cursorWordBackward(true);
  32. }
  33. backspace();
  34. accept = true;
  35. }
  36. break;
  37. case Qt::Key_U:
  38. {
  39. if (VUtils::isControlModifierForVim(modifiers)) {
  40. if (hasSelectedText()) {
  41. backspace();
  42. } else {
  43. int pos = cursorPosition();
  44. if (pos > 0) {
  45. cursorBackward(true, pos);
  46. backspace();
  47. }
  48. }
  49. accept = true;
  50. }
  51. break;
  52. }
  53. default:
  54. break;
  55. }
  56. if (!accept) {
  57. QLineEdit::keyPressEvent(p_event);
  58. }
  59. }