- Copied complete Lts/Tools directory from qt5-before to qt6-after - Updated 32 CMakeLists.txt files (Qt5:: → Qt6::) - Tools subdirectory already included in parent Lts/CMakeLists.txt - All 72 tool submodules now present in qt6-migrated-legatus - Includes: Adler, ArAssets, ConfigX, DBAdministration, DBUpdate, DdsView, InfrastructureManagement, and 67 more tools - C++17 standard (RTI 7.7.0 compatibility maintained) - Tests deferred until final validation phase Migration progress: ✅ Lts/Application (68 files) ✅ Lts/DDS (verified Qt6-ready) ✅ Lts/Plugins (60 submodules, verified) ✅ Lts/Projects (5 submodules, verified) ✅ Lts/Proxies (13 submodules, verified) ✅ Lts/Services (47 submodules, verified) ✅ Lts/Tools (72 submodules, copied + CMake updated) ✅ Lts/Viewer (LtsFileDialog, LtsReportDisplay, SituationMap) 🟡 TetraIF (partial) 🟡 Z (partial: nglwidgets, QtSingleApplication, qsql_informix, WMS_Interface)
172 lines
4.8 KiB
C++
Executable File
172 lines
4.8 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* ABC widget for creating custom views of dds sequences
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
* Created by Jens Heilmann, SLTE, 2021-05-17
|
|
*/
|
|
#include "abstractsequencewidget.h"
|
|
|
|
#include <QToolButton>
|
|
|
|
AbstractSequenceWidget::AbstractSequenceWidget(const RwMode &readOnly,
|
|
const QString &name,
|
|
const dds::core::xtypes::DynamicType &contentType,
|
|
NGL::INGLLogger &logger,
|
|
QWidget *parent)
|
|
: QGroupBox(name,parent)
|
|
, m_rwMode(readOnly)
|
|
, m_pbAddMember(new QToolButton)
|
|
, m_contentType(contentType)
|
|
, m_name(name)
|
|
, m_logger(logger)
|
|
{
|
|
m_pbAddMember->setIcon(QIcon(QLatin1String(":/icons/png/add.png")));
|
|
|
|
connect(m_pbAddMember, &QToolButton::clicked, [&] () {
|
|
const uint32_t &index = m_memberList.size() + 1;
|
|
QString findObjectName = getObjectName(index);
|
|
|
|
if(findChild<QWidget *>(findObjectName))
|
|
return;
|
|
|
|
QWidget *child = DetailView::createWidget(m_rwMode, m_contentType, findObjectName, m_logger);
|
|
addMemberWidget(child);
|
|
});
|
|
|
|
if(m_rwMode == RwMode::ReadOnly)
|
|
m_pbAddMember->setDisabled(true);
|
|
}
|
|
|
|
AbstractSequenceWidget::~AbstractSequenceWidget()
|
|
{
|
|
delete m_pbAddMember;
|
|
}
|
|
|
|
void AbstractSequenceWidget::setValue(const dds::core::xtypes::DynamicData &inner,
|
|
const uint32_t &index, const QWidget *useOn)
|
|
{
|
|
QString findObjectName = getObjectName(index);
|
|
QWidget *child = findChild<QWidget *>(findObjectName);
|
|
|
|
if(!child)
|
|
{
|
|
child = DetailView::createWidget(m_rwMode,
|
|
m_contentType,
|
|
findObjectName,
|
|
m_logger);
|
|
|
|
addMemberWidget(child);
|
|
}
|
|
|
|
DetailView::setWidgetData(inner,
|
|
m_contentType.kind(),
|
|
index,
|
|
findObjectName,
|
|
useOn,
|
|
m_logger);
|
|
|
|
}
|
|
|
|
void AbstractSequenceWidget::getValue(const QString &name, dds::core::xtypes::DynamicData &data,
|
|
const uint32_t &index, const QWidget *useOn) const
|
|
{
|
|
QString findObjectName = name + QLatin1Char('.') + QString::number(index);
|
|
|
|
if(!findChild<QWidget *>(findObjectName))
|
|
return;
|
|
|
|
DetailView::getWidgetData(data,
|
|
m_contentType.kind(),
|
|
index,
|
|
findObjectName,
|
|
useOn,
|
|
m_logger);
|
|
}
|
|
|
|
void AbstractSequenceWidget::setMemberCount(int count)
|
|
{
|
|
QWidget *child = nullptr;
|
|
do
|
|
{
|
|
child = findChild<QWidget *>(getObjectName(++count));
|
|
delete child;
|
|
}
|
|
while (child);
|
|
m_memberList.removeAll(nullptr);
|
|
}
|
|
|
|
uint32_t AbstractSequenceWidget::getMemberCount() const
|
|
{
|
|
int count = 0;
|
|
QWidget *child = findChild<QWidget *>(getObjectName(count+1));
|
|
while(child)
|
|
{
|
|
count++;
|
|
child = findChild<QWidget *>(getObjectName(count+1));
|
|
}
|
|
return count;
|
|
}
|
|
|
|
NGL::INGLLogger &AbstractSequenceWidget::logger() const
|
|
{
|
|
return m_logger;
|
|
}
|
|
|
|
QToolButton *AbstractSequenceWidget::pbAddMember() const
|
|
{
|
|
return m_pbAddMember;
|
|
}
|
|
|
|
QString AbstractSequenceWidget::getObjectName(int index) const
|
|
{
|
|
return m_name + QLatin1Char('.') + QString::number(index);
|
|
}
|
|
|
|
void AbstractSequenceWidget::addMemberWidget(QWidget *member)
|
|
{
|
|
QToolButton *button = new QToolButton(member);
|
|
button->setIcon(QIcon(QLatin1String(":/icons/png/remove.png")));
|
|
|
|
connect(button, &QToolButton::clicked, member, &QWidget::deleteLater);
|
|
connect(member, &QWidget::destroyed, this, &AbstractSequenceWidget::deleteMemberWidget);
|
|
connect(member, &QWidget::destroyed, button, &QToolButton::deleteLater);
|
|
|
|
if(m_rwMode == RwMode::ReadOnly)
|
|
button->setDisabled(true);
|
|
|
|
DEBUG_LOG(m_logger) << "new member widget: " << member->objectName();
|
|
m_memberList.push_back(member);
|
|
setupMemberWidget(member, button, member->objectName());
|
|
}
|
|
|
|
void AbstractSequenceWidget::deleteMemberWidget(QObject *member)
|
|
{
|
|
QWidget *w = qobject_cast<QWidget*>(member);
|
|
|
|
if(!w)
|
|
return;
|
|
|
|
for(auto child : w->children()) // necessary?
|
|
child->deleteLater();
|
|
|
|
m_memberList.removeAll(w);
|
|
for(int i=0; i<m_memberList.size(); i++)
|
|
{
|
|
m_memberList[i]->setObjectName(getObjectName(i + 1));
|
|
|
|
DEBUG_LOG(m_logger) << "new name: " << m_memberList[i]->objectName();
|
|
for(auto child : m_memberList[i]->children())
|
|
{
|
|
if(child->objectName().isEmpty())
|
|
continue;
|
|
|
|
QString childName = child->objectName();
|
|
QString newId = m_name + QLatin1Char('.') + QString::number(i + 1);
|
|
child->setObjectName(childName.replace(QRegExp(m_name + QLatin1String(".([0-9]*)")), newId));
|
|
DEBUG_LOG(m_logger) << "new child name: " << child->objectName();
|
|
}
|
|
}
|
|
}
|