102 Commits
master ... 0.27

Author SHA1 Message Date
ed7de8af4e refact 1 2026-02-10 16:28:28 +03:00
2cce331a67 refact 0 2026-02-09 17:28:14 +03:00
f03632c56e initialize вместо singleShot 2026-02-09 16:23:40 +03:00
6387b41f9b Settings DB 2026-02-09 16:10:47 +03:00
b3aa4d088a flInitServerLMSWidget 2026-02-09 11:45:16 +03:00
0d287113e1 slot_StateServer 2026-02-09 11:45:04 +03:00
d27ab62114 bugFix SF GUI 2026-02-09 11:31:24 +03:00
4e2a5c48c6 ref 2 2026-02-09 11:30:52 +03:00
dde9ac61f8 refract Server 1 2026-02-06 15:02:55 +03:00
4b98d00faf refract Server 0 2026-02-06 14:47:20 +03:00
8ab4238537 STAB 2026-02-05 14:42:16 +03:00
7b82fcbf07 Запуск refact 2026-02-05 12:30:30 +03:00
ddb5f4b76e refact. Повторный запуск. 2026-02-05 10:16:06 +03:00
c0f46db50a Оптимизация старта Сервера 0 2026-02-05 09:41:24 +03:00
54c82d579a перевод 2026-02-04 16:14:51 +03:00
0d9643c3c1 App is running already 2026-02-04 15:32:57 +03:00
efa08e4330 signal_updateDocsXML 2026-02-04 13:15:37 +03:00
a901e7ecb3 GUI добавлено выкл ПерсКарты при арх-и и удал-и об 2026-02-04 12:17:33 +03:00
34799c5814 bugFix refact 0 2026-02-03 17:57:45 +03:00
60534ebef4 bugFix Блочная передача больших данных 2026-02-03 17:22:52 +03:00
4a24f6fc29 Переработан порядок передачи списков 1 2026-02-02 17:41:36 +03:00
a6451d0261 Переработан порядок передачи списков 0 2026-02-02 14:57:09 +03:00
466b2cd7fc cfiController поштучное изменение 2026-01-30 11:33:47 +03:00
semenov
8ff5072d5b feat:change cifResponse name 2026-01-30 09:59:44 +03:00
semenov
4476b5ccae Merge branch 'DEV' into CFI-Update 2026-01-29 17:27:21 +03:00
semenov
f3bebaeb26 feat: update cifList for unity 2026-01-29 17:12:15 +03:00
406769da27 cfiController ID -> GUID 2026-01-29 16:55:58 +03:00
b4d796d8be cfiController Проверка на удаление 2026-01-29 16:38:55 +03:00
2a13f63fcc плавный скрол 2026-01-29 16:23:35 +03:00
semenov
24e41a0e59 Merge branch 'DEV' into CFI-Update
# Conflicts:
#	LibServer/serverlmswidget.cpp
2026-01-28 17:06:20 +03:00
0c5509a426 cfiController 2026-01-28 13:19:52 +03:00
952e7ae65d All GUI Sending 2026-01-27 13:16:10 +03:00
01b665d82c delete DirectConnection 2026-01-27 12:43:16 +03:00
4ce3f53171 cfiController 1 + fix bug BUSY FREE not for Unity 2026-01-27 12:34:20 +03:00
semenov
c7f2afe3c2 feat: add CFI Update 2026-01-27 12:04:46 +03:00
b452ef347d CFIController 0 2026-01-26 18:47:57 +03:00
f7c677f498 перевод 2026-01-26 10:21:35 +03:00
f328a4a692 fix bug waitAnimation 2026-01-23 16:43:01 +03:00
52882667e4 fix bug select treeview 2026-01-23 15:58:22 +03:00
82c667cfd0 refact 2026-01-23 15:08:57 +03:00
19222cd855 waitAnimationWidget при ожидании подтв-я блок-ки 2026-01-23 12:17:41 +03:00
fe15f059e4 add blocker CalculateFullHashWithSetup 2026-01-23 11:30:08 +03:00
d1d259a854 refact 2026-01-22 18:49:06 +03:00
455b3f384e BUSY и FREE проходят даже на незалогиненых 2026-01-22 17:22:29 +03:00
a43a547631 Откл-е запр-в на EditorTrainees EditorInstructors 2026-01-22 16:42:03 +03:00
ebbfc484b4 Разблокировка при вылете АРМ Инструктора 2026-01-22 15:48:27 +03:00
5415afe264 отклонение запроса на Управление версиями 2026-01-22 15:18:40 +03:00
2522bc6af5 refact connect disconnect при Авторизации 2026-01-22 12:36:22 +03:00
75acf12c3c refact 0 2026-01-22 11:48:21 +03:00
4ba70853cb UpdateController вернул блокировку от SERVER 2026-01-22 10:27:05 +03:00
89d3d51c6b Индикация блокировки Сервера на ГУИ 2026-01-21 17:29:00 +03:00
2772c3aaba карта блок-в. Блокировка правильная. Множ. доступ 2026-01-21 15:44:01 +03:00
fe75f2c6ca refact 2 2026-01-20 17:11:01 +03:00
e7e719bc84 styling 1 2026-01-20 14:34:15 +03:00
238d501ac4 styling 2026-01-20 13:18:30 +03:00
9b2fd4eff3 доработка интерфейс 2026-01-19 16:11:24 +03:00
f2b08887c7 statAMM statFIM в Перс Карте 2026-01-19 14:56:58 +03:00
aa109ad2fe Задачи в цвете 2026-01-19 14:18:52 +03:00
9e0acf0893 Отправка задач об. при отпр. списка об. в ГУИ 2026-01-19 10:53:29 +03:00
1c44fdb182 ПКМ для FIM AMM 2026-01-19 10:38:23 +03:00
8dd2e386fb tasks статистика 0 2026-01-16 15:13:46 +03:00
3ce889524b ПКМ tree 2026-01-16 14:31:13 +03:00
83d6d66172 доперевод 2026-01-15 18:31:12 +03:00
4e2c6bb81e refact ui 1 2026-01-15 16:24:52 +03:00
2ab2e47850 refact ui 2026-01-15 15:23:26 +03:00
2a2ad69a44 refact 2026-01-14 18:26:21 +03:00
8d346cce31 Messages 2026-01-14 17:34:14 +03:00
736f2392e2 style like Unity 0 2026-01-14 15:51:31 +03:00
3ef1b559b3 refact 2026-01-13 18:44:33 +03:00
7116bf14c1 Перевод + Настройки Сервер 2026-01-13 17:10:27 +03:00
2221d27fc3 refact 2026-01-13 16:29:54 +03:00
b09f8e0d49 report upgrade 2 2026-01-13 15:13:36 +03:00
c8e9ea1925 report upgrade 1 2026-01-13 15:04:47 +03:00
7871019a13 report upgrade 0 2026-01-13 13:11:23 +03:00
2eb10b5b4b versionStr при смене языка актуализируется 2026-01-12 16:04:01 +03:00
36527a9cb5 MPS->MTD 2026-01-12 15:27:12 +03:00
6d40c45135 Update files 2026-01-12 12:50:16 +03:00
7c71d8a0e9 Merge branch 'work41' into DEV 2026-01-12 10:40:58 +03:00
semenov
90d034d148 Merge branch 'DEV' of https://gitea.msk.dinamika-avia.ru/Constanta-Design/RRJServer into DEV 2026-01-12 10:30:38 +03:00
semenov
c3298613c2 docs: add tasks 2026-01-12 10:30:31 +03:00
b990d147e6 Перевод 2025-12-26 13:49:36 +03:00
645dc130f4 refact 2025-12-25 13:47:00 +03:00
a06f7653c5 Report WH 2025-12-24 17:24:01 +03:00
bfe586ee2e Report upgrade WH 2025-12-24 11:58:32 +03:00
4dab164e27 Доперевод 2025-12-18 18:37:24 +03:00
ca0284692b Merge branch 'work40' into DEV 2025-12-18 17:34:22 +03:00
33499ed0ea Изменение статуса ФИМ. Закончил 2025-12-18 17:34:05 +03:00
4b3453fe72 в процессе2 2025-12-18 12:22:40 +03:00
b0abac8352 в процессе 1 2025-12-18 11:27:29 +03:00
c8ca0e32ad Изменение статуса для ФИМ. В процессе. 2025-12-18 10:27:10 +03:00
360b740220 refact 2025-12-17 17:17:34 +03:00
semenov
90a25f6163 Merge branch 'add-docs' into DEV 2025-12-17 16:41:30 +03:00
semenov
8170fc1194 docs: add tasks 2025-12-17 16:40:59 +03:00
3953527795 Нотификация рефакт 2025-12-17 15:15:34 +03:00
b7c246b3f6 Разные иконки в трее 2025-12-17 13:08:38 +03:00
d1df6a2a05 Общий перевод. SpecMsgBox 2025-12-16 15:13:37 +03:00
a641194b29 объединение переводов 2025-12-16 13:03:40 +03:00
317e576300 Merge branch 'work38' into DEV 2025-12-16 12:07:05 +03:00
4db649b478 refact 2025-12-16 12:06:39 +03:00
semenov
8a00f2e6bf docs: update board 2025-12-12 13:20:57 +03:00
18920cee6e Стабильная 2025-12-11 16:23:26 +03:00
d50d5a6af3 Новые иконки 2025-12-11 12:05:43 +03:00
421 changed files with 8036 additions and 7353 deletions

View File

@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.5) cmake_minimum_required(VERSION 3.5)
message("Using CMake ${CMAKE_VERSION}\n") message("Using CMake ${CMAKE_VERSION}\n")
project(MPS LANGUAGES CXX) project(MTD LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC ON)
@@ -21,7 +21,7 @@ endif()
include(cmake/CommonInfoForProject.cmake) include(cmake/CommonInfoForProject.cmake)
common_info_for_project(MPS) common_info_for_project(MTD)
find_package(Qt5 COMPONENTS Widgets REQUIRED) find_package(Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt5 COMPONENTS Network REQUIRED) find_package(Qt5 COMPONENTS Network REQUIRED)
@@ -33,11 +33,11 @@ find_package(Qt5 COMPONENTS Concurrent REQUIRED)
add_subdirectory(LibDataBaseInterface) add_subdirectory(LibDataBaseInterface)
add_subdirectory(LibInstructorsAndTrainees) add_subdirectory(LibInstructorsAndTrainees)
add_subdirectory(LibServer) add_subdirectory(LibServer)
add_subdirectory(ProgramAWSinstructorMPS) add_subdirectory(ProgramAWSinstructorMTD)
add_subdirectory(ProgramServerMPS) add_subdirectory(ProgramServerMTD)
add_dependencies(InstructorsAndTrainees DataBaseInterface) add_dependencies(InstructorsAndTrainees DataBaseInterface)
add_dependencies(Server DataBaseInterface) add_dependencies(Server DataBaseInterface)
add_dependencies(Server InstructorsAndTrainees) add_dependencies(Server InstructorsAndTrainees)
add_dependencies(ProgramAWSinstructorMPS InstructorsAndTrainees) add_dependencies(AWSinstructorMTD InstructorsAndTrainees)
add_dependencies(ProgramServerMPS Server) add_dependencies(ServerMTD Server)

View File

@@ -74,14 +74,8 @@ UnityClient
ServerLMS ^EJX4eIpX ServerLMS ^EJX4eIpX
Mainthread: Mainthread:
*serverLMS *ServerLMSWidget
*dataParser ^ite9vjus
*MultiThreadServer
*processingSystem
*commonClientHandler
*chatSystem
*processParser
*docsUpdater ^ite9vjus
ClientHandler: Thread ClientHandler: Thread
@@ -96,7 +90,7 @@ UpdateThread:
*updateController *updateController
*assetsManager *assetsManager
*docsUpdater *docsUpdater
*cfiController
^ZvWgIkFz ^ZvWgIkFz
Client QT ^sWMT4y6l Client QT ^sWMT4y6l
@@ -315,6 +309,15 @@ SEND DOCS ^iM67vAqM
потому что по умолчанию он больше не пересылается ^WR3pLokt потому что по умолчанию он больше не пересылается ^WR3pLokt
ServerThread:
*providerDBLMS
*dataParser
*MultiThreadServer
*processingSystem
*commonClientHandler
*chatSystem
*processParser ^UjfEZdiN
%% %%
## Drawing ## Drawing
```compressed-json ```compressed-json
@@ -464,438 +467,446 @@ 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
``` ```
%% %%

View File

@@ -12,12 +12,15 @@ kanban-plugin: board
## bugs ## bugs
- [ ] QT клиент, если сервер занят повторно не появляется окно авторизации - [ ] QT клиент: сделать отключение кнопки обновить при появлении inline Инициализация
- [ ] 16.27 от 22.12
- [ ] Unity: ошибка при проигрывании - нажать на среднюю кнопку мыши
## feature client Unity ## feature client Unity
- [ ] добавить пресеты для камер - [ ] Запросить картинки объектов для топливной системы
- [ ] Связать схемный и реальный манометр
## feature client QT ## feature client QT
@@ -26,6 +29,9 @@ kanban-plugin: board
## feature server ## feature server
- [ ] base делать неизменяемым по умолчанию
- [ ] добавить чекбокс на изменяемый или нет в во всех версиях кроме базовой
- [ ] Попробовать изменить версию base на "Базовая"
## NOW ## NOW
@@ -34,6 +40,18 @@ kanban-plugin: board
## Complete ## Complete
- [ ] QT клиент при восстановлении сразу показывают кнопку обновить, а должен вызывать слайдер загрузкии
- [ ] при переключении между позициями при режиме панели не сбрасывается fov
- [ ] кнопка 2Д/3Д появляется хаотично
- [ ] QT клиент, если сервер занят повторно не появляется окно авторизации
- [ ] QT клиент: После обновления переодически не работает запуск
- [ ] QT клиент: обновить реакции на сообщение о блокировки сервера и уже залогиненного пользователя
- [ ] Прописать реакцию на невалидный логин, и уже залогиненного пользователя
- [ ] FIM - не обновляется статус после выполнения
- [ ] AMM - статуса проверки нет, сразу выполнен
- [ ] Unity: переделать с deltatime на fixedDeltatime
- [ ] Unity: три камеры подряд не работают
- [ ] добавить пресеты для камер
- [ ] добавить переход на сценарий из PDF по типу списка окон - [ ] добавить переход на сценарий из PDF по типу списка окон
- [ ] Гидравлическая система, при нажатии на пожарку при работающей 3й гидросистеме и включенном PTU, PTU путь не закрашивается обратно - [ ] Гидравлическая система, при нажатии на пожарку при работающей 3й гидросистеме и включенном PTU, PTU путь не закрашивается обратно
- [ ] добавить сохранение предыдущей загруженнной версии - [ ] добавить сохранение предыдущей загруженнной версии

View File

@@ -8,10 +8,15 @@ kanban-plugin: board
- [ ] GUI: Сделать кнопку перезапроса общих списков FIM (по аналогии с АММ) - [ ] GUI: Сделать кнопку перезапроса общих списков FIM (по аналогии с АММ)
- [ ] /RUS/Scens/tasksFIM.xml возможно изменится структура - [ ] /RUS/Scens/tasksFIM.xml возможно изменится структура
- [ ] выгрузка назначенных задач с оценками в эксель таблицу или любой другой человекочитаемый вид
- [ ] Текстовый поиск в задачах
## Completed ## Completed
- [ ] Не влазиют слишком большие сообщения
- [ ] FIM процедура добавить кнопку сделать новой
- [ ] Не видно новых пришедших сообщений, если выбран другой Юзер
- [ ] При смене УЗ в ГУИ остается история переписки в мессенджере. При этом Имя инструктора в диалоге подменяется. (Путается только в ГУИ!) - [ ] При смене УЗ в ГУИ остается история переписки в мессенджере. При этом Имя инструктора в диалоге подменяется. (Путается только в ГУИ!)
[Возможно, поможет переинициализация мессенджера при переавторизации инструктора?] [Возможно, поможет переинициализация мессенджера при переавторизации инструктора?]
- [ ] Отображать текущую версию data в статус баре - [ ] Отображать текущую версию data в статус баре
@@ -55,6 +60,7 @@ kanban-plugin: board
- [ ] Учет ширины скрола на деревьях (появляется если дерево больше окна) - [ ] Учет ширины скрола на деревьях (появляется если дерево больше окна)
- [ ] Универсальный пересчет ширин колонок деревьев - [ ] Универсальный пересчет ширин колонок деревьев
- [ ] При обновлении деревьев слетает назначенная колонка сортировки - [ ] При обновлении деревьев слетает назначенная колонка сортировки
- [ ] В сообщение о неудачном подключении к PostgreSQL добавить: PSQL не установлен
## Server ## Server
@@ -67,13 +73,11 @@ kanban-plugin: board
## GUI Messenger ## GUI Messenger
- [ ] Не влазиют слишком большие сообщения
- [ ] Не видно новых пришедших сообщений, если выбран другой Юзер
## GUI общие ## GUI общие
- [ ] Текстовый поиск в задачах - [ ] Общий список АММ. автопролистывание вниз, если раскрывается дерево внизу

View File

@@ -11,3 +11,15 @@ RecognizeSystem - система распознавания типа пакет
ProcessingSystem - система активации процессов (создает результат после распознания действия) 1 штука на всех ProcessingSystem - система активации процессов (создает результат после распознания действия) 1 штука на всех
/*XmlSerializer serializer = new XmlSerializer(typeof(Task));
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, curTask);
string xmlString = writer.ToString();
string filePath = Path.Combine(Application.dataPath, "savedTask.xml");
File.WriteAllText(filePath, xmlString);
}*/

View File

@@ -9,19 +9,20 @@ QWidget {
font-family: Tahoma; font-family: Tahoma;
font-size: 12pt; font-size: 12pt;
icon-size: 24px; icon-size: 24px;
/*background-color: green;*/
} }
QWidget#widgetControl { QWidget#widgetControl {
/*border: 1px solid gray;*/
background: #E0E0E0; background: #E0E0E0;
} }
QWidget#viewerTrainees QWidget#viewerTrainees
{ {
padding-left: 20px; padding-left: 20px;
} }
QDialog {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #e6e7ea, stop: 1 #eaebee);
}
QLineEdit, QTextEdit, QComboBox { QLineEdit, QTextEdit, QComboBox {
border: 1px solid gray; border: 1px solid gray;
@@ -42,34 +43,43 @@ QGroupBox {
background: #E0E0E0; background: #E0E0E0;
border: 1px solid gray; border: 1px solid gray;
border-radius: 3px; border-radius: 3px;
margin-top: 5ex; /* leave space at the top for the title */ margin-top: 26px;
font-size: 13pt;
}
QGroupBox#groupBox_Report {
background: #FFFFFF;
} }
QGroupBox::title { QGroupBox::title {
border: 1px solid gray; border: 1px solid gray;
border-bottom: none; border-bottom: none;
border-radius: 4px; border-top-left-radius: 4px;
border-top-right-radius: 4px;
subcontrol-origin: margin; subcontrol-origin: margin;
subcontrol-position: top left; subcontrol-position: top left;
padding-left: 10px; padding-left: 10px;
padding-right: 10px; padding-right: 10px;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #A0CECE, stop: 1 #FFFFFF); stop: 0 #fafafa, stop: 0.1 #E0E0E0,
stop: 0.6 #E0E0E0, stop: 1.0 #fafafa);
color: black;
min-height: 25px;
} }
QPushButton, QToolButton { QPushButton, QToolButton {
border: 2px solid #8f8f91; border: 3px outset /*#2d5585*/gray;
border-style: outset; /*border: 3px solid #8f8f91;
border-style: outset;*/
border-radius: 5px; border-radius: 5px;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background-color: #5d85B5;
stop: 0 #f6f7fa, stop: 1 #dadbde);
min-width: 75px; min-width: 75px;
height: 55px; height: 55px;
padding: 1px; padding: 1px;
qproperty-iconSize: 32px; qproperty-iconSize: 32px;
color: white;
}
QToolButton::icon {
background-color: white;
} }
QPushButton { QPushButton {
@@ -81,15 +91,15 @@ QToolButton {
height: 55px; height: 55px;
} }
QToolButton#btnSend, QToolButton#btnDelete, QToolButton#btnCheck, QToolButton#btnOnlyActive, QToolButton#btnSend, QToolButton#btnDelete, QToolButton#btnCheck, QToolButton#btnOnlyActive, QToolButton#btnStatus,
QToolButton#btnSave, QToolButton#btnUpdateStyle, QToolButton#btnSetVersion, QToolButton#btnDocsUpdating,
QToolButton#btnAssignTask, QToolButton#btnCheckDB, QToolButton#btnRepare, QToolButton#btnDocsUpdating, QToolButton#btnAssignTask,
QToolButton#btnAssign { QToolButton#btnAssign {
width: 100px; width: 100px;
height: 55px; height: 55px;
} }
QToolButton#btnCheckDB, QToolButton#btnUpdateDocs { QToolButton#btnCheckDB, QToolButton#btnUpdateDocs, QToolButton#btnRepare, QToolButton#btnSave, QToolButton#btnUpdateStyle, QToolButton#btnSetVersion {
width: 100px; width: 150px;
height: 55px; height: 55px;
} }
@@ -99,36 +109,32 @@ QToolButton#btnViewPassword, QToolButton#btnChangePassword {
height: 18px; height: 18px;
} }
QPushButton#createDuplicateButton, QPushButton#deleteVersionButton, QPushButton#switchServerVersionButton {
width: 130px;
}
QPushButton:flat, QToolButton:flat { QPushButton:flat, QToolButton:flat {
border: none; /* no border for a flat push button */ border: none; /* no border for a flat push button */
} }
QPushButton:disabled, QToolButton:disabled {
/*background-color: #777777;*/
background-color: #bbbbbb;
/*border-color: gray;*/
}
QPushButton:default, QToolButton:default { QPushButton:default, QToolButton:default {
border-color: darkblue; /*make the default button prominent */ border-color: #2d5585;
} }
QPushButton:hover , QToolButton:hover { QPushButton:hover , QToolButton:hover {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background-color: #9dc5f5;
stop: 0 #fafafa, stop: 0.4 #f4f4f4,
stop: 0.5 #e7e7e7, stop: 1.0 #fafafa);
} }
QPushButton:pressed, QToolButton:pressed { QPushButton:pressed, QToolButton:pressed {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background-color: #8db5e5;
stop: 0 #dadbde, stop: 1 #f6f7fa);
border-style: inset; border-style: inset;
} }
QPushButton:checked, QToolButton:checked { QPushButton:checked, QToolButton:checked {
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background-color: #8db5e5;
stop: 0 #dadbde, stop: 1 #f6f7fa);
border-style: inset; border-style: inset;
} }
/*
QDialogButtonBox {
border: 2px solid #8f8f91;
border-style: outset;
border-radius: 5px;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #f6f7fa, stop: 1 #dadbde);
}
*/
QCheckBox { QCheckBox {
@@ -137,7 +143,6 @@ QCheckBox {
QCheckBox#checkAutoStart, QCheckBox#checkLocalhost { QCheckBox#checkAutoStart, QCheckBox#checkLocalhost {
spacing: 0px; spacing: 0px;
} }
QCheckBox::indicator:checked { QCheckBox::indicator:checked {
width: 24px; width: 24px;
height: 24px; height: 24px;
@@ -154,46 +159,47 @@ QTreeWidget {
font-size: 13pt; font-size: 13pt;
font-family: Tahoma; font-family: Tahoma;
icon-size: 32px; icon-size: 32px;
border-radius: 4px;
border: 2px solid white;
} }
QTreeWidget::item { QTreeWidget::item {
height: 34px; height: 34px;
} }
/*Бранчи*/ /*Бранчи*/
QTreeWidget::branch:has-siblings:!adjoins-item { QTreeWidget::branch:has-siblings:!adjoins-item {
border-image: url(:/resources/icons/vline.png) 0; /*border-image: url(:/resources/icons/vline.png) 0; */
} }
QTreeWidget::branch:has-siblings:adjoins-item { QTreeWidget::branch:has-siblings:adjoins-item {
border-image: url(:/resources/icons/branch-more.png) 0; /*border-image: url(:/resources/icons/branch-more.png) 0;*/
} }
QTreeWidget::branch:!has-children:!has-siblings:adjoins-item { QTreeWidget::branch:!has-children:!has-siblings:adjoins-item {
border-image: url(:/resources/icons/branch-end.png) 0; /*border-image: url(:/resources/icons/branch-end.png) 0;*/
} }
QTreeWidget::branch:closed:has-children:!has-siblings, QTreeWidget::branch:closed:has-children:!has-siblings,
QTreeWidget::branch:closed:has-children:has-siblings { QTreeWidget::branch:closed:has-children:has-siblings {
border-image: none; /*border-image: none;*/
image: url(:/resources/icons/branch-closed.png); image: url(:/resources/icons/branch-closed.png);
} }
QTreeWidget::branch:open:has-children:!has-siblings, QTreeWidget::branch:open:has-children:!has-siblings,
QTreeWidget::branch:open:has-children:has-siblings { QTreeWidget::branch:open:has-children:has-siblings {
border-image: none; /*border-image: none;*/
image: url(:/resources/icons/branch-open.png); image: url(:/resources/icons/branch-open.png);
} }
QTreeWidget::item:hover, QTreeWidget::item:hover,
QTreeWidget::branch:hover { QTreeWidget::branch:hover {
background: #aee1ff; background: #EEEEEE;
background: #C0EEEE; /*border: 1px solid #6c6c6c;*/
/*border-radius: 3px;*/
} }
QTreeWidget::item:selected { QTreeWidget::item:selected {
/*background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);*/ background: #9dc5f5;
background: #6ea1f1;
background: #A0CECE;
color: #000000; color: #000000;
} }
QTreeWidget::indicator:checked { QTreeWidget::indicator:checked {
width: 24px; width: 24px;
height: 24px; height: 24px;
@@ -207,33 +213,23 @@ QTreeWidget::indicator:!checked {
QHeaderView::section { QHeaderView::section {
/*
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 #c1c1c1, stop: 0.5 #505050,
stop: 0.6 #434343, stop:1 #656565);*/
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #A0CECE, stop: 1 #FFFFFF); stop: 0 #2d5585, stop: 1 #9dc5f5);
color: black; color: white;
padding-left: 4px; padding-left: 4px;
border: 1px solid #6c6c6c; border: 1px solid #6c6c6c;
border-radius: 2px;
font-size: 13pt; font-size: 13pt;
} }
QTabWidget::pane { /* The tab widget frame */ QTabWidget::pane { /* The tab widget frame */
border-top: 1px solid #C2C7CB; border-top: 1px solid #C2C7CB;
/*background-image: url(:/resources/icons/messengerPrint.png);*/ border: 1px solid #C2C7CB;
} }
QTabWidget::pane#tabWidgetTasks { /* The tab widget frame */ QTabWidget::pane#tabWidgetTasks { /* The tab widget frame */
border-top: 1px solid #C2C7CB; border-top: 1px solid #C2C7CB;
/*background-image: url(:/resources/icons/messengerPrint.png);*/ border: 1px solid #C2C7CB;
/*
padding-left: -18px;
padding-right: -18px;
padding-top: -8px;
padding-bottom: -8px;
*/
} }
QTabWidget::tab-bar { QTabWidget::tab-bar {
left: 0px; /* move to the right by 0px */ left: 0px; /* move to the right by 0px */
@@ -243,41 +239,37 @@ QTabBar::tab {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,
stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3); stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);
border: 2px solid #C4C4C3; border: 2px solid #C4C4C3;
border-bottom-color: #C2C7CB; /* same as the pane color */ border-bottom-color: #C2C7CB; /* same as the pane color */
border-top-left-radius: 4px; border-top-left-radius: 4px;
border-top-right-radius: 4px; border-top-right-radius: 4px;
min-width: 40ex; min-width: 40ex;
padding: 2px; padding: 2px;
font-size: 12pt;
font-size: 12pt;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #A0CECE, stop: 1 #FFFFFF); stop: 0 #A0CECE, stop: 1 #FFFFFF);
background-color: #5d85B5;
color: black;
height: 20px;
}
QTabBar::tab:selected {
border-style: outset;
background: #8db5e5;
} }
/*
QTabBar::tab:selected {
border-color: #9B9B9B;
border-bottom-color: #C2C7CB;
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);
color: #ffffff;
}
*/
QTabBar::tab:selected {
/*background: #ffffff;*/
}
QTabBar::tab:!selected { QTabBar::tab:!selected {
margin-top: 10px; /* make non-selected tabs look smaller */ border-style: inset;
/*background: #ffffff;*/ background: #bbbbbb;
} }
QTabBar::tab:hover { QTabBar::tab:hover {
background: #aee1ff; background: #aee1ff;
background: #C0EEEE; background: #EEEEEE;
background-color: #9dc5f5;
background: #8db5e5;
} }
QTabBar::scroller { /* the width of the scroll buttons */ QTabBar::scroller { /* the width of the scroll buttons */
@@ -291,70 +283,79 @@ QTabBar QToolButton { /* the scroll buttons are tool buttons */
} }
QListWidget::item { QListWidget::item {
/*padding: -5px;*/
} }
QListWidget#oneDialogMessenger { QListWidget#oneDialogMessenger {
/*background: #ddeeff;*/ background-color: white;
border: 1px solid gray;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, border-radius: 2px;
stop: 0 #A0CECE, stop: 1 #FFFFFF);
} }
QListWidget::item:selected {
color: #000000;
}
QListWidget#oneDialogMessenger::item:selected {
color: #000000;
background: #ffffff;
}
QListWidget::item:hover {
background: #EEEEEE;
}
QListWidget#oneDialogMessenger::item:hover {
background: #ffffff;
}
QListWidget#subProcItemListWidget::item:hover { QListWidget#subProcItemListWidget::item:hover {
background: #ffffff; background: #ffffff;
} }
QListWidget {
selection-background-color: #9dc5f5;; /* Цвет выделенного элемента */
selection-color: black; /* Цвет текста выделенного элемента */
show-decoration-selected: false; /* Показывать выделение на выбранном элементе */
outline: none; /* Без выделения фокуса */
}
QTextEdit { QTextEdit {
padding: -20px; padding: -20px;
font-size: 12pt; font-size: 12pt;
} }
QTextEdit#editMsg { QTextEdit#editMsg {
height: 65px; /**/ height: 65px;
background: #ddeeff;
background: #ffffff; background: #ffffff;
} }
QTextEdit#MsgWidgetEditTextLocal { QTextEdit#MsgWidgetEditTextLocal {
/*background: tlightgreen;*/ background: #EEEEEE;
background: #ddffdd;
border-radius: 8px; border-radius: 8px;
} }
QTextEdit#MsgWidgetEditTextRemote { QTextEdit#MsgWidgetEditTextRemote {
/*background: lightblue;*/ background: #9dc5f5;
/*background: #ddeeff;*/
background: #ffffff;
border-radius: 8px; border-radius: 8px;
} }
QLabel#MsgWidgetLblTimeLocal { QLabel#MsgWidgetLblTimeLocal {
font-size: 9pt; font-size: 9pt;
/*background: yellow;*/
} }
QLabel#MsgWidgetLblTimeRemote { QLabel#MsgWidgetLblTimeRemote {
font-size: 9pt; font-size: 9pt;
/*background: yellow;*/
} }
QLabel#MsgWidgetLblNameLocal { QLabel#MsgWidgetLblNameLocal {
font-size: 9pt; font-size: 9pt;
/*background: yellow;*/
} }
QLabel#MsgWidgetLblNameRemote { QLabel#MsgWidgetLblNameRemote {
font-size: 9pt; font-size: 9pt;
/*background: yellow;*/
} }
QLabel#MsgWidgetLblAvatar { QLabel#MsgWidgetLblAvatar {
/*background: pink;*/
}
}
QLabel#MessangerWidgetLblUser { QLabel#MessangerWidgetLblUser {
background: #ddeeff; background: #ddeeff;
padding-left: 4px; padding-left: 4px;
border-radius: 8px; border-radius: 4px;
background: #9dc5f5;
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #A0CECE, stop: 1 #FFFFFF);
} }
QLabel#MessangerWidgetLblAvatar { QLabel#MessangerWidgetLblAvatar {
@@ -363,22 +364,80 @@ QLabel#MessangerWidgetLblLoggedIn {
} }
QLabel#PersonalCard_lblName { QLabel#PersonalCard_lblName {
font-size: 16pt; font-size: 16pt;
color: #2d5585;
} }
QLabel#ReportFimWidget_label_MMEL, QLabel#ActionWidget_lbl_Type {
color: gray;
border-radius: 4px;
min-width: 50px;
min-height: 25px;
background: #ffffff;
border: 1px solid gray;
}
QLabel#ActionWidget_lbl_Status {
color: black;
border-radius: 18px;
min-width: 150px;
min-height: 40px;
background: #d0d0d0;
border: 1px solid gray;
}
QLabel#DeviceWidget_lbl_Status {
color: black;
border-radius: 18px;
min-width: 250px;
min-height: 40px;
background: #f0f0f0;
border: 1px solid gray;
}
QWidget#widgetControl { QLabel#DeviceWidget_lbl_ObjName {
background: #E0E0E0; color: black;
}
QLabel#DeviceWidget_lbl_Code {
color: gray;
}
QLabel#lblStatAMM, QLabel#lblStatFIM {
padding-top: 1px;
}
QPlainTextEdit#ActionWidget_plainTextEdit_Procedure{
border-radius: 5px;
border: 1px solid gray;
background: #F0F0F2;
}
QPlainTextEdit#ActionWidget_plainTextEdit_Comment{
border-radius: 5px;
border: 1px solid gray;
background: #FEFEFE;
} }
QPlainTextEdit#plainText{ /*Репорт*/ QPlainTextEdit#plainText{ /*Репорт*/
margin-left: 50pt; margin-left: 50pt;
margin-right: 100pt; margin-right: 100pt;
} }
/**/
QComboBox { QComboBox::drop-down {
/*background: #ffffff; subcontrol-position: right center; /*Выравнивание стрелки по центру */
border-radius: 5px;*/ width: 20px; /* Ширина области со стрелкой */
border: none;
border-left: 1px solid gray;
background: #E0E0E0;
}
QComboBox::down-arrow {
image: url(:/resources/icons/branch-open.png); /* Подставляем свою картинку стрелки */
width: 16px; /* Размер иконки */
height: 16px;
}
QComboBox QAbstractItemView {
selection-background-color: #9dc5f5;; /* Цвет выделенного элемента */
selection-color: black; /* Цвет текста выделенного элемента */
alternate-background-color: lightgrey; /* Чередующиеся строки */
show-decoration-selected: true; /* Показывать выделение на выбранном элементе */
outline: none; /* Без выделения фокуса */
} }

Binary file not shown.

View File

@@ -0,0 +1,4 @@
set CURRENT_DIR=%~dp0
cd %CURRENT_DIR%
set "PGPASSWORD=12345678"
pg_restore -U postgres -h localhost -p 5432 -d rrjdatabase .\restoreDB\DBLMS_EMPTY.backup

BIN
FILES/ICONS/planeCustom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ServerSettingsContainer> <ServerSettingsContainer>
<ServerSettings Address="192.168.100.82" Port="6000" Language="RUS" AutoStart="0"/> <ServerSettings Address="127.0.0.1" Port="6000" Language="RUS"/>
</ServerSettingsContainer> </ServerSettingsContainer>

Binary file not shown.

View File

@@ -5,7 +5,8 @@ common_info_for_project(DataBaseInterface)
add_library(DataBaseInterface SHARED add_library(DataBaseInterface SHARED
DataBaseLMS_global.h DataBaseLMS_global.h
databaselms.cpp databaselms.cpp
databaselms_tasks.cpp databaselms_tasks_amm.cpp
databaselms_tasks_fim.cpp
databaselms_groups.cpp databaselms_groups.cpp
databaselms_users.cpp databaselms_users.cpp
databaselms_instructors.cpp databaselms_instructors.cpp
@@ -51,26 +52,26 @@ if(PROJECT_TYPE_DEBUG)
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/LibDataBaseInterface/libDataBaseInterface.dll ${REPO_PATH}/BUILDS/Debug64/LibDataBaseInterface/libDataBaseInterface.dll
${REPO_PATH}/BUILDS/Debug64/ProgramServerMPS) ${REPO_PATH}/BUILDS/Debug64/ProgramServerMTD)
add_custom_command(TARGET DataBaseInterface add_custom_command(TARGET DataBaseInterface
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/LibDataBaseInterface/libDataBaseInterface.dll ${REPO_PATH}/BUILDS/Debug64/LibDataBaseInterface/libDataBaseInterface.dll
${REPO_PATH}/BUILDS/Debug64/ProgramAWSinstructorMPS) ${REPO_PATH}/BUILDS/Debug64/ProgramAWSinstructorMTD)
else() else()
add_custom_command(TARGET DataBaseInterface add_custom_command(TARGET DataBaseInterface
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/LibDataBaseInterface/libDataBaseInterface.dll ${REPO_PATH}/BUILDS/Release64/LibDataBaseInterface/libDataBaseInterface.dll
${REPO_PATH}/BUILDS/Release64/ProgramServerMPS) ${REPO_PATH}/BUILDS/Release64/ProgramServerMTD)
add_custom_command(TARGET DataBaseInterface add_custom_command(TARGET DataBaseInterface
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/LibDataBaseInterface/libDataBaseInterface.dll ${REPO_PATH}/BUILDS/Release64/LibDataBaseInterface/libDataBaseInterface.dll
${REPO_PATH}/BUILDS/Release64/ProgramAWSinstructorMPS) ${REPO_PATH}/BUILDS/Release64/ProgramAWSinstructorMTD)
endif() endif()

View File

@@ -1,347 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2024-12-28T11:57:36. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{00ce76f6-77cf-4587-a216-9a8e243377cb}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/BUILDS/LMS/DB_LMS/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/LMS/DB_LMS/Release64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/LMS/DB/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/LMS/DB/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,390 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2025-01-10T12:59:06. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{15ef2478-2444-4b00-88b8-fead51c6fef5}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">4</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_LMS/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_LMS/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_LMS/build-DataBaseLMS-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/BUILDS/DB_LMS/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.4">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/BUILDS/DB_LMS/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">5</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -9,12 +9,12 @@
const QString DataBaseLMS::TypeUserDBInstructor = "instructor"; const QString DataBaseLMS::TypeUserDBInstructor = "instructor";
const QString DataBaseLMS::TypeUserDBTrainee = "trainee"; const QString DataBaseLMS::TypeUserDBTrainee = "trainee";
DataBaseLMS::DataBaseLMS(QWidget *ownerWidget, QObject *parent): QString DataBaseLMS::UserNamePostgres = "";
QString DataBaseLMS::PasswordPostgres = "";
DataBaseLMS::DataBaseLMS(QObject *parent):
QObject(parent), QObject(parent),
db(nullptr), db(nullptr)
UserNamePostgres(""),
PasswordPostgres(""),
ownerWidget(ownerWidget)
{ {
} }
@@ -24,12 +24,6 @@ DataBaseLMS::~DataBaseLMS()
deleteConnection(); deleteConnection();
} }
void DataBaseLMS::slot_LanguageChanged(QString language)
{
qtLanguageTranslator.load(QString(QStringLiteral("translations/DataBaseLMS_")) + language, QStringLiteral("."));
QCoreApplication::installTranslator(&qtLanguageTranslator);
}
bool DataBaseLMS::createConnection() bool DataBaseLMS::createConnection()
{ {
dbSettings = getDataBaseSettings(); dbSettings = getDataBaseSettings();

View File

@@ -4,7 +4,6 @@
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QMutex> #include <QMutex>
#include <QWidget> #include <QWidget>
#include <QTranslator>
#include "instructor.h" #include "instructor.h"
#include "trainee.h" #include "trainee.h"
@@ -12,8 +11,8 @@
#include "tasksAmmFim.h" #include "tasksAmmFim.h"
#include "timingoftrainee.h" #include "timingoftrainee.h"
static const QString backupEmptyName = ".\\restoreDB\\DBLMS_EMPTY.backup"; static const QString backupEmptyName = ".\\DBLMS_EMPTY.backup";
static const QString restoreDBscriptName = "restoreDBscript.bat"; static const QString restoreDBscriptName = ".\\restoreDB\\restoreDBscript.bat";
class DATABASELMS_EXPORT DataBaseSettings class DATABASELMS_EXPORT DataBaseSettings
{ {
@@ -32,23 +31,23 @@ class DATABASELMS_EXPORT DataBaseLMS : public QObject
Q_OBJECT Q_OBJECT
public: public:
DataBaseLMS(QWidget *ownerWidget, QObject *parent = nullptr); DataBaseLMS(QObject *parent = nullptr);
~DataBaseLMS(); ~DataBaseLMS();
public Q_SLOTS:
void slot_LanguageChanged(QString language);
signals: signals:
void signal_ErrorPostgreSQL(QString text); void signal_ErrorPostgreSQL(QString text);
public: public:
static const QString TypeUserDBInstructor; static const QString TypeUserDBInstructor;
static const QString TypeUserDBTrainee; static const QString TypeUserDBTrainee;
protected:
static QString UserNamePostgres;
static QString PasswordPostgres;
public: public:
//PostgreSQL //PostgreSQL
bool setUserPasswordPostgres(QString userName, QString password); static bool checkDriverQPSQLavailable();
bool checkDriverQPSQLavailable(); static bool setUserPasswordPostgres(QString userName, QString password);
bool checkUserLMSexist(); bool checkUserLMSexist();
bool checkDataBaseLMSexist(); bool checkDataBaseLMSexist();
bool createUser(); bool createUser();
@@ -122,7 +121,7 @@ protected:
int updateReportFIMforTask(TaskAmmFim task); int updateReportFIMforTask(TaskAmmFim task);
public: public:
DataBaseSettings getDataBaseSettings(); static DataBaseSettings getDataBaseSettings();
private: private:
int queryExecInt(QString queryStr); int queryExecInt(QString queryStr);
QString queryExecString(QString queryStr); QString queryExecString(QString queryStr);
@@ -133,14 +132,6 @@ private:
protected: protected:
QSqlDatabase* db; QSqlDatabase* db;
DataBaseSettings dbSettings; DataBaseSettings dbSettings;
QString UserNamePostgres;
QString PasswordPostgres;
QTranslator qtLanguageTranslator;
private:
QWidget* ownerWidget;
}; };
#endif // DATABASELMS_H #endif // DATABASELMS_H

View File

@@ -0,0 +1,314 @@
#include "databaselms.h"
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlDriver>
int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee)
{
QString queryStr;
bool resBool = false;
resBool = db->transaction();
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, fk_trainee_id) "
"VALUES ('%1', '%2', %3) "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
QString::number(id_trainee));
int task_id = queryExecInt(queryStr);
if(!task_id)
{
resBool = db->rollback();
return 0;
}
for(SubProc subProc : task.listSubProc)
{
subProc.setTitle(subProc.getTitle().replace("'", "''")); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.subprocs (dm_code, title, canplay, fk_task_amm_id) "
"VALUES ('%1', '%2', '%3', %4) "
"RETURNING subprocs.subproc_id").arg(
subProc.getDmCode(),
subProc.getTitle(),
subProc.getModeListStr(),
QString::number(task_id));
int subproc_id = queryExecInt(queryStr);
if(!subproc_id)
{
resBool = db->rollback();
return 0;
}
}
resBool = db->commit();
return task_id;
}
int DataBaseLMS::updateTaskAMM(TaskAmmFim task)
{
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' "
"WHERE task_id = %4 "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
task.status,
QString::number(task.getID()) );
return queryExecInt(queryStr);
}
int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(task_id));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("UPDATE public.tasks_amm SET status = '%1' "
"WHERE task_id = %2 "
"RETURNING tasks_amm.task_id").arg(
status,
QString::number(task_id) );
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
int DataBaseLMS::deleteTaskAMM(int id_task)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(id_task));
QSqlQuery queryUserSEL = QSqlQuery(*db);
if(queryExec(queryStr, &queryUserSEL))
{
if (queryUserSEL.first())
{//Обучаемый
id_trainee = queryUserSEL.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.subprocs "
"WHERE fk_task_amm_id = %1 ").arg(
QString::number(id_task));
QSqlQuery querySubProcDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &querySubProcDEL))
{
resBool = db->rollback();
return 0;
}
//--------------------
queryStr = QString("DELETE FROM public.tasks_amm "
"WHERE task_id = %1 "
"RETURNING tasks_amm.task_id").arg(
QString::number(id_task));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
QList<TaskAmmFim> DataBaseLMS::selectTasksAMMofTrainee(int id_trainee)
{
QList<TaskAmmFim> listTasks;
QString queryStr;
bool resBool = false;
resBool = db->transaction();
queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, "
"users.user_id "
"FROM public.tasks_amm JOIN public.users ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.fk_trainee_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_trainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Задача
TaskAmmFim task;
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
//Выгребаем все subproc для этой задачи
queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, "
"tasks_amm.task_id "
"FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id "
"WHERE subprocs.fk_task_amm_id = %1 "
"ORDER BY subprocs.subproc_id ASC").arg(
task.getID());
QSqlQuery querySubProc = QSqlQuery(*db);
if(queryExec(queryStr, &querySubProc))
{
while (querySubProc.next())
{//Подпроцедура
SubProc subProc;
int subproc_id = 0;
subproc_id = querySubProc.value(0).toString().toInt();
subProc.setDmCode(querySubProc.value(1).toString());
subProc.setTitle(querySubProc.value(2).toString());
subProc.setModeListStr(querySubProc.value(3).toString());
task.listSubProc.append(subProc);
};
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
listTasks.append(task);
}
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
resBool = db->commit();
return listTasks;
}
TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task)
{
TaskAmmFim task;
QString queryStr;
bool resBool = false;
resBool = db->transaction();
queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status "
"FROM public.tasks_amm "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_task);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Задача
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
//Выгребаем все subproc для этой задачи
queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, "
"tasks_amm.task_id "
"FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id "
"WHERE subprocs.fk_task_amm_id = %1 "
"ORDER BY subprocs.subproc_id ASC").arg(
task.getID());
QSqlQuery querySubProc = QSqlQuery(*db);
if(queryExec(queryStr, &querySubProc))
{
while (querySubProc.next())
{//Подпроцедура
SubProc subProc;
int subproc_id = 0;
subproc_id = querySubProc.value(0).toString().toInt();
subProc.setDmCode(querySubProc.value(1).toString());
subProc.setTitle(querySubProc.value(2).toString());
subProc.setModeListStr(querySubProc.value(3).toString());
task.listSubProc.append(subProc);
};
}
else
{
resBool = db->rollback();
return TaskAmmFim();
}
}
}
else
{
resBool = db->rollback();
return TaskAmmFim();
}
resBool = db->commit();
return task;
}

View File

@@ -4,316 +4,6 @@
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlDriver> #include <QSqlDriver>
int DataBaseLMS::insertTaskAMM(TaskAmmFim task, int id_trainee)
{
QString queryStr;
bool resBool = false;
resBool = db->transaction();
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.tasks_amm (title, dm_code, fk_trainee_id) "
"VALUES ('%1', '%2', %3) "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
QString::number(id_trainee));
int task_id = queryExecInt(queryStr);
if(!task_id)
{
resBool = db->rollback();
return 0;
}
for(SubProc subProc : task.listSubProc)
{
subProc.setTitle(subProc.getTitle().replace("'", "''")); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.subprocs (dm_code, title, canplay, fk_task_amm_id) "
"VALUES ('%1', '%2', '%3', %4) "
"RETURNING subprocs.subproc_id").arg(
subProc.getDmCode(),
subProc.getTitle(),
subProc.getModeListStr(),
QString::number(task_id));
int subproc_id = queryExecInt(queryStr);
if(!subproc_id)
{
resBool = db->rollback();
return 0;
}
}
resBool = db->commit();
return task_id;
}
int DataBaseLMS::updateTaskAMM(TaskAmmFim task)
{
task.ammProcedure.title = task.ammProcedure.title.replace("'", "''"); //Задваиваем одинарные кавычки
QString queryStr = QString("UPDATE public.tasks_amm SET title = '%1', dm_code = '%2', status = '%3' "
"WHERE task_id = %4 "
"RETURNING tasks_amm.task_id").arg(
task.ammProcedure.title,
task.ammProcedure.dmCode,
task.status,
QString::number(task.getID()) );
return queryExecInt(queryStr);
}
int DataBaseLMS::updateStatusTaskAMM(int task_id, QString status)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(task_id));
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Обучаемый
id_trainee = query.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("UPDATE public.tasks_amm SET status = '%1' "
"WHERE task_id = %2 "
"RETURNING tasks_amm.task_id").arg(
status,
QString::number(task_id) );
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
int DataBaseLMS::deleteTaskAMM(int id_task)
{
QString queryStr;
bool resBool = false;
int id_trainee = 0;
resBool = db->transaction();
queryStr = QString("SELECT users.user_id "
"FROM public.users JOIN public.tasks_amm ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY users.user_id ASC").arg(
QString::number(id_task));
QSqlQuery queryUserSEL = QSqlQuery(*db);
if(queryExec(queryStr, &queryUserSEL))
{
if (queryUserSEL.first())
{//Обучаемый
id_trainee = queryUserSEL.value(0).toInt();
}
}
if(!id_trainee)
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.subprocs "
"WHERE fk_task_amm_id = %1 ").arg(
QString::number(id_task));
QSqlQuery querySubProcDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &querySubProcDEL))
{
resBool = db->rollback();
return 0;
}
//--------------------
queryStr = QString("DELETE FROM public.tasks_amm "
"WHERE task_id = %1 "
"RETURNING tasks_amm.task_id").arg(
QString::number(id_task));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
resBool = db->commit();
return id_trainee;
}
QList<TaskAmmFim> DataBaseLMS::selectTasksAMMofTrainee(int id_trainee)
{
QList<TaskAmmFim> listTasks;
QString queryStr;
bool resBool = false;
resBool = db->transaction();
queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status, "
"users.user_id "
"FROM public.tasks_amm JOIN public.users ON users.user_id = tasks_amm.fk_trainee_id "
"WHERE tasks_amm.fk_trainee_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_trainee);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
while (query.next())
{//Задача
TaskAmmFim task;
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
//Выгребаем все subproc для этой задачи
queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, "
"tasks_amm.task_id "
"FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id "
"WHERE subprocs.fk_task_amm_id = %1 "
"ORDER BY subprocs.subproc_id ASC").arg(
task.getID());
QSqlQuery querySubProc = QSqlQuery(*db);
if(queryExec(queryStr, &querySubProc))
{
while (querySubProc.next())
{//Подпроцедура
SubProc subProc;
int subproc_id = 0;
subproc_id = querySubProc.value(0).toString().toInt();
subProc.setDmCode(querySubProc.value(1).toString());
subProc.setTitle(querySubProc.value(2).toString());
subProc.setModeListStr(querySubProc.value(3).toString());
task.listSubProc.append(subProc);
};
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
listTasks.append(task);
}
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
resBool = db->commit();
return listTasks;
}
TaskAmmFim DataBaseLMS::selectTaskAMMbyID(int id_task)
{
TaskAmmFim task;
QString queryStr;
bool resBool = false;
resBool = db->transaction();
queryStr = QString("SELECT tasks_amm.task_id, tasks_amm.title, tasks_amm.dm_code, tasks_amm.status "
"FROM public.tasks_amm "
"WHERE tasks_amm.task_id = %1 "
"ORDER BY tasks_amm.task_id ASC").arg(
id_task);
QSqlQuery query = QSqlQuery(*db);
if(queryExec(queryStr, &query))
{
if (query.first())
{//Задача
task.setID(query.value(0).toInt());
task.ammProcedure.title = query.value(1).toString();
task.ammProcedure.dmCode = query.value(2).toString();
task.status = query.value(3).toString();
//Выгребаем все subproc для этой задачи
queryStr = QString("SELECT subprocs.subproc_id, subprocs.dm_code, subprocs.title, subprocs.canplay, "
"tasks_amm.task_id "
"FROM public.subprocs JOIN public.tasks_amm ON tasks_amm.task_id = subprocs.fk_task_amm_id "
"WHERE subprocs.fk_task_amm_id = %1 "
"ORDER BY subprocs.subproc_id ASC").arg(
task.getID());
QSqlQuery querySubProc = QSqlQuery(*db);
if(queryExec(queryStr, &querySubProc))
{
while (querySubProc.next())
{//Подпроцедура
SubProc subProc;
int subproc_id = 0;
subproc_id = querySubProc.value(0).toString().toInt();
subProc.setDmCode(querySubProc.value(1).toString());
subProc.setTitle(querySubProc.value(2).toString());
subProc.setModeListStr(querySubProc.value(3).toString());
task.listSubProc.append(subProc);
};
}
else
{
resBool = db->rollback();
return TaskAmmFim();
}
}
}
else
{
resBool = db->rollback();
return TaskAmmFim();
}
resBool = db->commit();
return task;
}
int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee) int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee)
{ {
QString queryStr; QString queryStr;
@@ -340,12 +30,14 @@ int DataBaseLMS::insertTaskFIM(TaskAmmFim task, int id_trainee)
{ {
malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки malfanction.description = malfanction.description.replace("'", "''"); //Задваиваем одинарные кавычки
queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, fk_task_fim_id) " queryStr = QString("INSERT INTO public.malfunctions (num, dm_code, description, go_name, obj_name, fk_task_fim_id) "
"VALUES ('%1', '%2', '%3', %4) " "VALUES ('%1', '%2', '%3', '%4', '%5', %6) "
"RETURNING malfunctions.malfunction_id").arg( "RETURNING malfunctions.malfunction_id").arg(
malfanction.num, malfanction.num,
malfanction.dmCode, malfanction.dmCode,
malfanction.description, malfanction.description,
malfanction.goName,
malfanction.objName,
QString::number(task_id)); QString::number(task_id));
int malfunction_id = queryExecInt(queryStr); int malfunction_id = queryExecInt(queryStr);
@@ -435,6 +127,65 @@ int DataBaseLMS::updateStatusTaskFIM(int task_id, QString status)
return 0; return 0;
} }
if(status == "new")
{//Удаляем отчет
queryStr = QString("SELECT reports.report_id "
"FROM public.reports "
"WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg(
QString::number(task_id));
int report_id = 0;
QSqlQuery queryReportsSEL = QSqlQuery(*db);
if(queryExec(queryStr, &queryReportsSEL))
{
if (queryReportsSEL.first())
{//Отчет
report_id = queryReportsSEL.value(0).toInt();
}
}
else
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.report_items "
"WHERE fk_report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryItemsDEL))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.report_wh_items "
"WHERE fk_report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryWhItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryWhItemsDEL))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.reports "
"WHERE report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryReportsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryReportsDEL))
{
resBool = db->rollback();
return 0;
}
}
resBool = db->commit(); resBool = db->commit();
return id_trainee; return id_trainee;
} }
@@ -553,6 +304,17 @@ int DataBaseLMS::deleteTaskFIM(int id_task)
return 0; return 0;
} }
queryStr = QString("DELETE FROM public.report_wh_items "
"WHERE fk_report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryWhItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryWhItemsDEL))
{
resBool = db->rollback();
return 0;
}
queryStr = QString("DELETE FROM public.reports " queryStr = QString("DELETE FROM public.reports "
"WHERE report_id = %1 ").arg( "WHERE report_id = %1 ").arg(
QString::number(report_id)); QString::number(report_id));
@@ -609,7 +371,7 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
task.status = query.value(2).toString(); task.status = query.value(2).toString();
//Выгребаем все malfunction для этой задачи //Выгребаем все malfunction для этой задачи
queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, malfunctions.go_name, malfunctions.obj_name, "
"tasks_fim.task_id " "tasks_fim.task_id "
"FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id "
"WHERE malfunctions.fk_task_fim_id = %1 " "WHERE malfunctions.fk_task_fim_id = %1 "
@@ -629,6 +391,8 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
malfanction.num = queryMalf.value(1).toString(); malfanction.num = queryMalf.value(1).toString();
malfanction.dmCode = queryMalf.value(2).toString(); malfanction.dmCode = queryMalf.value(2).toString();
malfanction.description = queryMalf.value(3).toString(); malfanction.description = queryMalf.value(3).toString();
malfanction.goName = queryMalf.value(4).toString();
malfanction.objName = queryMalf.value(5).toString();
//Выгребаем сигналы для этой неисправности //Выгребаем сигналы для этой неисправности
queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description " queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description "
@@ -667,7 +431,7 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
//Выгребаем отчет для этой задачи //Выгребаем отчет для этой задачи
int report_id = 0; int report_id = 0;
queryStr = QString("SELECT reports.report_id " queryStr = QString("SELECT reports.report_id, reports.mmel "
"FROM public.reports " "FROM public.reports "
"WHERE fk_task_fim_id = %1 " "WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg( "ORDER BY reports.report_id ASC").arg(
@@ -681,6 +445,7 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
{//Отчет {//Отчет
report_id = queryReport.value(0).toInt(); report_id = queryReport.value(0).toInt();
task.report.id = report_id; task.report.id = report_id;
task.report.mmel = queryReport.value(1).toBool();
} }
} }
else else
@@ -723,6 +488,36 @@ QList<TaskAmmFim> DataBaseLMS::selectTasksFIMofTrainee(int id_trainee)
resBool = db->rollback(); resBool = db->rollback();
return QList<TaskAmmFim>(); return QList<TaskAmmFim>();
} }
//Выгребаем все wh_item отчета
queryStr = QString("SELECT report_wh_items.wh_item_id, report_wh_items.status, report_wh_items.go_name, report_wh_items.obj_name, report_wh_items.code, report_wh_items.fk_report_id, report_wh_items.number "
"FROM public.report_wh_items "
"WHERE fk_report_id = %1 "
"ORDER BY report_wh_items.number ASC").arg(
QString::number(report_id));
QSqlQuery queryWhItems = QSqlQuery(*db);
if(queryExec(queryStr, &queryWhItems))
{
while (queryWhItems.next())
{//report_wh_item
FIMReportWarehouseItem reportWhItem;
reportWhItem.id = queryWhItems.value(0).toInt();
reportWhItem.status = queryWhItems.value(1).toInt();
reportWhItem.goName = queryWhItems.value(2).toString();
reportWhItem.objName = queryWhItems.value(3).toString();
reportWhItem.code = queryWhItems.value(4).toString();
task.report.warehouseItemList.append(reportWhItem);
}
}
else
{
resBool = db->rollback();
return QList<TaskAmmFim>();
}
} }
listTasks.append(task); listTasks.append(task);
@@ -765,7 +560,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
task.status = query.value(2).toString(); task.status = query.value(2).toString();
//Выгребаем все malfunction для этой задачи //Выгребаем все malfunction для этой задачи
queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, " queryStr = QString("SELECT malfunctions.malfunction_id, malfunctions.num, malfunctions.dm_code, malfunctions.description, malfunctions.go_name, malfunctions.obj_name, "
"tasks_fim.task_id " "tasks_fim.task_id "
"FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id " "FROM public.malfunctions JOIN public.tasks_fim ON tasks_fim.task_id = malfunctions.fk_task_fim_id "
"WHERE malfunctions.fk_task_fim_id = %1 " "WHERE malfunctions.fk_task_fim_id = %1 "
@@ -785,6 +580,8 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
malfanction.num = queryMalf.value(1).toString(); malfanction.num = queryMalf.value(1).toString();
malfanction.dmCode = queryMalf.value(2).toString(); malfanction.dmCode = queryMalf.value(2).toString();
malfanction.description = queryMalf.value(3).toString(); malfanction.description = queryMalf.value(3).toString();
malfanction.goName = queryMalf.value(4).toString();
malfanction.objName = queryMalf.value(5).toString();
//Выгребаем сигналы для этой неисправности //Выгребаем сигналы для этой неисправности
queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description " queryStr = QString("SELECT malf_signs.sign_id, malf_signs.type, malf_signs.description "
@@ -823,7 +620,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
//Выгребаем отчет для этой задачи //Выгребаем отчет для этой задачи
int report_id = 0; int report_id = 0;
queryStr = QString("SELECT reports.report_id " queryStr = QString("SELECT reports.report_id, reports.mmel "
"FROM public.reports " "FROM public.reports "
"WHERE fk_task_fim_id = %1 " "WHERE fk_task_fim_id = %1 "
"ORDER BY reports.report_id ASC").arg( "ORDER BY reports.report_id ASC").arg(
@@ -837,6 +634,7 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
{//Отчет {//Отчет
report_id = queryReport.value(0).toInt(); report_id = queryReport.value(0).toInt();
task.report.id = report_id; task.report.id = report_id;
task.report.mmel = queryReport.value(1).toBool();
} }
} }
else else
@@ -879,6 +677,36 @@ TaskAmmFim DataBaseLMS::selectTaskFIMbyID(int id_task)
resBool = db->rollback(); resBool = db->rollback();
return TaskAmmFim(); return TaskAmmFim();
} }
//Выгребаем все wh_item отчета
queryStr = QString("SELECT report_wh_items.wh_item_id, report_wh_items.status, report_wh_items.go_name, report_wh_items.obj_name, report_wh_items.code, report_wh_items.fk_report_id, report_wh_items.number "
"FROM public.report_wh_items "
"WHERE fk_report_id = %1 "
"ORDER BY report_wh_items.number ASC").arg(
QString::number(report_id));
QSqlQuery queryWhItems = QSqlQuery(*db);
if(queryExec(queryStr, &queryWhItems))
{
while (queryWhItems.next())
{//report_wh_item
FIMReportWarehouseItem reportWhItem;
reportWhItem.id = queryWhItems.value(0).toInt();
reportWhItem.status = queryWhItems.value(1).toInt();
reportWhItem.goName = queryWhItems.value(2).toString();
reportWhItem.objName = queryWhItems.value(3).toString();
reportWhItem.code = queryWhItems.value(4).toString();
task.report.warehouseItemList.append(reportWhItem);
}
}
else
{
resBool = db->rollback();
return TaskAmmFim();
}
} }
}; };
} }
@@ -924,10 +752,11 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task)
if(!report_id) if(!report_id)
{ {
queryStr = QString("INSERT INTO public.reports (fk_task_fim_id) " queryStr = QString("INSERT INTO public.reports (fk_task_fim_id, mmel) "
"VALUES (%1) " "VALUES (%1, %2) "
"RETURNING reports.report_id").arg( "RETURNING reports.report_id").arg(
task.getID()); QString::number(task.getID()),
(task.report.mmel ? "true" : "false"));
report_id = queryExecInt(queryStr); report_id = queryExecInt(queryStr);
if(!report_id) if(!report_id)
@@ -948,6 +777,17 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task)
resBool = db->rollback(); resBool = db->rollback();
return 0; return 0;
} }
queryStr = QString("DELETE FROM public.report_wh_items "
"WHERE fk_report_id = %1 ").arg(
QString::number(report_id));
QSqlQuery queryWhItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryWhItemsDEL))
{
resBool = db->rollback();
return 0;
}
} }
int number = 0; int number = 0;
@@ -971,6 +811,26 @@ int DataBaseLMS::updateReportFIMforTask(TaskAmmFim task)
} }
} }
number = 0;
for(FIMReportWarehouseItem reportWhItem : task.report.warehouseItemList)
{
queryStr = QString("INSERT INTO public.report_wh_items (status, go_name, obj_name, code, fk_report_id, number) "
"VALUES ('%1', '%2', '%3', '%4', %5, %6) "
"RETURNING report_wh_items.wh_item_id").arg(
QString::number(reportWhItem.status),
reportWhItem.goName,
reportWhItem.objName,
reportWhItem.code,
QString::number(report_id),
QString::number(++number));
if(!queryExecInt(queryStr))
{
resBool = db->rollback();
return 0;
}
}
queryStr = QString("UPDATE public.tasks_fim SET status = '%1' " queryStr = QString("UPDATE public.tasks_fim SET status = '%1' "
"WHERE task_id = %2 ").arg( "WHERE task_id = %2 ").arg(
"checkup", "checkup",

View File

@@ -384,8 +384,19 @@ int DataBaseLMS::deleteTrainee(int id_trainee)
queryStr = QString("DELETE FROM public.report_items " queryStr = QString("DELETE FROM public.report_items "
"WHERE report_items.fk_report_id = %1 ").arg( "WHERE report_items.fk_report_id = %1 ").arg(
report_id); report_id);
QSqlQuery queryReportDEL = QSqlQuery(*db); QSqlQuery queryItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryReportDEL)) if(!queryExec(queryStr, &queryItemsDEL))
{
resBool = db->rollback();
return 0;
}
/*Удаление wh_items для этого отчета*/
queryStr = QString("DELETE FROM public.report_wh_items "
"WHERE report_wh_items.fk_report_id = %1 ").arg(
report_id);
QSqlQuery queryWhItemsDEL = QSqlQuery(*db);
if(!queryExec(queryStr, &queryWhItemsDEL))
{ {
resBool = db->rollback(); resBool = db->rollback();
return 0; return 0;

View File

@@ -4,9 +4,8 @@
#include <QTime> #include <QTime>
#include "interfacedatabaselms.h" #include "interfacedatabaselms.h"
InterfaceDataBaseLMS::InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent): InterfaceDataBaseLMS::InterfaceDataBaseLMS(QObject *parent):
DataBaseLMS(ownerWidget, parent), DataBaseLMS(parent)
ownerWidget(ownerWidget)
{ {
} }

View File

@@ -20,7 +20,7 @@ public:
errAlreadyLogIn errAlreadyLogIn
}; };
public: public:
InterfaceDataBaseLMS(QWidget *ownerWidget, QObject *parent = nullptr); InterfaceDataBaseLMS(QObject *parent = nullptr);
public: public:
//Соединение //Соединение
@@ -105,9 +105,6 @@ public:
int replaceReportFIM(TaskAmmFim task); int replaceReportFIM(TaskAmmFim task);
int changeStatusTaskFIM(int id_task, QString status); int changeStatusTaskFIM(int id_task, QString status);
int changeStatusTaskAMM(int id_task, QString status); int changeStatusTaskAMM(int id_task, QString status);
private:
QWidget* ownerWidget;
}; };
#endif // INTERFACEDATABASELMS_H #endif // INTERFACEDATABASELMS_H

View File

@@ -20,11 +20,65 @@ void TaskAmmFim::addMalfunction(Malfunction malfunction)
malfunctionList.append(malfunction); malfunctionList.append(malfunction);
} }
void Malfunction::initialize(QString dmCode, QString num, QString description) QString TaskAmmFim::buildStatisticTasksAMM(QList<TaskAmmFim> listTasks)
{
int cntAll = 0;
int cntCompleted = 0;
for(TaskAmmFim task : listTasks)
{
cntAll++;
if(task.status == "completed")
cntCompleted++;
}
QString statHTML = QString("<p><span style=\"color: green;\">%1</span> / "
"<span style=\"color: black;\">%2</span></p>").arg(
QString::number(cntCompleted),
QString::number(cntAll));
return statHTML;
}
QString TaskAmmFim::buildStatisticTasksFIM(QList<TaskAmmFim> listTasks)
{
int cntAll = 0;
int cntCompleted = 0;
int cntCheckup = 0;
int cntFailed = 0;
for(TaskAmmFim task : listTasks)
{
cntAll++;
if(task.status == "completed")
cntCompleted++;
else if(task.status == "checkup")
cntCheckup++;
else if(task.status == "failed")
cntFailed++;
}
QString statHTML = QString("<p><span style=\"color: green;\">%1</span>/"
"<span style=\"color: red;\">%2</span>/"
"<span style=\"color: darkorange;\">%3</span> / "
"<span style=\"color: black;\">%4</span></p>").arg(
QString::number(cntCompleted),
QString::number(cntFailed),
QString::number(cntCheckup),
QString::number(cntAll));
return statHTML;
}
void Malfunction::initialize(QString dmCode, QString num, QString description, QString goName, QString objName)
{ {
this->dmCode = dmCode; this->dmCode = dmCode;
this->num = num; this->num = num;
this->description = description; this->description = description;
this->goName = goName;
this->objName = objName;
} }
void Malfunction::addMalfunctionSign(MalfunctionSign sign) void Malfunction::addMalfunctionSign(MalfunctionSign sign)

View File

@@ -84,13 +84,15 @@ public:
Malfunction(){}; Malfunction(){};
~Malfunction(){}; ~Malfunction(){};
public: public:
void initialize(QString dmCode, QString num, QString description); void initialize(QString dmCode, QString num, QString description, QString goName, QString objName);
void addMalfunctionSign(MalfunctionSign sign); void addMalfunctionSign(MalfunctionSign sign);
public: public:
QString dmCode; // dmCode процедуры QString dmCode; // dmCode процедуры
QString num; // номер по-порядку в пункте "2. Возможные причины" процедуры QString num; // номер по-порядку в пункте "2. Возможные причины" процедуры
QString description; // описание QString description; // описание
QList<MalfunctionSign> malfunctionSigns;// список соответствующих неисправности признаков QList<MalfunctionSign> malfunctionSigns;// список соответствующих неисправности признаков
QString goName; // имя GameObject (со скриптом DismantleData) - неисправный прибор
QString objName;
}; };
class DATABASELMS_EXPORT FIMReportItem class DATABASELMS_EXPORT FIMReportItem
@@ -104,6 +106,23 @@ public:
ProcedureID procedure; // ссылка на процедуру, при необходимости ProcedureID procedure; // ссылка на процедуру, при необходимости
}; };
class DATABASELMS_EXPORT FIMReportWarehouseItem
{
public:
FIMReportWarehouseItem(){};
~FIMReportWarehouseItem(){};
public:
int id = 0; // для идентификации в БД
// статус GameObject-а в сцене
int status = 0; // 0 - демонтировано, 1 - неисправно, 2 - заменено на новое со склада
// имя GameObject-а в сцене
QString goName = "";
// человеческое название прибора
QString objName = "";
// его код из документации
QString code = "";
};
class DATABASELMS_EXPORT FIMReport class DATABASELMS_EXPORT FIMReport
{ {
public: public:
@@ -111,7 +130,9 @@ public:
~FIMReport(){}; ~FIMReport(){};
public: public:
int id = 0; // для идентификации в БД int id = 0; // для идентификации в БД
QList<FIMReportItem> itemList; QList<FIMReportItem> itemList; // список выполненных/просмотренных процедур
QList<FIMReportWarehouseItem> warehouseItemList;
bool mmel = false; // выпуск самолета по MMEL
}; };
class DATABASELMS_EXPORT TaskAmmFim class DATABASELMS_EXPORT TaskAmmFim
@@ -126,6 +147,10 @@ public:
public: public:
void setID(int id){this->id = id;}; void setID(int id){this->id = id;};
int getID(){return id;}; int getID(){return id;};
public:
static QString buildStatisticTasksAMM(QList<TaskAmmFim> listTasks);
static QString buildStatisticTasksFIM(QList<TaskAmmFim> listTasks);
public: public:
int id; // для идентификации в БД int id; // для идентификации в БД

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ru_RU">
</TS>

View File

@@ -5,6 +5,9 @@
enum TypeQueryToDB{ enum TypeQueryToDB{
TYPE_QUERY_GET_ALL_LISTS, TYPE_QUERY_GET_ALL_LISTS,
TYPE_QUERY_GET_ALL_INSTRUCTORS,
TYPE_QUERY_GET_ALL_TRAINEES,
TYPE_QUERY_GET_ALL_GROUPS,
TYPE_QUERY_NEW_INSTRUCTOR, TYPE_QUERY_NEW_INSTRUCTOR,
TYPE_QUERY_DEL_INSTRUCTOR, TYPE_QUERY_DEL_INSTRUCTOR,
TYPE_QUERY_EDIT_INSTRUCTOR, TYPE_QUERY_EDIT_INSTRUCTOR,

View File

@@ -136,6 +136,18 @@ add_library(InstructorsAndTrainees SHARED
tasks/subprocitemwidget.h tasks/subprocitemwidget.h
tasks/subprocitemwidget.ui tasks/subprocitemwidget.ui
tasks/reportfimwidget.cpp
tasks/reportfimwidget.h
tasks/reportfimwidget.ui
tasks/actionwidget.cpp
tasks/actionwidget.h
tasks/actionwidget.ui
tasks/devicewidget.cpp
tasks/devicewidget.h
tasks/devicewidget.ui
widgets/waitanimationwidget.cpp widgets/waitanimationwidget.cpp
widgets/waitanimationwidget.h widgets/waitanimationwidget.h
widgets/waitanimationwidget.ui widgets/waitanimationwidget.ui
@@ -176,24 +188,24 @@ if(PROJECT_TYPE_DEBUG)
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll ${REPO_PATH}/BUILDS/Debug64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll
${REPO_PATH}/BUILDS/Debug64/ProgramAWSinstructorMPS) ${REPO_PATH}/BUILDS/Debug64/ProgramAWSinstructorMTD)
add_custom_command(TARGET InstructorsAndTrainees add_custom_command(TARGET InstructorsAndTrainees
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Debug64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll ${REPO_PATH}/BUILDS/Debug64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll
${REPO_PATH}/BUILDS/Debug64/ProgramServerMPS) ${REPO_PATH}/BUILDS/Debug64/ProgramServerMTD)
else() else()
add_custom_command(TARGET InstructorsAndTrainees add_custom_command(TARGET InstructorsAndTrainees
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll ${REPO_PATH}/BUILDS/Release64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll
${REPO_PATH}/BUILDS/Release64/ProgramAWSinstructorMPS) ${REPO_PATH}/BUILDS/Release64/ProgramAWSinstructorMTD)
add_custom_command(TARGET InstructorsAndTrainees add_custom_command(TARGET InstructorsAndTrainees
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REPO_PATH}/BUILDS/Release64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll ${REPO_PATH}/BUILDS/Release64/LibInstructorsAndTrainees/libInstructorsAndTrainees.dll
${REPO_PATH}/BUILDS/Release64/ProgramServerMPS) ${REPO_PATH}/BUILDS/Release64/ProgramServerMTD)
endif() endif()
#Только для TSMP! #Только для TSMP!

View File

@@ -1,618 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2024-12-28T11:57:36. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{00ce76f6-77cf-4587-a216-9a8e243377cb}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/BUILDS/LMS/DB_IaT/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/LMS/DB_IaT/Release64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win32_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_32_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/Release64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_32_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/VEYON/SUO/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_32_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">2</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,390 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.11.1, 2025-01-10T12:59:45. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{15ef2478-2444-4b00-88b8-fead51c6fef5}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.14.2 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5142.win64_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">4</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/BUILDS/DB_IaT/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Release</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_IaT/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=RelWithDebInfo</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_IaT/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск с отладочной информацией</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=MinSizeRel</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/DB_IaT/build-InstructorsAndTrainees-Desktop_Qt_5_14_2_MinGW_64_bit-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск минимального размера</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.4">
<valuelist type="QVariantList" key="CMake.Configuration">
<value type="QString">CMAKE_BUILD_TYPE:STRING=Debug</value>
<value type="QString">CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString">CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}</value>
<value type="QString">CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}</value>
<value type="QString">QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}</value>
</valuelist>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">D:/QT/Projects/RRJServer/RRJServer/BUILDS/DB_IaT/Debug64</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="QString" key="CMakeProjectManager.MakeStep.AdditionalArguments"></value>
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">5</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="bool" key="RunConfiguration.Arguments.multi">false</value>
<value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -1,319 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 6.0.2, 2024-05-27T09:37:39. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{88628a15-8b1c-4544-92e6-5683c5f27136}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">8</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{ec5f7042-f1c7-4b2e-9c22-2340fe1a69bd}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="CMake.Build.Type">Debug</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/andrey/VEYON/SUO/Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="CMake.Build.Type">Release</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/andrey/VEYON/SUO/build-InstructorsAndTrainees-Desktop-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="CMake.Build.Type">RelWithDebInfo</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/andrey/VEYON/SUO/build-InstructorsAndTrainees-Desktop-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release with Debug Information</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<value type="QString" key="CMake.Build.Type">MinSizeRel</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/andrey/VEYON/SUO/build-InstructorsAndTrainees-Desktop-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Minimum Size Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -4,9 +4,6 @@
<file>resources/icons/addTrainee.png</file> <file>resources/icons/addTrainee.png</file>
<file>resources/icons/admin.png</file> <file>resources/icons/admin.png</file>
<file>resources/icons/archive.png</file> <file>resources/icons/archive.png</file>
<file>resources/icons/branch-closed.png</file>
<file>resources/icons/branch-end.png</file>
<file>resources/icons/branch-more.png</file>
<file>resources/icons/branch-open.png</file> <file>resources/icons/branch-open.png</file>
<file>resources/icons/chekNo.png</file> <file>resources/icons/chekNo.png</file>
<file>resources/icons/chekYes.png</file> <file>resources/icons/chekYes.png</file>
@@ -18,7 +15,6 @@
<file>resources/icons/deleteGroup.png</file> <file>resources/icons/deleteGroup.png</file>
<file>resources/icons/deleteInstructor.png</file> <file>resources/icons/deleteInstructor.png</file>
<file>resources/icons/deleteTrainee.png</file> <file>resources/icons/deleteTrainee.png</file>
<file>resources/icons/docTasks.png</file>
<file>resources/icons/edit.png</file> <file>resources/icons/edit.png</file>
<file>resources/icons/group.png</file> <file>resources/icons/group.png</file>
<file>resources/icons/instructor.png</file> <file>resources/icons/instructor.png</file>
@@ -33,7 +29,6 @@
<file>resources/icons/trainee.png</file> <file>resources/icons/trainee.png</file>
<file>resources/icons/traineeArchive.png</file> <file>resources/icons/traineeArchive.png</file>
<file>resources/icons/traineeFromArchive.png</file> <file>resources/icons/traineeFromArchive.png</file>
<file>resources/icons/vline.png</file>
<file>resources/icons/sign.png</file> <file>resources/icons/sign.png</file>
<file>resources/icons/procedure.png</file> <file>resources/icons/procedure.png</file>
<file>resources/icons/malfunction.png</file> <file>resources/icons/malfunction.png</file>
@@ -47,7 +42,6 @@
<file>resources/icons/settings.png</file> <file>resources/icons/settings.png</file>
<file>resources/icons/style.png</file> <file>resources/icons/style.png</file>
<file>resources/icons/updateVersion.png</file> <file>resources/icons/updateVersion.png</file>
<file>resources/icons/editorDB.png</file>
<file>resources/icons/lms.png</file> <file>resources/icons/lms.png</file>
<file>resources/icons/critical.png</file> <file>resources/icons/critical.png</file>
<file>resources/icons/warning.png</file> <file>resources/icons/warning.png</file>
@@ -55,6 +49,9 @@
<file>resources/icons/personalCard.png</file> <file>resources/icons/personalCard.png</file>
<file>resources/icons/eye.png</file> <file>resources/icons/eye.png</file>
<file>resources/icons/exchange.png</file> <file>resources/icons/exchange.png</file>
<file>resources/icons/link.png</file> <file>resources/icons/new.png</file>
<file>resources/icons/branch-closed.png</file>
<file>resources/icons/save.png</file>
<file>resources/icons/lock.png</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@@ -26,6 +26,11 @@ CommonView::CommonView(ConnectorToServer* connectorToServer, TypeView type, QWid
treeWidget->setSortingEnabled(false); treeWidget->setSortingEnabled(false);
treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->verticalScrollBar()->setSingleStep(10);
treeWidget->setHorizontalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->horizontalScrollBar()->setSingleStep(10);
waitAnimationWidget = new WaitAnimationWidget; waitAnimationWidget = new WaitAnimationWidget;
QMovie *movie = new QMovie(":/resources/icons/762.gif"); QMovie *movie = new QMovie(":/resources/icons/762.gif");
waitAnimationWidget->initialize(movie,this); waitAnimationWidget->initialize(movie,this);
@@ -39,7 +44,8 @@ CommonView::~CommonView()
void CommonView::setItemColorArchive(QTreeWidgetItem *item) void CommonView::setItemColorArchive(QTreeWidgetItem *item)
{ {
setItemColor(item,QColor(240, 240, 240)); //setItemColor(item,QColor(240, 240, 240));
//setItemColor(item,QColor(250, 200, 150));
} }
void CommonView::setItemColorNoArchive(QTreeWidgetItem *item) void CommonView::setItemColorNoArchive(QTreeWidgetItem *item)
@@ -70,7 +76,7 @@ int CommonView::calculateWidth_0Column()
widthRightColumns += w; widthRightColumns += w;
} }
} }
width0Column = widthHeader - widthRightColumns - widthSB; width0Column = widthHeader - widthRightColumns - widthSB - 20;
return width0Column; return width0Column;
} }
@@ -81,8 +87,6 @@ void CommonView::setWidthColumnsTree()
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Name, 100); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Name, 100);
listWidthColumn.append(100); listWidthColumn.append(100);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Login, 100);
listWidthColumn.append(100);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Password, 100); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Password, 100);
listWidthColumn.append(100); listWidthColumn.append(100);
@@ -97,6 +101,14 @@ void CommonView::setWidthColumnsTree()
listWidthColumn.append(140); listWidthColumn.append(140);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Archived, 100); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Archived, 100);
listWidthColumn.append(100); listWidthColumn.append(100);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_AMMtasks, 120);
listWidthColumn.append(120);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_FIMtasks, 120);
listWidthColumn.append(120);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Login, 120);
listWidthColumn.append(120);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Messages, 120);
listWidthColumn.append(120);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Logged, 80); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_Logged, 80);
listWidthColumn.append(80); listWidthColumn.append(80);
treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_ID, 40); treeWidget->setColumnWidth(ColumnsTreeUsers::clmn_ID, 40);
@@ -107,7 +119,19 @@ void CommonView::setWidthColumnsTree()
void CommonView::reSetHeadTreeWidget() void CommonView::reSetHeadTreeWidget()
{ {
QStringList listHeaders = {tr("Name"), tr("Login"), tr("Password"), tr("Class"), tr("Computer"), tr("IP address"), tr("Administrator"), tr("Archived"), tr("Online"), tr("ID")}; QStringList listHeaders = { tr("Name"),
tr("Password"),
tr("Class"),
tr("Computer"),
tr("IP address"),
tr("Administrator"),
tr("Archived"),
tr("Tasks AMM"),
tr("Tasks FIM"),
tr("Login"),
tr("Messages"),
tr("Online"),
tr("ID")};
treeWidget->setHeaderLabels(listHeaders); treeWidget->setHeaderLabels(listHeaders);
} }
@@ -142,6 +166,8 @@ void CommonView::preparationTreeWidget()
{ {
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_ID, true); treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_ID, true);
} }
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Messages, true);
} }
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Administrator, true); treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Administrator, true);
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Password, true); treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Password, true);
@@ -151,6 +177,12 @@ void CommonView::preparationTreeWidget()
if(TypeUserDB == User::TypeUserDBTrainee) if(TypeUserDB == User::TypeUserDBTrainee)
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Administrator, true); treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_Administrator, true);
if(TypeUserDB != User::TypeUserDBTrainee)
{
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_AMMtasks, true);
treeWidget->setColumnHidden(ColumnsTreeUsers::clmn_FIMtasks, true);
}
//treeWidget->setSortingEnabled(true); //treeWidget->setSortingEnabled(true);
treeWidget->sortItems(ColumnsTreeUsers::clmn_Name, Qt::SortOrder::AscendingOrder); treeWidget->sortItems(ColumnsTreeUsers::clmn_Name, Qt::SortOrder::AscendingOrder);

View File

@@ -32,13 +32,16 @@ public:
protected: protected:
enum ColumnsTreeUsers{ enum ColumnsTreeUsers{
clmn_Name = 0, clmn_Name = 0,
clmn_Login,
clmn_Password, clmn_Password,
clmn_Class, clmn_Class,
clmn_Computer, clmn_Computer,
clmn_IP_address, clmn_IP_address,
clmn_Administrator, clmn_Administrator,
clmn_Archived, clmn_Archived,
clmn_AMMtasks,
clmn_FIMtasks,
clmn_Login,
clmn_Messages,
clmn_Logged, clmn_Logged,
clmn_ID, clmn_ID,
clmn_count clmn_count
@@ -69,6 +72,7 @@ public:
void clearSelection() void clearSelection()
{ {
treeWidget->clearSelection(); treeWidget->clearSelection();
treeWidget->setCurrentIndex(QModelIndex());
lastCurrentID = 0; lastCurrentID = 0;
} }
@@ -89,7 +93,7 @@ protected:
void preparationTreeWidget(); void preparationTreeWidget();
private: protected:
int calculateWidth_0Column(); int calculateWidth_0Column();
void setWidthColumnsTree(); void setWidthColumnsTree();
@@ -111,7 +115,7 @@ protected:
TypeObject typeObject; TypeObject typeObject;
QMutex mtxmapNewMsg; QMutex mtxmapNewMsg;
QMap<int, bool> mapNewMsg; QMap<int, int> mapNewMsg;
WaitAnimationWidget *waitAnimationWidget; WaitAnimationWidget *waitAnimationWidget;
}; };

View File

@@ -201,7 +201,9 @@ QByteArray DataParser::createQueryToDBMessage(ClientQueryToDB *queryToDB, int id
xmlWriter.writeStartElement("malfunction"); xmlWriter.writeStartElement("malfunction");
xmlWriter.writeAttribute("dmCode", malfunction.dmCode); xmlWriter.writeAttribute("dmCode", malfunction.dmCode);
xmlWriter.writeAttribute("num", malfunction.num); xmlWriter.writeAttribute("num", malfunction.num);
xmlWriter.writeAttribute("description", malfunction.description); xmlWriter.writeAttribute("description", malfunction.description);
xmlWriter.writeAttribute("goName", malfunction.goName);
xmlWriter.writeAttribute("objName", malfunction.objName);
for(MalfunctionSign sign : malfunction.malfunctionSigns) for(MalfunctionSign sign : malfunction.malfunctionSigns)
{ {
@@ -292,7 +294,7 @@ QByteArray DataParser::createDeAuthMessage(ClientDeAutorization *deAuth)
return array; return array;
} }
QByteArray DataParser::createQueryBlockAuth(bool block) QByteArray DataParser::createQueryBlockAuth(bool block, QString type)
{ {
QByteArray array; QByteArray array;
QXmlStreamWriter xmlWriter(&array); QXmlStreamWriter xmlWriter(&array);
@@ -302,6 +304,7 @@ QByteArray DataParser::createQueryBlockAuth(bool block)
xmlWriter.writeStartElement("BlockAuth"); xmlWriter.writeStartElement("BlockAuth");
xmlWriter.writeAttribute("Block", block ? "1" : "0"); xmlWriter.writeAttribute("Block", block ? "1" : "0");
xmlWriter.writeAttribute("type", type);
xmlWriter.writeEndElement(); xmlWriter.writeEndElement();
xmlWriter.writeEndElement(); xmlWriter.writeEndElement();
@@ -438,11 +441,6 @@ ServerSettings *DataParser::getServerSettings()
if(name == "Language"){ if(name == "Language"){
settings->Language = value; settings->Language = value;
} }
if(name == "AutoStart"){
settings->isAutoStart = value.toInt();
}
} }
} }
} }

View File

@@ -29,7 +29,7 @@ public:
QByteArray createQueryListSubProcMessage(QString dmCode); QByteArray createQueryListSubProcMessage(QString dmCode);
QByteArray createDeAuthMessage(ClientDeAutorization *deAuth); QByteArray createDeAuthMessage(ClientDeAutorization *deAuth);
QByteArray createQueryBlockAuth(bool block); QByteArray createQueryBlockAuth(bool block, QString type);
void createAuthData(ServerAuthorization *serverAuth); void createAuthData(ServerAuthorization *serverAuth);
void createAuthDataOffline(QString username,QString pass); void createAuthDataOffline(QString username,QString pass);

View File

@@ -37,7 +37,7 @@ void RecognizeSystem::initialize(DataParser *dataParser/*,MainWindow *mainWindow
void RecognizeSystem::recognize(QTcpSocket *socket) void RecognizeSystem::recognize(QTcpSocket *socket)
{ {
qDebug() << "RecognizeThreadId " << QThread::currentThreadId(); qDebug() << "RecognizeSystem::recognize thread ID " << QThread::currentThreadId();
QDataStream stream(socket); QDataStream stream(socket);
stream.setVersion(QDataStream::Qt_DefaultCompiledVersion); stream.setVersion(QDataStream::Qt_DefaultCompiledVersion);
@@ -154,7 +154,7 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
continue; continue;
} }
quint64 toFile = file.write(tmpBlock); qint64 toFile = file.write(tmpBlock);
emit sigSendDebugLog(Tools::getTime() + "CLIENT: toFile :" + toFile); emit sigSendDebugLog(Tools::getTime() + "CLIENT: toFile :" + toFile);
sizeReceiveData += toFile; sizeReceiveData += toFile;
@@ -260,12 +260,12 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
if(packetType == PacketType::BUSY) if(packetType == PacketType::BUSY)
{ {
emit sigAnimationActivated(true); emit signal_ServerBlockState(true);
} }
if(packetType == PacketType::FREE) if(packetType == PacketType::FREE)
{ {
emit sigAnimationActivated(false); emit signal_ServerBlockState(false);
} }
if(packetType == PacketType::HASH_READY) if(packetType == PacketType::HASH_READY)
@@ -278,12 +278,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
emit signal_AnswerDocsChanged(); emit signal_AnswerDocsChanged();
} }
//if(packetType == PacketType::TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM)
//{
//} //А)xml-ответы на запросы к БД (или автоматическая рассылка)
//А)xml-ответы на запросы к БД
//B)перечни Подпроцедур //B)перечни Подпроцедур
switch(packetType) switch(packetType)
{ {
@@ -294,6 +290,8 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
case TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS: case TYPE_XMLANSWER_QUERY_DB__LIST_CLASSROOMS:
case TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE: case TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE:
case TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE: case TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE:
case TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES:
case TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES:
case TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM: case TYPE_XMLANSWER_QUERY_LIST_SUB_PROC_AMM:
{ {
//ПОЛУЧЕНИЕ РАЗМЕРА ФАЙЛА //ПОЛУЧЕНИЕ РАЗМЕРА ФАЙЛА
@@ -302,15 +300,16 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
stream.startTransaction(); stream.startTransaction();
stream >> fileSize; stream >> fileSize;
if(!stream.commitTransaction()){ if(!stream.commitTransaction())
{
emit sigSendDebugLog(Tools::getTime() + "CLIENT: fileSize - FAIL commitTransaction"); emit sigSendDebugLog(Tools::getTime() + "CLIENT: fileSize - FAIL commitTransaction");
if (!socket->waitForReadyRead(TCP_READ_TIMEOUT)) { if (!socket->waitForReadyRead(TCP_READ_TIMEOUT))
{
emit sigSendDebugLog(Tools::getTime() + "CLIENT: ERROR! readyRead timeout - fileSize!!!"); emit sigSendDebugLog(Tools::getTime() + "CLIENT: ERROR! readyRead timeout - fileSize!!!");
return; return;
} }
continue; continue;
} }
emit sigSendDebugLog("CLIENT: filesize: " + QString::number(fileSize)); emit sigSendDebugLog("CLIENT: filesize: " + QString::number(fileSize));
@@ -330,13 +329,16 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
stream.startTransaction(); stream.startTransaction();
stream >> tmpBlock; stream >> tmpBlock;
if(!stream.commitTransaction()){ if(!stream.commitTransaction())
{
if(socket->state() == QAbstractSocket::UnconnectedState){ if(socket->state() == QAbstractSocket::UnconnectedState)
{
emit sigSocketDisabled(); emit sigSocketDisabled();
return; return;
} }
if(socket->waitForReadyRead(TCP_READ_TIMEOUT)){ if(socket->waitForReadyRead(TCP_READ_TIMEOUT))
{
continue; continue;
} }
@@ -347,12 +349,14 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
emit sigSendDebugLog(Tools::getTime() + "CLIENT: toFile :" + array.size()); emit sigSendDebugLog(Tools::getTime() + "CLIENT: toFile :" + array.size());
sizeReceiveData += array.size(); sizeReceiveData = array.size();
countSend++; countSend++;
tmpBlock.clear(); tmpBlock.clear();
if(sizeReceiveData == fileSize){ //if(sizeReceiveData == fileSize)
if(sizeReceiveData >= fileSize)
{
emit sigSendDebugLog(Tools::getTime() + "FINAL Count send: " + QString::number(countSend)); emit sigSendDebugLog(Tools::getTime() + "FINAL Count send: " + QString::number(countSend));
emit sigSendDebugLog(Tools::getTime() + "FINAL Size received: " + QString::number(sizeReceiveData)); emit sigSendDebugLog(Tools::getTime() + "FINAL Size received: " + QString::number(sizeReceiveData));
emit sigSendDebugLog(Tools::getTime() + "FINAL File size" + QString::number(fileSize)); emit sigSendDebugLog(Tools::getTime() + "FINAL File size" + QString::number(fileSize));
@@ -379,21 +383,6 @@ void RecognizeSystem::recognize(QTcpSocket *socket)
} }
packetType = PacketType::TYPE_NONE; packetType = PacketType::TYPE_NONE;
/*
QByteArray array;
stream.startTransaction();
stream >> array;
if(!stream.commitTransaction())
continue;
xmlParserQueryToDB(packetType, array);
packetType = PacketType::TYPE_NONE;
*/
} }
break; break;
}; };
@@ -592,6 +581,28 @@ void RecognizeSystem::xmlParser(QByteArray array)
} }
if(xmlReader.name() == "TryBlock")
{
bool result = false;
QString type = "";
foreach(const QXmlStreamAttribute &attr, xmlReader.attributes())
{
QString name = attr.name().toString();
QString value = attr.value().toString();
if (name == "Result"){
result = value == "true" ? true : false;
}
if (name == "Type"){
type = value;
}
}
emit sigTryBlock(result, type);
}
if(xmlReader.name() == "VersionList") if(xmlReader.name() == "VersionList")
{ {
@@ -862,6 +873,8 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
malfunction.num = malfOrReportNode.toElement().attribute("num"); malfunction.num = malfOrReportNode.toElement().attribute("num");
malfunction.dmCode = malfOrReportNode.toElement().attribute("dmCode"); malfunction.dmCode = malfOrReportNode.toElement().attribute("dmCode");
malfunction.description = malfOrReportNode.toElement().attribute("description"); malfunction.description = malfOrReportNode.toElement().attribute("description");
malfunction.goName = malfOrReportNode.toElement().attribute("goName");
malfunction.objName = malfOrReportNode.toElement().attribute("objName");
for(int s = 0; s < malfOrReportNode.childNodes().count(); s++) for(int s = 0; s < malfOrReportNode.childNodes().count(); s++)
{ {
@@ -883,6 +896,7 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
{//Отчет {//Отчет
FIMReport report; FIMReport report;
report.id = malfOrReportNode.toElement().attribute("report_id").toInt(); report.id = malfOrReportNode.toElement().attribute("report_id").toInt();
report.mmel = malfOrReportNode.toElement().attribute("mmel") == "true" ? true : false;
for(int k = 0; k < malfOrReportNode.childNodes().count(); k++) for(int k = 0; k < malfOrReportNode.childNodes().count(); k++)
{ {
@@ -904,6 +918,17 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
report.itemList.append(reportItem); report.itemList.append(reportItem);
} }
else if(reportItemNode.nodeName() == "reportWHItem")
{
FIMReportWarehouseItem reportWhItem;
reportWhItem.id = reportItemNode.toElement().attribute("wh_item_id").toInt();
reportWhItem.status = reportItemNode.toElement().attribute("status").toInt();
reportWhItem.goName = reportItemNode.toElement().attribute("goName");
reportWhItem.objName = reportItemNode.toElement().attribute("objName");
reportWhItem.code = reportItemNode.toElement().attribute("code");
report.warehouseItemList.append(reportWhItem);
}
} }
task.report = report; task.report = report;
@@ -916,6 +941,164 @@ void RecognizeSystem::xmlParserQueryToDB(PacketType packetType, QByteArray array
emit sigAnswerQueryToDB_ListTasksFIMforTrainee(listTasks, trainee_id); emit sigAnswerQueryToDB_ListTasksFIMforTrainee(listTasks, trainee_id);
} }
break; break;
case TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES:
{
QMap<int, QList<TaskAmmFim> > mapOfLists;
QDomNode listsAllNode = commonDOM.namedItem("ListsTasksAMMofAllTrainees");
for(int i = 0; i < listsAllNode.childNodes().count(); i++)
{
QDomNode listOneNode = listsAllNode.childNodes().at(i);
if(listOneNode.nodeName() == "ListTasksAMM")
{
QList<TaskAmmFim> listTasks;
int trainee_id = 0;
trainee_id = listOneNode.toElement().attribute("trainee_id").toInt();
for(int i = 0; i < listOneNode.childNodes().count(); i++)
{
QDomNode taskNode = listOneNode.childNodes().at(i);
if(taskNode.nodeName() == "taskAMM")
{//Задача
TaskAmmFim task;
task.setID(taskNode.toElement().attribute("task_id").toInt());
task.ammProcedure.title = taskNode.toElement().attribute("title");
task.ammProcedure.dmCode = taskNode.toElement().attribute("dmCode");
task.status = taskNode.toElement().attribute("status");
for(int j = 0; j < taskNode.childNodes().count(); j++)
{
QDomNode subProcNode = taskNode.childNodes().at(j);
if(subProcNode.nodeName() == "SubProc")
{//Подпроцедура
SubProc subProc;
subProc.setDmCode(subProcNode.toElement().attribute("dmCode"));
subProc.setTitle(subProcNode.toElement().attribute("title"));
subProc.setModeListStr(subProcNode.toElement().attribute("canplay"));
task.listSubProc.append(subProc);
}
}
listTasks.append(task);
}
}
mapOfLists.insert(trainee_id, listTasks);
}
}
emit sigAnswerQueryToDB_ListsTasksAMMofAllTrainees(mapOfLists);
}
break;
case TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES:
{
QMap<int, QList<TaskAmmFim> > mapOfLists;
QDomNode listsAllNode = commonDOM.namedItem("ListsTasksFIMofAllTrainees");
for(int i = 0; i < listsAllNode.childNodes().count(); i++)
{
QDomNode listOneNode = listsAllNode.childNodes().at(i);
if(listOneNode.nodeName() == "ListTasksFIM")
{
QList<TaskAmmFim> listTasks;
int trainee_id = 0;
trainee_id = listOneNode.toElement().attribute("trainee_id").toInt();
for(int i = 0; i < listOneNode.childNodes().count(); i++)
{//Задачи
QDomNode taskNode = listOneNode.childNodes().at(i);
if(taskNode.nodeName() == "taskFIM")
{
TaskAmmFim task;
task.setID(taskNode.toElement().attribute("task_id").toInt());
task.title = taskNode.toElement().attribute("title");
task.status = taskNode.toElement().attribute("status");
for(int j = 0; j < taskNode.childNodes().count(); j++)
{
QDomNode malfOrReportNode = taskNode.childNodes().at(j);
if(malfOrReportNode.nodeName() == "malfunction")
{//Неисправность
Malfunction malfunction;
malfunction.num = malfOrReportNode.toElement().attribute("num");
malfunction.dmCode = malfOrReportNode.toElement().attribute("dmCode");
malfunction.description = malfOrReportNode.toElement().attribute("description");
malfunction.goName = malfOrReportNode.toElement().attribute("goName");
malfunction.objName = malfOrReportNode.toElement().attribute("objName");
for(int s = 0; s < malfOrReportNode.childNodes().count(); s++)
{
QDomNode signNode = malfOrReportNode.childNodes().at(s);
if(signNode.nodeName() == "malfunctionSign")
{
MalfunctionSign sign;
sign.type = signNode.toElement().attribute("type").toInt();
sign.description = signNode.toElement().attribute("description");
malfunction.malfunctionSigns.append(sign);
}
}
task.malfunctionList.append(malfunction);
}
else
if(malfOrReportNode.nodeName() == "report")
{//Отчет
FIMReport report;
report.id = malfOrReportNode.toElement().attribute("report_id").toInt();
report.mmel = malfOrReportNode.toElement().attribute("mmel") == "true" ? true : false;
for(int k = 0; k < malfOrReportNode.childNodes().count(); k++)
{
QDomNode reportItemNode = malfOrReportNode.childNodes().at(k);
if(reportItemNode.nodeName() == "reportItem")
{
FIMReportItem reportItem;
reportItem.id = reportItemNode.toElement().attribute("item_id").toInt();
reportItem.text = reportItemNode.toElement().attribute("text");
if(reportItemNode.childNodes().count())
{
QDomNode procedureIDNode = reportItemNode.childNodes().at(0);
reportItem.procedure.doc = procedureIDNode.toElement().attribute("doc");
reportItem.procedure.title = procedureIDNode.toElement().attribute("title");
reportItem.procedure.dmCode = procedureIDNode.toElement().attribute("dmCode");
reportItem.procedure.result = procedureIDNode.toElement().attribute("result");
}
report.itemList.append(reportItem);
}
else if(reportItemNode.nodeName() == "reportWHItem")
{
FIMReportWarehouseItem reportWhItem;
reportWhItem.id = reportItemNode.toElement().attribute("wh_item_id").toInt();
reportWhItem.status = reportItemNode.toElement().attribute("status").toInt();
reportWhItem.goName = reportItemNode.toElement().attribute("goName");
reportWhItem.objName = reportItemNode.toElement().attribute("objName");
reportWhItem.code = reportItemNode.toElement().attribute("code");
report.warehouseItemList.append(reportWhItem);
}
}
task.report = report;
}
}
listTasks.append(task);
}
}
mapOfLists.insert(trainee_id, listTasks);
}
}
emit sigAnswerQueryToDB_ListsTasksFIMofAllTrainees(mapOfLists);
}
break;
}; };
} }

View File

@@ -14,6 +14,7 @@
#include "Datas.h" #include "Datas.h"
#include "tasksAmmFim.h" #include "tasksAmmFim.h"
#include "module.h" #include "module.h"
#include "metatypes.h"
class RecognizeSystem : public QObject class RecognizeSystem : public QObject
@@ -37,6 +38,7 @@ signals:
void sigErrorAuth(QString error); void sigErrorAuth(QString error);
void sigAuth(ServerAuthorization *serverAuth); void sigAuth(ServerAuthorization *serverAuth);
void sigDeAuth(ServerDeAuthorization *serverDeAuth); void sigDeAuth(ServerDeAuthorization *serverDeAuth);
void sigTryBlock(bool result, QString type);
void sigAnswerQueryToDB(QList<Instructor>* listInstructors, void sigAnswerQueryToDB(QList<Instructor>* listInstructors,
QList<Trainee>* listTrainees, QList<Trainee>* listTrainees,
QList<Group>* listGroups); QList<Group>* listGroups);
@@ -52,17 +54,22 @@ signals:
void sigAnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms); void sigAnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms);
void sigAnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id); void sigAnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id);
void sigAnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id); void sigAnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim>listTasks, int trainee_id);
void sigAnswerQueryToDB_ListsTasksAMMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void sigAnswerQueryToDB_ListsTasksFIMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void sigAnswerQueryTasksXML_FIM(QByteArray array); void sigAnswerQueryTasksXML_FIM(QByteArray array);
void sigAnswerQueryTasksXML_AMM(QByteArray array); void sigAnswerQueryTasksXML_AMM(QByteArray array);
void sigShowServerDataList(QList<StreamingVersionData*> *versions); void sigShowServerDataList(QList<StreamingVersionData*> *versions);
void sigSetVersion(StreamingVersionData* serverVersion); void sigSetVersion(StreamingVersionData* serverVersion);
void sigNotifyVersionControl(QString text); void sigNotifyVersionControl(QString text);
void sigAnimationActivated(bool flag);
void sigHashReady(); void sigHashReady();
void sigAnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode); void sigAnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode);
void signal_AnswerDocsChanged(); void signal_AnswerDocsChanged();
void signal_ServerBlockState(bool state);
private: private:
QList<QString> *folderList; QList<QString> *folderList;
//MainWindow *mainWindow; //MainWindow *mainWindow;

View File

@@ -20,7 +20,7 @@ void TCPClient::initialize(RecognizeSystem *recognize,SendSystem *sendSystem)
void TCPClient::setConnect(ServerSettings *serverSettings) void TCPClient::setConnect(ServerSettings *serverSettings)
{ {
socket = new QTcpSocket(); socket = new QTcpSocket();
qDebug() << "TCPCLient thread: " << QThread::currentThreadId(); qDebug() << "TCPCLient::setConnect thread ID " << QThread::currentThreadId();
if (socket != NULL && socket->state() == QTcpSocket::ConnectedState) if (socket != NULL && socket->state() == QTcpSocket::ConnectedState)
{ {
emit sigSendDebugLog("already connected"); emit sigSendDebugLog("already connected");

View File

@@ -53,6 +53,9 @@ enum PacketType{
TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE = 106, TYPE_XMLANSWER_QUERY_TASKS_AMM_FOR_TRAINEE = 106,
TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE = 107, TYPE_XMLANSWER_QUERY_TASKS_FIM_FOR_TRAINEE = 107,
TYPE_XMLANSWER_QUERY_TASKS_AMM_OF_ALL_TRAINEES = 108,
TYPE_XMLANSWER_QUERY_TASKS_FIM_OF_ALL_TRAINEES = 109,
//xml-ответы на запросы AdditionalFiles //xml-ответы на запросы AdditionalFiles
TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130, TYPE_XMLANSWER_QUERY_TASKS_XML_FIM = 130,
TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131, TYPE_XMLANSWER_QUERY_TASKS_XML_AMM = 131,

View File

@@ -9,7 +9,6 @@ public:
QString Address; QString Address;
QString Port; QString Port;
QString Language; QString Language;
bool isAutoStart;
}; };
class ServerAuthorization{ class ServerAuthorization{

View File

@@ -9,21 +9,22 @@ ConnectorToServer::ConnectorToServer(QObject *parent) :
sendSystem(nullptr), sendSystem(nullptr),
recognizeSystem(nullptr), recognizeSystem(nullptr),
fl_GetedOfflineMessages(false), fl_GetedOfflineMessages(false),
nameInstructorLoggedInLocal("") nameInstructorLoggedInLocal(""),
serverBlockState(false)
{ {
initialize(); initialize();
} }
ConnectorToServer::~ConnectorToServer() ConnectorToServer::~ConnectorToServer()
{ {
connectionThread->quit();
connectionThread->wait();
delete connectionThread;
delete client; delete client;
delete recognizeSystem; delete recognizeSystem;
delete sendSystem; delete sendSystem;
delete dataParser; delete dataParser;
connectionThread->quit();
connectionThread->wait();
delete connectionThread;
} }
ServerSettings ConnectorToServer::getServerSettings() ServerSettings ConnectorToServer::getServerSettings()
@@ -38,13 +39,17 @@ bool ConnectorToServer::getIsConnected()
void ConnectorToServer::SetConnectToServer() void ConnectorToServer::SetConnectToServer()
{ {
qDebug() << "connectorToServer::SetConnectToServer() thread ID " << QThread::currentThreadId(); serverBlockState = false;
qDebug() << "connectorToServer::SetConnectToServer thread ID " << QThread::currentThreadId();
serverSettings = *dataParser->getServerSettings(); serverSettings = *dataParser->getServerSettings();
emit sigSetConnect(dataParser->getServerSettings(),connectionThread); emit sigSetConnect(dataParser->getServerSettings(),connectionThread);
} }
void ConnectorToServer::StopConnectToServer() void ConnectorToServer::StopConnectToServer()
{ {
serverBlockState = false;
emit sigStopConnect(); emit sigStopConnect();
clearListModelDB(); clearListModelDB();
} }
@@ -117,6 +122,12 @@ void ConnectorToServer::slot_NotifyVersionControl(QString text)
emit signal_NotifyVersionControl(text); emit signal_NotifyVersionControl(text);
} }
void ConnectorToServer::slot_ServerBlockState(bool state)
{
serverBlockState = state;
emit signal_ServerBlockState(state);
}
void ConnectorToServer::initialize() void ConnectorToServer::initialize()
{ {
createObjects(); createObjects();
@@ -139,6 +150,8 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::sigAuth,this,&ConnectorToServer::slot_Auth); connect(recognizeSystem,&RecognizeSystem::sigAuth,this,&ConnectorToServer::slot_Auth);
connect(recognizeSystem,&RecognizeSystem::sigDeAuth,this,&ConnectorToServer::sigDeLoginResult); connect(recognizeSystem,&RecognizeSystem::sigDeAuth,this,&ConnectorToServer::sigDeLoginResult);
connect(recognizeSystem,&RecognizeSystem::sigTryBlock,this,&ConnectorToServer::sigTryBlockResult);
connect(recognizeSystem,&RecognizeSystem::sigServerBlocked,this,&ConnectorToServer::slot_ServerBlocked); connect(recognizeSystem,&RecognizeSystem::sigServerBlocked,this,&ConnectorToServer::slot_ServerBlocked);
connect(recognizeSystem,&RecognizeSystem::sigErrorAuth,this,&ConnectorToServer::slot_ErrorAuth); connect(recognizeSystem,&RecognizeSystem::sigErrorAuth,this,&ConnectorToServer::slot_ErrorAuth);
@@ -154,6 +167,9 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksAMMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksAMMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksFIMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListTasksFIMforTrainee,this,&ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListsTasksAMMofAllTrainees,this,&ConnectorToServer::slot_AnswerQueryToDB_ListsTasksAMMofAllTrainees);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryToDB_ListsTasksFIMofAllTrainees,this,&ConnectorToServer::slot_AnswerQueryToDB_ListsTasksFIMofAllTrainees);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_FIM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_FIM);
connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM); connect(recognizeSystem,&RecognizeSystem::sigAnswerQueryTasksXML_AMM,this,&ConnectorToServer::slot_AnswerQueryTasksXML_AMM);
@@ -168,7 +184,8 @@ void ConnectorToServer::bindConnection()
connect(recognizeSystem,&RecognizeSystem::signal_AnswerDocsChanged,this,&ConnectorToServer::slot_AnswerDocsChanged); connect(recognizeSystem,&RecognizeSystem::signal_AnswerDocsChanged,this,&ConnectorToServer::slot_AnswerDocsChanged);
connect(recognizeSystem, &RecognizeSystem::sigSetVersion, this, &ConnectorToServer::signal_SetVersion); connect(recognizeSystem, &RecognizeSystem::sigSetVersion, this, &ConnectorToServer::signal_SetVersion);
connect(recognizeSystem, &RecognizeSystem::sigAnimationActivated, this, &ConnectorToServer::signal_AnimationActivated);
connect(recognizeSystem,&RecognizeSystem::signal_ServerBlockState,this,&ConnectorToServer::slot_ServerBlockState);
connect(this, &ConnectorToServer::signal_SendCopyVersion, sendSystem, &SendSystem::sendCopyVersion); connect(this, &ConnectorToServer::signal_SendCopyVersion, sendSystem, &SendSystem::sendCopyVersion);
connect(this, &ConnectorToServer::signal_SendDeleteVersion, sendSystem, &SendSystem::sendDeleteVersion); connect(this, &ConnectorToServer::signal_SendDeleteVersion, sendSystem, &SendSystem::sendDeleteVersion);
@@ -185,6 +202,7 @@ void ConnectorToServer::createObjects()
client->moveToThread(connectionThread); client->moveToThread(connectionThread);
dataParser = new DataParser; dataParser = new DataParser;
dataParser->moveToThread(connectionThread);
sendSystem = new SendSystem; sendSystem = new SendSystem;
sendSystem->moveToThread(connectionThread); sendSystem->moveToThread(connectionThread);
@@ -196,6 +214,11 @@ void ConnectorToServer::createObjects()
connectionThread->setPriority(QThread::HighestPriority); connectionThread->setPriority(QThread::HighestPriority);
} }
bool ConnectorToServer::getServerBlockState() const
{
return serverBlockState;
}
SendSystem *ConnectorToServer::getSendSystem() const SendSystem *ConnectorToServer::getSendSystem() const
{ {
return sendSystem; return sendSystem;

View File

@@ -15,6 +15,7 @@
#include "classroom.h" #include "classroom.h"
#include "Datas.h" #include "Datas.h"
#include "streamingversiondata.h" #include "streamingversiondata.h"
#include "metatypes.h"
class ConnectorToServer : public QObject class ConnectorToServer : public QObject
{ {
@@ -47,7 +48,7 @@ public:
bool sendQueryTasksXML(QString type); bool sendQueryTasksXML(QString type);
bool sendQueryListSubProc(QString dmCode); bool sendQueryListSubProc(QString dmCode);
bool sendQueryBlockAuth(bool block); bool sendQueryBlockAuth(bool block, QString type);
void sendShowVersionSelect(); void sendShowVersionSelect();
bool sendClientNotify(QString command); bool sendClientNotify(QString command);
@@ -82,6 +83,8 @@ public:
int getIdTraineeByLogin(QString login); int getIdTraineeByLogin(QString login);
int getIdInstructorByLogin(QString login); int getIdInstructorByLogin(QString login);
bool getServerBlockState() const;
private: private:
//Очистка списочной модели БД СУО //Очистка списочной модели БД СУО
void clearListModelDB(); void clearListModelDB();
@@ -95,6 +98,10 @@ public slots:
void slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms); void slot_AnswerQueryToDB_ListClassrooms(QList<Classroom> listClassrooms);
void slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id); void slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id);
void slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id); void slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id);
void slot_AnswerQueryToDB_ListsTasksAMMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void slot_AnswerQueryToDB_ListsTasksFIMofAllTrainees(MapListsTasksAllTraineeType mapOfLists);
void slot_AnswerQueryTasksXML_FIM(QByteArray array); void slot_AnswerQueryTasksXML_FIM(QByteArray array);
void slot_AnswerQueryTasksXML_AMM(QByteArray array); void slot_AnswerQueryTasksXML_AMM(QByteArray array);
void slot_AnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode); void slot_AnswerQuerySubProc(QList<SubProc> listSubProc, QString parentTask_dmCode);
@@ -117,6 +124,8 @@ public slots:
void slot_NotifyVersionControl(QString text); void slot_NotifyVersionControl(QString text);
void slot_ServerBlockState(bool state);
signals: signals:
void sigSetConnect(ServerSettings* serverSettings,QThread *thread); void sigSetConnect(ServerSettings* serverSettings,QThread *thread);
void sigStopConnect(); void sigStopConnect();
@@ -126,6 +135,9 @@ signals:
void sigLoginResult(ServerAuthorization * serverAuth); void sigLoginResult(ServerAuthorization * serverAuth);
void sigDeLoginResult(ServerDeAuthorization * serverDeAuth); void sigDeLoginResult(ServerDeAuthorization * serverDeAuth);
void sigTryBlockResult(bool result, QString type);
void sigServerBlocked(); void sigServerBlocked();
void sigErrorAuth(QString error); void sigErrorAuth(QString error);
@@ -149,7 +161,6 @@ signals:
void signal_AnswerDocsChanged(); void signal_AnswerDocsChanged();
void signal_SetVersion(StreamingVersionData* serverVersion); void signal_SetVersion(StreamingVersionData* serverVersion);
void signal_AnimationActivated(bool flag);
void signal_SendDeleteVersion(StreamingVersionData *streaming); void signal_SendDeleteVersion(StreamingVersionData *streaming);
void signal_SendSwitchVersion(StreamingVersionData *selectVersion); void signal_SendSwitchVersion(StreamingVersionData *selectVersion);
@@ -160,6 +171,8 @@ signals:
void signal_NotifyVersionControl(QString text); void signal_NotifyVersionControl(QString text);
void signal_ServerBlockState(bool state);
private: private:
void initialize(); void initialize();
void bindConnection(); void bindConnection();
@@ -192,6 +205,8 @@ private:
bool fl_GetedOfflineMessages; bool fl_GetedOfflineMessages;
QString nameInstructorLoggedInLocal; QString nameInstructorLoggedInLocal;
bool serverBlockState;
}; };
#endif // CONNECTORTOSERVER_H #endif // CONNECTORTOSERVER_H

View File

@@ -76,6 +76,7 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasksAMMforTrainee(QList<TaskAm
mtxAccess.unlock(); mtxAccess.unlock();
emit signal_UpdateTasksAMMforTrainee(trainee_id); emit signal_UpdateTasksAMMforTrainee(trainee_id);
emit signal_UpdateDB(false, true);
} }
void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id) void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAmmFim> listTasks, int trainee_id)
@@ -91,6 +92,47 @@ void ConnectorToServer::slot_AnswerQueryToDB_ListTasksFIMforTrainee(QList<TaskAm
mtxAccess.unlock(); mtxAccess.unlock();
emit signal_UpdateTasksFIMforTrainee(trainee_id); emit signal_UpdateTasksFIMforTrainee(trainee_id);
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListsTasksAMMofAllTrainees(MapListsTasksAllTraineeType mapOfLists)
{
mtxAccess.lock();
for(int key : mapOfLists.keys())
{
//Удаляем старые задачи этого обучаемого
mapTasksAMM.remove(key);
//Добавляем новые
mapTasksAMM.insert(key, mapOfLists.value(key));
emit signal_UpdateTasksAMMforTrainee(key);
}
mtxAccess.unlock();
emit signal_UpdateDB(false, true);
}
void ConnectorToServer::slot_AnswerQueryToDB_ListsTasksFIMofAllTrainees(MapListsTasksAllTraineeType mapOfLists)
{
mtxAccess.lock();
for(int key : mapOfLists.keys())
{
//Удаляем старые задачи этого обучаемого
mapTasksFIM.remove(key);
//Добавляем новые
mapTasksFIM.insert(key, mapOfLists.value(key));
emit signal_UpdateTasksFIMforTrainee(key);
}
mtxAccess.unlock();
emit signal_UpdateDB(false, true);
} }
void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array) void ConnectorToServer::slot_AnswerQueryTasksXML_FIM(QByteArray array)

View File

@@ -95,14 +95,14 @@ bool ConnectorToServer::sendQueryListSubProc(QString dmCode)
return true; return true;
} }
bool ConnectorToServer::sendQueryBlockAuth(bool block) bool ConnectorToServer::sendQueryBlockAuth(bool block, QString type)
{ {
if (!client->getIsConnected()) if (!client->getIsConnected())
{ {
return false; return false;
} }
QByteArray array = dataParser->createQueryBlockAuth(block); QByteArray array = dataParser->createQueryBlockAuth(block, type);
emit sigSendAnswerToServer(array); emit sigSendAnswerToServer(array);
return true; return true;

View File

@@ -17,7 +17,8 @@ DialogRedactorInstructors::DialogRedactorInstructors(ConnectorToServer* connecto
QHBoxLayout *layout = new QHBoxLayout(this); QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(editorInstructors); layout->addWidget(editorInstructors);
this->setWindowTitle(tr("Editor of instructors")); this->setWindowTitle(tr("Editor of instructors"));
this->setMinimumSize(1400, 700); this->setMinimumSize(1400, 700);
this->setWindowFlags(windowFlags() & ~Qt::WindowMinimizeButtonHint);
//this->setWindowState(Qt::WindowMaximized); //this->setWindowState(Qt::WindowMaximized);
this->setModal(true); this->setModal(true);
} }

View File

@@ -77,7 +77,7 @@ void InstructorsView::loadInstructorsFromDB()
else else
{//Не Залогинен {//Не Залогинен
//ItemInstructor->setText(ColumnsTreeUsers::clmn_Logged, tr("no")); //ItemInstructor->setText(ColumnsTreeUsers::clmn_Logged, tr("no"));
ItemInstructor->setIcon(ColumnsTreeUsers::clmn_Logged, QIcon(QStringLiteral(":/resources/icons/circleGray.png"))); //ItemInstructor->setIcon(ColumnsTreeUsers::clmn_Logged, QIcon(QStringLiteral(":/resources/icons/circleGray.png")));
} }
//Скрываем архивных (при необходимости) //Скрываем архивных (при необходимости)
@@ -96,13 +96,19 @@ void InstructorsView::loadInstructorsFromDB()
if(mapNewMsg.value(instructor.getID())) if(mapNewMsg.value(instructor.getID()))
{ {
if(lastCurrentID == instructor.getID()) if(lastCurrentID == instructor.getID())
mapNewMsg.take(lastCurrentID); {
//mapNewMsg.take(lastCurrentID);
}
else else
{ {
/*
for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++) for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++)
{ {
ItemInstructor->setBackground(i, QBrush(QColor(250, 210, 1))); ItemInstructor->setBackground(i, QBrush(QColor(250, 210, 1)));
} }
*/
ItemInstructor->setIcon(ColumnsTreeUsers::clmn_Messages, QIcon(QStringLiteral(":/resources/icons/sendMsg.png")));
ItemInstructor->setText(ColumnsTreeUsers::clmn_Messages, QString::number(mapNewMsg.value(instructor.getID())));
} }
} }
} }

View File

@@ -6,11 +6,12 @@
ViewerInstructors::ViewerInstructors(ConnectorToServer* connectorToServer, QWidget *parent) : ViewerInstructors::ViewerInstructors(ConnectorToServer* connectorToServer, QWidget *parent) :
InstructorsView(connectorToServer, CommonView::TypeView::onlyView, parent), InstructorsView(connectorToServer, CommonView::TypeView::onlyView, parent),
dlgRedactor(nullptr), dlgRedactor(nullptr),
flTryEditorInstructors(false),
ui(new Ui::ViewerInstructors) ui(new Ui::ViewerInstructors)
{ {
ui->setupUi(this); ui->setupUi(this);
connect(treeWidget, &QTreeWidget::itemClicked, this, &ViewerInstructors::on_treeWidgetItemClicked); connect(treeWidget, &QTreeWidget::currentItemChanged, this, &ViewerInstructors::on_treeWidgetCurrentItemChanged);
ui->horizontalLayout_1->addWidget(treeWidget); ui->horizontalLayout_1->addWidget(treeWidget);
@@ -20,6 +21,8 @@ ViewerInstructors::ViewerInstructors(ConnectorToServer* connectorToServer, QWidg
setNotLoggedInVisible(true); setNotLoggedInVisible(true);
ui->btnEditorInstructors->setVisible(false); ui->btnEditorInstructors->setVisible(false);
connect(connectorToServer, &ConnectorToServer::sigTryBlockResult, this, &ViewerInstructors::slot_checkTryBlockResult);
} }
ViewerInstructors::~ViewerInstructors() ViewerInstructors::~ViewerInstructors()
@@ -48,6 +51,8 @@ void ViewerInstructors::deactivate()
dlgRedactor = nullptr; dlgRedactor = nullptr;
} }
flTryEditorInstructors = false;
CommonView::deactivate(); CommonView::deactivate();
updateButtons(); updateButtons();
} }
@@ -69,39 +74,51 @@ void ViewerInstructors::slot_receiveMessage(ClientMessage clientMessage)
int id_instructor = clientMessage.fromId.toInt(); int id_instructor = clientMessage.fromId.toInt();
mtxmapNewMsg.lock(); mtxmapNewMsg.lock();
mapNewMsg.insert(id_instructor, true); mapNewMsg.insert(id_instructor, mapNewMsg.value(id_instructor) + 1);
mtxmapNewMsg.unlock(); mtxmapNewMsg.unlock();
slot_NeedUpdateUI(true, false); slot_NeedUpdateUI(true, false);
} }
void ViewerInstructors::on_btnEditorInstructors_clicked() void ViewerInstructors::slot_checkTryBlockResult(bool result, QString type)
{ {
connectorToServer->sendQueryBlockAuth(true); if(flTryEditorInstructors)
dlgRedactor = new DialogRedactorInstructors(connectorToServer, adminMode, this);
dlgRedactor->exec();
if(dlgRedactor)
{ {
delete dlgRedactor; if(type == "EditorInstructors")
dlgRedactor = nullptr; {
emit signal_needShowWait(false);
if(result)
{//Одобрено
dialog_EditorInstructors();
}
else
{//Отказ
SpecMsgBox::WarningClose(this, tr("The server rejected your request to access instructors control.\nAnother instructor is managing instructors.\nPlease try again later."));
}
flTryEditorInstructors = false;
}
} }
if(authComplited)
loadInstructorsFromDB();
connectorToServer->sendQueryBlockAuth(false);
} }
void ViewerInstructors::on_treeWidgetItemClicked(QTreeWidgetItem *item, int column) void ViewerInstructors::on_btnEditorInstructors_clicked()
{ {
if(item == nullptr) emit signal_needShowWait(true);
flTryEditorInstructors = true;
connectorToServer->sendQueryBlockAuth(true, "EditorInstructors");
}
void ViewerInstructors::on_treeWidgetCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if(current == nullptr)
return; return;
//if(current->childCount() == 0) //if(current->childCount() == 0)
{//Выбран обучаемый {//Выбран обучаемый
QString login = item->text(ColumnsTreeUsers::clmn_Login); QString login = current->text(ColumnsTreeUsers::clmn_Login);
//if(login != "") //if(login != "")
{ {
int newCurrentID = connectorToServer->getIdInstructorByLogin(login); int newCurrentID = connectorToServer->getIdInstructorByLogin(login);
@@ -118,9 +135,11 @@ void ViewerInstructors::on_treeWidgetItemClicked(QTreeWidgetItem *item, int colu
{ {
for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++) for (int i = 0; i < ColumnsTreeUsers::clmn_count; i++)
{ {
item->setBackground(i, QBrush(Qt::GlobalColor::white)); current->setBackground(i, QBrush(Qt::GlobalColor::white));
} }
mapNewMsg.take(newCurrentID); mapNewMsg.take(newCurrentID);
current->setIcon(ColumnsTreeUsers::clmn_Messages, QIcon());
current->setText(ColumnsTreeUsers::clmn_Messages, "");
} }
} }
mtxmapNewMsg.unlock(); mtxmapNewMsg.unlock();
@@ -141,3 +160,20 @@ void ViewerInstructors::updateButtons()
ui->btnEditorInstructors->setEnabled(false); ui->btnEditorInstructors->setEnabled(false);
} }
} }
void ViewerInstructors::dialog_EditorInstructors()
{
dlgRedactor = new DialogRedactorInstructors(connectorToServer, adminMode, this);
dlgRedactor->exec();
if(dlgRedactor)
{
delete dlgRedactor;
dlgRedactor = nullptr;
}
if(authComplited)
loadInstructorsFromDB();
connectorToServer->sendQueryBlockAuth(false, "EditorInstructors");
}

View File

@@ -29,21 +29,29 @@ protected:
public slots: public slots:
void slot_receiveMessage(ClientMessage clientMessage); void slot_receiveMessage(ClientMessage clientMessage);
void slot_checkTryBlockResult(bool result, QString type);
public Q_SLOTS: public Q_SLOTS:
void on_btnEditorInstructors_clicked(); void on_btnEditorInstructors_clicked();
void on_treeWidgetItemClicked(QTreeWidgetItem *item, int column); void on_treeWidgetCurrentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
Q_SIGNALS: Q_SIGNALS:
//сигнал о выборе инструктора //сигнал о выборе инструктора
void signal_instructorSelected(int id_instructor); void signal_instructorSelected(int id_instructor);
void signal_needShowWait(bool flNeed);
private: private:
void updateButtons() override; void updateButtons() override;
void dialog_EditorInstructors();
private: private:
DialogRedactorInstructors* dlgRedactor; DialogRedactorInstructors* dlgRedactor;
bool flTryEditorInstructors;
private: private:
Ui::ViewerInstructors *ui; Ui::ViewerInstructors *ui;
}; };

View File

@@ -29,7 +29,10 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
flTryConnectToServer(false), flTryConnectToServer(false),
cntTryConnectToServer(0), cntTryConnectToServer(0),
flTryLogin(false), flTryLogin(false),
flTryReceiveFIM(false),
flTryReceiveAMM(false),
language(languageENG), language(languageENG),
versionStr("..."),
ui(new Ui::InstructorsAndTraineesWidget) ui(new Ui::InstructorsAndTraineesWidget)
{ {
ui->setupUi(this); ui->setupUi(this);
@@ -50,10 +53,16 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
connectorToServer = new ConnectorToServer(); connectorToServer = new ConnectorToServer();
connect(connectorToServer, &ConnectorToServer::sigLoginResult, this, &InstructorsAndTraineesWidget::slot_checkLoginResult); connect(connectorToServer, &ConnectorToServer::sigLoginResult, this, &InstructorsAndTraineesWidget::slot_checkLoginResult);
connect(connectorToServer, &ConnectorToServer::sigDeLoginResult, this, &InstructorsAndTraineesWidget::slot_checkDeLoginResult); connect(connectorToServer, &ConnectorToServer::sigDeLoginResult, this, &InstructorsAndTraineesWidget::slot_checkDeLoginResult);
connect(connectorToServer, &ConnectorToServer::sigServerBlocked, this, &InstructorsAndTraineesWidget::slot_ServerBlocked); connect(connectorToServer, &ConnectorToServer::sigServerBlocked, this, &InstructorsAndTraineesWidget::slot_ServerBlocked);
connect(connectorToServer, &ConnectorToServer::sigErrorAuth, this, &InstructorsAndTraineesWidget::slot_ErrorAuth); connect(connectorToServer, &ConnectorToServer::sigErrorAuth, this, &InstructorsAndTraineesWidget::slot_ErrorAuth);
connect(connectorToServer, &ConnectorToServer::signal_SetVersion, this, &InstructorsAndTraineesWidget::slot_SetVersion); connect(connectorToServer, &ConnectorToServer::signal_SetVersion, this, &InstructorsAndTraineesWidget::slot_SetVersion);
connect(connectorToServer, &ConnectorToServer::signal_AnswerDocsChanged,this, &InstructorsAndTraineesWidget::slot_AnswerDocsChanged); connect(connectorToServer, &ConnectorToServer::signal_AnswerDocsChanged,this, &InstructorsAndTraineesWidget::slot_AnswerDocsChanged);
connect(connectorToServer, &ConnectorToServer::signal_ServerBlockState, this, &InstructorsAndTraineesWidget::slot_ServerBlockState);
connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksFIM, this, &InstructorsAndTraineesWidget::slot_UpdateTasksFIM);
connect(connectorToServer, &ConnectorToServer::signal_UpdateTasksAMM, this, &InstructorsAndTraineesWidget::slot_UpdateTasksAMM);
messangerController = new MessangerController(connectorToServer, this); messangerController = new MessangerController(connectorToServer, this);
@@ -65,7 +74,9 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
connect(connectorToServer, &ConnectorToServer::signal_ConnectedToServer, this, &InstructorsAndTraineesWidget::slot_ConnectedToServer); connect(connectorToServer, &ConnectorToServer::signal_ConnectedToServer, this, &InstructorsAndTraineesWidget::slot_ConnectedToServer);
connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, this, &InstructorsAndTraineesWidget::slot_traineeSelected); connect(viewerTrainees, &ViewerTrainees::signal_traineeSelected, this, &InstructorsAndTraineesWidget::slot_traineeSelected);
connect(viewerTrainees, &ViewerTrainees::signal_needShowWait, this, &InstructorsAndTraineesWidget::slot_needShowWait);
connect(viewerInstructors, &ViewerInstructors::signal_instructorSelected, this, &InstructorsAndTraineesWidget::slot_instructorSelected); connect(viewerInstructors, &ViewerInstructors::signal_instructorSelected, this, &InstructorsAndTraineesWidget::slot_instructorSelected);
connect(viewerInstructors, &ViewerInstructors::signal_needShowWait, this, &InstructorsAndTraineesWidget::slot_needShowWait);
connect(messangerController, &MessangerController::signal_receiveMessage_fromInstructor, viewerInstructors, &ViewerInstructors::slot_receiveMessage); connect(messangerController, &MessangerController::signal_receiveMessage_fromInstructor, viewerInstructors, &ViewerInstructors::slot_receiveMessage);
connect(messangerController, &MessangerController::signal_receiveMessage_fromTrainee, viewerTrainees, &ViewerTrainees::slot_receiveMessage); connect(messangerController, &MessangerController::signal_receiveMessage_fromTrainee, viewerTrainees, &ViewerTrainees::slot_receiveMessage);
@@ -85,10 +96,10 @@ InstructorsAndTraineesWidget::InstructorsAndTraineesWidget(QWidget *parent) :
ui->groupBox_Instructors->setMinimumHeight(200); ui->groupBox_Instructors->setMinimumHeight(200);
ui->groupBox_Instructors->setMaximumHeight(300); ui->groupBox_Instructors->setMaximumHeight(300);
ui->groupBox_Trainees->setMinimumHeight(400); ui->groupBox_Trainees->setMinimumHeight(500);
ui->groupBox_Trainees->setMinimumWidth(600); ui->groupBox_Trainees->setMinimumWidth(1000);
ui->groupBox_Instructors->setMinimumWidth(600); ui->groupBox_Instructors->setMinimumWidth(1000);
//Доступность кнопок //Доступность кнопок
@@ -156,6 +167,7 @@ void InstructorsAndTraineesWidget::changeEvent(QEvent *event)
updateLabelLoggedInInstructor(instructorLoggedInLocal); updateLabelLoggedInInstructor(instructorLoggedInLocal);
updateLabelServer(); updateLabelServer();
updateLabelVersion();
} }
} }
@@ -194,7 +206,7 @@ QString InstructorsAndTraineesWidget::loadStyleSheet()
void InstructorsAndTraineesWidget::slot_LanguageChanged(QString language) void InstructorsAndTraineesWidget::slot_LanguageChanged(QString language)
{ {
qtLanguageTranslator.load(QString(QStringLiteral("translations/InstructorsAndTraineesWidget_")) + language, QStringLiteral(".")); qtLanguageTranslator.load(QString(QStringLiteral("translations/RRJServer_")) + language, QStringLiteral("."));
qApp->installTranslator(&qtLanguageTranslator); qApp->installTranslator(&qtLanguageTranslator);
emit signal_LanguageChanged(language); emit signal_LanguageChanged(language);
@@ -209,6 +221,10 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
{ {
if (serverAuth->Result) if (serverAuth->Result)
{ {
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_reInitMessangerByUsers,messangerController,&MessangerController::slot_reinitMessangers);
instructorLoggedInLocal.setLogin(serverAuth->Login); instructorLoggedInLocal.setLogin(serverAuth->Login);
instructorLoggedInLocal.setName(serverAuth->ClientName); instructorLoggedInLocal.setName(serverAuth->ClientName);
instructorLoggedInLocal.setID(serverAuth->Id.toInt()); instructorLoggedInLocal.setID(serverAuth->Id.toInt());
@@ -234,13 +250,15 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
messangerController->setUserLocalGUI_ID(serverAuth->Id.toInt()); messangerController->setUserLocalGUI_ID(serverAuth->Id.toInt());
/*
connectorToServer->sendQueryTasksXML("fim"); connectorToServer->sendQueryTasksXML("fim");
connectorToServer->sendQueryTasksXML("amm"); connectorToServer->sendQueryTasksXML("amm");
*/
viewerTrainees->activate(); viewerTrainees->activate();
viewerInstructors->activate(); viewerInstructors->activate();
waitAnimationWidget->hideWithStop(); //waitAnimationWidget->hideWithStop();
flTryLogin = false; flTryLogin = false;
} }
@@ -248,6 +266,8 @@ void InstructorsAndTraineesWidget::slot_checkLoginResult(ServerAuthorization *se
{ {
//waitAnimationWidget->hideWithStop(); //waitAnimationWidget->hideWithStop();
//ui->btnAuthorizationInstructor->setChecked(false); //ui->btnAuthorizationInstructor->setChecked(false);
flTryReceiveFIM = false;
flTryReceiveAMM = false;
} }
} }
@@ -255,6 +275,10 @@ void InstructorsAndTraineesWidget::slot_checkDeLoginResult(ServerDeAuthorization
{ {
if (serverDeAuth->Result) if (serverDeAuth->Result)
{ {
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_reInitMessangerByUsers,messangerController,&MessangerController::slot_reinitMessangers);
instructorLoggedInLocal.setLogin(QStringLiteral("")); instructorLoggedInLocal.setLogin(QStringLiteral(""));
instructorLoggedInLocal.setName(QStringLiteral("")); instructorLoggedInLocal.setName(QStringLiteral(""));
instructorLoggedInLocal.setIsAdmin(false); instructorLoggedInLocal.setIsAdmin(false);
@@ -270,10 +294,13 @@ void InstructorsAndTraineesWidget::slot_checkDeLoginResult(ServerDeAuthorization
ui->btnPersonalCard->setEnabled(false); ui->btnPersonalCard->setEnabled(false);
updateLabelLoggedInInstructor(instructorLoggedInLocal); updateLabelLoggedInInstructor(instructorLoggedInLocal);
waitAnimationWidget->hideWithStop();
} }
else else
{ {
ui->btnAuthorizationInstructor->setChecked(true); ui->btnAuthorizationInstructor->setChecked(true);
waitAnimationWidget->hideWithStop();
SpecMsgBox::CriticalClose(this, tr("Instructor deauthorization") + "\n" + tr("Error!")); SpecMsgBox::CriticalClose(this, tr("Instructor deauthorization") + "\n" + tr("Error!"));
} }
} }
@@ -283,10 +310,12 @@ void InstructorsAndTraineesWidget::slot_ServerBlocked()
if(flTryLogin) if(flTryLogin)
{ {
flTryLogin = false; flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
ui->btnAuthorizationInstructor->setChecked(false); ui->btnAuthorizationInstructor->setChecked(false);
SpecMsgBox::WarningClose(this, tr("Instructor authorization.") + "\n" + tr("Server blocked!")); SpecMsgBox::WarningClose(this, tr("Instructor authorization is temporarily unavailable.") + "\n" + tr("Server blocked!") + "\n" + tr("Try again later."));
} }
} }
@@ -295,6 +324,8 @@ void InstructorsAndTraineesWidget::slot_ErrorAuth(QString error)
if(flTryLogin) if(flTryLogin)
{ {
flTryLogin = false; flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
waitAnimationWidget->hideWithStop(); waitAnimationWidget->hideWithStop();
ui->btnAuthorizationInstructor->setChecked(false); ui->btnAuthorizationInstructor->setChecked(false);
@@ -324,8 +355,8 @@ void InstructorsAndTraineesWidget::slot_ErrorAuth(QString error)
void InstructorsAndTraineesWidget::slot_SetVersion(StreamingVersionData *serverVersion) void InstructorsAndTraineesWidget::slot_SetVersion(StreamingVersionData *serverVersion)
{ {
QString viewName = serverVersion->getViewName(); versionStr = serverVersion->getViewName();
ui->lblVersionText->setText(viewName); ui->lblVersionText->setText(versionStr);
} }
void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state) void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
@@ -335,8 +366,6 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
ui->btnConnectionToServer->setEnabled(false); ui->btnConnectionToServer->setEnabled(false);
ui->btnAuthorizationInstructor->setEnabled(true); ui->btnAuthorizationInstructor->setEnabled(true);
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png")));
updateLabelLoggedInInstructor(instructorLoggedInLocal); updateLabelLoggedInInstructor(instructorLoggedInLocal);
flTryConnectToServer = false; flTryConnectToServer = false;
@@ -352,7 +381,6 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
//ui->btnConnectionToServer->setEnabled(true); //ui->btnConnectionToServer->setEnabled(true);
ui->btnAuthorizationInstructor->setEnabled(false); ui->btnAuthorizationInstructor->setEnabled(false);
ui->btnAuthorizationInstructor->setChecked(false); ui->btnAuthorizationInstructor->setChecked(false);
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png")));
viewerInstructors->setAuthComplited(false); viewerInstructors->setAuthComplited(false);
viewerTrainees->setAuthComplited(false); viewerTrainees->setAuthComplited(false);
@@ -416,7 +444,8 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
if(!flTryConnectToServer) if(!flTryConnectToServer)
{ {
WidgetTools::closeAllChildWidgets(this, "SpecMsgBox"); WidgetTools::closeAllChildWidgets(this, "SpecMsgBox");
SpecMsgBox::WarningClose(this, tr("The server is not available!")); waitAnimationWidget->hideWithStop();
SpecMsgBox::WarningClose(this, tr("The server is not available!"));
} }
} }
else else
@@ -426,6 +455,8 @@ void InstructorsAndTraineesWidget::slot_ConnectedToServer(bool state)
updateLabelServer(); updateLabelServer();
flTryLogin = false; flTryLogin = false;
flTryReceiveFIM = false;
flTryReceiveAMM = false;
} }
} }
@@ -473,6 +504,39 @@ void InstructorsAndTraineesWidget::slot_TryConnectToServer()
connectorToServer->SetConnectToServer(); connectorToServer->SetConnectToServer();
} }
void InstructorsAndTraineesWidget::slot_ServerBlockState(bool state)
{
updateLabelServer();
}
void InstructorsAndTraineesWidget::slot_needShowWait(bool flNeed)
{
if(flNeed)
waitAnimationWidget->showWithPlay();
else
waitAnimationWidget->hideWithStop();
}
void InstructorsAndTraineesWidget::slot_UpdateTasksAMM()
{
if(flTryReceiveAMM)
{
flTryReceiveAMM = false;
if(!flTryReceiveAMM && !flTryReceiveFIM)
waitAnimationWidget->hideWithStop();
}
}
void InstructorsAndTraineesWidget::slot_UpdateTasksFIM()
{
if(flTryReceiveFIM)
{
flTryReceiveFIM = false;
if(!flTryReceiveAMM && !flTryReceiveFIM)
waitAnimationWidget->hideWithStop();
}
}
bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent) bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent)
{ {
dlgAuthorization = new DialogAuthorization(parent); dlgAuthorization = new DialogAuthorization(parent);
@@ -500,6 +564,8 @@ bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent
waitAnimationWidget->showWithPlay(); waitAnimationWidget->showWithPlay();
flTryLogin = true; flTryLogin = true;
flTryReceiveFIM = true;
flTryReceiveAMM = true;
connectorToServer->sendAuthorizationInstructorLocal(login, password); connectorToServer->sendAuthorizationInstructorLocal(login, password);
@@ -523,7 +589,7 @@ bool InstructorsAndTraineesWidget::authorizationInstructorDialog(QWidget* parent
} }
bool InstructorsAndTraineesWidget::deAuthorizationInstructor(QString login) bool InstructorsAndTraineesWidget::deAuthorizationInstructor(QString login)
{ {
connectorToServer->sendDeAuthorizationInstructorLocal(login); connectorToServer->sendDeAuthorizationInstructorLocal(login);
return true; return true;
} }
@@ -558,9 +624,11 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked()
{//Авторизация Инструктора локальная (Администратора) {//Авторизация Инструктора локальная (Администратора)
if(authorizationInstructorDialog(this)) if(authorizationInstructorDialog(this))
{ {
/*
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); connect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
connect(connectorToServer,&ConnectorToServer::signal_reInitMessangerByUsers,messangerController,&MessangerController::slot_reinitMessangers); connect(connectorToServer,&ConnectorToServer::signal_reInitMessangerByUsers,messangerController,&MessangerController::slot_reinitMessangers);
*/
} }
else else
ui->btnAuthorizationInstructor->setChecked(false); ui->btnAuthorizationInstructor->setChecked(false);
@@ -569,11 +637,15 @@ void InstructorsAndTraineesWidget::on_btnAuthorizationInstructor_clicked()
{//ДеАвторизация Инструктора локальная (Администратора) {//ДеАвторизация Инструктора локальная (Администратора)
if(authorizationIsCompleted()) if(authorizationIsCompleted())
{ {
waitAnimationWidget->showWithPlay();
if(deAuthorizationInstructor(instructorLoggedInLocal.getLogin())) if(deAuthorizationInstructor(instructorLoggedInLocal.getLogin()))
{ {
/*
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI); disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerInstructors,&ViewerInstructors::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI); disconnect(connectorToServer,&ConnectorToServer::signal_UpdateDB,viewerTrainees,&ViewerTrainees::slot_NeedUpdateUI);
disconnect(connectorToServer,&ConnectorToServer::signal_reInitMessangerByUsers,messangerController,&MessangerController::slot_reinitMessangers); disconnect(connectorToServer,&ConnectorToServer::signal_reInitMessangerByUsers,messangerController,&MessangerController::slot_reinitMessangers);
*/
viewerTrainees->deactivate(); viewerTrainees->deactivate();
viewerInstructors->deactivate(); viewerInstructors->deactivate();
@@ -620,14 +692,35 @@ void InstructorsAndTraineesWidget::updateLabelServer()
{ {
if(connectorToServer->getIsConnected()) if(connectorToServer->getIsConnected())
{ {
ServerSettings serverSettings = connectorToServer->getServerSettings(); if(connectorToServer->getServerBlockState())
ui->lblServer->setText(tr("connected") + " " + serverSettings.Address + " : " +serverSettings.Port); {//Заблокирован!
ServerSettings serverSettings = connectorToServer->getServerSettings();
ui->lblServer->setText(tr("connected") + " " + serverSettings.Address + " : " +serverSettings.Port + ", " + tr("blocked"));
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/lock.png")));
}
else
{
ServerSettings serverSettings = connectorToServer->getServerSettings();
ui->lblServer->setText(tr("connected") + " " + serverSettings.Address + " : " +serverSettings.Port);
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGreen.png")));
}
} }
else else
{
ui->lblServer->setText(tr("not connected")); ui->lblServer->setText(tr("not connected"));
ui->lblDBisConnected->setPixmap(QPixmap(QStringLiteral(":/resources/icons/circleGray.png")));
}
} }
} }
void InstructorsAndTraineesWidget::updateLabelVersion()
{
ui->lblVersionText->setText(versionStr);
}
void InstructorsAndTraineesWidget::setLanguageInterfase() void InstructorsAndTraineesWidget::setLanguageInterfase()
{ {
ServerSettings settings; ServerSettings settings;
@@ -635,12 +728,12 @@ void InstructorsAndTraineesWidget::setLanguageInterfase()
if(settings.Language == "ENG") if(settings.Language == "ENG")
{ {
qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + languageENG, "."); qtLanguageTranslator.load(QString("translations/RRJServer_") + languageENG, ".");
language = languageENG; language = languageENG;
} }
else else
{ {
qtLanguageTranslator.load(QString("translations/InstructorsAndTraineesWidget_") + languageRUS, "."); qtLanguageTranslator.load(QString("translations/RRJServer_") + languageRUS, ".");
language = languageRUS; language = languageRUS;
} }
@@ -656,6 +749,7 @@ void InstructorsAndTraineesWidget::on_btnSettings_clicked()
connect(dlgSettings, &DialogSettings::signal_LanguageChanged, this, &InstructorsAndTraineesWidget::slot_LanguageChanged); connect(dlgSettings, &DialogSettings::signal_LanguageChanged, this, &InstructorsAndTraineesWidget::slot_LanguageChanged);
connect(dlgSettings, &DialogSettings::signal_UpdateStyleSheet, this, &InstructorsAndTraineesWidget::slot_UpdateStyleSheet); connect(dlgSettings, &DialogSettings::signal_UpdateStyleSheet, this, &InstructorsAndTraineesWidget::slot_UpdateStyleSheet);
//connect(dlgSettings, &DialogSettings::signal_needShowWait, this, &InstructorsAndTraineesWidget::slot_needShowWait);
switch( dlgSettings->exec() ) switch( dlgSettings->exec() )
{ {

View File

@@ -68,6 +68,13 @@ public Q_SLOTS:
void slot_TryConnectToServer(); void slot_TryConnectToServer();
void slot_ServerBlockState(bool state);
void slot_needShowWait(bool flNeed);
void slot_UpdateTasksAMM();
void slot_UpdateTasksFIM();
Q_SIGNALS: Q_SIGNALS:
//сигнал смены языка //сигнал смены языка
void signal_LanguageChanged(QString language); void signal_LanguageChanged(QString language);
@@ -89,6 +96,7 @@ private:
bool authorizationIsCompleted(); bool authorizationIsCompleted();
void updateLabelLoggedInInstructor(Instructor& instructor); void updateLabelLoggedInInstructor(Instructor& instructor);
void updateLabelServer(); void updateLabelServer();
void updateLabelVersion();
void setLanguageInterfase(); void setLanguageInterfase();
private: private:
@@ -113,10 +121,14 @@ private:
int cntTryConnectToServer; int cntTryConnectToServer;
bool flTryLogin; bool flTryLogin;
bool flTryReceiveFIM;
bool flTryReceiveAMM;
QTranslator qtLanguageTranslator; QTranslator qtLanguageTranslator;
QString language; QString language;
QString versionStr;
Ui::InstructorsAndTraineesWidget *ui; Ui::InstructorsAndTraineesWidget *ui;
}; };

View File

@@ -108,7 +108,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Trainee editor</string> <string>Editor of trainees</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="InstructorsAndTrainees.qrc"> <iconset resource="InstructorsAndTrainees.qrc">
@@ -134,7 +134,7 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Instructor editor</string> <string>Editor of instructors</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset resource="InstructorsAndTrainees.qrc"> <iconset resource="InstructorsAndTrainees.qrc">

View File

@@ -3,6 +3,7 @@
#include <QAbstractScrollArea> #include <QAbstractScrollArea>
#include <QMessageBox> #include <QMessageBox>
#include <QLabel> #include <QLabel>
#include <QScrollBar>
#include "instructor.h" #include "instructor.h"
#include "messangerwidget.h" #include "messangerwidget.h"
#include "ui_messangerwidget.h" #include "ui_messangerwidget.h"
@@ -85,6 +86,8 @@ void MessangerWidget::addTabDialogMessenger(User user)
oneDialogMessenger = new OneDialogMessenger(userLocalGUI, userRemote, this); oneDialogMessenger = new OneDialogMessenger(userLocalGUI, userRemote, this);
oneDialogMessenger->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
ui->verticalLayout_ListMsg->addWidget(oneDialogMessenger); ui->verticalLayout_ListMsg->addWidget(oneDialogMessenger);
//Обновляем заголовок //Обновляем заголовок

View File

@@ -85,7 +85,7 @@
<string/> <string/>
</property> </property>
<property name="pixmap"> <property name="pixmap">
<pixmap resource="../../ServerLMS/ServerLMS.qrc">:/resources/icons/circleGray.png</pixmap> <pixmap resource="../InstructorsAndTrainees.qrc">:/resources/icons/circleGray.png</pixmap>
</property> </property>
</widget> </widget>
</item> </item>
@@ -128,7 +128,7 @@
<string>Send</string> <string>Send</string>
</property> </property>
<property name="icon"> <property name="icon">
<iconset> <iconset resource="../InstructorsAndTrainees.qrc">
<normaloff>:/resources/icons/sendMsg.png</normaloff>:/resources/icons/sendMsg.png</iconset> <normaloff>:/resources/icons/sendMsg.png</normaloff>:/resources/icons/sendMsg.png</iconset>
</property> </property>
<property name="iconSize"> <property name="iconSize">
@@ -149,7 +149,7 @@
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="../../ServerLMS/ServerLMS.qrc"/> <include location="../InstructorsAndTrainees.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

View File

@@ -139,6 +139,9 @@
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="textInteractionFlags">
<set>Qt::NoTextInteraction</set>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>

View File

@@ -15,6 +15,12 @@ OneDialogMessenger::OneDialogMessenger(User userLocalGUI, User userRemote, QWidg
setWordWrap(true); setWordWrap(true);
setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn); setVerticalScrollBarPolicy(Qt::ScrollBarPolicy::ScrollBarAlwaysOn);
setVerticalScrollMode(ScrollMode::ScrollPerPixel);
verticalScrollBar()->setSingleStep(10);
this->setFocusPolicy(Qt::FocusPolicy::NoFocus);
} }
OneDialogMessenger::~OneDialogMessenger() OneDialogMessenger::~OneDialogMessenger()

View File

@@ -1,5 +1,6 @@
#include "metatypes.h" #include "metatypes.h"
void registerMetaType() void registerMetaType()
{ {
qRegisterMetaType<QList<Instructor>>("QList<Instructor>"); qRegisterMetaType<QList<Instructor>>("QList<Instructor>");
@@ -9,9 +10,9 @@ void registerMetaType()
qRegisterMetaType<QList<Classroom>>("QList<Classroom>"); qRegisterMetaType<QList<Classroom>>("QList<Classroom>");
qRegisterMetaType<QList<Module*>>("QList<Module*>"); qRegisterMetaType<QList<Module*>>("QList<Module*>");
qRegisterMetaType<QList<TaskAmmFim>>("QList<TaskAmmFim>"); qRegisterMetaType<QList<TaskAmmFim>>("QList<TaskAmmFim>");
qRegisterMetaType<MapListsTasksAllTraineeType>("MapListsTasksAllTraineeType");
qRegisterMetaType<PacketType>("PacketType"); qRegisterMetaType<PacketType>("PacketType");
qRegisterMetaType<ClientMessage>("ClientMessage"); qRegisterMetaType<ClientMessage>("ClientMessage");
qRegisterMetaType<QList<QTreeWidgetItem*>>("QList<QTreeWidgetItem*>"); qRegisterMetaType<QList<QTreeWidgetItem*>>("QList<QTreeWidgetItem*>");
qRegisterMetaType<QList<SubProc>>("QList<SubProc>"); qRegisterMetaType<QList<SubProc>>("QList<SubProc>");
} }

View File

@@ -13,6 +13,8 @@
#include "tools.h" #include "tools.h"
#include "Datas.h" #include "Datas.h"
typedef QMap<int, QList<TaskAmmFim>> MapListsTasksAllTraineeType;
void registerMetaType(); void registerMetaType();
Q_DECLARE_METATYPE(QList<Instructor>) Q_DECLARE_METATYPE(QList<Instructor>)
@@ -22,10 +24,10 @@ Q_DECLARE_METATYPE(QList<Computer>)
Q_DECLARE_METATYPE(QList<Classroom>) Q_DECLARE_METATYPE(QList<Classroom>)
Q_DECLARE_METATYPE(QList<Module*>) Q_DECLARE_METATYPE(QList<Module*>)
Q_DECLARE_METATYPE(QList<TaskAmmFim>) Q_DECLARE_METATYPE(QList<TaskAmmFim>)
Q_DECLARE_METATYPE(MapListsTasksAllTraineeType)
Q_DECLARE_METATYPE(PacketType) Q_DECLARE_METATYPE(PacketType)
Q_DECLARE_METATYPE(ClientMessage) Q_DECLARE_METATYPE(ClientMessage)
Q_DECLARE_METATYPE(QList<QTreeWidgetItem*>) Q_DECLARE_METATYPE(QList<QTreeWidgetItem*>)
Q_DECLARE_METATYPE(QList<SubProc>) Q_DECLARE_METATYPE(QList<SubProc>)
#endif // METATYPES_H #endif // METATYPES_H

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

View File

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Some files were not shown because too many files have changed in this diff Show More