diff options
author | Rafael Dominguez <venccsralph@gmail.com> | 2013-03-26 00:30:08 -0430 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2013-03-28 12:25:23 +0000 |
commit | a67bf57cf130d461dcf306ee381e9e4a7ee013a0 (patch) | |
tree | 79a88702f8e50ddc31c45ee96100871fc009abf6 | |
parent | 82a320dbb30e843ef5e69ec82be7179a8fba28bc (diff) |
Syncronize thumbnails ids with SfxDocumentTemplates when moving.
Change-Id: I9ee17e00f769ca16f566b1397d09b76a09273912
(cherry picked from commit dda5fe60ff6dfd61f5f262c61e1d538d20e9c978)
Reviewed-on: https://gerrit.libreoffice.org/3091
Reviewed-by: Miklos Vajna <vmiklos@suse.cz>
Tested-by: Miklos Vajna <vmiklos@suse.cz>
-rw-r--r-- | sfx2/inc/sfx2/templatelocalview.hxx | 4 | ||||
-rw-r--r-- | sfx2/source/control/templatelocalview.cxx | 93 | ||||
-rw-r--r-- | sfx2/source/doc/templatedlg.cxx | 10 |
3 files changed, 61 insertions, 46 deletions
diff --git a/sfx2/inc/sfx2/templatelocalview.hxx b/sfx2/inc/sfx2/templatelocalview.hxx index 3bcacc40f9e3..68b7dc7ff155 100644 --- a/sfx2/inc/sfx2/templatelocalview.hxx +++ b/sfx2/inc/sfx2/templatelocalview.hxx @@ -56,9 +56,9 @@ public: bool removeTemplate (const sal_uInt16 nItemId, const sal_uInt16 nSrcItemId); bool moveTemplate (const ThumbnailViewItem* pItem, const sal_uInt16 nSrcItem, - const sal_uInt16 nTargetItem, bool bCopy); + const sal_uInt16 nTargetItem); - bool moveTemplates (const std::set<const ThumbnailViewItem*,selection_cmp_fn> &rItems, const sal_uInt16 nTargetItem, bool bCopy); + bool moveTemplates (const std::set<const ThumbnailViewItem*,selection_cmp_fn> &rItems, const sal_uInt16 nTargetItem); bool copyFrom (const sal_uInt16 nRegionItemId, const BitmapEx &rThumbnail, const OUString &rPath); diff --git a/sfx2/source/control/templatelocalview.cxx b/sfx2/source/control/templatelocalview.cxx index ab55ca46018c..429b4dc82ef0 100644 --- a/sfx2/source/control/templatelocalview.cxx +++ b/sfx2/source/control/templatelocalview.cxx @@ -289,11 +289,8 @@ bool TemplateLocalView::removeTemplate (const sal_uInt16 nItemId, const sal_uInt } bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_uInt16 nSrcItem, - const sal_uInt16 nTargetItem, bool bCopy) + const sal_uInt16 nTargetItem) { - bool bRet = true; - bool bRefresh = false; - TemplateContainerItem *pTarget = NULL; TemplateContainerItem *pSrc = NULL; @@ -313,16 +310,13 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_ const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(pItem); - bool bOK; + bool bCopy = !mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnDocId); if (bCopy) - bOK = mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1); - else - bOK = mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1); - - if (!bOK) - return false; - + { + if (!mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnDocId)) + return false; + } // move template to destination TemplateItemProperties aTemplateItem; @@ -340,37 +334,45 @@ bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_ // remove template from region cached data std::vector<TemplateItemProperties>::iterator aIter; - for (aIter = pSrc->maTemplates.begin(); aIter != pSrc->maTemplates.end(); ++aIter) + for (aIter = pSrc->maTemplates.begin(); aIter != pSrc->maTemplates.end();) { - if (aIter->nId == pViewItem->mnId) + if (aIter->nDocId == pViewItem->mnDocId) + { + aIter = pSrc->maTemplates.erase(aIter); + } + else { - pSrc->maTemplates.erase(aIter); + // Keep region document id syncronized with SfxDocumentTemplates + if (aIter->nDocId > pViewItem->mnDocId) + --aIter->nDocId; - RemoveItem(pViewItem->mnId); - break; + ++aIter; } } - } - bRefresh = true; - } - else - bRet = false; + // Keep view document id syncronized with SfxDocumentTemplates + std::vector<ThumbnailViewItem*>::iterator pItemIter = mItemList.begin(); + for (; pItemIter != mItemList.end(); ++pItemIter) + { + if (static_cast<TemplateViewItem*>(*pItemIter)->mnDocId > pViewItem->mnDocId) + --static_cast<TemplateViewItem*>(*pItemIter)->mnDocId; + } + } - if (bRefresh) - { lcl_updateThumbnails(pSrc); lcl_updateThumbnails(pTarget); CalculateItemPositions(); Invalidate(); + + return true; } - return bRet; + return false; } bool TemplateLocalView::moveTemplates(const std::set<const ThumbnailViewItem*, selection_cmp_fn> &rItems, - const sal_uInt16 nTargetItem, bool bCopy) + const sal_uInt16 nTargetItem) { bool ret = true; bool refresh = false; @@ -400,17 +402,15 @@ bool TemplateLocalView::moveTemplates(const std::set<const ThumbnailViewItem*, s { const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(*aSelIter); - bool bOK; + bool bCopy = !mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnDocId); if (bCopy) - bOK = mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1); - else - bOK = mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1); - - if (!bOK) { - ret = false; - continue; + if (!mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnDocId)) + { + ret = false; + continue; + } } // move template to destination @@ -429,15 +429,30 @@ bool TemplateLocalView::moveTemplates(const std::set<const ThumbnailViewItem*, s { // remove template from region cached data - std::vector<TemplateItemProperties>::iterator pIter; - for (pIter = pSrc->maTemplates.begin(); pIter != pSrc->maTemplates.end(); ++pIter) + std::vector<TemplateItemProperties>::iterator pPropIter; + for (pPropIter = pSrc->maTemplates.begin(); pPropIter != pSrc->maTemplates.end();) { - if (pIter->nId == pViewItem->mnId) + if (pPropIter->nDocId == pViewItem->mnDocId) { - pSrc->maTemplates.erase(pIter); + pPropIter = pSrc->maTemplates.erase(pPropIter); aItemIds.push_back(pViewItem->mnId); - break; } + else + { + // Keep region document id syncronized with SfxDocumentTemplates + if (pPropIter->nDocId > pViewItem->mnDocId) + --pPropIter->nDocId; + + ++pPropIter; + } + } + + // Keep view document id syncronized with SfxDocumentTemplates + std::vector<ThumbnailViewItem*>::iterator pItemIter = mItemList.begin(); + for (; pItemIter != mItemList.end(); ++pItemIter) + { + if (static_cast<TemplateViewItem*>(*pItemIter)->mnDocId > pViewItem->mnDocId) + --static_cast<TemplateViewItem*>(*pItemIter)->mnDocId; } } diff --git a/sfx2/source/doc/templatedlg.cxx b/sfx2/source/doc/templatedlg.cxx index f1439c378860..c87030cc2013 100644 --- a/sfx2/source/doc/templatedlg.cxx +++ b/sfx2/source/doc/templatedlg.cxx @@ -1343,8 +1343,7 @@ void SfxTemplateManagerDlg::localMoveTo(sal_uInt16 nMenuId) { // Move templates to desired folder if for some reason move fails // try copying them. - if (!maView->moveTemplates(maSelTemplates,nItemId,false) && - !maView->moveTemplates(maSelTemplates,nItemId,true)) + if (!maView->moveTemplates(maSelTemplates,nItemId)) { OUString aTemplateList; @@ -1449,13 +1448,14 @@ void SfxTemplateManagerDlg::localSearchMoveTo(sal_uInt16 nMenuId) // Move templates to desired folder if for some reason move fails // try copying them. std::set<const ThumbnailViewItem*>::const_iterator aIter; - for (aIter = maSelTemplates.begin(); aIter != maSelTemplates.end(); ++aIter) + std::set<const ThumbnailViewItem*,selection_cmp_fn> aSelTemplates = maSelTemplates; //Copy to avoid invalidating an iterator + + for (aIter = aSelTemplates.begin(); aIter != aSelTemplates.end(); ++aIter) { const TemplateSearchViewItem *pItem = static_cast<const TemplateSearchViewItem*>(*aIter); - if(!maView->moveTemplate(pItem,pItem->mnRegionId+1,nItemId,false) - && !maView->moveTemplate(pItem,pItem->mnRegionId+1,nItemId,true)) + if(!maView->moveTemplate(pItem,pItem->mnRegionId+1,nItemId)) { if (aTemplateList.isEmpty()) aTemplateList = (*aIter)->maTitle; |