Add InitializeWidget before login.

This commit is contained in:
sunwen
2023-08-31 14:26:54 +08:00
parent 20b4d1ce36
commit 28e33da16d
11 changed files with 223 additions and 33 deletions

View File

@@ -83,10 +83,10 @@ QString getFullScanJson(QObject* obj)
void DeviceManager::initDevice() void DeviceManager::initDevice()
{ {
dmsmq_init(); mIsInitializing = true;
dmsmq_init();
if(JsonObject::Instance()->isDmsSimulator()) if(JsonObject::Instance()->isDmsSimulator())
{ {
qDebug()<< JsonObject::Instance()->isDmsSimulator();
//set simulator //set simulator
QString simulatorCode = "{ \"code\":0, \"info\":\"1\"}"; QString simulatorCode = "{ \"code\":0, \"info\":\"1\"}";
QByteArray byteArray = simulatorCode.toUtf8(); QByteArray byteArray = simulatorCode.toUtf8();
@@ -132,6 +132,9 @@ void DeviceManager::initDevice()
mPreviewScanAction = new DmsSyncAction(USRV_SCAN, ACT_SCAN_PREVIEW, this, "responsePreviewScan(const QString&)", this); mPreviewScanAction = new DmsSyncAction(USRV_SCAN, ACT_SCAN_PREVIEW, this, "responsePreviewScan(const QString&)", this);
mTransferAction = new DmsSyncAction(USRV_XFR, ACT_XFR_START, this, "responseTransfer(const QString&)", this); mTransferAction = new DmsSyncAction(USRV_XFR, ACT_XFR_START, this, "responseTransfer(const QString&)", this);
mGetTransferProgressAction = new DmsSyncAction(USRV_XFR, ACT_XFR_PROGRESS_PASSIVE, this, "responseGetTransferProgress(const QString&)", this); mGetTransferProgressAction = new DmsSyncAction(USRV_XFR, ACT_XFR_PROGRESS_PASSIVE, this, "responseGetTransferProgress(const QString&)", this);
mCEScanAction = new DmsSyncAction(USRV_SCAN, ACT_SCAN_CE, this, "responseCEScan(const QString&)", this);
mGetCEStatusAction = new DmsSyncAction(USRV_SCAN, ACT_SCAN_CE_STATUS, this, "responseGetCEStatus(const QString&)", this);
mPumpControlAction = new DmsSyncAction(USRV_CONTROL, ACT_CTL_PUMP, this, "responsePumpControl(const QString&)", this);
//Async action //Async action
mGetScanProgressAction = new DmsAsyncAction(USRV_SCAN, ACT_SCAN_PROGRESS_PASSIVE, this,"responseGetScanProgress(const QString&)", this); mGetScanProgressAction = new DmsAsyncAction(USRV_SCAN, ACT_SCAN_PROGRESS_PASSIVE, this,"responseGetScanProgress(const QString&)", this);
@@ -166,10 +169,55 @@ void DeviceManager::initDevice()
{ {
mStopScanAction->execute(); mStopScanAction->execute();
} }
startTransfer(); if(!getCEStatus())
{
if(startCEScan())
{
mScanProgressTimer = startTimer(500);
}
}
else
{
emit initializeProgress("33");
QThread::msleep(500);
emit initializeProgress("66");
QThread::msleep(500);
emit initializeProgress("100");
emit initializeFinished();
}
startTransfer();
initEmptyScanMeasurementID(); initEmptyScanMeasurementID();
//mGetSoftwareVersionAction->execute(); //mGetSoftwareVersionAction->execute();
}
void DeviceManager::processInitializeProgress(const QString& aProgress)
{
if(!mIsInitializing)
{
return;
}
QJsonObject jsonObj = toJsonObject(aProgress);
int code = jsonObj["code"].toInt();
QString msg = jsonObj["info"].toString();
switch (code)
{
case 1:
emit initializeProgress(msg);
break;
case 2:
prepareFinishInitialize();
emit initializeFinished();
break;
case -1:
prepareFinishInitialize();
THROW_ERROR(msg);
break;
default:
break;
}
} }
bool DeviceManager::hasValidEmptyScan() bool DeviceManager::hasValidEmptyScan()
@@ -209,7 +257,7 @@ void DeviceManager::startScan(const QString& json, bool empty)
} }
} }
void DeviceManager::processScanProcess(const QString& aProgress) void DeviceManager::processScanProgress(const QString& aProgress)
{ {
if(mIsScanning == false) if(mIsScanning == false)
{ {
@@ -274,6 +322,8 @@ void DeviceManager::prepareFinishScan(bool isNormalFinish, const QString& aReaso
insertScanRecord(); insertScanRecord();
} }
startTransfer();
if(isCompleteNotify) if(isCompleteNotify)
{ {
QString msg = QString("Scan completed!"); QString msg = QString("Scan completed!");
@@ -283,8 +333,16 @@ void DeviceManager::prepareFinishScan(bool isNormalFinish, const QString& aReaso
{ {
TRIGGER_EVENT(InvokeOperationEnd, nullptr, var); TRIGGER_EVENT(InvokeOperationEnd, nullptr, var);
} }
}
startTransfer(); void DeviceManager::prepareFinishInitialize()
{
mIsInitializing = false;
if(mScanProgressTimer != -1)
{
killTimer(mScanProgressTimer);
mScanProgressTimer = -1;
}
} }
void DeviceManager::stopFullScan() void DeviceManager::stopFullScan()
@@ -449,15 +507,28 @@ void DeviceManager::processReceiveDMSInfoResult(int aServerID, int aActionID, co
break; break;
case ACT_SCAN_PROGRESS_PASSIVE : case ACT_SCAN_PROGRESS_PASSIVE :
emit responseGetScanProgress(aContents); emit responseGetScanProgress(aContents);
processScanProcess(aContents); if(mIsInitializing)
break; {
processInitializeProgress(aContents);
}
else
{
processScanProgress(aContents);
}
break;
case ACT_SCAN_PRESIG: case ACT_SCAN_PRESIG:
processPreviewData(aContents); processPreviewData(aContents);
break; break;
case ACT_SCAN_STOP : case ACT_SCAN_STOP :
emit responseStopScan(aContents); emit responseStopScan(aContents);
break; break;
default: case ACT_SCAN_CE :
emit responseCEScan(aContents);
break;
case ACT_SCAN_CE_STATUS :
emit responseGetCEStatus(aContents);
break;
default:
break; break;
} }
break; break;
@@ -494,6 +565,14 @@ void DeviceManager::processReceiveDMSInfoResult(int aServerID, int aActionID, co
break; break;
} }
break; break;
case USRV_CONTROL:
switch(aActionID)
{
case ACT_CTL_PUMP:
emit responsePumpControl(aContents);
break;
}
break;
default: default:
break; break;
} }
@@ -582,6 +661,26 @@ bool DeviceManager::startFullScan(const QString& aPatientInfo)
return true; return true;
} }
bool DeviceManager::startCEScan()
{
DmsSyncActionResult result = mCEScanAction->execute();
if(!result.mIsSucessful)
{
QString message = QString("Dms connection error. Reason:%1").arg(result.mData);
THROW_ERROR(message);
return false;
}
QJsonObject jsonObj = toJsonObject(result.mData);
if(jsonObj.contains("code") && jsonObj["code"].toInt() != 0)
{
QString msg = jsonObj["info"].toString();
THROW_ERROR(msg);
return false;
}
return true;
}
void DeviceManager::getDeviceTemperature() void DeviceManager::getDeviceTemperature()
{ {
mGetDeviceTemperatureAction->execute(); mGetDeviceTemperatureAction->execute();
@@ -896,3 +995,19 @@ int DeviceManager::getTransferProgress()
return mTransferProgress; return mTransferProgress;
} }
bool DeviceManager::getCEStatus()
{
auto result = mGetCEStatusAction->execute();
if(result.mIsSucessful)
{
QJsonObject jsonObj = toJsonObject(result.mData);
if(jsonObj["code"].toInt() == 0 )
{
if(jsonObj["info"].toString().toInt() == 0)
{
return false;
}
}
}
return true;
}

View File

@@ -101,11 +101,15 @@ private:
void stopPreviewScan(); void stopPreviewScan();
void getDeviceTemperature(); void getDeviceTemperature();
void getScanProcess(); void getScanProcess();
bool getCEStatus();
bool startCEScan();
void startTransfer(); void startTransfer();
void initEmptyScanMeasurementID(); void initEmptyScanMeasurementID();
void processScanProcess(const QString& aProgress); void processScanProgress(const QString& aProgress);
void processInitializeProgress(const QString& aProgress);
void prepareFinishScan(bool isNormalFinish, const QString& aReason = ""); void prepareFinishScan(bool isNormalFinish, const QString& aReason = "");
void prepareFinishInitialize();
void processAlarm(const QString& aAlarm); void processAlarm(const QString& aAlarm);
void processPreviewData(const QString& aPreviewData); void processPreviewData(const QString& aPreviewData);
void processGetSoftwareVersion(const QString& aSoftwareVersion); void processGetSoftwareVersion(const QString& aSoftwareVersion);
@@ -119,6 +123,7 @@ private:
private slots: private slots:
//DMS //DMS
void processReceiveDMSInfoResult(int aServerID, int aActionID, const QString& aContents); void processReceiveDMSInfoResult(int aServerID, int aActionID, const QString& aContents);
//Recon //Recon
void processReconCreateEmptyScan(bool aResult, const QString& aScanID, const QString& aMessage); void processReconCreateEmptyScan(bool aResult, const QString& aScanID, const QString& aMessage);
void processReconCreateScan(bool aResult, const QString& aScanID, const QString& aMessage); void processReconCreateScan(bool aResult, const QString& aScanID, const QString& aMessage);
@@ -131,12 +136,15 @@ signals:
void responseGetDeviceStatus(const QString& aDeviceStatus); void responseGetDeviceStatus(const QString& aDeviceStatus);
void responseGetDeviceTemperature(const QString& aDeviceTemperature); void responseGetDeviceTemperature(const QString& aDeviceTemperature);
void responseFullScan(const QString& aResponse); void responseFullScan(const QString& aResponse);
void responseCEScan(const QString& aResponse);
void responseGetScanProgress(const QString& aProgrese); void responseGetScanProgress(const QString& aProgrese);
void responseStopScan(const QString& aResponse); void responseStopScan(const QString& aResponse);
void responsePreviewScan(const QString& aResponse); void responsePreviewScan(const QString& aResponse);
void responseGetSoftwareVersion(const QString& aSoftwareVersion); void responseGetSoftwareVersion(const QString& aSoftwareVersion);
void responseTransfer(const QString& aResponse); void responseTransfer(const QString& aResponse);
void responseGetTransferProgress(const QString& aProgress); void responseGetTransferProgress(const QString& aProgress);
void responseGetCEStatus(const QString& aProgress);
void responsePumpControl(const QString aResponse);
//Recon //Recon
void createEmptyScanToRecon(const QString& aScanID, const QString& aPath); void createEmptyScanToRecon(const QString& aScanID, const QString& aPath);
void createScanToRecon(const QString& aScanID, const QString& aPatientID, const QString& aReferenceID, const QString& aPath); void createScanToRecon(const QString& aScanID, const QString& aPatientID, const QString& aReferenceID, const QString& aPath);
@@ -144,6 +152,7 @@ signals:
void updateReconStateFinished(); void updateReconStateFinished();
//GUI //GUI
void initializeFinished(); void initializeFinished();
void initializeProgress(const QString& aProgress);
void transferStatusUpdated(); void transferStatusUpdated();
@@ -156,6 +165,7 @@ private:
bool mIsScanning = false; bool mIsScanning = false;
bool mIsTransfering = false; bool mIsTransfering = false;
bool mIsPreviewing = false; bool mIsPreviewing = false;
bool mIsInitializing = false;
QString mCurrentScanMeasurementID = ""; QString mCurrentScanMeasurementID = "";
QString mCurrentEmptyMeasurementID = ""; QString mCurrentEmptyMeasurementID = "";
@@ -176,6 +186,8 @@ private:
DmsSyncAction* mStopScanAction = nullptr; DmsSyncAction* mStopScanAction = nullptr;
DmsSyncAction* mTransferAction = nullptr; DmsSyncAction* mTransferAction = nullptr;
DmsSyncAction* mGetTransferProgressAction = nullptr; DmsSyncAction* mGetTransferProgressAction = nullptr;
DmsSyncAction* mGetCEStatusAction = nullptr;
DmsSyncAction* mPumpControlAction = nullptr;
DmsAsyncAction* mGetDeviceTemperatureAction = nullptr; DmsAsyncAction* mGetDeviceTemperatureAction = nullptr;
DmsAsyncAction* mGetScanProgressAction = nullptr; DmsAsyncAction* mGetScanProgressAction = nullptr;

View File

@@ -89,6 +89,7 @@ void DialogManager::requestLogin(QWidget* aParent)
//Login 直接最顶层模态 //Login 直接最顶层模态
if (!mFunctionDialog){ if (!mFunctionDialog){
mFunctionDialog = new LoginDialog(aParent); mFunctionDialog = new LoginDialog(aParent);
connect(mFunctionDialog, &LoginDialog::loginDialogShown, this, &DialogManager::loginDialogShown, Qt::QueuedConnection);
} }
if(mFunctionDialog->isRunning()) if(mFunctionDialog->isRunning())

View File

@@ -33,6 +33,7 @@ struct DialogResult
}; };
class DialogManager:public QObject { class DialogManager:public QObject {
Q_OBJECT
public: public:
static DialogManager *Default() { static DialogManager *Default() {
static DialogManager manager; static DialogManager manager;
@@ -82,6 +83,9 @@ private:
void setTopWidget(QWidget* widget); void setTopWidget(QWidget* widget);
void releaseTopWidget(QWidget* expectedTopWidget); void releaseTopWidget(QWidget* expectedTopWidget);
signals:
void loginDialogShown();
private: private:
LoginDialog* mFunctionDialog; LoginDialog* mFunctionDialog;
ScreenSaverWindow* mScreenSaverWindow; ScreenSaverWindow* mScreenSaverWindow;

View File

@@ -115,8 +115,6 @@ int main(int argc, char* argv[])
Timer.start(1000); Timer.start(1000);
thread.start(); thread.start();
w.requestLogin();
DeviceManager::Default()->initDevice(); DeviceManager::Default()->initDevice();
ret = a.exec(); ret = a.exec();
@@ -126,9 +124,8 @@ int main(int argc, char* argv[])
else else
{ {
w.showFullScreen(); w.showFullScreen();
w.requestLogin();
DeviceManager::Default()->initDevice(); DeviceManager::Default()->initDevice();
ret = a.exec(); ret = a.exec();
} }
DeviceManager::Default()->close(); DeviceManager::Default()->close();

View File

@@ -0,0 +1,30 @@
#include "InitializeWidget.h"
#include <QLabel>
#include <QVBoxLayout>
#include <QProgressBar>
InitializeWidget::InitializeWidget(QWidget* aParent)
: QWidget(aParent)
, mMessage(new QLabel(this))
, mProgressBar(new QProgressBar(this))
{
setContentsMargins(0, 0, 0, 0);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(mMessage);
layout->addWidget(mProgressBar);
QPixmap pixmap = QPixmap("./cfgs/initialize.jpg");
mMessage->setPixmap(pixmap);
mMessage->setScaledContents(true);
mProgressBar->setTextVisible(true);
mProgressBar->setFormat("Initializing %p%");
mProgressBar->setAlignment(Qt::AlignCenter);
}
void InitializeWidget::setMessage(const QString& aMessage)
{
mProgressBar->setValue(aMessage.toInt());
}

View File

@@ -0,0 +1,24 @@
#ifndef INITIALIZEWIDGET_H
#define INITIALIZEWIDGET_H
#include <QWidget>
class QLabel;
class QProgressBar;
class InitializeWidget : public QWidget
{
Q_OBJECT
public:
InitializeWidget(QWidget* aParent);
public slots:
void setMessage(const QString& aMessage);
private:
QLabel* mMessage;
QProgressBar* mProgressBar;
};
#endif // INITIALIZEWIDGET_H

View File

@@ -152,4 +152,11 @@ bool LoginDialog::isRunning()
return mIsRunning; return mIsRunning;
} }
void LoginDialog::showEvent(QShowEvent* event)
{
QDialog::showEvent(event);
emit loginDialogShown();
}

View File

@@ -24,8 +24,12 @@ public:
int exec() override; int exec() override;
bool isRunning(); bool isRunning();
protected:
void showEvent(QShowEvent *event) override;
signals: signals:
void sigUserLoginSuccessful(const QString& aUserCode); void sigUserLoginSuccessful(const QString& aUserCode);
void loginDialogShown();
private slots: private slots:
void doLogin(); void doLogin();

View File

@@ -8,6 +8,7 @@
#include <QGestureEvent> #include <QGestureEvent>
#include <QDockWidget> #include <QDockWidget>
#include "InitializeWidget.h"
#include "event/EventCenter.h" #include "event/EventCenter.h"
#include "forms/TabFormWidget.h" #include "forms/TabFormWidget.h"
#include "forms/recon/ReconFormWidget.h" #include "forms/recon/ReconFormWidget.h"
@@ -29,6 +30,7 @@ MainWindow::MainWindow(QWidget* aParent)
, mDebugConsoleWidget(nullptr) , mDebugConsoleWidget(nullptr)
, mDebugMessageConsole(nullptr) , mDebugMessageConsole(nullptr)
, mTabWidget(new QTabWidget(this)) , mTabWidget(new QTabWidget(this))
, mInitializWidget(new InitializeWidget(this))
, mAdminTabIndex(-1) , mAdminTabIndex(-1)
, mThread(nullptr) , mThread(nullptr)
, mIsDebugMode(false) , mIsDebugMode(false)
@@ -46,25 +48,14 @@ MainWindow::MainWindow(QWidget* aParent)
connect(DeviceManager::Default(), &DeviceManager::raiseGlobalInfo, this, &MainWindow::triggerInfo); connect(DeviceManager::Default(), &DeviceManager::raiseGlobalInfo, this, &MainWindow::triggerInfo);
connect(EventCenter::Default(), &EventCenter::ReloadLanguage, this, &MainWindow::reloadLanguage); connect(EventCenter::Default(), &EventCenter::ReloadLanguage, this, &MainWindow::reloadLanguage);
connect(EventCenter::Default(), &EventCenter::RequestScreenSaver, this, &MainWindow::requestScreenSaver); connect(EventCenter::Default(), &EventCenter::RequestScreenSaver, this, &MainWindow::requestScreenSaver);
GUIErrorHandle::Default()->init(); connect(DeviceManager::Default(), &DeviceManager::initializeFinished, this, &MainWindow::requestLogin);
mThread = QThread::create([]() { connect(DeviceManager::Default(), &DeviceManager::initializeProgress, mInitializWidget, &InitializeWidget::setMessage);
QThread::sleep(10); connect(DialogManager::Default(), &DialogManager::loginDialogShown, this, [this]()
int f = 0x00100001; {
for (int i = 0; i < 8; ++i) mInitializWidget->setVisible(false);
{ mTabWidget->setVisible(true);
QThread::sleep(10);
f = f << (i * 4);
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);
}
}); });
mThread->start(); GUIErrorHandle::Default()->init();
QApplication::setActiveWindow(centralWidget()); QApplication::setActiveWindow(centralWidget());
} }
@@ -97,6 +88,9 @@ void MainWindow::initializeLayout()
QWidget* topBarWidget = new TopBarWidget(this); QWidget* topBarWidget = new TopBarWidget(this);
layout->addWidget(topBarWidget); layout->addWidget(topBarWidget);
layout->addWidget(mTabWidget); layout->addWidget(mTabWidget);
layout->addWidget(mInitializWidget);
mTabWidget->setVisible(false);
} }
void MainWindow::initializeTabWidget() void MainWindow::initializeTabWidget()

View File

@@ -18,6 +18,7 @@ class QGestureEvent;
class QSwipeGesture; class QSwipeGesture;
class QPanGesture; class QPanGesture;
class QDockWidget; class QDockWidget;
class InitializeWidget;
class MainWindow : public QMainWindow class MainWindow : public QMainWindow
{ {
@@ -29,13 +30,13 @@ public:
static void QMessageOutput(QtMsgType aType, const QMessageLogContext& aContext, const QString& aMessage); static void QMessageOutput(QtMsgType aType, const QMessageLogContext& aContext, const QString& aMessage);
void centerWidgetHide(); void centerWidgetHide();
void centerWidgetShow(); void centerWidgetShow();
void requestLogin();
void requestScreenSaver(); void requestScreenSaver();
QTextEdit* getEdit(); QTextEdit* getEdit();
void debugConsoleOn(); void debugConsoleOn();
void grabGestures(const QList<Qt::GestureType>& aGestures); void grabGestures(const QList<Qt::GestureType>& aGestures);
public slots: public slots:
void requestLogin();
void triggerError(const QString&); void triggerError(const QString&);
void triggerInfo(const QPair<QString,unsigned int>&); void triggerInfo(const QPair<QString,unsigned int>&);
@@ -58,6 +59,7 @@ private:
QDockWidget* mDebugConsoleWidget; QDockWidget* mDebugConsoleWidget;
QTextEdit* mDebugMessageConsole; QTextEdit* mDebugMessageConsole;
QTabWidget* mTabWidget; QTabWidget* mTabWidget;
InitializeWidget* mInitializWidget;
int mAdminTabIndex; int mAdminTabIndex;
QThread* mThread; QThread* mThread;
bool mIsDebugMode; bool mIsDebugMode;