#include "viewwidgetcontainer.h" #include 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(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; } } } }