Files
GUI/src/keyboard/KeyboardManager.cpp
2022-07-20 17:05:50 +08:00

75 lines
1.8 KiB
C++

#include "KeyboardManager.h"
#include "Keyboard.h"
KeyboardManager* KeyboardManager::getInstance()
{
static KeyboardManager instance;
return &instance;
}
KeyboardManager::KeyboardManager()
: mKeyboard(new Keyboard())
{
connect(mKeyboard, &Keyboard::keyboardHided, this, &KeyboardManager::restoreInputWidget);
}
KeyboardManager::~KeyboardManager()
{
mKeyboard->deleteLater();
}
void KeyboardManager::showKeyboard(QWidget* aInputWidget)
{
if (nullptr == aInputWidget)
{
return;
}
mKeyboard->setEdit(aInputWidget);
//QPoint position = aInputWidget->mapToGlobal(QPoint(0, 0));
//mKeyboard->move(position.x(), position.y() + aInputWidget->height());
moveInputWidget(aInputWidget);
mKeyboard->show();
}
void KeyboardManager::hideKeyboard()
{
mKeyboard->hideKeyboard();
}
void KeyboardManager::moveInputWidget(QWidget* aInputWidget)
{
if (nullptr == aInputWidget)
{
return;
}
QPoint pos = aInputWidget->mapToGlobal(QPoint(0, 0));
int distance = pos.y() + aInputWidget->height() - 1080 + mKeyboard->height();
if (distance > 0)
{
while (nullptr != aInputWidget)
{
aInputWidget = aInputWidget->parentWidget();
if (aInputWidget->inherits("QDialog"))
{
pos = aInputWidget->mapToGlobal(QPoint(0, 0));
mMovedDistance = distance + 5;
mMovedWidget = QPointer<QWidget>(aInputWidget);
aInputWidget->move(pos.x(), pos.y() - mMovedDistance);
break;
}
}
}
}
void KeyboardManager::restoreInputWidget()
{
if (mMovedWidget)
{
QPoint pos = mMovedWidget->mapToGlobal(QPoint(0, 0));
mMovedWidget->move(pos.x(), pos.y() + mMovedDistance);
}
mMovedWidget.clear();
mMovedDistance = 0;
}