LCOV - code coverage report
Current view: top level - svtools/source/contnr - imivctl.hxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 38 59 64.4 %
Date: 2015-06-13 12:38:46 Functions: 20 33 60.6 %
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             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #ifndef INCLUDED_SVTOOLS_SOURCE_CONTNR_IMIVCTL_HXX
      21             : #define INCLUDED_SVTOOLS_SOURCE_CONTNR_IMIVCTL_HXX
      22             : 
      23             : #include <vcl/virdev.hxx>
      24             : #include <vcl/scrbar.hxx>
      25             : #include <vcl/timer.hxx>
      26             : #include <vcl/idle.hxx>
      27             : #include <vcl/vclptr.hxx>
      28             : #include <vcl/seleng.hxx>
      29             : #include <tools/debug.hxx>
      30             : #include "svtaccessiblefactory.hxx"
      31             : 
      32             : #include <limits.h>
      33             : 
      34             : #include <svtools/ivctrl.hxx>
      35             : #include <boost/ptr_container/ptr_map.hpp>
      36             : 
      37             : class IcnCursor_Impl;
      38             : class SvtIconChoiceCtrl;
      39             : class SvxIconChoiceCtrlEntry;
      40             : class IcnViewEdit_Impl;
      41             : class IcnGridMap_Impl;
      42             : 
      43             : 
      44             : 
      45             : // some defines
      46             : 
      47             : #define PAINTFLAG_HOR_CENTERED  0x0001
      48             : #define PAINTFLAG_VER_CENTERED  0x0002
      49             : 
      50             : #define F_VER_SBARSIZE_WITH_HBAR        0x0001
      51             : #define F_HOR_SBARSIZE_WITH_VBAR        0x0002
      52             : #define F_PAINTED                       0x0004  // true after first paint
      53             : #define F_ADD_MODE                      0x0008
      54             : #define F_SELECTING_RECT                0x0020
      55             : #define F_DOWN_CTRL                     0x0080
      56             : #define F_DOWN_DESELECT                 0x0100
      57             : #define F_START_EDITTIMER_IN_MOUSEUP    0x0400
      58             : #define F_MOVED_ENTRIES                 0x0800
      59             : #define F_ENTRYLISTPOS_VALID            0x1000
      60             : #define F_CLEARING_SELECTION            0x2000
      61             : #define F_ARRANGING                     0x4000
      62             : 
      63             : // unit = pixels
      64             : // distances from window borders
      65             : #define LROFFS_WINBORDER            4
      66             : #define TBOFFS_WINBORDER            4
      67             : // for the bounding rectangle
      68             : #define LROFFS_BOUND                2
      69             : #define TBOFFS_BOUND                2
      70             : // distance icon to text
      71             : #define HOR_DIST_BMP_STRING         3
      72             : #define VER_DIST_BMP_STRING         3
      73             : //  width offset of highlight rectangle for Text
      74             : #define LROFFS_TEXT                 2
      75             : 
      76             : #define DEFAULT_MAX_VIRT_WIDTH      200
      77             : #define DEFAULT_MAX_VIRT_HEIGHT     200
      78             : 
      79             : #define VIEWMODE_MASK   (WB_ICON | WB_SMALLICON | WB_DETAILS)
      80             : 
      81             : 
      82             : 
      83             : 
      84             : 
      85             : enum IcnViewFieldType
      86             : {
      87             :     IcnViewFieldTypeDontknow = 0,
      88             :     IcnViewFieldTypeImage = 1,
      89             :     IcnViewFieldTypeText = 2
      90             : };
      91             : 
      92             : 
      93             : 
      94             : // Data about the focus of entries
      95             : 
      96             : struct LocalFocus
      97             : {
      98             :     bool        bOn;
      99             :     Rectangle   aRect;
     100             :     Color       aPenColor;
     101             : 
     102           7 :     LocalFocus() { bOn = false; }
     103             : };
     104             : 
     105             : 
     106             : 
     107             : // Entry-List
     108             : 
     109             : typedef ::std::vector< SvxIconChoiceCtrlEntry* > SvxIconChoiceCtrlEntryList_impl;
     110             : 
     111             : class EntryList_Impl
     112             : {
     113             : private:
     114             :     SvxIconChoiceCtrlEntryList_impl maIconChoiceCtrlEntryList;
     115             :     SvxIconChoiceCtrl_Impl*         _pOwner;
     116             : 
     117             : public:
     118             :                             explicit EntryList_Impl( SvxIconChoiceCtrl_Impl* );
     119             :                             ~EntryList_Impl();
     120             : 
     121             :     void                    clear();
     122             : 
     123         219 :     size_t                  size()
     124             :                             {
     125         219 :                                 return maIconChoiceCtrlEntryList.size();
     126             :                             }
     127         400 :     size_t                  size() const
     128             :                             {
     129         400 :                                 return maIconChoiceCtrlEntryList.size();
     130             :                             }
     131             : 
     132        1014 :     SvxIconChoiceCtrlEntry* operator[]( size_t nPos )
     133             :                             {
     134        1014 :                                 return  ( nPos < maIconChoiceCtrlEntryList.size() )
     135        1014 :                                         ? maIconChoiceCtrlEntryList[ nPos ]
     136        2028 :                                         : NULL;
     137             :                             }
     138         522 :     SvxIconChoiceCtrlEntry* operator[]( size_t nPos ) const
     139             :                             {
     140         522 :                                 return  ( nPos < maIconChoiceCtrlEntryList.size() )
     141         522 :                                         ? maIconChoiceCtrlEntryList[ nPos ]
     142        1044 :                                         : NULL;
     143             :                             }
     144             :     void                    insert( size_t nPos, SvxIconChoiceCtrlEntry* pEntry );
     145             : };
     146             : 
     147             : 
     148             : 
     149             : 
     150             : // Implementation-class of IconChoiceCtrl
     151             : 
     152             : 
     153             : typedef boost::ptr_map<sal_uInt16, SvxIconChoiceCtrlColumnInfo> SvxIconChoiceCtrlColumnInfoMap;
     154             : typedef std::vector<SvxIconChoiceCtrlEntry*> SvxIconChoiceCtrlEntryPtrVec;
     155             : 
     156             : class SvxIconChoiceCtrl_Impl
     157             : {
     158             :     friend class IcnCursor_Impl;
     159             :     friend class EntryList_Impl;
     160             :     friend class IcnGridMap_Impl;
     161             : 
     162             :     bool                    bChooseWithCursor;
     163             :     EntryList_Impl          aEntries;
     164             :     VclPtr<ScrollBar>       aVerSBar;
     165             :     VclPtr<ScrollBar>       aHorSBar;
     166             :     VclPtr<ScrollBarBox>    aScrBarBox;
     167             :     Rectangle               aCurSelectionRect;
     168             :     std::vector<Rectangle*> aSelectedRectList;
     169             :     Idle                    aEditIdle;                 // for editing in place
     170             :     Idle                    aAutoArrangeIdle;
     171             :     Idle                    aDocRectChangedIdle;
     172             :     Idle                    aVisRectChangedIdle;
     173             :     Idle                    aCallSelectHdlIdle;
     174             :     Size                    aVirtOutputSize;
     175             :     Size                    aImageSize;
     176             :     Size                    aDefaultTextSize;
     177             :     Size                    aOutputSize; // Pixel
     178             :     Point                   aDDLastEntryPos;
     179             :     Point                   aDDLastRectPos;
     180             :     Point                   aDDPaintOffs;
     181             :     Point                   aDDStartPos;
     182             :     VclPtr<SvtIconChoiceCtrl>  pView;
     183             :     IcnCursor_Impl*         pImpCursor;
     184             :     IcnGridMap_Impl*        pGridMap;
     185             :     long                    nMaxVirtWidth;  // max. width aVirtOutputSize for ALIGN_TOP
     186             :     long                    nMaxVirtHeight; // max. height aVirtOutputSize for ALIGN_LEFT
     187             :     SvxIconChoiceCtrlEntryList_impl*    pZOrderList;
     188             :     SvxIconChoiceCtrlColumnInfoMap* pColumns;
     189             :     VclPtr<IcnViewEdit_Impl>   pEdit;
     190             :     WinBits                 nWinBits;
     191             :     long                    nMaxBoundHeight;            // height of highest BoundRects
     192             :     sal_uInt16              nFlags;
     193             :     DrawTextFlags           nCurTextDrawFlags;
     194             :     ImplSVEvent *           nUserEventAdjustScrBars;
     195             :     ImplSVEvent *           nUserEventShowCursor;
     196             :     SvxIconChoiceCtrlEntry* pCurHighlightFrame;
     197             :     bool                    bHighlightFramePressed;
     198             :     SvxIconChoiceCtrlEntry* pHead;                      // top left entry
     199             :     SvxIconChoiceCtrlEntry* pCursor;
     200             :     SvxIconChoiceCtrlEntry* pPrevDropTarget;
     201             :     SvxIconChoiceCtrlEntry* pHdlEntry;
     202             :     SvxIconChoiceCtrlEntry* pDDRefEntry;
     203             :     VclPtr<VirtualDevice>   pDDDev;
     204             :     VclPtr<VirtualDevice>   pDDBufDev;
     205             :     VclPtr<VirtualDevice>   pDDTempDev;
     206             :     VclPtr<VirtualDevice>   pEntryPaintDev;
     207             :     SvxIconChoiceCtrlEntry* pAnchor;                    // for selection
     208             :     LocalFocus              aFocus;                             // Data for focusrect
     209             :     ::svt::AccessibleFactoryAccess aAccFactory;
     210             : 
     211             :     SvxIconChoiceCtrlEntry* pCurEditedEntry;
     212             :     SvxIconChoiceCtrlTextMode eTextMode;
     213             :     SelectionMode           eSelectionMode;
     214             :     sal_uLong               nSelectionCount;
     215             :     SvxIconChoiceCtrlPositionMode ePositionMode;
     216             :     bool                    bBoundRectsDirty;
     217             :     bool                    bUpdateMode;
     218             :     bool                    bEntryEditingEnabled;
     219             : 
     220             :     void                ShowCursor( bool bShow );
     221             : 
     222             :     void                ImpArrange( bool bKeepPredecessors = false );
     223             :     void                AdjustVirtSize( const Rectangle& );
     224             :     void                ResetVirtSize();
     225             :     void                CheckScrollBars();
     226             : 
     227             :                         DECL_LINK( ScrollUpDownHdl, ScrollBar * );
     228             :                         DECL_LINK( ScrollLeftRightHdl, ScrollBar * );
     229             :                         DECL_LINK_TYPED(EditTimeoutHdl, Idle *, void);
     230             :                         DECL_LINK( UserEventHdl, void* );
     231             :                         DECL_LINK_TYPED( AutoArrangeHdl, Idle*, void );
     232             :                         DECL_LINK_TYPED( DocRectChangedHdl, Idle*, void );
     233             :                         DECL_LINK_TYPED( VisRectChangedHdl, Idle*, void );
     234             :                         DECL_LINK_TYPED( CallSelectHdlHdl, Idle*, void );
     235             : 
     236             :     void                AdjustScrollBars( bool bVirtSizeGrowedOnly = false);
     237             :     void                PositionScrollBars( long nRealWidth, long nRealHeight );
     238         658 :     static long         GetScrollBarPageSize( long nVisibleRange )
     239             :                         {
     240         658 :                             return ((nVisibleRange*75)/100);
     241             :                         }
     242         130 :     long                GetScrollBarLineSize() const
     243             :                         {
     244         130 :                             return nMaxBoundHeight / 2;
     245             :                         }
     246             :     bool                HandleScrollCommand( const CommandEvent& rCmd );
     247           0 :     void                ToDocPos( Point& rPosPixel )
     248             :                         {
     249           0 :                             rPosPixel -= pView->GetMapMode().GetOrigin();
     250           0 :                         }
     251             :     void                InitScrollBarBox();
     252             :     void                ToggleSelection( SvxIconChoiceCtrlEntry* );
     253             :     void                DeselectAllBut( SvxIconChoiceCtrlEntry*, bool bPaintSync = false );
     254             :     void                Center( SvxIconChoiceCtrlEntry* pEntry ) const;
     255         203 :     void                StopEditTimer() { aEditIdle.Stop(); }
     256           0 :     void                StartEditTimer() { aEditIdle.Start(); }
     257             :     void                ImpHideDDIcon();
     258             :     void                CallSelectHandler( SvxIconChoiceCtrlEntry* );
     259             :     void                SelectRect(
     260             :                             SvxIconChoiceCtrlEntry* pEntry1,
     261             :                             SvxIconChoiceCtrlEntry* pEntry2,
     262             :                             bool bAdd = true,
     263             :                             std::vector<Rectangle*>* pOtherRects = 0
     264             :                         );
     265             : 
     266             :     void                SelectRange(
     267             :                             SvxIconChoiceCtrlEntry* pStart,
     268             :                             SvxIconChoiceCtrlEntry* pEnd,
     269             :                             bool bAdd = true
     270             :                         );
     271             : 
     272             :     void                AddSelectedRect( const Rectangle& );
     273             :     void                AddSelectedRect(
     274             :                             SvxIconChoiceCtrlEntry* pEntry1,
     275             :                             SvxIconChoiceCtrlEntry* pEntry2
     276             :                         );
     277             : 
     278             :     void                ClearSelectedRectList();
     279             :     void                ClearColumnList();
     280             :     Rectangle           CalcMaxTextRect( const SvxIconChoiceCtrlEntry* pEntry ) const;
     281             : 
     282             :     void                ClipAtVirtOutRect( Rectangle& rRect ) const;
     283             :     void                AdjustAtGrid( const SvxIconChoiceCtrlEntryPtrVec& rRow, SvxIconChoiceCtrlEntry* pStart=0 );
     284             :     Point               AdjustAtGrid(
     285             :                             const Rectangle& rCenterRect, // balance point of object (typically Bmp-Rect)
     286             :                             const Rectangle& rBoundRect
     287             :                         ) const;
     288             :     sal_uLong           GetPredecessorGrid( const Point& rDocPos) const;
     289             : 
     290             :     void                InitPredecessors();
     291             :     void                ClearPredecessors();
     292             : 
     293             :     bool                CheckVerScrollBar();
     294             :     bool                CheckHorScrollBar();
     295             :     void                CancelUserEvents();
     296             :     void                EntrySelected(
     297             :                             SvxIconChoiceCtrlEntry* pEntry,
     298             :                             bool bSelect,
     299             :                             bool bSyncPaint
     300             :                         );
     301             :     void                RepaintEntries( SvxIconViewFlags nEntryFlagsMask );
     302             :     void                SetListPositions();
     303             :     void                SetDefaultTextSize();
     304          58 :     bool                IsAutoArrange() const
     305             :                         {
     306          58 :                             return (ePositionMode == IcnViewPositionModeAutoArrange);
     307             :                         }
     308             :     bool                IsAutoAdjust() const
     309             :                         {
     310             :                             return (ePositionMode == IcnViewPositionModeAutoAdjust);
     311             :                         }
     312         265 :     void                DocRectChanged() { aDocRectChangedIdle.Start(); }
     313         157 :     void                VisRectChanged() { aVisRectChangedIdle.Start(); }
     314             :     void                SetOrigin( const Point& );
     315             : 
     316             :                         DECL_LINK(TextEditEndedHdl, void *);
     317             : 
     318             :     void                ShowFocus ( Rectangle& rRect );
     319             :     void                DrawFocusRect(vcl::RenderContext& rRenderContext);
     320             : 
     321             :     bool                IsMnemonicChar( sal_Unicode cChar, sal_uLong& rPos ) const;
     322             : 
     323             : public:
     324             : 
     325             :     long                nGridDX;
     326             :     long                nGridDY;
     327             :     long                nHorSBarHeight;
     328             :     long                nVerSBarWidth;
     329             : 
     330             :                         SvxIconChoiceCtrl_Impl( SvtIconChoiceCtrl* pView, WinBits nWinStyle );
     331             :                         ~SvxIconChoiceCtrl_Impl();
     332             : 
     333           7 :     bool                SetChoiceWithCursor ( bool bDo = true ) { bool bOld = bChooseWithCursor; bChooseWithCursor = bDo; return bOld; }
     334             :     void                Clear( bool bInCtor = false );
     335             :     void                SetStyle( WinBits nWinStyle );
     336          58 :     WinBits             GetStyle() const { return nWinBits; }
     337             :     void                InsertEntry( SvxIconChoiceCtrlEntry*, size_t nPos, const Point* pPos=0 );
     338             :     void                CreateAutoMnemonics( MnemonicGenerator* _pGenerator = NULL );
     339             :     void                FontModified();
     340             :     void                SelectAll( bool bSelect = true, bool bPaint = true );
     341             :     void                SelectEntry(
     342             :                             SvxIconChoiceCtrlEntry*,
     343             :                             bool bSelect,
     344             :                             bool bCallHdl = true,
     345             :                             bool bAddToSelection = false,
     346             :                             bool bSyncPaint = false
     347             :                         );
     348             :     void                Paint(vcl::RenderContext& rRenderContext, const Rectangle& rRect);
     349             :     bool                MouseButtonDown( const MouseEvent& );
     350             :     bool                MouseButtonUp( const MouseEvent& );
     351             :     bool                MouseMove( const MouseEvent&);
     352             :     bool                RequestHelp( const HelpEvent& rHEvt );
     353             :     void                SetCursor_Impl(
     354             :                             SvxIconChoiceCtrlEntry* pOldCursor,
     355             :                             SvxIconChoiceCtrlEntry* pNewCursor,
     356             :                             bool bMod1,
     357             :                             bool bShift,
     358             :                             bool bPaintSync = false
     359             :                         );
     360             :     bool                KeyInput( const KeyEvent& );
     361             :     void                Resize();
     362             :     void                GetFocus();
     363             :     void                LoseFocus();
     364             :     void                SetUpdateMode( bool bUpdate );
     365           0 :     bool                GetUpdateMode() const { return bUpdateMode; }
     366             :     void                PaintEntry(SvxIconChoiceCtrlEntry*, const Point&, vcl::RenderContext& rRenderContext, bool bIsBackgroundPainted = false);
     367             : 
     368             :     void                SetEntryPos(
     369             :                             SvxIconChoiceCtrlEntry* pEntry,
     370             :                             const Point& rPos,
     371             :                             bool bAdjustRow = false,
     372             :                             bool bCheckScrollBars = false,
     373             :                             bool bKeepGridMap = false
     374             :                         );
     375             : 
     376             :     void                InvalidateEntry( SvxIconChoiceCtrlEntry* );
     377             : 
     378             :     void                SetNoSelection();
     379             : 
     380           0 :     SvxIconChoiceCtrlEntry* GetCurEntry() const { return pCursor; }
     381             :     void                SetCursor(
     382             :                             SvxIconChoiceCtrlEntry*,
     383             :                             // true == carry selection when single-selecting
     384             :                             bool bSyncSingleSelection = true,
     385             :                             bool bShowFocusAsync = false
     386             :                         );
     387             : 
     388             :     SvxIconChoiceCtrlEntry* GetEntry( const Point& rDocPos, bool bHit = false );
     389             : 
     390             :     void                MakeEntryVisible( SvxIconChoiceCtrlEntry* pEntry, bool bBound = true );
     391             : 
     392             :     void                Arrange(
     393             :                             bool bKeepPredecessors = false,
     394             :                             long nSetMaxVirtWidth =0,
     395             :                             long nSetMaxVirtHeight =0
     396             :                         );
     397             : 
     398             :     Rectangle           CalcFocusRect( SvxIconChoiceCtrlEntry* );
     399             :     Rectangle           CalcBmpRect( SvxIconChoiceCtrlEntry*, const Point* pPos = 0 );
     400             :     Rectangle           CalcTextRect(
     401             :                             SvxIconChoiceCtrlEntry*,
     402             :                             const Point* pPos = 0,
     403             :                             bool bForInplaceEdit = false,
     404             :                             const OUString* pStr = 0
     405             :                         );
     406             : 
     407             :     long                CalcBoundingWidth( SvxIconChoiceCtrlEntry* ) const;
     408             :     long                CalcBoundingHeight( SvxIconChoiceCtrlEntry* ) const;
     409             :     Size                CalcBoundingSize( SvxIconChoiceCtrlEntry* ) const;
     410             :     void                FindBoundingRect( SvxIconChoiceCtrlEntry* pEntry );
     411             :     void                SetBoundingRect_Impl(
     412             :                             SvxIconChoiceCtrlEntry* pEntry,
     413             :                             const Point& rPos,
     414             :                             const Size& rBoundingSize
     415             :                         );
     416             :     // recalculates all invalid BoundRects
     417             :     void                RecalcAllBoundingRectsSmart();
     418             :     const Rectangle&    GetEntryBoundRect( SvxIconChoiceCtrlEntry* );
     419         232 :     void                InvalidateBoundingRect( Rectangle& rRect )
     420             :                         {
     421         232 :                             rRect.Right() = LONG_MAX;
     422         232 :                             bBoundRectsDirty = true;
     423         232 :                         }
     424        1142 :     static bool         IsBoundingRectValid( const Rectangle& rRect ) { return ( rRect.Right() != LONG_MAX ); }
     425             : 
     426             :     void                PaintEmphasis(const Rectangle& rRect1, const Rectangle& rRect2, bool bSelected,
     427             :                                       bool bDropTarget, bool bCursored, vcl::RenderContext& rRenderContext,
     428             :                                       bool bIsBackgroundPainted = false);
     429             : 
     430             :     void                PaintItem(const Rectangle& rRect, IcnViewFieldType eItem, SvxIconChoiceCtrlEntry* pEntry,
     431             :                             sal_uInt16 nPaintFlags, vcl::RenderContext& rRenderContext, const OUString* pStr = 0,
     432             :                             vcl::ControlLayoutData* _pLayoutData = NULL);
     433             : 
     434             :     // recalculates all BoundingRects if bMustRecalcBoundingRects == true
     435           0 :     void                CheckBoundingRects() { if (bBoundRectsDirty) RecalcAllBoundingRectsSmart(); }
     436             :     // recalculates all invalidated BoundingRects
     437             :     void                ShowTargetEmphasis( SvxIconChoiceCtrlEntry* pEntry, bool bShow );
     438             :     void                Command( const CommandEvent& rCEvt );
     439             :     void                ToTop( SvxIconChoiceCtrlEntry* );
     440             : 
     441             :     sal_uLong           GetSelectionCount() const;
     442             :     void                SetGrid( const Size& );
     443             :     Size                GetMinGrid() const;
     444             :     void                Scroll( long nDeltaX, long nDeltaY, bool bScrollBar = false );
     445             :     const Size&         GetItemSize( SvxIconChoiceCtrlEntry*, IcnViewFieldType ) const;
     446             : 
     447             :     void                HideDDIcon();
     448             : 
     449             :     static bool         IsOver(
     450             :                             std::vector<Rectangle*>* pSelectedRectList,
     451             :                             const Rectangle& rEntryBoundRect
     452             :                         );
     453             : 
     454             :     void                SelectRect(
     455             :                             const Rectangle&,
     456             :                             bool bAdd = true,
     457             :                             std::vector<Rectangle*>* pOtherRects = 0
     458             :                         );
     459             : 
     460             :     bool            IsTextHit( SvxIconChoiceCtrlEntry* pEntry, const Point& rDocPos );
     461             :     void                MakeVisible(
     462             :                             const Rectangle& rDocPos,
     463             :                             bool bInScrollBarEvent=false,
     464             :                             bool bCallRectChangedHdl = true
     465             :                         );
     466             : 
     467             :     void                AdjustEntryAtGrid( SvxIconChoiceCtrlEntry* pStart = 0 );
     468             : #ifdef DBG_UTIL
     469             :     void                SetEntryTextMode(
     470             :                             SvxIconChoiceCtrlTextMode,
     471             :                             SvxIconChoiceCtrlEntry* pEntry = 0
     472             :                         );
     473             : #endif
     474             :     void                EnableEntryEditing( bool bEnable ) { bEntryEditingEnabled = bEnable; }
     475           0 :     bool                IsEntryEditingEnabled() const { return bEntryEditingEnabled; }
     476           0 :     bool                IsEntryEditing() const { return (pCurEditedEntry!=0); }
     477             :     void                EditEntry( SvxIconChoiceCtrlEntry* pEntry );
     478             :     void                StopEntryEditing( bool bCancel );
     479         226 :     size_t              GetEntryCount() const { return aEntries.size(); }
     480         264 :     SvxIconChoiceCtrlEntry* GetEntry( size_t nPos )
     481             :                             {
     482         264 :                                 return aEntries[ nPos ];
     483             :                             }
     484           0 :     SvxIconChoiceCtrlEntry* GetEntry( size_t nPos ) const
     485             :                             {
     486           0 :                                 return aEntries[ nPos ];
     487             :                             }
     488             :     SvxIconChoiceCtrlEntry* GetFirstSelectedEntry( sal_uLong& ) const;
     489             :     SvxIconChoiceCtrlEntry* GetHdlEntry() const { return pHdlEntry; }
     490             :     void                SetHdlEntry( SvxIconChoiceCtrlEntry* pEntry ) { pHdlEntry = pEntry; }
     491             : 
     492             :     SvxIconChoiceCtrlTextMode GetEntryTextModeSmart( const SvxIconChoiceCtrlEntry* pEntry ) const;
     493           7 :     void                SetSelectionMode( SelectionMode eMode ) { eSelectionMode=eMode; }
     494             :     SelectionMode       GetSelectionMode() const { return eSelectionMode; }
     495             :     bool                AreEntriesMoved() const { return ((nFlags & F_MOVED_ENTRIES) != 0); }
     496           0 :     void                SetEntriesMoved( bool bMoved )
     497             :                         {
     498           0 :                             if( bMoved )
     499           0 :                                 nFlags |= F_MOVED_ENTRIES;
     500             :                             else
     501           0 :                                 nFlags &= ~(F_MOVED_ENTRIES);
     502           0 :                         }
     503             :     sal_uLong           GetEntryListPos( SvxIconChoiceCtrlEntry* ) const;
     504             :     void                SetEntryImageSize( const Size& rSize ) { aImageSize = rSize; }
     505             :     void                InitSettings();
     506             :     Rectangle           GetOutputRect() const;
     507             : 
     508             :     bool                ArePredecessorsSet() const { return (pHead != 0); }
     509             :     SvxIconChoiceCtrlEntry* GetPredecessorHead() const { return pHead; }
     510             :     void                SetEntryPredecessor(SvxIconChoiceCtrlEntry* pEntry,SvxIconChoiceCtrlEntry* pPredecessor);
     511             :     // only delivers valid results when in AutoArrange mode!
     512             :     SvxIconChoiceCtrlEntry* FindEntryPredecessor( SvxIconChoiceCtrlEntry* pEntry, const Point& );
     513             : 
     514             :     void                SetPositionMode( SvxIconChoiceCtrlPositionMode );
     515             :     SvxIconChoiceCtrlPositionMode GetPositionMode() const { return ePositionMode;}
     516             : 
     517             :     void                SetColumn( sal_uInt16 nIndex, const SvxIconChoiceCtrlColumnInfo& );
     518             :     const SvxIconChoiceCtrlColumnInfo* GetColumn( sal_uInt16 nIndex ) const;
     519             : 
     520           0 :     Rectangle           GetDocumentRect() const { return Rectangle( Point(), aVirtOutputSize ); }
     521           0 :     Rectangle           GetVisibleRect() const { return GetOutputRect(); }
     522             : 
     523             :     void                SetEntryHighlightFrame(
     524             :                             SvxIconChoiceCtrlEntry* pEntry,
     525             :                             bool bKeepHighlightFlags = false
     526             :                         );
     527             :     void                DrawHighlightFrame(vcl::RenderContext& rRenderContext, const Rectangle& rBmpRect, bool bHide);
     528             :     void                StopSelectTimer() { aCallSelectHdlIdle.Stop(); }
     529             : 
     530             :     void                CallEventListeners( sal_uLong nEvent, void* pData = NULL );
     531             : 
     532           0 :     inline ::svt::IAccessibleFactory& GetAccessibleFactory()
     533             :                         {
     534           0 :                             return aAccFactory.getFactory();
     535             :                         }
     536             : };
     537             : 
     538             : 
     539             : 
     540             : typedef std::map<sal_uInt16, SvxIconChoiceCtrlEntryPtrVec> IconChoiceMap;
     541             : 
     542             : class IcnCursor_Impl
     543             : {
     544             :     SvxIconChoiceCtrl_Impl* pView;
     545             :     std::unique_ptr<IconChoiceMap> xColumns;
     546             :     std::unique_ptr<IconChoiceMap> xRows;
     547             :     long                    nCols;
     548             :     long                    nRows;
     549             :     short                   nDeltaWidth;
     550             :     short                   nDeltaHeight;
     551             :     SvxIconChoiceCtrlEntry* pCurEntry;
     552             :     void                    SetDeltas();
     553             :     void                    ImplCreate();
     554           0 :     void                    Create() {  if( !xColumns ) ImplCreate(); }
     555             : 
     556             :     sal_uInt16              GetSortListPos(
     557             :                                 SvxIconChoiceCtrlEntryPtrVec& rList,
     558             :                                 long nValue,
     559             :                                 bool bVertical);
     560             :     SvxIconChoiceCtrlEntry* SearchCol(
     561             :                                 sal_uInt16 nCol,
     562             :                                 sal_uInt16 nTop,
     563             :                                 sal_uInt16 nBottom,
     564             :                                 sal_uInt16 nPref,
     565             :                                 bool bDown,
     566             :                                 bool bSimple
     567             :                             );
     568             : 
     569             :     SvxIconChoiceCtrlEntry* SearchRow(
     570             :                                 sal_uInt16 nRow,
     571             :                                 sal_uInt16 nRight,
     572             :                                 sal_uInt16 nLeft,
     573             :                                 sal_uInt16 nPref,
     574             :                                 bool bRight,
     575             :                                 bool bSimple
     576             :                             );
     577             : 
     578             : public:
     579             :                             explicit IcnCursor_Impl( SvxIconChoiceCtrl_Impl* pOwner );
     580             :                             ~IcnCursor_Impl();
     581             :     void                    Clear();
     582             : 
     583             :     // for Cursortravelling etc.
     584             :     SvxIconChoiceCtrlEntry* GoLeftRight( SvxIconChoiceCtrlEntry*, bool bRight );
     585             :     SvxIconChoiceCtrlEntry* GoUpDown( SvxIconChoiceCtrlEntry*, bool bDown );
     586             :     SvxIconChoiceCtrlEntry* GoPageUpDown( SvxIconChoiceCtrlEntry*, bool bDown );
     587             : 
     588             :     // Creates a list of entries for every row (height = nGridDY) sorted by
     589             :     // BoundRect.Left(). A list may be empty. The lists become the property of
     590             :     // the caller and have to be deleted with DestroyGridAdjustData.
     591             :     void                    CreateGridAjustData( IconChoiceMap& pLists, SvxIconChoiceCtrlEntry* pRow=0);
     592             :     static void             DestroyGridAdjustData( IconChoiceMap& rLists );
     593             : };
     594             : 
     595             : 
     596             : 
     597             : typedef sal_uLong GridId;
     598             : 
     599             : #define GRID_NOT_FOUND  ((GridId)ULONG_MAX)
     600             : 
     601             : class IcnGridMap_Impl
     602             : {
     603             :     Rectangle               _aLastOccupiedGrid;
     604             :     SvxIconChoiceCtrl_Impl* _pView;
     605             :     bool    *               _pGridMap;
     606             :     sal_uInt16              _nGridCols, _nGridRows;
     607             : 
     608             :     void                Expand();
     609             :     void                Create_Impl();
     610        1356 :     void                Create() { if(!_pGridMap) Create_Impl(); }
     611             : 
     612             :     void                GetMinMapSize( sal_uInt16& rDX, sal_uInt16& rDY ) const;
     613             : 
     614             : public:
     615             :                         explicit IcnGridMap_Impl(SvxIconChoiceCtrl_Impl* pView);
     616             :                         ~IcnGridMap_Impl();
     617             : 
     618             :     void                Clear();
     619             : 
     620             :     GridId              GetGrid( const Point& rDocPos, bool* pbClipped = 0 );
     621             :     GridId              GetGrid( sal_uInt16 nGridX, sal_uInt16 nGridY );
     622             :     GridId              GetUnoccupiedGrid( bool bOccupyFound=true );
     623             : 
     624             :     void                OccupyGrids( const SvxIconChoiceCtrlEntry*, bool bOccupy = true );
     625         288 :     void                OccupyGrid( GridId nId, bool bOccupy = true )
     626             :                         {
     627             :                             DBG_ASSERT(!_pGridMap || nId<(sal_uLong)(_nGridCols*_nGridRows),"OccupyGrid: Bad GridId");
     628         288 :                             if(_pGridMap && nId < (sal_uLong)(_nGridCols *_nGridRows) )
     629         288 :                                 _pGridMap[ nId ] = bOccupy;
     630         288 :                         }
     631             : 
     632             :     Rectangle           GetGridRect( GridId );
     633             :     void                GetGridCoord( GridId, sal_uInt16& rGridX, sal_uInt16& rGridY );
     634             :     static sal_uLong    GetGridCount(
     635             :                             const Size& rSizePixel,
     636             :                             sal_uInt16 nGridWidth,
     637             :                             sal_uInt16 nGridHeight
     638             :                         );
     639             : 
     640             :     void                OutputSizeChanged();
     641             : };
     642             : 
     643             : #endif
     644             : 
     645             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11