75 lines
1.8 KiB
C++
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;
|
|
}
|