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

Generated by: LCOV version 1.10