#include "ULineEdit.h" #include #include #include "Keyboard/KeyboardManager.h" #include "ULineEditMenu.h" namespace { const int REPEAT_DELAY_TIME = 500; } ULineEdit::ULineEdit(QWidget* aParent) : QLineEdit(aParent) , mTimer(new QTimer(this)) { mTimer->setSingleShot(true); setFocusPolicy(Qt::ClickFocus); connect(mTimer, &QTimer::timeout, [this]() { selectAll(); ULineEditMenu::getInstance()->setCurrentEdit(this); QPoint position = mapToGlobal(QPoint(0, 0)); ULineEditMenu::getInstance()->move(position.x(), position.y() - ULineEditMenu::getInstance()->height()); ULineEditMenu::getInstance()->show(); }); } ULineEdit::~ULineEdit() { } void ULineEdit::mousePressEvent(QMouseEvent* aEvent) { mTimer->start(REPEAT_DELAY_TIME); QLineEdit::mousePressEvent(aEvent); } void ULineEdit::mouseReleaseEvent(QMouseEvent* aEvent) { if (mTimer->isActive()) { mTimer->stop(); KeyboardManager::getInstance()->showKeyboard(this); } QLineEdit::mouseReleaseEvent(aEvent); } void ULineEdit::focusOutEvent(QFocusEvent* aEvent) { QLineEdit::focusOutEvent(aEvent); ULineEditMenu::getInstance()->hide(); QWidget* widget = QApplication::focusWidget(); if (nullptr == widget) { return; } if (!widget->inherits("ULineEdit") && !widget->inherits("UTextEdit")) { KeyboardManager::getInstance()->hideKeyboard(); } }