void
GuiApplicationManagerPrivate::removePluginToolButtonInternal(const PluginGroupNodePtr& n,
                                                             const std::vector<std::string>& grouping)
{
    assert(grouping.size() > 0);

    const std::list<PluginGroupNodePtr>& children = n->getChildren();
    for (std::list<PluginGroupNodePtr>::const_iterator it = children.begin();
         it != children.end(); ++it) {
        if ( (*it)->getTreeNodeID().toStdString() == grouping[0] ) {
            if (grouping.size() > 1) {
                std::vector<std::string> newGrouping;
                for (std::size_t i = 1; i < grouping.size(); ++i) {
                    newGrouping.push_back(grouping[i]);
                }
                removePluginToolButtonInternal(*it, newGrouping);
                if ( (*it)->getChildren().empty() ) {
                    n->tryRemoveChild(*it);
                }
            } else {
                n->tryRemoveChild(*it);
            }
            break;
        }
    }
}
void
GuiApplicationManagerPrivate::removePluginToolButtonInternal(const boost::shared_ptr<PluginGroupNode>& n,
                                                             const QStringList& grouping)
{
    assert(grouping.size() > 0);

    const std::list<boost::shared_ptr<PluginGroupNode> >& children = n->getChildren();
    for (std::list<boost::shared_ptr<PluginGroupNode> >::const_iterator it = children.begin();
         it != children.end(); ++it) {
        if ( (*it)->getID() == grouping[0] ) {
            if (grouping.size() > 1) {
                QStringList newGrouping;
                for (int i = 1; i < grouping.size(); ++i) {
                    newGrouping.push_back(grouping[i]);
                }
                removePluginToolButtonInternal(*it, newGrouping);
                if ( (*it)->getChildren().empty() ) {
                    n->tryRemoveChild( it->get() );
                }
            } else {
                n->tryRemoveChild( it->get() );
            }
            break;
        }
    }
}
void
GuiApplicationManagerPrivate::removePluginToolButton(const QStringList& grouping)
{
    assert(grouping.size() > 0);

    for (std::list<boost::shared_ptr<PluginGroupNode> >::iterator it = _topLevelToolButtons.begin();
         it != _topLevelToolButtons.end(); ++it) {
        if ( (*it)->getID() == grouping[0] ) {
            if (grouping.size() > 1) {
                QStringList newGrouping;
                for (int i = 1; i < grouping.size(); ++i) {
                    newGrouping.push_back(grouping[i]);
                }
                removePluginToolButtonInternal(*it, newGrouping);
                if ( (*it)->getChildren().empty() ) {
                    _topLevelToolButtons.erase(it);
                }
            } else {
                _topLevelToolButtons.erase(it);
            }
            break;
        }
    }
}