Files
GUI/src/windows/LoginDialog.cpp
2023-09-08 10:20:10 +08:00

180 lines
5.1 KiB
C++

#include "LoginDialog.h"
#include <QVBoxLayout>
#include <QApplication>
#include <QDesktopWidget>
#include <QToolButton>
#include <QtWidgets/QLabel>
#include "event/EventCenter.h"
#include "dialogs/DialogManager.h"
#include "models/User.h"
#include "log/UserOperationLog.h"
#include "json/jsonobject.h"
#include "components/ULineEdit.h"
LoginDialog::LoginDialog(QWidget* aParent)
: QDialog(aParent)
, mVMainLayout(new QVBoxLayout(this))
, mDialogTitle(new QLabel(this))
, mDialogFrame(new QFrame(this))
, mTurnoffFrame(new QFrame(this))
, mDialogContentsLayout(new QVBoxLayout(mDialogFrame))
, mAccountEdit(new ULineEdit(mDialogFrame))
, mPasswordEdit(new ULineEdit(mDialogFrame))
, mLoginButton(nullptr)
, mErrorMessage(new QLabel(this))
, mIsRunning(false)
{
initializeAllWidget();
setWindowFlags(windowFlags() | Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint| Qt::BypassWindowManagerHint);
setGeometry(QApplication::desktop()->screenGeometry());
mAccountEdit->setText(JsonObject::Instance()->defaultUser());
}
LoginDialog::~LoginDialog()
{
}
void LoginDialog::initializeAllWidget()
{
this->setObjectName("loginForm");
setFocusPolicy(Qt::ClickFocus);
initializeTitle();
initializeDialogFrame();
initializeLayout();
initializeEdit();
initializeLoginButton();
initializeErrorMessage();
}
void LoginDialog::initializeLayout()
{
mVMainLayout->setContentsMargins(0, 0, 0, 0);
mVMainLayout->setSpacing(0);
mVMainLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
mVMainLayout->addWidget(mDialogTitle, 0, Qt::AlignCenter);
mVMainLayout->addWidget(mDialogFrame, 0, Qt::AlignCenter);
mVMainLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
mTurnoffFrame->setObjectName("TurnoffFrame");
mVMainLayout->addWidget(mTurnoffFrame, 0, Qt::AlignRight);
QHBoxLayout * hLayout = new QHBoxLayout(mTurnoffFrame);
hLayout->setDirection(QBoxLayout::RightToLeft);
QToolButton * turnOffBtn = new QToolButton(mTurnoffFrame);
turnOffBtn->setObjectName("TurnoffBtn");
hLayout->addWidget(turnOffBtn);
connect(turnOffBtn, &QToolButton::clicked, []()
{
if(DialogManager::Default()->requestAlertMessage(QString(tr("Shut down now ?")), DialogButtonMode::OkAndCancel,tr("Shut Down")) == QDialog::Accepted)
{
LOG_USER_OPERATION("Shut Down")
EventCenter::Default()->triggerEvent(GUIEvents::RequestShutdown, nullptr, nullptr);
}
});
mDialogContentsLayout->setSpacing(30);
mDialogContentsLayout->setContentsMargins(20, 60, 20, 20);
}
void LoginDialog::initializeTitle()
{
mDialogTitle->setObjectName("title");
mDialogTitle->setText(tr("U S C T"));
}
void LoginDialog::initializeDialogFrame()
{
mDialogFrame->setObjectName("loginFrame");
}
void LoginDialog::initializeEdit()
{
mAccountEdit->setObjectName("combobox_UserName");
mAccountEdit->setPlaceholderText(tr("Username"));
mAccountEdit->setFocusPolicy(Qt::ClickFocus);
mDialogContentsLayout->addWidget(mAccountEdit);
mPasswordEdit->setObjectName("edt_Password");
mPasswordEdit->setEchoMode(QLineEdit::Password);
mPasswordEdit->setPlaceholderText(tr("Password"));
mPasswordEdit->setFocusPolicy(Qt::ClickFocus);
mDialogContentsLayout->addWidget(mPasswordEdit);
}
void LoginDialog::initializeLoginButton()
{
auto btnLogin = new QToolButton(this);
btnLogin->setObjectName("btnlogin");
mDialogContentsLayout->addWidget(btnLogin);
btnLogin->setText(tr("Login"));
mDialogContentsLayout->removeWidget(btnLogin);
mDialogContentsLayout->addWidget(btnLogin, 0, Qt::AlignCenter);
mLoginButton = btnLogin;
connect(mLoginButton, SIGNAL(clicked()), this, SLOT(doLogin()));
}
void LoginDialog::initializeErrorMessage()
{
mErrorMessage->setObjectName("warn");
mErrorMessage->setText("Login failed, username or password error!");
mErrorMessage->setVisible(false);
mDialogContentsLayout->addWidget(mErrorMessage, 0, Qt::AlignCenter);
}
void LoginDialog::clearInputData()
{
mAccountEdit->clear();
mPasswordEdit->clear();
}
void LoginDialog::doLogin()
{
QString strUserCode = mAccountEdit->text();
QString strPassWord = mPasswordEdit->text();
QString encryptedPassword = strPassWord;
strPassWord = "123456";
QString encryptPwd = User::getEncryptedPassword(strPassWord);
if (User::QueryUser(strUserCode, encryptPwd))
{
mErrorMessage->setVisible(false);
accept();
LOG_USER_OPERATION("Login Sucessful");
JsonObject::Instance()->setDefaultUser(strUserCode);
}
else
{
LOG_USER_OPERATION(QString("Login Failed, User Name: %1").arg(strUserCode));
mErrorMessage->setVisible(true);
}
}
void LoginDialog::accept()
{
QDialog::accept();
clearInputData();
mIsRunning = false;
}
int LoginDialog::exec()
{
mIsRunning = true;
return QDialog::exec();
}
bool LoginDialog::isRunning()
{
return mIsRunning;
}
void LoginDialog::showEvent(QShowEvent* event)
{
QDialog::showEvent(event);
emit loginDialogShown();
}