Apply clang-format to Lts/Common and DTC/enum headers
- Formatted all CodeGen module files (9 files) - Formatted LtsAppDescriptor module files - Formatted LtsAppManager/AppChooser files - Applied clang-format to all DTC and enum headers across modules - Removed coordTransTests from CommonUnitTestsPlaceholder (moved to tests/) Cosmetic changes only, no functional modifications. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
848 files changed
+89305
-100020
No files matched your search
Executable → Regular
+52
-65
@@ -1,16 +1,13 @@
|
||||
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LtsWidgets/lts_dialog.h>
|
||||
|
||||
#include <AudioVideoManagement/logger.h>
|
||||
#include <AudioVideoManagement/avm_ftc.h>
|
||||
#include <AudioVideoManagement/avm.hpp>
|
||||
|
||||
#include <QVector>
|
||||
#include <AudioVideoManagement/avm_ftc.h>
|
||||
#include <AudioVideoManagement/logger.h>
|
||||
#include <LtsWidgets/lts_dialog.h>
|
||||
#include <QString>
|
||||
#include <QVector>
|
||||
|
||||
class QCheckBox;
|
||||
|
||||
@@ -25,7 +22,7 @@ namespace Interface
|
||||
{
|
||||
class Dtc;
|
||||
}
|
||||
}
|
||||
} // namespace AudioVideoManagement
|
||||
|
||||
namespace ExerciseManagement
|
||||
{
|
||||
@@ -33,80 +30,70 @@ namespace Interface
|
||||
{
|
||||
class Dtc;
|
||||
}
|
||||
}
|
||||
} // namespace ExerciseManagement
|
||||
|
||||
namespace LtsUtils
|
||||
{
|
||||
class RequestHelper;
|
||||
}
|
||||
|
||||
|
||||
namespace AudioVideoManagement
|
||||
{
|
||||
class EditTrainingVoiceCommunicationDialog
|
||||
: public LtsWidgets::LtsDialog
|
||||
, protected Interface::Ftc::ModifyTvcConfigReplyHandler
|
||||
class EditTrainingVoiceCommunicationDialog : public LtsWidgets::LtsDialog,
|
||||
protected Interface::Ftc::ModifyTvcConfigReplyHandler
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit EditTrainingVoiceCommunicationDialog(const std::shared_ptr<Interface::Dtc>& avmDtc,
|
||||
const std::shared_ptr<Interface::Ftc>& avmFtc,
|
||||
ExerciseManagement::Interface::Dtc* exmDtc, int32_t exerciseId,
|
||||
QWidget* parent = nullptr);
|
||||
|
||||
explicit EditTrainingVoiceCommunicationDialog(const std::shared_ptr<Interface::Dtc> &avmDtc,
|
||||
const std::shared_ptr<Interface::Ftc> &avmFtc,
|
||||
ExerciseManagement::Interface::Dtc *exmDtc,
|
||||
int32_t exerciseId,
|
||||
QWidget *parent = nullptr);
|
||||
|
||||
explicit EditTrainingVoiceCommunicationDialog(const TvcConfig& config,
|
||||
const std::shared_ptr<Interface::Dtc>& avmDtc,
|
||||
const std::shared_ptr<Interface::Ftc>& avmFtc,
|
||||
ExerciseManagement::Interface::Dtc* exmDtc, int32_t exerciseId,
|
||||
QWidget* parent);
|
||||
|
||||
explicit EditTrainingVoiceCommunicationDialog(const TvcConfig &config,
|
||||
const std::shared_ptr<Interface::Dtc> &avmDtc,
|
||||
const std::shared_ptr<Interface::Ftc> &avmFtc,
|
||||
ExerciseManagement::Interface::Dtc *exmDtc,
|
||||
int32_t exerciseId,
|
||||
QWidget *parent);
|
||||
~EditTrainingVoiceCommunicationDialog();
|
||||
|
||||
~EditTrainingVoiceCommunicationDialog();
|
||||
void retranslate() override;
|
||||
|
||||
void retranslate() override;
|
||||
protected:
|
||||
NGL::INGLLogger& m_logger;
|
||||
bool apply() override;
|
||||
void onModifyTvcConfigReply(const Core::FunctionReplyObject& reply) override;
|
||||
|
||||
protected:
|
||||
private:
|
||||
EditTrainingVoiceCommunicationDialog(int32_t id, const std::shared_ptr<Interface::Dtc>& avmDtc,
|
||||
const std::shared_ptr<Interface::Ftc>& avmFtc,
|
||||
ExerciseManagement::Interface::Dtc* exmDtc, int32_t exerciseId,
|
||||
QWidget* parent);
|
||||
|
||||
NGL::INGLLogger &m_logger;
|
||||
bool apply() override;
|
||||
void onModifyTvcConfigReply(const Core::FunctionReplyObject &reply) override;
|
||||
void init();
|
||||
void checkToDisableChkRecording();
|
||||
|
||||
private:
|
||||
EditTrainingVoiceCommunicationDialog(int32_t id,
|
||||
const std::shared_ptr<Interface::Dtc> &avmDtc,
|
||||
const std::shared_ptr<Interface::Ftc> &avmFtc,
|
||||
ExerciseManagement::Interface::Dtc *exmDtc,
|
||||
int32_t exerciseId,
|
||||
QWidget *parent);
|
||||
private slots:
|
||||
void updateFreeChannelsAndTakenNames();
|
||||
|
||||
void init();
|
||||
void checkToDisableChkRecording();
|
||||
private:
|
||||
void updateCbChannels(QVector<int>&& freeChannels);
|
||||
QVector<int> exercisesToConsider() const;
|
||||
QVector<int> exercisesToIgnore() const;
|
||||
|
||||
private slots:
|
||||
void updateFreeChannelsAndTakenNames();
|
||||
void initCbChannelsForCreate();
|
||||
void initCbChannelsForEdit(int channelId);
|
||||
|
||||
private:
|
||||
void updateCbChannels(QVector<int> &&freeChannels);
|
||||
QVector<int> exercisesToConsider() const;
|
||||
QVector<int> exercisesToIgnore() const;
|
||||
bool isNameValid(const QString& name) const;
|
||||
|
||||
void initCbChannelsForCreate();
|
||||
void initCbChannelsForEdit(int channelId);
|
||||
|
||||
bool isNameValid(const QString &name) const;
|
||||
|
||||
private:
|
||||
std::unique_ptr<Ui::EditTrainingVoiceCommunicationDialog> m_ui;
|
||||
int32_t m_id;
|
||||
int32_t m_exerciseId;
|
||||
std::shared_ptr<Interface::Dtc> m_avmDtc;
|
||||
std::shared_ptr<Interface::Ftc> m_avmFtc;
|
||||
ExerciseManagement::Interface::Dtc *m_exmDtc;
|
||||
QVector<QString> m_takenNames;
|
||||
std::unique_ptr<LtsUtils::RequestHelper> m_requestHelper;
|
||||
};
|
||||
}
|
||||
private:
|
||||
std::unique_ptr<Ui::EditTrainingVoiceCommunicationDialog> m_ui;
|
||||
int32_t m_id;
|
||||
int32_t m_exerciseId;
|
||||
std::shared_ptr<Interface::Dtc> m_avmDtc;
|
||||
std::shared_ptr<Interface::Ftc> m_avmFtc;
|
||||
ExerciseManagement::Interface::Dtc* m_exmDtc;
|
||||
QVector<QString> m_takenNames;
|
||||
std::unique_ptr<LtsUtils::RequestHelper> m_requestHelper;
|
||||
};
|
||||
} // namespace AudioVideoManagement
|
||||
Executable → Regular
+111
-122
@@ -1,209 +1,198 @@
|
||||
|
||||
|
||||
|
||||
#include "avm_training_voice_communication_dialog.h"
|
||||
#include "ui_avm_training_voice_communication_dialog.h"
|
||||
#include "avm_training_voice_communication_dialog_model.h"
|
||||
#include "avm_edit_training_voice_communication_dialog.h"
|
||||
#include <PluginInterfaces/gui_plugin_interface.h>
|
||||
#include <LtsUtils/LtsUtilsGui/LtsUtilsGuiDds/request_helper.h>
|
||||
#include <FileManagement/flm_translation.h>
|
||||
|
||||
#include <LtsSession/lts_session.h>
|
||||
#include "avm_edit_training_voice_communication_dialog.h"
|
||||
#include "avm_training_voice_communication_dialog_model.h"
|
||||
#include "ui_avm_training_voice_communication_dialog.h"
|
||||
|
||||
#include <FileManagement/flm_translation.h>
|
||||
#include <LtsPrinting/printing.h>
|
||||
#include <LtsSession/lts_session.h>
|
||||
#include <LtsUtils/LtsUtilsGui/LtsUtilsGuiDds/request_helper.h>
|
||||
#include <PluginInterfaces/gui_plugin_interface.h>
|
||||
#include <QTreeView>
|
||||
|
||||
namespace AudioVideoManagement
|
||||
{
|
||||
|
||||
TrainingVoiceCommunicationDialog::TrainingVoiceCommunicationDialog(const QString &menuGroup, LtsSession::LtsSession *session, QWidget *parent)
|
||||
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly)
|
||||
, m_session(session)
|
||||
, m_ui(new Ui::TrainingVoiceCommunicationDialog)
|
||||
, m_menuGroup(menuGroup)
|
||||
, m_requestHelper(new LtsUtils::RequestHelper(this))
|
||||
, m_avmDtc(nullptr)
|
||||
, m_avmFtc(nullptr)
|
||||
TrainingVoiceCommunicationDialog::TrainingVoiceCommunicationDialog(const QString& menuGroup,
|
||||
LtsSession::LtsSession* session, QWidget* parent)
|
||||
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::CloseOnly), m_session(session),
|
||||
m_ui(new Ui::TrainingVoiceCommunicationDialog), m_menuGroup(menuGroup),
|
||||
m_requestHelper(new LtsUtils::RequestHelper(this)), m_avmDtc(nullptr), m_avmFtc(nullptr)
|
||||
{
|
||||
m_ui->setupUi(this);
|
||||
m_ui->setupUi(this);
|
||||
|
||||
setOnlineHelpFilename(QStringLiteral("Situation-Training_Voice_Communication"));
|
||||
setOnlineHelpFilename(QStringLiteral("Situation-Training_Voice_Communication"));
|
||||
}
|
||||
|
||||
TrainingVoiceCommunicationDialog::~TrainingVoiceCommunicationDialog() = default;
|
||||
|
||||
void TrainingVoiceCommunicationDialog::retranslate()
|
||||
{
|
||||
translate(m_ui.get(), tr("Training Voice Communication"));
|
||||
translate(m_ui.get(), tr("Training Voice Communication"));
|
||||
}
|
||||
|
||||
void TrainingVoiceCommunicationDialog::tableColumnOrganiserSetting()
|
||||
{
|
||||
|
||||
m_ui->dataView->setColumnsOrganiserEnabled(identifier(), true);
|
||||
|
||||
m_ui->dataView->setColumnsOrganiserEnabled(identifier(), true);
|
||||
}
|
||||
|
||||
bool TrainingVoiceCommunicationDialog::init(const std::shared_ptr<Interface::Dtc> &avmDtc, const std::shared_ptr<Interface::Ftc> &avmFtc, ExerciseManagement::Interface::Dtc *exmDtc)
|
||||
bool TrainingVoiceCommunicationDialog::init(const std::shared_ptr<Interface::Dtc>& avmDtc,
|
||||
const std::shared_ptr<Interface::Ftc>& avmFtc,
|
||||
ExerciseManagement::Interface::Dtc* exmDtc)
|
||||
{
|
||||
Q_ASSERT(exmDtc);
|
||||
Q_ASSERT(exmDtc);
|
||||
|
||||
if (!(avmDtc->enableTvcChannel() &&
|
||||
avmDtc->enableTvcConfig() &&
|
||||
avmFtc->enableModifyTvcConfig() &&
|
||||
avmFtc->enableRemoveTvcConfig()))
|
||||
{
|
||||
ERROR_LOG(m_logger) << "Could not enable topics";
|
||||
return false;
|
||||
}
|
||||
if (!(avmDtc->enableTvcChannel() && avmDtc->enableTvcConfig() && avmFtc->enableModifyTvcConfig() &&
|
||||
avmFtc->enableRemoveTvcConfig()))
|
||||
{
|
||||
ERROR_LOG(m_logger) << "Could not enable topics";
|
||||
return false;
|
||||
}
|
||||
|
||||
m_model.reset(new TrainingVoiceCommunicationDialogModel(this));
|
||||
m_filter.reset(new TrainingVoiceCommunicationDialogFilter(m_session->exerciseId(), m_model.get()));
|
||||
m_model.reset(new TrainingVoiceCommunicationDialogModel(this));
|
||||
m_filter.reset(new TrainingVoiceCommunicationDialogFilter(m_session->exerciseId(), m_model.get()));
|
||||
|
||||
m_avmDtc = avmDtc;
|
||||
m_avmFtc = avmFtc;
|
||||
m_exmDtc = exmDtc;
|
||||
|
||||
m_avmDtc = avmDtc;
|
||||
m_avmFtc = avmFtc;
|
||||
m_exmDtc = exmDtc;
|
||||
if (!m_model->init(m_session->exerciseId(), avmDtc))
|
||||
{
|
||||
m_filter.reset();
|
||||
m_model.reset();
|
||||
ERROR_LOG(m_logger) << "Could not init model";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_model->init(m_session->exerciseId(), avmDtc))
|
||||
{
|
||||
m_filter.reset();
|
||||
m_model.reset();
|
||||
ERROR_LOG(m_logger) << "Could not init model";
|
||||
return false;
|
||||
}
|
||||
m_ui->dataView->setModel(m_filter.get());
|
||||
|
||||
m_ui->dataView->setModel(m_filter.get());
|
||||
m_buttonBox->connectButton(LtsWidgets::DialogButton::Add, this, &TrainingVoiceCommunicationDialog::onAddClicked);
|
||||
m_buttonBox->connectButton(LtsWidgets::DialogButton::Edit, this, &TrainingVoiceCommunicationDialog::onEditClicked);
|
||||
m_buttonBox->connectButton(LtsWidgets::DialogButton::Remove, this,
|
||||
&TrainingVoiceCommunicationDialog::onRemoveClicked);
|
||||
m_buttonBox->connectButton(LtsWidgets::DialogButton::Print, this, &TrainingVoiceCommunicationDialog::onPrint);
|
||||
|
||||
m_buttonBox->connectButton(LtsWidgets::DialogButton::Add, this, &TrainingVoiceCommunicationDialog::onAddClicked);
|
||||
m_buttonBox->connectButton(LtsWidgets::DialogButton::Edit, this, &TrainingVoiceCommunicationDialog::onEditClicked);
|
||||
m_buttonBox->connectButton(LtsWidgets::DialogButton::Remove, this, &TrainingVoiceCommunicationDialog::onRemoveClicked);
|
||||
m_buttonBox->connectButton(LtsWidgets::DialogButton::Print, this, &TrainingVoiceCommunicationDialog::onPrint);
|
||||
connect(m_ui->dataView, &LtsDataView::LtsDataView::signalSelectionChanged, this,
|
||||
&TrainingVoiceCommunicationDialog::onSelectionChanged);
|
||||
|
||||
connect(m_ui->dataView, &LtsDataView::LtsDataView::signalSelectionChanged,
|
||||
this, &TrainingVoiceCommunicationDialog::onSelectionChanged);
|
||||
onSelectionChanged();
|
||||
|
||||
onSelectionChanged();
|
||||
connect(m_ui->dataView, &LtsDataView::LtsDataView::signalDoubleClicked, this,
|
||||
&TrainingVoiceCommunicationDialog::onEditClicked);
|
||||
|
||||
connect(m_ui->dataView, &LtsDataView::LtsDataView::signalDoubleClicked,
|
||||
this, &TrainingVoiceCommunicationDialog::onEditClicked);
|
||||
m_buttonBox->connectLibraryButton(this, &TrainingVoiceCommunicationDialog::onImportButtonClicked,
|
||||
&TrainingVoiceCommunicationDialog::onExportButtonClicked);
|
||||
|
||||
|
||||
m_buttonBox->connectLibraryButton(this,
|
||||
&TrainingVoiceCommunicationDialog::onImportButtonClicked,
|
||||
&TrainingVoiceCommunicationDialog::onExportButtonClicked);
|
||||
|
||||
if (!m_session->getForeignGuiInterface<FileManagement::ForeignGuiInterface>(m_flmGui))
|
||||
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Library, false);
|
||||
if (!m_session->getForeignGuiInterface<FileManagement::ForeignGuiInterface>(m_flmGui))
|
||||
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Library, false);
|
||||
|
||||
#ifndef LTS_DEBUG
|
||||
m_ui->dataView->hideColumn(TrainingVoiceCommunicationDialogModel::RECORDING);
|
||||
m_ui->dataView->hideColumn(TrainingVoiceCommunicationDialogModel::RECORDING);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void TrainingVoiceCommunicationDialog::onModifyTvcConfigReply(const Core::FunctionReplyObject &replyObject)
|
||||
void TrainingVoiceCommunicationDialog::onModifyTvcConfigReply(const Core::FunctionReplyObject& replyObject)
|
||||
{
|
||||
m_requestHelper->requestReply(replyObject);
|
||||
m_requestHelper->requestReply(replyObject);
|
||||
}
|
||||
|
||||
void TrainingVoiceCommunicationDialog::onRemoveTvcConfigReply(const Core::FunctionReplyObject &replyObject)
|
||||
void TrainingVoiceCommunicationDialog::onRemoveTvcConfigReply(const Core::FunctionReplyObject& replyObject)
|
||||
{
|
||||
m_requestHelper->requestReply(replyObject);
|
||||
m_requestHelper->requestReply(replyObject);
|
||||
}
|
||||
|
||||
void TrainingVoiceCommunicationDialog::onAddClicked()
|
||||
{
|
||||
EditTrainingVoiceCommunicationDialog *dialog = new EditTrainingVoiceCommunicationDialog(m_avmDtc, m_avmFtc, m_exmDtc, m_session->exerciseId(), this);
|
||||
addDialog(dialog, m_menuGroup, QStringLiteral("NewTVCConfig"), LtsWidgets::LayoutArea::eDialogTab);
|
||||
EditTrainingVoiceCommunicationDialog* dialog =
|
||||
new EditTrainingVoiceCommunicationDialog(m_avmDtc, m_avmFtc, m_exmDtc, m_session->exerciseId(), this);
|
||||
addDialog(dialog, m_menuGroup, QStringLiteral("NewTVCConfig"), LtsWidgets::LayoutArea::eDialogTab);
|
||||
}
|
||||
|
||||
void TrainingVoiceCommunicationDialog::onEditClicked()
|
||||
{
|
||||
QModelIndex currentIndex = m_ui->dataView->currentIndex();
|
||||
QModelIndex currentIndex = m_ui->dataView->currentIndex();
|
||||
|
||||
if (!currentIndex.isValid())
|
||||
return;
|
||||
if (!currentIndex.isValid())
|
||||
return;
|
||||
|
||||
TvcConfig config = m_model->getRowData(currentIndex.row());
|
||||
TvcConfig config = m_model->getRowData(currentIndex.row());
|
||||
|
||||
EditTrainingVoiceCommunicationDialog *dialog = new EditTrainingVoiceCommunicationDialog(config, m_avmDtc, m_avmFtc, m_exmDtc, m_session->exerciseId(), this);
|
||||
addDialog(dialog, m_menuGroup, QStringLiteral("EditTVCConfig%1").arg(config.id()), LtsWidgets::LayoutArea::eDialogTab);
|
||||
EditTrainingVoiceCommunicationDialog* dialog =
|
||||
new EditTrainingVoiceCommunicationDialog(config, m_avmDtc, m_avmFtc, m_exmDtc, m_session->exerciseId(), this);
|
||||
addDialog(dialog, m_menuGroup, QStringLiteral("EditTVCConfig%1").arg(config.id()),
|
||||
LtsWidgets::LayoutArea::eDialogTab);
|
||||
}
|
||||
|
||||
void TrainingVoiceCommunicationDialog::onRemoveClicked()
|
||||
{
|
||||
QModelIndex currentIndex = m_ui->dataView->currentIndex();
|
||||
QModelIndex currentIndex = m_ui->dataView->currentIndex();
|
||||
|
||||
if (!currentIndex.isValid())
|
||||
return;
|
||||
if (!currentIndex.isValid())
|
||||
return;
|
||||
|
||||
Core::RemoveElementRequest request(m_model->getRowData(currentIndex.row()).id());
|
||||
Core::RemoveElementRequest request(m_model->getRowData(currentIndex.row()).id());
|
||||
|
||||
m_requestHelper->startSingleRequest([this, request]()
|
||||
{
|
||||
return m_avmFtc->removeTvcConfigRequest(request, this);
|
||||
});
|
||||
m_requestHelper->startSingleRequest([this, request]() { return m_avmFtc->removeTvcConfigRequest(request, this); });
|
||||
}
|
||||
|
||||
void TrainingVoiceCommunicationDialog::onSelectionChanged()
|
||||
{
|
||||
QModelIndex currentIndex = m_ui->dataView->currentIndex();
|
||||
QModelIndex currentIndex = m_ui->dataView->currentIndex();
|
||||
|
||||
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Edit, currentIndex.isValid());
|
||||
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, currentIndex.isValid());
|
||||
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Edit, currentIndex.isValid());
|
||||
m_buttonBox->setButtonEnabled(LtsWidgets::DialogButton::Remove, currentIndex.isValid());
|
||||
}
|
||||
|
||||
void TrainingVoiceCommunicationDialog::onPrint()
|
||||
{
|
||||
LtsPrinting::printView(m_session, this, m_ui->dataView->treeView());
|
||||
LtsPrinting::printView(m_session, this, m_ui->dataView->treeView());
|
||||
}
|
||||
|
||||
|
||||
|
||||
void TrainingVoiceCommunicationDialog::onExportButtonClicked()
|
||||
{
|
||||
QByteArray byteArray = m_filter->modelToJson();
|
||||
QByteArray byteArray = m_filter->modelToJson();
|
||||
|
||||
int fileId = m_flmGui->saveFileContent(this, FileManagement::FileType::Xml, m_session->exerciseId(), byteArray);
|
||||
if (fileId > 0)
|
||||
DEBUG_LOG(m_logger) << "Saved file with id = " << fileId;
|
||||
else
|
||||
ERROR_LOG(m_logger) << "Could not save file in library ";
|
||||
int fileId = m_flmGui->saveFileContent(this, FileManagement::FileType::Xml, m_session->exerciseId(), byteArray);
|
||||
if (fileId > 0)
|
||||
DEBUG_LOG(m_logger) << "Saved file with id = " << fileId;
|
||||
else
|
||||
ERROR_LOG(m_logger) << "Could not save file in library ";
|
||||
}
|
||||
|
||||
void TrainingVoiceCommunicationDialog::onImportButtonClicked()
|
||||
{
|
||||
DEBUG_LOG(m_logger) << " onImportButtonClicked() ";
|
||||
DEBUG_LOG(m_logger) << " onImportButtonClicked() ";
|
||||
|
||||
QByteArray content;
|
||||
int fileId = m_flmGui->loadFileContent(this, content, {FileManagement::FileType::Xml}, m_session->exerciseId(), FileManagement::toString(FileManagement::XmlType::AVMTrainingVoiceCommunication));
|
||||
if (fileId > 0)
|
||||
{
|
||||
if (!m_flmGui->isXmlType(content, FileManagement::toString(FileManagement::XmlType::AVMTrainingVoiceCommunication)))
|
||||
QByteArray content;
|
||||
int fileId =
|
||||
m_flmGui->loadFileContent(this, content, {FileManagement::FileType::Xml}, m_session->exerciseId(),
|
||||
FileManagement::toString(FileManagement::XmlType::AVMTrainingVoiceCommunication));
|
||||
if (fileId > 0)
|
||||
{
|
||||
QHash<LtsWidgets::Button, QString> texts({{LtsWidgets::Button::Yes, tr("Ok")}});
|
||||
LtsWidgets::LtsMessageDialog::showMessage(this,
|
||||
tr("Invalid xml file content"),
|
||||
windowTitle(),
|
||||
LtsWidgets::Behaviour::Modal,
|
||||
LtsWidgets::Button::Yes,
|
||||
texts);
|
||||
}
|
||||
else
|
||||
{
|
||||
const QVector<ModifyTvcConfigRequest> requests = m_model->jsonToTvcConfigVector(content);
|
||||
for (const auto &request : requests)
|
||||
{
|
||||
m_requestHelper->addRequest([this, request]()
|
||||
if (!m_flmGui->isXmlType(content,
|
||||
FileManagement::toString(FileManagement::XmlType::AVMTrainingVoiceCommunication)))
|
||||
{
|
||||
return m_avmFtc->modifyTvcConfigRequest(request, this);
|
||||
});
|
||||
}
|
||||
(void) m_requestHelper->startRequests();
|
||||
INFO_LOG(m_logger) << "--- onImportButtonClicked() ";
|
||||
QHash<LtsWidgets::Button, QString> texts({{LtsWidgets::Button::Yes, tr("Ok")}});
|
||||
LtsWidgets::LtsMessageDialog::showMessage(this, tr("Invalid xml file content"), windowTitle(),
|
||||
LtsWidgets::Behaviour::Modal, LtsWidgets::Button::Yes, texts);
|
||||
}
|
||||
else
|
||||
{
|
||||
const QVector<ModifyTvcConfigRequest> requests = m_model->jsonToTvcConfigVector(content);
|
||||
for (const auto& request : requests)
|
||||
{
|
||||
m_requestHelper->addRequest(
|
||||
[this, request]() { return m_avmFtc->modifyTvcConfigRequest(request, this); });
|
||||
}
|
||||
(void)m_requestHelper->startRequests();
|
||||
INFO_LOG(m_logger) << "--- onImportButtonClicked() ";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace AudioVideoManagement
|
||||
Executable → Regular
+41
-44
@@ -1,14 +1,11 @@
|
||||
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LtsWidgets/lts_dialog.h>
|
||||
|
||||
#include <AudioVideoManagement/logger.h>
|
||||
#include <AudioVideoManagement/avm_ftc.h>
|
||||
#include <AudioVideoManagement/logger.h>
|
||||
#include <LtsWidgets/lts_dialog.h>
|
||||
#include <Plugins/FileManagement/flm_explorer_gui_plugin_interface.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace Ui
|
||||
@@ -32,7 +29,7 @@ namespace Interface
|
||||
{
|
||||
class Dtc;
|
||||
}
|
||||
}
|
||||
} // namespace AudioVideoManagement
|
||||
|
||||
namespace ExerciseManagement
|
||||
{
|
||||
@@ -40,53 +37,53 @@ namespace Interface
|
||||
{
|
||||
class Dtc;
|
||||
}
|
||||
}
|
||||
} // namespace ExerciseManagement
|
||||
|
||||
namespace AudioVideoManagement
|
||||
{
|
||||
class TrainingVoiceCommunicationDialogModel;
|
||||
class TrainingVoiceCommunicationDialogFilter;
|
||||
|
||||
class TrainingVoiceCommunicationDialog
|
||||
: public LtsWidgets::LtsDialog
|
||||
, protected Interface::Ftc::ModifyTvcConfigReplyHandler
|
||||
, protected Interface::Ftc::RemoveTvcConfigReplyHandler
|
||||
class TrainingVoiceCommunicationDialog : public LtsWidgets::LtsDialog,
|
||||
protected Interface::Ftc::ModifyTvcConfigReplyHandler,
|
||||
protected Interface::Ftc::RemoveTvcConfigReplyHandler
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit TrainingVoiceCommunicationDialog(const QString &menuGroup, LtsSession::LtsSession *session, QWidget *parent = nullptr);
|
||||
~TrainingVoiceCommunicationDialog();
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit TrainingVoiceCommunicationDialog(const QString& menuGroup, LtsSession::LtsSession* session,
|
||||
QWidget* parent = nullptr);
|
||||
~TrainingVoiceCommunicationDialog();
|
||||
|
||||
bool init(const std::shared_ptr<Interface::Dtc> &avmDtc, const std::shared_ptr<Interface::Ftc> &avmFtc, ExerciseManagement::Interface::Dtc *exmDtc);
|
||||
bool init(const std::shared_ptr<Interface::Dtc>& avmDtc, const std::shared_ptr<Interface::Ftc>& avmFtc,
|
||||
ExerciseManagement::Interface::Dtc* exmDtc);
|
||||
|
||||
void onModifyTvcConfigReply(const Core::FunctionReplyObject &replyObject) override final;
|
||||
void onRemoveTvcConfigReply(const Core::FunctionReplyObject &replyObject) override final;
|
||||
void onModifyTvcConfigReply(const Core::FunctionReplyObject& replyObject) override final;
|
||||
void onRemoveTvcConfigReply(const Core::FunctionReplyObject& replyObject) override final;
|
||||
|
||||
private Q_SLOTS:
|
||||
void onAddClicked();
|
||||
void onEditClicked();
|
||||
void onRemoveClicked();
|
||||
void onSelectionChanged();
|
||||
void onPrint();
|
||||
void onExportButtonClicked();
|
||||
void onImportButtonClicked();
|
||||
private Q_SLOTS:
|
||||
void onAddClicked();
|
||||
void onEditClicked();
|
||||
void onRemoveClicked();
|
||||
void onSelectionChanged();
|
||||
void onPrint();
|
||||
void onExportButtonClicked();
|
||||
void onImportButtonClicked();
|
||||
|
||||
private:
|
||||
private:
|
||||
NGL::INGLLogger& m_logger;
|
||||
void retranslate() override;
|
||||
void tableColumnOrganiserSetting() override;
|
||||
|
||||
NGL::INGLLogger &m_logger;
|
||||
void retranslate() override;
|
||||
void tableColumnOrganiserSetting() override;
|
||||
|
||||
private:
|
||||
LtsSession::LtsSession *m_session;
|
||||
std::unique_ptr<TrainingVoiceCommunicationDialogModel> m_model;
|
||||
std::unique_ptr<TrainingVoiceCommunicationDialogFilter> m_filter;
|
||||
std::unique_ptr<Ui::TrainingVoiceCommunicationDialog> m_ui;
|
||||
QString m_menuGroup;
|
||||
std::unique_ptr<LtsUtils::RequestHelper> m_requestHelper;
|
||||
std::shared_ptr<Interface::Dtc> m_avmDtc;
|
||||
std::shared_ptr<Interface::Ftc> m_avmFtc;
|
||||
std::shared_ptr<FileManagement::ForeignGuiInterface> m_flmGui;
|
||||
ExerciseManagement::Interface::Dtc *m_exmDtc{nullptr};
|
||||
};
|
||||
}
|
||||
private:
|
||||
LtsSession::LtsSession* m_session;
|
||||
std::unique_ptr<TrainingVoiceCommunicationDialogModel> m_model;
|
||||
std::unique_ptr<TrainingVoiceCommunicationDialogFilter> m_filter;
|
||||
std::unique_ptr<Ui::TrainingVoiceCommunicationDialog> m_ui;
|
||||
QString m_menuGroup;
|
||||
std::unique_ptr<LtsUtils::RequestHelper> m_requestHelper;
|
||||
std::shared_ptr<Interface::Dtc> m_avmDtc;
|
||||
std::shared_ptr<Interface::Ftc> m_avmFtc;
|
||||
std::shared_ptr<FileManagement::ForeignGuiInterface> m_flmGui;
|
||||
ExerciseManagement::Interface::Dtc* m_exmDtc{nullptr};
|
||||
};
|
||||
} // namespace AudioVideoManagement
|
||||
Executable → Regular
+88
-98
@@ -1,142 +1,132 @@
|
||||
|
||||
|
||||
|
||||
#include "avm_training_voice_communication_dialog_model.h"
|
||||
#include <FileManagement/flm_translation.h>
|
||||
|
||||
#include <FileManagement/flm_translation.h>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
|
||||
namespace AudioVideoManagement
|
||||
{
|
||||
|
||||
TrainingVoiceCommunicationDialogModel::TrainingVoiceCommunicationDialogModel(QObject *parent)
|
||||
: LtsAbstractTableModel<AudioVideoManagement::TvcConfig>(
|
||||
{
|
||||
tr("Channel Number"),
|
||||
tr("Radio Circuit"),
|
||||
tr("Recording"),
|
||||
tr("Info"),
|
||||
tr("Global")
|
||||
}, parent)
|
||||
, m_exerciseId(-1)
|
||||
TrainingVoiceCommunicationDialogModel::TrainingVoiceCommunicationDialogModel(QObject* parent)
|
||||
: LtsAbstractTableModel<AudioVideoManagement::TvcConfig>(
|
||||
{tr("Channel Number"), tr("Radio Circuit"), tr("Recording"), tr("Info"), tr("Global")}, parent),
|
||||
m_exerciseId(-1)
|
||||
{
|
||||
}
|
||||
|
||||
QVariant TrainingVoiceCommunicationDialogModel::data(const QModelIndex &index, int role) const
|
||||
QVariant TrainingVoiceCommunicationDialogModel::data(const QModelIndex& index, int role) const
|
||||
{
|
||||
if (role != Qt::DisplayRole || !indexIsValid(index))
|
||||
if (role != Qt::DisplayRole || !indexIsValid(index))
|
||||
return QVariant();
|
||||
|
||||
const AudioVideoManagement::TvcConfig& config = m_vecData.at(index.row());
|
||||
|
||||
switch (index.column())
|
||||
{
|
||||
case CHANNEL:
|
||||
return QString::fromStdString(m_tetraChannels.value(config.tetraChannelId()).name());
|
||||
case RADIO_CIRCUIT:
|
||||
return QString::fromStdString(config.radioCircuit());
|
||||
case RECORDING:
|
||||
return config.recording() ? tr("On") : tr("Off");
|
||||
case INFO:
|
||||
return QString::fromStdString(config.info());
|
||||
case GLOBAL:
|
||||
return config.exerciseId().is_set() ? tr("No") : tr("Yes");
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
|
||||
const AudioVideoManagement::TvcConfig &config = m_vecData.at(index.row());
|
||||
|
||||
switch (index.column())
|
||||
{
|
||||
case CHANNEL:
|
||||
return QString::fromStdString(m_tetraChannels.value(config.tetraChannelId()).name());
|
||||
case RADIO_CIRCUIT:
|
||||
return QString::fromStdString(config.radioCircuit());
|
||||
case RECORDING:
|
||||
return config.recording() ? tr("On") : tr("Off");
|
||||
case INFO:
|
||||
return QString::fromStdString(config.info());
|
||||
case GLOBAL:
|
||||
return config.exerciseId().is_set() ? tr("No") : tr("Yes");
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
bool TrainingVoiceCommunicationDialogModel::init(int32_t exerciseId, const std::shared_ptr<AudioVideoManagement::Interface::Dtc> &avmDtc)
|
||||
bool TrainingVoiceCommunicationDialogModel::init(int32_t exerciseId,
|
||||
const std::shared_ptr<AudioVideoManagement::Interface::Dtc>& avmDtc)
|
||||
{
|
||||
m_avmDtc = avmDtc;
|
||||
m_exerciseId = exerciseId;
|
||||
m_avmDtc = avmDtc;
|
||||
m_exerciseId = exerciseId;
|
||||
|
||||
|
||||
avmDtc->waitForHistoricalDataTvcChannel(5000);
|
||||
m_tetraChannels = avmDtc->tvcChannels();
|
||||
avmDtc->waitForHistoricalDataTvcChannel(5000);
|
||||
m_tetraChannels = avmDtc->tvcChannels();
|
||||
|
||||
connect(m_avmDtc.get(), &AudioVideoManagement::Interface::Dtc::tvcConfigChanged, this, &TrainingVoiceCommunicationDialogModel::onDataChanged);
|
||||
m_avmDtc->tvcConfigs([this](const TvcConfig &config) { insertRow(config); });
|
||||
connect(m_avmDtc.get(), &AudioVideoManagement::Interface::Dtc::tvcConfigChanged, this,
|
||||
&TrainingVoiceCommunicationDialogModel::onDataChanged);
|
||||
m_avmDtc->tvcConfigs([this](const TvcConfig& config) { insertRow(config); });
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
QByteArray TrainingVoiceCommunicationDialogFilter::modelToJson() const
|
||||
{
|
||||
QJsonObject obj;
|
||||
QJsonArray arr;
|
||||
obj[QStringLiteral("XmlType")] = FileManagement::toString(FileManagement::XmlType::AVMTrainingVoiceCommunication);
|
||||
QJsonObject obj;
|
||||
QJsonArray arr;
|
||||
obj[QStringLiteral("XmlType")] = FileManagement::toString(FileManagement::XmlType::AVMTrainingVoiceCommunication);
|
||||
|
||||
for (int row = 0; row < rowCount(); row++)
|
||||
{
|
||||
int sourceRow = mapToSource(index(row, 0)).row();
|
||||
for (int row = 0; row < rowCount(); row++)
|
||||
{
|
||||
int sourceRow = mapToSource(index(row, 0)).row();
|
||||
|
||||
QJsonObject inner;
|
||||
const TvcConfig &config = m_sourceModel->getRowData(sourceRow);
|
||||
QJsonObject inner;
|
||||
const TvcConfig& config = m_sourceModel->getRowData(sourceRow);
|
||||
|
||||
inner[QLatin1String("isGlobal")] = !config.exerciseId().is_set();
|
||||
inner[QLatin1String("info")] = QString::fromStdString(config.info());
|
||||
inner[QLatin1String("radioCircuit")] = QString::fromStdString(config.radioCircuit());
|
||||
inner[QLatin1String("recording")] = config.recording();
|
||||
inner[QLatin1String("tetraChannelId")] = config.tetraChannelId();
|
||||
arr += inner;
|
||||
}
|
||||
inner[QLatin1String("isGlobal")] = !config.exerciseId().is_set();
|
||||
inner[QLatin1String("info")] = QString::fromStdString(config.info());
|
||||
inner[QLatin1String("radioCircuit")] = QString::fromStdString(config.radioCircuit());
|
||||
inner[QLatin1String("recording")] = config.recording();
|
||||
inner[QLatin1String("tetraChannelId")] = config.tetraChannelId();
|
||||
arr += inner;
|
||||
}
|
||||
|
||||
obj[QLatin1String("tvcConfiguration")] = arr;
|
||||
QJsonDocument doc(obj);
|
||||
return doc.toJson(QJsonDocument::Compact);
|
||||
obj[QLatin1String("tvcConfiguration")] = arr;
|
||||
QJsonDocument doc(obj);
|
||||
return doc.toJson(QJsonDocument::Compact);
|
||||
}
|
||||
|
||||
QVector<ModifyTvcConfigRequest> TrainingVoiceCommunicationDialogModel::jsonToTvcConfigVector(const QByteArray &content) const
|
||||
QVector<ModifyTvcConfigRequest>
|
||||
TrainingVoiceCommunicationDialogModel::jsonToTvcConfigVector(const QByteArray& content) const
|
||||
{
|
||||
|
||||
const QJsonDocument doc(QJsonDocument::fromJson(content));
|
||||
const QJsonObject toplevelObj(doc.object());
|
||||
const QJsonArray arr(toplevelObj.value(QLatin1String("tvcConfiguration")).toArray());
|
||||
QVector<ModifyTvcConfigRequest> result;
|
||||
result.reserve(arr.size());
|
||||
for (const auto &ele : arr)
|
||||
{
|
||||
const QJsonObject obj(ele.toObject());
|
||||
ModifyTvcConfigRequest config;
|
||||
|
||||
if (!obj.contains(QLatin1String("isGlobal")) || !obj[QLatin1String("isGlobal")].toBool())
|
||||
config.exerciseId(m_exerciseId);
|
||||
config.id(0);
|
||||
config.info(obj[QLatin1String("info")].toString().toStdString());
|
||||
config.radioCircuit(obj[QLatin1String("radioCircuit")].toString().toStdString());
|
||||
config.recording(obj[QLatin1String("recording")].toBool());
|
||||
config.tetraChannelId(obj[QLatin1String("tetraChannelId")].toInt());
|
||||
const QJsonDocument doc(QJsonDocument::fromJson(content));
|
||||
const QJsonObject toplevelObj(doc.object());
|
||||
const QJsonArray arr(toplevelObj.value(QLatin1String("tvcConfiguration")).toArray());
|
||||
QVector<ModifyTvcConfigRequest> result;
|
||||
result.reserve(arr.size());
|
||||
for (const auto& ele : arr)
|
||||
{
|
||||
const QJsonObject obj(ele.toObject());
|
||||
ModifyTvcConfigRequest config;
|
||||
|
||||
INFO_LOG(m_logger) << "insertRow: " << config.radioCircuit()
|
||||
<< " tvcChannelId=" << config.tetraChannelId();
|
||||
result.push_back(std::move(config));
|
||||
}
|
||||
return result;
|
||||
if (!obj.contains(QLatin1String("isGlobal")) || !obj[QLatin1String("isGlobal")].toBool())
|
||||
config.exerciseId(m_exerciseId);
|
||||
config.id(0);
|
||||
config.info(obj[QLatin1String("info")].toString().toStdString());
|
||||
config.radioCircuit(obj[QLatin1String("radioCircuit")].toString().toStdString());
|
||||
config.recording(obj[QLatin1String("recording")].toBool());
|
||||
config.tetraChannelId(obj[QLatin1String("tetraChannelId")].toInt());
|
||||
|
||||
INFO_LOG(m_logger) << "insertRow: " << config.radioCircuit() << " tvcChannelId=" << config.tetraChannelId();
|
||||
result.push_back(std::move(config));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
TrainingVoiceCommunicationDialogFilter::TrainingVoiceCommunicationDialogFilter(int32_t exerciseId, TrainingVoiceCommunicationDialogModel *sourceModel)
|
||||
: m_exerciseId(exerciseId)
|
||||
, m_sourceModel(sourceModel)
|
||||
TrainingVoiceCommunicationDialogFilter::TrainingVoiceCommunicationDialogFilter(
|
||||
int32_t exerciseId, TrainingVoiceCommunicationDialogModel* sourceModel)
|
||||
: m_exerciseId(exerciseId), m_sourceModel(sourceModel)
|
||||
{
|
||||
Q_ASSERT(sourceModel);
|
||||
setSourceModel(sourceModel);
|
||||
Q_ASSERT(sourceModel);
|
||||
setSourceModel(sourceModel);
|
||||
}
|
||||
|
||||
bool TrainingVoiceCommunicationDialogFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
||||
bool TrainingVoiceCommunicationDialogFilter::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const
|
||||
{
|
||||
TvcConfig tvcConfig = m_sourceModel->getRowData(sourceRow);
|
||||
TvcConfig tvcConfig = m_sourceModel->getRowData(sourceRow);
|
||||
|
||||
if (tvcConfig.exerciseId().is_set() && tvcConfig.exerciseId().get() != m_exerciseId)
|
||||
return false;
|
||||
if (tvcConfig.exerciseId().is_set() && tvcConfig.exerciseId().get() != m_exerciseId)
|
||||
return false;
|
||||
|
||||
return LtsColumnFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
|
||||
return LtsColumnFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
|
||||
}
|
||||
|
||||
}
|
||||
} // namespace AudioVideoManagement
|
||||
Executable → Regular
+26
-37
@@ -1,67 +1,56 @@
|
||||
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AudioVideoManagement/avm_dtc.h>
|
||||
#include <AudioVideoManagement/logger.h>
|
||||
#include <LtsWidgets/lts_abstract_table_model.h>
|
||||
#include <LtsWidgets/lts_column_filter_proxy_model.h>
|
||||
|
||||
#include <AudioVideoManagement/logger.h>
|
||||
#include <AudioVideoManagement/avm_dtc.h>
|
||||
|
||||
namespace AudioVideoManagement
|
||||
{
|
||||
|
||||
class TrainingVoiceCommunicationDialogModel final
|
||||
: public LtsWidgets::LtsAbstractTableModel<AudioVideoManagement::TvcConfig>
|
||||
: public LtsWidgets::LtsAbstractTableModel<AudioVideoManagement::TvcConfig>
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum Columns
|
||||
{
|
||||
CHANNEL,
|
||||
RADIO_CIRCUIT,
|
||||
RECORDING,
|
||||
INFO,
|
||||
GLOBAL
|
||||
};
|
||||
public:
|
||||
enum Columns { CHANNEL, RADIO_CIRCUIT, RECORDING, INFO, GLOBAL };
|
||||
|
||||
explicit TrainingVoiceCommunicationDialogModel(QObject *parent = nullptr);
|
||||
explicit TrainingVoiceCommunicationDialogModel(QObject* parent = nullptr);
|
||||
|
||||
QVariant data(const QModelIndex &index, int role) const override final;
|
||||
QVariant data(const QModelIndex& index, int role) const override final;
|
||||
|
||||
bool init(int32_t exerciseId, const std::shared_ptr<AudioVideoManagement::Interface::Dtc> &avmDtc);
|
||||
QVector<ModifyTvcConfigRequest> jsonToTvcConfigVector(const QByteArray &content) const;
|
||||
bool init(int32_t exerciseId, const std::shared_ptr<AudioVideoManagement::Interface::Dtc>& avmDtc);
|
||||
QVector<ModifyTvcConfigRequest> jsonToTvcConfigVector(const QByteArray& content) const;
|
||||
|
||||
private:
|
||||
private:
|
||||
NGL::INGLLogger& m_logger;
|
||||
std::shared_ptr<AudioVideoManagement::Interface::Dtc> m_avmDtc;
|
||||
int32_t m_exerciseId;
|
||||
|
||||
NGL::INGLLogger &m_logger;
|
||||
std::shared_ptr<AudioVideoManagement::Interface::Dtc> m_avmDtc;
|
||||
int32_t m_exerciseId;
|
||||
|
||||
QMap<int32_t, AudioVideoManagement::TvcChannel> m_tetraChannels;
|
||||
QMap<int32_t, AudioVideoManagement::TvcChannel> m_tetraChannels;
|
||||
};
|
||||
|
||||
|
||||
class TrainingVoiceCommunicationDialogFilter : public LtsWidgets::LtsColumnFilterProxyModel
|
||||
{
|
||||
public:
|
||||
explicit TrainingVoiceCommunicationDialogFilter(int32_t exerciseId, TrainingVoiceCommunicationDialogModel *sourceModel);
|
||||
public:
|
||||
explicit TrainingVoiceCommunicationDialogFilter(int32_t exerciseId,
|
||||
TrainingVoiceCommunicationDialogModel* sourceModel);
|
||||
|
||||
QByteArray modelToJson() const;
|
||||
QByteArray modelToJson() const;
|
||||
|
||||
protected:
|
||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
||||
protected:
|
||||
bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override;
|
||||
|
||||
private:
|
||||
|
||||
using LtsWidgets::LtsColumnFilterProxyModel::setSourceModel;
|
||||
private:
|
||||
using LtsWidgets::LtsColumnFilterProxyModel::setSourceModel;
|
||||
|
||||
int32_t m_exerciseId;
|
||||
TrainingVoiceCommunicationDialogModel *m_sourceModel;
|
||||
int32_t m_exerciseId;
|
||||
TrainingVoiceCommunicationDialogModel* m_sourceModel;
|
||||
};
|
||||
|
||||
}
|
||||
} // namespace AudioVideoManagement
|
||||
|
||||
Q_DECLARE_METATYPE(AudioVideoManagement::TvcConfig)
|
||||
Reference in new issue
Block a user