File arrangement

This commit is contained in:
Krad
2022-02-14 11:40:40 +08:00
parent 5dafb1e816
commit 73cd96333d
61 changed files with 32 additions and 32 deletions

149
src/windows/loginwindow.cpp Normal file
View File

@@ -0,0 +1,149 @@
#include "loginwindow.h"
#include <QVBoxLayout>
#include <QLineEdit>
#include <QToolButton>
#include <QFrame>
#include <QInputMethodEvent>
#include <QtWidgets/QLabel>
#include "guimacros.h"
#include <QCryptographicHash>
#include <src/event/EventCenter.h>
#include "db/SQLHelper.h"
#include "src/utilities/InputObject.h"
#include "models/User.h"
#include "log/UserOperationLog.h"
#include "json/jsonobject.h"
#include "src/dialogs/guimessagedialog.h"
LoginWindow::LoginWindow(QWidget* parent)
: QDialog(parent)
, m_pLoginButton(nullptr)
, m_pVMainLayout(nullptr)
, m_pUserCodeFrame(nullptr)
, m_pUserCodeLayout(nullptr)
, m_pUserCodeEdit(nullptr)
, m_pPassWordEdit(nullptr)
{
initUi();
init();
setWindowFlags(windowFlags() | Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
//Dialog::Instance()->InitForm();
m_pUserCodeEdit->setText(JsonObject::Instance()->defaultUser());
}
LoginWindow::~LoginWindow()
{
}
void LoginWindow::initUi()
{
this->setObjectName("loginform");
m_pVMainLayout = new QVBoxLayout(this);
m_pVMainLayout->setContentsMargins(0, 0, 0, 0);
m_pVMainLayout->setSpacing(0);
m_pVMainLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
QLabel* title = new QLabel(this);
title->setObjectName("title");
title->setText(tr("U S C T"));
m_pVMainLayout->addWidget(title, 0, Qt::AlignCenter);
m_pUserCodeFrame = new QFrame(this);
m_pUserCodeFrame->setObjectName("login_frame_username");
m_pUserCodeLayout = new QVBoxLayout(m_pUserCodeFrame);
m_pUserCodeLayout->setSpacing(30);
m_pUserCodeLayout->setContentsMargins(20, 60, 20, 20);
warn = new QLabel(this);
warn->setObjectName("warn");
warn->setText("Login failed, username or password error!");
warn->setVisible(false);
m_pUserCodeLayout->addWidget(warn, 0, Qt::AlignCenter);
m_pUserCodeEdit = new QLineEdit(m_pUserCodeFrame);
m_pUserCodeEdit->setObjectName("combobox_UserName");
//m_pUserCodeEdit->setLineEdit(new QLineEdit(m_pUserCodeFrame));
m_pUserCodeEdit->setPlaceholderText(tr("Username"));
m_pUserCodeLayout->addWidget(m_pUserCodeEdit);
m_pVMainLayout->addWidget(m_pUserCodeFrame, 0, Qt::AlignCenter);
m_pPassWordEdit = new QLineEdit(this);
m_pPassWordEdit->setObjectName("edt_Password");
m_pPassWordEdit->setEchoMode(QLineEdit::Password);
m_pPassWordEdit->setPlaceholderText(tr("Password"));
m_pUserCodeLayout->addWidget(m_pPassWordEdit);
ADD_TOOL_BTN_TO_LAYOUT(login, ":/icons/login.png", m_pUserCodeLayout);
btnlogin->setText(tr("Login"));
m_pUserCodeLayout->removeWidget(btnlogin);
m_pUserCodeLayout->addWidget(btnlogin, 0, Qt::AlignCenter);
m_pLoginButton = btnlogin;
btnlogin->setObjectName("btnlogin");
// m_pUserCodeLayout->addWidget(m_pLoginButton, 0, Qt::AlignCenter);
m_pVMainLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding));
connect(EventCenter::Default(), &EventCenter::DeviceErrorRaise, [=](QObject* parent, QObject* msg) {
if (!this->isVisible()) return;
//默认旧模式
GUIMessageDialog msgDialog(this);
msgDialog.setOpacity(1.0);
if (msg) {
QString* str = (QString*)msg;
msgDialog.showMessage(*str);
}
else {
msgDialog.showMessage("Something went error!");
}
msgDialog.stopLoading();
msgDialog.showExitButton();
// msgDialog.setWindowModality(Q);
msgDialog.exec();
});
initUserList();
}
void LoginWindow::init()
{
connect(m_pLoginButton, SIGNAL(clicked()), this, SLOT(doLogin()));
}
void LoginWindow::initUserList()
{
}
void LoginWindow::clearInputData()
{
m_pUserCodeEdit->clear();
m_pPassWordEdit->clear();
//m_pUserCodeEdit->setFocus();
}
void LoginWindow::doLogin()
{
QString strUserCode = m_pUserCodeEdit->text();
QString strPassWord = m_pPassWordEdit->text();
QString encryptedPassword = strPassWord;
strPassWord = "123456";
QString encryptPwd = User::getEncryptedPassword(strPassWord);
QString sql = QString("select UserCode from Account where UserCode='%1' and Password='%2'")
.arg(strUserCode).arg(encryptPwd);
if (User::QueryUser(strUserCode, encryptPwd))
{
accept();
LOG_USER_OPERATION(Login);
JsonObject::Instance()->setDefaultUser(strUserCode);
}
else {
warn->setVisible(true);
}
}

48
src/windows/loginwindow.h Normal file
View File

@@ -0,0 +1,48 @@
#ifndef LOGINWINDOW_H
#define LOGINWINDOW_H
#include <QKeyEvent>
#include <QComboBox>
#include <QDialog>
class QVBoxLayout;
class QLineEdit;
class QToolButton;
class QFrame;
class QLabel;
class LoginWindow : public QDialog
{
Q_OBJECT
public:
LoginWindow(QWidget* parent = nullptr);
~LoginWindow() override;
void initUi();
void init();
void clearInputData();
signals:
void sigUserLoginSuccessful(const QString& userCode);
public slots:
void doLogin();
//void onUserCodeFocusOut(QFocusEvent* e);
private:
void initUserList();
private:
QVBoxLayout* m_pVMainLayout;
QFrame* m_pUserCodeFrame;
QVBoxLayout* m_pUserCodeLayout;
QLineEdit* m_pUserCodeEdit;
QLineEdit* m_pPassWordEdit;
QToolButton* m_pLoginButton;
QLabel* warn;
};
#endif // LOGINWINDOW_H

369
src/windows/mainwindow.cpp Normal file
View File

@@ -0,0 +1,369 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qtabwidget.h>
#include <QSizePolicy>
#include <QHBoxLayout>
#include "event/EventCenter.h"
#include "src/forms/tabformwidget.h"
#include "src/forms/select/SelectFormWidget.h"
#include "src/forms/scan/ScanFormWidget.h"
#include "src/dialogs/guimessagedialog.h"
#include "device/DeviceManager.h"
#include "errorhandle/GUIErrorHandle.h"
#include "loginwindow.h"
#include <QTextEdit>
#include <QScrollBar>
#include "models/User.h"
#include "src/forms/settings/AdminSettingForm.h"
#include "appvals/AppGlobalValues.h"
#include <fstream>
#include <sstream>
#include <QDateTime>
#include "src/forms/TopBarWidget.h"
#include <QGestureEvent>
#include <QDockWidget>
void MainWindow::QMessageOutput(QtMsgType type, const QMessageLogContext& context, const QString& msg)
{
std::cout << msg.toStdString().c_str() << std::endl;
//QByteArray localMsg = msg.toLocal8Bit();
//switch (type) {
//case QtDebugMsg:
// fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
// break;
//case QtInfoMsg:
// fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
// break;
//case QtWarningMsg:
// fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
// break;
//case QtCriticalMsg:
// fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
// break;
//case QtFatalMsg:
// fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
// abort();
//}
}
MainWindow::MainWindow(QWidget* parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
this->loadStyleSheet("Dark2");
ui->setupUi(this);
tab = new QTabWidget(this);
tab->setTabPosition(QTabWidget::South);
tab->setContentsMargins(0, 0, 0, 0);
connect(EventCenter::Default(), &EventCenter::PatientSelected, [=](QObject* sender, QObject* data) {
tab->setCurrentIndex(1);
});
SelectFormWidget* select_form = new SelectFormWidget(this);
tab->addTab(select_form, tr("Select"));
ScanFormWidget* scan_form = new ScanFormWidget(this);
tab->addTab(scan_form, tr("Scan"));
TabFormWidget* verify_form = new TabFormWidget(this);
tab->addTab(verify_form, tr("Verify"));
tab->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QVBoxLayout* layout = new QVBoxLayout(this);
layout->setMargin(0);
layout->setSpacing(0);
QWidget* top = new TopBarWidget(this);
top->setObjectName("topbarWidget");
layout->addWidget(top);
layout->addWidget(tab);
ui->centralWidget->setLayout(layout);
this->setWindowFlags(Qt::Window);
connect(EventCenter::Default(), &EventCenter::DeviceErrorRaise, [=](QObject* parent, QObject* msg) {
if (!this->ui->centralWidget->isVisible()) return;
//默认旧模式
if (!msgDialog) {
msgDialog = new GUIMessageDialog(this);
//msgDialog->setStyleSheet(style);
}
if (msg) {
QString* str = (QString*)msg;
msgDialog->showMessage(*str);
}
else {
msgDialog->showMessage("Something went error!");
}
msgDialog->stopLoading();
msgDialog->showExitButton();
if (msgDialog->isHidden()) {
msgDialog->setWindowModality(Qt::NonModal);
msgDialog->exec();
}
});
connect(EventCenter::Default(), &EventCenter::InvokeOperationStart, [=](QObject*, QObject* msg) {
if (msgDialog) {
msgDialog->hide();
delete msgDialog;
}
msgDialog = new GUIMessageDialog(this);
if (msg)
{
QString* str = (QString*)msg;
msgDialog->showMessage(*str);
}
else {
msgDialog->hideMessage();
}
msgDialog->hideExitButton();
msgDialog->startLoading();
AppGlobalValues::setInProcessing(true);
// msgDialog->showFullScreen();
if (msgDialog->isHidden()) {
msgDialog->show();
}
});
connect(EventCenter::Default(), &EventCenter::InvokeOperationProgress, [=](QObject*, QObject* msg) {
if (!msgDialog) msgDialog = new GUIMessageDialog(this);
if (msg)
{
QVariant* var = (QVariant*)msg;
msgDialog->showMessage(QString("Scanning %1%").arg((int)(var->toFloat() * 100.0f)));
}
else {
msgDialog->hideMessage();
}
// msgDialog->showFullScreen();
if (msgDialog->isHidden())msgDialog->show();
});
connect(EventCenter::Default(), &EventCenter::InvokeOperationEnd, [=]() {
if (!msgDialog) return;
if (!msgDialog->isHidden())msgDialog->accept();
delete msgDialog;
msgDialog = nullptr;
AppGlobalValues::setInProcessing(false);
});
connect(EventCenter::Default(), &EventCenter::RequestLogin, [=](QObject*, QObject* msg) {
this->requestLogin();
});
connect(EventCenter::Default(), &EventCenter::LoginRoleChanged, [=](QObject*, QObject*) {
if (User::Current()->isAdmin())
{
if (admin_tab_index == -1)
{
AdminSettingForm* form = new AdminSettingForm(this);
admin_tab_index = tab->addTab(form, tr("Settings"));
}
}
else {
if (admin_tab_index != -1) {
tab->removeTab(admin_tab_index);
admin_tab_index = -1;
}
}
qApp->processEvents();
});
connect(DeviceManager::Default(), &DeviceManager::raiseGlobalError, this, &MainWindow::triggerError);
GUIErrorHandle::Default()->init();
l = new LoginWindow(this);
t = QThread::create([]() {
QThread::sleep(10);
int f = 0x00100001;
for (int i = 0; i < 8; ++i) {
QThread::sleep(10);
f = f << (i * 4);
printf("invoke %d\r\n", f);
char* v = (char*)&f;
QString msg;
msg.append("w ");
msg.append(v[0]);
msg.append(v[1]);
msg.append(v[2]);
msg.append(v[3]);
EventCenter::Default()->triggerEvent(GUIErrorRaise, nullptr, (QObject*)&msg);
}
});
t->start();
l->showFullScreen();
centerWidgetHide();
connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() {
tab->setTabText(0, tr("Select"));
tab->setTabText(1, tr("Scan"));
tab->setTabText(2, tr("Verify"));
tab->setTabText(3, tr("Settings"));
});
}
MainWindow::~MainWindow()
{
t->terminate();
delete t;
delete ui;
delete redir;
}
void MainWindow::changeEvent(QEvent* event)
{
if (event->type() == QEvent::LanguageChange)
{
ui->retranslateUi(this);
}
QWidget::changeEvent(event);
}
void MainWindow::loadStyleSheet(const QString& sheetName)
{
QFile file(":/stylesheet/" + sheetName + ".css");
file.open(QFile::ReadOnly);
if (file.isOpen())
{
QString styleSheet = this->styleSheet();
styleSheet += QLatin1String(file.readAll());
this->setStyleSheet(styleSheet);
}
}
void MainWindow::centerWidgetHide() {
ui->centralWidget->setVisible(false);
}
void MainWindow::centerWidgetShow() {
ui->centralWidget->setVisible(true);
}
QTextEdit* MainWindow::getEdit()
{
return this->console;
}
void MainWindow::requestLogin() {
l->clearInputData();
l->setWindowModality(Qt::WindowModal);
l->showFullScreen();
this->centerWidgetHide();
while (l->result() != QDialog::Accepted)
{
l->exec();
}
l->setResult(QDialog::Rejected);
this->centerWidgetShow();
}
void MainWindow::debugConsoleOn() {
debugMode = true;
dockWidget = new QDockWidget(this);
dockWidget->setObjectName(QString::fromUtf8("dockWidget"));
dockWidget->setAllowedAreas(Qt::RightDockWidgetArea);
this->addDockWidget(static_cast<Qt::DockWidgetArea>(2), dockWidget);
QTextEdit* text_edit = new QTextEdit(this);
text_edit->setFocusPolicy(Qt::NoFocus);
dockWidget->setWidget(text_edit);
const QString edit_style =
"QScrollBar:vertical{border: 0px solid grey; background:#2d2d2d; width: 15px; margin: 0px 0 0px 0; }"
"QScrollBar::handle:vertical{background:#5a5a5a;min-height: 25px;}"
"QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical{background:#2d2d2d;}";
text_edit->verticalScrollBar()->setStyleSheet(edit_style);
//clear buffer before redirect;
this->console = text_edit;
}
void MainWindow::triggerError(const QString& msg) {
QString s(msg);
qDebug() << "invoke trigger error slot msg:" << msg;
EventCenter::Default()->triggerEvent(GUIErrorRaise, nullptr, (QObject*)&s);
}
void MainWindow::grabGestures(const QList<Qt::GestureType>& gestures)
{
//! [enable gestures]
foreach(Qt::GestureType gesture, gestures)
grabGesture(gesture);
//! [enable gestures]
}
//! [event handler]
bool MainWindow::event(QEvent* event)
{
if (event->type() == QEvent::Gesture)
return gestureEvent(static_cast<QGestureEvent*>(event));
return QWidget::event(event);
}
bool MainWindow::gestureEvent(QGestureEvent* event)
{
//qCDebug(lcExample) << "gestureEvent():" << event;
if (QGesture* swipe = event->gesture(Qt::SwipeGesture))
swipeTriggered(static_cast<QSwipeGesture*>(swipe));
if (QGesture* pan = event->gesture(Qt::PanGesture))
panTriggered(static_cast<QPanGesture*>(pan));
//if (QGesture* pinch = event->gesture(Qt::PinchGesture))
//pinchTriggered(static_cast<QPinchGesture*>(pinch));
return true;
}
void MainWindow::panTriggered(QPanGesture* gesture)
{
if (gesture->state() == Qt::GestureFinished) {
QPointF delta = gesture->offset();
int index = tab->currentIndex();
if (delta.x() > 50) {
index--;
if (index >= 0) {
tab->setCurrentIndex(index);
}
}
if (delta.x() < -50)
{
index++;
if (index < tab->count()) {
tab->setCurrentIndex(index);
}
}
qDebug() << "panTriggered" << index;
}
}
void MainWindow::swipeTriggered(QSwipeGesture* gesture)
{
if (gesture->state() == Qt::GestureFinished) {
//if (gesture->horizontalDirection() == QSwipeGesture::Right) {
// int index = tab->currentIndex();
// index--;
// if (index >= 0) {
// tab->setCurrentIndex(index);
// }
//}
//if (gesture->horizontalDirection() == QSwipeGesture::Left) {
// int index = tab->currentIndex();
// index++;
// if (index < tab->count()) {
// tab->setCurrentIndex(index);
// }
//}
if (gesture->verticalDirection() == QSwipeGesture::Down) {
if (debugMode)
{
dockWidget->show();
}
}
if (gesture->verticalDirection() == QSwipeGesture::Up) {
if (debugMode)
{
dockWidget->hide();
}
}
//update();
}
}

62
src/windows/mainwindow.h Normal file
View File

@@ -0,0 +1,62 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QTimer>
#include "src/utilities/StdOutRedirector.h"
#include "json/cJSON.h"
#include "loginwindow.h"
namespace Ui {
class MainWindow;
}
class GUIMessageDialog;
class QTabWidget;
class QGestureEvent;
class QSwipeGesture;
class QPanGesture;
class QDockWidget;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget* parent = nullptr);
~MainWindow();
static void QMessageOutput(QtMsgType, const QMessageLogContext&, const QString& msg);
void centerWidgetHide();
void centerWidgetShow();
void requestLogin();
QTextEdit* getEdit();
void debugConsoleOn();
void grabGestures(const QList<Qt::GestureType>& gestures);
public slots:
void triggerError(const QString&);
protected:
void changeEvent(QEvent* event);
bool event(QEvent* event) override;
private:
bool gestureEvent(QGestureEvent* event);
void swipeTriggered(QSwipeGesture*);
void panTriggered(QPanGesture*);
void loadStyleSheet(const QString& sheetName);
cJSON* json_root = nullptr;
Ui::MainWindow* ui;
QDockWidget* dockWidget;
GUIMessageDialog* msgDialog = nullptr;
StdOutRedirector* redir = nullptr;
QTextEdit* console = nullptr;
bool m_bLoaded = false;
QTabWidget* tab = nullptr;
int admin_tab_index = -1;
LoginWindow* l;
QThread* t;
bool debugMode = false;
};
#endif // MAINWINDOW_H

21
src/windows/mainwindow.ui Normal file
View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>