Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * Copyright 2012 LibreOffice contributors.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include <sfx2/templatelocalview.hxx>
11 :
12 : #include <comphelper/processfactory.hxx>
13 : #include <sfx2/doctempl.hxx>
14 : #include <sfx2/templatecontaineritem.hxx>
15 : #include <sfx2/templateview.hxx>
16 : #include <sfx2/templateviewitem.hxx>
17 : #include <svl/inettype.hxx>
18 : #include <tools/urlobj.hxx>
19 : #include <unotools/ucbstreamhelper.hxx>
20 : #include <vcl/pngread.hxx>
21 :
22 : #include <com/sun/star/embed/ElementModes.hpp>
23 : #include <com/sun/star/embed/XStorage.hpp>
24 : #include <com/sun/star/frame/DocumentTemplates.hpp>
25 : #include <com/sun/star/lang/XComponent.hpp>
26 : #include <com/sun/star/frame/XDocumentTemplates.hpp>
27 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
28 : #include <com/sun/star/lang/XSingleServiceFactory.hpp>
29 :
30 : using namespace ::com::sun::star;
31 : using namespace ::com::sun::star::frame;
32 :
33 : static void lcl_updateThumbnails (TemplateContainerItem *pItem);
34 :
35 0 : TemplateLocalView::TemplateLocalView ( Window* pParent, const ResId& rResId, bool bDisableTransientChildren)
36 : : TemplateAbstractView(pParent,rResId,bDisableTransientChildren),
37 0 : mpDocTemplates(new SfxDocumentTemplates)
38 : {
39 0 : mpItemView->SetColor(GetSettings().GetStyleSettings().GetFieldColor());
40 0 : }
41 :
42 0 : TemplateLocalView::~TemplateLocalView()
43 : {
44 0 : delete mpDocTemplates;
45 0 : }
46 :
47 0 : void TemplateLocalView::Populate ()
48 : {
49 0 : sal_uInt16 nCount = mpDocTemplates->GetRegionCount();
50 0 : for (sal_uInt16 i = 0; i < nCount; ++i)
51 : {
52 0 : OUString aRegionName(mpDocTemplates->GetFullRegionName(i));
53 :
54 0 : if ((sal_uInt32)aRegionName.getLength() > mpItemAttrs->nMaxTextLenght)
55 : {
56 0 : aRegionName = aRegionName.copy(0,mpItemAttrs->nMaxTextLenght-3);
57 0 : aRegionName += "...";
58 : }
59 :
60 0 : TemplateContainerItem* pItem = new TemplateContainerItem( *this );
61 0 : pItem->mnId = i+1;
62 0 : pItem->maTitle = aRegionName;
63 0 : pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected));
64 :
65 0 : sal_uInt16 nEntries = mpDocTemplates->GetCount(i);
66 :
67 0 : for (sal_uInt16 j = 0; j < nEntries; ++j)
68 : {
69 0 : OUString aName = mpDocTemplates->GetName(i,j);
70 0 : OUString aURL = mpDocTemplates->GetPath(i,j);
71 :
72 0 : if ((sal_uInt32)aName.getLength() > mpItemAttrs->nMaxTextLenght)
73 : {
74 0 : aName = aName.copy(0,mpItemAttrs->nMaxTextLenght-3);
75 0 : aName += "...";
76 : }
77 :
78 0 : TemplateItemProperties aProperties;;
79 0 : aProperties.nId = j+1;
80 0 : aProperties.nDocId = j;
81 0 : aProperties.nRegionId = i;
82 0 : aProperties.aName = aName;
83 0 : aProperties.aPath = aURL;
84 : aProperties.aThumbnail = TemplateAbstractView::fetchThumbnail(aURL,
85 : TEMPLATE_THUMBNAIL_MAX_WIDTH,
86 0 : TEMPLATE_THUMBNAIL_MAX_HEIGHT);
87 :
88 0 : pItem->maTemplates.push_back(aProperties);
89 0 : }
90 :
91 0 : lcl_updateThumbnails(pItem);
92 :
93 0 : mItemList.push_back(pItem);
94 0 : }
95 :
96 0 : CalculateItemPositions();
97 :
98 0 : if ( IsReallyVisible() && IsUpdateMode() )
99 0 : Invalidate();
100 0 : }
101 :
102 0 : void TemplateLocalView::reload ()
103 : {
104 0 : mpDocTemplates->Update();
105 :
106 0 : Clear();
107 :
108 0 : Populate();
109 :
110 0 : if (mpItemView->IsVisible())
111 : {
112 0 : sal_uInt16 nItemId = mpItemView->getId() + 1;
113 :
114 0 : for (size_t i = 0; i < mItemList.size(); ++i)
115 : {
116 0 : if (mItemList[i]->mnId == nItemId)
117 : {
118 0 : mpItemView->Clear();
119 0 : mpItemView->InsertItems(static_cast<TemplateContainerItem*>(mItemList[i])->maTemplates);
120 0 : break;
121 : }
122 : }
123 : }
124 0 : }
125 :
126 0 : std::vector<OUString> TemplateLocalView::getFolderNames()
127 : {
128 0 : size_t n = mItemList.size();
129 0 : std::vector<OUString> ret(n);
130 :
131 0 : for (size_t i = 0; i < n; ++i)
132 0 : ret[i] = mItemList[i]->maTitle;
133 :
134 0 : return ret;
135 : }
136 :
137 0 : void TemplateLocalView::showOverlay (bool bVisible)
138 : {
139 0 : mpItemView->Show(bVisible);
140 :
141 : // Clear items is the overlay is closed.
142 0 : if (!bVisible)
143 : {
144 : // Check if the folder view needs to be filtered
145 0 : if (mbFilteredResults)
146 : {
147 0 : filterItems(ViewFilter_Application(meFilterOption));
148 :
149 0 : mbFilteredResults = false;
150 0 : meFilterOption = FILTER_APP_NONE;
151 : }
152 :
153 0 : mpItemView->Clear();
154 : }
155 0 : }
156 :
157 : std::vector<TemplateItemProperties>
158 0 : TemplateLocalView::getFilteredItems(const boost::function<bool (const TemplateItemProperties&) > &rFunc) const
159 : {
160 0 : std::vector<TemplateItemProperties> aItems;
161 :
162 0 : for (size_t i = 0; i < mItemList.size(); ++i)
163 : {
164 0 : TemplateContainerItem *pFolderItem = static_cast<TemplateContainerItem*>(mItemList[i]);
165 :
166 0 : for (size_t j = 0; j < pFolderItem->maTemplates.size(); ++j)
167 : {
168 0 : if (rFunc(pFolderItem->maTemplates[j]))
169 0 : aItems.push_back(pFolderItem->maTemplates[j]);
170 : }
171 : }
172 :
173 0 : return aItems;
174 : }
175 :
176 0 : sal_uInt16 TemplateLocalView::createRegion(const OUString &rName)
177 : {
178 0 : sal_uInt16 nRegionId = mpDocTemplates->GetRegionCount(); // Next regionId
179 :
180 0 : if (!mpDocTemplates->InsertDir(rName,nRegionId))
181 0 : return false;
182 :
183 0 : OUString aRegionName = rName;
184 :
185 0 : if ((sal_uInt32)aRegionName.getLength() > mpItemAttrs->nMaxTextLenght)
186 : {
187 0 : aRegionName = aRegionName.copy(0,mpItemAttrs->nMaxTextLenght-3);
188 0 : aRegionName += "...";
189 : }
190 :
191 0 : TemplateContainerItem* pItem = new TemplateContainerItem( *this );
192 0 : pItem->mnId = nRegionId+1;
193 0 : pItem->maTitle = aRegionName;
194 0 : pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnItemSelected));
195 :
196 0 : mItemList.push_back(pItem);
197 :
198 0 : CalculateItemPositions();
199 :
200 0 : if ( IsReallyVisible() && IsUpdateMode() )
201 0 : Invalidate();
202 :
203 0 : return pItem->mnId;
204 : }
205 :
206 0 : bool TemplateLocalView::removeRegion(const sal_uInt16 nItemId)
207 : {
208 0 : sal_uInt16 nRegionId = nItemId - 1;
209 :
210 0 : if (!mpDocTemplates->Delete(nRegionId,USHRT_MAX))
211 0 : return false;
212 :
213 0 : RemoveItem(nItemId);
214 :
215 0 : return true;
216 : }
217 :
218 0 : bool TemplateLocalView::removeTemplate (const sal_uInt16 nItemId, const sal_uInt16 nSrcItemId)
219 : {
220 0 : sal_uInt16 nRegionId = nSrcItemId - 1;
221 :
222 0 : for (size_t i = 0, n = mItemList.size(); i < n; ++i)
223 : {
224 0 : if (mItemList[i]->mnId == nSrcItemId)
225 : {
226 0 : TemplateContainerItem *pItem = static_cast<TemplateContainerItem*>(mItemList[i]);
227 0 : std::vector<TemplateItemProperties>::iterator pIter;
228 0 : for (pIter = pItem->maTemplates.begin(); pIter != pItem->maTemplates.end(); ++pIter)
229 : {
230 0 : if (pIter->nId == nItemId)
231 : {
232 0 : if (!mpDocTemplates->Delete(nRegionId,pIter->nDocId))
233 0 : return false;
234 :
235 0 : pIter = pItem->maTemplates.erase(pIter);
236 :
237 0 : mpItemView->RemoveItem(nItemId);
238 :
239 : // Update Doc Idx for all templates that follow
240 0 : for (; pIter != pItem->maTemplates.end(); ++pIter)
241 0 : pIter->nDocId = pIter->nDocId - 1;
242 :
243 0 : break;
244 : }
245 : }
246 :
247 0 : lcl_updateThumbnails(pItem);
248 :
249 0 : CalculateItemPositions();
250 :
251 : break;
252 : }
253 : }
254 :
255 0 : return true;
256 : }
257 :
258 0 : bool TemplateLocalView::moveTemplate (const ThumbnailViewItem *pItem, const sal_uInt16 nSrcItem,
259 : const sal_uInt16 nTargetItem, bool bCopy)
260 : {
261 0 : bool bRet = true;
262 0 : bool bRefresh = false;
263 :
264 0 : TemplateContainerItem *pTarget = NULL;
265 0 : TemplateContainerItem *pSrc = NULL;
266 :
267 0 : for (size_t i = 0, n = mItemList.size(); i < n; ++i)
268 : {
269 0 : if (mItemList[i]->mnId == nTargetItem)
270 0 : pTarget = static_cast<TemplateContainerItem*>(mItemList[i]);
271 0 : else if (mItemList[i]->mnId == nSrcItem)
272 0 : pSrc = static_cast<TemplateContainerItem*>(mItemList[i]);
273 : }
274 :
275 0 : if (pTarget && pSrc)
276 : {
277 0 : sal_uInt16 nSrcRegionId = nSrcItem-1;
278 0 : sal_uInt16 nTargetRegion = pTarget->mnId-1;
279 0 : sal_uInt16 nTargetIdx = mpDocTemplates->GetCount(nTargetRegion); // Next Idx
280 :
281 0 : const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(pItem);
282 :
283 : bool bOK;
284 :
285 0 : if (bCopy)
286 0 : bOK = mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1);
287 : else
288 0 : bOK = mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1);
289 :
290 0 : if (!bOK)
291 0 : return false;
292 :
293 : // move template to destination
294 :
295 0 : TemplateItemProperties aTemplateItem;
296 0 : aTemplateItem.nId = nTargetIdx + 1;
297 0 : aTemplateItem.nDocId = nTargetIdx;
298 0 : aTemplateItem.nRegionId = nTargetRegion;
299 0 : aTemplateItem.aName = pViewItem->maTitle;
300 0 : aTemplateItem.aPath = pViewItem->getPath();
301 0 : aTemplateItem.aThumbnail = pViewItem->maPreview1;
302 :
303 0 : pTarget->maTemplates.push_back(aTemplateItem);
304 :
305 0 : if (!bCopy)
306 : {
307 : // remove template from overlay and from cached data
308 :
309 0 : std::vector<TemplateItemProperties>::iterator aIter;
310 0 : for (aIter = pSrc->maTemplates.begin(); aIter != pSrc->maTemplates.end(); ++aIter)
311 : {
312 0 : if (aIter->nId == pViewItem->mnId)
313 : {
314 0 : pSrc->maTemplates.erase(aIter);
315 :
316 0 : mpItemView->RemoveItem(pViewItem->mnId);
317 0 : break;
318 : }
319 : }
320 : }
321 :
322 0 : bRefresh = true;
323 : }
324 : else
325 0 : bRet = false;
326 :
327 0 : if (bRefresh)
328 : {
329 0 : lcl_updateThumbnails(pSrc);
330 0 : lcl_updateThumbnails(pTarget);
331 :
332 0 : CalculateItemPositions();
333 :
334 0 : if (IsReallyVisible() && IsUpdateMode())
335 : {
336 0 : Invalidate();
337 0 : mpItemView->Invalidate();
338 : }
339 : }
340 :
341 0 : return bRet;
342 : }
343 :
344 0 : bool TemplateLocalView::moveTemplates(std::set<const ThumbnailViewItem *> &rItems,
345 : const sal_uInt16 nTargetItem, bool bCopy)
346 : {
347 0 : bool ret = true;
348 0 : bool refresh = false;
349 :
350 0 : sal_uInt16 nSrcRegionId = mpItemView->getId();
351 0 : sal_uInt16 nSrcRegionItemId = nSrcRegionId + 1;
352 :
353 0 : TemplateContainerItem *pTarget = NULL;
354 0 : TemplateContainerItem *pSrc = NULL;
355 :
356 0 : for (size_t i = 0, n = mItemList.size(); i < n; ++i)
357 : {
358 0 : if (mItemList[i]->mnId == nTargetItem)
359 0 : pTarget = static_cast<TemplateContainerItem*>(mItemList[i]);
360 0 : else if (mItemList[i]->mnId == nSrcRegionItemId)
361 0 : pSrc = static_cast<TemplateContainerItem*>(mItemList[i]);
362 : }
363 :
364 0 : if (pTarget && pSrc)
365 : {
366 0 : sal_uInt16 nTargetRegion = pTarget->mnId-1;
367 0 : sal_uInt16 nTargetIdx = mpDocTemplates->GetCount(nTargetRegion); // Next Idx
368 :
369 0 : std::set<const ThumbnailViewItem*>::iterator aSelIter;
370 0 : for ( aSelIter = rItems.begin(); aSelIter != rItems.end(); ++aSelIter, ++nTargetIdx )
371 : {
372 0 : const TemplateViewItem *pViewItem = static_cast<const TemplateViewItem*>(*aSelIter);
373 :
374 : bool bOK;
375 :
376 0 : if (bCopy)
377 0 : bOK = mpDocTemplates->Copy(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1);
378 : else
379 0 : bOK = mpDocTemplates->Move(nTargetRegion,nTargetIdx,nSrcRegionId,pViewItem->mnId-1);
380 :
381 0 : if (!bOK)
382 : {
383 0 : ret = false;
384 0 : continue;
385 : }
386 :
387 : // move template to destination
388 :
389 0 : TemplateItemProperties aTemplateItem;
390 0 : aTemplateItem.nId = nTargetIdx + 1;
391 0 : aTemplateItem.nDocId = nTargetIdx;
392 0 : aTemplateItem.nRegionId = nTargetRegion;
393 0 : aTemplateItem.aName = pViewItem->maTitle;
394 0 : aTemplateItem.aPath = pViewItem->getPath();
395 0 : aTemplateItem.aThumbnail = pViewItem->maPreview1;
396 :
397 0 : pTarget->maTemplates.push_back(aTemplateItem);
398 :
399 0 : if (!bCopy)
400 : {
401 : // remove template from overlay and from cached data
402 :
403 0 : std::vector<TemplateItemProperties>::iterator pIter;
404 0 : for (pIter = pSrc->maTemplates.begin(); pIter != pSrc->maTemplates.end(); ++pIter)
405 : {
406 0 : if (pIter->nId == pViewItem->mnId)
407 : {
408 0 : pSrc->maTemplates.erase(pIter);
409 :
410 0 : mpItemView->RemoveItem(pViewItem->mnId);
411 0 : break;
412 : }
413 : }
414 : }
415 :
416 0 : refresh = true;
417 0 : }
418 : }
419 : else
420 0 : ret = false;
421 :
422 0 : if (refresh)
423 : {
424 0 : lcl_updateThumbnails(pSrc);
425 0 : lcl_updateThumbnails(pTarget);
426 :
427 0 : CalculateItemPositions();
428 :
429 0 : Invalidate();
430 0 : mpItemView->Invalidate();
431 : }
432 :
433 0 : return ret;
434 : }
435 :
436 0 : bool TemplateLocalView::copyFrom(const sal_uInt16 nRegionItemId, const BitmapEx &rThumbnail,
437 : const OUString &rPath)
438 : {
439 0 : sal_uInt16 nRegionId = nRegionItemId - 1;
440 :
441 0 : for (size_t i = 0, n = mItemList.size(); i < n; ++i)
442 : {
443 0 : if (mItemList[i]->mnId == nRegionItemId)
444 : {
445 0 : sal_uInt16 nId = 0;
446 0 : sal_uInt16 nDocId = 0;
447 :
448 : TemplateContainerItem *pRegionItem =
449 0 : static_cast<TemplateContainerItem*>(mItemList[i]);
450 :
451 0 : if (!pRegionItem->maTemplates.empty())
452 : {
453 0 : nId = (pRegionItem->maTemplates.back()).nId+1;
454 0 : nDocId = (pRegionItem->maTemplates.back()).nDocId+1;
455 : }
456 :
457 0 : String aPath(rPath);
458 :
459 0 : if (mpDocTemplates->CopyFrom(nRegionId,nDocId,aPath))
460 : {
461 0 : TemplateItemProperties aTemplate;
462 0 : aTemplate.nId = nId;
463 0 : aTemplate.nDocId = nDocId;
464 0 : aTemplate.nRegionId = nRegionId;
465 0 : aTemplate.aName = aPath;
466 0 : aTemplate.aThumbnail = rThumbnail;
467 0 : aTemplate.aPath = mpDocTemplates->GetPath(nRegionId,nDocId);
468 :
469 : TemplateContainerItem *pItem =
470 0 : static_cast<TemplateContainerItem*>(mItemList[i]);
471 :
472 0 : pItem->maTemplates.push_back(aTemplate);
473 :
474 0 : lcl_updateThumbnails(pItem);
475 :
476 0 : return true;
477 : }
478 :
479 0 : break;
480 : }
481 : }
482 :
483 0 : return false;
484 : }
485 :
486 0 : bool TemplateLocalView::copyFrom (TemplateContainerItem *pItem, const OUString &rPath)
487 : {
488 0 : sal_uInt16 nId = 0;
489 0 : sal_uInt16 nDocId = 0;
490 0 : sal_uInt16 nRegionId = pItem->mnId - 1;
491 0 : String aPath(rPath);
492 :
493 0 : if (!pItem->maTemplates.empty())
494 : {
495 0 : nId = (pItem->maTemplates.back()).nId+1;
496 0 : nDocId = (pItem->maTemplates.back()).nDocId+1;
497 : }
498 :
499 0 : if (mpDocTemplates->CopyFrom(nRegionId,nDocId,aPath))
500 : {
501 0 : TemplateItemProperties aTemplate;
502 0 : aTemplate.nId = nId;
503 0 : aTemplate.nDocId = nDocId;
504 0 : aTemplate.nRegionId = nRegionId;
505 0 : aTemplate.aName = aPath;
506 : aTemplate.aThumbnail = TemplateAbstractView::fetchThumbnail(rPath,
507 : TEMPLATE_THUMBNAIL_MAX_WIDTH,
508 0 : TEMPLATE_THUMBNAIL_MAX_HEIGHT);
509 0 : aTemplate.aPath = rPath;
510 :
511 0 : pItem->maTemplates.push_back(aTemplate);
512 :
513 0 : lcl_updateThumbnails(pItem);
514 :
515 0 : CalculateItemPositions();
516 :
517 0 : return true;
518 : }
519 :
520 0 : return false;
521 : }
522 :
523 0 : bool TemplateLocalView::exportTo(const sal_uInt16 nItemId, const sal_uInt16 nRegionItemId, const OUString &rName)
524 : {
525 0 : sal_uInt16 nRegionId = nRegionItemId - 1;
526 :
527 0 : for (size_t i = 0, n = mItemList.size(); i < n; ++i)
528 : {
529 0 : if (mItemList[i]->mnId == nRegionItemId)
530 : {
531 : TemplateContainerItem *pRegItem =
532 0 : static_cast<TemplateContainerItem*>(mItemList[i]);
533 :
534 0 : std::vector<TemplateItemProperties>::iterator aIter;
535 0 : for (aIter = pRegItem->maTemplates.begin(); aIter != pRegItem->maTemplates.end(); ++aIter)
536 : {
537 0 : if (aIter->nId == nItemId)
538 : {
539 0 : if (!mpDocTemplates->CopyTo(nRegionId,aIter->nDocId,rName))
540 0 : return false;
541 :
542 0 : return true;
543 : }
544 : }
545 :
546 : break;
547 : }
548 : }
549 :
550 0 : return false;
551 : }
552 :
553 0 : bool TemplateLocalView::saveTemplateAs (sal_uInt16 nItemId,
554 : com::sun::star::uno::Reference<com::sun::star::frame::XModel> &rModel,
555 : const OUString &rName)
556 : {
557 0 : bool bRet = false;
558 :
559 0 : for (size_t i = 0, n = mItemList.size(); i < n; ++i)
560 : {
561 0 : if (mItemList[i]->mnId == nItemId)
562 : {
563 0 : bRet = saveTemplateAs((const TemplateContainerItem*)mItemList[i],rModel,rName);
564 0 : break;
565 : }
566 : }
567 :
568 0 : return bRet;
569 : }
570 :
571 0 : bool TemplateLocalView::saveTemplateAs(const TemplateContainerItem *pDstItem,
572 : com::sun::star::uno::Reference<com::sun::star::frame::XModel> &rModel,
573 : const OUString &rName)
574 : {
575 0 : uno::Reference< frame::XStorable > xStorable(rModel, uno::UNO_QUERY_THROW );
576 :
577 : uno::Reference< frame::XDocumentTemplates > xTemplates(
578 0 : frame::DocumentTemplates::create(comphelper::getProcessComponentContext()) );
579 :
580 0 : sal_uInt16 nRegionId = pDstItem->mnId-1;
581 :
582 0 : if (!xTemplates->storeTemplate(mpDocTemplates->GetRegionName(nRegionId),rName, xStorable ))
583 0 : return false;
584 :
585 0 : return true;
586 : }
587 :
588 0 : bool TemplateLocalView::isTemplateNameUnique(const sal_uInt16 nRegionItemId, const OUString &rName) const
589 : {
590 0 : for (size_t i = 0, n = mItemList.size(); i < n; ++i)
591 : {
592 0 : if (mItemList[i]->mnId == nRegionItemId)
593 : {
594 : TemplateContainerItem *pRegItem =
595 0 : static_cast<TemplateContainerItem*>(mItemList[i]);
596 :
597 0 : std::vector<TemplateItemProperties>::iterator aIter;
598 0 : for (aIter = pRegItem->maTemplates.begin(); aIter != pRegItem->maTemplates.end(); ++aIter)
599 : {
600 0 : if (aIter->aName == rName)
601 0 : return false;
602 : }
603 :
604 : break;
605 : }
606 : }
607 :
608 0 : return true;
609 : }
610 :
611 0 : void TemplateLocalView::OnItemDblClicked (ThumbnailViewItem *pRegionItem)
612 : {
613 : // Fill templates
614 0 : sal_uInt16 nRegionId = pRegionItem->mnId-1;
615 :
616 0 : mpItemView->setId(nRegionId);
617 0 : mpItemView->setName(mpDocTemplates->GetRegionName(nRegionId));
618 0 : mpItemView->InsertItems(static_cast<TemplateContainerItem*>(pRegionItem)->maTemplates);
619 :
620 0 : mpItemView->filterItems(ViewFilter_Application(meFilterOption));
621 :
622 0 : showOverlay(true);
623 0 : }
624 :
625 0 : static void lcl_updateThumbnails (TemplateContainerItem *pItem)
626 : {
627 0 : pItem->maPreview1.Clear();
628 0 : pItem->maPreview2.Clear();
629 :
630 : // Update folder thumbnails
631 0 : for (size_t i = 0, n = pItem->maTemplates.size(); i < n && ( pItem->maPreview1.IsEmpty() || pItem->maPreview2.IsEmpty( ) ); ++i)
632 : {
633 0 : if ( pItem->maPreview1.IsEmpty( ) )
634 : {
635 0 : pItem->maPreview1 = TemplateAbstractView::scaleImg(pItem->maTemplates[i].aThumbnail,
636 : TEMPLATE_THUMBNAIL_MAX_WIDTH*0.75,
637 0 : TEMPLATE_THUMBNAIL_MAX_HEIGHT*0.75);
638 : }
639 : else
640 : {
641 0 : pItem->maPreview2 = TemplateAbstractView::scaleImg(pItem->maTemplates[i].aThumbnail,
642 : TEMPLATE_THUMBNAIL_MAX_WIDTH*0.75,
643 0 : TEMPLATE_THUMBNAIL_MAX_HEIGHT*0.75);
644 : }
645 : }
646 0 : }
647 :
648 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|