LCOV - code coverage report
Current view: top level - include/sfx2 - thumbnailview.hxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 4 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       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             : #ifndef INCLUDED_SFX2_THUMBNAILVIEW_HXX
      11             : #define INCLUDED_SFX2_THUMBNAILVIEW_HXX
      12             : 
      13             : #include <sfx2/dllapi.h>
      14             : 
      15             : #include <vector>
      16             : #include <boost/function.hpp>
      17             : 
      18             : #include <comphelper/processfactory.hxx>
      19             : #include <unotools/ucbstreamhelper.hxx>
      20             : #include <sfx2/thumbnailviewitem.hxx>
      21             : #include <vcl/ctrl.hxx>
      22             : #include <vcl/timer.hxx>
      23             : #include <vcl/pngread.hxx>
      24             : 
      25             : #include <com/sun/star/embed/ElementModes.hpp>
      26             : #include <com/sun/star/embed/XStorage.hpp>
      27             : #include <com/sun/star/embed/StorageFactory.hpp>
      28             : 
      29             : class BitmapEx;
      30             : class MouseEvent;
      31             : class TrackingEvent;
      32             : class HelpEvent;
      33             : class KeyEvent;
      34             : class DataChangedEvent;
      35             : class ScrollBar;
      36             : typedef ::std::vector< ThumbnailViewItem* > ThumbnailValueItemList;
      37             : 
      38             : struct ThumbnailItemAttributes;
      39             : class ThumbnailViewAcc;
      40             : class ThumbnailViewItemAcc;
      41             : 
      42             : namespace drawinglayer {
      43             :     namespace processor2d {
      44             :         class BaseProcessor2D;
      45             :     }
      46             : }
      47             : 
      48             : /*************************************************************************
      49             : 
      50             :     Description
      51             :     ============
      52             : 
      53             :     class ThumbnailView
      54             : 
      55             :     This class allows the selection of an item. In the process items are
      56             :     drawn side by side. The selection of items can be more clear than in a
      57             :     ListBox shape for example in case of colors or samples.
      58             :     The amount of columns drawn by the control and whether the items
      59             :     should be encircled can be specified. Optional a NoSelection or name
      60             :     field could be shown. By default image and color items are supported.
      61             :     Items could be drawn by oneself if InsertItem() is only called with
      62             :     an ID. To achieve this the UserDraw handler needs to be overridden. The
      63             :     description text could be specified afterwards in case of UserDraw
      64             :     and any other items.
      65             : 
      66             :     Cross references
      67             : 
      68             :     class ListBox
      69             : 
      70             :     --------------------------------------------------------------------------
      71             : 
      72             :     WinBits
      73             : 
      74             :     WB_VSCROLL          A scroolbar will be always shown. The visible number of
      75             :                         lines have to be specified with SetLineCount() if this
      76             :                         flag is set.
      77             :     WB_TABSTOP          It is possible to jump into the ValueSet with the tab key.
      78             :     WB_NOTABSTOP        It is not possible to jump into the ValueSet with the
      79             :                         tab key.
      80             :     --------------------------------------------------------------------------
      81             : 
      82             :     The number of columns must be either set with SetColCount() or
      83             :     SetItemWidth(). If the number of columns is specified by SetColCount()
      84             :     the width of the items will be calculated by the visible range.
      85             :     If the items should have a static width, it has to be specified
      86             :     with SetItemWidth(). In this case the number of columns will be calculated
      87             :     by the visible range.
      88             : 
      89             :     The number of rows is given by the number of items / number of columns. The
      90             :     number of visible rows must either specified by SetLineCount() or
      91             :     SetItemWidth(). If the number of visible rows is specified by SetLineCount(),
      92             :     the height of the items will be calculated from the visible height. If the
      93             :     items should have a fixed height it has to be specified with SetItemHeight().
      94             :     In this case the number of visible rows is then calculated from the visible
      95             :     height. If the number of visible rows is neither specified by SetLineCount()
      96             :     nor by SetItemHeight() all rows will be shown. The height of the items will
      97             :     be calculated by the visible height. If the number of visible rows is
      98             :     specified by SetLineCount() or SetItemHeight() ValueSet does scroll
      99             :     automatically when more lines are available, as are visible. If scrolling
     100             :     should be also possible with a ScrollBar  WB_VSCROLL needs to be set.
     101             : 
     102             :     The distance between the items can be increased by SetExtraSpacing(). The
     103             :     distance, which will be shown between two items (both in x and in y), is
     104             :     measured in pixels.
     105             : 
     106             :     The exact window size for a specific item size can be calculated by
     107             :     CalcWindowSizePixel(). To do this all relevant data (number of columns/...)
     108             :     have to be specified and if no number of rows was set, all items need to
     109             :     be inserted. If the window was created with WB_BORDER/Border=sal_True the
     110             :     size has to be specified with SetOutputSizePixel(). In other cases different
     111             :     size-methods can be used. With CalcItemSize() the inner and outer size of
     112             :     an item could be calculated (for this the free space defined by
     113             :     SetExtraSpacing() will not be included).
     114             : 
     115             :     The background color could be specified by SetColor(), with which the image
     116             :     or UserDraw items will be underlayed. If no color is specified the color
     117             :     of other windows (WindowColor) will be used for the background.
     118             : 
     119             :     --------------------------------------------------------------------------
     120             : 
     121             :     At first all items should be inserted and only then Show() should be called
     122             :     since the output area will be precomputed. If this is not done the first
     123             :     Paint will appear a little bit slower. Therefore the Control, if it is loaded
     124             :     from the resource and only supplied with items during runtime, should be
     125             :     loaded with Hide = sal_True and then displayed with Show().
     126             : 
     127             :     In case of a visible Control the creation of the new output area could be
     128             :     activated before Paint by calling Format().
     129             : 
     130             :     --------------------------------------------------------------------------
     131             : 
     132             :     If Drag and Drop will be called from the ValueSet the Command-Handler has to
     133             :     be overridden. From this StartDrag needs to be called. If this method returns
     134             :     sal_True the drag-process could be initiated by  ExecuteDrag(), otherwise no
     135             :     processing will take place. This method makes sure that ValueSet stops its
     136             :     processing and as appropriate selects the entry. Therefore the calling of
     137             :     Select-Handler within this function must be expected.
     138             : 
     139             :     For dropping QueryDrop() and Drop() need to be overridden and ShowDropPos()
     140             :     and HideDropPos() should be called within these methods.
     141             :     To show the insertion point ShowDropPos() has to be called within the
     142             :     QueryDrop-Handler. ShowDropPos() also scrolls the ValueSet if the passed
     143             :     position is located at the window border. Furthermore ShowDropPos() returns
     144             :     the position, at which the item should be inserted respectively which
     145             :     insertion point was shown. If no insertion point was determined
     146             :     VALUESET_ITEM_NOTFOUND will be returned. If the window was left during dragging
     147             :     or the drag process is terminated HideDropPos() should be called in any case.
     148             : 
     149             :     --------------------------------------------------------------------------
     150             : 
     151             :     This class is currently still in the SV-Tools. That's why the ValueSet needs
     152             :     to be loaded as a Control out of the resource and the desired WinBits have
     153             :     to be set (before Show) with SetStyle().
     154             : 
     155             : *************************************************************************/
     156             : 
     157             : /* ThumbnailView types */
     158             : 
     159             : #define THUMBNAILVIEW_APPEND         ((sal_uInt16)-1)
     160             : #define THUMBNAILVIEW_ITEM_NOTFOUND  ((sal_uInt16)-1)
     161             : 
     162             : // Display all the available items in the thumbnail.
     163             : class ViewFilterAll
     164             : {
     165             : public:
     166             : 
     167           0 :     bool operator () (const ThumbnailViewItem*) const
     168             :     {
     169           0 :         return true;
     170             :     }
     171             : };
     172             : 
     173             : /**
     174             :  *
     175             :  *  Class to display thumbnails with their names below their respective icons
     176             :  *
     177             :  **/
     178             : 
     179             : class SFX2_DLLPUBLIC ThumbnailView : public Control
     180             : {
     181             : public:
     182             : 
     183             :     ThumbnailView(vcl::Window* pParent, WinBits nWinStyle = WB_TABSTOP, bool bDisableTransientChildren = false);
     184             : 
     185             :     virtual ~ThumbnailView();
     186             :     virtual void dispose() SAL_OVERRIDE;
     187             : 
     188             :     virtual void MouseMove(const MouseEvent& rMEvt) SAL_OVERRIDE;
     189             : 
     190             :     void AppendItem(ThumbnailViewItem *pItem);
     191             : 
     192             :     void RemoveItem(sal_uInt16 nItemId);
     193             : 
     194             :     virtual void Clear();
     195             : 
     196             :     /// Updates information in the view; used only in RecentDocsView ATM.
     197           0 :     virtual void Reload() {}
     198             : 
     199             :     // Change current thumbnail item list with new one (invalidates all pointers to a thumbnail item)
     200             :     void updateItems(const std::vector<ThumbnailViewItem *> &items);
     201             : 
     202             :     size_t GetItemPos( sal_uInt16 nItemId ) const;
     203             : 
     204             :     sal_uInt16 GetItemId( size_t nPos ) const;
     205             : 
     206             :     sal_uInt16 GetItemId( const Point& rPos ) const;
     207             : 
     208             :     sal_uInt16 getNextItemId () const;
     209             : 
     210             :     long GetItemWidth() const { return mnItemWidth; }
     211             : 
     212             :     long GetItemHeight() const { return mnItemHeight; }
     213             : 
     214             :     void setItemMaxTextLength (sal_uInt32 nLength);
     215             : 
     216             :     void setItemDimensions (long ItemWidth, long ThumbnailHeight,
     217             :                             long DisplayHeight, int itemPadding);
     218             : 
     219             :     sal_uInt16 GetFirstLine() const { return mnFirstLine; }
     220             : 
     221             :     void SelectItem( sal_uInt16 nItemId );
     222             : 
     223             :     bool IsItemSelected( sal_uInt16 nItemId ) const;
     224             : 
     225             :     /**
     226             :      *
     227             :      * @brief deselect all current selected items.
     228             :      *
     229             :      **/
     230             : 
     231             :     void deselectItems ();
     232             : 
     233             :     void ShowTooltips( bool bShowTooltips );
     234             : 
     235             :     Color GetColor() const { return maColor; }
     236             : 
     237             :     bool IsColor() const { return maColor.GetTransparency() == 0; }
     238             : 
     239             :     void filterItems (const boost::function<bool (const ThumbnailViewItem*) > &func);
     240             : 
     241             :     void sortItems (const boost::function<bool (const ThumbnailViewItem*,
     242             :                                                 const ThumbnailViewItem*) > &func);
     243             : 
     244           0 :     void setItemStateHdl (const Link<> &aLink) { maItemStateHdl = aLink; }
     245             : 
     246             :     virtual void Resize() SAL_OVERRIDE;
     247             : 
     248             :     virtual bool renameItem(ThumbnailViewItem* pItem, const OUString& sNewTitle);
     249             : 
     250             :     static BitmapEx readThumbnail(const OUString &msURL);
     251             : 
     252             : protected:
     253             : 
     254             :     virtual void KeyInput( const KeyEvent& rKEvt ) SAL_OVERRIDE;
     255             : 
     256             :     virtual void MouseButtonDown( const MouseEvent& rMEvt ) SAL_OVERRIDE;
     257             : 
     258             :     virtual void MouseButtonUp( const MouseEvent& rMEvt ) SAL_OVERRIDE;
     259             : 
     260             :     virtual void Command( const CommandEvent& rCEvt ) SAL_OVERRIDE;
     261             : 
     262             :     virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle& rRect) SAL_OVERRIDE;
     263             : 
     264             :     virtual void PrePaint(vcl::RenderContext& rRenderContext) SAL_OVERRIDE;
     265             : 
     266             :     virtual void PostPaint(vcl::RenderContext& rRenderContext) SAL_OVERRIDE;
     267             : 
     268             :     virtual void GetFocus() SAL_OVERRIDE;
     269             : 
     270             :     virtual void LoseFocus() SAL_OVERRIDE;
     271             : 
     272             :     virtual void StateChanged( StateChangedType nStateChange ) SAL_OVERRIDE;
     273             : 
     274             :     virtual void DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
     275             : 
     276             :     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible() SAL_OVERRIDE;
     277             : 
     278             : protected:
     279             : 
     280             :     // Drawing item related functions, override them to make your own custom ones.
     281             : 
     282             :     void DrawItem (ThumbnailViewItem *pItem);
     283             : 
     284             :     virtual void OnItemDblClicked (ThumbnailViewItem *pItem);
     285             : 
     286             : protected:
     287             : 
     288             :     friend class ThumbnailViewAcc;
     289             :     friend class ThumbnailViewItemAcc;
     290             :     using Control::ImplInitSettings;
     291             :     using Window::ImplInit;
     292             : 
     293             :     void CalculateItemPositions (bool bScrollBarUsed = false);
     294             :     void MakeItemVisible( sal_uInt16 nId );
     295             : 
     296             :     SFX2_DLLPRIVATE void         ImplInit();
     297             :     SFX2_DLLPRIVATE void         ImplInitSettings( bool bFont, bool bForeground, bool bBackground );
     298             : 
     299             :     virtual void ApplySettings(vcl::RenderContext& rRenderContext) SAL_OVERRIDE;
     300             : 
     301             :     SFX2_DLLPRIVATE void         ImplInitScrollBar();
     302             :     SFX2_DLLPRIVATE void         ImplDeleteItems();
     303             :     SFX2_DLLPRIVATE void         ImplDraw();
     304             :     SFX2_DLLPRIVATE size_t       ImplGetItem( const Point& rPoint ) const;
     305             :     SFX2_DLLPRIVATE ThumbnailViewItem*    ImplGetItem( size_t nPos );
     306             :     SFX2_DLLPRIVATE sal_uInt16          ImplGetVisibleItemCount() const;
     307             :     SFX2_DLLPRIVATE ThumbnailViewItem*    ImplGetVisibleItem( sal_uInt16 nVisiblePos );
     308             :     SFX2_DLLPRIVATE void            ImplFireAccessibleEvent( short nEventId, const ::com::sun::star::uno::Any& rOldValue, const ::com::sun::star::uno::Any& rNewValue );
     309             :     SFX2_DLLPRIVATE bool         ImplHasAccessibleListeners();
     310             :     DECL_DLLPRIVATE_LINK( ImplScrollHdl, ScrollBar* );
     311             : 
     312             :     DECL_LINK(OnItemSelected, ThumbnailViewItem*);
     313             : 
     314             : protected:
     315             : 
     316             :     ThumbnailValueItemList mItemList;
     317             :     ThumbnailValueItemList mFilteredItemList; ///< Cache to store the filtered items
     318             :     ThumbnailValueItemList::iterator mpStartSelRange;
     319             :     VclPtr<ScrollBar> mpScrBar;
     320             :     long mnHeaderHeight;
     321             :     long mnItemWidth;
     322             :     long mnItemHeight;
     323             :     long mnItemPadding;
     324             :     long mnThumbnailHeight;     // Maximum height of the thumbnail
     325             :     long mnDisplayHeight;       // Height of the data display box (name, etc)
     326             :     long mnVisLines;
     327             :     long mnLines;
     328             : 
     329             :     int mnFineness;
     330             : 
     331             :     sal_uInt16 mnCols;
     332             :     sal_uInt16 mnFirstLine;
     333             :     bool mbScroll : 1;
     334             :     bool mbIsTransientChildrenDisabled : 1;
     335             :     bool mbHasVisibleItems : 1;
     336             :     bool mbShowTooltips : 1;
     337             :     Color maColor;
     338             : 
     339             :     Link<> maItemStateHdl;
     340             :     ThumbnailItemAttributes* mpItemAttrs;
     341             : 
     342             :     std::unique_ptr<drawinglayer::processor2d::BaseProcessor2D> mpProcessor;
     343             : 
     344             :     boost::function<bool (const ThumbnailViewItem*)> maFilterFunc;
     345             : };
     346             : 
     347             : #endif // INCLUDED_SFX2_THUMBNAILVIEW_HXX
     348             : 
     349             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11