Files
GUI/src/components/ULineEdit.cpp
2022-09-29 17:36:55 +08:00

69 lines
1.5 KiB
C++

#include "ULineEdit.h"
#include <QTimer>
#include <QApplication>
#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)
{
KeyboardManager::getInstance()->hideKeyboard();
return;
}
if (!widget->inherits("ULineEdit") && !widget->inherits("UTextEdit"))
{
KeyboardManager::getInstance()->hideKeyboard();
}
}