[PATCH libreoffice-4-0] Syncronize thumbnails ids with SfxDocumentTemplates when mov...
Bosdonnat Cedric (via Code Review)
gerrit at gerrit.libreoffice.org
Wed Mar 27 05:12:28 PDT 2013
Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/3091
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/91/3091/1
Syncronize thumbnails ids with SfxDocumentTemplates when moving.
Change-Id: I9ee17e00f769ca16f566b1397d09b76a09273912
(cherry picked from commit dda5fe60ff6dfd61f5f262c61e1d538d20e9c978)
---
M sfx2/inc/sfx2/templatelocalview.hxx
M sfx2/source/control/templatelocalview.cxx
M sfx2/source/doc/templatedlg.cxx
3 files changed, 62 insertions(+), 47 deletions(-)
diff --git a/sfx2/inc/sfx2/templatelocalview.hxx b/sfx2/inc/sfx2/templatelocalview.hxx
index 3bcacc4..68b7dc7 100644
--- a/sfx2/inc/sfx2/templatelocalview.hxx
+++ b/sfx2/inc/sfx2/templatelocalview.hxx
@@ -56,9 +56,9 @@
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 ab55ca4..429b4dc 100644
--- a/sfx2/source/control/templatelocalview.cxx
+++ b/sfx2/source/control/templatelocalview.cxx
@@ -289,11 +289,8 @@
}
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 @@
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 @@
// 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)
{
- pSrc->maTemplates.erase(aIter);
-
- RemoveItem(pViewItem->mnId);
- break;
+ aIter = pSrc->maTemplates.erase(aIter);
}
+ else
+ {
+ // Keep region document id syncronized with SfxDocumentTemplates
+ if (aIter->nDocId > pViewItem->mnDocId)
+ --aIter->nDocId;
+
+ ++aIter;
+ }
+ }
+
+ // 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;
}
}
- bRefresh = true;
- }
- else
- bRet = false;
-
- 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 @@
{
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 @@
{
// 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 f1439c3..c87030c 100644
--- a/sfx2/source/doc/templatedlg.cxx
+++ b/sfx2/source/doc/templatedlg.cxx
@@ -1343,8 +1343,7 @@
{
// 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 @@
// 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;
--
To view, visit https://gerrit.libreoffice.org/3091
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9ee17e00f769ca16f566b1397d09b76a09273912
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Bosdonnat Cedric <cedric.bosdonnat at free.fr>
Gerrit-Reviewer: Rafael Dominguez <venccsralph at gmail.com>
More information about the LibreOffice
mailing list