void EventManager::onCurrentBodyItemChanged(BodyItem* bodyItem) { if( bodyItem == nullptr ){ _curBodyItem = nullptr; _curLink = nullptr; _lnkSelChangedCon.disconnect(); LinkManager::instance()->setCurrentBodyLink(nullptr, nullptr); for(auto it = begin(_curLinkChangedEvMap) ; it != end(_curLinkChangedEvMap) ; ++it){ it->second(nullptr, nullptr); } return; } if( bodyItem != _curBodyItem ){ _curBodyItem = bodyItem; _curLink = _curBodyItem->body()->rootLink(); } if( _lnkSelChangedCon.connected() == true ){ _lnkSelChangedCon.disconnect(); } if( _lnkSelChangedCon.connected() == false ){ LinkSelectionView* lnkSelView = LinkSelectionView::mainInstance(); if( lnkSelView ){ _lnkSelChangedCon = lnkSelView->sigSelectionChanged(_curBodyItem).connect(bind(&EventManager::onLinkItemSelected, this)); } } LinkManager::instance()->setCurrentBodyLink(_curBodyItem->body(), _curLink); for(auto it = begin(_curLinkChangedEvMap) ; it != end(_curLinkChangedEvMap) ; ++it){ it->second(_curBodyItem->body(), _curLink); } }
bool EventManager::initialize() { if( _curBodyChangedCon.connected() == false ){ _curBodyChangedCon = BodyBar::instance()->sigCurrentBodyItemChanged().connect( boost::bind(&EventManager::onCurrentBodyItemChanged, this, _1)); } if( _lnkSelChangedCon.connected() == false ){ LinkSelectionView* lnkSelView = LinkSelectionView::mainInstance(); if( lnkSelView ){ _lnkSelChangedCon = lnkSelView->sigSelectionChanged(_curBodyItem).connect(bind(&EventManager::onLinkItemSelected, this)); } } RootItem* rootItem = RootItem::instance(); _itemAddCon.disconnect(); _itemAddCon = rootItem->sigItemAdded().connect(boost::bind(&EventManager::onItemAdd, this, _1)); _itemRemoveCon.disconnect(); _itemRemoveCon = rootItem->sigSubTreeRemoved().connect(boost::bind(&EventManager::onSubTreeRemoved, this, _1, _2)); _isInitialized = true; return true; }
void EditableSceneBodyImpl::onLinkVisibilityCheckToggled() { LinkSelectionView* selectionView = LinkSelectionView::mainInstance(); if(linkVisibilityCheck->isChecked()){ connectionToSigLinkSelectionChanged.reset( selectionView->sigSelectionChanged(bodyItem).connect( boost::bind(&EditableSceneBodyImpl::onLinkSelectionChanged, this))); onLinkSelectionChanged(); } else { connectionToSigLinkSelectionChanged.disconnect(); boost::dynamic_bitset<> visibilities; visibilities.resize(self->numSceneLinks(), true); self->setLinkVisibilities(visibilities); } }
void BodyItemImpl::onLinkVisibilityCheckToggled() { LinkSelectionView* selectionView = LinkSelectionView::mainInstance(); connectionToSigLinkSelectionChanged.disconnect(); if(linkVisibilityCheck->isChecked()){ if(sceneBody){ sceneBody->setLinkVisibilities(selectionView->getLinkSelection(self)); } connectionToSigLinkSelectionChanged = selectionView->sigSelectionChanged(self).connect( boost::bind(&BodyItemImpl::onLinkSelectionChanged, this)); } else { if(sceneBody){ boost::dynamic_bitset<> visibilities; visibilities.resize(body->numLinks(), true); sceneBody->setLinkVisibilities(visibilities); } } }