From 9b96af094b715d9c0bf9dab7aab35306082f9e9d Mon Sep 17 00:00:00 2001 From: sunwen Date: Thu, 28 Jul 2022 16:27:51 +0800 Subject: [PATCH] Add MultyMessageDialog. --- src/ShimLib/ShimLib.c | 14 ++- src/ShimLib/ShimLib.h | 2 + src/dialogs/DialogManager.cpp | 58 ++++++----- src/dialogs/DialogManager.h | 11 ++- src/dialogs/GUIMessageDialog.cpp | 1 - src/dialogs/MultyMessageDialog.cpp | 112 ++++++++++++++++++++++ src/dialogs/MultyMessageDialog.h | 55 +++++++++++ src/dialogs/MultyMessageDialogManager.cpp | 71 ++++++++++++++ src/dialogs/MultyMessageDialogManager.h | 30 ++++++ src/icons/dicom/info.png | Bin 0 -> 2065 bytes src/icons/dicom/warning.png | Bin 0 -> 1827 bytes src/main.cpp | 7 +- src/res.qrc | 2 + src/stylesheet/Dark2.css | 49 ++++++++++ src/windows/LoginDialog.cpp | 4 +- 15 files changed, 382 insertions(+), 34 deletions(-) create mode 100644 src/dialogs/MultyMessageDialog.cpp create mode 100644 src/dialogs/MultyMessageDialog.h create mode 100644 src/dialogs/MultyMessageDialogManager.cpp create mode 100644 src/dialogs/MultyMessageDialogManager.h create mode 100644 src/icons/dicom/info.png create mode 100644 src/icons/dicom/warning.png diff --git a/src/ShimLib/ShimLib.c b/src/ShimLib/ShimLib.c index d0deddf..98918bc 100644 --- a/src/ShimLib/ShimLib.c +++ b/src/ShimLib/ShimLib.c @@ -15,10 +15,13 @@ #include -typedef void(*error_cb)(const char* msg); +typedef void(*error_cb)(const char* msg); +// level:0 infomation,1 warning,2 error,3 sucessed +typedef void(*message_callback)(const char* msg, unsigned int level); int statusCountFlag = 0; error_cb innerCallback = NULL; +message_callback msgCallback = NULL; #ifdef _WIN32 void ThreadFunc(void*); @@ -47,6 +50,15 @@ int InitLib(error_cb cb) return 0; } +void SetMessageCallback(message_callback cb) +{ + msgCallback = cb; + msgCallback("info message", 0); + msgCallback("warning message", 1); + msgCallback("error message", 2); + msgCallback("sucess message", 3); +} + volatile int running = 1; volatile int progress = 0; volatile int status = READY; diff --git a/src/ShimLib/ShimLib.h b/src/ShimLib/ShimLib.h index 4ba9fb3..8057bc9 100644 --- a/src/ShimLib/ShimLib.h +++ b/src/ShimLib/ShimLib.h @@ -37,6 +37,8 @@ typedef enum { extern int InitLib(void(*)(const char *msg)); +extern void SetMessageCallback(void(*)(const char* msg,unsigned int level)); + extern int ScanControl(ScanAction actionType); extern StatusInfo GetStatus(); diff --git a/src/dialogs/DialogManager.cpp b/src/dialogs/DialogManager.cpp index 7fe5d77..3ae027b 100644 --- a/src/dialogs/DialogManager.cpp +++ b/src/dialogs/DialogManager.cpp @@ -7,60 +7,67 @@ #include #include #include -#include +#include #include "event/EventCenter.h" #include "dialogs/GUIMessageDialog.h" #include "dialogs/ChangePasswordFormDialog.h" #include "dialogs/AccountFormDialog.h" +#include "dialogs/MultyMessageDialogManager.h" #include "appvals/AppGlobalValues.h" #include "windows/LoginDialog.h" +#include "shimlib/ShimLib.h" - +void messageCallback(const char* aMessage,unsigned int aMessageLevel) +{ + DialogManager::Default()->raiseMultyMessageDialog(QString::fromLatin1(aMessage),MessageLevel(aMessageLevel)); +} DialogManager::DialogManager() : QObject() , mFunctionDialog(nullptr) , mMessageDialog(nullptr) -, topWidget(nullptr) +, mTopWidget(nullptr) { } -void DialogManager::init() { +void DialogManager::init(QWidget* aParent) { connect(EventCenter::Default(), &EventCenter::DeviceErrorRaise,this,&DialogManager::raiseDeviceError); 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); } //得考虑多线程的问题 void DialogManager::setTopWidget(QWidget* widget) { - std::lock_guard lockGuard(mutex); - if (!topWidget&& QApplication::activeWindow()){ - topWidget = QApplication::activeWindow(); + std::lock_guard lockGuard(mMutex); + if (nullptr == widget) + { + return; } - qDebug()<<"last top:"<objectName()<<", new top:"<objectName(); - widget->setParent(topWidget,widget->windowFlags()); - topWidget = widget; + if (!mTopWidget&& QApplication::activeWindow()){ + mTopWidget = QApplication::activeWindow(); + } + qDebug()<<"last top:"<objectName()<<", new top:"<objectName(); + widget->setParent(mTopWidget,widget->windowFlags()); + mTopWidget = widget; ++mDialogCount; } void DialogManager::releaseTopWidget(QWidget* expectedTopWidget) { - std::lock_guard lockGuard(mutex); - if (topWidget == expectedTopWidget){ - topWidget = expectedTopWidget->parentWidget(); + std::lock_guard lockGuard(mMutex); + if (nullptr == expectedTopWidget) + { + return; } - else{ - while (auto tempWidget = topWidget->parentWidget()){ - if (tempWidget->parentWidget() == expectedTopWidget){ - tempWidget->setParent(expectedTopWidget->parentWidget()); - break; - } - } + if (mTopWidget == expectedTopWidget){ + mTopWidget = expectedTopWidget->parentWidget(); + --mDialogCount; } - --mDialogCount; } void DialogManager::requestLogin() @@ -119,7 +126,6 @@ void DialogManager::requestChangePassword() { //考虑以后使用另外的dialog显示错误 void DialogManager::raiseDeviceError(QObject *parent, QObject *msg) { clearMessageDialog(); - //new dialog auto dialog = new GUIMessageDialog; if (msg) { @@ -132,6 +138,7 @@ void DialogManager::raiseDeviceError(QObject *parent, QObject *msg) { dialog->showExitButton(); setTopWidget(dialog); dialog->setWindowModality(Qt::NonModal); + dialog->showFullScreen (); dialog->exec(); releaseTopWidget(dialog); dialog->deleteLater(); @@ -214,7 +221,6 @@ void DialogManager::invokeOperationEnd(QObject *parent, QObject *msg) { mMessageDialog->accept(); } delete mMessageDialog; - mMessageDialog = nullptr; AppGlobalValues::setInProcessing(false); } } @@ -223,10 +229,14 @@ void DialogManager::clearMessageDialog() { if (mMessageDialog){ if (!mMessageDialog->isHidden()) mMessageDialog->hide(); delete mMessageDialog; - mMessageDialog = nullptr; } } DialogManager::~DialogManager() { clearMessageDialog(); } + +void DialogManager::raiseMultyMessageDialog(const QString aMessage, MessageLevel aMessageLevel) +{ + MultyMessageDialogManager::getInstance()->raiseDialog(aMessage, aMessageLevel); +} diff --git a/src/dialogs/DialogManager.h b/src/dialogs/DialogManager.h index d045be9..edcce69 100644 --- a/src/dialogs/DialogManager.h +++ b/src/dialogs/DialogManager.h @@ -6,6 +6,7 @@ #define GUI_DIALOGMANAGER_H #include +#include #include #include #include @@ -14,6 +15,7 @@ class QWidget; class QDialog; class GUIMessageDialog; class QSqlTableModel; +enum MessageLevel:unsigned int; class DialogManager:public QObject { public: @@ -26,7 +28,7 @@ public: ~DialogManager() override; - void init(); + void init(QWidget* aParent); void setTopWidget(QWidget* widget); void releaseTopWidget(QWidget* expectedTopWidget); void requestLogin(); @@ -35,6 +37,7 @@ public: int requestEditAdminAccount(const QMap& values); void requestChangePassword(); void raiseDeviceError(QObject* parent, QObject* msg); + void raiseMultyMessageDialog(const QString aMessage,MessageLevel aMessageLevel); void invokeOperationStart(QObject* parent, QObject* msg); void invokeOperationProgress(QObject* parent, QObject* msg); void invokeOperationPending(QObject* parent, QObject* msg); @@ -43,9 +46,9 @@ private: void clearMessageDialog(); QDialog* mFunctionDialog; - GUIMessageDialog* mMessageDialog; - QWidget* topWidget; - std::mutex mutex; + QPointer mMessageDialog; + QWidget* mTopWidget; + std::mutex mMutex; int mDialogCount = 0; }; diff --git a/src/dialogs/GUIMessageDialog.cpp b/src/dialogs/GUIMessageDialog.cpp index 4cefef2..c2cf6c4 100644 --- a/src/dialogs/GUIMessageDialog.cpp +++ b/src/dialogs/GUIMessageDialog.cpp @@ -19,7 +19,6 @@ GUIMessageDialog::GUIMessageDialog(QWidget *parent) mUI->setupUi(this); this->setObjectName("MessageDialog"); this->setWindowFlags (Qt :: FramelessWindowHint | Qt :: Dialog); - this->showFullScreen (); initBaseLayout(); this->setWindowOpacity(0.6); initLoadingFrameString(); diff --git a/src/dialogs/MultyMessageDialog.cpp b/src/dialogs/MultyMessageDialog.cpp new file mode 100644 index 0000000..03a52e9 --- /dev/null +++ b/src/dialogs/MultyMessageDialog.cpp @@ -0,0 +1,112 @@ +#include "MultyMessageDialog.h" +#include + +namespace +{ + const int AUTO_DISAPPEAR_TIME = 5000; + const int DIALOG_WIDTH = 240; + const int DIALOG_HEIGHT = 50; + +} + +MultyMessageDialog::MultyMessageDialog(const QString& aMessage,MessageLevel aMessageLevel,QWidget* aParent) + : QDialog(aParent) + , mAutoDisappearTime(AUTO_DISAPPEAR_TIME) + , mTimer(new QTimer(this)) + , mDisappearAnimation(new QPropertyAnimation(this,"pos",this)) + , mShowAnimation(new QPropertyAnimation(this,"pos",this)) + , mMessage(new QLabel(aMessage,this)) + , mIcon(new QLabel(this)) + , mLevel(aMessageLevel) +{ + setWindowFlags(Qt::FramelessWindowHint| Qt::WindowStaysOnTopHint| Qt::BypassWindowManagerHint); + resize(DIALOG_WIDTH,DIALOG_HEIGHT); + mTimer->setSingleShot(true); + connect(mTimer,&QTimer::timeout,this,&MultyMessageDialog::startHideAnimation); + initializeAnimation(); + initializeIcon(); + QHBoxLayout* layout = new QHBoxLayout(this); + layout->addWidget(mIcon); + layout->addWidget(mMessage); +} + +MultyMessageDialog::~MultyMessageDialog() +{ + emit dialogDestroyed(); +} + +void MultyMessageDialog::initializeAnimation() +{ + mDisappearAnimation->setDuration(100); + + mShowAnimation->setDuration(100); + + connect(mDisappearAnimation, &QPropertyAnimation::finished, this, &MultyMessageDialog::hideDialog); +} + +void MultyMessageDialog::initializeIcon() +{ + switch (mLevel) + { + case Info: + mIcon->setObjectName("MultyMessageDialogInfo"); + break; + case Warning: + mIcon->setObjectName("MultyMessageDialogWarning"); + break; + case Error: + mIcon->setObjectName("MultyMessageDialogError"); + break; + case Sucess: + mIcon->setObjectName("MultyMessageDialogSucess"); + break; + default: + mIcon->setObjectName("MultyMessageDialogInfo"); + break; + } +} + +void MultyMessageDialog::setMessage(const QString& aMessage) +{ + mMessage->setText(aMessage); +} + +void MultyMessageDialog::startHideAnimation() +{ + if (mTimer->isActive()) + { + mTimer->stop(); + } + mDisappearAnimation->setStartValue(pos()); + mDisappearAnimation->setEndValue(QPoint(pos().x(),pos().y()-30-height())); + mDisappearAnimation->start(); +} + +void MultyMessageDialog::hideDialog() +{ + hide(); + deleteLater(); +} + +void MultyMessageDialog::setAutoDisappearTime(int aAutoDisappearTime) +{ + mAutoDisappearTime = aAutoDisappearTime; +} + +void MultyMessageDialog::showEvent(QShowEvent* aEvent) +{ + mTimer->start(mAutoDisappearTime); + mShowAnimation->setStartValue(QPoint(pos().x(),pos().y()-30-height())); + mShowAnimation->setEndValue(pos()); + mShowAnimation->start(); + QDialog::showEvent(aEvent); +} + +void MultyMessageDialog::stopShowAnimation() +{ + if (QAbstractAnimation::Running == mShowAnimation->state()) + { + mShowAnimation->stop(); + move(mShowAnimation->endValue().toPoint()); + } +} diff --git a/src/dialogs/MultyMessageDialog.h b/src/dialogs/MultyMessageDialog.h new file mode 100644 index 0000000..1b2654a --- /dev/null +++ b/src/dialogs/MultyMessageDialog.h @@ -0,0 +1,55 @@ +#ifndef MULTYMESSAGEDIALOG_H +#define MULTYMESSAGEDIALOG_H + +#include +#include +#include +#include + +enum MessageLevel:unsigned int +{ + Info = 0, + Warning, + Error, + Sucess, +}; + +class MultyMessageDialog : public QDialog +{ + Q_OBJECT +public: + MultyMessageDialog(const QString& aMessage = "",MessageLevel aMessageLevel = MessageLevel::Info,QWidget* aParent = nullptr); + ~MultyMessageDialog() override; + void setAutoDisappearTime(int aAutoDisappearTime); + void setMessage(const QString& aMessage); + void stopShowAnimation(); + +signals: + void dialogDestroyed(); + +public slots: + void hideDialog(); + void startHideAnimation(); + +protected: + void showEvent(QShowEvent* aEvent) override; + +private: + void initializeAnimation(); + void initializeIcon(); + +private: + int mAutoDisappearTime; + QTimer* mTimer; + QSize mSize; + QPropertyAnimation* mDisappearAnimation; + QPropertyAnimation* mShowAnimation; + QLabel* mMessage; + QLabel* mIcon; + MessageLevel mLevel; + + + +}; + +#endif // MULTYMESSAGEDIALOG_H \ No newline at end of file diff --git a/src/dialogs/MultyMessageDialogManager.cpp b/src/dialogs/MultyMessageDialogManager.cpp new file mode 100644 index 0000000..7478100 --- /dev/null +++ b/src/dialogs/MultyMessageDialogManager.cpp @@ -0,0 +1,71 @@ +#include "MultyMessageDialogManager.h" +#include "MultyMessageDialog.h" + +#include + +namespace +{ + const int DIALOGS_MARGIN = 30; + const int GEOMETY_X = 1620; + const int GEOMETY_Y = 30; +} +MultyMessageDialogManager* MultyMessageDialogManager::getInstance() +{ + static MultyMessageDialogManager instance; + return &instance; +} + +MultyMessageDialogManager::MultyMessageDialogManager() + : QObject() + , mDialogParent(nullptr) + , mDialogList() + , mMutex() +{ +} + +MultyMessageDialogManager::~MultyMessageDialogManager() +{ +} + +void MultyMessageDialogManager::setDialogParent(QWidget* aParent) +{ + mDialogParent = aParent; +} + +void MultyMessageDialogManager::raiseDialog(const QString& aMessage,MessageLevel aMessageLevel) +{ + QMutexLocker locker(&mMutex); + MultyMessageDialog* dialog = new MultyMessageDialog(aMessage,aMessageLevel,mDialogParent); + mDialogList.append(dialog); + int yDistance = GEOMETY_Y; + for (int i = 0; i < mDialogList.count() - 1; ++i) + { + yDistance += mDialogList.at(i)->size().height() + DIALOGS_MARGIN; + } + + dialog->move(GEOMETY_X,yDistance); + dialog->show(); + connect(dialog,&MultyMessageDialog::dialogDestroyed,this,&MultyMessageDialogManager::removeDestoryedDialog); +} + +void MultyMessageDialogManager::removeDestoryedDialog() +{ + QMutexLocker locker(&mMutex); + MultyMessageDialog* dialog = qobject_cast(sender()); + if (nullptr == dialog) + { + return; + } + int index = mDialogList.indexOf(dialog); + if (index >= 0) + { + mDialogList.removeAt(index); + for (int i = 0; i < mDialogList.count(); ++i) + { + MultyMessageDialog* target = mDialogList.at(i); + target->stopShowAnimation(); + QPoint position = target->mapToGlobal(QPoint(0, 0)); + target->move(position.x(),position.y()-dialog->height()-DIALOGS_MARGIN); + } + } +} diff --git a/src/dialogs/MultyMessageDialogManager.h b/src/dialogs/MultyMessageDialogManager.h new file mode 100644 index 0000000..ea2fcf5 --- /dev/null +++ b/src/dialogs/MultyMessageDialogManager.h @@ -0,0 +1,30 @@ +#ifndef MULTYMESSAGEDIALOGMANAGER_H +#define MULTYMESSAGEDIALOGMANAGER_H + +#include +#include +#include + +class MultyMessageDialog; +enum MessageLevel:unsigned int; + +class MultyMessageDialogManager : public QObject +{ + Q_OBJECT +public: + static MultyMessageDialogManager* getInstance(); + void raiseDialog(const QString& aMessage,MessageLevel aMessageLevel); + void setDialogParent(QWidget* aParent); + +private slots: + void removeDestoryedDialog(); + +private: + MultyMessageDialogManager(); + ~MultyMessageDialogManager(); + QWidget* mDialogParent; + QList mDialogList; + QMutex mMutex; +}; + +#endif // MULTYMESSAGEDIALOGMANAGER_H \ No newline at end of file diff --git a/src/icons/dicom/info.png b/src/icons/dicom/info.png new file mode 100644 index 0000000000000000000000000000000000000000..745cbab860340eaa01bed08cef83bd3d62a7c988 GIT binary patch literal 2065 zcmbtV30G6s77ocxxCtd(Vv0afFAxxsAjncFI0Oh7kWo-b5j4nPC1Ef~gUXN)Oav{E z>J!8Y@(`^|2?~lMCP5hlDnkNBTEha7NmdJ{q9VPt>-~ba&N^qG{q1k>GwglVITIYX z+mK*RK%r2Ez6|5mYkz~7yJOIK4d+tk2KVUxZqp-*mcrE zHb7`M@ZRFaX$oQgHCa}r8efi%nc&1MaVc1LPVQjRqt73Qb{*05E~!1#4{sHY9@Wh0 zUU;ZSx-MSVY%5&iI{3f_m$9;NaF3xDdL9F8zFKH?2d;K~0u}s7bG*Cw@pJc1hxPf+ zJhN@4)O^6apOs(th}m)SA_ zs|3UO?26^?fe*b|24*e|<3{t}Wp!%Vl2fq%IYFFLfP^S?wJ+jPd~x#koH)`WVxS}9 z+(x==>x=cYU{EEoXiK7n4cV8(hxB_Wq>gup^s#|DlK3g1c}#yw{JEKQMbjQQ(;{F# zg@=27?9Oh=3ydX^4egNJK)Bn*=DxRSV$53ag0apl!yw{Vj*+o??|Hm@U%gjS+^HK& z6K0bHS01cPl`9OodI$0$-(RUFn<#?Ki8Tig>tPLqu8{X@h5+!i5ZfQ3{Dzrq;GV(A zd?})XHoWm{LCVhs4}pl2(HK@@UKDodXa?d?1oRg3@ItP>#HyI*R>;HCcMf##1SGE$ z1CogJr)K3m@j&~f1=-+BGB`n`bSpAqL*YL+OzSL*s_GKcj>GARZRIenFZNtgsZ|YH zt0FLmQ)-%~%I|Y^L#Fb91DNehMP1X)g1VLZS-2G&SsJ#T?B)`(3#A@Ca?8jUyZK+<5VV$U8 zxLj{v0FX(Ti>lciv3Qp`doSSS3$#gF)rTXnzfl+~CjV>@RIPvXYVG?;FSlS>0blyi zbKiN6Y8)@u5t_`H^K2QajR~_Gg0B^GREq%XWZrjC5uaAjg1@Tfv$$b%W0}+b5X}S5 z88rp(gy*ClD|??TNI8kMaHUGy(Bw?S86~>aJ=Ksg`;&gg+13y2-wwRmG4d#5J0PFi zHOgGH>~xH70B5F^W%j8R@^-{cS_II|C@h<3uvgeueU|Cg8jHvKrjSW z!2hg?z*s(tfYu`eXgl!#HROHH`(;k&jJo)JF8+VviXJ;1PhN*fDcxFv9C2z=*KNIx z*^2KM-hKk;kwr9D5o*)0En=%Q5^}-U(g~xCcEqrZ)>@#EE3m+@%CM$AI=_{>K=v37 z{JEh0xI^O*wx>C~FK1<)9*lOYLDM~{t{06=_PMn@G+!ZKL_G6eo~>O(lG5$D&!;(D zKsBi_H4<`6R`T_NHWYuA(5dr#8|hFD`fZav9i)|5*}YUQK>eaL1le+!6NHnKJ&NP~ zjhuIQ0HMH2X(V6~C?r16$T?X6BCM7AAqqDLtQ<<##(V*s$42&ZG}|@TY5QYmuRJ=O z(pgEPt8YJ^^@2Ahs@{##c)z8RnPcqT9_^I;aE9;4U@@p`k}52KD|S_ zd^?Cw=`fGF)nr~vq?dU0uKNTr`czx)ZGea~jF+9cEs3G9JgF&b=sJxQ8<2F)i%q1b zMa_5o`>amjg^^TBoT6@U!zMo1W6cnVxT3B|Siq2O>`et5_zNGX?mE(;*$gA$JeY3T zujp@4Ag|Yy-30B+sT+hD2o>^fb)`#bKrwuyHC3$2GMsudJ->~cb0VQ!)vaE3I=Y=@9zQ_D(y zD>1Nk zRB-(0(6K+XY2(s{I7#Hq(2gKzb$=Dg%-=A4KOa0(#km(ArGC)#yC-feR5hMk#m)DM zUEQAZy`=bg_34d^F6|{+w$-lBiXVzDD-wTdV;=TzUZsq?6V=e&JpD4uz{HGN7_X)CVDR>x?v;wu4LR@%r?bn+2G-4G2Y zBr&wCukwvzX?9n_NKY#+(Qwa#0oikx%aitm!@*IoV@ybxMPAJm?SL`{YBNK(R4iw9 zRxCuEwmaKbeO}+e X+cA-`TdghfjiY?M1L^gihXj8E5<7dp literal 0 HcmV?d00001 diff --git a/src/icons/dicom/warning.png b/src/icons/dicom/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..6350f0e511f76358794a6f66db21d402f4ab2335 GIT binary patch literal 1827 zcmcgt`#YQ27LEuK zBtjqtvOUunO1KpRfoMy8@m^u6tmQd>_Dl@=a>$pme`s7KwGXf#3GC_^M^D2Ue>nZF z-H>FoMQ>NXKcv(Xe$E>on@s=P%zWz0nvC5KtFh))l?Hu7YpL$rMnlu?8M_%nYg-?8 z&4;S~{{2VGeDM(>;uP|5%`InvKStzG0*E$Y=M~tzVAX*opA_cv^ zsCF~FOAn8Jr?&8?@$e=!(m50V;OYw~!Dl6MvUQ*iCND{i^ef`QPce>VJq-i;pVM-y zolr!+gZo>xI`^s5JFcIar^kWc47lFr6M7DqXmA_vO{N?WB;BS{nwbgxN`J90S*@u zfF-~%23Ba)zg0ZJ4+E-#w`KyID0-5Z{K@ZC#}D;(kq6B=Sxd^_dUxC|b~Z4fD4oe^ z+rnW@lupOAWnmzQo6~NE!=Uazt7!=TJHtRT%{s{ zW*YayZpL{;dc+6wNIRkR41n6CQh-i@7)D2E?g^n%k*5u52HI(4KSkcAm zChbwFMW-uLVq7eZmv`A9Ii#{1mYpBXVD#i9piZZ_>ugTs4$JP)_w=tXzKl&xHGZ3rpKpqLO^5-8DM4q3 zXFIAR^#;~|q$G|kJ0YL_P%>PGISaOE>b{U)r4I&lO6wj@c?KAA3o4e1cp{5+>wk+v0UO+q03j9`|N8!&sossSIq2pxP08bO*SEl@~6n9>^u*o|E?) z!-c6^_<2%ZuwK96@hY5?7jPI!?13p%#yu`BoC`Y|u^#lhz*^M(%(G)x5zuU@cAA;R zy=rA&#dh+hEn4lB0!jmvoNg6 z8u~f=j10ybkOd#=+nINRv2v|yu9YI#!k1-K=sX7cZYsBc=Dsj`28N~-K;Aq`v%GhEp;Q8Z1-bdXt9TDe8@`_krLbcJA6&XVJ7+ZaZRClA0vm6`)xCrCTQ-83Dxye5>^M72DyD3sbD$^1vNP9FWk`|#K>#cNzY)0VoOH7BnL z>zHlhE~(;?DQ(trBjxKkUU-}JI8!43L*UHT_PD=mh`B6fxaS_>#-N zf9#Thy_tZLTXC$Nel1_d3EBORdj5%0R=?Y)$Ybnc)_Q^%?)i88059yfXNqzCaXeVT z9iChPmuMT|`*Wz*EE_F|@0E|UT83WDm(Kf38M7lhTOA2~1}B@pDFQo(KcaH@!%zff zp2c{8a?!^M_>6O(`aE|R0!GbkKIYM-V3H`l1=nAb;N1CORcE6eZJ#!4n}25pW|~&P zA9&M}7}=T*_78aOkx#;dL~M=8Ck24S-PS6f6b2l|q;cK0RR*+^iXi#BC)9KHf- zT4u$xiHj2-brAxE_UMB?)^5V6g*fnKlQRZ&932D8L)XV~lt8df;4QEY1&9`4;kEY1 z6KrqWf}=E($>s2vnB{5O^3wP}>!7BH z(~M(R9pW5?1*8f2d6S!UnxGWn!FPCr0VUNlvdPV6s42mkgMNJa6nafs|Jm0}?el(i zD{70u29>6(^MgMdCnw3}X*+BiXxVp0e$R>)E`-9OdyWWAgC_6bCd>k0D4(Tgky)~g Y)I9$y4i{sV!H*5%O9;X@dq-vd7Y^(qcmMzZ literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index af8a367..b1faf30 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,10 +12,12 @@ #include #include #include "dialogs/DialogManager.h" +#include "dialogs/MultyMessageDialogManager.h" #include "json/jsonobject.h" #include "src/utilities/Locker.h" #include "src/utilities/LanguageSwitcher.h" #include "utilities/TouchScreenSignalSender.h" +#include "Keyboard/KeyboardManager.h" QString loadFontFromFile(QString path) { @@ -83,6 +85,7 @@ int main(int argc, char* argv[]) QStringList app_args = a.arguments(); int ret = 0; + KeyboardManager::getInstance(); if (app_args.contains("-d")) //if (true) @@ -104,7 +107,7 @@ int main(int argc, char* argv[]) w.requestLogin(); - DialogManager::Default()->init(); + DialogManager::Default()->init(&w); DeviceManager::Default()->initDevice(); ret = a.exec(); @@ -115,7 +118,7 @@ int main(int argc, char* argv[]) { w.showFullScreen(); w.requestLogin(); - DialogManager::Default()->init(); + DialogManager::Default()->init(&w); DeviceManager::Default()->initDevice(); ret = a.exec(); } diff --git a/src/res.qrc b/src/res.qrc index bba3ab3..3c6c4b6 100644 --- a/src/res.qrc +++ b/src/res.qrc @@ -30,6 +30,8 @@ icons/dicom/echo_suc.png icons/dicom/echo_ing.png icons/dicom/echo_fail.png + icons/dicom/info.png + icons/dicom/warning.png icons/dicomsettings.png icons/dicomsettings_d.png icons/networksettings.png diff --git a/src/stylesheet/Dark2.css b/src/stylesheet/Dark2.css index 5741f09..7e89d0b 100644 --- a/src/stylesheet/Dark2.css +++ b/src/stylesheet/Dark2.css @@ -795,3 +795,52 @@ QWidget#EditMenu QListWidget:item:hover { background: #006dc7; color: white; } + +MultyMessageDialog { + border: 2px solid #2db7f5; + border-radius: 16px; + /*background: rgba(249,250,250,180);*/ + background: rgba(239,240,241,200); +} + +MultyMessageDialog QLabel { + background: rgba(255,0,0,0); + color: black; + font: normal 14px; +} + +QLabel#MultyMessageDialogInfo { + min-width: 30px; + max-width: 30px; + min-height: 30px; + max-height: 30px; + qproperty-pixmap: url(":/icons/dicom/info.png"); + qproperty-scaledContents: true; +} + +QLabel#MultyMessageDialogWarning { + min-width: 30px; + max-width: 30px; + min-height: 30px; + max-height: 30px; + qproperty-pixmap: url(":/icons/dicom/warning.png"); + qproperty-scaledContents: true; +} + +QLabel#MultyMessageDialogError { + min-width: 30px; + max-width: 30px; + min-height: 30px; + max-height: 30px; + qproperty-pixmap: url(":/icons/dicom/echo_fail.png"); + qproperty-scaledContents: true; +} + +QLabel#MultyMessageDialogSucess { + min-width: 30px; + max-width: 30px; + min-height: 30px; + max-height: 30px; + qproperty-pixmap: url(":/icons/dicom/echo_suc.png"); + qproperty-scaledContents: true; +} diff --git a/src/windows/LoginDialog.cpp b/src/windows/LoginDialog.cpp index 39120b9..046bcd6 100644 --- a/src/windows/LoginDialog.cpp +++ b/src/windows/LoginDialog.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include @@ -25,7 +25,7 @@ LoginDialog::LoginDialog(QWidget* aParent) , mErrorMessage(new QLabel(this)) { initializeAllWidget(); - setWindowFlags(windowFlags() | Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint); + setWindowFlags(windowFlags() | Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint| Qt::BypassWindowManagerHint); setGeometry(QApplication::desktop()->screenGeometry()); mAccountEdit->setText(JsonObject::Instance()->defaultUser()); }