Files
qt5-legatus-legacy/Lts/Plugins/BuildingViewer/Common/BgViewer/viewerCtrl/viewwidgetcontainer.cpp
T
2026-08-13 18:33:10 +02:00

60 lines
1.5 KiB
C++
Executable File

#include "viewwidgetcontainer.h"
#include <cassert>
namespace VCtrl
{
ViewWidget *ViewWidgetContainer::getViewWidget(unsigned int contextID) const
{
for (const auto &pView : m_vecViewWidgets)
{
if (pView->contextID() == contextID)
return pView;
}
return nullptr;
}
void ViewWidgetContainer::add(ViewWidget *pWidget)
{
m_vecViewWidgets.push_back(pWidget);
m_mapFeatureID_To_ViewWidget[pWidget->featureID()] = pWidget;
connect(pWidget, &QObject::destroyed, this, &ViewWidgetContainer::onWidgetDestroyed);
}
void ViewWidgetContainer::remove(const std::string &featureID)
{
auto it = m_mapFeatureID_To_ViewWidget.find(featureID);
if (it != m_mapFeatureID_To_ViewWidget.end())
{
ViewWidget *pWidget = it->second;
auto vecIt = std::find(m_vecViewWidgets.begin(), m_vecViewWidgets.end(), pWidget);
if (vecIt != m_vecViewWidgets.end())
m_vecViewWidgets.erase(vecIt);
m_mapFeatureID_To_ViewWidget.erase(it);
assert(m_vecViewWidgets.size() == m_mapFeatureID_To_ViewWidget.size());
}
}
void ViewWidgetContainer::onWidgetDestroyed(QObject *obj)
{
ViewWidget *pWidget = static_cast<ViewWidget*>(obj);
auto vecIt = std::find(m_vecViewWidgets.begin(), m_vecViewWidgets.end(), pWidget);
if (vecIt != m_vecViewWidgets.end())
m_vecViewWidgets.erase(vecIt);
for (auto it = m_mapFeatureID_To_ViewWidget.begin(); it != m_mapFeatureID_To_ViewWidget.end(); ++it)
{
if (it->second == pWidget)
{
m_mapFeatureID_To_ViewWidget.erase(it);
break;
}
}
}
}