From 0e81d14566a3a9be4b370d464ffb09619d14de60 Mon Sep 17 00:00:00 2001 From: krivoshein Date: Mon, 15 Sep 2025 18:20:39 +0300 Subject: [PATCH] SpecialMessageBox --- InstructorsAndTrainees/CMakeLists.txt | 4 + .../Core/notifycontroller.cpp | 8 +- .../Core/recognizesystem.cpp | 3 +- .../instructors/editorinstructors.cpp | 23 +- .../instructorsandtraineeswidget.cpp | 13 +- InstructorsAndTrainees/resources.qrc | 3 + .../resources/css/styleSheetMain.css | 3 +- .../resources/icons/critical.png | Bin 0 -> 2996 bytes .../resources/icons/info.png | Bin 0 -> 2623 bytes .../resources/icons/warning.png | Bin 0 -> 2738 bytes InstructorsAndTrainees/specialmessagebox.cpp | 56 ++++ InstructorsAndTrainees/specialmessagebox.h | 35 +++ InstructorsAndTrainees/specialmessagebox.ui | 116 ++++++++ .../tasks/ammtaskswidget.cpp | 5 +- .../tasks/dialogchecktask.cpp | 5 +- .../tasks/fimtaskswidget.cpp | 5 +- .../trainees/editortrainees.cpp | 31 +- .../InstructorsAndTraineesWidget_ru_RU.qm | Bin 20967 -> 20254 bytes .../InstructorsAndTraineesWidget_ru_RU.ts | 271 +++++++----------- 19 files changed, 366 insertions(+), 215 deletions(-) create mode 100644 InstructorsAndTrainees/resources/icons/critical.png create mode 100644 InstructorsAndTrainees/resources/icons/info.png create mode 100644 InstructorsAndTrainees/resources/icons/warning.png create mode 100644 InstructorsAndTrainees/specialmessagebox.cpp create mode 100644 InstructorsAndTrainees/specialmessagebox.h create mode 100644 InstructorsAndTrainees/specialmessagebox.ui diff --git a/InstructorsAndTrainees/CMakeLists.txt b/InstructorsAndTrainees/CMakeLists.txt index 3063048..9ce5454 100644 --- a/InstructorsAndTrainees/CMakeLists.txt +++ b/InstructorsAndTrainees/CMakeLists.txt @@ -103,6 +103,10 @@ add_library(InstructorsAndTrainees SHARED widgets/waitanimationwidget.h widgets/waitanimationwidget.ui + specialmessagebox.cpp + specialmessagebox.h + specialmessagebox.ui + resources.qrc ) diff --git a/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.cpp b/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.cpp index 86d4ca6..d6a69a7 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/notifycontroller.cpp @@ -1,4 +1,5 @@ #include "notifycontroller.h" +#include "specialmessagebox.h" NotifyController::NotifyController(QObject *parent) : QObject(parent) { @@ -7,10 +8,5 @@ NotifyController::NotifyController(QObject *parent) : QObject(parent) void NotifyController::showWarning(QString text) { - QMessageBox warning; - warning.setText(text); - - warning.setIcon(QMessageBox::Warning); - warning.setWindowTitle(tr("Error")); - warning.exec(); + SpecialMessageBox(nullptr, SpecialMessageBox::TypeSpecMsgBox::warningWithoutButtons, text).exec(); } diff --git a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp index 016386c..dc4e86f 100644 --- a/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp +++ b/InstructorsAndTrainees/connectorToServer/Core/recognizesystem.cpp @@ -6,6 +6,7 @@ #include "instructor.h" #include "tasksAmmFim.h" #include "timingoftrainee.h" +#include "specialmessagebox.h" RecognizeSystem::RecognizeSystem(QObject *parent): @@ -392,7 +393,7 @@ void RecognizeSystem::recognize(QTcpSocket *socket) QFile xmlInFile(xmlFileName); if (!xmlInFile.open(QFile::ReadOnly | QFile::Text)) { - QMessageBox::critical(nullptr, tr("Attention!"), tr("The file could not be opened ") + xmlFileName); + SpecialMessageBox(nullptr, SpecialMessageBox::TypeSpecMsgBox::critical, tr("The file could not be opened ") + xmlFileName).exec(); return; } else diff --git a/InstructorsAndTrainees/instructors/editorinstructors.cpp b/InstructorsAndTrainees/instructors/editorinstructors.cpp index 3c2640f..0b7dc4c 100644 --- a/InstructorsAndTrainees/instructors/editorinstructors.cpp +++ b/InstructorsAndTrainees/instructors/editorinstructors.cpp @@ -1,6 +1,7 @@ #include #include "editorinstructors.h" #include "dialogeditinstructor.h" +#include "specialmessagebox.h" #include "ui_editorinstructors.h" EditorInstructors::EditorInstructors(ConnectorToServer* connectorToServer, bool adminMode, QWidget *parent) : @@ -108,17 +109,17 @@ void EditorInstructors::on_btnDeleteInstructor_clicked() if(connectorToServer->isAdminInstructor(id)) {//Это Админ! - QMessageBox::critical(this, tr("Error!"), tr("You cannot delete the Administrator.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("You cannot delete the Administrator.")).exec(); return; } if(connectorToServer->isLoggedInInstructor(id)) {//Инструктор залогирован! - QMessageBox::critical(this, tr("Error!"), tr("You cannot delete a logged-in instructor.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("You cannot delete a logged-in instructor.")).exec(); return; } - if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete it anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warning, tr("The deletion will be irrevocable.\nDelete it anyway?")).exec() == QDialog::Accepted) { waitAnimationWidget->showWithPlay(); connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_DEL_INSTRUCTOR, id); @@ -153,7 +154,7 @@ void EditorInstructors::on_btnToOrFromArchive_clicked() {//Не Архивный if(connectorToServer->isLoggedInInstructor(id)) {//Инструктор залогирован! - QMessageBox::critical(this, tr("Error!"), tr("You cannot archive a logged-in instructor.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("You cannot archive a logged-in instructor.")).exec(); return; } @@ -190,7 +191,7 @@ void EditorInstructors::on_btnEdit_clicked() if(connectorToServer->isLoggedInInstructor(id)) {//Инструктор залогирован! - QMessageBox::critical(this, tr("Error!"), tr("You cannot edit a logged-in instructor.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("You cannot edit a logged-in instructor.")).exec(); return; } @@ -276,22 +277,19 @@ bool EditorInstructors::verifyInstructor(Instructor instructor) if(instructor.getName() == QStringLiteral("")) {//Имя не корректно! - QMessageBox::critical(this, tr("Editing error!"), - tr("Unacceptable instructor name has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Unacceptable instructor name has been entered.\nThe changes will not be accepted.")).exec(); return false; } if(instructor.getLogin() == QStringLiteral("")) {//Логин не корректен! - QMessageBox::critical(this, tr("Editing error!"), - tr("Unacceptable instructor login has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Unacceptable instructor login has been entered.\nThe changes will not be accepted.")).exec(); return false; } if(instructor.getPassword() == QStringLiteral("")) {//Пароль не корректный! - QMessageBox::critical(this, tr("Editing error!"), - tr("Unacceptable instructor password has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Unacceptable instructor password has been entered.\nThe changes will not be accepted.")).exec(); return false; } @@ -300,8 +298,7 @@ bool EditorInstructors::verifyInstructor(Instructor instructor) int user_T = connectorToServer->getIdTraineeByLogin(instructor.getLogin()); if((user_I && (user_I != instructor.getID())) || (user_T && (user_T != instructor.getID()))) {//Логин уже существует! - QMessageBox::critical(this, tr("Editing error!"), - tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")).exec(); return 0; } diff --git a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp index 96efabe..cabfc07 100644 --- a/InstructorsAndTrainees/instructorsandtraineeswidget.cpp +++ b/InstructorsAndTrainees/instructorsandtraineeswidget.cpp @@ -4,6 +4,7 @@ #include "ui_instructorsandtraineeswidget.h" #include "dialogauthorizationinstructor.h" #include "dialogsettings.h" +#include "specialmessagebox.h" const QString InstructorsAndTraineesWidget::languageENG = "en_EN"; @@ -124,7 +125,7 @@ QString InstructorsAndTraineesWidget::loadStyleSheet() QFile styleSheetFile(fileName); if (!styleSheetFile.open(QFile::ReadOnly | QFile::Text)) { - QMessageBox::critical(this, tr("Attention!"), tr("The file could not be opened ") + fileName); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("The file could not be opened ") + fileName).exec(); return QStringLiteral(""); } else @@ -181,12 +182,11 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se connectorToServer->sendQueryTasksXML("fim"); connectorToServer->sendQueryTasksXML("amm"); - //QMessageBox::information(this, tr("Instructor authorization"), tr("Successfully!")); } else { ui->btnAuthorizationInstructor->setChecked(false); - QMessageBox::warning(this, tr("Instructor authorization"), tr("Invalid login or password!")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Instructor authorization") + "\n" + tr("Invalid login or password!")).exec(); } } @@ -207,12 +207,11 @@ void InstructorsAndTraineesWidget::slot_checkDeLoginResult(ServerDeAuthorization ui->btnEditorInstructors->setEnabled(false); updateLabelLoggedInInstructor("",""); - //QMessageBox::information(this, tr("Instructor deauthorization"), tr("Successfully!")); } else { ui->btnAuthorizationInstructor->setChecked(true); - QMessageBox::warning(this, tr("Instructor deauthorization"), tr("Error!")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Instructor deauthorization") + "\n" + tr("Error!")).exec(); } } @@ -252,7 +251,7 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) updateLabelLoggedInInstructor(loginInstructorLoggedInLocal, nameInstructorLoggedInLocal); updateLabelServer(); - QMessageBox::warning(this, tr("Warning!"), tr("The server is not available")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("The server is not available!")).exec(); } } @@ -440,7 +439,7 @@ void InstructorsAndTraineesWidget::on_btnSettings_clicked() if(dlg.settingsServerIsChanged()) { - QMessageBox::warning(this, tr("Attention!"), tr("Server settings have been changed. Please reconnect to the server.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warningWithoutButtons, tr("Server settings have been changed. Please reconnect to the server.")).exec(); if(authorizationIsCompleted()) deAuthorizationInstructor(loginInstructorLoggedInLocal); diff --git a/InstructorsAndTrainees/resources.qrc b/InstructorsAndTrainees/resources.qrc index d7c0f33..f2c273a 100644 --- a/InstructorsAndTrainees/resources.qrc +++ b/InstructorsAndTrainees/resources.qrc @@ -49,5 +49,8 @@ resources/icons/updateVersion.png resources/icons/editorDB.png resources/icons/lms.png + resources/icons/critical.png + resources/icons/warning.png + resources/icons/info.png diff --git a/InstructorsAndTrainees/resources/css/styleSheetMain.css b/InstructorsAndTrainees/resources/css/styleSheetMain.css index 8013ae5..d650e3e 100644 --- a/InstructorsAndTrainees/resources/css/styleSheetMain.css +++ b/InstructorsAndTrainees/resources/css/styleSheetMain.css @@ -71,9 +71,10 @@ QPushButton, QToolButton { qproperty-iconSize: 32px; } + QPushButton { height: 25px; - width: 75px; + width: 100px; } QToolButton { width: 180px; diff --git a/InstructorsAndTrainees/resources/icons/critical.png b/InstructorsAndTrainees/resources/icons/critical.png new file mode 100644 index 0000000000000000000000000000000000000000..9f4f1cb5823f8a5910a1a40aad50779c4ed4578d GIT binary patch literal 2996 zcmbVO3piBi8$Ti|mq@9>zZ@gcWz5xO&Ngdg3a!b+NP2cLW{z<(GiRC^Gee2cZ7kc` z5S2vRWm^@cwj_jf!@BQoLiMMOiXvKU_Kf7&{XhG^?RlQ>eBb%L-}`$n-}}DL+0WVF zWnyS$2mpYIk2lL7n?da`(8u2L*w|rgnj`fNmIJ`i?b@NU`k1O30A~LK;cixJX8S^X zRP4kPpy9BSS}euT0I=F!E#>i}UGiDV~|)}<++fIowiM$1G~$_0EPEP}=q`Nc7)O&m8|r0Tx;|dq&4!+9DRusE{kxDls>v1M-(>IX6ZM6a8U18ZG0) zYn7Opc3N+wkf#jhDNq>~MMWPjiu1u_(9=_UF?7%|2$2X-m3;XhWMCFg0Wz0uWiFcy z`AFmno`etkuo!qOK28WCfcS7Y?8=8D2xJ`I`y(P`B12sa8jJp6+^ z3*|>^v*3fg;Qy5OlOb3Y@^2@E`6 zn*y)^KfR6o?FhW5RYk%W>3_(J_b@pcp-}N;u!j(f*8h@vM9hAowrtm*5_ncLu(mM#+s-8Cq66>?&jS!S)YFq*lJN5A2l$vP55&q zP&n7jp|2%-u8u`UOHSK~P-5H8>-n;g zg@HW<2Z4mW_Q!&myosKu!73XEgL{!-(vAD7pLm-eukSo9EzJAe(1@u+*XcE>Ud(x0 zN;nmXW8Mi**Fy>BFzw-6E7p?Yo8!v}0L`4RGg;Xr%^2XXBk` z_Xv%RLmYKa7RhIOwEVnS9rtN-_s)YOMwTq3`G<2=IXZR2LIZNsTk7F0W?y^VX!@$= zku54x<@T6XS_E=9JrajUyf;eA{Hv+R&WKqTz+1$2lG{FV(9q-oE^va~JQ#Rn$F7Lo zbmpgIU}NC-WzNTDYlhfCX~(d<2+?~rSvqv*@$A&RjgFAl8FW*iG8jw<)KGIWcQL>nN4CMm0xuD+uwgWMVcEvt;Prb?0phYDUP1VoV zw{Y^inM$W+AI~QaXN0BdrOjEEnET28XV3GIAooU9e1f|SSFG5YjPGW=8#H^Q$)LUH zs}0%Ch~28zqzm`PB^Yd3UdxU^BJlAvhmU={dsYZUTB#~dUD@O zucDN!HD)@7^^f#J9mYDhKJF|84yE}~M=~1l1bM}R)^iDgzL|`$^ylM88UU+;A2a;- zDw>+sjMR3u_ik&js~$yf+F0GC9@khy-a8tg^$(P7!^Q5`fx0@X+OG3SRoL#Rw4^Qi z7aF7Uvf5VCFa9D+Kc!3xdTe6)6uh?GEb5G?%eZs?!_r*!leV981*3d!{MdZo@zyu{ zSMIp49*^m+Ig&h>{ZqZAye5#V67O}yzkI0!ZW#jK9gQz2cH9SN+Xt=z&q7j{-KoAN=f(~cG;OyT30TZo;jEksYM|^OUFpVr z!?yg8#@D#7$8CWg%J-}M#%pf3gn$kaK?|jG-3P5+mGvXBuY;Fr9NG%M8GhTafBV=V zYRpXkY_MfPmA6U4Y2*5Rk;U?XS4rpRKP<~s^FzgFii-~4%?T`txvtc091EE^?s2>L z7RY5z%yYc^gL+hR(cdP?;N9)R$*NAzj?%&r)$0_-(%-gMe0<`C;p1r2Rwl>NA?EcQ zUtv%ju
    9ih5;oiDtekK?H5Sa4o#nt7bi;#IGg!;yiw#JNb7j_ocasH&De9gp9^AgV&o~}DvdO6_XFmvbaYVwaj zbK}}KMP8>z#NR#JeWhzxS}Mg3oaft{dnMzNVNG1v@IBY0W|!{8MFID`yz0ZwU(FqS zpn7b&B=1^*X|uAY1zNOgRaNoa}5325O-p4u5vex`lwS)YwJ^b@ixGSavVEOz4 zTL946Scn@K@E2s`CKr%8IPu|K~L)K}JK& zMD)JTX5aT(ok-WcZW3FuGTs^4w8=WZrZ>1QzNKMka@Io86|Re!)qU-Mwa?lOtaEF^ G5`PC&#?CkZ literal 0 HcmV?d00001 diff --git a/InstructorsAndTrainees/resources/icons/info.png b/InstructorsAndTrainees/resources/icons/info.png new file mode 100644 index 0000000000000000000000000000000000000000..0b84223d870be68856b07c156aa92a0051ba9aee GIT binary patch literal 2623 zcmbVO2~-p379M0NMgbK86$@iHR1~uZNJgT>1W43i3Q^E%F(eZhNitz3F(Dd6Pyw|r zv?!p~g&YOMK3h=H7DcRpETT_AtzuQEv`9rCR;(3$69kU!Y2VU0=ik5oyUTy?J(DAi zigY1OAprp3A{Ggwi4n9lXD6b^&E{vsFj^;CiUWY_x3*@N7wGB@0FF};S)4vjvJg_B z8me50CcspaMn|9lAat%tCs!oHdN2V_M6^6|@7L$ZAfn`vV}m4giB13~AtEyd$C#sJ z3Uji8t0d2z1BRL)fMg|8V`eYuNZxaZ{Nu;0v#b7Xq z8cb0z*g;?jm&yocvANt?Ad}AE(C8c*gGFHkLu@+4WP(Ehz3<zBNIk8==+WLvA7*Ml;EEGzOJ!Giea0RE*$s224FDT&bYJYFGnn^*DiLj9_(1 zs2;_W(7&J_IsTmh!nG2~h>SngMWY!Jf$PIp6J`uKVHKC@T z%^Dpfz+kx^#bhX|9)2k4u*#r7V0#!Y7!ZqSm8cP)@y;DsDA&V0GLy~>qR_b%Mv#mV z0ca+>*fCytW-cM6w}BFn-PsX5vJ+1iDYoZ zlaK&aqZlEW(2n))zE~iTVyFsH69;&7XDKNhCOequm<)Xx4{6Ft6 z!Vn@0DgR-uW{Zp2h+m`2mvX zC;?aVq|bA%W2w)Q_6crnhstDE=Kvp`-uxuXec&RvZVSoNU!U6ylZU5>7P`q39?H~`%!v3g-?~iF$CR@d0m@hT<#tww zvistr=7=(?+FFe?8Q#y%>k_uddVVZgI?aoJn;jc)Y5i-tqr-=y#3F;k)s&Q9>?fM& zGHGq&X0XEXIA{8Xlb#!j)4R64YV~nl=DqhTJeX#uYv0weqxi5F^1|YTRIa%YGe17- zeswK-{rJ_En9hG?EBJ@cZio}4@qg;nZGVJ)-q~^Mx*Dk3@}TlXl-qn!+nHKmQ|)Jq zPN_@}F5lc|41p`(WQrlyFK}5{8^1T~MOqSkdm$j+TJA46EOLV_?Lkk^k`0J;O79jw zS8K}IF)3dZA8AoB%aR(G#C|Y7J6p<_T@ii@xN{f2Ij|yU9cg}pyX%1L@F_ekt2E}; zj2iDCU~_5v`pRP&)1vmjBn(^@T|2+w_Vmr;X0BKeYW{9x!gZ;-(BY_dfwjlpNo7|r z>gGpQloq6($TeR6|S2r=Dg<?#-xKMbBSIib8p|Up#Sml<MELcMAiA literal 0 HcmV?d00001 diff --git a/InstructorsAndTrainees/resources/icons/warning.png b/InstructorsAndTrainees/resources/icons/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..6f8e2754c900bc4a74be03a46216453e68216730 GIT binary patch literal 2738 zcmbVO2{@GN9v_7)Svm=kjFBW}`DT%s%(2WU)QGY>x{aA{7-nncW9&+fcxarP(t2D; zsa#8SOq*j#rO2q0Xj8hBvV?@Ir1OpK>7J*%o$qF3wLV=9U6qb;W zVX}o`ASRYCg3$M#9_biMffevUh>48l^8^w~EEP4amjbVq+gKEG8UjU8Q7%e@$UufSk|q>` zND{^#%>sxdC(eouR-N&8rniX2S#r3>(W7VF3(INog9$X3gV7(PG}TaW)GJ@<2W)fFv*$ zn8%7Dgpg1YA^bP0=a2uz032EdW8TI$ec|)xO-LZO7?{RvK)#8V_{NDq>{d`Bj25#% zw;0$>OC=i-g(e1>kWlO^6!PXS%6rabB#oxL7&3BA09U{kN+mX5$$)ew1X59W9G-;6 zkyqJMWgd9l96oW3|aJ2rH)WgF5W0hq)Lk0UsmeXfnmG~SS z?ipfcu;nZfIx9bqe4<>F7as@eTa3`A`VY*Uh*gg>W%knh>P*Ar+l^ zpuo6FyYjH>Kgx{xu`%#{;P;zXiE0Nq0R_ z<3**8|}yyJx?7m?7L?DIB{Fd!y|MD%uT1LKIB4eBh2yWLj9jAlO8@R z(ygk9)+pMY=%bk+KRwa?G;d*0K$U5U_S?vd`ud_!XPxDPqt##I{UxB z89*}b%)>0|O+4I^T-kyB!V zUiGu=DD4V0l5ObrXTA8mvk46&S`nq;be~kT`|8|-CymmF@1&1Pp?Fg{&#S&dt+61~ zWn_{|d$J6tXDom8EVp|ooFq*gr`3P7LQh~Tof1SY>e;}u6G@rJ0``u501JHTyP+Iy zO-}~RpmeiVL~DO$@$G~*3k%D%dZt~|T3V2La7akgBOA4b_-`5IyI#*pa^M>=>9@S$pUe3XcoX>u%a1lFi zqL+V6&?>Fr9L@K?K=i8%t>849;Df@{ZAY6!PF@(k;JCP?QB_rcc;ZbK1@W$$tW6HO zqDU<8%XM4^Hp^E#^{`*JZyfC&UTW=0_({T7>`T-8{z2dETYW2xkJOQ!OSjZ5R!|i=adXAz$z}`szTLmrmG;*d zlbH1h=54H9Xwzc-IKYf=1vu}?+1c4PWp$j9QPPq>*&FDg{yvU6)H_BjY~Isqr%)kk zgj87NzpjooVP-Xw^wTtpR)wAC3|iW(xP|oGZ``f8ak%c;k1{+s( zWO;wNpWvhY8l53?IBPzxqnm$elg8bHcPE~T6q=Lj4=)CoSSNSqDE}%w+`Q;zt~*kH E2jh)Tv;Y7A literal 0 HcmV?d00001 diff --git a/InstructorsAndTrainees/specialmessagebox.cpp b/InstructorsAndTrainees/specialmessagebox.cpp new file mode 100644 index 0000000..e716f1e --- /dev/null +++ b/InstructorsAndTrainees/specialmessagebox.cpp @@ -0,0 +1,56 @@ +#include +#include "specialmessagebox.h" +#include "ui_specialmessagebox.h" + +SpecialMessageBox::SpecialMessageBox(QWidget *parent, TypeSpecMsgBox type, const QString& text) : + QDialog(parent), + ui(new Ui::SpecialMessageBox) +{ + ui->setupUi(this); + + this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); + + if(type == TypeSpecMsgBox::warning) + { + ui->lbl_icon->setPixmap(QPixmap(QStringLiteral(":/resources/icons/warning.png"))); + this->setWindowTitle(tr("Attention!")); + } + else if(type == TypeSpecMsgBox::warningWithoutButtons) + { + ui->lbl_icon->setPixmap(QPixmap(QStringLiteral(":/resources/icons/warning.png"))); + this->setWindowTitle(tr("Attention!")); + ui->btnYes->setVisible(false); + ui->btnNo->setVisible(false); + } + else if(type == TypeSpecMsgBox::critical) + { + ui->lbl_icon->setPixmap(QPixmap(QStringLiteral(":/resources/icons/critical.png"))); + this->setWindowTitle(tr("Error!")); + ui->btnYes->setVisible(false); + ui->btnNo->setVisible(false); + } + else if(type == TypeSpecMsgBox::info) + { + ui->lbl_icon->setPixmap(QPixmap(QStringLiteral(":/resources/icons/info.png"))); + this->setWindowTitle(tr("Information")); + ui->btnYes->setVisible(false); + ui->btnNo->setVisible(false); + } + + ui->lblText->setText(text); +} + +SpecialMessageBox::~SpecialMessageBox() +{ + delete ui; +} + +void SpecialMessageBox::on_btnYes_clicked() +{ + this->accept(); +} + +void SpecialMessageBox::on_btnNo_clicked() +{ + this->reject(); +} diff --git a/InstructorsAndTrainees/specialmessagebox.h b/InstructorsAndTrainees/specialmessagebox.h new file mode 100644 index 0000000..d73380d --- /dev/null +++ b/InstructorsAndTrainees/specialmessagebox.h @@ -0,0 +1,35 @@ +#ifndef SPECIALMESSAGEBOX_H +#define SPECIALMESSAGEBOX_H + +#include + +namespace Ui { +class SpecialMessageBox; +} + +class SpecialMessageBox : public QDialog +{ + Q_OBJECT + +public: + enum TypeSpecMsgBox { + warning, + warningWithoutButtons, + critical, + info + }; + +public: + explicit SpecialMessageBox(QWidget *parent, TypeSpecMsgBox type, const QString& text); + ~SpecialMessageBox(); + +private slots: + void on_btnYes_clicked(); + + void on_btnNo_clicked(); + +private: + Ui::SpecialMessageBox *ui; +}; + +#endif // SPECIALMESSAGEBOX_H diff --git a/InstructorsAndTrainees/specialmessagebox.ui b/InstructorsAndTrainees/specialmessagebox.ui new file mode 100644 index 0000000..92de763 --- /dev/null +++ b/InstructorsAndTrainees/specialmessagebox.ui @@ -0,0 +1,116 @@ + + + SpecialMessageBox + + + + 0 + 0 + 400 + 100 + + + + Dialog + + + + + + + + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + :/resources/icons/circleGray.png + + + + + + + text + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + 0 + 0 + + + + Yes + + + + + + + + 0 + 0 + + + + No + + + + + + + + + + + + + + diff --git a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp index cb5ca0e..1705369 100644 --- a/InstructorsAndTrainees/tasks/ammtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/ammtaskswidget.cpp @@ -7,6 +7,7 @@ #include "ammtaskswidget.h" #include "ui_ammtaskswidget.h" #include "dialogchecktask.h" +#include "specialmessagebox.h" AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTreeAMMFIM type, QWidget *parent) : QWidget(parent), @@ -291,7 +292,7 @@ void AMMtasksWidget::on_btnDelete_clicked() int id = treeItemCurrent->text(ColumnsTreeAMM::clmnAMM_ID).toInt(); - if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete it anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warning, tr("The deletion will be irrevocable.\nDelete it anyway?")).exec() == QDialog::Accepted) { waitAnimationWidget->showWithPlay(); connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_DEL_TASK_AMM_TO_TRAINEE, id); @@ -334,7 +335,7 @@ void AMMtasksWidget::on_btnCheck_clicked() void AMMtasksWidget::on_btnAssignTask_clicked() { - if(QMessageBox::question(this, tr("New task"), tr("Assign this task?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warning, tr("Assign this task?")).exec() == QDialog::Accepted) assignTaskAMMtoTrainee(); } diff --git a/InstructorsAndTrainees/tasks/dialogchecktask.cpp b/InstructorsAndTrainees/tasks/dialogchecktask.cpp index ee9f38a..e0a1ccd 100644 --- a/InstructorsAndTrainees/tasks/dialogchecktask.cpp +++ b/InstructorsAndTrainees/tasks/dialogchecktask.cpp @@ -1,4 +1,5 @@ #include "dialogchecktask.h" +#include "specialmessagebox.h" #include "ui_dialogchecktask.h" DialogCheckTask::DialogCheckTask(ConnectorToServer* connectorToServer, QString type, QWidget *parent) : @@ -138,7 +139,7 @@ void DialogCheckTask::on_btnWrong_clicked() msgString = tr("Change task status?\nThe status will be set:\n'new'"); } - if(QMessageBox::warning(this, tr("Attention!"), msgString, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warning, msgString).exec() == QDialog::Accepted) { connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status); this->parentWidget()->close(); @@ -165,7 +166,7 @@ void DialogCheckTask::on_btnRight_clicked() msgString = tr("Change task status?\nThe status will be set:\n'completed'"); } - if(QMessageBox::warning(this, tr("Attention!"), msgString, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warning, msgString).exec() == QDialog::Accepted) { connectorToServer->sendQueryToDB(typeQuery, id_task, (void*)&status); this->parentWidget()->close(); diff --git a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp index 2557cb3..53c32b5 100644 --- a/InstructorsAndTrainees/tasks/fimtaskswidget.cpp +++ b/InstructorsAndTrainees/tasks/fimtaskswidget.cpp @@ -8,6 +8,7 @@ #include "ui_fimtaskswidget.h" #include "tasksAmmFim.h" #include "dialogchecktask.h" +#include "specialmessagebox.h" FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTreeAMMFIM type, QWidget *parent) : QWidget(parent), @@ -338,7 +339,7 @@ void FIMtasksWidget::on_btnDelete_clicked() int id = treeItemCurrent->text(ColumnsTreeFIM::clmnFIM_ID).toInt(); - if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete it anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warning, tr("The deletion will be irrevocable.\nDelete it anyway?")).exec() == QDialog::Accepted) { waitAnimationWidget->showWithPlay(); connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_DEL_TASK_FIM_TO_TRAINEE, id); @@ -385,7 +386,7 @@ void FIMtasksWidget::on_btnCheck_clicked() void FIMtasksWidget::on_btnAssignTask_clicked() { - if(QMessageBox::question(this, tr("New task"), tr("Assign this task?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warning, tr("Assign this task?")).exec() == QDialog::Accepted) assignTaskFIMtoTrainee(); } diff --git a/InstructorsAndTrainees/trainees/editortrainees.cpp b/InstructorsAndTrainees/trainees/editortrainees.cpp index 6156371..8432081 100644 --- a/InstructorsAndTrainees/trainees/editortrainees.cpp +++ b/InstructorsAndTrainees/trainees/editortrainees.cpp @@ -3,6 +3,7 @@ #include "ui_editortrainees.h" #include "dialogeditgroup.h" #include "dialogedittrainee.h" +#include "specialmessagebox.h" EditorTrainees::EditorTrainees(ConnectorToServer* connectorToServer, bool adminMode, QWidget *parent) : TraineesView(connectorToServer, CommonView::TypeView::control, parent), @@ -111,12 +112,12 @@ void EditorTrainees::on_btnDeleteGroup_clicked() if(connectorToServer->getListTraineesInGroup(id_group).count() > 0) { - QMessageBox::critical(this, tr("Editing error!"), tr("The group is not empty.\nIt is not possible to delete a non-empty group.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("The group is not empty.\nIt is not possible to delete a non-empty group.")).exec(); return; } else {//Пустая группа - if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warning, tr("The deletion will be irrevocable.\nDelete it anyway?")).exec() == QDialog::Accepted) { waitAnimationWidget->showWithPlay(); connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_DEL_GROUP, id_group); @@ -216,11 +217,11 @@ void EditorTrainees::on_btnDeleteTrainee_clicked() if(connectorToServer->isLoggedInTrainee(id_trainee)) {//Обучаемый залогирован! - QMessageBox::critical(this, tr("Error!"), tr("You cannot delete a logged-in trainee.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("You cannot delete a logged-in trainee.")).exec(); return; } - if(QMessageBox::warning(this, tr("Attention!"), tr("The deletion will be irrevocable.\nDelete anyway?"), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) + if(SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::warning, tr("The deletion will be irrevocable.\nDelete it anyway?")).exec() == QDialog::Accepted) { waitAnimationWidget->showWithPlay(); connectorToServer->sendQueryToDB(TypeQueryToDB::TYPE_QUERY_DEL_TRAINEE, id_trainee); @@ -255,7 +256,7 @@ void EditorTrainees::on_btnToOrFromArchiveTrainee_clicked() {//Не Архивный if(connectorToServer->isLoggedInTrainee(id_trainee)) {//Обучаемый залогирован! - QMessageBox::critical(this, tr("Error!"), tr("You cannot archive a logged-in trainee.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("You cannot archive a logged-in trainee.")).exec(); return; } @@ -301,7 +302,7 @@ void EditorTrainees::on_btnEdit_clicked() if(connectorToServer->isLoggedInTrainee(id_trainee)) {//Обучаемый залогирован! - QMessageBox::critical(this, tr("Error!"), tr("You cannot edit a logged-in trainee.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("You cannot edit a logged-in trainee.")).exec(); return; } @@ -431,8 +432,7 @@ bool EditorTrainees::verifyGroup(Group group) if(group.getName() == QStringLiteral("")) {//Имя не корректно! - QMessageBox::critical(this, tr("Editing error!"), - tr("Unacceptable group name has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Unacceptable group name has been entered.\nThe changes will not be accepted.")).exec(); return false; } @@ -442,8 +442,7 @@ bool EditorTrainees::verifyGroup(Group group) { if(group.getName() == exist_group.getName() && group.getID() != exist_group.getID()) {//Имя уже существует - QMessageBox::critical(this, tr("Editing error!"), - tr("An existing group name has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("An existing group name has been entered.\nThe changes will not be accepted.")).exec(); return false; } } @@ -457,22 +456,19 @@ bool EditorTrainees::verifyTrainee(Trainee trainee) if(trainee.getName() == QStringLiteral("")) {//Имя не корректно! - QMessageBox::critical(this, tr("Editing error!"), - tr("Unacceptable trainee name has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Unacceptable trainee name has been entered.\nThe changes will not be accepted.")).exec(); return false; } if(trainee.getLogin() == QStringLiteral("")) {//Логин не корректен! - QMessageBox::critical(this, tr("Editing error!"), - tr("Unacceptable trainee login has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Unacceptable trainee login has been entered.\nThe changes will not be accepted.")).exec(); return false; } if(trainee.getPassword() == QStringLiteral("")) {//Пароль не корректный! - QMessageBox::critical(this, tr("Editing error!"), - tr("Unacceptable trainee password has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("Unacceptable trainee password has been entered.\nThe changes will not be accepted.")).exec(); return false; } @@ -481,8 +477,7 @@ bool EditorTrainees::verifyTrainee(Trainee trainee) int user_T = connectorToServer->getIdTraineeByLogin(trainee.getLogin()); if((user_I && (user_I != trainee.getID())) || (user_T && (user_T != trainee.getID()))) {//Логин уже существует! - QMessageBox::critical(this, tr("Editing error!"), - tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")); + SpecialMessageBox(this, SpecialMessageBox::TypeSpecMsgBox::critical, tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted.")).exec(); return 0; } diff --git a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.qm index c1be31f59a2f3383e5090ae82d2944695e869396..24ea055e2398894ef721de3a323fff38d1632e64 100644 GIT binary patch delta 2128 zcmZvdc~BHb6vn^V?b(^#8Fod9qJk)*D~GU%iy+H#$RU;@70hJ}N)*w6pg@#VqKgMn z@eHd*Me)P~@hI069?^KjpvEH_ja3@Zh(;6dl*Yse$%C%)kLXrS{d&6ly?*a|uV-&> z5GpH$#U73=04#uY2f!`@LO)J(G^b?}r+pJ34h3wvoCz`@(R=6|&X}7(k~jIe3=FCV z`gH+@)zR8xVB|5fTgjOi2NcnKG(8TQcZBZYgIG7P%2|NFjWhfn*Z~H(n>oFLz$D5NesOb5zH8xjBvIF9rWngQ)x zPQy`7)t@uen=>X6?>5mvvM+|0bq6A9G5l~3z!ZaQ7umC6_~O2U>g4eiYV4;0w*k14 za|rO+EyQW4Hi_$n%oZj|!ZbfWTHh~hexL!`oD%9z-vkmGh5Dz|0~#;Rw);4}Z*iKh zXvC@)v@b$aT;xGLaYJ*>?<~-FjCS*0cj6pRt-CddE4=o|l-Tbs~Nl+d1?1W|yb@6O= zav625{|U~h`>g)tYzinqwARzQVJfF`o6}Oy86%6URvo3DIU`ojBPE4VoaV9ObuB5O zJ>}3z2h-`=2)cG#n*rZaUGmuvspdJlQT|yZnM1cRhB7p5=IoTKYYiy6R8qIi0NQqt z)QeOKDOf7_k`&Ooa|R5Swq=uj=gZQz`HfV%&!wGt6oCDVbnXlVET51~k0?=%bQfHalO2H=v2U5A+M49QWHPrRJL+DELJ|SYvk%i%7hs?mEN4{ zLe9`M&X|wo9V4o#rnT~)Rg?i%=-n2QlmW-|Z4OrgZ*13F?@R{*oAoK}=%W)KsUO#9 zr|V|c=iQ*~-UfZ`JxaL!cKy-e3+ev%x}!fI9!S@%On+DHPKGs{NxAyF>(`RuV}oa8 zS0GsBjGSSx_5K@(+h%zG*J(h0R2ZQo+Xt)P^n^_?n5U=arXE_ zdC%tvtv^&I2hllR`;|HD7Tte0)-s^)K>?$&+<`D>fQ>AlkJw{czQp7$|EC9bC)5{v_j1yXXMvEnQ#)}_L@E9&e- zpx0v4n^HMRA8RW2{fv}Yz!_G|X)Q6G|9K`we86b&T=&SmP<&EU-U`^9y$#~#6XU7ziGVLm0fM2m;u8WB1}a0P~K z5`~`53lV-Qy3zj`-Di5d$|E~F*M*y%@oB-%{Kyhl|NbvTryT3%`Xu(0)-^MsNpOA} z5@>f%pO`gzd}i*Dtir;~?5z0wVnO>a{a!lKCD3YqwnRQ(-Ru0Jqrc-d9%!=%^JLL1 zf!SFsvoQ-xVi9cUORq{w-q`$t37JLX^YdQsTF|y+!n~Q4#lJMuq~^b}TWpQm`F(0< Z+p7WoFBw*pRb2FnhgJu!Pm^+${{ZyzJy8Gv delta 2308 zcmbW2YgAO%703UVId|sXxpy9h*CYfOU@*W8I&o$oz#z;R zw30z<^FV9R+mILqAJO8giS6jJd1wudvDy@y`dFq`+eTY8rj*shtY$5t-Eg{G{n*tH zcm2*e_w0T4{_lP69UK&{zbf=4L~j6a14S(WI|m3|oVg!!dOqh2%ml=GVD3i1K=he7 zgWsUFRI=X$)LaINKLi$?1f&?S%)}UMTmR0kmF<+8Y%#f zm$UKU={r5OGzOM{Fi86bQIOMwnTxPan$6zN)o+`+RaPpg$H&0$H~!YESR51 z^44MDS1EF)a4Ks#)mxn2ot%LYJU0FrNq-HEy;+oT1dYeD0jq%K*rfdhZ2VgqkhBm7 zX1`BLi1_`==rJJEE(GGJHdRg`G{rvQX@`S0tP+Ms`%Y&9P%;qrN5=?IcvJVa+Qq=U9c~rXHGVIx%zFg z|2Et6^WDUQY+qbFQ2Gycz(sSx%$d7}vm%|n(eW3cdXybAngQ1#7X4M+A(E_`o$3!z z^PS;L8{*6t+2vEuQedBmzRR>vDdSZ4a(b6?1~!UYw+>UUyddsdM@kAGappCMf6|c> ztX6M0x)6Bi8GZcT3Bd8GzH)?0UH(~A-;^6B$%^&6$|yr?3+Met{ZwG(X8ptt3t(?B zsQcFd@rMoSIVy!=%n*5rl+bCM`Oh2nH#Lx%n9uTtr%46nCQAb|$Mncq<0a$?4w!ye>Z$7hW({)IG)d2` zy$=Z9k=BQHQ!TBW8JDC@CrI*YzqIM(Bwv(X6iCTgH>H8VQR>6bp=O_|`LY}!B)&wy+_ zJ_sbwlYKW<12aqH>iAcHhll01k7!%^_v9m=P{y`-@^Iq@s(rTnL4gxdEL0-w>q6pEaA*)QXWr#hu(jzbh+r9bf@whqrgq?O_J_^K^b50-{A~;l-}`jI%u`B z?h=*4zh4FZa9ULi?~L(19tC&=+Hlq>XgMP-^Y@uV53ctW+nNhL^D zi)%?ChfZB^hDsMNbEaKU7rzkQK^B{7Kom`!)7EpQ=5gj6<8)r+EG<=E`pG5g@@<@X z@#@y&^nG_9R$mWM;K5_+TLSft5t;Te7MH(6Y)?8AtlbWl&ydXrN4^O-dn}I_=m#{T z+p;Nh6)Aepe>l!rBw9ZB!}lrk$1T?nSgGqr>2FtaR!6C8-L4#MRR1llBIwlC$_d&M z!%3%&rLx&<7IU+D*jXXbOHU!zHXH7CZt zq?D;NacSX{B&{!b$21p9V^!=S_8==}Zt_{KjU^|hm(of-GVXdcS1fDkY-ww@ha-{p zNQTywlA^_ejwvsmtfJW0Z8zkpGnP$H&>qSB^Z)C1x{cgsY2+p5$vPwmb}e1b7u?!> zIX4!}zF^QQgSpx+S3)c)KS{{>U)9ih@>6228Eb^85X0Wg*lRO?ED8?o%RWc;-5gUE ztq9vY!jZ0U#NN_jZ)@+ghq^*7t)Zo@VQq)+92ws)OOJ*kZ6rj77V=Kl3Tp3-Z78@Z zQm;e(Zz1nG6)PqMGthf$U3+KC@~7ssw{=F^TU*1CSiAp2UKnd2QTv^@DYmD4K!_cg H)2#d(@0?mJ diff --git a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts index 96c8f5f..4aa1c5d 100644 --- a/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts +++ b/InstructorsAndTrainees/translations/InstructorsAndTraineesWidget_ru_RU.ts @@ -24,54 +24,44 @@ Удалить - - + + Task AMM Задача AMM - - + + DM code DM код - - + + ID ID - - + + Status Статус - - Attention! - Внимание! - - - + The deletion will be irrevocable. Delete it anyway? Удаление будет безвозвратным. Всё равно удалить? - + Status Task Статус задачи - - New task - Новая задача - - - + Assign this task? Назначить эту задачу? @@ -133,27 +123,27 @@ Delete it anyway? Верно - + Completed Выполнена - + New Новая - + viewed Просмотрено - + completed Выполнена - + Change task status? The status will be set: 'failed' @@ -162,7 +152,7 @@ The status will be set: 'неверно' - + Change task status? The status will be set: 'new' @@ -171,14 +161,8 @@ The status will be set: 'новая' - - - Attention! - Внимание! - - - - + + Change task status? The status will be set: 'completed' @@ -363,7 +347,7 @@ The status will be set: - + To archive Архивировать @@ -378,58 +362,37 @@ The status will be set: Показать архив - - - - - Error! - Ошибка! - - - + You cannot delete the Administrator. Нельзя удалить администратора. - + You cannot delete a logged-in instructor. Вы не можете удалить инструктора, вошедшего в систему. - - Attention! - Внимание! - - - + The deletion will be irrevocable. Delete it anyway? Удаление будет безвозвратным. Всё равно удалить? - + You cannot archive a logged-in instructor. Вы не можете заархивировать инструктора, вошедшего в систему. - + You cannot edit a logged-in instructor. Вы не можете редактировать инструктора, вошедшего в систему. - + From archive Разархивировать - - - - - - Editing error! - Ошибка редактирования! - Unacceptable instructor name has been entered. @@ -438,21 +401,21 @@ The changes will not be accepted. Изменения приняты не будут. - + Unacceptable instructor login has been entered. The changes will not be accepted. Введен неприемлемый логин инструктора. Изменения приняты не будут. - + Unacceptable instructor password has been entered. The changes will not be accepted. Введен неприемлемый пароль инструктора. Изменения приняты не будут. - + An existing instructor or trainee login has been entered. The changes will not be accepted. Введен существующий логин инструктора или обучаемого. @@ -488,8 +451,8 @@ The changes will not be accepted. - - + + To archive Архивировать @@ -504,59 +467,36 @@ The changes will not be accepted. Показать архив - - - - - - - - Editing error! - Ошибка редактирования! - - - + The group is not empty. It is not possible to delete a non-empty group. Группа не пуста. Невозможно удалить непустую группу. - - - Attention! - Внимание! - - - - + + The deletion will be irrevocable. -Delete anyway? - Удаление будет безвозвратным. Всё равно удалить? +Delete it anyway? + Удаление будет безвозвратным. +Всё равно удалить? - - - - Error! - Ошибка! - - - + You cannot delete a logged-in trainee. Вы не можете удалить обучаемого, вошедшего в систему. - + You cannot archive a logged-in trainee. Вы не можете заархивировать обучаемого, вошедшего в систему. - + You cannot edit a logged-in trainee. Вы не можете редактировать обучаемого, вошедшего в систему. - + From archive Разархивировать @@ -568,35 +508,35 @@ The changes will not be accepted. Изменения приняты не будут. - + An existing group name has been entered. The changes will not be accepted. Введено существующее название группы. Изменения приняты не будут. - + Unacceptable trainee name has been entered. The changes will not be accepted. Введено неприемлемое имя обучаемого. Изменения приняты не будут. - + Unacceptable trainee login has been entered. The changes will not be accepted. Введен неприемлемый логин обучаемого. Изменения приняты не будут. - + Unacceptable trainee password has been entered. The changes will not be accepted. Был введен неприемлемый пароль обучаемого. Изменения приняты не будут. - + An existing instructor or trainee login has been entered. The changes will not be accepted. Введен существующий логин инструктора или обучаемого. @@ -626,47 +566,37 @@ The changes will not be accepted. Удалить - - + + Task FIM Задача FIM - - + + ID ID - - + + Status Статус - - Attention! - Внимание! - - - + The deletion will be irrevocable. Delete it anyway? Удаление будет безвозвратным. Всё равно удалить? - + Check Task Проверка задачи - - New task - Новая задача - - - + Assign this task? Назначить эту задачу? @@ -731,50 +661,39 @@ Delete it anyway? - - + + none нет - - - Attention! - Внимание! - - - + The file could not be opened Файл не может быть открыт - + Instructor deauthorization Деавторизация инструктора - + Error! Ошибка! - - Warning! - Внимание! + + The server is not available! + Сервер не доступен! - - The server is not available - Сервер не доступен - - - + Server settings have been changed. Please reconnect to the server. Настройки сервера изменены. Выполните переподключение к серверу. - + Instructor authorization Авторизация инструктора @@ -924,14 +843,6 @@ Delete it anyway? Только латинские буквы и цифры - - NotifyController - - - Error - Ошибка - - PersonalCardTrainee @@ -1019,31 +930,65 @@ Delete it anyway? RecognizeSystem - - Attention! - Внимание! - - - + The file could not be opened Файл не может быть открыт - + You cannot delete the basic version! Вы не можете удалить базовую версию! - + You cannot delete the active version Вы не можете удалить активную версию - + This name already exists Это имя уже существует + + SpecialMessageBox + + + Dialog + + + + + text + + + + + Yes + Да + + + + No + Нет + + + + + Attention! + Внимание! + + + + Error! + Ошибка! + + + + Information + Информация + + TaskAMMFIMTreePreparation