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

Generated by: LCOV version 1.10