void CDockablePropertyGridViews::SetTabPropertyGrid(const std::_tstring & label, const ITable* data)
{
    StringPropertyGridMap::const_iterator itr = m_propertyGridTabs.find(label);
    if (itr == m_propertyGridTabs.end())
    {
        bool edges = boost::algorithm::iequals(label, _T("edges"));
        StlLinked<CPropertyGridView> propertyGridView = new CPropertyGridView(edges ? XGMML_CAT_EDGE : XGMML_CAT_VERTEX);
        m_propertyGridTabs[label] = propertyGridView.get();
        propertyGridView->Create(NULL, label.c_str(), WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), &m_wndTab, 1);
        propertyGridView->SetFont(&afxGlobalData.fontRegular);
        m_wndTab.AddTab(propertyGridView, label.c_str(), 0, FALSE);
        propertyGridView->SetOwner(m_owner);
    }
    m_propertyGridTabs[label]->SetData(data);
}
void CDockableDataViews::SetTabEcl(const std::_tstring & moduleLabel, const std::_tstring & attributeLabel, int row, const CUniqueID & id)
{
    std::_tstring label = moduleLabel + _T(".") + attributeLabel;
    StringSourceMap::iterator itr = m_sourceTabs.find(label);
    if (itr == m_sourceTabs.end())
    {
        StlLinked<CAttributeDataView> attributeDataView = new CAttributeDataView();
        m_sourceTabs[label] = attributeDataView.get();
        attributeDataView->Create(NULL, label.c_str(), WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), &m_wndTab, 1);
        attributeDataView->SetFont(&afxGlobalData.fontRegular);
        m_wndTab.AddTab(attributeDataView, label.c_str(), 0, FALSE);
        attributeDataView->SetOwner(m_owner);
        attributeDataView->SetSource(moduleLabel, attributeLabel);
    }
    m_sourceTabs[label]->SetBreakpointLocation(row, id);
}
void CDockableDataViews::SetTabEcl(const std::_tstring & localFile, int row, const CUniqueID & id)
{
    std::_tstring label = localFile;
    StringSourceMap::iterator itr = m_sourceTabs.find(localFile);
    if (itr == m_sourceTabs.end())
    {
        StlLinked<CLocalDataView> attributeDataView = new CLocalDataView();
        m_sourceTabs[localFile] = attributeDataView.get();
        attributeDataView->Create(NULL, localFile.c_str(), WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), &m_wndTab, 1);
        attributeDataView->SetFont(&afxGlobalData.fontRegular);
        boost::filesystem::path p = stringToPath(localFile);
        m_wndTab.AddTab(attributeDataView, pathToWString(p.filename()).c_str(), 0, FALSE);
        attributeDataView->SetOwner(m_owner);
        attributeDataView->SetSource(localFile);
    }
    m_sourceTabs[localFile]->SetBreakpointLocation(row, id);
}
void CDockableDataViews::SetTabEcl(Dali::IWorkunit * wu, int row, const CUniqueID & id)
{
    std::_tstring label = _T("Builder");
    StringSourceMap::iterator itr = m_sourceTabs.find(label);
    if (itr == m_sourceTabs.end())
    {
        StlLinked<CBuilderDataView> builderDataView = new CBuilderDataView();
        m_sourceTabs[label] = builderDataView.get();
        builderDataView->Create(NULL, label.c_str(), WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), &m_wndTab, 1);
        builderDataView->SetFont(&afxGlobalData.fontRegular);
        m_wndTab.InsertTab(builderDataView, label.c_str(), 0, 0, FALSE);
        builderDataView->SetOwner(m_owner);
        builderDataView->SetSource(wu);
        builderDataView->LoadText();
    }
    if (row >= 0)
        m_sourceTabs[label]->SetBreakpointLocation(row, id);
}