Refactoring the new dialog manager module and fixed keyboard problem in Linux touch panel.
This commit is contained in:
@@ -5,8 +5,6 @@
|
||||
#include "DialogManager.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QWidget>
|
||||
#include <QThread>
|
||||
#include <QDebug>
|
||||
|
||||
#include "event/EventCenter.h"
|
||||
@@ -14,19 +12,32 @@
|
||||
#include "dialogs/ChangePasswordFormDialog.h"
|
||||
#include "dialogs/AccountFormDialog.h"
|
||||
#include "dialogs/MultyMessageDialogManager.h"
|
||||
#include "dialogs/EditPatientDialog.h"
|
||||
#include "dialogs/AlertDialog.h"
|
||||
#include "dialogs/DateSelectDialog.h"
|
||||
#include "dialogs/SelectDialog.h"
|
||||
|
||||
#include "network/DicomCfgDialog.h"
|
||||
#include "network/GetAdminPsw.h"
|
||||
#include "network/NetworkCfgDialog.h"
|
||||
#include "network/GetIPDialog.h"
|
||||
#include "network/GetRouteDialog.h"
|
||||
|
||||
#include "appvals/AppGlobalValues.h"
|
||||
#include "windows/LoginDialog.h"
|
||||
#include "json/jsonobject.h"
|
||||
#include "shimlib/ShimLib.h"
|
||||
|
||||
void messageCallback(const char* aMessage,unsigned int aMessageLevel)
|
||||
namespace
|
||||
{
|
||||
DialogManager::Default()->raiseMultyMessageDialog(QString::fromLatin1(aMessage),MessageLevel(aMessageLevel));
|
||||
const int GUIMESSAGEDIALOG_OFFSET = 30;
|
||||
}
|
||||
|
||||
DialogManager::DialogManager()
|
||||
: QObject()
|
||||
, mFunctionDialog(nullptr)
|
||||
, mMessageDialog(nullptr)
|
||||
, mOperationMessageDialog(nullptr)
|
||||
, mSyncDialog(nullptr)
|
||||
, mTopWidget(nullptr)
|
||||
{
|
||||
|
||||
@@ -34,12 +45,13 @@ DialogManager::DialogManager()
|
||||
|
||||
void DialogManager::init(QWidget* aParent) {
|
||||
connect(EventCenter::Default(), &EventCenter::DeviceErrorRaise,this,&DialogManager::raiseDeviceError);
|
||||
connect(EventCenter::Default(), &EventCenter::DeviceInfoRaise,this,&DialogManager::raiseDeviceInfo);
|
||||
connect(EventCenter::Default(), &EventCenter::InvokeOperationStart,this,&DialogManager::invokeOperationStart);
|
||||
connect(EventCenter::Default(), &EventCenter::InvokeOperationProgress,this,&DialogManager::invokeOperationProgress);
|
||||
connect(EventCenter::Default(), &EventCenter::InvokeOperationPending,this,&DialogManager::invokeOperationPending);
|
||||
connect(EventCenter::Default(), &EventCenter::InvokeOperationEnd,this,&DialogManager::invokeOperationEnd);
|
||||
MultyMessageDialogManager::getInstance()->setDialogParent(aParent);
|
||||
SetMessageCallback(messageCallback);
|
||||
mTopWidget = aParent;
|
||||
}
|
||||
|
||||
//得考虑多线程的问题
|
||||
@@ -49,11 +61,7 @@ void DialogManager::setTopWidget(QWidget* widget) {
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!mTopWidget&& QApplication::activeWindow()){
|
||||
mTopWidget = QApplication::activeWindow();
|
||||
}
|
||||
qDebug()<<"last top:"<<mTopWidget->objectName()<<", new top:"<<widget->objectName();
|
||||
widget->setParent(mTopWidget,widget->windowFlags());
|
||||
qDebug()<<"last top:"<<mTopWidget<<", new top:"<<widget;
|
||||
mTopWidget = widget;
|
||||
++mDialogCount;
|
||||
}
|
||||
@@ -70,23 +78,22 @@ void DialogManager::releaseTopWidget(QWidget* expectedTopWidget) {
|
||||
}
|
||||
}
|
||||
|
||||
void DialogManager::requestLogin()
|
||||
void DialogManager::requestLogin(QWidget* aParent)
|
||||
{
|
||||
//Login 直接最顶层模态
|
||||
if (!mFunctionDialog){
|
||||
mFunctionDialog = new LoginDialog;
|
||||
mFunctionDialog = new LoginDialog(aParent);
|
||||
}
|
||||
mFunctionDialog->setWindowModality(Qt::WindowModal);
|
||||
mFunctionDialog->exec();
|
||||
while (QDialog::Accepted != mFunctionDialog->result())
|
||||
{
|
||||
|
||||
mFunctionDialog->exec();
|
||||
}
|
||||
}
|
||||
|
||||
int DialogManager::requestAddAccount(QSqlTableModel* model) {
|
||||
AccountFormDialog dialog(nullptr, New);
|
||||
AccountFormDialog dialog(mTopWidget, New);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
dialog.setReferenceModel(model);
|
||||
@@ -96,7 +103,7 @@ int DialogManager::requestAddAccount(QSqlTableModel* model) {
|
||||
}
|
||||
|
||||
int DialogManager::requestEditSelfAccount() {
|
||||
AccountFormDialog dialog(nullptr, Self);
|
||||
AccountFormDialog dialog(mTopWidget, Self);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
int ret = dialog.exec();
|
||||
@@ -105,7 +112,7 @@ int DialogManager::requestEditSelfAccount() {
|
||||
}
|
||||
|
||||
int DialogManager::requestEditAdminAccount(const QMap<QString, QVariant>& values) {
|
||||
AccountFormDialog dialog(nullptr, Admin);
|
||||
AccountFormDialog dialog(mTopWidget, Admin);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setAccountInformation(values);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
@@ -115,7 +122,7 @@ int DialogManager::requestEditAdminAccount(const QMap<QString, QVariant>& values
|
||||
}
|
||||
|
||||
void DialogManager::requestChangePassword() {
|
||||
ChangePasswordFormDialog dialog;
|
||||
ChangePasswordFormDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setGeometry(dialog.parentWidget()->geometry());
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
@@ -123,10 +130,173 @@ void DialogManager::requestChangePassword() {
|
||||
releaseTopWidget(&dialog);
|
||||
}
|
||||
|
||||
int DialogManager::requestEditPatientInfo(PatientInformation* aPatientFrom, QSqlTableModel* aModel)
|
||||
{
|
||||
EditPatientDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
dialog.setPatientInformation(aPatientFrom);
|
||||
dialog.setModel(aModel);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int DialogManager::requestAlertMessage(const QString& aMessage, DialogButtonMode aButtonMode, const QString& aTitle)
|
||||
{
|
||||
AlertDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setAlertMessage(aMessage);
|
||||
if (!aTitle.isEmpty())
|
||||
{
|
||||
dialog.setTitle(aTitle);
|
||||
}
|
||||
dialog.setButtonMode(aButtonMode);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
DialogResult DialogManager::requestSelectDate(const QString& aDate)
|
||||
{
|
||||
DateSelectDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setSelectedValue(aDate);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return DialogResult(ret,dialog.getSelectedValue());
|
||||
}
|
||||
|
||||
DialogResult DialogManager::requestSelectLanguage()
|
||||
{
|
||||
SelectDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
dialog.setValues(JsonObject::Instance()->language());
|
||||
dialog.setSelectedValue(JsonObject::Instance()->defaultLanguage());
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return DialogResult(ret,dialog.getSelectedValue());
|
||||
}
|
||||
|
||||
DialogResult DialogManager::requestSelectProtocal()
|
||||
{
|
||||
SelectDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
dialog.setValues(JsonObject::Instance()->protocals());
|
||||
dialog.setSelectedValue(JsonObject::Instance()->defaultProtocal());
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return DialogResult(ret,dialog.getSelectedValue());
|
||||
}
|
||||
|
||||
DialogResult DialogManager::requestSelectFilter()
|
||||
{
|
||||
SelectDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
dialog.setValues(JsonObject::Instance()->worklistFilters());
|
||||
dialog.setSelectedValue(JsonObject::Instance()->defaultFilter());
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return DialogResult(ret,dialog.getSelectedValue());
|
||||
}
|
||||
|
||||
int DialogManager::requestEditDicomConfig()
|
||||
{
|
||||
DicomCfgDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int DialogManager::requestInputAdminPasswd()
|
||||
{
|
||||
GetAdminPsw dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int DialogManager::requestEditNetworkConfig()
|
||||
{
|
||||
NetworkCfgDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return ret;
|
||||
}
|
||||
|
||||
DialogResult DialogManager::requestEditIpAndNetMask()
|
||||
{
|
||||
GetIPDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return DialogResult(ret,dialog.getList());
|
||||
}
|
||||
|
||||
DialogResult DialogManager::requestEditIpAndNetMask(const QStringList& aEditData)
|
||||
{
|
||||
GetIPDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
dialog.setList(aEditData);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return DialogResult(ret,dialog.getList());
|
||||
}
|
||||
|
||||
DialogResult DialogManager::requestEditRouteInfo()
|
||||
{
|
||||
GetRouteDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return DialogResult(ret,dialog.getList());
|
||||
}
|
||||
|
||||
DialogResult DialogManager::requestEditRouteInfo(const QStringList& aEditData)
|
||||
{
|
||||
GetRouteDialog dialog(mTopWidget);
|
||||
setTopWidget(&dialog);
|
||||
dialog.setWindowModality(Qt::WindowModal);
|
||||
dialog.setList(aEditData);
|
||||
int ret = dialog.exec();
|
||||
releaseTopWidget(&dialog);
|
||||
return DialogResult(ret,dialog.getList());
|
||||
}
|
||||
|
||||
void DialogManager::raiseDeviceInfo(QObject* parent, QObject* aInfoData)
|
||||
{
|
||||
QPair<QString, unsigned int>* infoData = (QPair<QString, unsigned int>*)(aInfoData);
|
||||
raiseMultyMessageDialog(infoData->first,MessageLevel(infoData->second));
|
||||
}
|
||||
|
||||
//考虑以后使用另外的dialog显示错误
|
||||
void DialogManager::raiseDeviceError(QObject *parent, QObject *msg) {
|
||||
clearMessageDialog();
|
||||
auto dialog = new GUIMessageDialog;
|
||||
auto dialog = new GUIMessageDialog(mTopWidget);
|
||||
|
||||
if (nullptr != mTopWidget && mTopWidget->inherits("GUIMessageDialog"))
|
||||
{
|
||||
GUIMessageDialog* parent = qobject_cast<GUIMessageDialog*>(mTopWidget);
|
||||
if (parent->getDialogPos().y() + 320 + GUIMESSAGEDIALOG_OFFSET < 1080)
|
||||
{
|
||||
dialog->moveDialog(parent->getDialogPos() + QPoint(GUIMESSAGEDIALOG_OFFSET, GUIMESSAGEDIALOG_OFFSET));
|
||||
}
|
||||
}
|
||||
|
||||
if (msg) {
|
||||
QString *str = (QString *) msg;
|
||||
@@ -137,7 +307,7 @@ void DialogManager::raiseDeviceError(QObject *parent, QObject *msg) {
|
||||
dialog->stopLoading();
|
||||
dialog->showExitButton();
|
||||
setTopWidget(dialog);
|
||||
dialog->setWindowModality(Qt::NonModal);
|
||||
dialog->setWindowModality(Qt::WindowModal);
|
||||
dialog->showFullScreen ();
|
||||
dialog->exec();
|
||||
releaseTopWidget(dialog);
|
||||
@@ -151,84 +321,88 @@ void DialogManager::invokeOperationStart(QObject *parent, QObject *msg) {
|
||||
//只能在最底层窗口上模态
|
||||
if (mDialogCount>0) return;
|
||||
clearMessageDialog();
|
||||
mMessageDialog = new GUIMessageDialog(QApplication::activeWindow());
|
||||
mOperationMessageDialog = new GUIMessageDialog(QApplication::activeWindow());
|
||||
if (msg)
|
||||
{
|
||||
QString* str = (QString*)msg;
|
||||
mMessageDialog->showMessage(*str);
|
||||
mOperationMessageDialog->showMessage(*str);
|
||||
}
|
||||
else
|
||||
{
|
||||
mMessageDialog->hideMessage();
|
||||
mOperationMessageDialog->hideMessage();
|
||||
}
|
||||
mMessageDialog->hideExitButton();
|
||||
mMessageDialog->startLoading();
|
||||
mOperationMessageDialog->hideExitButton();
|
||||
mOperationMessageDialog->startLoading();
|
||||
AppGlobalValues::setInProcessing(true);
|
||||
if (mMessageDialog->isHidden())
|
||||
if (mOperationMessageDialog->isHidden())
|
||||
{
|
||||
mMessageDialog->open();
|
||||
mOperationMessageDialog->showFullScreen();
|
||||
mOperationMessageDialog->exec();
|
||||
}
|
||||
}
|
||||
|
||||
void DialogManager::invokeOperationProgress(QObject *parent, QObject *msg) {
|
||||
//窗口不存在,撤销操作
|
||||
if (!mMessageDialog) return;
|
||||
if (!mOperationMessageDialog) return;
|
||||
if (msg)
|
||||
{
|
||||
QVariant* var = (QVariant*)msg;
|
||||
if (mMessageDialog->Pending())
|
||||
if (mOperationMessageDialog->Pending())
|
||||
{
|
||||
mMessageDialog->stopPending();
|
||||
mOperationMessageDialog->stopPending();
|
||||
}
|
||||
mMessageDialog->showMessage(var->toString());
|
||||
mOperationMessageDialog->showMessage(var->toString());
|
||||
}
|
||||
else
|
||||
{
|
||||
mMessageDialog->hideMessage();
|
||||
mOperationMessageDialog->hideMessage();
|
||||
}
|
||||
if (mMessageDialog->isHidden())
|
||||
if (mOperationMessageDialog->isHidden())
|
||||
{
|
||||
mMessageDialog->show();
|
||||
mOperationMessageDialog->showFullScreen();
|
||||
mOperationMessageDialog->exec();
|
||||
}
|
||||
}
|
||||
|
||||
void DialogManager::invokeOperationPending(QObject *parent, QObject *msg) {
|
||||
//窗口不存在,撤销操作
|
||||
if (!mMessageDialog) return;
|
||||
if (!mMessageDialog->Pending())
|
||||
if (!mOperationMessageDialog) return;
|
||||
if (!mOperationMessageDialog->Pending())
|
||||
{
|
||||
mMessageDialog->startPending();
|
||||
mOperationMessageDialog->startPending();
|
||||
QVariant* var = (QVariant*)msg;
|
||||
mMessageDialog->showMessage(var->toString());
|
||||
mOperationMessageDialog->showMessage(var->toString());
|
||||
}
|
||||
}
|
||||
|
||||
void DialogManager::invokeOperationEnd(QObject *parent, QObject *msg) {
|
||||
//窗口不存在,撤销操作
|
||||
if (!mMessageDialog) return;
|
||||
if (!mMessageDialog->isHidden())
|
||||
if (!mOperationMessageDialog) return;
|
||||
if (!mOperationMessageDialog->isHidden())
|
||||
{
|
||||
if (msg && ((QVariant*)msg)->toBool())
|
||||
{
|
||||
mMessageDialog->stopLoading();
|
||||
mMessageDialog->showMessage("Scan completed!");
|
||||
mMessageDialog->showExitButton();
|
||||
mMessageDialog->setWindowModality(Qt::WindowModal);
|
||||
mMessageDialog->exec();
|
||||
mOperationMessageDialog->stopLoading();
|
||||
mOperationMessageDialog->showMessage("Scan completed!");
|
||||
mOperationMessageDialog->showExitButton();
|
||||
mOperationMessageDialog->setWindowModality(Qt::WindowModal);
|
||||
mOperationMessageDialog->showFullScreen();
|
||||
mOperationMessageDialog->exec();
|
||||
}
|
||||
else
|
||||
{
|
||||
mMessageDialog->accept();
|
||||
mOperationMessageDialog->accept();
|
||||
}
|
||||
delete mMessageDialog;
|
||||
delete mOperationMessageDialog;
|
||||
AppGlobalValues::setInProcessing(false);
|
||||
}
|
||||
}
|
||||
|
||||
void DialogManager::clearMessageDialog() {
|
||||
if (mMessageDialog){
|
||||
if (!mMessageDialog->isHidden()) mMessageDialog->hide();
|
||||
delete mMessageDialog;
|
||||
if (mOperationMessageDialog)
|
||||
{
|
||||
releaseTopWidget(mOperationMessageDialog);
|
||||
delete mOperationMessageDialog;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -236,7 +410,38 @@ DialogManager::~DialogManager() {
|
||||
clearMessageDialog();
|
||||
}
|
||||
|
||||
void DialogManager::raiseMultyMessageDialog(const QString aMessage, MessageLevel aMessageLevel)
|
||||
void DialogManager::raiseMultyMessageDialog(const QString& aMessage, MessageLevel aMessageLevel)
|
||||
{
|
||||
MultyMessageDialogManager::getInstance()->raiseDialog(aMessage, aMessageLevel);
|
||||
}
|
||||
|
||||
void DialogManager::raiseSyncDialog(const QString& aMessage)
|
||||
{
|
||||
if (!mSyncDialog)
|
||||
{
|
||||
mSyncDialog = new GUIMessageDialog(mTopWidget);
|
||||
}
|
||||
mSyncDialog->showMessage(aMessage);
|
||||
setTopWidget(mSyncDialog);
|
||||
mSyncDialog->setWindowModality(Qt::WindowModal);
|
||||
mSyncDialog->showFullScreen ();
|
||||
mSyncDialog->exec();
|
||||
releaseTopWidget(mSyncDialog);
|
||||
delete mSyncDialog;
|
||||
}
|
||||
|
||||
void DialogManager::hideTopSyncDialog()
|
||||
{
|
||||
if (mSyncDialog)
|
||||
{
|
||||
mSyncDialog->accept();
|
||||
}
|
||||
}
|
||||
|
||||
void DialogManager::setFocusToTopDialog()
|
||||
{
|
||||
if (0 < mDialogCount && nullptr != mTopWidget)
|
||||
{
|
||||
mTopWidget->setFocus();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user