[Libreoffice-commits] .: Branch 'feature/template-dialog' - 17 commits - sfx2/AllLangResTarget_sfx2.mk sfx2/inc sfx2/Library_sfx.mk sfx2/Package_inc.mk sfx2/source

Rafael Dominguez rdominguez at kemper.freedesktop.org
Tue Jun 19 16:49:48 PDT 2012


 sfx2/AllLangResTarget_sfx2.mk                  |    1 
 sfx2/Library_sfx.mk                            |    2 
 sfx2/Package_inc.mk                            |    2 
 sfx2/inc/sfx2/templatefolderview.hxx           |   32 ++++++
 sfx2/inc/sfx2/templatefolderviewitem.hxx       |   36 +++++++
 sfx2/inc/sfx2/templateview.hxx                 |   47 +++++++++
 sfx2/inc/sfx2/thumbnailview.hxx                |   29 +++---
 sfx2/inc/sfx2/thumbnailviewitem.hxx            |   15 ---
 sfx2/source/control/templatefolderview.cxx     |   61 +++++++++---
 sfx2/source/control/templatefolderviewitem.cxx |  114 ++++++++++++++++++++++++
 sfx2/source/control/templateview.cxx           |  118 +++++++++++++++++++++++++
 sfx2/source/control/templateview.hrc           |    9 +
 sfx2/source/control/templateview.src           |   17 +++
 sfx2/source/control/thumbnailview.cxx          |  113 +++++++++--------------
 sfx2/source/control/thumbnailviewitem.cxx      |   48 +---------
 15 files changed, 491 insertions(+), 153 deletions(-)

New commits:
commit 472b4b8d3889587e67538aa41e178377acf1a271
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 18:05:00 2012 -0430

    Create a filter class to display items by generated app.
    
    Change-Id: Ia412fe70746674672bc2f1c8cb3e2cedd947e645

diff --git a/sfx2/inc/sfx2/templatefolderview.hxx b/sfx2/inc/sfx2/templatefolderview.hxx
index 84cd003..d75d679 100644
--- a/sfx2/inc/sfx2/templatefolderview.hxx
+++ b/sfx2/inc/sfx2/templatefolderview.hxx
@@ -15,6 +15,29 @@
 class SfxDocumentTemplates;
 class TemplateView;
 
+// Display template items depending on the generator application
+class ViewFilter_Application
+{
+public:
+
+    enum APP_GENERATOR
+    {
+        APP_WRITER,
+        APP_CALC,
+        APP_IMPRESS,
+        APP_DRAW
+    };
+
+    ViewFilter_Application (SfxDocumentTemplates *pDocTemplates, APP_GENERATOR App);
+
+    bool operator () (const ThumbnailViewItem *pItem);
+
+private:
+
+    APP_GENERATOR mApp;
+    SfxDocumentTemplates *mpDocTemplates;
+};
+
 class TemplateFolderView : public ThumbnailView
 {
 public:
diff --git a/sfx2/source/control/templatefolderview.cxx b/sfx2/source/control/templatefolderview.cxx
index 26d757f..e000b5b 100644
--- a/sfx2/source/control/templatefolderview.cxx
+++ b/sfx2/source/control/templatefolderview.cxx
@@ -136,6 +136,17 @@ BitmapEx lcl_fetchThumbnail (const rtl::OUString &msURL, int width, int height)
     return aThumbnail;
 }
 
+ViewFilter_Application::ViewFilter_Application (SfxDocumentTemplates *pDocTemplates,
+                                                ViewFilter_Application::APP_GENERATOR App)
+    : mApp(App), mpDocTemplates(pDocTemplates)
+{
+}
+
+bool ViewFilter_Application::operator () (const ThumbnailViewItem *pItem)
+{
+    return true;
+}
+
 TemplateFolderView::TemplateFolderView ( Window* pParent, const ResId& rResId, bool bDisableTransientChildren)
     : ThumbnailView(pParent,rResId,bDisableTransientChildren),
       mpDocTemplates(new SfxDocumentTemplates),
commit f822c18c546d6262c46d30b532a1f2b4186ccfa5
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 16:04:54 2012 -0430

    Subclass ThumbnailViewItem for TemplateFolderView specific.
    
    - Let ThumbnailViewItem a basic structure for displaying a thumbnail,
    name and a selection box.
    
    Change-Id: I00fffcb0c1cb17017cfe7adfde152e640ee01c82

diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index 872a107..5f2dd61 100644
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -150,6 +150,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
     sfx2/source/control/statcach \
     sfx2/source/control/templateview \
     sfx2/source/control/templatefolderview \
+    sfx2/source/control/templatefolderviewitem \
     sfx2/source/control/thumbnailviewitem \
     sfx2/source/control/thumbnailviewacc \
     sfx2/source/control/thumbnailview \
diff --git a/sfx2/Package_inc.mk b/sfx2/Package_inc.mk
index c66ce44..ed7a7f2 100644
--- a/sfx2/Package_inc.mk
+++ b/sfx2/Package_inc.mk
@@ -129,6 +129,7 @@ $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templdlg.hxx,sfx2/templdlg.h
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatelocnames.hrc,sfx2/templatelocnames.hrc))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templateview.hxx,sfx2/templateview.hxx))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatefolderview.hxx,sfx2/templatefolderview.hxx))
+$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatefolderviewitem.hxx,sfx2/templatefolderviewitem.hxx))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/thumbnailview.hxx,sfx2/thumbnailview.hxx))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/thumbnailviewitem.hxx,sfx2/thumbnailviewitem.hxx))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/titledockwin.hxx,sfx2/titledockwin.hxx))
diff --git a/sfx2/inc/sfx2/templatefolderviewitem.hxx b/sfx2/inc/sfx2/templatefolderviewitem.hxx
new file mode 100644
index 0000000..d0ebfe1
--- /dev/null
+++ b/sfx2/inc/sfx2/templatefolderviewitem.hxx
@@ -0,0 +1,36 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Copyright 2012 LibreOffice contributors.
+ *
+ * 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/.
+ */
+
+#ifndef TEMPLATEFOLDERVIEWITEM_HXX
+#define TEMPLATEFOLDERVIEWITEM_HXX
+
+#include <sfx2/thumbnailviewitem.hxx>
+
+struct TemplateFolderViewItem : public ThumbnailViewItem
+{
+    BitmapEx maPreview2;
+
+    TemplateFolderViewItem (ThumbnailView &rView, Window *pParent);
+
+    virtual ~TemplateFolderViewItem ();
+
+    virtual void calculateItemsPosition ();
+
+    const Point& getPrev2Pos () const { return maPrev2Pos; }
+
+    virtual void Paint (drawinglayer::processor2d::BaseProcessor2D *pProcessor,
+                        const ThumbnailItemAttributes *pAttrs);
+private:
+
+    Point maPrev2Pos;
+};
+
+#endif // TEMPLATEFOLDERVIEWITEM_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/inc/sfx2/thumbnailviewitem.hxx b/sfx2/inc/sfx2/thumbnailviewitem.hxx
index 16652ed..0d9fbd4 100644
--- a/sfx2/inc/sfx2/thumbnailviewitem.hxx
+++ b/sfx2/inc/sfx2/thumbnailviewitem.hxx
@@ -65,7 +65,6 @@ struct ThumbnailViewItem
     bool mbSelected;
     bool mbHover;
     BitmapEx maPreview1;
-    BitmapEx maPreview2;
     rtl::OUString maText;
     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >* mpxAcc;
 
@@ -92,33 +91,30 @@ struct ThumbnailViewItem
 
     const Rectangle& getDrawArea () const { return maDrawArea; }
 
-    void calculateItemsPosition ();
+    virtual void calculateItemsPosition ();
 
     const Point& getTextPos () const { return maTextPos; }
 
     const Point& getPrev1Pos () const { return maPrev1Pos; }
 
-    const Point& getPrev2Pos () const { return maPrev2Pos; }
-
     void setSelectionMode (bool mode);
 
     void setSelectClickHdl (const Link &link);
 
     bool isInsideTitle (const Point &pt) const;
 
-    void Paint (drawinglayer::processor2d::BaseProcessor2D *pProcessor,
-                const ThumbnailItemAttributes *pAttrs);
+    virtual void Paint (drawinglayer::processor2d::BaseProcessor2D *pProcessor,
+                        const ThumbnailItemAttributes *pAttrs);
 
 private:
 
     DECL_LINK (OnClick, CheckBox *);
 
-private:
+protected:
 
     bool mbMode;
     Point maTextPos;
     Point maPrev1Pos;
-    Point maPrev2Pos;
     Rectangle maDrawArea;
     Link maClickHdl;
     CheckBox *mpSelectBox;
diff --git a/sfx2/source/control/templatefolderview.cxx b/sfx2/source/control/templatefolderview.cxx
index 800380e..26d757f 100644
--- a/sfx2/source/control/templatefolderview.cxx
+++ b/sfx2/source/control/templatefolderview.cxx
@@ -12,7 +12,7 @@
 #include <comphelper/processfactory.hxx>
 #include <sfx2/doctempl.hxx>
 #include <sfx2/templateview.hxx>
-#include <sfx2/thumbnailviewitem.hxx>
+#include <sfx2/templatefolderviewitem.hxx>
 #include <unotools/ucbstreamhelper.hxx>
 #include <vcl/pngread.hxx>
 
@@ -165,7 +165,7 @@ void TemplateFolderView::Populate ()
 
         if (nEntries)
         {
-            ThumbnailViewItem* pItem = new ThumbnailViewItem( *this, this );
+            TemplateFolderViewItem* pItem = new TemplateFolderViewItem( *this, this );
             pItem->mnId = i+1;
             pItem->maText = aRegionName;
             pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnFolderSelected));
diff --git a/sfx2/source/control/templatefolderviewitem.cxx b/sfx2/source/control/templatefolderviewitem.cxx
new file mode 100644
index 0000000..2486560
--- /dev/null
+++ b/sfx2/source/control/templatefolderviewitem.cxx
@@ -0,0 +1,114 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Copyright 2012 LibreOffice contributors.
+ *
+ * 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/.
+ */
+
+#include <sfx2/templatefolderviewitem.hxx>
+
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <drawinglayer/attribute/fillbitmapattribute.hxx>
+#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx>
+#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
+#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
+#include <drawinglayer/primitive2d/textprimitive2d.hxx>
+#include <drawinglayer/processor2d/baseprocessor2d.hxx>
+#include <vcl/button.hxx>
+
+using namespace basegfx;
+using namespace basegfx::tools;
+using namespace drawinglayer::attribute;
+using namespace drawinglayer::primitive2d;
+
+TemplateFolderViewItem::TemplateFolderViewItem (ThumbnailView &rView, Window *pParent)
+    : ThumbnailViewItem(rView,pParent)
+{
+}
+
+TemplateFolderViewItem::~TemplateFolderViewItem ()
+{
+}
+
+void TemplateFolderViewItem::calculateItemsPosition ()
+{
+    ThumbnailViewItem::calculateItemsPosition();
+}
+
+void TemplateFolderViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProcessor,
+                                    const ThumbnailItemAttributes *pAttrs)
+{
+    int nCount = 0;
+    int nSeqSize = 3;
+
+    if (!maPreview2.IsEmpty())
+        ++nSeqSize;
+
+    BColor aFillColor = pAttrs->aFillColor;
+    Primitive2DSequence aSeq(nSeqSize);
+
+    // Draw background
+    if ( mbSelected || mbHover )
+        aFillColor = pAttrs->aHighlightColor;
+
+    aSeq[nCount++] = Primitive2DReference( new PolyPolygonColorPrimitive2D(
+                                               B2DPolyPolygon(Polygon(maDrawArea,5,5).getB2DPolygon()),
+                                               aFillColor));
+
+    // Draw thumbnail
+    Point aPos = maPrev1Pos;
+    Size aImageSize = maPreview1.GetSizePixel();
+
+    float fScaleX = 1.0f;
+    float fScaleY = 1.0f;
+
+    if (!maPreview2.IsEmpty())
+    {
+        fScaleX = 0.8;
+        fScaleY = 0.8;
+
+        aSeq[nCount++] = Primitive2DReference( new FillBitmapPrimitive2D(
+                                            createScaleTranslateB2DHomMatrix(fScaleX,fScaleY,aPos.X(),aPos.Y()),
+                                            FillBitmapAttribute(maPreview2,
+                                                                B2DPoint(35,20),
+                                                                B2DVector(aImageSize.Width(),aImageSize.Height()),
+                                                                false)
+                                            ));
+    }
+
+    aSeq[nCount++] = Primitive2DReference( new FillBitmapPrimitive2D(
+                                        createScaleTranslateB2DHomMatrix(fScaleX,fScaleY,aPos.X(),aPos.Y()),
+                                        FillBitmapAttribute(maPreview1,
+                                                            B2DPoint(0,0),
+                                                            B2DVector(aImageSize.Width(),aImageSize.Height()),
+                                                            false)
+                                        ));
+
+    // Draw centered text below thumbnail
+    aPos = maTextPos;
+
+    // Create the text primitive
+    basegfx::B2DHomMatrix aTextMatrix( createScaleTranslateB2DHomMatrix(
+                pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(),
+                double( aPos.X() ), double( aPos.Y() ) ) );
+
+    aSeq[nCount++] = Primitive2DReference(
+                new TextSimplePortionPrimitive2D(aTextMatrix,
+                                                 maText,0,maText.getLength(),
+                                                 std::vector< double >( ),
+                                                 pAttrs->aFontAttr,
+                                                 com::sun::star::lang::Locale(),
+                                                 Color(COL_BLACK).getBColor() ) );
+
+    pProcessor->process(aSeq);
+
+    if (mbMode || mbHover || mbSelected)
+        mpSelectBox->Paint(maDrawArea);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+
+
diff --git a/sfx2/source/control/thumbnailviewitem.cxx b/sfx2/source/control/thumbnailviewitem.cxx
index 76d3bb2..a23fcb2 100644
--- a/sfx2/source/control/thumbnailviewitem.cxx
+++ b/sfx2/source/control/thumbnailviewitem.cxx
@@ -166,20 +166,14 @@ bool ThumbnailViewItem::isInsideTitle (const Point &pt) const
 void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProcessor,
                                const ThumbnailItemAttributes *pAttrs)
 {
-    int nCount = 0;
-    int nSeqSize = 3;
-
-    if (!maPreview2.IsEmpty())
-        ++nSeqSize;
-
     BColor aFillColor = pAttrs->aFillColor;
-    Primitive2DSequence aSeq(nSeqSize);
+    Primitive2DSequence aSeq(3);
 
     // Draw background
     if ( mbSelected || mbHover )
         aFillColor = pAttrs->aHighlightColor;
 
-    aSeq[nCount++] = Primitive2DReference( new PolyPolygonColorPrimitive2D(
+    aSeq[0] = Primitive2DReference( new PolyPolygonColorPrimitive2D(
                                                B2DPolyPolygon(Polygon(maDrawArea,5,5).getB2DPolygon()),
                                                aFillColor));
 
@@ -187,25 +181,8 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc
     Point aPos = maPrev1Pos;
     Size aImageSize = maPreview1.GetSizePixel();
 
-    float fScaleX = 1.0f;
-    float fScaleY = 1.0f;
-
-    if (!maPreview2.IsEmpty())
-    {
-        fScaleX = 0.8;
-        fScaleY = 0.8;
-
-        aSeq[nCount++] = Primitive2DReference( new FillBitmapPrimitive2D(
-                                            createScaleTranslateB2DHomMatrix(fScaleX,fScaleY,aPos.X(),aPos.Y()),
-                                            FillBitmapAttribute(maPreview2,
-                                                                B2DPoint(35,20),
-                                                                B2DVector(aImageSize.Width(),aImageSize.Height()),
-                                                                false)
-                                            ));
-    }
-
-    aSeq[nCount++] = Primitive2DReference( new FillBitmapPrimitive2D(
-                                        createScaleTranslateB2DHomMatrix(fScaleX,fScaleY,aPos.X(),aPos.Y()),
+    aSeq[1] = Primitive2DReference( new FillBitmapPrimitive2D(
+                                        createTranslateB2DHomMatrix(aPos.X(),aPos.Y()),
                                         FillBitmapAttribute(maPreview1,
                                                             B2DPoint(0,0),
                                                             B2DVector(aImageSize.Width(),aImageSize.Height()),
@@ -220,7 +197,7 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc
                 pAttrs->aFontSize.getX(), pAttrs->aFontSize.getY(),
                 double( aPos.X() ), double( aPos.Y() ) ) );
 
-    aSeq[nCount++] = Primitive2DReference(
+    aSeq[2] = Primitive2DReference(
                 new TextSimplePortionPrimitive2D(aTextMatrix,
                                                  maText,0,maText.getLength(),
                                                  std::vector< double >( ),
commit 9b8a9a7d116ac06b7f8a402e17546460fcde641e
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 14:45:22 2012 -0430

    Dont display item controls or execute any action while they are hidden.
    
    Change-Id: If43c7b3615f8f2deb8851c50b0514da2ee77044a

diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx
index d6ae188..626828c 100644
--- a/sfx2/source/control/thumbnailview.cxx
+++ b/sfx2/source/control/thumbnailview.cxx
@@ -636,7 +636,7 @@ void ThumbnailView::MouseButtonDown( const MouseEvent& rMEvt )
     {
         ThumbnailViewItem* pItem = ImplGetItem( ImplGetItem( rMEvt.GetPosPixel() ) );
 
-        if (pItem)
+        if (pItem && pItem->isVisible())
         {
             if ( !rMEvt.IsMod2() )
             {
@@ -684,7 +684,7 @@ void ThumbnailView::MouseMove( const MouseEvent& rMEvt )
 
     if (pItem)
     {
-        if (mnHighItemId != pItem->mnId)
+        if (mnHighItemId != pItem->mnId && pItem->isVisible())
         {
             size_t nPos = GetItemPos(mnHighItemId);
 
diff --git a/sfx2/source/control/thumbnailviewitem.cxx b/sfx2/source/control/thumbnailviewitem.cxx
index fde678c..76d3bb2 100644
--- a/sfx2/source/control/thumbnailviewitem.cxx
+++ b/sfx2/source/control/thumbnailviewitem.cxx
@@ -146,7 +146,7 @@ void ThumbnailViewItem::setSelectionMode (bool mode)
 {
     mbMode = mode;
 
-    if (!mbHover && !mbSelected)
+    if (!mbHover && !mbSelected && mbVisible)
         mpSelectBox->Show(mode);
 }
 
commit d640ca4c9463fe24515426ab77cee93e2a003349
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 14:36:33 2012 -0430

    Implement filtering thumbnail items by a user defined function.
    
    - Created a default filter function to display all the items in the
    thumbnail.
    
    Change-Id: I5bd901d6c9a896a149241f7ad13207e774ba3e2f

diff --git a/sfx2/inc/sfx2/thumbnailview.hxx b/sfx2/inc/sfx2/thumbnailview.hxx
index 2f1e513..613a30e 100644
--- a/sfx2/inc/sfx2/thumbnailview.hxx
+++ b/sfx2/inc/sfx2/thumbnailview.hxx
@@ -13,6 +13,7 @@
 #include "svtools/svtdllapi.h"
 
 #include <vector>
+#include <boost/function.hpp>
 
 #include <vcl/ctrl.hxx>
 #include <vcl/timer.hxx>
@@ -151,6 +152,17 @@ namespace drawinglayer {
 #define THUMBNAILVIEW_APPEND         ((sal_uInt16)-1)
 #define THUMBNAILVIEW_ITEM_NOTFOUND  ((sal_uInt16)-1)
 
+// Display all the available items in the thumbnail.
+class ViewFilterAll
+{
+public:
+
+    bool operator () (const ThumbnailViewItem*) const
+    {
+        return true;
+    }
+};
+
 /**
  *
  *  Class to display thumbnails with their names below their respective icons
@@ -226,6 +238,8 @@ public:
 
     void setSelectionMode (bool mode);
 
+    void filterItems (const boost::function<bool (const ThumbnailViewItem*) > &func);
+
 protected:
 
     virtual void MouseButtonDown( const MouseEvent& rMEvt );
@@ -326,6 +340,7 @@ protected:
 
     ThumbnailItemAttributes *mpItemAttrs;
     drawinglayer::processor2d::BaseProcessor2D *mpProcessor;
+    boost::function<bool (const ThumbnailViewItem*) > maFilterFunc;
 };
 
 #endif // THUMBNAILVIEW_HXX
diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx
index 3a82ca7..d6ae188 100644
--- a/sfx2/source/control/thumbnailview.cxx
+++ b/sfx2/source/control/thumbnailview.cxx
@@ -104,6 +104,7 @@ void ThumbnailView::ImplInit()
     mbScroll            = false;
     mbHasVisibleItems   = false;
     mbSelectionMode = false;
+    maFilterFunc = ViewFilterAll();
 
     // Create the processor and process the primitives
     const drawinglayer::geometry::ViewInformation2D aNewViewInfos;
@@ -340,8 +341,7 @@ void ThumbnailView::CalculateItemPositions ()
         long y = nStartY;
 
         // draw items
-        sal_uLong nFirstItem = mnFirstLine * mnCols;
-        sal_uLong nLastItem = nFirstItem + (mnVisLines * mnCols);
+        size_t nTotalItems = mnFirstLine*mnCols + mnVisLines*mnCols;
 
         maItemListRect.Left() = x;
         maItemListRect.Top() = y + mnHeaderHeight;
@@ -352,14 +352,15 @@ void ThumbnailView::CalculateItemPositions ()
         // then we add one more line if parts of these line are
         // visible
         if ( y+(mnVisLines*(mnItemHeight+mnSpacing)) < aWinSize.Height() )
-            nLastItem += mnCols;
+            nTotalItems += mnCols;
         maItemListRect.Bottom() = aWinSize.Height() - y;
 
+        size_t nCurCount = 0;
         for ( size_t i = 0; i < nItemCount; i++ )
         {
             ThumbnailViewItem *const pItem = mItemList[i];
 
-            if ( (i >= nFirstItem) && (i < nLastItem) )
+            if (maFilterFunc(pItem) && nCurCount < nTotalItems)
             {
                 if( !pItem->isVisible() && ImplHasAccessibleListeners() )
                 {
@@ -380,6 +381,8 @@ void ThumbnailView::CalculateItemPositions ()
                 }
                 else
                     x += mnItemWidth+mnSpacing;
+
+                ++nCurCount;
             }
             else
             {
@@ -1402,6 +1405,15 @@ void ThumbnailView::setSelectionMode (bool mode)
     OnSelectionMode(mode);
 }
 
+void ThumbnailView::filterItems (const boost::function<bool (const ThumbnailViewItem*) > &func)
+{
+    maFilterFunc = func;
+
+    CalculateItemPositions();
+
+    Invalidate();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
 
 
commit 590f39c6104ad62a043b9ccba305f595632a57c0
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 13:04:10 2012 -0430

    Remove unused functions and attributes in ThumbnailView.
    
    Change-Id: I2013303c8d7d569672d24fcd4702085af7bef438

diff --git a/sfx2/inc/sfx2/thumbnailview.hxx b/sfx2/inc/sfx2/thumbnailview.hxx
index ebd4b51..2f1e513 100644
--- a/sfx2/inc/sfx2/thumbnailview.hxx
+++ b/sfx2/inc/sfx2/thumbnailview.hxx
@@ -218,10 +218,6 @@ public:
 
     bool IsColor() const { return maColor.GetTransparency() == 0; }
 
-    void            StartSelection();
-
-    void            EndSelection();
-
     Size            CalcWindowSizePixel( const Size& rItemSize,
                                          sal_uInt16 nCalcCols = 0,
                                          sal_uInt16 nCalcLines = 0 );
@@ -306,7 +302,6 @@ protected:
     Timer maTimer;
     ValueItemList mItemList;
     ScrollBar* mpScrBar;
-    Rectangle maNoneItemRect;
     Rectangle maItemListRect;
     long mnHeaderHeight;
     long mnItemWidth;
@@ -323,12 +318,6 @@ protected:
     sal_uInt16 mnUserVisLines;
     sal_uInt16 mnFirstLine;
     sal_uInt16 mnSpacing;
-    sal_uInt16 mnFrameStyle;
-    bool mbHighlight : 1;
-    bool mbSelection : 1;
-    bool mbDrawSelection : 1;
-    bool mbBlackSel : 1;
-    bool mbDoubleSel : 1;
     bool mbScroll : 1;
     bool mbIsTransientChildrenDisabled : 1;
     bool mbHasVisibleItems : 1;
diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx
index 73c0abf..3a82ca7 100644
--- a/sfx2/source/control/thumbnailview.cxx
+++ b/sfx2/source/control/thumbnailview.cxx
@@ -101,12 +101,6 @@ void ThumbnailView::ImplInit()
     mnUserCols          = 0;
     mnUserVisLines      = 0;
     mnSpacing           = 0;
-    mnFrameStyle        = 0;
-    mbHighlight         = false;
-    mbSelection         = false;
-    mbDrawSelection     = true;
-    mbBlackSel          = false;
-    mbDoubleSel         = false;
     mbScroll            = false;
     mbHasVisibleItems   = false;
     mbSelectionMode = false;
@@ -337,25 +331,6 @@ void ThumbnailView::CalculateItemPositions ()
     {
         mbHasVisibleItems = true;
 
-        // determine Frame-Style
-        mnFrameStyle = FRAME_DRAW_IN;
-
-        // determine selected color and width
-        // if necessary change the colors, to make the selection
-        // better detectable
-        const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
-        Color aHighColor( rStyleSettings.GetHighlightColor() );
-        if ( ((aHighColor.GetRed() > 0x80) || (aHighColor.GetGreen() > 0x80) ||
-              (aHighColor.GetBlue() > 0x80)) ||
-             ((aHighColor.GetRed() == 0x80) && (aHighColor.GetGreen() == 0x80) &&
-              (aHighColor.GetBlue() == 0x80)) )
-            mbBlackSel = true;
-        else
-            mbBlackSel = false;
-
-        // draw the selection with double width if the items are bigger
-        mbDoubleSel = false;
-
         // calculate offsets
         long nStartX = 0;
         long nStartY = mnHeaderHeight;
@@ -634,16 +609,10 @@ IMPL_LINK_NOARG(ThumbnailView, ImplTimerHdl)
 
 void ThumbnailView::ImplTracking( const Point& rPos, bool bRepeat )
 {
-    if ( bRepeat || mbSelection )
+    if ( bRepeat )
     {
         if ( ImplScroll( rPos ) )
         {
-            if ( mbSelection )
-            {
-                maTimer.SetTimeoutHdl( LINK( this, ThumbnailView, ImplTimerHdl ) );
-                maTimer.SetTimeout( GetSettings().GetMouseSettings().GetScrollRepeat() );
-                maTimer.Start();
-            }
         }
     }
 }
@@ -873,7 +842,6 @@ void ThumbnailView::KeyInput( const KeyEvent& rKEvt )
 
     // This point is reached only if key travelling was used,
     // in which case selection mode should be switched off
-    EndSelection();
 
     if ( nItemPos != THUMBNAILVIEW_ITEM_NOTFOUND )
     {
@@ -1337,32 +1305,12 @@ void ThumbnailView::SetColor( const Color& rColor )
         Invalidate();
 }
 
-void ThumbnailView::StartSelection()
-{
-    mbHighlight     = true;
-    mbSelection     = true;
-    mnHighItemId    = mnSelItemId;
-}
-
-void ThumbnailView::EndSelection()
-{
-    if ( mbHighlight )
-    {
-        if ( IsTracking() )
-            EndTracking( ENDTRACK_CANCEL );
-
-        mbHighlight = false;
-    }
-    mbSelection = false;
-}
-
 bool ThumbnailView::StartDrag( const CommandEvent& rCEvt, Region& rRegion )
 {
     if ( rCEvt.GetCommand() != COMMAND_STARTDRAG )
         return false;
 
     // if necessary abort an existing action
-    EndSelection();
 
     // Check out if the the clicked on page is selected. If this is not the
     // case set it as the current item. We only check mouse actions since
commit a3097516c9ea73137b83cbbdeb2328bdc0c067b0
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 12:47:04 2012 -0430

    Use SfxDocumentTemplates directly instead of SfxOrganizeMgr.
    
    - Make sure we delete first the folder overlay and then the
    SfxDocumentTemplates variable.
    
    Change-Id: I6c0edd320d8b83b1a1489eb7ff886b03e055212b

diff --git a/sfx2/inc/sfx2/templatefolderview.hxx b/sfx2/inc/sfx2/templatefolderview.hxx
index 8491ad6..84cd003 100644
--- a/sfx2/inc/sfx2/templatefolderview.hxx
+++ b/sfx2/inc/sfx2/templatefolderview.hxx
@@ -12,7 +12,7 @@
 
 #include <sfx2/thumbnailview.hxx>
 
-class SfxOrganizeMgr;
+class SfxDocumentTemplates;
 class TemplateView;
 
 class TemplateFolderView : public ThumbnailView
@@ -39,7 +39,7 @@ private:
 
 private:
 
-    SfxOrganizeMgr *mpMgr;
+    SfxDocumentTemplates *mpDocTemplates;
     TemplateView *mpItemView;
 };
 
diff --git a/sfx2/source/control/templatefolderview.cxx b/sfx2/source/control/templatefolderview.cxx
index e825a3e..800380e 100644
--- a/sfx2/source/control/templatefolderview.cxx
+++ b/sfx2/source/control/templatefolderview.cxx
@@ -22,8 +22,6 @@
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
 
-#include "orgmgr.hxx"
-
 BitmapEx lcl_fetchThumbnail (const rtl::OUString &msURL, int width, int height)
 {
     using namespace ::com::sun::star;
@@ -140,8 +138,8 @@ BitmapEx lcl_fetchThumbnail (const rtl::OUString &msURL, int width, int height)
 
 TemplateFolderView::TemplateFolderView ( Window* pParent, const ResId& rResId, bool bDisableTransientChildren)
     : ThumbnailView(pParent,rResId,bDisableTransientChildren),
-      mpMgr(new SfxOrganizeMgr(NULL,NULL)),
-      mpItemView(new TemplateView(this,(SfxDocumentTemplates*)mpMgr->GetTemplates()))
+      mpDocTemplates(new SfxDocumentTemplates),
+      mpItemView(new TemplateView(this,mpDocTemplates))
 {
     mpItemView->SetColor(Color(COL_WHITE));
     mpItemView->SetPosPixel(Point(0,0));
@@ -152,20 +150,18 @@ TemplateFolderView::TemplateFolderView ( Window* pParent, const ResId& rResId, b
 
 TemplateFolderView::~TemplateFolderView()
 {
-    delete mpMgr;
     delete mpItemView;
+    delete mpDocTemplates;
 }
 
 void TemplateFolderView::Populate ()
 {
-    const SfxDocumentTemplates* pTemplates = mpMgr->GetTemplates();
-
-    sal_uInt16 nCount = pTemplates->GetRegionCount();
+    sal_uInt16 nCount = mpDocTemplates->GetRegionCount();
     for (sal_uInt16 i = 0; i < nCount; ++i)
     {
-        rtl::OUString aRegionName(pTemplates->GetFullRegionName(i));
+        rtl::OUString aRegionName(mpDocTemplates->GetFullRegionName(i));
 
-        sal_uInt16 nEntries = pTemplates->GetCount(i);
+        sal_uInt16 nEntries = mpDocTemplates->GetCount(i);
 
         if (nEntries)
         {
@@ -175,10 +171,10 @@ void TemplateFolderView::Populate ()
             pItem->setSelectClickHdl(LINK(this,ThumbnailView,OnFolderSelected));
 
             /// Preview first 2 thumbnails for folder
-            pItem->maPreview1 = lcl_fetchThumbnail(pTemplates->GetPath(i,0),128,128);
+            pItem->maPreview1 = lcl_fetchThumbnail(mpDocTemplates->GetPath(i,0),128,128);
 
             if ( nEntries > 2 )
-                pItem->maPreview2 = lcl_fetchThumbnail(pTemplates->GetPath(i,1),128,128);
+                pItem->maPreview2 = lcl_fetchThumbnail(mpDocTemplates->GetPath(i,1),128,128);
 
             mItemList.push_back(pItem);
         }
@@ -221,15 +217,14 @@ void TemplateFolderView::OnItemDblClicked (ThumbnailViewItem *pRegionItem)
 {
     // Fill templates
     sal_uInt16 nRegionId = pRegionItem->mnId-1;
-    const SfxDocumentTemplates* pTemplates = mpMgr->GetTemplates();
 
     mpItemView->setRegionId(nRegionId);
 
-    sal_uInt16 nEntries = pTemplates->GetCount(nRegionId);
+    sal_uInt16 nEntries = mpDocTemplates->GetCount(nRegionId);
     for (sal_uInt16 i = 0; i < nEntries; ++i)
     {
-        mpItemView->InsertItem(i+1,lcl_fetchThumbnail(pTemplates->GetPath(nRegionId,i),128,128),
-                               pTemplates->GetName(nRegionId,i));
+        mpItemView->InsertItem(i+1,lcl_fetchThumbnail(mpDocTemplates->GetPath(nRegionId,i),128,128),
+                               mpDocTemplates->GetName(nRegionId,i));
     }
 
     if (mbSelectionMode)
commit 5d89e41a758a8f86c536c42d99eef28608bd5708
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 12:30:47 2012 -0430

    Close the folder overlay when clicking the close icon.
    
    Change-Id: I7ac53d7e9455a3d03008534f18ee7866777ecab7

diff --git a/sfx2/inc/sfx2/templateview.hxx b/sfx2/inc/sfx2/templateview.hxx
index e9ea241..300a95f 100644
--- a/sfx2/inc/sfx2/templateview.hxx
+++ b/sfx2/inc/sfx2/templateview.hxx
@@ -29,6 +29,10 @@ public:
 
     virtual void Paint (const Rectangle &rRect);
 
+protected:
+
+    virtual void MouseButtonDown (const MouseEvent &rMEvt);
+
 private:
 
     Image maCloseImg;
diff --git a/sfx2/source/control/templateview.cxx b/sfx2/source/control/templateview.cxx
index 63fec5d..8ef3be4 100644
--- a/sfx2/source/control/templateview.cxx
+++ b/sfx2/source/control/templateview.cxx
@@ -90,6 +90,29 @@ void TemplateView::Paint (const Rectangle &rRect)
     mpProcessor->process(aSeq);
 }
 
+void TemplateView::MouseButtonDown (const MouseEvent &rMEvt)
+{
+    if (rMEvt.IsLeft())
+    {
+        Size aWinSize = GetOutputSizePixel();
+        Size aImageSize = maCloseImg.GetSizePixel();
+
+        Point aPos;
+        aPos.Y() = (mnHeaderHeight - aImageSize.Height())/2;
+        aPos.X() = aWinSize.Width() - aImageSize.Width() - aPos.Y();
+
+        Rectangle aImgRect(aPos,aImageSize);
+
+        if (aImgRect.IsInside(rMEvt.GetPosPixel()))
+        {
+            Show(false);
+            Clear();
+        }
+    }
+
+    ThumbnailView::MouseButtonDown(rMEvt);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
 
 
commit c6aa6cf65bd6c8daa84c2b89cc19b489229543ec
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 12:16:08 2012 -0430

    Remove unused function Rect2Polygon.
    
    Change-Id: Icb2fbf593006ba765a57c3cad145531c95f9e4ef

diff --git a/sfx2/inc/sfx2/thumbnailviewitem.hxx b/sfx2/inc/sfx2/thumbnailviewitem.hxx
index 81d4bdd..16652ed 100644
--- a/sfx2/inc/sfx2/thumbnailviewitem.hxx
+++ b/sfx2/inc/sfx2/thumbnailviewitem.hxx
@@ -124,9 +124,6 @@ private:
     CheckBox *mpSelectBox;
 };
 
-// Helper function to convert a rectangle to a polygon.
-basegfx::B2DPolygon Rect2Polygon (const Rectangle &aRect);
-
 #endif // THUMBNAILVIEWITEM_HXX
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/control/thumbnailviewitem.cxx b/sfx2/source/control/thumbnailviewitem.cxx
index 1d09aa5..fde678c 100644
--- a/sfx2/source/control/thumbnailviewitem.cxx
+++ b/sfx2/source/control/thumbnailviewitem.cxx
@@ -242,17 +242,6 @@ IMPL_LINK (ThumbnailViewItem, OnClick, CheckBox*, )
     return 0;
 }
 
-basegfx::B2DPolygon Rect2Polygon (const Rectangle &aRect)
-{
-    basegfx::B2DPolygon aPolygon;
-    aPolygon.append(basegfx::B2DPoint(aRect.Left(),aRect.Top()));
-    aPolygon.append(basegfx::B2DPoint(aRect.Left(),aRect.Bottom()));
-    aPolygon.append(basegfx::B2DPoint(aRect.Right(),aRect.Bottom()));
-    aPolygon.append(basegfx::B2DPoint(aRect.Right(),aRect.Top()));
-
-    return aPolygon;
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
 
 
commit 7048a2547b942d2217267bb17d934efa9efa2248
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 12:14:33 2012 -0430

    Draw thumbnail item background as a rectangle with rounded corners.
    
    Change-Id: Ieab135c6357820afe863a28e70dc72fa2dad6327

diff --git a/sfx2/source/control/thumbnailviewitem.cxx b/sfx2/source/control/thumbnailviewitem.cxx
index b9f4ad0..1d09aa5 100644
--- a/sfx2/source/control/thumbnailviewitem.cxx
+++ b/sfx2/source/control/thumbnailviewitem.cxx
@@ -180,7 +180,7 @@ void ThumbnailViewItem::Paint (drawinglayer::processor2d::BaseProcessor2D *pProc
         aFillColor = pAttrs->aHighlightColor;
 
     aSeq[nCount++] = Primitive2DReference( new PolyPolygonColorPrimitive2D(
-                                               B2DPolyPolygon(Rect2Polygon(maDrawArea)),
+                                               B2DPolyPolygon(Polygon(maDrawArea,5,5).getB2DPolygon()),
                                                aFillColor));
 
     // Draw thumbnail
commit bb2d381661fe591f342703dc654c2fc6121a2d46
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 12:11:43 2012 -0430

    Paint thumbnail view area with fill color.
    
    Change-Id: I1a910b52e6b187a61dd171d33d74203947ddaa0c

diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx
index ca4c99c..73c0abf 100644
--- a/sfx2/source/control/thumbnailview.cxx
+++ b/sfx2/source/control/thumbnailview.cxx
@@ -15,6 +15,7 @@
 #include <basegfx/color/bcolortools.hxx>
 #include <basegfx/matrix/b2dhommatrixtools.hxx>
 #include <basegfx/range/b2drectangle.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
 #include <basegfx/vector/b2dsize.hxx>
 #include <basegfx/vector/b2dvector.hxx>
 #include <drawinglayer/attribute/fillbitmapattribute.hxx>
@@ -903,7 +904,7 @@ void ThumbnailView::Command( const CommandEvent& rCEvt )
     Control::Command( rCEvt );
 }
 
-void ThumbnailView::Paint( const Rectangle& )
+void ThumbnailView::Paint( const Rectangle &aRect)
 {
     Size        aWinSize = GetOutputSizePixel();
     size_t      nItemCount = mItemList.size();
@@ -926,6 +927,14 @@ void ThumbnailView::Paint( const Rectangle& )
     if ( y+(mnVisLines*(mnItemHeight+mnSpacing)) < aWinSize.Height() )
         nLastItem += mnCols;
 
+    // Draw background
+    Primitive2DSequence aSeq(1);
+    aSeq[0] = Primitive2DReference( new PolyPolygonColorPrimitive2D(
+                                        B2DPolyPolygon(Polygon(aRect,5,5).getB2DPolygon()),
+                                        maColor.getBColor()));
+
+    mpProcessor->process(aSeq);
+
     for ( size_t i = 0; i < nItemCount; i++ )
     {
         ThumbnailViewItem *const pItem = mItemList[i];
commit 20374eac8afbc583471fc8ad48c973c0f8c966db
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 11:46:46 2012 -0430

    Load and draw close image for folder overlay.
    
    Change-Id: I5d603187f09a727616133c3c626507d080e889f6

diff --git a/sfx2/AllLangResTarget_sfx2.mk b/sfx2/AllLangResTarget_sfx2.mk
index 4019fb2..418b710 100644
--- a/sfx2/AllLangResTarget_sfx2.mk
+++ b/sfx2/AllLangResTarget_sfx2.mk
@@ -57,6 +57,7 @@ $(eval $(call gb_SrsTarget_add_files,sfx/res,\
     sfx2/source/appl/sfx.src \
     sfx2/source/bastyp/bastyp.src \
     sfx2/source/bastyp/fltfnc.src \
+    sfx2/source/control/templateview.src \
     sfx2/source/dialog/alienwarn.src \
     sfx2/source/dialog/dialog.src \
     sfx2/source/dialog/dinfdlg.src \
diff --git a/sfx2/inc/sfx2/templateview.hxx b/sfx2/inc/sfx2/templateview.hxx
index a6fbeaa..e9ea241 100644
--- a/sfx2/inc/sfx2/templateview.hxx
+++ b/sfx2/inc/sfx2/templateview.hxx
@@ -11,6 +11,7 @@
 #define TEMPLATEVIEW_HXX
 
 #include <sfx2/thumbnailview.hxx>
+#include <vcl/image.hxx>
 
 class SfxDocumentTemplates;
 
@@ -30,6 +31,7 @@ public:
 
 private:
 
+    Image maCloseImg;
     sal_uInt16 mnRegionId;
     rtl::OUString maFolderName;
     SfxDocumentTemplates *mpDocTemplates;
diff --git a/sfx2/source/control/templateview.cxx b/sfx2/source/control/templateview.cxx
index 48d778d..63fec5d 100644
--- a/sfx2/source/control/templateview.cxx
+++ b/sfx2/source/control/templateview.cxx
@@ -10,17 +10,27 @@
 #include <sfx2/templateview.hxx>
 
 #include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/vector/b2dvector.hxx>
+#include <drawinglayer/attribute/fillbitmapattribute.hxx>
+#include <drawinglayer/primitive2d/fillbitmapprimitive2d.hxx>
 #include <drawinglayer/primitive2d/textlayoutdevice.hxx>
 #include <drawinglayer/primitive2d/textprimitive2d.hxx>
 #include <drawinglayer/processor2d/baseprocessor2d.hxx>
 #include <sfx2/doctempl.hxx>
+#include <sfx2/sfxresid.hxx>
 #include <sfx2/thumbnailviewitem.hxx>
 
+#include "templateview.hrc"
+
+using namespace basegfx;
 using namespace basegfx::tools;
+using namespace drawinglayer::attribute;
 using namespace drawinglayer::primitive2d;
 
 TemplateView::TemplateView (Window *pParent, SfxDocumentTemplates *pTemplates)
     : ThumbnailView(pParent),
+      maCloseImg(SfxResId(IMG_TEMPLATE_VIEW_CLOSE)),
       mnRegionId(0),
       mpDocTemplates(pTemplates)
 {
@@ -41,7 +51,7 @@ void TemplateView::Paint (const Rectangle &rRect)
 {
     ThumbnailView::Paint(rRect);
 
-    Primitive2DSequence aSeq(1);
+    Primitive2DSequence aSeq(2);
     TextLayouterDevice aTextDev;
 
     // Draw centered region name
@@ -63,6 +73,20 @@ void TemplateView::Paint (const Rectangle &rRect)
                                                  com::sun::star::lang::Locale(),
                                                  Color(COL_BLACK).getBColor() ) );
 
+    // Draw close icon
+    Size aImageSize = maCloseImg.GetSizePixel();
+
+    aPos.Y() = (mnHeaderHeight - aImageSize.Height())/2;
+    aPos.X() = aWinSize.Width() - aImageSize.Width() - aPos.Y();
+
+    aSeq[1] = Primitive2DReference( new FillBitmapPrimitive2D(
+                                        createTranslateB2DHomMatrix(aPos.X(),aPos.Y()),
+                                        FillBitmapAttribute(maCloseImg.GetBitmapEx(),
+                                                            B2DPoint(0,0),
+                                                            B2DVector(aImageSize.Width(),aImageSize.Height()),
+                                                            false)
+                                        ));
+
     mpProcessor->process(aSeq);
 }
 
diff --git a/sfx2/source/control/templateview.hrc b/sfx2/source/control/templateview.hrc
new file mode 100644
index 0000000..cc26a18
--- /dev/null
+++ b/sfx2/source/control/templateview.hrc
@@ -0,0 +1,9 @@
+/*
+ * Copyright 2012 LibreOffice contributors.
+ *
+ * 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/.
+ */
+
+#define IMG_TEMPLATE_VIEW_CLOSE 1
diff --git a/sfx2/source/control/templateview.src b/sfx2/source/control/templateview.src
new file mode 100644
index 0000000..8252ee9
--- /dev/null
+++ b/sfx2/source/control/templateview.src
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2012 LibreOffice contributors.
+ *
+ * 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/.
+ */
+
+#include "templateview.hrc"
+
+Image IMG_TEMPLATE_VIEW_CLOSE
+{
+    ImageBitmap = Bitmap
+    {
+        File = "closedoc.png";
+    };
+};
commit d0854f964170cc10346c829f46903061a837dfa0
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 09:59:29 2012 -0430

    Draw region name when displaying a folder overlay.
    
    Change-Id: Id24c0ad799ba8af397e78830c636e4d647c14e7f

diff --git a/sfx2/inc/sfx2/templateview.hxx b/sfx2/inc/sfx2/templateview.hxx
index baf7e8b..a6fbeaa 100644
--- a/sfx2/inc/sfx2/templateview.hxx
+++ b/sfx2/inc/sfx2/templateview.hxx
@@ -26,6 +26,8 @@ public:
 
     sal_uInt16 getRegionId () const { return mnRegionId; }
 
+    virtual void Paint (const Rectangle &rRect);
+
 private:
 
     sal_uInt16 mnRegionId;
diff --git a/sfx2/source/control/templateview.cxx b/sfx2/source/control/templateview.cxx
index e4541a4..48d778d 100644
--- a/sfx2/source/control/templateview.cxx
+++ b/sfx2/source/control/templateview.cxx
@@ -9,13 +9,22 @@
 
 #include <sfx2/templateview.hxx>
 
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <drawinglayer/primitive2d/textlayoutdevice.hxx>
+#include <drawinglayer/primitive2d/textprimitive2d.hxx>
+#include <drawinglayer/processor2d/baseprocessor2d.hxx>
 #include <sfx2/doctempl.hxx>
+#include <sfx2/thumbnailviewitem.hxx>
+
+using namespace basegfx::tools;
+using namespace drawinglayer::primitive2d;
 
 TemplateView::TemplateView (Window *pParent, SfxDocumentTemplates *pTemplates)
     : ThumbnailView(pParent),
       mnRegionId(0),
       mpDocTemplates(pTemplates)
 {
+    mnHeaderHeight = 30;
 }
 
 TemplateView::~TemplateView ()
@@ -28,6 +37,35 @@ void TemplateView::setRegionId (const sal_uInt16 nRegionId)
     maFolderName = mpDocTemplates->GetRegionName(nRegionId);
 }
 
+void TemplateView::Paint (const Rectangle &rRect)
+{
+    ThumbnailView::Paint(rRect);
+
+    Primitive2DSequence aSeq(1);
+    TextLayouterDevice aTextDev;
+
+    // Draw centered region name
+    Point aPos;
+    Size aWinSize = GetOutputSizePixel();
+
+    aPos.X() = (aWinSize.getWidth() - aTextDev.getTextWidth(maFolderName,0,maFolderName.getLength()))/2;
+    aPos.Y() = aTextDev.getTextHeight() + (mnHeaderHeight - aTextDev.getTextHeight())/2;
+
+    basegfx::B2DHomMatrix aTextMatrix( createScaleTranslateB2DHomMatrix(
+                mpItemAttrs->aFontSize.getX(), mpItemAttrs->aFontSize.getY(),
+                double( aPos.X() ), double( aPos.Y() ) ) );
+
+    aSeq[0] = Primitive2DReference(
+                new TextSimplePortionPrimitive2D(aTextMatrix,
+                                                 maFolderName,0,maFolderName.getLength(),
+                                                 std::vector< double >( ),
+                                                 mpItemAttrs->aFontAttr,
+                                                 com::sun::star::lang::Locale(),
+                                                 Color(COL_BLACK).getBColor() ) );
+
+    mpProcessor->process(aSeq);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
 
 
commit cd5d366c78748cbe6551ccefa2fbfe619687ad5f
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 09:41:31 2012 -0430

    Store region id in TemplateView and add set/get methods.
    
    Change-Id: I1300cbc0278368021276c220c2ec6e9ef8f16382

diff --git a/sfx2/inc/sfx2/templateview.hxx b/sfx2/inc/sfx2/templateview.hxx
index 3fa1524..baf7e8b 100644
--- a/sfx2/inc/sfx2/templateview.hxx
+++ b/sfx2/inc/sfx2/templateview.hxx
@@ -22,9 +22,15 @@ public:
 
     virtual ~TemplateView ();
 
+    void setRegionId (const sal_uInt16 nRegionId);
+
+    sal_uInt16 getRegionId () const { return mnRegionId; }
+
 private:
 
-     SfxDocumentTemplates *mpDocTemplates;
+    sal_uInt16 mnRegionId;
+    rtl::OUString maFolderName;
+    SfxDocumentTemplates *mpDocTemplates;
 };
 
 #endif // TEMPLATEVIEW_HXX
diff --git a/sfx2/source/control/templatefolderview.cxx b/sfx2/source/control/templatefolderview.cxx
index 92cff7c..e825a3e 100644
--- a/sfx2/source/control/templatefolderview.cxx
+++ b/sfx2/source/control/templatefolderview.cxx
@@ -223,6 +223,8 @@ void TemplateFolderView::OnItemDblClicked (ThumbnailViewItem *pRegionItem)
     sal_uInt16 nRegionId = pRegionItem->mnId-1;
     const SfxDocumentTemplates* pTemplates = mpMgr->GetTemplates();
 
+    mpItemView->setRegionId(nRegionId);
+
     sal_uInt16 nEntries = pTemplates->GetCount(nRegionId);
     for (sal_uInt16 i = 0; i < nEntries; ++i)
     {
diff --git a/sfx2/source/control/templateview.cxx b/sfx2/source/control/templateview.cxx
index 4e3282b..e4541a4 100644
--- a/sfx2/source/control/templateview.cxx
+++ b/sfx2/source/control/templateview.cxx
@@ -9,8 +9,11 @@
 
 #include <sfx2/templateview.hxx>
 
+#include <sfx2/doctempl.hxx>
+
 TemplateView::TemplateView (Window *pParent, SfxDocumentTemplates *pTemplates)
     : ThumbnailView(pParent),
+      mnRegionId(0),
       mpDocTemplates(pTemplates)
 {
 }
@@ -19,6 +22,12 @@ TemplateView::~TemplateView ()
 {
 }
 
+void TemplateView::setRegionId (const sal_uInt16 nRegionId)
+{
+    mnRegionId = nRegionId;
+    maFolderName = mpDocTemplates->GetRegionName(nRegionId);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
 
 
commit 05bee67cccee622deaec1bb6b090249b7933c56c
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 09:03:45 2012 -0430

    Add a variable to reserve a header space if wanted.
    
    Change-Id: I1dce6c7120d50dc87b994980e8014b941fa100d8

diff --git a/sfx2/inc/sfx2/thumbnailview.hxx b/sfx2/inc/sfx2/thumbnailview.hxx
index 502ffd8..ebd4b51 100644
--- a/sfx2/inc/sfx2/thumbnailview.hxx
+++ b/sfx2/inc/sfx2/thumbnailview.hxx
@@ -308,6 +308,7 @@ protected:
     ScrollBar* mpScrBar;
     Rectangle maNoneItemRect;
     Rectangle maItemListRect;
+    long mnHeaderHeight;
     long mnItemWidth;
     long mnItemHeight;
     long mnVisLines;
diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx
index 23f40fc..ca4c99c 100644
--- a/sfx2/source/control/thumbnailview.cxx
+++ b/sfx2/source/control/thumbnailview.cxx
@@ -85,6 +85,7 @@ ThumbnailView::~ThumbnailView()
 void ThumbnailView::ImplInit()
 {
     mpScrBar            = NULL;
+    mnHeaderHeight      = 0;
     mnItemWidth         = 0;
     mnItemHeight        = 0;
     mnVisLines          = 0;
@@ -356,7 +357,7 @@ void ThumbnailView::CalculateItemPositions ()
 
         // calculate offsets
         long nStartX = 0;
-        long nStartY = 0;
+        long nStartY = mnHeaderHeight;
 
         // calculate and draw items
         long x = nStartX;
@@ -367,7 +368,7 @@ void ThumbnailView::CalculateItemPositions ()
         sal_uLong nLastItem = nFirstItem + (mnVisLines * mnCols);
 
         maItemListRect.Left() = x;
-        maItemListRect.Top() = y;
+        maItemListRect.Top() = y + mnHeaderHeight;
         maItemListRect.Right() = x + mnCols*(mnItemWidth+mnSpacing) - mnSpacing - 1;
         maItemListRect.Bottom() = y + mnVisLines*(mnItemHeight+mnSpacing) - mnSpacing - 1;
 
@@ -909,7 +910,7 @@ void ThumbnailView::Paint( const Rectangle& )
 
     // calculate offsets
     long nStartX = 0;
-    long nStartY = 0;
+    long nStartY = mnHeaderHeight;
 
     // calculate and draw items
     long x = nStartX;
commit ec13ac5594627d7e36ba984b6b6c267bbaa35aac
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 08:45:29 2012 -0430

    Create a thumbnail view for template documents.
    
    Change-Id: I768a3c21fec15356678ece790e3fd05299c55f48

diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index 9fbcee3..872a107 100644
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -148,6 +148,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
     sfx2/source/control/shell \
     sfx2/source/control/sorgitm \
     sfx2/source/control/statcach \
+    sfx2/source/control/templateview \
     sfx2/source/control/templatefolderview \
     sfx2/source/control/thumbnailviewitem \
     sfx2/source/control/thumbnailviewacc \
diff --git a/sfx2/Package_inc.mk b/sfx2/Package_inc.mk
index aef6ea4..c66ce44 100644
--- a/sfx2/Package_inc.mk
+++ b/sfx2/Package_inc.mk
@@ -127,6 +127,7 @@ $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/taskpane.hxx,sfx2/taskpane.h
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/tbxctrl.hxx,sfx2/tbxctrl.hxx))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templdlg.hxx,sfx2/templdlg.hxx))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatelocnames.hrc,sfx2/templatelocnames.hrc))
+$(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templateview.hxx,sfx2/templateview.hxx))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/templatefolderview.hxx,sfx2/templatefolderview.hxx))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/thumbnailview.hxx,sfx2/thumbnailview.hxx))
 $(eval $(call gb_Package_add_file,sfx2_inc,inc/sfx2/thumbnailviewitem.hxx,sfx2/thumbnailviewitem.hxx))
diff --git a/sfx2/inc/sfx2/templatefolderview.hxx b/sfx2/inc/sfx2/templatefolderview.hxx
index 1ac4dcb..8491ad6 100644
--- a/sfx2/inc/sfx2/templatefolderview.hxx
+++ b/sfx2/inc/sfx2/templatefolderview.hxx
@@ -13,6 +13,7 @@
 #include <sfx2/thumbnailview.hxx>
 
 class SfxOrganizeMgr;
+class TemplateView;
 
 class TemplateFolderView : public ThumbnailView
 {
@@ -39,7 +40,7 @@ private:
 private:
 
     SfxOrganizeMgr *mpMgr;
-    ThumbnailView *mpItemView;
+    TemplateView *mpItemView;
 };
 
 #endif // TEMPLATEFOLDERVIEW_HXX
diff --git a/sfx2/inc/sfx2/templateview.hxx b/sfx2/inc/sfx2/templateview.hxx
new file mode 100644
index 0000000..3fa1524
--- /dev/null
+++ b/sfx2/inc/sfx2/templateview.hxx
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Copyright 2012 LibreOffice contributors.
+ *
+ * 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/.
+ */
+
+#ifndef TEMPLATEVIEW_HXX
+#define TEMPLATEVIEW_HXX
+
+#include <sfx2/thumbnailview.hxx>
+
+class SfxDocumentTemplates;
+
+class TemplateView : public ThumbnailView
+{
+public:
+
+    TemplateView (Window *pParent, SfxDocumentTemplates *pTemplates);
+
+    virtual ~TemplateView ();
+
+private:
+
+     SfxDocumentTemplates *mpDocTemplates;
+};
+
+#endif // TEMPLATEVIEW_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+
diff --git a/sfx2/source/control/templatefolderview.cxx b/sfx2/source/control/templatefolderview.cxx
index 8a254e2..92cff7c 100644
--- a/sfx2/source/control/templatefolderview.cxx
+++ b/sfx2/source/control/templatefolderview.cxx
@@ -11,6 +11,7 @@
 
 #include <comphelper/processfactory.hxx>
 #include <sfx2/doctempl.hxx>
+#include <sfx2/templateview.hxx>
 #include <sfx2/thumbnailviewitem.hxx>
 #include <unotools/ucbstreamhelper.hxx>
 #include <vcl/pngread.hxx>
@@ -140,7 +141,7 @@ BitmapEx lcl_fetchThumbnail (const rtl::OUString &msURL, int width, int height)
 TemplateFolderView::TemplateFolderView ( Window* pParent, const ResId& rResId, bool bDisableTransientChildren)
     : ThumbnailView(pParent,rResId,bDisableTransientChildren),
       mpMgr(new SfxOrganizeMgr(NULL,NULL)),
-      mpItemView(new ThumbnailView(this,WB_VSCROLL))
+      mpItemView(new TemplateView(this,(SfxDocumentTemplates*)mpMgr->GetTemplates()))
 {
     mpItemView->SetColor(Color(COL_WHITE));
     mpItemView->SetPosPixel(Point(0,0));
diff --git a/sfx2/source/control/templateview.cxx b/sfx2/source/control/templateview.cxx
new file mode 100644
index 0000000..4e3282b
--- /dev/null
+++ b/sfx2/source/control/templateview.cxx
@@ -0,0 +1,24 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Copyright 2012 LibreOffice contributors.
+ *
+ * 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/.
+ */
+
+#include <sfx2/templateview.hxx>
+
+TemplateView::TemplateView (Window *pParent, SfxDocumentTemplates *pTemplates)
+    : ThumbnailView(pParent),
+      mpDocTemplates(pTemplates)
+{
+}
+
+TemplateView::~TemplateView ()
+{
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+
+
commit 4c270c4da4135012aa2712cc8b0a17595a1c97be
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Tue Jun 19 00:00:54 2012 -0430

    Set the selection mode to the overlay if its visible.
    
    Change-Id: I2d0badc0cb0f4ea3e05f22e4b1ed4759ab7a4d85

diff --git a/sfx2/inc/sfx2/templatefolderview.hxx b/sfx2/inc/sfx2/templatefolderview.hxx
index b5b967f..1ac4dcb 100644
--- a/sfx2/inc/sfx2/templatefolderview.hxx
+++ b/sfx2/inc/sfx2/templatefolderview.hxx
@@ -32,6 +32,8 @@ public:
 
 private:
 
+    virtual void OnSelectionMode (bool bMode);
+
     virtual void OnItemDblClicked (ThumbnailViewItem *pRegionItem);
 
 private:
diff --git a/sfx2/source/control/templatefolderview.cxx b/sfx2/source/control/templatefolderview.cxx
index c2165f5..8a254e2 100644
--- a/sfx2/source/control/templatefolderview.cxx
+++ b/sfx2/source/control/templatefolderview.cxx
@@ -203,6 +203,19 @@ void TemplateFolderView::showOverlay (bool bVisible)
         mpItemView->Clear();
 }
 
+void TemplateFolderView::OnSelectionMode (bool bMode)
+{
+    if (mpItemView->IsVisible())
+    {
+        mpItemView->setSelectionMode(bMode);
+
+        for (size_t i = 0, n = mItemList.size(); i < n; ++i)
+            mItemList[i]->setSelectionMode(bMode);
+    }
+    else
+        ThumbnailView::OnSelectionMode(bMode);
+}
+
 void TemplateFolderView::OnItemDblClicked (ThumbnailViewItem *pRegionItem)
 {
     // Fill templates
@@ -216,6 +229,9 @@ void TemplateFolderView::OnItemDblClicked (ThumbnailViewItem *pRegionItem)
                                pTemplates->GetName(nRegionId,i));
     }
 
+    if (mbSelectionMode)
+        mpItemView->setSelectionMode(true);
+
     mpItemView->Show();
 }
 
commit fde2c0e1a5bb4d009513424a82662e3f64e0db56
Author: Rafael Dominguez <venccsralph at gmail.com>
Date:   Mon Jun 18 23:55:44 2012 -0430

    Add a handler when changing selection mode and default action.
    
    Change-Id: I276665497d3b026d438a379ce0ad2683431055ae

diff --git a/sfx2/inc/sfx2/thumbnailview.hxx b/sfx2/inc/sfx2/thumbnailview.hxx
index a1db106..502ffd8 100644
--- a/sfx2/inc/sfx2/thumbnailview.hxx
+++ b/sfx2/inc/sfx2/thumbnailview.hxx
@@ -266,6 +266,8 @@ protected:
 
     virtual void DrawItem (ThumbnailViewItem *pItem);
 
+    virtual void OnSelectionMode (bool bMode);
+
     virtual void OnItemDblClicked (ThumbnailViewItem *pItem);
 
 protected:
diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx
index e9d3e27..23f40fc 100644
--- a/sfx2/source/control/thumbnailview.cxx
+++ b/sfx2/source/control/thumbnailview.cxx
@@ -203,6 +203,17 @@ void ThumbnailView::DrawItem (ThumbnailViewItem *pItem)
         pItem->Paint(mpProcessor,mpItemAttrs);
 }
 
+void ThumbnailView::OnSelectionMode (bool bMode)
+{
+    for (size_t i = 0, n = mItemList.size(); i < n; ++i)
+    {
+        mItemList[i]->setSelectionMode(bMode);
+
+        if (mItemList[i]->isVisible())
+            DrawItem(mItemList[i]);
+    }
+}
+
 void ThumbnailView::OnItemDblClicked (ThumbnailViewItem*)
 {
 }
@@ -1430,13 +1441,7 @@ void ThumbnailView::setSelectionMode (bool mode)
 {
     mbSelectionMode = mode;
 
-    for (size_t i = 0, n = mItemList.size(); i < n; ++i)
-    {
-        mItemList[i]->setSelectionMode(mode);
-
-        if (mItemList[i]->isVisible())
-            DrawItem(mItemList[i]);
-    }
+    OnSelectionMode(mode);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list