bool Document::SetCell(Address const& rAddr, Cell::SPtr spCell, bool Force) { Address::List ErasedAddresses; if (!m_spDatabase->SetCellData(rAddr, *spCell->GetData(), ErasedAddresses, Force)) return false; RemoveLabelIfNeeded(rAddr); for (Address const& rErsdAddr : ErasedAddresses) if (GetCell(rErsdAddr) == nullptr) { if (HasCrossReferenceTo(rErsdAddr)) RemoveCrossReference(rErsdAddr); if (HasCrossReferenceFrom(rErsdAddr)) { auto Label = GetLabelFromAddress(rErsdAddr); if (Label.GetType() != Label::Unknown) { m_LabelUpdatedSignal(rErsdAddr, Label, true); } } } Address::List AddressList; AddressList.push_back(rAddr); AddressList.merge(ErasedAddresses); m_DocumentUpdatedSignal(); m_AddressUpdatedSignal(AddressList); return true; }