2012-06-18 21:53:07 -04:30
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
/*
|
2013-04-24 17:14:03 +01:00
|
|
|
* This file is part of the LibreOffice project.
|
2012-06-18 21:53:07 -04:30
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*/
|
|
|
|
|
2012-07-29 22:52:44 -04:30
|
|
|
#include <sfx2/templatelocalview.hxx>
|
2012-06-18 21:53:07 -04:30
|
|
|
|
|
|
|
#include <comphelper/processfactory.hxx>
|
2016-05-01 13:05:00 +05:30
|
|
|
#include <comphelper/string.hxx>
|
2012-06-18 21:53:07 -04:30
|
|
|
#include <sfx2/doctempl.hxx>
|
2016-05-01 13:05:00 +05:30
|
|
|
#include <sfx2/inputdlg.hxx>
|
|
|
|
#include <sfx2/sfxresid.hxx>
|
2012-12-17 22:28:22 +01:00
|
|
|
#include <sfx2/templatecontaineritem.hxx>
|
2012-06-21 10:07:00 -04:30
|
|
|
#include <sfx2/templateviewitem.hxx>
|
|
|
|
#include <svl/inettype.hxx>
|
|
|
|
#include <tools/urlobj.hxx>
|
2012-06-18 21:53:07 -04:30
|
|
|
#include <unotools/ucbstreamhelper.hxx>
|
2015-05-11 09:35:06 +01:00
|
|
|
#include <vcl/builderfactory.hxx>
|
2012-06-18 21:53:07 -04:30
|
|
|
#include <vcl/pngread.hxx>
|
|
|
|
|
|
|
|
#include <com/sun/star/embed/ElementModes.hpp>
|
|
|
|
#include <com/sun/star/embed/XStorage.hpp>
|
2012-08-14 21:17:51 -04:30
|
|
|
#include <com/sun/star/frame/DocumentTemplates.hpp>
|
2012-06-18 21:53:07 -04:30
|
|
|
#include <com/sun/star/lang/XComponent.hpp>
|
2012-08-14 21:17:51 -04:30
|
|
|
#include <com/sun/star/frame/XDocumentTemplates.hpp>
|
2012-06-18 21:53:07 -04:30
|
|
|
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
|
|
|
|
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
|
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
#include "../doc/doc.hrc"
|
|
|
|
|
|
|
|
#define MNI_OPEN 1
|
|
|
|
#define MNI_EDIT 2
|
|
|
|
#define MNI_DEFAULT_TEMPLATE 3
|
|
|
|
#define MNI_DELETE 4
|
|
|
|
#define MNI_RENAME 5
|
|
|
|
|
2012-08-14 21:17:51 -04:30
|
|
|
using namespace ::com::sun::star;
|
|
|
|
using namespace ::com::sun::star::frame;
|
|
|
|
|
2014-09-23 11:20:40 +02:00
|
|
|
TemplateLocalView::TemplateLocalView ( vcl::Window* pParent)
|
2013-08-14 15:53:13 +02:00
|
|
|
: TemplateAbstractView(pParent),
|
|
|
|
mpDocTemplates(new SfxDocumentTemplates)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2015-05-11 09:35:06 +01:00
|
|
|
VCL_BUILDER_FACTORY(TemplateLocalView)
|
2013-08-14 15:53:13 +02:00
|
|
|
|
2012-07-29 22:52:44 -04:30
|
|
|
TemplateLocalView::~TemplateLocalView()
|
2015-01-13 14:50:19 +02:00
|
|
|
{
|
2015-03-10 09:07:06 +02:00
|
|
|
disposeOnce();
|
2015-01-13 14:50:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void TemplateLocalView::dispose()
|
2012-06-18 21:53:07 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for ( TemplateContainerItem* pRegion : maRegions)
|
|
|
|
delete pRegion;
|
2013-03-25 20:49:29 -04:30
|
|
|
|
|
|
|
maRegions.clear();
|
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
maAllTemplates.clear();
|
|
|
|
|
2012-06-19 12:47:04 -04:30
|
|
|
delete mpDocTemplates;
|
2015-01-13 14:50:19 +02:00
|
|
|
TemplateAbstractView::dispose();
|
2012-06-18 21:53:07 -04:30
|
|
|
}
|
|
|
|
|
2012-07-29 22:52:44 -04:30
|
|
|
void TemplateLocalView::Populate ()
|
2012-06-18 21:53:07 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
|
|
|
delete pRegion;
|
2013-03-25 20:49:29 -04:30
|
|
|
|
|
|
|
maRegions.clear();
|
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
maAllTemplates.clear();
|
|
|
|
|
2012-06-19 12:47:04 -04:30
|
|
|
sal_uInt16 nCount = mpDocTemplates->GetRegionCount();
|
2012-06-18 21:53:07 -04:30
|
|
|
for (sal_uInt16 i = 0; i < nCount; ++i)
|
|
|
|
{
|
2012-08-23 09:54:34 -04:30
|
|
|
OUString aRegionName(mpDocTemplates->GetFullRegionName(i));
|
2012-06-18 21:53:07 -04:30
|
|
|
|
2013-09-18 12:44:08 +01:00
|
|
|
TemplateContainerItem* pItem = new TemplateContainerItem( *this, i+1 );
|
2013-03-26 19:00:11 -04:30
|
|
|
pItem->mnRegionId = i;
|
2012-07-11 11:28:25 -04:30
|
|
|
pItem->maTitle = aRegionName;
|
2012-07-05 19:44:40 -04:30
|
|
|
|
2012-06-19 12:47:04 -04:30
|
|
|
sal_uInt16 nEntries = mpDocTemplates->GetCount(i);
|
2012-06-18 21:53:07 -04:30
|
|
|
|
2012-07-05 22:39:50 -04:30
|
|
|
for (sal_uInt16 j = 0; j < nEntries; ++j)
|
2012-06-18 21:53:07 -04:30
|
|
|
{
|
2012-08-23 09:54:34 -04:30
|
|
|
OUString aName = mpDocTemplates->GetName(i,j);
|
|
|
|
OUString aURL = mpDocTemplates->GetPath(i,j);
|
2012-06-18 21:53:07 -04:30
|
|
|
|
2013-02-11 15:30:16 +01:00
|
|
|
TemplateItemProperties aProperties;
|
2013-03-25 20:49:29 -04:30
|
|
|
aProperties.aIsFolder = false; // Flat hierarchy for the local filesystem (no nested folders)
|
2012-07-07 22:10:09 -04:30
|
|
|
aProperties.nId = j+1;
|
2012-08-10 20:04:29 -04:30
|
|
|
aProperties.nDocId = j;
|
2012-07-07 22:10:09 -04:30
|
|
|
aProperties.nRegionId = i;
|
|
|
|
aProperties.aName = aName;
|
|
|
|
aProperties.aPath = aURL;
|
2012-08-12 20:20:34 -04:30
|
|
|
aProperties.aThumbnail = TemplateAbstractView::fetchThumbnail(aURL,
|
2016-04-05 00:36:09 +05:30
|
|
|
getThumbnailWidth(),
|
|
|
|
getThumbnailHeight());
|
2012-06-21 10:07:00 -04:30
|
|
|
|
2012-07-07 22:10:09 -04:30
|
|
|
pItem->maTemplates.push_back(aProperties);
|
2016-05-01 13:05:00 +05:30
|
|
|
maAllTemplates.push_back(aProperties);
|
2012-06-18 21:53:07 -04:30
|
|
|
}
|
2012-07-05 19:44:40 -04:30
|
|
|
|
2013-03-25 20:49:29 -04:30
|
|
|
maRegions.push_back(pItem);
|
2012-06-18 21:53:07 -04:30
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-08-07 10:27:44 -04:30
|
|
|
void TemplateLocalView::reload ()
|
|
|
|
{
|
|
|
|
mpDocTemplates->Update();
|
|
|
|
|
|
|
|
Populate();
|
|
|
|
|
2013-03-25 20:49:29 -04:30
|
|
|
// Check if we are currently browsing a region or root folder
|
|
|
|
if (mnCurRegionId)
|
2012-08-07 10:27:44 -04:30
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
sal_uInt16 nRegionId = mnCurRegionId - 1; //Is offset by 1
|
2012-08-07 10:27:44 -04:30
|
|
|
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
2012-08-07 10:27:44 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegion->mnRegionId == nRegionId)
|
2012-08-07 10:27:44 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
showRegion(pRegion);
|
2012-08-07 10:27:44 -04:30
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2013-03-25 20:49:29 -04:30
|
|
|
else
|
2016-05-01 13:05:00 +05:30
|
|
|
showAllTemplates();
|
|
|
|
|
|
|
|
//No items should be selected by default
|
|
|
|
deselectItems();
|
2013-03-25 20:49:29 -04:30
|
|
|
}
|
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
void TemplateLocalView::showAllTemplates()
|
2013-03-25 20:49:29 -04:30
|
|
|
{
|
|
|
|
mnCurRegionId = 0;
|
2014-11-12 14:24:10 +05:30
|
|
|
maCurRegionName.clear();
|
2013-03-25 20:49:29 -04:30
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
insertItems(maAllTemplates);
|
2015-11-10 10:23:17 +01:00
|
|
|
maOpenRegionHdl.Call(nullptr);
|
2013-03-25 20:49:29 -04:30
|
|
|
}
|
|
|
|
|
|
|
|
void TemplateLocalView::showRegion(ThumbnailViewItem *pItem)
|
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
mnCurRegionId = static_cast<TemplateContainerItem*>(pItem)->mnRegionId+1;
|
2013-03-25 20:49:29 -04:30
|
|
|
maCurRegionName = pItem->maTitle;
|
|
|
|
|
|
|
|
insertItems(reinterpret_cast<TemplateContainerItem*>(pItem)->maTemplates);
|
|
|
|
|
2015-11-10 10:23:17 +01:00
|
|
|
maOpenRegionHdl.Call(nullptr);
|
2013-03-25 20:49:29 -04:30
|
|
|
}
|
|
|
|
|
2013-03-28 23:33:59 -04:30
|
|
|
void TemplateLocalView::showRegion(const OUString &rName)
|
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
2013-03-28 23:33:59 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegion->maTitle == rName)
|
2013-03-28 23:33:59 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
showRegion(pRegion);
|
2013-03-28 23:33:59 -04:30
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
ThumbnailViewItem* TemplateLocalView::getRegion(OUString rName)
|
|
|
|
{
|
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
|
|
|
if (pRegion->maTitle == rName)
|
|
|
|
return pRegion;
|
|
|
|
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
void TemplateLocalView::createContextMenu()
|
|
|
|
{
|
|
|
|
std::unique_ptr<PopupMenu> pItemMenu(new PopupMenu);
|
|
|
|
pItemMenu->InsertItem(MNI_OPEN,SfxResId(STR_OPEN).toString());
|
|
|
|
pItemMenu->InsertItem(MNI_EDIT,SfxResId(STR_EDIT_TEMPLATE).toString());
|
|
|
|
pItemMenu->InsertItem(MNI_DEFAULT_TEMPLATE,SfxResId(STR_DEFAULT_TEMPLATE).toString());
|
|
|
|
pItemMenu->InsertSeparator();
|
|
|
|
pItemMenu->InsertItem(MNI_DELETE,SfxResId(STR_DELETE).toString());
|
|
|
|
pItemMenu->InsertItem(MNI_RENAME,SfxResId(STR_RENAME).toString());
|
|
|
|
pItemMenu->InsertSeparator();
|
|
|
|
deselectItems();
|
|
|
|
maSelectedItem->setSelection(true);
|
|
|
|
pItemMenu->SetSelectHdl(LINK(this, TemplateLocalView, ContextMenuSelectHdl));
|
|
|
|
pItemMenu->Execute(this, Rectangle(maPosition,Size(1,1)), PopupMenuFlags::ExecuteDown);
|
|
|
|
Invalidate();
|
|
|
|
}
|
|
|
|
|
|
|
|
IMPL_LINK_TYPED(TemplateLocalView, ContextMenuSelectHdl, Menu*, pMenu, bool)
|
|
|
|
{
|
|
|
|
sal_uInt16 nMenuId = pMenu->GetCurItemId();
|
|
|
|
|
|
|
|
switch(nMenuId)
|
|
|
|
{
|
|
|
|
case MNI_OPEN:
|
|
|
|
maOpenTemplateHdl.Call(maSelectedItem);
|
|
|
|
break;
|
|
|
|
case MNI_EDIT:
|
|
|
|
maEditTemplateHdl.Call(maSelectedItem);
|
|
|
|
break;
|
|
|
|
case MNI_DELETE:
|
|
|
|
maDeleteTemplateHdl.Call(maSelectedItem);
|
|
|
|
break;
|
|
|
|
case MNI_RENAME:
|
|
|
|
{
|
|
|
|
ScopedVclPtrInstance< InputDialog > m_pTitleEditDlg( SfxResId(STR_RENAME_TEMPLATE).toString(), this);
|
|
|
|
OUString sOldTitle = maSelectedItem->getHelpText();
|
|
|
|
m_pTitleEditDlg->SetEntryText( sOldTitle );
|
|
|
|
m_pTitleEditDlg->HideHelpBtn();
|
|
|
|
|
|
|
|
if(!m_pTitleEditDlg->Execute())
|
|
|
|
break;
|
|
|
|
OUString sNewTitle = comphelper::string::strip( m_pTitleEditDlg->GetEntryText(), ' ');
|
|
|
|
|
|
|
|
if ( !sNewTitle.isEmpty() && sNewTitle != sOldTitle )
|
|
|
|
{
|
|
|
|
maSelectedItem->setTitle(sNewTitle);
|
|
|
|
maSelectedItem->setEditTitle(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case MNI_DEFAULT_TEMPLATE:
|
|
|
|
maDefaultTemplateHdl.Call(maSelectedItem);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2013-03-26 19:00:11 -04:30
|
|
|
sal_uInt16 TemplateLocalView::getCurRegionItemId() const
|
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
2013-03-26 19:00:11 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegion->mnRegionId == mnCurRegionId-1)
|
|
|
|
return pRegion->mnId;
|
2013-03-26 19:00:11 -04:30
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2013-03-25 20:49:29 -04:30
|
|
|
sal_uInt16 TemplateLocalView::getRegionId(size_t pos) const
|
|
|
|
{
|
|
|
|
assert(pos < maRegions.size());
|
|
|
|
|
|
|
|
return maRegions[pos]->mnId;
|
2012-08-07 10:27:44 -04:30
|
|
|
}
|
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
sal_uInt16 TemplateLocalView::getRegionId(OUString sRegion) const
|
|
|
|
{
|
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
|
|
|
{
|
|
|
|
if (pRegion->maTitle == sRegion)
|
|
|
|
return pRegion->mnId;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2013-03-26 23:07:57 -04:30
|
|
|
OUString TemplateLocalView::getRegionName(const sal_uInt16 nRegionId) const
|
|
|
|
{
|
|
|
|
return mpDocTemplates->GetRegionName(nRegionId);
|
|
|
|
}
|
|
|
|
|
2013-04-07 21:46:11 -04:30
|
|
|
OUString TemplateLocalView::getRegionItemName(const sal_uInt16 nItemId) const
|
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for (const TemplateContainerItem* pRegion : maRegions)
|
2013-04-07 21:46:11 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegion->mnId == nItemId)
|
|
|
|
return pRegion->maTitle;
|
2013-04-07 21:46:11 -04:30
|
|
|
}
|
|
|
|
|
|
|
|
return OUString();
|
|
|
|
}
|
|
|
|
|
2012-08-23 09:54:34 -04:30
|
|
|
std::vector<OUString> TemplateLocalView::getFolderNames()
|
2012-07-01 14:12:16 -04:30
|
|
|
{
|
2013-03-25 20:49:29 -04:30
|
|
|
size_t n = maRegions.size();
|
2012-08-23 09:54:34 -04:30
|
|
|
std::vector<OUString> ret(n);
|
2012-07-01 14:12:16 -04:30
|
|
|
|
|
|
|
for (size_t i = 0; i < n; ++i)
|
2013-03-25 20:49:29 -04:30
|
|
|
ret[i] = maRegions[i]->maTitle;
|
2012-07-01 14:12:16 -04:30
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2012-07-07 22:10:09 -04:30
|
|
|
std::vector<TemplateItemProperties>
|
2015-07-31 18:30:09 +02:00
|
|
|
TemplateLocalView::getFilteredItems(const std::function<bool (const TemplateItemProperties&)> &rFunc) const
|
2012-07-04 10:09:40 -04:30
|
|
|
{
|
2012-07-07 22:10:09 -04:30
|
|
|
std::vector<TemplateItemProperties> aItems;
|
2012-07-04 10:09:40 -04:30
|
|
|
|
2013-03-26 23:07:57 -04:30
|
|
|
if (mnCurRegionId)
|
2012-07-04 10:09:40 -04:30
|
|
|
{
|
2013-03-26 23:07:57 -04:30
|
|
|
TemplateContainerItem *pFolderItem = maRegions[mnCurRegionId-1];
|
2012-07-04 10:09:40 -04:30
|
|
|
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateItemProperties & rItemProps : pFolderItem->maTemplates)
|
2012-07-04 10:09:40 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (rFunc(rItemProps))
|
|
|
|
aItems.push_back(rItemProps);
|
2012-07-04 10:09:40 -04:30
|
|
|
}
|
|
|
|
}
|
2013-03-26 23:07:57 -04:30
|
|
|
else
|
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for (const TemplateContainerItem* pFolderItem : maRegions)
|
2013-03-26 23:07:57 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for (const TemplateItemProperties & rItemProps : pFolderItem->maTemplates)
|
2013-03-26 23:07:57 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (rFunc(rItemProps))
|
|
|
|
aItems.push_back(rItemProps);
|
2013-03-26 23:07:57 -04:30
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-07-04 10:09:40 -04:30
|
|
|
|
|
|
|
return aItems;
|
|
|
|
}
|
|
|
|
|
2012-08-23 09:54:34 -04:30
|
|
|
sal_uInt16 TemplateLocalView::createRegion(const OUString &rName)
|
2012-07-04 12:52:28 -04:30
|
|
|
{
|
2012-07-05 18:55:41 -04:30
|
|
|
sal_uInt16 nRegionId = mpDocTemplates->GetRegionCount(); // Next regionId
|
2013-03-26 19:00:11 -04:30
|
|
|
sal_uInt16 nItemId = getNextItemId();
|
2012-07-05 18:55:41 -04:30
|
|
|
|
|
|
|
if (!mpDocTemplates->InsertDir(rName,nRegionId))
|
2014-01-17 17:04:22 +01:00
|
|
|
return 0;
|
2012-07-05 18:55:41 -04:30
|
|
|
|
2013-03-25 20:49:29 -04:30
|
|
|
// Insert to the region cache list and to the thumbnail item list
|
2013-09-18 12:44:08 +01:00
|
|
|
TemplateContainerItem* pItem = new TemplateContainerItem( *this, nItemId );
|
2013-03-26 19:00:11 -04:30
|
|
|
pItem->mnRegionId = nRegionId;
|
2016-04-12 16:39:03 +02:00
|
|
|
pItem->maTitle = rName;
|
2012-07-05 18:55:41 -04:30
|
|
|
|
2013-03-25 20:49:29 -04:30
|
|
|
maRegions.push_back(pItem);
|
|
|
|
|
2013-09-18 12:44:08 +01:00
|
|
|
pItem = new TemplateContainerItem(*this, nItemId);
|
2013-03-26 19:00:11 -04:30
|
|
|
pItem->mnRegionId = nRegionId;
|
2016-04-12 16:39:03 +02:00
|
|
|
pItem->maTitle = rName;
|
2013-03-25 20:49:29 -04:30
|
|
|
|
2013-03-30 17:26:03 -04:30
|
|
|
AppendItem(pItem);
|
2012-07-05 18:55:41 -04:30
|
|
|
|
|
|
|
CalculateItemPositions();
|
2013-03-25 20:49:29 -04:30
|
|
|
Invalidate();
|
2012-07-05 18:55:41 -04:30
|
|
|
|
2012-07-28 13:26:20 -04:30
|
|
|
return pItem->mnId;
|
2012-07-04 12:52:28 -04:30
|
|
|
}
|
|
|
|
|
2012-07-29 22:52:44 -04:30
|
|
|
bool TemplateLocalView::removeRegion(const sal_uInt16 nItemId)
|
2012-07-08 19:12:33 -04:30
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
sal_uInt16 nRegionId = USHRT_MAX;
|
2012-07-08 19:12:33 -04:30
|
|
|
|
2013-03-25 20:49:29 -04:30
|
|
|
// Remove from the region cache list
|
2013-03-26 19:00:11 -04:30
|
|
|
std::vector<TemplateContainerItem*>::iterator pRegionIt;
|
|
|
|
for ( pRegionIt = maRegions.begin(); pRegionIt != maRegions.end();)
|
2013-03-25 20:49:29 -04:30
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
if ( (*pRegionIt)->mnId == nItemId )
|
2013-03-25 20:49:29 -04:30
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
if (!mpDocTemplates->Delete((*pRegionIt)->mnRegionId,USHRT_MAX))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
nRegionId = (*pRegionIt)->mnRegionId;
|
|
|
|
|
|
|
|
delete *pRegionIt;
|
|
|
|
pRegionIt = maRegions.erase(pRegionIt);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2015-01-24 18:53:37 +01:00
|
|
|
// Synchronize regions cache ids with SfxDocumentTemplates
|
2013-03-26 19:00:11 -04:30
|
|
|
if (nRegionId != USHRT_MAX && (*pRegionIt)->mnRegionId > nRegionId)
|
|
|
|
--(*pRegionIt)->mnRegionId;
|
|
|
|
|
|
|
|
++pRegionIt;
|
2013-03-25 20:49:29 -04:30
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-03-26 19:00:11 -04:30
|
|
|
if (nRegionId == USHRT_MAX)
|
|
|
|
return false;
|
|
|
|
|
2015-01-24 18:53:37 +01:00
|
|
|
// Synchronize view regions ids with SfxDocumentTemplates
|
2013-03-26 19:00:11 -04:30
|
|
|
std::vector<ThumbnailViewItem*>::iterator pViewIt = mItemList.begin();
|
|
|
|
for ( pViewIt = mItemList.begin(); pViewIt != mItemList.end(); ++pViewIt)
|
|
|
|
{
|
|
|
|
if (static_cast<TemplateContainerItem*>(*pViewIt)->mnRegionId > nRegionId)
|
|
|
|
--static_cast<TemplateContainerItem*>(*pViewIt)->mnRegionId;
|
|
|
|
}
|
|
|
|
|
|
|
|
RemoveItem(nItemId);
|
|
|
|
|
2012-07-08 19:12:33 -04:30
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2012-07-29 22:52:44 -04:30
|
|
|
bool TemplateLocalView::removeTemplate (const sal_uInt16 nItemId, const sal_uInt16 nSrcItemId)
|
2012-06-24 10:00:17 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
2012-06-24 10:00:17 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegion->mnId == nSrcItemId)
|
2012-06-24 10:00:17 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
TemplateContainerItem *pItem = static_cast<TemplateContainerItem*>(pRegion);
|
2012-07-07 22:10:09 -04:30
|
|
|
std::vector<TemplateItemProperties>::iterator pIter;
|
2012-06-24 10:00:17 -04:30
|
|
|
for (pIter = pItem->maTemplates.begin(); pIter != pItem->maTemplates.end(); ++pIter)
|
|
|
|
{
|
2012-07-07 22:10:09 -04:30
|
|
|
if (pIter->nId == nItemId)
|
2012-06-24 10:00:17 -04:30
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
if (!mpDocTemplates->Delete(pItem->mnRegionId,pIter->nDocId))
|
2012-08-10 20:28:40 -04:30
|
|
|
return false;
|
|
|
|
|
|
|
|
pIter = pItem->maTemplates.erase(pIter);
|
2012-06-24 10:00:17 -04:30
|
|
|
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegion->mnRegionId == mnCurRegionId-1)
|
2013-04-10 10:36:09 -04:30
|
|
|
{
|
|
|
|
RemoveItem(nItemId);
|
|
|
|
Invalidate();
|
|
|
|
}
|
2012-07-05 22:39:50 -04:30
|
|
|
|
2012-08-10 20:28:40 -04:30
|
|
|
// Update Doc Idx for all templates that follow
|
|
|
|
for (; pIter != pItem->maTemplates.end(); ++pIter)
|
|
|
|
pIter->nDocId = pIter->nDocId - 1;
|
|
|
|
|
2012-06-24 10:00:17 -04:30
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-07-05 22:39:50 -04:30
|
|
|
CalculateItemPositions();
|
2012-06-24 10:00:17 -04:30
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2012-07-29 22:52:44 -04:30
|
|
|
bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_uInt16 nSrcItem,
|
2013-03-26 00:30:08 -04:30
|
|
|
const sal_uInt16 nTargetItem)
|
2012-07-28 17:43:45 -04:30
|
|
|
{
|
2015-11-10 10:23:17 +01:00
|
|
|
TemplateContainerItem *pTarget = nullptr;
|
|
|
|
TemplateContainerItem *pSrc = nullptr;
|
2012-07-28 17:43:45 -04:30
|
|
|
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
2012-07-28 17:43:45 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegion->mnId == nTargetItem)
|
|
|
|
pTarget = static_cast<TemplateContainerItem*>(pRegion);
|
|
|
|
else if (pRegion->mnId == nSrcItem)
|
|
|
|
pSrc = static_cast<TemplateContainerItem*>(pRegion);
|
2012-07-28 17:43:45 -04:30
|
|
|
}
|
|
|
|
|
|
|
|
if (pTarget && pSrc)
|
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
sal_uInt16 nSrcRegionId = pSrc->mnRegionId;
|
|
|
|
sal_uInt16 nTargetRegion = pTarget->mnRegionId;
|
2012-07-28 17:43:45 -04:30
|
|
|
sal_uInt16 nTargetIdx = mpDocTemplates->GetCount(nTargetRegion); // Next Idx
|
|
|
|
|
|
|
|
const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(pItem);
|
|
|
|
|
2013-03-26 00:30:08 -04:30
|
|
|
bool bCopy = !mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnDocId);
|
2012-07-28 17:43:45 -04:30
|
|
|
|
|
|
|
if (bCopy)
|
2013-03-26 00:30:08 -04:30
|
|
|
{
|
|
|
|
if (!mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnDocId))
|
|
|
|
return false;
|
|
|
|
}
|
2012-07-28 17:43:45 -04:30
|
|
|
// move template to destination
|
|
|
|
|
|
|
|
TemplateItemProperties aTemplateItem;
|
|
|
|
aTemplateItem.nId = nTargetIdx + 1;
|
2012-08-10 20:04:29 -04:30
|
|
|
aTemplateItem.nDocId = nTargetIdx;
|
2012-07-28 17:43:45 -04:30
|
|
|
aTemplateItem.nRegionId = nTargetRegion;
|
|
|
|
aTemplateItem.aName = pViewItem->maTitle;
|
2013-04-07 21:16:55 -04:30
|
|
|
aTemplateItem.aPath = mpDocTemplates->GetPath(nTargetRegion,nTargetIdx);
|
2012-07-28 17:43:45 -04:30
|
|
|
aTemplateItem.aThumbnail = pViewItem->maPreview1;
|
|
|
|
|
|
|
|
pTarget->maTemplates.push_back(aTemplateItem);
|
|
|
|
|
|
|
|
if (!bCopy)
|
|
|
|
{
|
2013-03-25 20:49:29 -04:30
|
|
|
// remove template from region cached data
|
2012-07-28 17:43:45 -04:30
|
|
|
|
|
|
|
std::vector<TemplateItemProperties>::iterator aIter;
|
2013-03-26 00:30:08 -04:30
|
|
|
for (aIter = pSrc->maTemplates.begin(); aIter != pSrc->maTemplates.end();)
|
2012-07-28 17:43:45 -04:30
|
|
|
{
|
2013-03-26 00:30:08 -04:30
|
|
|
if (aIter->nDocId == pViewItem->mnDocId)
|
|
|
|
{
|
|
|
|
aIter = pSrc->maTemplates.erase(aIter);
|
|
|
|
}
|
|
|
|
else
|
2012-07-28 17:43:45 -04:30
|
|
|
{
|
2015-01-24 18:53:37 +01:00
|
|
|
// Keep region document id synchronized with SfxDocumentTemplates
|
2013-03-26 00:30:08 -04:30
|
|
|
if (aIter->nDocId > pViewItem->mnDocId)
|
|
|
|
--aIter->nDocId;
|
2012-07-28 17:43:45 -04:30
|
|
|
|
2013-03-26 00:30:08 -04:30
|
|
|
++aIter;
|
2012-07-28 17:43:45 -04:30
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-01-24 18:53:37 +01:00
|
|
|
// Keep view document id synchronized with SfxDocumentTemplates
|
2013-03-26 00:30:08 -04:30
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
2012-07-28 17:43:45 -04:30
|
|
|
|
|
|
|
CalculateItemPositions();
|
2013-03-25 20:49:29 -04:30
|
|
|
Invalidate();
|
2013-03-26 00:30:08 -04:30
|
|
|
|
|
|
|
return true;
|
2012-07-28 17:43:45 -04:30
|
|
|
}
|
|
|
|
|
2013-03-26 00:30:08 -04:30
|
|
|
return false;
|
2012-07-28 17:43:45 -04:30
|
|
|
}
|
|
|
|
|
2013-03-25 20:49:29 -04:30
|
|
|
bool TemplateLocalView::moveTemplates(const std::set<const ThumbnailViewItem*, selection_cmp_fn> &rItems,
|
2013-03-26 00:30:08 -04:30
|
|
|
const sal_uInt16 nTargetItem)
|
2012-07-01 14:12:16 -04:30
|
|
|
{
|
|
|
|
bool ret = true;
|
|
|
|
|
2015-11-10 10:23:17 +01:00
|
|
|
TemplateContainerItem *pTarget = nullptr;
|
|
|
|
TemplateContainerItem *pSrc = nullptr;
|
2012-07-01 14:12:16 -04:30
|
|
|
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
2012-07-01 14:12:16 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegion->mnId == nTargetItem)
|
|
|
|
pTarget = static_cast<TemplateContainerItem*>(pRegion);
|
2012-07-01 14:12:16 -04:30
|
|
|
}
|
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
if (pTarget)
|
2012-07-01 14:12:16 -04:30
|
|
|
{
|
2014-12-22 17:57:48 +01:00
|
|
|
bool refresh = false;
|
|
|
|
|
2013-03-26 19:00:11 -04:30
|
|
|
sal_uInt16 nTargetRegion = pTarget->mnRegionId;
|
2012-07-05 20:47:11 -04:30
|
|
|
sal_uInt16 nTargetIdx = mpDocTemplates->GetCount(nTargetRegion); // Next Idx
|
2013-03-25 20:49:29 -04:30
|
|
|
std::vector<sal_uInt16> aItemIds; // List of moved items ids (also prevents the invalidation of rItems iterators when we remove them as we go)
|
2012-07-05 20:47:11 -04:30
|
|
|
|
2013-03-27 13:43:35 +01:00
|
|
|
std::set<const ThumbnailViewItem*,selection_cmp_fn>::const_iterator aSelIter;
|
2012-07-05 20:47:11 -04:30
|
|
|
for ( aSelIter = rItems.begin(); aSelIter != rItems.end(); ++aSelIter, ++nTargetIdx )
|
2012-07-01 14:12:16 -04:30
|
|
|
{
|
2012-07-05 20:14:00 -04:30
|
|
|
const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(*aSelIter);
|
2016-05-01 13:05:00 +05:30
|
|
|
sal_uInt16 nSrcRegionId = pViewItem->mnRegionId;
|
2012-07-05 20:14:00 -04:30
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
|
|
|
{
|
|
|
|
if (pRegion->mnRegionId == nSrcRegionId)
|
|
|
|
pSrc = static_cast<TemplateContainerItem*>(pRegion);
|
|
|
|
}
|
2012-07-05 20:47:11 -04:30
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
if(pSrc)
|
2012-07-01 14:12:16 -04:30
|
|
|
{
|
2016-05-01 13:05:00 +05:30
|
|
|
bool bCopy = !mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnDocId);
|
|
|
|
|
|
|
|
if (bCopy)
|
2013-03-26 00:30:08 -04:30
|
|
|
{
|
2016-05-01 13:05:00 +05:30
|
|
|
if (!mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnDocId))
|
|
|
|
{
|
|
|
|
ret = false;
|
|
|
|
continue;
|
|
|
|
}
|
2013-03-26 00:30:08 -04:30
|
|
|
}
|
2012-07-01 14:12:16 -04:30
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
// move template to destination
|
2012-07-01 14:12:16 -04:30
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
TemplateItemProperties aTemplateItem;
|
|
|
|
aTemplateItem.nId = nTargetIdx + 1;
|
|
|
|
aTemplateItem.nDocId = nTargetIdx;
|
|
|
|
aTemplateItem.nRegionId = nTargetRegion;
|
|
|
|
aTemplateItem.aName = pViewItem->maTitle;
|
|
|
|
aTemplateItem.aPath = mpDocTemplates->GetPath(nTargetRegion,nTargetIdx);
|
|
|
|
aTemplateItem.aThumbnail = pViewItem->maPreview1;
|
2012-07-01 14:12:16 -04:30
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
pTarget->maTemplates.push_back(aTemplateItem);
|
2012-07-05 20:47:11 -04:30
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
if (!bCopy)
|
2012-07-01 14:12:16 -04:30
|
|
|
{
|
2016-05-01 13:05:00 +05:30
|
|
|
// remove template from region cached data
|
|
|
|
|
|
|
|
std::vector<TemplateItemProperties>::iterator pPropIter;
|
|
|
|
for (pPropIter = pSrc->maTemplates.begin(); pPropIter != pSrc->maTemplates.end();)
|
2012-07-05 20:47:11 -04:30
|
|
|
{
|
2016-05-01 13:05:00 +05:30
|
|
|
if (pPropIter->nDocId == pViewItem->mnDocId)
|
|
|
|
{
|
|
|
|
pPropIter = pSrc->maTemplates.erase(pPropIter);
|
|
|
|
aItemIds.push_back(pViewItem->mnId);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// Keep region document id synchronized with SfxDocumentTemplates
|
|
|
|
if (pPropIter->nDocId > pViewItem->mnDocId)
|
|
|
|
--pPropIter->nDocId;
|
|
|
|
|
|
|
|
++pPropIter;
|
|
|
|
}
|
2012-07-05 20:47:11 -04:30
|
|
|
}
|
2013-03-26 00:30:08 -04:30
|
|
|
|
2016-05-01 13:05:00 +05:30
|
|
|
// Keep view document id synchronized 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;
|
2013-03-26 00:30:08 -04:30
|
|
|
}
|
|
|
|
}
|
2012-07-01 14:12:16 -04:30
|
|
|
}
|
|
|
|
|
|
|
|
refresh = true;
|
|
|
|
}
|
|
|
|
|
2013-03-25 20:49:29 -04:30
|
|
|
// Remove items from the current view
|
|
|
|
for (std::vector<sal_uInt16>::iterator it = aItemIds.begin(); it != aItemIds.end(); ++it)
|
|
|
|
RemoveItem(*it);
|
2012-07-05 21:11:25 -04:30
|
|
|
|
2013-03-25 20:49:29 -04:30
|
|
|
if (refresh)
|
|
|
|
{
|
|
|
|
CalculateItemPositions();
|
|
|
|
Invalidate();
|
|
|
|
}
|
2012-07-01 14:12:16 -04:30
|
|
|
}
|
2013-03-25 20:49:29 -04:30
|
|
|
else
|
|
|
|
ret = false;
|
2012-07-01 14:12:16 -04:30
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2012-08-12 17:14:16 -04:30
|
|
|
bool TemplateLocalView::copyFrom(const sal_uInt16 nRegionItemId, const BitmapEx &rThumbnail,
|
2012-07-29 21:48:53 -04:30
|
|
|
const OUString &rPath)
|
2012-07-29 21:28:31 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateContainerItem* pRegion : maRegions)
|
2012-08-11 08:48:50 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegion->mnId == nRegionItemId)
|
2012-08-11 08:48:50 -04:30
|
|
|
{
|
|
|
|
sal_uInt16 nId = 0;
|
|
|
|
sal_uInt16 nDocId = 0;
|
2012-07-29 21:28:31 -04:30
|
|
|
|
2012-12-17 22:23:46 +01:00
|
|
|
TemplateContainerItem *pRegionItem =
|
2016-05-09 13:23:20 +02:00
|
|
|
static_cast<TemplateContainerItem*>(pRegion);
|
2012-07-29 21:28:31 -04:30
|
|
|
|
2012-08-11 08:48:50 -04:30
|
|
|
if (!pRegionItem->maTemplates.empty())
|
|
|
|
{
|
|
|
|
nId = (pRegionItem->maTemplates.back()).nId+1;
|
|
|
|
nDocId = (pRegionItem->maTemplates.back()).nDocId+1;
|
|
|
|
}
|
2012-07-29 21:28:31 -04:30
|
|
|
|
2013-08-27 13:31:45 +02:00
|
|
|
OUString aPath(rPath);
|
2016-05-09 13:23:20 +02:00
|
|
|
sal_uInt16 nRegionId = pRegion->mnRegionId;
|
2012-08-11 08:48:50 -04:30
|
|
|
|
|
|
|
if (mpDocTemplates->CopyFrom(nRegionId,nDocId,aPath))
|
2012-07-29 21:28:31 -04:30
|
|
|
{
|
2012-08-11 08:48:50 -04:30
|
|
|
TemplateItemProperties aTemplate;
|
|
|
|
aTemplate.nId = nId;
|
|
|
|
aTemplate.nDocId = nDocId;
|
|
|
|
aTemplate.nRegionId = nRegionId;
|
|
|
|
aTemplate.aName = aPath;
|
|
|
|
aTemplate.aThumbnail = rThumbnail;
|
|
|
|
aTemplate.aPath = mpDocTemplates->GetPath(nRegionId,nDocId);
|
|
|
|
|
2012-12-17 22:23:46 +01:00
|
|
|
TemplateContainerItem *pItem =
|
2016-05-09 13:23:20 +02:00
|
|
|
static_cast<TemplateContainerItem*>(pRegion);
|
2012-07-29 21:28:31 -04:30
|
|
|
|
|
|
|
pItem->maTemplates.push_back(aTemplate);
|
|
|
|
|
2012-08-12 17:14:16 -04:30
|
|
|
return true;
|
2012-07-29 21:28:31 -04:30
|
|
|
}
|
|
|
|
|
2012-08-11 08:48:50 -04:30
|
|
|
break;
|
|
|
|
}
|
2012-07-29 21:28:31 -04:30
|
|
|
}
|
2012-08-12 17:14:16 -04:30
|
|
|
|
|
|
|
return false;
|
2012-07-29 21:28:31 -04:30
|
|
|
}
|
|
|
|
|
2013-03-27 18:19:53 -04:30
|
|
|
bool TemplateLocalView::copyFrom(const OUString &rPath)
|
|
|
|
{
|
|
|
|
assert(mnCurRegionId);
|
|
|
|
|
|
|
|
TemplateContainerItem *pRegItem = maRegions[mnCurRegionId-1];
|
|
|
|
|
|
|
|
sal_uInt16 nId = getNextItemId();
|
|
|
|
sal_uInt16 nDocId = 0;
|
|
|
|
sal_uInt16 nRegionId = pRegItem->mnRegionId;
|
|
|
|
|
2013-08-27 13:31:45 +02:00
|
|
|
OUString aPath(rPath);
|
2013-03-27 18:19:53 -04:30
|
|
|
|
|
|
|
if (!pRegItem->maTemplates.empty())
|
|
|
|
nDocId = (pRegItem->maTemplates.back()).nDocId+1;
|
|
|
|
|
|
|
|
if (!mpDocTemplates->CopyFrom(nRegionId,nDocId,aPath))
|
|
|
|
return false;
|
|
|
|
|
|
|
|
TemplateItemProperties aTemplate;
|
|
|
|
aTemplate.aIsFolder = false;
|
|
|
|
aTemplate.nId = nId;
|
|
|
|
aTemplate.nDocId = nDocId;
|
|
|
|
aTemplate.nRegionId = nRegionId;
|
|
|
|
aTemplate.aName = aPath;
|
|
|
|
aTemplate.aThumbnail = TemplateAbstractView::fetchThumbnail(rPath,
|
|
|
|
TEMPLATE_THUMBNAIL_MAX_WIDTH,
|
|
|
|
TEMPLATE_THUMBNAIL_MAX_HEIGHT);
|
|
|
|
aTemplate.aPath = rPath;
|
|
|
|
|
|
|
|
pRegItem->maTemplates.push_back(aTemplate);
|
|
|
|
|
|
|
|
insertItem(aTemplate);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2012-12-17 22:23:46 +01:00
|
|
|
bool TemplateLocalView::copyFrom (TemplateContainerItem *pItem, const OUString &rPath)
|
2012-06-24 08:25:32 -04:30
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
sal_uInt16 nId = 1;
|
2012-08-11 08:48:50 -04:30
|
|
|
sal_uInt16 nDocId = 0;
|
2013-03-26 19:00:11 -04:30
|
|
|
sal_uInt16 nRegionId = pItem->mnRegionId;
|
2013-08-27 13:31:45 +02:00
|
|
|
OUString aPath(rPath);
|
2012-06-24 08:25:32 -04:30
|
|
|
|
2012-08-11 08:48:50 -04:30
|
|
|
if (!pItem->maTemplates.empty())
|
|
|
|
{
|
|
|
|
nId = (pItem->maTemplates.back()).nId+1;
|
|
|
|
nDocId = (pItem->maTemplates.back()).nDocId+1;
|
|
|
|
}
|
2012-06-24 08:25:32 -04:30
|
|
|
|
2012-08-11 08:48:50 -04:30
|
|
|
if (mpDocTemplates->CopyFrom(nRegionId,nDocId,aPath))
|
2012-06-24 08:25:32 -04:30
|
|
|
{
|
2012-07-07 22:10:09 -04:30
|
|
|
TemplateItemProperties aTemplate;
|
2013-03-26 19:00:11 -04:30
|
|
|
aTemplate.aIsFolder = false;
|
2012-08-11 08:48:50 -04:30
|
|
|
aTemplate.nId = nId;
|
|
|
|
aTemplate.nDocId = nDocId;
|
2012-07-07 22:10:09 -04:30
|
|
|
aTemplate.nRegionId = nRegionId;
|
2012-08-10 20:31:50 -04:30
|
|
|
aTemplate.aName = aPath;
|
2012-07-29 21:51:06 -04:30
|
|
|
aTemplate.aThumbnail = TemplateAbstractView::fetchThumbnail(rPath,
|
2012-08-12 20:20:34 -04:30
|
|
|
TEMPLATE_THUMBNAIL_MAX_WIDTH,
|
|
|
|
TEMPLATE_THUMBNAIL_MAX_HEIGHT);
|
2012-07-07 22:10:09 -04:30
|
|
|
aTemplate.aPath = rPath;
|
2012-06-24 08:25:32 -04:30
|
|
|
|
2012-07-07 22:10:09 -04:30
|
|
|
pItem->maTemplates.push_back(aTemplate);
|
2012-07-05 22:39:50 -04:30
|
|
|
|
|
|
|
CalculateItemPositions();
|
2012-08-12 17:14:16 -04:30
|
|
|
|
|
|
|
return true;
|
2012-06-24 08:25:32 -04:30
|
|
|
}
|
2012-08-12 17:14:16 -04:30
|
|
|
|
|
|
|
return false;
|
2012-06-24 08:25:32 -04:30
|
|
|
}
|
|
|
|
|
2012-08-11 13:13:01 -04:30
|
|
|
bool TemplateLocalView::exportTo(const sal_uInt16 nItemId, const sal_uInt16 nRegionItemId, const OUString &rName)
|
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
for (TemplateContainerItem* pRegItem : maRegions)
|
2012-08-11 13:13:01 -04:30
|
|
|
{
|
2016-05-09 13:23:20 +02:00
|
|
|
if (pRegItem->mnId == nRegionItemId)
|
2012-08-11 13:13:01 -04:30
|
|
|
{
|
|
|
|
std::vector<TemplateItemProperties>::iterator aIter;
|
|
|
|
for (aIter = pRegItem->maTemplates.begin(); aIter != pRegItem->maTemplates.end(); ++aIter)
|
|
|
|
{
|
|
|
|
if (aIter->nId == nItemId)
|
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
if (!mpDocTemplates->CopyTo(pRegItem->mnRegionId,aIter->nDocId,rName))
|
2012-08-11 13:13:01 -04:30
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2014-03-13 09:34:37 +02:00
|
|
|
bool TemplateLocalView::renameItem(ThumbnailViewItem* pItem, const OUString& sNewTitle)
|
2013-02-11 15:30:16 +01:00
|
|
|
{
|
|
|
|
sal_uInt16 nRegionId = 0;
|
|
|
|
sal_uInt16 nDocId = USHRT_MAX;
|
|
|
|
TemplateViewItem* pDocItem = dynamic_cast<TemplateViewItem*>( pItem );
|
|
|
|
TemplateContainerItem* pContainerItem = dynamic_cast<TemplateContainerItem*>( pItem );
|
|
|
|
if ( pDocItem )
|
|
|
|
{
|
|
|
|
nRegionId = pDocItem->mnRegionId;
|
|
|
|
nDocId = pDocItem->mnDocId;
|
|
|
|
}
|
|
|
|
else if ( pContainerItem )
|
|
|
|
{
|
2013-03-26 19:00:11 -04:30
|
|
|
nRegionId = pContainerItem->mnRegionId;
|
2013-02-11 15:30:16 +01:00
|
|
|
}
|
2013-02-11 18:09:45 +01:00
|
|
|
return mpDocTemplates->SetName( sNewTitle, nRegionId, nDocId );
|
2013-02-11 15:30:16 +01:00
|
|
|
}
|
|
|
|
|
2012-06-29 20:16:18 -04:30
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|