#include "LtsKeyPushButton.h" #include "LtsVirtualKeyboard.h" #include #include #include #include namespace LtsVirtualKeyboard { LtsKeyPushButton::LtsKeyPushButton(const QString ¬TranslatedText, const QString ¬TranslatedTextAlt, QWidget *parent) : QToolButton(parent) , m_parent(parent) , m_notTranslatedText(notTranslatedText) , m_notTranslatedTextAlt(notTranslatedTextAlt) , m_altMode(false) , m_capsMode(false) { setFocusPolicy(Qt::NoFocus); setStyleSheet(QStringLiteral(DEFAULT_STYLE_BUTTON) + QStringLiteral(DEFAULT_BACKGROUND_BUTTON)); connect(this, &LtsKeyPushButton::pressedKey, this, &LtsKeyPushButton::getKeyPress); } void LtsKeyPushButton::getKeyPress() { int keyCode = 0; QKeyEvent *key = nullptr; QString text = this->text(); if (!qobject_cast(m_parent)) return; LtsVirtualKeyboard *keyboard = qobject_cast(m_parent); if (text == QStringLiteral("&&")) text = QStringLiteral("&"); if (NO_SPECIAL_KEY(text) == false && (IS_BACK(text) == true || IS_TAB(text) == true || IS_RETURN(text) == true || IS_CTRL_LEFT(text) == true || IS_ALT(text) == true || IS_CANC(text) == true || IS_CUT_LEFT(text) == true || IS_PASSWORD(text) || IS_PASTE(text) || IS_COPY(text))) key = new QKeyEvent(QEvent::KeyPress, keyCode, Qt::NoModifier, text); else { keyCode = text.toUtf8()[0]; if (m_capsMode == false) { text = text.toLower(); key = new QKeyEvent(QEvent::KeyPress, keyCode, Qt::NoModifier, text); } else key = new QKeyEvent(QEvent::KeyPress, keyCode, Qt::ShiftModifier, text); } keyboard->receiptChildKey(nullptr, key); QCoreApplication::processEvents(); } void LtsKeyPushButton::mousePressEvent(QMouseEvent *) { if (!qobject_cast(m_parent)) return; QString text = this->text(); QString defaultStyleButton = QStringLiteral(DEFAULT_STYLE_BUTTON); QString changedColorButton = QStringLiteral(CHANGED_BACKGROUND_BUTTON); if (IS_CAPS(text) == true) { if (!styleSheet().contains(QStringLiteral(DEFAULT_BACKGROUND_BUTTON))) changedColorButton = QStringLiteral(DEFAULT_BACKGROUND_BUTTON); setStyleSheet(defaultStyleButton + changedColorButton); repaint(); QCoreApplication::processEvents(); } else if (IS_FIN(text) == true) setStyleSheet(defaultStyleButton + QStringLiteral(CHANGED_BACKGROUND_BUTTON)); else { setStyleSheet(defaultStyleButton + changedColorButton); repaint(); QCoreApplication::processEvents(); } emit pressedKey(); m_oldYKey = 0; } void LtsKeyPushButton::mouseReleaseEvent(QMouseEvent * ) { if (!qobject_cast(m_parent)) return; LtsVirtualKeyboard *tmpKeyBoard = qobject_cast(m_parent); bool pressedEcho = IS_PASSWORD(text()) == true; if (IS_CAPS(text()) == false && pressedEcho == false) setStyleSheet(QStringLiteral(DEFAULT_STYLE_BUTTON) + QStringLiteral(DEFAULT_BACKGROUND_BUTTON)); else if (pressedEcho == true && tmpKeyBoard->isEnabledSwitchingEcho() == false) setStyleSheet(QStringLiteral(DEFAULT_STYLE_BUTTON) + QStringLiteral(DEFAULT_BACKGROUND_BUTTON)); } void LtsKeyPushButton::changeEvent(QEvent *event) { if (event->type() == QEvent::LanguageChange) { setAltMode(m_altMode); } else QToolButton::changeEvent(event); } void LtsKeyPushButton::setAltMode(bool altmode) { m_altMode = altmode; if (m_altMode) { if (!IS_CANC(text()) && !IS_FIN(text()) && !IS_CAPS(text()) && !IS_COPY(text()) && !IS_PASTE(text()) && !IS_CUT_LEFT(text()) ) setText(m_notTranslatedTextAlt); } else { setText(m_notTranslatedText); } setObjectName(text()); setCapsMode(m_capsMode); } void LtsKeyPushButton::setCapsMode(bool caps) { if (text().length() > 2 || IS_FIN(text())) return; if (m_notTranslatedText == QChar(223)) return; m_capsMode = caps; if (m_capsMode) { setText(text().toUpper()); } else setText(text().toLower()); } }