69 lines
1.5 KiB
C++
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();
|
|
}
|
|
}
|