#include "lts_abstract_sequence_widget.h" #include #include namespace LtsWidgets { LtsAbstractSequenceWidget::LtsAbstractSequenceWidget(QWidget* parent, const bool& readOnly) : QGroupBox(parent), m_readOnly(readOnly), m_pbAddMember(new QToolButton) { m_pbAddMember->setIcon(QIcon(QLatin1String(":/icons/png/add.png"))); connect(m_pbAddMember, &QToolButton::clicked, this, &LtsAbstractSequenceWidget::addMember); } LtsAbstractSequenceWidget::~LtsAbstractSequenceWidget() {} void LtsAbstractSequenceWidget::addWidget(QWidget* widget, bool isReadOnly, bool isButtonVisible) { addMemberWidget(widget, isReadOnly, isButtonVisible); m_pbAddMember->setDisabled(isReadOnly); m_pbAddMember->setVisible(isButtonVisible); } int LtsAbstractSequenceWidget::getMemberlistSize() { return m_memberList.size(); } void LtsAbstractSequenceWidget::getValue(QWidget* data, const QString& findObjectName) const { if (!findChild(findObjectName)) return; data = findChild(findObjectName); } void LtsAbstractSequenceWidget::setMemberCount(int count) { QWidget* child = nullptr; do { child = findChild(getObjectName(++count)); delete child; } while (child); m_memberList.removeAll(nullptr); } uint32_t LtsAbstractSequenceWidget::getMemberCount() const { int count = 0; QWidget* child = findChild(getObjectName(count + 1)); while (child) { count++; child = findChild(getObjectName(count + 1)); } return count; } QToolButton* LtsAbstractSequenceWidget::pbAddMember() const { return m_pbAddMember; } QString LtsAbstractSequenceWidget::getObjectName(int index) const { return QString::number(index); } void LtsAbstractSequenceWidget::addMemberWidget(QWidget* member, bool isReadOnly, bool isButtonVisible) { QToolButton* button = new QToolButton(); button->setIcon(QIcon(QLatin1String(":/icons/png/remove.png"))); button->setDisabled(isReadOnly); connect(button, &QToolButton::clicked, member, &QWidget::deleteLater); connect(member, &QWidget::destroyed, this, &LtsAbstractSequenceWidget::deleteMemberWidget); connect(member, &QWidget::destroyed, button, &QToolButton::deleteLater); m_memberList.push_back(member); setupMemberWidget(member, button, member->objectName(), isButtonVisible); } void LtsAbstractSequenceWidget::deleteMemberWidget(QObject* member) { QWidget* w = qobject_cast(member); if (!w) return; for (auto child : w->children()) child->deleteLater(); m_memberList.removeAll(w); for (int i = 0; i < m_memberList.size(); i++) { m_memberList[i]->setObjectName(getObjectName(i + 1)); for (auto child : m_memberList[i]->children()) { if (child->objectName().isEmpty()) continue; QString childName = child->objectName(); QString newId = QString::number(i + 1); child->setObjectName(childName.replace(QRegularExpression(QLatin1String("\\.([0-9]*)")), newId)); } } } } // namespace LtsWidgets