60 lines
1.5 KiB
C++
Executable File
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|