Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+171
@@ -0,0 +1,171 @@
|
||||
/**
|
||||
* @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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user