diff options
Diffstat (limited to 'sd/source/ui')
-rw-r--r-- | sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx | 5 | ||||
-rw-r--r-- | sd/source/ui/slidesorter/model/SlideSorterModel.cxx | 29 |
2 files changed, 24 insertions, 10 deletions
diff --git a/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx b/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx index 0837c565e5a5..e5d859f743be 100644 --- a/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx +++ b/sd/source/ui/slidesorter/inc/model/SlideSorterModel.hxx @@ -216,8 +216,9 @@ private: void AdaptSize(); SdPage* GetPage (const sal_Int32 nCoreIndex) const; - void InsertSlide (SdPage* pPage); - void DeleteSlide (const SdPage* pPage); + void InsertSlide (SdPage* pPage, bool bMarkSelected); + // return if this page was marked as selected before being removed + bool DeleteSlide (const SdPage* pPage); void UpdateIndices (const sal_Int32 nFirstIndex); }; diff --git a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx index 87cd3fb240c2..062360bb52db 100644 --- a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx +++ b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx @@ -534,15 +534,17 @@ bool SlideSorterModel::NotifyPageEvent (const SdrPage* pSdrPage) //NotifyPageEvent is called for add, remove, *and* change position so for //the change position case we must ensure we don't end up with the slide //duplicated in our list - DeleteSlide(pPage); + bool bSelected = DeleteSlide(pPage); if (pPage->IsInserted()) - InsertSlide(pPage); + { + InsertSlide(pPage, bSelected); + } CheckModel(*this); return true; } -void SlideSorterModel::InsertSlide (SdPage* pPage) +void SlideSorterModel::InsertSlide(SdPage* pPage, bool bMarkSelected) { // Find the index at which to insert the given page. sal_uInt16 nCoreIndex (pPage->GetPageNum()); @@ -559,19 +561,24 @@ void SlideSorterModel::InsertSlide (SdPage* pPage) if (GetPage(nIndex+1) != GetPageDescriptor(nIndex)->GetPage()) return; + auto iter = maPageDescriptors.begin() + nIndex; + // Insert the given page at index nIndex - maPageDescriptors.insert( - maPageDescriptors.begin()+nIndex, + iter = maPageDescriptors.insert( + iter, std::make_shared<PageDescriptor>( Reference<drawing::XDrawPage>(mxSlides->getByIndex(nIndex),UNO_QUERY), pPage, nIndex)); + if (bMarkSelected) + (*iter)->SetState(PageDescriptor::ST_Selected, true); + // Update page indices. UpdateIndices(nIndex+1); } -void SlideSorterModel::DeleteSlide (const SdPage* pPage) +bool SlideSorterModel::DeleteSlide (const SdPage* pPage) { sal_Int32 nIndex(0); @@ -594,15 +601,21 @@ void SlideSorterModel::DeleteSlide (const SdPage* pPage) } } + bool bMarkedSelected(false); + if(nIndex >= 0 && nIndex < static_cast<sal_Int32>(maPageDescriptors.size())) { if (maPageDescriptors[nIndex]) if (maPageDescriptors[nIndex]->GetPage() != pPage) - return; + return false; - maPageDescriptors.erase(maPageDescriptors.begin()+nIndex); + auto iter = maPageDescriptors.begin() + nIndex; + bMarkedSelected = (*iter)->HasState(PageDescriptor::ST_Selected); + maPageDescriptors.erase(iter); UpdateIndices(nIndex); } + + return bMarkedSelected; } void SlideSorterModel::UpdateIndices (const sal_Int32 nFirstIndex) |