Refactor utilities package.

This commit is contained in:
sunwen
2022-06-13 13:26:49 +08:00
parent 160b0b4f4b
commit 589262781d
15 changed files with 556 additions and 583 deletions

View File

@@ -17,100 +17,100 @@
GeneralForm::GeneralForm(QWidget* parent) : QWidget(parent)
{
layout = new QVBoxLayout(this);
QWidget* lanHeader = new QWidget(this);
layout->addWidget(lanHeader);
layout = new QVBoxLayout(this);
QWidget* lanHeader = new QWidget(this);
layout->addWidget(lanHeader);
QHBoxLayout* lanHeaderLayout = new QHBoxLayout(lanHeader);
QLabel* lbl_lan = new QLabel(tr("Language"));
lanHeaderLayout->addWidget(lbl_lan);
QHBoxLayout* lanHeaderLayout = new QHBoxLayout(lanHeader);
QLabel* lbl_lan = new QLabel(tr("Language"));
lanHeaderLayout->addWidget(lbl_lan);
QPushButton* btnLan = new QPushButton(lanHeader);
lanHeaderLayout->addWidget(btnLan);
lanHeaderLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
QPushButton* btnLan = new QPushButton(lanHeader);
lanHeaderLayout->addWidget(btnLan);
lanHeaderLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
QWidget* instHeader = new QWidget(this);
layout->addWidget(instHeader);
QHBoxLayout* instHeaderLayout = new QHBoxLayout(instHeader);
QLabel* lbl_ins = new QLabel(tr("Institution Name"));
instHeaderLayout->addWidget(lbl_ins);
QLineEdit* instName = new QLineEdit(instHeader);
instName->setMaximumSize(QSize(300, 32768));
instHeaderLayout->addWidget(instName);
instHeaderLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Fixed));
QWidget* instHeader = new QWidget(this);
layout->addWidget(instHeader);
QHBoxLayout* instHeaderLayout = new QHBoxLayout(instHeader);
QLabel* lbl_ins = new QLabel(tr("Institution Name"));
instHeaderLayout->addWidget(lbl_ins);
QLineEdit* instName = new QLineEdit(instHeader);
instName->setMaximumSize(QSize(300, 32768));
instHeaderLayout->addWidget(instName);
instHeaderLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Fixed));
QLabel* lbl_insaddr = new QLabel(tr("Institution Addr"));
instHeaderLayout->addWidget(lbl_insaddr);
QLineEdit* instAddr = new QLineEdit(instHeader);
instHeaderLayout->addWidget(instAddr);
instAddr->setMaximumSize(QSize(300, 32768));
instHeaderLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
QLabel* lbl_insaddr = new QLabel(tr("Institution Addr"));
instHeaderLayout->addWidget(lbl_insaddr);
QLineEdit* instAddr = new QLineEdit(instHeader);
instHeaderLayout->addWidget(instAddr);
instAddr->setMaximumSize(QSize(300, 32768));
instHeaderLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
QWidget* lockHeader = new QWidget(this);
layout->addWidget(lockHeader);
QHBoxLayout* lockHeaderLayout = new QHBoxLayout(lockHeader);
QWidget* lockHeader = new QWidget(this);
layout->addWidget(lockHeader);
QHBoxLayout* lockHeaderLayout = new QHBoxLayout(lockHeader);
QLabel* lbl_lock = new QLabel(tr("Lock Screen"));
lockHeaderLayout->addWidget(lbl_lock);
QLabel* lbl_lock = new QLabel(tr("Lock Screen"));
lockHeaderLayout->addWidget(lbl_lock);
QLineEdit* lockTime = new QLineEdit(lockHeader);
lockTime->setMaximumSize(QSize(300, 32768));
lockHeaderLayout->addWidget(lockTime);
QLineEdit* lockTime = new QLineEdit(lockHeader);
lockTime->setMaximumSize(QSize(300, 32768));
lockHeaderLayout->addWidget(lockTime);
QLabel* ss = new QLabel(tr("s"));
lockHeaderLayout->addWidget(ss);
lockHeaderLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
QLabel* ss = new QLabel(tr("s"));
lockHeaderLayout->addWidget(ss);
lockHeaderLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
//...
layout->addSpacerItem(new QSpacerItem(20, 300, QSizePolicy::Minimum, QSizePolicy::Expanding));
//...
layout->addSpacerItem(new QSpacerItem(20, 300, QSizePolicy::Minimum, QSizePolicy::Expanding));
//init
btnLan->setText(JsonObject::Instance()->defaultLanguage());
instName->setText(JsonObject::Instance()->institutionName());
instAddr->setText(JsonObject::Instance()->institutionAddr());
lockTime->setText(JsonObject::Instance()->lockScreenTimeout());
//init
btnLan->setText(JsonObject::Instance()->defaultLanguage());
instName->setText(JsonObject::Instance()->institutionName());
instAddr->setText(JsonObject::Instance()->institutionAddr());
lockTime->setText(JsonObject::Instance()->lockScreenTimeout());
//connection
connect(instName, &QLineEdit::textChanged, [=](const QString& str)
{
JsonObject::Instance()->setInstitutionName(str);
});
//connection
connect(instName, &QLineEdit::textChanged, [=](const QString& str)
{
JsonObject::Instance()->setInstitutionName(str);
});
connect(instAddr, &QLineEdit::textChanged, [=](const QString& str)
{
JsonObject::Instance()->setInstitutionAddr(str);
});
connect(lockTime, &QLineEdit::textChanged, [=](const QString& str)
{
//take effect
JsonObject::Instance()->setLockScreenTimeout(str);
Locker::Instance()->setTimer(JsonObject::Instance()->lockerCount());
connect(instAddr, &QLineEdit::textChanged, [=](const QString& str)
{
JsonObject::Instance()->setInstitutionAddr(str);
});
connect(lockTime, &QLineEdit::textChanged, [=](const QString& str)
{
//take effect
JsonObject::Instance()->setLockScreenTimeout(str);
Locker::getInstance()->setTimer(JsonObject::Instance()->lockerCount());
});
});
connect(btnLan, &QPushButton::clicked, [=]() {
if (!dialog) {
dialog = new SelectDialog(this);
dialog->setWindowModality(Qt::WindowModal);
}
connect(btnLan, &QPushButton::clicked, [=]() {
if (!dialog)
{
dialog = new SelectDialog(this);
dialog->setWindowModality(Qt::WindowModal);
}
dialog->setValues(JsonObject::Instance()->language());
dialog->setSelectedValue(JsonObject::Instance()->defaultLanguage());
if (dialog->exec() == QDialog::Accepted)
{
QString lan = dialog->getSelectedValue();
dialog->setSelectedValue(JsonObject::Instance()->defaultLanguage());
if (dialog->exec() == QDialog::Accepted)
{
QString lan = dialog->getSelectedValue();
//take effect
JsonObject::Instance()->setDefaultLanguage(lan);
LanguageSwitcher::Instance()->setDefaultLanguage(lan);
btnLan->setText(JsonObject::Instance()->defaultLanguage());
//take effect
JsonObject::Instance()->setDefaultLanguage(lan);
LanguageSwitcher::getInstance()->setDefaultLanguage(lan);
btnLan->setText(JsonObject::Instance()->defaultLanguage());
}
});
}
});
connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() {
lbl_lan->setText(tr("Language"));
lbl_ins->setText(tr("Institution Addr"));
lbl_insaddr->setText(tr("Institution Addr"));
lbl_lock->setText(tr("Lock Screen"));
});
connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() {
lbl_lan->setText(tr("Language"));
lbl_ins->setText(tr("Institution Addr"));
lbl_insaddr->setText(tr("Institution Addr"));
lbl_lock->setText(tr("Lock Screen"));
});
}

View File

@@ -17,99 +17,98 @@
#include "src/utilities/languageswitcher.h"
QString loadFontFromFile(QString path)
{
static QString font;
static bool loaded = false;
if (!loaded)
{
loaded = true;
int loadedFontID = QFontDatabase::addApplicationFont(path);
QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(loadedFontID);
if (!loadedFontFamilies.empty())
font = loadedFontFamilies.at(0);
}
return font;
static QString font;
static bool loaded = false;
if (!loaded)
{
loaded = true;
int loadedFontID = QFontDatabase::addApplicationFont(path);
QStringList loadedFontFamilies = QFontDatabase::applicationFontFamilies(loadedFontID);
if (!loadedFontFamilies.empty())
font = loadedFontFamilies.at(0);
}
return font;
}
int main(int argc, char* argv[])
{
//QLocale::setDefault(QLocale::English);
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
//QLocale::setDefault(QLocale::English);
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
#ifdef CUTE_STYLE
qputenv("QT_VIRTUALKEYBOARD_STYLE", QByteArray("retro"));
qputenv("QT_VIRTUALKEYBOARD_STYLE", QByteArray("retro"));
#endif // CUTE_STYLE
//qputenv("QT_LOGGING_RULES", QByteArray("qt.virtualkeyboard=true"));
//qputenv("QT_LOGGING_RULES", QByteArray("qt.virtualkeyboard=true"));
QApplication a(argc, argv);
QString layouts_path = QString(QCoreApplication::applicationDirPath()).append("/layouts");
qputenv("QT_VIRTUALKEYBOARD_LAYOUT_PATH", QByteArray(layouts_path.toStdString().c_str()));
QApplication a(argc, argv);
QString layouts_path = QString(QCoreApplication::applicationDirPath()).append("/layouts");
qputenv("QT_VIRTUALKEYBOARD_LAYOUT_PATH", QByteArray(layouts_path.toStdString().c_str()));
QTextCodec* codec = QTextCodec::codecForName("utf8");
QTextCodec::setCodecForLocale(codec);
QTextCodec* codec = QTextCodec::codecForName("utf8");
QTextCodec::setCodecForLocale(codec);
//multi-language suppport
QTranslator translator;
LanguageSwitcher::Instance()->setTranslator(&translator);
LanguageSwitcher::Instance()->setDefaultLanguage(JsonObject::Instance()->defaultLanguage());
a.installTranslator(&translator);
//multi-language suppport
LanguageSwitcher::getInstance()->setDefaultLanguage(JsonObject::Instance()->defaultLanguage());
a.installTranslator(LanguageSwitcher::getInstance()->getTranslator());
//QString fontName = loadFontFromFile(":/fonts/MicrosoftYahei.ttf");
QString fontName = loadFontFromFile(":/fonts/DroidSansFallback.ttf");
QFont font(fontName);
QApplication::setFont(font);
//QString fontName = loadFontFromFile(":/fonts/MicrosoftYahei.ttf");
QString fontName = loadFontFromFile(":/fonts/DroidSansFallback.ttf");
QFont font(fontName);
QApplication::setFont(font);
InputObject* obj = new InputObject();
a.installEventFilter(obj);
SQLHelper::Open();
MainWindow w;
UserOperationLog::Default()->init();
InputObject* obj = new InputObject();
a.installEventFilter(obj);
SQLHelper::Open();
MainWindow w;
UserOperationLog::Default()->init();
//暂时为了调试关闭锁屏
//Locker::Instance()->start();
//QObject::connect(obj, SIGNAL(touchScreen()), Locker::Instance(), SLOT(refreshTimer()));
QList<Qt::GestureType> gestures;
gestures << Qt::SwipeGesture;
gestures << Qt::PanGesture;
w.grabGestures(gestures);
//暂时为了调试关闭锁屏
//Locker::Instance()->start();
//QObject::connect(obj, SIGNAL(touchScreen()), Locker::Instance(), SLOT(refreshTimer()));
QList<Qt::GestureType> gestures;
gestures << Qt::SwipeGesture;
gestures << Qt::PanGesture;
w.grabGestures(gestures);
QStringList app_args = a.arguments();
int ret = 0;
QStringList app_args = a.arguments();
int ret = 0;
if (app_args.contains("-d"))
//if (true)
{
if (app_args.contains("-d"))
//if (true)
{
w.debugConsoleOn();
w.showFullScreen();
w.debugConsoleOn();
w.showFullScreen();
qInstallMessageHandler(MainWindow::QMessageOutput);
QThread thread;
StdOutRedirector redir;
redir.setOutputTF(w.getEdit());
QTimer Timer;
redir.moveToThread(&thread);
QObject::connect(&Timer, SIGNAL(timeout()), &redir, SLOT(readOutsToTF()));
fflush(stdout);
Timer.start(1000);
thread.start();
qInstallMessageHandler(MainWindow::QMessageOutput);
QThread thread;
StdOutRedirector redir;
redir.setOutputTF(w.getEdit());
QTimer Timer;
redir.moveToThread(&thread);
QObject::connect(&Timer, SIGNAL(timeout()), &redir, SLOT(readOutsToTF()));
fflush(stdout);
Timer.start(1000);
thread.start();
DeviceManager::Default()->initDevice();
w.requestLogin();
DeviceManager::Default()->initDevice();
w.requestLogin();
ret = a.exec();
thread.terminate();
ret = a.exec();
thread.terminate();
}
else {
w.showFullScreen();
DeviceManager::Default()->initDevice();
w.requestLogin();
ret = a.exec();
}
DeviceManager::Default()->close();
return ret;
}
else
{
w.showFullScreen();
DeviceManager::Default()->initDevice();
w.requestLogin();
ret = a.exec();
}
DeviceManager::Default()->close();
return ret;
}

View File

@@ -1,5 +1,6 @@
#include "InputObject.h"
#include "ui_inputobject.h"
#include "ui_InputObject.h"
#include <QDebug>
#include <QEvent>
#include <QKeyEvent>
@@ -10,250 +11,235 @@
#include <QLineEdit>
#include <QAbstractSpinBox>
InputObject::InputObject(QWidget* parent) :
QWidget(parent),
ui(new Ui::InputObject)
InputObject::InputObject(QWidget* aParent)
: QWidget(aParent)
, mUI(new Ui::InputObject)
, mCurrentDateEdit(nullptr)
, mCurrentLineEdit(nullptr)
, mCurrentTextEdit(nullptr)
{
ui->setupUi(this);
initUi();
this->setVisible(false);
this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
mUI->setupUi(this);
initUi();
setVisible(false);
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
}
InputObject::~InputObject()
{
delete ui;
delete mUI;
}
void InputObject::initUi()
{
//#3c3c3c
//#3c3c3c
#ifdef CUTE_STYLE
QString style =
"QWidget#WiBack{background-image: url(:/icons/bg.jpeg);}"
"QWidget#WiBo{background-color: black;}"
"QLineEdit,QDateEdit{background-color: rgba(0,0,0,0.5);\
QString style =
"QWidget#WiBack{background-image: url(:/icons/bg.jpeg);}"
"QWidget#WiBo{background-color: black;}"
"QLineEdit,QDateEdit{background-color: rgba(0,0,0,0.5);\
min-height:100px;max-height:100px; min-width:500px;max-width:500px;\
border: 2px solid #ef9cba; border-radius:20px;\
color:white;margin:0;font-size:36px;}"
"QTextEdit{background-color: rgba(0,0,0,0.5);\
"QTextEdit{background-color: rgba(0,0,0,0.5);\
min-height:300px;max-height:300px; min-width:700px;max-width:700px;\
border: 2px solid #ef9cba; border-radius:20px;\
font-family:Arial; color:white;margin:0;font-size:36px;}"
"QDateEdit::up-button{image: url(:/up.png);height:15px;}"
"QDateEdit::down-button{image:url(:/down.png);height:15px;}"
;
"QDateEdit::up-button{image: url(:/up.png);height:15px;}"
"QDateEdit::down-button{image:url(:/down.png);height:15px;}"
;
#else
QString style =
"QWidget#WiBack{background-color: #383533;}"
"QWidget#WiBo{background-color: black;}"
"QLineEdit,QDateEdit,QTextEdit{\
QString style =
"QWidget#WiBack{background-color: #383533;}"
"QWidget#WiBo{background-color: black;}"
"QLineEdit,QDateEdit,QTextEdit{\
background:qlineargradient(x1:0,y1:0,x2:1,y2:1,stop: 0.0 silver, stop: 1.0 grey);\
border: 1px solid #1e1b18; border-radius:20px;\
color:black;margin:0;font-size:36px;}"
"QLineEdit,QDateEdit{min-height:100px; max-height:100px; min-width:500px; max-width:500px;}"
"QTextEdit{min-height:300px;max-height:300px; min-width:700px;max-width:700px;}"
"QLineEdit,QDateEdit{min-height:100px; max-height:100px; min-width:500px; max-width:500px;}"
"QTextEdit{min-height:300px;max-height:300px; min-width:700px;max-width:700px;}"
"QDateEdit::up-button{image: url(:/up.png);height:15px;}"
"QDateEdit::down-button{image:url(:/down.png);height:15px;}"
;
"QDateEdit::up-button{image: url(:/up.png);height:15px;}"
"QDateEdit::down-button{image:url(:/down.png);height:15px;}"
;
#endif
setStyleSheet(style);
setStyleSheet(style);
ui->dateEdit->setVisible(false);
ui->dateEdit->setMaximumDate(QDate::currentDate());
ui->dateEdit->setDisplayFormat("yyyy/MM/dd");
ui->dateEdit->setStyleSheet(style);
//this->setWindowOpacity(0.8);
mUI->dateEdit->setVisible(false);
mUI->dateEdit->setMaximumDate(QDate::currentDate());
mUI->dateEdit->setDisplayFormat("yyyy/MM/dd");
mUI->dateEdit->setStyleSheet(style);
connect(QGuiApplication::inputMethod(), &QInputMethod::visibleChanged, [=]() {
if (QGuiApplication::inputMethod()->isVisible()) return;
//qDebug() << "HidePanel";
//qDebug() << "focusWidget" << qApp->focusWidget();
this->HidePanel();
this->hide();
});
connect(QGuiApplication::inputMethod(), &QInputMethod::visibleChanged, [=]() {
if (QGuiApplication::inputMethod()->isVisible())
{
return;
}
HidePanel();
hide();
});
}
bool InputObject::eventFilter(QObject* obj, QEvent* event)
bool InputObject::eventFilter(QObject* aObject, QEvent* aEvent)
{
if (event->type() == QEvent::MouseButtonPress)
{
emit touchScreen();
//qDebug() << "touchScreen()";
}
if (event->type() == QEvent::KeyPress) {
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Return && curDateEdit)
{
this->HidePanel();
this->hide();
}
}
//mouse button release means setfocus is useless
if (event->type() == QEvent::MouseButtonRelease)
{
//qDebug() << obj << event->type();
if (obj->objectName() == QString("qt_spinbox_lineedit"))
{
QDateEdit* _date = qobject_cast<QDateEdit*>(obj->parent());
if (_date == ui->dateEdit)return true;
if (_date->isEnabled())
{
this->ShowPanel();
return true;
}
}
if (obj->objectName() == QString("qt_scrollarea_viewport"))
{
QTextEdit* _text = qobject_cast<QTextEdit*>(obj->parent());
if (!_text) return false;
if (_text == ui->textEdit) return true; //
if (_text->isEnabled())
{
this->ShowPanel();
return true;
}
}
if (obj->inherits("QLineEdit")) {
QLineEdit* tbx = qobject_cast<QLineEdit*>(obj);
//you have to tell whether it is coming from qdateedit!!!
if (ui->lineEdit != tbx && tbx->isEnabled())
{
//qDebug() << "ShowPanel";
//qDebug() << "focusWidget" << qApp->focusWidget();
//qDebug() << "lineEdit" << ui->lineEdit;
//qDebug() << "obj" << obj;
this->ShowPanel();
return true;
}
}
}
return QObject::eventFilter(obj, event);
if (aEvent->type() == QEvent::MouseButtonPress)
{
emit touchScreen();
}
if (aEvent->type() == QEvent::KeyPress)
{
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(aEvent);
if (keyEvent->key() == Qt::Key_Return && mCurrentDateEdit)
{
HidePanel();
hide();
}
}
//mouse button release means setfocus is useless
if (aEvent->type() == QEvent::MouseButtonRelease)
{
if (aObject->objectName() == QString("qt_spinbox_lineedit"))
{
QDateEdit* dateEdit = qobject_cast<QDateEdit*>(aObject->parent());
if (dateEdit == mUI->dateEdit)
{
return true;
}
if (dateEdit->isEnabled())
{
ShowPanel();
return true;
}
}
if (aObject->objectName() == QString("qt_scrollarea_viewport"))
{
QTextEdit* textEdit = qobject_cast<QTextEdit*>(aObject->parent());
if (!textEdit)
{
return false;
}
if (textEdit == mUI->textEdit)
{
return true;
}
if (textEdit->isEnabled())
{
ShowPanel();
return true;
}
}
if (aObject->inherits("QLineEdit"))
{
QLineEdit* lineEdit = qobject_cast<QLineEdit*>(aObject);
//you have to tell whether it is coming from qdateedit!!!
if (mUI->lineEdit != lineEdit && lineEdit->isEnabled())
{
ShowPanel();
return true;
}
}
}
return QObject::eventFilter(aObject, aEvent);
}
void InputObject::ShowPanel() {
if (!qApp->focusWidget()) return;
if (qApp->focusWidget()->inherits("QLineEdit"))
{
curLine = qobject_cast<QLineEdit*>(qApp->focusWidget());
ui->dateEdit->setVisible(false);
ui->lineEdit->setVisible(true);
ui->textEdit->setVisible(false);
}
if (qApp->focusWidget()->inherits("QDateEdit"))
{
curDateEdit = qobject_cast<QDateEdit*>(qApp->focusWidget());
ui->dateEdit->setVisible(true);
ui->lineEdit->setVisible(false);
ui->textEdit->setVisible(false);
}
void InputObject::ShowPanel()
{
if (!qApp->focusWidget())
{
return;
}
if (qApp->focusWidget()->inherits("QLineEdit"))
{
mCurrentLineEdit = qobject_cast<QLineEdit*>(qApp->focusWidget());
mUI->dateEdit->setVisible(false);
mUI->lineEdit->setVisible(true);
mUI->textEdit->setVisible(false);
}
if (qApp->focusWidget()->inherits("QDateEdit"))
{
mCurrentDateEdit = qobject_cast<QDateEdit*>(qApp->focusWidget());
mUI->dateEdit->setVisible(true);
mUI->lineEdit->setVisible(false);
mUI->textEdit->setVisible(false);
}
if (qApp->focusWidget()->inherits("QTextEdit"))
{
curText = qobject_cast<QTextEdit*>(qApp->focusWidget());
ui->dateEdit->setVisible(false);
ui->lineEdit->setVisible(false);
ui->textEdit->setVisible(true);
}
if (qApp->focusWidget()->inherits("QTextEdit"))
{
mCurrentTextEdit = qobject_cast<QTextEdit*>(qApp->focusWidget());
mUI->dateEdit->setVisible(false);
mUI->lineEdit->setVisible(false);
mUI->textEdit->setVisible(true);
}
this->showFullScreen();
this->setVisible(true);
showFullScreen();
setVisible(true);
this->activateWindow(); //it is quite important!!!
while (QApplication::activeWindow() != this)
{
qApp->processEvents();
}
activateWindow(); //it is quite important!!!
while (QApplication::activeWindow() != this)
{
qApp->processEvents();
}
if (curLine) {
ui->lineEdit->setText(curLine->text());
ui->lineEdit->setEchoMode(curLine->echoMode());
ui->lineEdit->setInputMethodHints(Qt::InputMethodHint::ImhNoAutoUppercase);
//ui->lineEdit->setFocus(Qt::MouseFocusReason);
ui->lineEdit->setFocus();
if (mCurrentLineEdit)
{
mUI->lineEdit->setText(mCurrentLineEdit->text());
mUI->lineEdit->setEchoMode(mCurrentLineEdit->echoMode());
mUI->lineEdit->setInputMethodHints(Qt::InputMethodHint::ImhNoAutoUppercase);
mUI->lineEdit->setFocus();
//while (QGuiApplication::focusObject() != ui->lineEdit)
//{
// qApp->processEvents();
//}
QEvent event(QEvent::RequestSoftwareInputPanel);
QApplication::sendEvent(mUI->lineEdit, &event);
}
if (mCurrentDateEdit)
{
QEvent event(QEvent::RequestSoftwareInputPanel);
QApplication::sendEvent(ui->lineEdit, &event);
mUI->dateEdit->setDateTime(mCurrentDateEdit->dateTime());
mUI->dateEdit->setFocus();
while (QGuiApplication::focusObject() != mUI->dateEdit)
{
qApp->processEvents();
}
qDebug() << QGuiApplication::focusObject();
QEvent event(QEvent::RequestSoftwareInputPanel);
QApplication::sendEvent(mUI->dateEdit, &event);
}
}
if (curDateEdit)
{
ui->dateEdit->setDateTime(curDateEdit->dateTime());
ui->dateEdit->setFocus();
while (QGuiApplication::focusObject() != ui->dateEdit)
{
qApp->processEvents();
}
qDebug() << QGuiApplication::focusObject();
QEvent event(QEvent::RequestSoftwareInputPanel);
QApplication::sendEvent(ui->dateEdit, &event);
}
if (curText)
{
ui->textEdit->setPlainText(curText->toPlainText());
ui->textEdit->setFocus();
while (QGuiApplication::focusObject() != ui->textEdit)
{
qApp->processEvents();
}
//qDebug() << QGuiApplication::focusObject();
QEvent event(QEvent::RequestSoftwareInputPanel);
QApplication::sendEvent(ui->textEdit, &event);
}
if (mCurrentTextEdit)
{
mUI->textEdit->setPlainText(mCurrentTextEdit->toPlainText());
mUI->textEdit->setFocus();
while (QGuiApplication::focusObject() != mUI->textEdit)
{
qApp->processEvents();
}
QEvent event(QEvent::RequestSoftwareInputPanel);
QApplication::sendEvent(mUI->textEdit, &event);
}
}
void InputObject::HidePanel()
{
if (curLine) {
curLine->setText(ui->lineEdit->text());
ui->lineEdit->clearFocus();
ui->lineEdit->clear();
//this->setVisible(false);
curLine = nullptr;
}
else if (curDateEdit)
{
//curDateEdit->setDateTime(QDateTime::currentDateTime());
curDateEdit->setDateTime(ui->dateEdit->dateTime());
ui->dateEdit->clearFocus();
ui->dateEdit->clear();
//this->setVisible(false);
curDateEdit = nullptr;
}
else if (curText)
{
curText->setText(ui->textEdit->toPlainText());
ui->textEdit->clearFocus();
ui->textEdit->clear();
//this->setVisible(false);
curText = nullptr;
}
else
{
return;
}
if (mCurrentLineEdit)
{
mCurrentLineEdit->setText(mUI->lineEdit->text());
mUI->lineEdit->clearFocus();
mUI->lineEdit->clear();
mCurrentLineEdit = nullptr;
}
else if (mCurrentDateEdit)
{
mCurrentDateEdit->setDateTime(mUI->dateEdit->dateTime());
mUI->dateEdit->clearFocus();
mUI->dateEdit->clear();
mCurrentDateEdit = nullptr;
}
else if (mCurrentTextEdit)
{
mCurrentTextEdit->setText(mUI->textEdit->toPlainText());
mUI->textEdit->clearFocus();
mUI->textEdit->clear();
mCurrentTextEdit = nullptr;
}
}

View File

@@ -2,35 +2,36 @@
#define INPUTOBJECT_H
#include <QWidget>
class QLineEdit;
class QDateEdit;
class QTextEdit;
//#define CUTE_STYLE
namespace Ui {
class InputObject;
namespace Ui
{
class InputObject;
}
class InputObject : public QWidget
{
Q_OBJECT
Q_OBJECT
public:
explicit InputObject(QWidget* parent = nullptr);
~InputObject();
bool eventFilter(QObject* obj, QEvent* event);
void ShowPanel();
explicit InputObject(QWidget* aParent = nullptr);
~InputObject();
bool eventFilter(QObject* aObject, QEvent* aEvent);
signals:
void touchScreen();
void touchScreen();
private:
Ui::InputObject* ui;
void initUi();
// void ShowPanel();
void HidePanel();
QDateEdit* curDateEdit = nullptr;
QLineEdit* curLine = nullptr;
QTextEdit* curText = nullptr;
Ui::InputObject* mUI;
void initUi();
void ShowPanel();
void HidePanel();
QDateEdit* mCurrentDateEdit = nullptr;
QLineEdit* mCurrentLineEdit = nullptr;
QTextEdit* mCurrentTextEdit = nullptr;
};
#endif // INPUTOBJECT_H

View File

@@ -0,0 +1,38 @@
#include "LanguageSwitcher.h"
#include "event/EventCenter.h"
LanguageSwitcher* LanguageSwitcher::getInstance()
{
static LanguageSwitcher instance;
return &instance;
}
LanguageSwitcher::LanguageSwitcher()
: QObject()
, mTranslator(new QTranslator(this))
{
}
LanguageSwitcher::~LanguageSwitcher()
{
}
void LanguageSwitcher::setTranslator(TranslatorPointer aTranslator)
{
mTranslator = aTranslator;
}
QTranslator* LanguageSwitcher::getTranslator()
{
return mTranslator.get();
}
void LanguageSwitcher::setDefaultLanguage(const QString aLanguage)
{
QString language = QString(":/translations/" + aLanguage + ".qm");
if (mTranslator->load(language))
{
EventCenter::Default()->triggerEvent(ReloadLanguage, nullptr, nullptr);
}
}

View File

@@ -0,0 +1,25 @@
#ifndef LANGUAGESWITCHER_H
#define LANGUAGESWITCHER_H
#include <QObject>
#include <QTranslator>
#include <memory>
typedef std::shared_ptr<QTranslator> TranslatorPointer;
class LanguageSwitcher : public QObject
{
Q_OBJECT
public:
static LanguageSwitcher* getInstance();
void setDefaultLanguage(const QString aLanguage);
void setTranslator(TranslatorPointer aTranslator);
QTranslator* getTranslator();
private:
explicit LanguageSwitcher();
~LanguageSwitcher();
TranslatorPointer mTranslator;
};
#endif // LANGUAGESWITCHER_H

53
src/utilities/Locker.cpp Normal file
View File

@@ -0,0 +1,53 @@
#include "Locker.h"
#include <QTimer>
#include "appvals/AppGlobalValues.h"
#include "event/EventCenter.h"
#include "json/jsonobject.h"
Locker* Locker::getInstance()
{
static Locker instance;
return &instance;
}
Locker::Locker()
: QObject()
, mScreenTimer(new QTimer(this))
, mCounter(JsonObject::Instance()->lockerCount())
{
connect(mScreenTimer, SIGNAL(timeout()), this, SLOT(coverScreen()));
}
Locker::~Locker()
{
}
void Locker::start()
{
mScreenTimer->start(mCounter);
}
void Locker::coverScreen()
{
if (AppGlobalValues::InProcessing().toBool())
{
refreshTimer();
}
else
{
mScreenTimer->stop();
EventCenter::Default()->triggerEvent(GUIEvents::RequestLogin, nullptr, nullptr);
}
}
void Locker::setTimer(int aInterval)
{
mCounter = aInterval;
mScreenTimer->stop();
mScreenTimer->start(mCounter);
}
void Locker::refreshTimer()
{
mScreenTimer->stop();
mScreenTimer->start(mCounter);
}

26
src/utilities/Locker.h Normal file
View File

@@ -0,0 +1,26 @@
#ifndef LOCKER_H
#define LOCKER_H
#include <QObject>
class QTimer;
class Locker : public QObject
{
Q_OBJECT
public:
static Locker* getInstance();
void start();
void setTimer(int aInterval);
public slots:
void refreshTimer();
void coverScreen();
private:
Locker();
~Locker();
QTimer* mScreenTimer;
int mCounter;
};
#endif // LOCKER_H

View File

@@ -1,67 +1,63 @@
#include "StdOutRedirector.h"
#include <QTimer>
#include <QDebug>
StdOutRedirector::StdOutRedirector()
: QObject()
: QObject()
{
#ifdef __linux__
if (pipe(fdguistd) == -1)
printf("failed!");
if (pipe(mFdguistd) == -1)
printf("failed!");
#else
// Redirect
if (_pipe(fdguistd, 4096, _O_BINARY) == -1)
printf("failed!");
// Redirect
if (_pipe(mFdguistd, 4096, _O_BINARY) == -1)
printf("failed!");
#endif
//int tr = fcntl(fdguistd, O_NONBLOCK);
// Duplicate stdout file descriptor (next line will close original)
fdStdOut = dup(fileno(stdout));
// Duplicate write end of pipe to stdout file descriptor
if (dup2(fdguistd[1], fileno(stdout)) != 0)
printf("failed!");
// Close original
close(1);
// Duplicate write end of original
dup2(fdguistd[1], 1);
//int tr = fcntl(fdguistd, O_NONBLOCK);
// Duplicate stdout file descriptor (next line will close original)
mFdStdOut = dup(fileno(stdout));
// Duplicate write end of pipe to stdout file descriptor
if (dup2(mFdguistd[1], fileno(stdout)) != 0)
printf("failed!");
// Close original
close(1);
// Duplicate write end of original
dup2(mFdguistd[1], 1);
buffer = new char[bufferSize];
mBuffer = new char[mBufferSize];
}
StdOutRedirector::~StdOutRedirector()
{
delete[] buffer;
delete[] mBuffer;
}
void StdOutRedirector::readOutsToTF()
{
size_t len;
char* copy;
size_t len;
char* copy;
int n_out;
QString str;
//char buffer[512];
//qDebug() << "begin read...";
//qDebug() << "from qdebug...";
//printf("from printf...");
//std::cout << "from std::cout..." << std::endl;
fflush(stdout);
//Perhaps there is a non-blocking version of _read() that you can call ?
memset(buffer, 0, bufferSize);
n_out = read(fdguistd[0], buffer, bufferSize);
if (n_out <= 0) {
return;
}
if (n_out >= 1) {
str.append(QString(buffer));
int con = str.lastIndexOf('\n');
int remv = str.at(con - 1) == '\n' ? 1 : 0;
if (con > 0) {
str = str.remove(con - remv, str.length());
output->append(str);
}
}
return;
int n_out;
QString str;
fflush(stdout);
//Perhaps there is a non-blocking version of _read() that you can call ?
memset(mBuffer, 0, mBufferSize);
n_out = read(mFdguistd[0], mBuffer, mBufferSize);
if (n_out <= 0)
{
return;
}
if (n_out >= 1)
{
str.append(QString(mBuffer));
int con = str.lastIndexOf('\n');
int remv = str.at(con - 1) == '\n' ? 1 : 0;
if (con > 0)
{
str = str.remove(con - remv, str.length());
mOutput->append(str);
}
}
return;
}

View File

@@ -2,16 +2,6 @@
#include <QObject>
//class StdOutRedirector : public QObject
//{
// Q_OBJECT
//
//public:
// StdOutRedirector(QObject *parent);
// ~StdOutRedirector();
//};
#include <QString>
#include <iostream>
#include <stdio.h>
@@ -26,22 +16,22 @@
class StdOutRedirector : public QObject
{
Q_OBJECT
Q_OBJECT
public:
StdOutRedirector();
~StdOutRedirector();
void setOutputTF(QTextEdit* _output)
{
output = _output;
}
StdOutRedirector();
~StdOutRedirector();
void setOutputTF(QTextEdit* _output)
{
mOutput = _output;
}
public slots:
void readOutsToTF();
void readOutsToTF();
private:
QTextEdit* output;
int fdStdOut;
int fdguistd[2];
char* buffer = nullptr;
const int bufferSize = 4096;
QTextEdit* mOutput;
int mFdStdOut;
int mFdguistd[2];
char* mBuffer = nullptr;
const int mBufferSize = 4096;
};

View File

@@ -1,36 +0,0 @@
#include "languageswitcher.h"
#include <QTranslator>
#include "event/EventCenter.h"
LanguageSwitcher* LanguageSwitcher::lsw = Q_NULLPTR;
LanguageSwitcher* LanguageSwitcher::Instance()
{
if (lsw == Q_NULLPTR)
{
lsw = new LanguageSwitcher();
}
return lsw;
}
LanguageSwitcher::LanguageSwitcher()
{}
LanguageSwitcher::~LanguageSwitcher()
{}
void LanguageSwitcher::setTranslator(QTranslator* tra)
{
this->translator = tra;
}
void LanguageSwitcher::setDefaultLanguage(QString str)
{
QString lan = QString(":/translations/" + str + ".qm");
if (translator->load(lan))
{
EventCenter::Default()->triggerEvent(ReloadLanguage, nullptr, nullptr);
}
}

View File

@@ -1,25 +0,0 @@
#ifndef LANGUAGESWITCHER_H
#define LANGUAGESWITCHER_H
#include <QObject>
class QTranslator;
class LanguageSwitcher : public QObject
{
Q_OBJECT
public:
static LanguageSwitcher* Instance();
void setDefaultLanguage(QString str);
void setTranslator(QTranslator* tra);
signals:
public slots:
private:
explicit LanguageSwitcher();
~LanguageSwitcher();
static LanguageSwitcher* lsw;
QTranslator* translator = nullptr;
};
#endif // LANGUAGESWITCHER_H

View File

@@ -1,52 +0,0 @@
#include "locker.h"
#include <QTimer>
#include "appvals/AppGlobalValues.h"
#include "event/EventCenter.h"
#include "json/jsonobject.h"
Locker* Locker::locker = Q_NULLPTR;
Locker* Locker::Instance()
{
if (locker == Q_NULLPTR)
{
locker = new Locker();
}
return locker;
}
Locker::Locker()
{
counter = JsonObject::Instance()->lockerCount();
screenTimer = new QTimer(this);
connect(screenTimer, SIGNAL(timeout()), this, SLOT(coverScreen()));
}
Locker::~Locker() {}
void Locker::start()
{
screenTimer->start(counter);
}
void Locker::coverScreen()
{
if (AppGlobalValues::InProcessing().toBool()) {
refreshTimer();
}
else
{
screenTimer->stop();
EventCenter::Default()->triggerEvent(GUIEvents::RequestLogin, nullptr, nullptr);
}
}
void Locker::setTimer(int interval)
{
this->counter = interval;
screenTimer->stop();
screenTimer->start(this->counter);
}
void Locker::refreshTimer()
{
screenTimer->stop();
screenTimer->start(counter);
}

View File

@@ -1,28 +0,0 @@
#ifndef LOCKER_H
#define LOCKER_H
#include <QObject>
class QTimer;
class Locker : public QObject
{
Q_OBJECT
public:
static Locker* Instance();
void start();
void setTimer(int interval);
public slots:
void refreshTimer();
void coverScreen();
private:
Locker();
~Locker();
QTimer* screenTimer = nullptr;
int counter = 30000;
static Locker* locker;
};
#endif // LOCKER_H