Merge branch 'DEV' into CFI-Update

This commit is contained in:
semenov
2026-01-29 17:27:21 +03:00
14 changed files with 102 additions and 54 deletions

View File

@@ -9,10 +9,12 @@ kanban-plugin: board
- [ ] GUI: Сделать кнопку перезапроса общих списков FIM (по аналогии с АММ) - [ ] GUI: Сделать кнопку перезапроса общих списков FIM (по аналогии с АММ)
- [ ] /RUS/Scens/tasksFIM.xml возможно изменится структура - [ ] /RUS/Scens/tasksFIM.xml возможно изменится структура
- [ ] выгрузка назначенных задач с оценками в эксель таблицу или любой другой человекочитаемый вид - [ ] выгрузка назначенных задач с оценками в эксель таблицу или любой другой человекочитаемый вид
- [ ] Текстовый поиск в задачах
## Completed ## Completed
- [ ] Не влазиют слишком большие сообщения
- [ ] FIM процедура добавить кнопку сделать новой - [ ] FIM процедура добавить кнопку сделать новой
- [ ] Не видно новых пришедших сообщений, если выбран другой Юзер - [ ] Не видно новых пришедших сообщений, если выбран другой Юзер
- [ ] При смене УЗ в ГУИ остается история переписки в мессенджере. При этом Имя инструктора в диалоге подменяется. (Путается только в ГУИ!) - [ ] При смене УЗ в ГУИ остается история переписки в мессенджере. При этом Имя инструктора в диалоге подменяется. (Путается только в ГУИ!)
@@ -58,6 +60,7 @@ kanban-plugin: board
- [ ] Учет ширины скрола на деревьях (появляется если дерево больше окна) - [ ] Учет ширины скрола на деревьях (появляется если дерево больше окна)
- [ ] Универсальный пересчет ширин колонок деревьев - [ ] Универсальный пересчет ширин колонок деревьев
- [ ] При обновлении деревьев слетает назначенная колонка сортировки - [ ] При обновлении деревьев слетает назначенная колонка сортировки
- [ ] В сообщение о неудачном подключении к PostgreSQL добавить: PSQL не установлен
## Server ## Server
@@ -66,17 +69,14 @@ kanban-plugin: board
(Так как сейчас может вызвать проблемы при смене логина юзера!!!) (Так как сейчас может вызвать проблемы при смене логина юзера!!!)
- [ ] Зарефакторить databaselms_PostgreSQL.cpp - [ ] Зарефакторить databaselms_PostgreSQL.cpp
(возможно, нужно использовать транзакции при восстановлении БД!) (возможно, нужно использовать транзакции при восстановлении БД!)
- [ ] В сообщение о неудачном подключении к PostgreSQL добавить: PSQL не установлен
## GUI Messenger ## GUI Messenger
- [ ] Не влазиют слишком большие сообщения
## GUI общие ## GUI общие
- [ ] Текстовый поиск в задачах
- [ ] Общий список АММ. автопролистывание вниз, если раскрывается дерево внизу - [ ] Общий список АММ. автопролистывание вниз, если раскрывается дерево внизу

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);

View File

@@ -5,6 +5,7 @@
#include <QThread> #include <QThread>
#include <QResizeEvent> #include <QResizeEvent>
#include <QScrollBar> #include <QScrollBar>
#include <QAbstractItemView>
#include "ammtaskswidget.h" #include "ammtaskswidget.h"
#include "ui_ammtaskswidget.h" #include "ui_ammtaskswidget.h"
#include "checkertask.h" #include "checkertask.h"
@@ -100,6 +101,11 @@ AMMtasksWidget::AMMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
ui->label_Actual->setVisible(false); ui->label_Actual->setVisible(false);
ui->btnDocsUpdating->setVisible(false); ui->btnDocsUpdating->setVisible(false);
} }
treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->verticalScrollBar()->setSingleStep(10);
treeWidget->setHorizontalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->horizontalScrollBar()->setSingleStep(10);
} }
AMMtasksWidget::~AMMtasksWidget() AMMtasksWidget::~AMMtasksWidget()

View File

@@ -85,6 +85,11 @@ FIMtasksWidget::FIMtasksWidget(ConnectorToServer* connectorToServer, TypeListTre
//ui->verticalLayout->setAlignment(Qt::AlignmentFlag::AlignBottom); //ui->verticalLayout->setAlignment(Qt::AlignmentFlag::AlignBottom);
//ui->horizontalLayout_3->setAlignment(Qt::AlignmentFlag::AlignLeft); //ui->horizontalLayout_3->setAlignment(Qt::AlignmentFlag::AlignLeft);
} }
treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->verticalScrollBar()->setSingleStep(10);
treeWidget->setHorizontalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->horizontalScrollBar()->setSingleStep(10);
} }
FIMtasksWidget::~FIMtasksWidget() FIMtasksWidget::~FIMtasksWidget()

View File

@@ -16,6 +16,11 @@ ListSubProc::ListSubProc(QWidget *parent) :
treeWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus); treeWidget->setFocusPolicy(Qt::FocusPolicy::NoFocus);
treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->verticalScrollBar()->setSingleStep(10);
treeWidget->setHorizontalScrollMode(QAbstractItemView::ScrollMode::ScrollPerPixel);
treeWidget->horizontalScrollBar()->setSingleStep(10);
preparationTreeWidget(); preparationTreeWidget();
} }

View File

@@ -98,10 +98,21 @@ void PersonalCardTrainee::loadInfo()
TimingOfTrainee timing = trainee.getTiming(); TimingOfTrainee timing = trainee.getTiming();
QTime time0;
time0.setHMS(0, 0, 0);
if(timing.getOperatingTime() == time0)
{
ui->lblTimeOperation->setText(timing.getOperatingTimeS());
ui->lblLoginTime->setText("---");
ui->lblTimeExit->setText("---");
}
else
{
ui->lblTimeOperation->setText(timing.getOperatingTimeS()); ui->lblTimeOperation->setText(timing.getOperatingTimeS());
ui->lblLoginTime->setText(timing.getEntryTimeS()); ui->lblLoginTime->setText(timing.getEntryTimeS());
ui->lblTimeExit->setText(timing.getExitTimeS()); ui->lblTimeExit->setText(timing.getExitTimeS());
} }
}
void PersonalCardTrainee::slot_countTasksAMMforTraineeChanged(int trainee_id, QString statAMM) void PersonalCardTrainee::slot_countTasksAMMforTraineeChanged(int trainee_id, QString statAMM)
{ {

View File

@@ -24,7 +24,7 @@ void CfiController::unLockAccessToCfiXML()
} }
bool CfiController::parsingCfiXML(QMap<int, CfiObject>& mapCfiObjects) bool CfiController::parsingCfiXML(QMap<QString, CfiObject>& mapCfiObjects)
{ {
QMutexLocker locker(&mtxAccess); QMutexLocker locker(&mtxAccess);
@@ -62,8 +62,8 @@ bool CfiController::updateCfiXML(const QByteArray &array)
if(! Tools::loadByteArrayXMLtoDOM(array, &docCfiListDOM_New)) if(! Tools::loadByteArrayXMLtoDOM(array, &docCfiListDOM_New))
return false; return false;
QMap<int, CfiObject> mapCfiObjects_Orig; QMap<QString, CfiObject> mapCfiObjects_Orig;
QMap<int, CfiObject> mapCfiObjects_New; QMap<QString, CfiObject> mapCfiObjects_New;
if(!parsingCfiXML_DOM(docCfiListDOM_Orig, mapCfiObjects_Orig)) if(!parsingCfiXML_DOM(docCfiListDOM_Orig, mapCfiObjects_Orig))
return false; return false;
@@ -111,7 +111,7 @@ double CfiController::roundDoubleVal(double value, int cntNumAfterPoint)
return round(value * pow(10, cntNumAfterPoint)) / pow(10, cntNumAfterPoint); return round(value * pow(10, cntNumAfterPoint)) / pow(10, cntNumAfterPoint);
} }
bool CfiController::parsingCfiXML_DOM(QDomDocument &domDoc, QMap<int, CfiObject>& mapCfiObjects) bool CfiController::parsingCfiXML_DOM(QDomDocument &domDoc, QMap<QString, CfiObject>& mapCfiObjects)
{ {
QDomElement CFIObjectsElement = domDoc.firstChildElement("CFIObjects"); QDomElement CFIObjectsElement = domDoc.firstChildElement("CFIObjects");
if(CFIObjectsElement.isNull()) if(CFIObjectsElement.isNull())
@@ -138,7 +138,7 @@ bool CfiController::parsingCfiXML_DOM(QDomDocument &domDoc, QMap<int, CfiObject>
//атрибуты CFIObject //атрибуты CFIObject
QDomNamedNodeMap nodeMapOneCFIObject = oneCFIObjectElement.attributes(); QDomNamedNodeMap nodeMapOneCFIObject = oneCFIObjectElement.attributes();
cfiObj.setId(nodeMapOneCFIObject.namedItem("id").nodeValue().toInt()); cfiObj.setGuid(nodeMapOneCFIObject.namedItem("guid").nodeValue());
cfiObj.setIsChanged(nodeMapOneCFIObject.namedItem("isChanged").nodeValue() == "True" ? true : false); cfiObj.setIsChanged(nodeMapOneCFIObject.namedItem("isChanged").nodeValue() == "True" ? true : false);
//childs CFIObject //childs CFIObject
@@ -201,42 +201,54 @@ bool CfiController::parsingCfiXML_DOM(QDomDocument &domDoc, QMap<int, CfiObject>
cfiObj.setSetCameraPos(setCamPos); cfiObj.setSetCameraPos(setCamPos);
mapCfiObjects.insert(cfiObj.getId(), cfiObj); mapCfiObjects.insert(cfiObj.getGuid(), cfiObj);
} }
}while (! (oneCFIObjectElement = oneCFIObjectElement.nextSiblingElement()).isNull()); }while (! (oneCFIObjectElement = oneCFIObjectElement.nextSiblingElement()).isNull());
return true; return true;
} }
bool CfiController::merge2map(QMap<int, CfiObject> &mapCfiObjects_orig, QMap<int, CfiObject> &mapCfiObjects_new) bool CfiController::merge2map(QMap<QString, CfiObject> &mapCfiObjects_orig, QMap<QString, CfiObject> &mapCfiObjects_new)
{ {
//Проверка на удаление
for(CfiObject cfiObj : mapCfiObjects_orig)
{
QString guid = cfiObj.getGuid();
if(!mapCfiObjects_new.contains(guid))
{//Удаляем
mapCfiObjects_orig.take(guid);
}
}
//Замена, Добавление
for(CfiObject cfiObj : mapCfiObjects_new) for(CfiObject cfiObj : mapCfiObjects_new)
{ {
int id = cfiObj.getId(); QString guid = cfiObj.getGuid();
if(mapCfiObjects_orig.contains(id)) if(mapCfiObjects_orig.contains(guid))
{//Такой есть {//Такой есть
if(cfiObj.getIsChanged()) if(cfiObj.getIsChanged())
{//Заменяем {//Заменяем
mapCfiObjects_orig.take(id); mapCfiObjects_orig.take(guid);
cfiObj.setIsChanged(false); cfiObj.setIsChanged(false);
cfiObj.resetIsChangedInDomElement(); cfiObj.resetIsChangedInDomElement();
mapCfiObjects_orig.insert(id, cfiObj); mapCfiObjects_orig.insert(guid, cfiObj);
} }
} }
else else
{//Добавляем {//Добавляем
cfiObj.setIsChanged(false); cfiObj.setIsChanged(false);
cfiObj.resetIsChangedInDomElement(); cfiObj.resetIsChangedInDomElement();
mapCfiObjects_orig.insert(id, cfiObj); mapCfiObjects_orig.insert(guid, cfiObj);
} }
} }
return true; return true;
} }
bool CfiController::saveNewCfiListFile(QMap<int, CfiObject> &mapCfiObjects) bool CfiController::saveNewCfiListFile(QMap<QString, CfiObject> &mapCfiObjects)
{ {
QDomDocument commonDOM; QDomDocument commonDOM;
if(! Tools::loadFileXMLtoDOM(":/resources/blankXML/ListCFI.xml", &commonDOM)) if(! Tools::loadFileXMLtoDOM(":/resources/blankXML/ListCFI.xml", &commonDOM))

View File

@@ -18,7 +18,7 @@ public:
void unLockAccessToCfiXML(); void unLockAccessToCfiXML();
//Распарсивание файла CfiList.xml //Распарсивание файла CfiList.xml
bool parsingCfiXML(QMap<int, CfiObject>& mapCfiObjects); bool parsingCfiXML(QMap<QString, CfiObject>& mapCfiObjects);
//Слияние (обновление) с новыми данными //Слияние (обновление) с новыми данными
bool updateCfiXML(const QByteArray& array); bool updateCfiXML(const QByteArray& array);
@@ -34,19 +34,17 @@ private:
double roundDoubleVal(double value, int cntNumAfterPoint); double roundDoubleVal(double value, int cntNumAfterPoint);
bool parsingCfiXML_DOM(QDomDocument& domDoc, QMap<int, CfiObject>& mapCfiObjects); bool parsingCfiXML_DOM(QDomDocument& domDoc, QMap<QString, CfiObject>& mapCfiObjects);
bool merge2map(QMap<int, CfiObject>& mapCfiObjects_orig, QMap<int, CfiObject>& mapCfiObjects_new); bool merge2map(QMap<QString, CfiObject>& mapCfiObjects_orig, QMap<QString, CfiObject>& mapCfiObjects_new);
bool saveNewCfiListFile(QMap<int, CfiObject>& mapCfiObjects); bool saveNewCfiListFile(QMap<QString, CfiObject>& mapCfiObjects);
private: private:
UpdateController* updateController; UpdateController* updateController;
QMutex mtxAccess; QMutex mtxAccess;
//QList<CfiObject> listCfiObjects;
QLocale* germanLocale; QLocale* germanLocale;
}; };

View File

@@ -5,14 +5,14 @@ CfiObject::CfiObject()
} }
int CfiObject::getId() const QString CfiObject::getGuid() const
{ {
return id; return guid;
} }
void CfiObject::setId(int value) void CfiObject::setGuid(QString value)
{ {
id = value; guid = value;
} }
QString CfiObject::getCfiName() const QString CfiObject::getCfiName() const

View File

@@ -42,8 +42,8 @@ class CfiObject
public: public:
CfiObject(); CfiObject();
int getId() const; QString getGuid() const;
void setId(int value); void setGuid(QString value);
QString getCfiName() const; QString getCfiName() const;
void setCfiName(const QString &value); void setCfiName(const QString &value);
@@ -69,7 +69,7 @@ public:
void resetIsChangedInDomElement(); void resetIsChangedInDomElement();
private: private:
int id; QString guid;
bool isChanged; bool isChanged;
QString cfiName; QString cfiName;
QString cfi; QString cfi;

View File

@@ -75,6 +75,7 @@ DialogSettingsTray::DialogSettingsTray(ProviderDBLMS* providerDBLMS, QWidget *pa
ui->btnSave->setEnabled(false); ui->btnSave->setEnabled(false);
ui->btnCheckDB->setEnabled(true); ui->btnCheckDB->setEnabled(true);
ui->btnUpdateDocs->setEnabled(true);
flSettingsServerChanged = false; flSettingsServerChanged = false;
} }
else else
@@ -90,6 +91,7 @@ DialogSettingsTray::DialogSettingsTray(ProviderDBLMS* providerDBLMS, QWidget *pa
ui->btnSave->setEnabled(false); ui->btnSave->setEnabled(false);
ui->btnCheckDB->setEnabled(false); ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = false; flSettingsServerChanged = false;
} }
} }
@@ -217,6 +219,7 @@ void DialogSettingsTray::on_btnSave_clicked()
saveSettings(); saveSettings();
ui->btnCheckDB->setEnabled(true); ui->btnCheckDB->setEnabled(true);
ui->btnUpdateDocs->setEnabled(true);
this->accept(); this->accept();
} }
@@ -242,6 +245,7 @@ void DialogSettingsTray::on_editNameDB_textChanged(const QString &arg1)
{ {
ui->btnSave->setEnabled(true); ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false); ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true; flSettingsServerChanged = true;
} }
@@ -249,6 +253,7 @@ void DialogSettingsTray::on_editHostName_textChanged(const QString &arg1)
{ {
ui->btnSave->setEnabled(true); ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false); ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true; flSettingsServerChanged = true;
} }
@@ -256,6 +261,7 @@ void DialogSettingsTray::on_editPort_textChanged(const QString &arg1)
{ {
ui->btnSave->setEnabled(true); ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false); ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true; flSettingsServerChanged = true;
} }
@@ -263,6 +269,7 @@ void DialogSettingsTray::on_editUserName_textChanged(const QString &arg1)
{ {
ui->btnSave->setEnabled(true); ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false); ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true; flSettingsServerChanged = true;
} }
@@ -270,6 +277,7 @@ void DialogSettingsTray::on_editPassword_textChanged(const QString &arg1)
{ {
ui->btnSave->setEnabled(true); ui->btnSave->setEnabled(true);
ui->btnCheckDB->setEnabled(false); ui->btnCheckDB->setEnabled(false);
ui->btnUpdateDocs->setEnabled(false);
flSettingsServerChanged = true; flSettingsServerChanged = true;
} }

Binary file not shown.

View File

@@ -927,7 +927,7 @@ Please try again later.</source>
<message> <message>
<location filename="../LibInstructorsAndTrainees/settings/dialogversioncontrol.cpp" line="107"/> <location filename="../LibInstructorsAndTrainees/settings/dialogversioncontrol.cpp" line="107"/>
<source>Changeable: </source> <source>Changeable: </source>
<translation>Изменен: </translation> <translation>Изменяемая: </translation>
</message> </message>
<message> <message>
<location filename="../LibInstructorsAndTrainees/settings/dialogversioncontrol.cpp" line="108"/> <location filename="../LibInstructorsAndTrainees/settings/dialogversioncontrol.cpp" line="108"/>
@@ -1487,14 +1487,12 @@ Please reconnect to the server.</source>
<message> <message>
<location filename="../ProgramAWSinstructorMTD/mainwindow.ui" line="19"/> <location filename="../ProgramAWSinstructorMTD/mainwindow.ui" line="19"/>
<source>Maintenance training device RRJ-95NEW-100 Instructor&apos;s workstation</source> <source>Maintenance training device RRJ-95NEW-100 Instructor&apos;s workstation</source>
<translation>АРМ Инструктора Тренажёра процедур технического <translation>АРМ Инструктора Тренажёра процедур технического обслуживания RRJ-95NEW-100</translation>
обслуживания RRJ-95NEW-100</translation>
</message> </message>
<message> <message>
<location filename="../ProgramServerMTD/mainwindow.ui" line="20"/> <location filename="../ProgramServerMTD/mainwindow.ui" line="20"/>
<source>Maintenance training device RRJ-95NEW-100 Server</source> <source>Maintenance training device RRJ-95NEW-100 Server</source>
<translation>Сервер Тренажёра процедур технического <translation>Сервер Тренажёра процедур технического обслуживания RRJ-95NEW-100</translation>
обслуживания RRJ-95NEW-100</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -1747,81 +1745,81 @@ Please reconnect to the server.</source>
<translation>Версия материалов: </translation> <translation>Версия материалов: </translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="143"/> <location filename="../LibServer/serverlmswidget.cpp" line="145"/>
<source>Error PostgreSQL!</source> <source>Error PostgreSQL!</source>
<translation>Ошибка PostgreSQL!</translation> <translation>Ошибка PostgreSQL!</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="233"/> <location filename="../LibServer/serverlmswidget.cpp" line="238"/>
<source>Server is started!</source> <source>Server is started!</source>
<translation>Сервер запущен!</translation> <translation>Сервер запущен!</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="251"/> <location filename="../LibServer/serverlmswidget.cpp" line="256"/>
<source>Server is stoped!</source> <source>Server is stoped!</source>
<translation>Сервер остановлен!</translation> <translation>Сервер остановлен!</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="262"/> <location filename="../LibServer/serverlmswidget.cpp" line="267"/>
<source>Settings file could not be opened:</source> <source>Settings file could not be opened:</source>
<translation>Файл настроек не открыт:</translation> <translation>Файл настроек не открыт:</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="291"/> <location filename="../LibServer/serverlmswidget.cpp" line="296"/>
<source>Database settings have been changed. <source>Database settings have been changed.
The server will be restarted.</source> The server will be restarted.</source>
<translation>Настройки Базы Данных были изменены. <translation>Настройки Базы Данных были изменены.
Сервер будет перезапущен.</translation> Сервер будет перезапущен.</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="340"/> <location filename="../LibServer/serverlmswidget.cpp" line="345"/>
<source>The file could not be opened </source> <source>The file could not be opened </source>
<translation>Файл не может быть открыт </translation> <translation>Файл не может быть открыт </translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="420"/> <location filename="../LibServer/serverlmswidget.cpp" line="428"/>
<location filename="../LibServer/serverlmswidget.cpp" line="424"/> <location filename="../LibServer/serverlmswidget.cpp" line="432"/>
<source>Database connection error!</source> <source>Database connection error!</source>
<translation>Ошибка подключения Базы данных!</translation> <translation>Ошибка подключения Базы данных!</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="441"/> <location filename="../LibServer/serverlmswidget.cpp" line="449"/>
<source>Database connection OK!</source> <source>Database connection OK!</source>
<translation>База данных подключена!</translation> <translation>База данных подключена!</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="457"/> <location filename="../LibServer/serverlmswidget.cpp" line="465"/>
<location filename="../LibServer/serverlmswidget.cpp" line="462"/> <location filename="../LibServer/serverlmswidget.cpp" line="470"/>
<source>started</source> <source>started</source>
<translation>запущен</translation> <translation>запущен</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="462"/> <location filename="../LibServer/serverlmswidget.cpp" line="470"/>
<source>locked</source> <source>locked</source>
<translation>заблокирован</translation> <translation>заблокирован</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="468"/> <location filename="../LibServer/serverlmswidget.cpp" line="476"/>
<source>stoped</source> <source>stoped</source>
<translation>остановлен</translation> <translation>остановлен</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="484"/> <location filename="../LibServer/serverlmswidget.cpp" line="492"/>
<source>connected</source> <source>connected</source>
<translation>подключена</translation> <translation>подключена</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.cpp" line="493"/> <location filename="../LibServer/serverlmswidget.cpp" line="501"/>
<source>not connected</source> <source>not connected</source>
<translation>не подключен</translation> <translation>не подключен</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.h" line="115"/> <location filename="../LibServer/serverlmswidget.h" line="118"/>
<source>No Client files found!</source> <source>No Client files found!</source>
<translation>Файлы клиента не найдены!</translation> <translation>Файлы клиента не найдены!</translation>
</message> </message>
<message> <message>
<location filename="../LibServer/serverlmswidget.h" line="116"/> <location filename="../LibServer/serverlmswidget.h" line="119"/>
<source>* check Application for the presence of a folder with a build <source>* check Application for the presence of a folder with a build
* check SharedData for a folder with the base version and the name base</source> * check SharedData for a folder with the base version and the name base</source>
<translation>* проверьте Application на наличие папки со сборкой <translation>* проверьте Application на наличие папки со сборкой