Exemple #1
0
void BodyBarImpl::onItemSelectionChanged(const ItemList<BodyItem>& bodyItems)
{
    bool selectedBodyItemsChanged = false;
    
    if(selectedBodyItems != bodyItems){
        selectedBodyItems = bodyItems;
        selectedBodyItemsChanged = true;
    }

    BodyItem* firstItem = bodyItems.toSingle();

    if(firstItem && firstItem != currentBodyItem){
        currentBodyItem = firstItem;
        connectionOfCurrentBodyItemDetachedFromRoot.disconnect();
        connectionOfCurrentBodyItemDetachedFromRoot = currentBodyItem->sigDetachedFromRoot().connect(
            std::bind(&BodyBarImpl::onBodyItemDetachedFromRoot, this));
        sigCurrentBodyItemChanged(currentBodyItem.get());
    }

    if(selectedBodyItemsChanged){
        sigBodyItemSelectionChanged(selectedBodyItems);
    }

    targetBodyItems.clear();
    if(selectedBodyItems.empty()){
        if(currentBodyItem){
            targetBodyItems.push_back(currentBodyItem);
        }
    } else {
        targetBodyItems = selectedBodyItems;
    }
}
void TextEditViewImpl::onItemSelectionChanged(const ItemList<AbstractTextItem>& textItems)
{
    if(selectedTextItems_ != textItems)
        selectedTextItems_ = textItems;
    else
        return;

    AbstractTextItemPtr firstItem = textItems.toSingle();

    if(firstItem && firstItem != currentTextItem_){
        if(currentTextItem_)
            maybeSave();
        currentTextItem_ = firstItem;
        connectionOfCurrentBodyItemDetachedFromRoot.disconnect();
        connectionOfCurrentBodyItemDetachedFromRoot = currentTextItem_->sigDetachedFromRoot().connect(
            boost::bind(&TextEditViewImpl::onTextItemDetachedFromRoot, this));
        open();
    }
}