1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef _IMPICNVW_HXX 25*b1cdbd2cSJim Jagielski #define _IMPICNVW_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #ifndef _VIRDEV_HXX 28*b1cdbd2cSJim Jagielski #include <vcl/virdev.hxx> 29*b1cdbd2cSJim Jagielski #endif 30*b1cdbd2cSJim Jagielski #ifndef _SCRBAR_HXX 31*b1cdbd2cSJim Jagielski #include <vcl/scrbar.hxx> 32*b1cdbd2cSJim Jagielski #endif 33*b1cdbd2cSJim Jagielski #include <vcl/timer.hxx> 34*b1cdbd2cSJim Jagielski #include <vcl/seleng.hxx> 35*b1cdbd2cSJim Jagielski #include <tools/debug.hxx> 36*b1cdbd2cSJim Jagielski #include "svtaccessiblefactory.hxx" 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski #include <limits.h> 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski #include <svtools/ivctrl.hxx> 41*b1cdbd2cSJim Jagielski #include <svl/svarray.hxx> 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski class IcnCursor_Impl; 44*b1cdbd2cSJim Jagielski class SvtIconChoiceCtrl; 45*b1cdbd2cSJim Jagielski class SvxIconChoiceCtrlEntry; 46*b1cdbd2cSJim Jagielski class IcnViewEdit_Impl; 47*b1cdbd2cSJim Jagielski class IcnGridMap_Impl; 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////////////// 50*b1cdbd2cSJim Jagielski // 51*b1cdbd2cSJim Jagielski // some defines 52*b1cdbd2cSJim Jagielski // 53*b1cdbd2cSJim Jagielski #define PAINTFLAG_HOR_CENTERED 0x0001 54*b1cdbd2cSJim Jagielski #define PAINTFLAG_VER_CENTERED 0x0002 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski #define F_VER_SBARSIZE_WITH_HBAR 0x0001 57*b1cdbd2cSJim Jagielski #define F_HOR_SBARSIZE_WITH_VBAR 0x0002 58*b1cdbd2cSJim Jagielski #define F_PAINTED 0x0004 // sal_True nach erstem Paint 59*b1cdbd2cSJim Jagielski #define F_ADD_MODE 0x0008 60*b1cdbd2cSJim Jagielski #define F_SELECTING_RECT 0x0020 61*b1cdbd2cSJim Jagielski #define F_DOWN_CTRL 0x0080 62*b1cdbd2cSJim Jagielski #define F_DOWN_DESELECT 0x0100 63*b1cdbd2cSJim Jagielski #define F_START_EDITTIMER_IN_MOUSEUP 0x0400 64*b1cdbd2cSJim Jagielski #define F_MOVED_ENTRIES 0x0800 65*b1cdbd2cSJim Jagielski #define F_ENTRYLISTPOS_VALID 0x1000 66*b1cdbd2cSJim Jagielski #define F_CLEARING_SELECTION 0x2000 67*b1cdbd2cSJim Jagielski #define F_ARRANGING 0x4000 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski // alle Angaben in Pixel 70*b1cdbd2cSJim Jagielski // Abstaende von Fensterraendern 71*b1cdbd2cSJim Jagielski #define LROFFS_WINBORDER 4 72*b1cdbd2cSJim Jagielski #define TBOFFS_WINBORDER 4 73*b1cdbd2cSJim Jagielski // fuer das Bounding-Rectangle 74*b1cdbd2cSJim Jagielski #define LROFFS_BOUND 2 75*b1cdbd2cSJim Jagielski #define TBOFFS_BOUND 2 76*b1cdbd2cSJim Jagielski // Abstand Fokusrechteck - Icon 77*b1cdbd2cSJim Jagielski #define LROFFS_ICON 2 78*b1cdbd2cSJim Jagielski #define TBOFFS_ICON 2 79*b1cdbd2cSJim Jagielski // Abstaende Icon - Text 80*b1cdbd2cSJim Jagielski #define HOR_DIST_BMP_STRING 3 81*b1cdbd2cSJim Jagielski #define VER_DIST_BMP_STRING 3 82*b1cdbd2cSJim Jagielski // Breitenoffset Highlight-Rect bei Text 83*b1cdbd2cSJim Jagielski #define LROFFS_TEXT 2 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski #define DEFAULT_MAX_VIRT_WIDTH 200 86*b1cdbd2cSJim Jagielski #define DEFAULT_MAX_VIRT_HEIGHT 200 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski #define VIEWMODE_MASK (WB_ICON | WB_SMALLICON | WB_DETAILS) 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////////////// 91*b1cdbd2cSJim Jagielski // 92*b1cdbd2cSJim Jagielski // 93*b1cdbd2cSJim Jagielski // 94*b1cdbd2cSJim Jagielski enum IcnViewFieldType 95*b1cdbd2cSJim Jagielski { 96*b1cdbd2cSJim Jagielski IcnViewFieldTypeDontknow = 0, 97*b1cdbd2cSJim Jagielski IcnViewFieldTypeImage = 1, 98*b1cdbd2cSJim Jagielski IcnViewFieldTypeText = 2 99*b1cdbd2cSJim Jagielski }; 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////////////// 102*b1cdbd2cSJim Jagielski // 103*b1cdbd2cSJim Jagielski // Data about the focus of entries 104*b1cdbd2cSJim Jagielski // 105*b1cdbd2cSJim Jagielski struct LocalFocus 106*b1cdbd2cSJim Jagielski { 107*b1cdbd2cSJim Jagielski sal_Bool bOn; 108*b1cdbd2cSJim Jagielski Rectangle aRect; 109*b1cdbd2cSJim Jagielski Color aPenColor; 110*b1cdbd2cSJim Jagielski LocalFocusLocalFocus111*b1cdbd2cSJim Jagielski LocalFocus() { bOn = sal_False; } 112*b1cdbd2cSJim Jagielski }; 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////////////// 115*b1cdbd2cSJim Jagielski // 116*b1cdbd2cSJim Jagielski // Entry-List 117*b1cdbd2cSJim Jagielski // 118*b1cdbd2cSJim Jagielski class EntryList_Impl : public List 119*b1cdbd2cSJim Jagielski { 120*b1cdbd2cSJim Jagielski private: 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski using List::Replace; 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski SvxIconChoiceCtrl_Impl* _pOwner; 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski void Removed_Impl( SvxIconChoiceCtrlEntry* pEntry ); 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski public: 129*b1cdbd2cSJim Jagielski EntryList_Impl( 130*b1cdbd2cSJim Jagielski SvxIconChoiceCtrl_Impl*, 131*b1cdbd2cSJim Jagielski sal_uInt16 _nInitSize = 1024, 132*b1cdbd2cSJim Jagielski sal_uInt16 _nReSize = 1024 ); 133*b1cdbd2cSJim Jagielski EntryList_Impl( 134*b1cdbd2cSJim Jagielski SvxIconChoiceCtrl_Impl*, 135*b1cdbd2cSJim Jagielski sal_uInt16 _nBlockSize, 136*b1cdbd2cSJim Jagielski sal_uInt16 _nInitSize, 137*b1cdbd2cSJim Jagielski sal_uInt16 _nReSize ); 138*b1cdbd2cSJim Jagielski ~EntryList_Impl(); 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski void Clear(); 141*b1cdbd2cSJim Jagielski void Insert( SvxIconChoiceCtrlEntry* pEntry, sal_uLong nPos ); 142*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* Remove( sal_uLong nPos ); 143*b1cdbd2cSJim Jagielski void Remove( SvxIconChoiceCtrlEntry* pEntry ); 144*b1cdbd2cSJim Jagielski }; 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski /////////////////////////////////////////////////////////////////////////////// 148*b1cdbd2cSJim Jagielski // 149*b1cdbd2cSJim Jagielski // Implementation-class of IconChoiceCtrl 150*b1cdbd2cSJim Jagielski // 151*b1cdbd2cSJim Jagielski class SvxIconChoiceCtrl_Impl 152*b1cdbd2cSJim Jagielski { 153*b1cdbd2cSJim Jagielski friend class IcnCursor_Impl; 154*b1cdbd2cSJim Jagielski friend class EntryList_Impl; 155*b1cdbd2cSJim Jagielski friend class IcnGridMap_Impl; 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski sal_Bool bChooseWithCursor; 158*b1cdbd2cSJim Jagielski EntryList_Impl aEntries; 159*b1cdbd2cSJim Jagielski ScrollBar aVerSBar; 160*b1cdbd2cSJim Jagielski ScrollBar aHorSBar; 161*b1cdbd2cSJim Jagielski ScrollBarBox aScrBarBox; 162*b1cdbd2cSJim Jagielski Rectangle aCurSelectionRect; 163*b1cdbd2cSJim Jagielski SvPtrarr aSelectedRectList; 164*b1cdbd2cSJim Jagielski Timer aEditTimer; // fuer Inplace-Editieren 165*b1cdbd2cSJim Jagielski Timer aAutoArrangeTimer; 166*b1cdbd2cSJim Jagielski Timer aDocRectChangedTimer; 167*b1cdbd2cSJim Jagielski Timer aVisRectChangedTimer; 168*b1cdbd2cSJim Jagielski Timer aCallSelectHdlTimer; 169*b1cdbd2cSJim Jagielski Size aVirtOutputSize; 170*b1cdbd2cSJim Jagielski Size aImageSize; 171*b1cdbd2cSJim Jagielski Size aDefaultTextSize; 172*b1cdbd2cSJim Jagielski Size aOutputSize; // Pixel 173*b1cdbd2cSJim Jagielski Point aDDLastEntryPos; 174*b1cdbd2cSJim Jagielski Point aDDLastRectPos; 175*b1cdbd2cSJim Jagielski Point aDDPaintOffs; 176*b1cdbd2cSJim Jagielski Point aDDStartPos; 177*b1cdbd2cSJim Jagielski SvtIconChoiceCtrl* pView; 178*b1cdbd2cSJim Jagielski IcnCursor_Impl* pImpCursor; 179*b1cdbd2cSJim Jagielski IcnGridMap_Impl* pGridMap; 180*b1cdbd2cSJim Jagielski long nMaxVirtWidth; // max. Breite aVirtOutputSize bei ALIGN_TOP 181*b1cdbd2cSJim Jagielski long nMaxVirtHeight; // max. Hoehe aVirtOutputSize bei ALIGN_LEFT 182*b1cdbd2cSJim Jagielski List* pZOrderList; 183*b1cdbd2cSJim Jagielski SvPtrarr* pColumns; 184*b1cdbd2cSJim Jagielski IcnViewEdit_Impl* pEdit; 185*b1cdbd2cSJim Jagielski WinBits nWinBits; 186*b1cdbd2cSJim Jagielski long nMaxBoundHeight; // Hoehe des hoechsten BoundRects 187*b1cdbd2cSJim Jagielski sal_uInt16 nFlags; 188*b1cdbd2cSJim Jagielski sal_uInt16 nCurTextDrawFlags; 189*b1cdbd2cSJim Jagielski sal_uLong nUserEventAdjustScrBars; 190*b1cdbd2cSJim Jagielski sal_uLong nUserEventShowCursor; 191*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pCurHighlightFrame; 192*b1cdbd2cSJim Jagielski sal_Bool bHighlightFramePressed; 193*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pHead; // Eintrag oben links 194*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pCursor; 195*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pPrevDropTarget; 196*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pHdlEntry; 197*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pDDRefEntry; 198*b1cdbd2cSJim Jagielski VirtualDevice* pDDDev; 199*b1cdbd2cSJim Jagielski VirtualDevice* pDDBufDev; 200*b1cdbd2cSJim Jagielski VirtualDevice* pDDTempDev; 201*b1cdbd2cSJim Jagielski VirtualDevice* pEntryPaintDev; 202*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pAnchor; // fuer Selektion 203*b1cdbd2cSJim Jagielski LocalFocus aFocus; // Data for focusrect 204*b1cdbd2cSJim Jagielski ::svt::AccessibleFactoryAccess aAccFactory; 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski List* pDraggedSelection; 207*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pCurEditedEntry; 208*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlTextMode eTextMode; 209*b1cdbd2cSJim Jagielski SelectionMode eSelectionMode; 210*b1cdbd2cSJim Jagielski sal_uLong nSelectionCount; 211*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlPositionMode ePositionMode; 212*b1cdbd2cSJim Jagielski sal_Bool bBoundRectsDirty; 213*b1cdbd2cSJim Jagielski sal_Bool bUpdateMode; 214*b1cdbd2cSJim Jagielski sal_Bool bEntryEditingEnabled; 215*b1cdbd2cSJim Jagielski sal_Bool bInDragDrop; 216*b1cdbd2cSJim Jagielski 217*b1cdbd2cSJim Jagielski void ShowCursor( sal_Bool bShow ); 218*b1cdbd2cSJim Jagielski 219*b1cdbd2cSJim Jagielski void ImpArrange( sal_Bool bKeepPredecessors = sal_False ); 220*b1cdbd2cSJim Jagielski void AdjustVirtSize( const Rectangle& ); 221*b1cdbd2cSJim Jagielski void ResetVirtSize(); 222*b1cdbd2cSJim Jagielski void CheckScrollBars(); 223*b1cdbd2cSJim Jagielski 224*b1cdbd2cSJim Jagielski DECL_LINK( ScrollUpDownHdl, ScrollBar * ); 225*b1cdbd2cSJim Jagielski DECL_LINK( ScrollLeftRightHdl, ScrollBar * ); 226*b1cdbd2cSJim Jagielski DECL_LINK( EditTimeoutHdl, Timer* ); 227*b1cdbd2cSJim Jagielski DECL_LINK( UserEventHdl, void* ); 228*b1cdbd2cSJim Jagielski DECL_LINK( EndScrollHdl, void* ); 229*b1cdbd2cSJim Jagielski DECL_LINK( AutoArrangeHdl, void* ); 230*b1cdbd2cSJim Jagielski DECL_LINK( DocRectChangedHdl, void* ); 231*b1cdbd2cSJim Jagielski DECL_LINK( VisRectChangedHdl, void* ); 232*b1cdbd2cSJim Jagielski DECL_LINK( CallSelectHdlHdl, void* ); 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski void AdjustScrollBars( sal_Bool bVirtSizeGrowedOnly = sal_False); 235*b1cdbd2cSJim Jagielski void PositionScrollBars( long nRealWidth, long nRealHeight ); GetScrollBarPageSize(long nVisibleRange) const236*b1cdbd2cSJim Jagielski long GetScrollBarPageSize( long nVisibleRange ) const { return ((nVisibleRange*75)/100); } GetScrollBarLineSize() const237*b1cdbd2cSJim Jagielski long GetScrollBarLineSize() const { return nMaxBoundHeight / 2; } 238*b1cdbd2cSJim Jagielski sal_Bool HandleScrollCommand( const CommandEvent& rCmd ); ToDocPos(Point & rPosPixel)239*b1cdbd2cSJim Jagielski void ToDocPos( Point& rPosPixel ) { rPosPixel -= pView->GetMapMode().GetOrigin(); } 240*b1cdbd2cSJim Jagielski void InitScrollBarBox(); 241*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* FindNewCursor(); 242*b1cdbd2cSJim Jagielski void ToggleSelection( SvxIconChoiceCtrlEntry* ); 243*b1cdbd2cSJim Jagielski void DeselectAllBut( SvxIconChoiceCtrlEntry*, sal_Bool bPaintSync=sal_False ); 244*b1cdbd2cSJim Jagielski void Center( SvxIconChoiceCtrlEntry* pEntry ) const; StopEditTimer()245*b1cdbd2cSJim Jagielski void StopEditTimer() { aEditTimer.Stop(); } StartEditTimer()246*b1cdbd2cSJim Jagielski void StartEditTimer() { aEditTimer.Start(); } 247*b1cdbd2cSJim Jagielski void ImpHideDDIcon(); 248*b1cdbd2cSJim Jagielski void CallSelectHandler( SvxIconChoiceCtrlEntry* ); 249*b1cdbd2cSJim Jagielski void SelectRect( 250*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pEntry1, 251*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pEntry2, 252*b1cdbd2cSJim Jagielski sal_Bool bAdd = sal_True, 253*b1cdbd2cSJim Jagielski SvPtrarr* pOtherRects = 0 ); 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski void SelectRange( 256*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pStart, 257*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pEnd, 258*b1cdbd2cSJim Jagielski sal_Bool bAdd = sal_True ); 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski void AddSelectedRect( const Rectangle& ); 261*b1cdbd2cSJim Jagielski void AddSelectedRect( 262*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pEntry1, 263*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pEntry2 ); 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski void ClearSelectedRectList(); 266*b1cdbd2cSJim Jagielski void ClearColumnList(); 267*b1cdbd2cSJim Jagielski Rectangle CalcMaxTextRect( const SvxIconChoiceCtrlEntry* pEntry ) const; 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim Jagielski void ClipAtVirtOutRect( Rectangle& rRect ) const; 270*b1cdbd2cSJim Jagielski void AdjustAtGrid( const SvPtrarr& rRow, SvxIconChoiceCtrlEntry* pStart=0 ); 271*b1cdbd2cSJim Jagielski Point AdjustAtGrid( 272*b1cdbd2cSJim Jagielski const Rectangle& rCenterRect, // "Schwerpunkt" des Objekts (typ. Bmp-Rect) 273*b1cdbd2cSJim Jagielski const Rectangle& rBoundRect ) const; 274*b1cdbd2cSJim Jagielski sal_uLong GetPredecessorGrid( const Point& rDocPos) const; 275*b1cdbd2cSJim Jagielski 276*b1cdbd2cSJim Jagielski void InitPredecessors(); 277*b1cdbd2cSJim Jagielski void ClearPredecessors(); 278*b1cdbd2cSJim Jagielski 279*b1cdbd2cSJim Jagielski sal_Bool CheckVerScrollBar(); 280*b1cdbd2cSJim Jagielski sal_Bool CheckHorScrollBar(); 281*b1cdbd2cSJim Jagielski void CancelUserEvents(); 282*b1cdbd2cSJim Jagielski void EntrySelected( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bSelect, 283*b1cdbd2cSJim Jagielski sal_Bool bSyncPaint ); 284*b1cdbd2cSJim Jagielski void SaveSelection( List** ); 285*b1cdbd2cSJim Jagielski void RepaintEntries( sal_uInt16 nEntryFlagsMask ); 286*b1cdbd2cSJim Jagielski void SetListPositions(); 287*b1cdbd2cSJim Jagielski void SetDefaultTextSize(); IsAutoArrange() const288*b1cdbd2cSJim Jagielski sal_Bool IsAutoArrange() const { 289*b1cdbd2cSJim Jagielski return (sal_Bool)(ePositionMode == IcnViewPositionModeAutoArrange); } IsAutoAdjust() const290*b1cdbd2cSJim Jagielski sal_Bool IsAutoAdjust() const { 291*b1cdbd2cSJim Jagielski return (sal_Bool)(ePositionMode == IcnViewPositionModeAutoAdjust); } DocRectChanged()292*b1cdbd2cSJim Jagielski void DocRectChanged() { aDocRectChangedTimer.Start(); } VisRectChanged()293*b1cdbd2cSJim Jagielski void VisRectChanged() { aVisRectChangedTimer.Start(); } 294*b1cdbd2cSJim Jagielski void SetOrigin( const Point&, sal_Bool bDoNotUpdateWallpaper = sal_False ); 295*b1cdbd2cSJim Jagielski 296*b1cdbd2cSJim Jagielski DECL_LINK( TextEditEndedHdl, IcnViewEdit_Impl* ); 297*b1cdbd2cSJim Jagielski 298*b1cdbd2cSJim Jagielski void ShowFocus ( Rectangle& rRect ); 299*b1cdbd2cSJim Jagielski void HideFocus (); 300*b1cdbd2cSJim Jagielski void DrawFocusRect ( OutputDevice* pOut ); 301*b1cdbd2cSJim Jagielski 302*b1cdbd2cSJim Jagielski sal_Bool IsMnemonicChar( sal_Unicode cChar, sal_uLong& rPos ) const; 303*b1cdbd2cSJim Jagielski 304*b1cdbd2cSJim Jagielski public: 305*b1cdbd2cSJim Jagielski 306*b1cdbd2cSJim Jagielski long nGridDX, 307*b1cdbd2cSJim Jagielski nGridDY; 308*b1cdbd2cSJim Jagielski long nHorSBarHeight, 309*b1cdbd2cSJim Jagielski nVerSBarWidth; 310*b1cdbd2cSJim Jagielski 311*b1cdbd2cSJim Jagielski SvxIconChoiceCtrl_Impl( SvtIconChoiceCtrl* pView, WinBits nWinStyle ); 312*b1cdbd2cSJim Jagielski ~SvxIconChoiceCtrl_Impl(); 313*b1cdbd2cSJim Jagielski SetChoiceWithCursor(sal_Bool bDo=sal_True)314*b1cdbd2cSJim Jagielski sal_Bool SetChoiceWithCursor ( sal_Bool bDo = sal_True ) { sal_Bool bOld=bChooseWithCursor; bChooseWithCursor = bDo; return bOld; } 315*b1cdbd2cSJim Jagielski void Clear( sal_Bool bInCtor = sal_False ); 316*b1cdbd2cSJim Jagielski void SetStyle( WinBits nWinStyle ); GetStyle() const317*b1cdbd2cSJim Jagielski WinBits GetStyle() const { return nWinBits; } 318*b1cdbd2cSJim Jagielski void InsertEntry( SvxIconChoiceCtrlEntry*, sal_uLong nPos, const Point* pPos=0 ); 319*b1cdbd2cSJim Jagielski void CreateAutoMnemonics( MnemonicGenerator* _pGenerator = NULL ); 320*b1cdbd2cSJim Jagielski void RemoveEntry( SvxIconChoiceCtrlEntry* pEntry ); 321*b1cdbd2cSJim Jagielski void FontModified(); 322*b1cdbd2cSJim Jagielski void SelectAll( sal_Bool bSelect = sal_True, sal_Bool bPaint = sal_True ); 323*b1cdbd2cSJim Jagielski void SelectEntry( 324*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry*, 325*b1cdbd2cSJim Jagielski sal_Bool bSelect, 326*b1cdbd2cSJim Jagielski sal_Bool bCallHdl = sal_True, 327*b1cdbd2cSJim Jagielski sal_Bool bAddToSelection = sal_False, 328*b1cdbd2cSJim Jagielski sal_Bool bSyncPaint = sal_False ); 329*b1cdbd2cSJim Jagielski void Paint( const Rectangle& rRect ); 330*b1cdbd2cSJim Jagielski sal_Bool MouseButtonDown( const MouseEvent& ); 331*b1cdbd2cSJim Jagielski sal_Bool MouseButtonUp( const MouseEvent& ); 332*b1cdbd2cSJim Jagielski sal_Bool MouseMove( const MouseEvent&); 333*b1cdbd2cSJim Jagielski sal_Bool RequestHelp( const HelpEvent& rHEvt ); 334*b1cdbd2cSJim Jagielski void SetCursor_Impl( 335*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pOldCursor, 336*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pNewCursor, 337*b1cdbd2cSJim Jagielski sal_Bool bMod1, 338*b1cdbd2cSJim Jagielski sal_Bool bShift, 339*b1cdbd2cSJim Jagielski sal_Bool bPaintSync = sal_False); 340*b1cdbd2cSJim Jagielski sal_Bool KeyInput( const KeyEvent& ); 341*b1cdbd2cSJim Jagielski void Resize(); 342*b1cdbd2cSJim Jagielski void GetFocus(); 343*b1cdbd2cSJim Jagielski void LoseFocus(); 344*b1cdbd2cSJim Jagielski void SetUpdateMode( sal_Bool bUpdate ); GetUpdateMode() const345*b1cdbd2cSJim Jagielski sal_Bool GetUpdateMode() const { return bUpdateMode; } 346*b1cdbd2cSJim Jagielski void PaintEntry( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bIsBackgroundPainted=sal_False ); 347*b1cdbd2cSJim Jagielski void PaintEntry( 348*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry*, 349*b1cdbd2cSJim Jagielski const Point&, 350*b1cdbd2cSJim Jagielski OutputDevice* pOut = 0, 351*b1cdbd2cSJim Jagielski sal_Bool bIsBackgroundPainted = sal_False); 352*b1cdbd2cSJim Jagielski void PaintEntryVirtOutDev( SvxIconChoiceCtrlEntry* ); 353*b1cdbd2cSJim Jagielski 354*b1cdbd2cSJim Jagielski void SetEntryPos( 355*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pEntry, 356*b1cdbd2cSJim Jagielski const Point& rPos, 357*b1cdbd2cSJim Jagielski sal_Bool bAdjustRow = sal_False, 358*b1cdbd2cSJim Jagielski sal_Bool bCheckScrollBars = sal_False, 359*b1cdbd2cSJim Jagielski sal_Bool bKeepGridMap = sal_False ); 360*b1cdbd2cSJim Jagielski 361*b1cdbd2cSJim Jagielski void InvalidateEntry( SvxIconChoiceCtrlEntry* ); 362*b1cdbd2cSJim Jagielski IcnViewFieldType GetItem( SvxIconChoiceCtrlEntry*, const Point& rAbsPos ); 363*b1cdbd2cSJim Jagielski 364*b1cdbd2cSJim Jagielski void SetNoSelection(); 365*b1cdbd2cSJim Jagielski GetCurEntry() const366*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GetCurEntry() const { return pCursor; } 367*b1cdbd2cSJim Jagielski void SetCursor( 368*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry*, 369*b1cdbd2cSJim Jagielski // sal_True == bei Single-Selection die Sel. mitfuehren 370*b1cdbd2cSJim Jagielski sal_Bool bSyncSingleSelection = sal_True, 371*b1cdbd2cSJim Jagielski sal_Bool bShowFocusAsync = sal_False ); 372*b1cdbd2cSJim Jagielski 373*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GetEntry( const Point& rDocPos, sal_Bool bHit = sal_False ); 374*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GetNextEntry( const Point& rDocPos, SvxIconChoiceCtrlEntry* pCurEntry ); 375*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GetPrevEntry( const Point& rDocPos, SvxIconChoiceCtrlEntry* pCurEntry ); 376*b1cdbd2cSJim Jagielski 377*b1cdbd2cSJim Jagielski Point GetEntryPos( SvxIconChoiceCtrlEntry* ); 378*b1cdbd2cSJim Jagielski void MakeEntryVisible( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bBound = sal_True ); 379*b1cdbd2cSJim Jagielski 380*b1cdbd2cSJim Jagielski void Arrange(sal_Bool bKeepPredecessors = sal_False, long nSetMaxVirtWidth =0, long nSetMaxVirtHeight =0 ); 381*b1cdbd2cSJim Jagielski 382*b1cdbd2cSJim Jagielski Rectangle CalcFocusRect( SvxIconChoiceCtrlEntry* ); 383*b1cdbd2cSJim Jagielski Rectangle CalcBmpRect( SvxIconChoiceCtrlEntry*, const Point* pPos = 0 ); 384*b1cdbd2cSJim Jagielski Rectangle CalcTextRect( 385*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry*, 386*b1cdbd2cSJim Jagielski const Point* pPos = 0, 387*b1cdbd2cSJim Jagielski sal_Bool bForInplaceEdit = sal_False, 388*b1cdbd2cSJim Jagielski const String* pStr = 0 ); 389*b1cdbd2cSJim Jagielski 390*b1cdbd2cSJim Jagielski long CalcBoundingWidth( SvxIconChoiceCtrlEntry* ) const; 391*b1cdbd2cSJim Jagielski long CalcBoundingHeight( SvxIconChoiceCtrlEntry* ) const; 392*b1cdbd2cSJim Jagielski Size CalcBoundingSize( SvxIconChoiceCtrlEntry* ) const; 393*b1cdbd2cSJim Jagielski void FindBoundingRect( SvxIconChoiceCtrlEntry* pEntry ); 394*b1cdbd2cSJim Jagielski void SetBoundingRect_Impl( 395*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pEntry, 396*b1cdbd2cSJim Jagielski const Point& rPos, 397*b1cdbd2cSJim Jagielski const Size& rBoundingSize ); 398*b1cdbd2cSJim Jagielski // berechnet alle BoundRects neu 399*b1cdbd2cSJim Jagielski void RecalcAllBoundingRects(); 400*b1cdbd2cSJim Jagielski // berechnet alle ungueltigen BoundRects neu 401*b1cdbd2cSJim Jagielski void RecalcAllBoundingRectsSmart(); 402*b1cdbd2cSJim Jagielski const Rectangle& GetEntryBoundRect( SvxIconChoiceCtrlEntry* ); 403*b1cdbd2cSJim Jagielski void InvalidateBoundingRect( SvxIconChoiceCtrlEntry* ); InvalidateBoundingRect(Rectangle & rRect)404*b1cdbd2cSJim Jagielski void InvalidateBoundingRect( Rectangle& rRect ) { rRect.Right() = LONG_MAX; bBoundRectsDirty = sal_True; } IsBoundingRectValid(const Rectangle & rRect) const405*b1cdbd2cSJim Jagielski sal_Bool IsBoundingRectValid( const Rectangle& rRect ) const { return (sal_Bool)( rRect.Right() != LONG_MAX ); } 406*b1cdbd2cSJim Jagielski 407*b1cdbd2cSJim Jagielski void PaintEmphasis( 408*b1cdbd2cSJim Jagielski const Rectangle& rRect1, 409*b1cdbd2cSJim Jagielski const Rectangle& rRect2, 410*b1cdbd2cSJim Jagielski sal_Bool bSelected, 411*b1cdbd2cSJim Jagielski sal_Bool bDropTarget, 412*b1cdbd2cSJim Jagielski sal_Bool bCursored, 413*b1cdbd2cSJim Jagielski OutputDevice* pOut, 414*b1cdbd2cSJim Jagielski sal_Bool bIsBackgroundPainted = sal_False); 415*b1cdbd2cSJim Jagielski 416*b1cdbd2cSJim Jagielski void PaintItem( 417*b1cdbd2cSJim Jagielski const Rectangle& rRect, 418*b1cdbd2cSJim Jagielski IcnViewFieldType eItem, 419*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pEntry, 420*b1cdbd2cSJim Jagielski sal_uInt16 nPaintFlags, 421*b1cdbd2cSJim Jagielski OutputDevice* pOut, 422*b1cdbd2cSJim Jagielski const String* pStr = 0, 423*b1cdbd2cSJim Jagielski ::vcl::ControlLayoutData* _pLayoutData = NULL ); 424*b1cdbd2cSJim Jagielski 425*b1cdbd2cSJim Jagielski // berechnet alle BoundingRects neu, wenn bMustRecalcBoundingRects == sal_True CheckBoundingRects()426*b1cdbd2cSJim Jagielski void CheckBoundingRects() { if (bBoundRectsDirty) RecalcAllBoundingRectsSmart(); } 427*b1cdbd2cSJim Jagielski // berechnet alle invalidierten BoundingRects neu 428*b1cdbd2cSJim Jagielski void UpdateBoundingRects(); 429*b1cdbd2cSJim Jagielski void ShowTargetEmphasis( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bShow ); 430*b1cdbd2cSJim Jagielski void PrepareCommandEvent( const CommandEvent& ); 431*b1cdbd2cSJim Jagielski void Command( const CommandEvent& rCEvt ); 432*b1cdbd2cSJim Jagielski void ToTop( SvxIconChoiceCtrlEntry* ); 433*b1cdbd2cSJim Jagielski 434*b1cdbd2cSJim Jagielski sal_uLong GetSelectionCount() const; 435*b1cdbd2cSJim Jagielski void SetGrid( const Size& ); 436*b1cdbd2cSJim Jagielski Size GetMinGrid() const; 437*b1cdbd2cSJim Jagielski sal_uLong GetGridCount( 438*b1cdbd2cSJim Jagielski const Size& rSize, 439*b1cdbd2cSJim Jagielski sal_Bool bCheckScrBars, 440*b1cdbd2cSJim Jagielski sal_Bool bSmartScrBar ) const; 441*b1cdbd2cSJim Jagielski void Scroll( long nDeltaX, long nDeltaY, sal_Bool bScrollBar = sal_False ); 442*b1cdbd2cSJim Jagielski const Size& GetItemSize( SvxIconChoiceCtrlEntry*, IcnViewFieldType ) const; 443*b1cdbd2cSJim Jagielski 444*b1cdbd2cSJim Jagielski void HideDDIcon(); 445*b1cdbd2cSJim Jagielski void ShowDDIcon( SvxIconChoiceCtrlEntry* pRefEntry, const Point& rPos ); 446*b1cdbd2cSJim Jagielski void HideShowDDIcon( 447*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pRefEntry, 448*b1cdbd2cSJim Jagielski const Point& rPos ); 449*b1cdbd2cSJim Jagielski 450*b1cdbd2cSJim Jagielski sal_Bool IsOver( 451*b1cdbd2cSJim Jagielski SvPtrarr* pSelectedRectList, 452*b1cdbd2cSJim Jagielski const Rectangle& rEntryBoundRect ) const; 453*b1cdbd2cSJim Jagielski 454*b1cdbd2cSJim Jagielski void SelectRect( 455*b1cdbd2cSJim Jagielski const Rectangle&, 456*b1cdbd2cSJim Jagielski sal_Bool bAdd = sal_True, 457*b1cdbd2cSJim Jagielski SvPtrarr* pOtherRects = 0 ); 458*b1cdbd2cSJim Jagielski 459*b1cdbd2cSJim Jagielski void CalcScrollOffsets( 460*b1cdbd2cSJim Jagielski const Point& rRefPosPixel, 461*b1cdbd2cSJim Jagielski long& rX, 462*b1cdbd2cSJim Jagielski long& rY, 463*b1cdbd2cSJim Jagielski sal_Bool bDragDrop = sal_False, 464*b1cdbd2cSJim Jagielski sal_uInt16 nBorderWidth = 10 ); 465*b1cdbd2cSJim Jagielski 466*b1cdbd2cSJim Jagielski sal_Bool IsTextHit( SvxIconChoiceCtrlEntry* pEntry, const Point& rDocPos ); 467*b1cdbd2cSJim Jagielski void MakeVisible( 468*b1cdbd2cSJim Jagielski const Rectangle& rDocPos, 469*b1cdbd2cSJim Jagielski sal_Bool bInScrollBarEvent=sal_False, 470*b1cdbd2cSJim Jagielski sal_Bool bCallRectChangedHdl = sal_True ); 471*b1cdbd2cSJim Jagielski 472*b1cdbd2cSJim Jagielski void AdjustEntryAtGrid( SvxIconChoiceCtrlEntry* pStart = 0 ); 473*b1cdbd2cSJim Jagielski void SetEntryTextMode( SvxIconChoiceCtrlTextMode, SvxIconChoiceCtrlEntry* pEntry = 0 ); 474*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlTextMode GetTextMode( const SvxIconChoiceCtrlEntry* pEntry = 0 ) const; 475*b1cdbd2cSJim Jagielski void ShowEntryFocusRect( const SvxIconChoiceCtrlEntry* pEntry ); EnableEntryEditing(sal_Bool bEnable)476*b1cdbd2cSJim Jagielski void EnableEntryEditing( sal_Bool bEnable ) { bEntryEditingEnabled = bEnable; } IsEntryEditingEnabled() const477*b1cdbd2cSJim Jagielski sal_Bool IsEntryEditingEnabled() const { return bEntryEditingEnabled; } IsEntryEditing() const478*b1cdbd2cSJim Jagielski sal_Bool IsEntryEditing() const { return (sal_Bool)(pCurEditedEntry!=0); } 479*b1cdbd2cSJim Jagielski void EditEntry( SvxIconChoiceCtrlEntry* pEntry ); 480*b1cdbd2cSJim Jagielski void StopEntryEditing( sal_Bool bCancel ); 481*b1cdbd2cSJim Jagielski void LockEntryPos( SvxIconChoiceCtrlEntry* pEntry, sal_Bool bLock ); GetEntryCount() const482*b1cdbd2cSJim Jagielski sal_uLong GetEntryCount() const { return aEntries.Count(); } GetEntry(sal_uLong nPos) const483*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GetEntry( sal_uLong nPos ) const { return (SvxIconChoiceCtrlEntry*)aEntries.GetObject(nPos); } 484*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GetFirstSelectedEntry( sal_uLong& ) const; 485*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GetNextSelectedEntry( sal_uLong& ) const; GetHdlEntry() const486*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GetHdlEntry() const { return pHdlEntry; } SetHdlEntry(SvxIconChoiceCtrlEntry * pEntry)487*b1cdbd2cSJim Jagielski void SetHdlEntry( SvxIconChoiceCtrlEntry* pEntry ) { pHdlEntry = pEntry; } 488*b1cdbd2cSJim Jagielski 489*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlTextMode GetEntryTextModeSmart( const SvxIconChoiceCtrlEntry* pEntry ) const; SetSelectionMode(SelectionMode eMode)490*b1cdbd2cSJim Jagielski void SetSelectionMode( SelectionMode eMode ) { eSelectionMode=eMode; } GetSelectionMode() const491*b1cdbd2cSJim Jagielski SelectionMode GetSelectionMode() const { return eSelectionMode; } AreEntriesMoved() const492*b1cdbd2cSJim Jagielski sal_Bool AreEntriesMoved() const { return (sal_Bool)((nFlags & F_MOVED_ENTRIES)!=0); } SetEntriesMoved(sal_Bool bMoved)493*b1cdbd2cSJim Jagielski void SetEntriesMoved( sal_Bool bMoved ) 494*b1cdbd2cSJim Jagielski { 495*b1cdbd2cSJim Jagielski if( bMoved ) nFlags |= F_MOVED_ENTRIES; 496*b1cdbd2cSJim Jagielski else nFlags &= ~(F_MOVED_ENTRIES); 497*b1cdbd2cSJim Jagielski } 498*b1cdbd2cSJim Jagielski sal_uLong GetEntryListPos( SvxIconChoiceCtrlEntry* ) const; 499*b1cdbd2cSJim Jagielski void SetEntryListPos( SvxIconChoiceCtrlEntry* pEntry, sal_uLong nNewPos ); SetEntryImageSize(const Size & rSize)500*b1cdbd2cSJim Jagielski void SetEntryImageSize( const Size& rSize ) { aImageSize = rSize; } 501*b1cdbd2cSJim Jagielski void SetEntryFlags( SvxIconChoiceCtrlEntry* pEntry, sal_uInt16 nFlags ); 502*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GoLeftRight( SvxIconChoiceCtrlEntry*, sal_Bool bRight ); 503*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GoUpDown( SvxIconChoiceCtrlEntry*, sal_Bool bDown ); 504*b1cdbd2cSJim Jagielski void InitSettings(); 505*b1cdbd2cSJim Jagielski Rectangle GetOutputRect() const; 506*b1cdbd2cSJim Jagielski ArePredecessorsSet() const507*b1cdbd2cSJim Jagielski sal_Bool ArePredecessorsSet() const { return (sal_Bool)(pHead != 0); } GetPredecessorHead() const508*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GetPredecessorHead() const { return pHead; } 509*b1cdbd2cSJim Jagielski void SetEntryPredecessor(SvxIconChoiceCtrlEntry* pEntry,SvxIconChoiceCtrlEntry* pPredecessor); 510*b1cdbd2cSJim Jagielski sal_Bool GetEntryPredecessor(SvxIconChoiceCtrlEntry* pEntry,SvxIconChoiceCtrlEntry** ppPredecessor); 511*b1cdbd2cSJim Jagielski // liefert gueltige Ergebnisse nur im AutoArrange-Modus! 512*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* FindEntryPredecessor( SvxIconChoiceCtrlEntry* pEntry, const Point& ); 513*b1cdbd2cSJim Jagielski 514*b1cdbd2cSJim Jagielski void SetPositionMode( SvxIconChoiceCtrlPositionMode ); GetPositionMode() const515*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlPositionMode GetPositionMode() const { return ePositionMode;} 516*b1cdbd2cSJim Jagielski 517*b1cdbd2cSJim Jagielski void Flush(); 518*b1cdbd2cSJim Jagielski void SetColumn( sal_uInt16 nIndex, const SvxIconChoiceCtrlColumnInfo& ); 519*b1cdbd2cSJim Jagielski const SvxIconChoiceCtrlColumnInfo* GetColumn( sal_uInt16 nIndex ) const; 520*b1cdbd2cSJim Jagielski const SvxIconChoiceCtrlColumnInfo* GetItemColumn( sal_uInt16 nSubItem, long& rLeft ) const; 521*b1cdbd2cSJim Jagielski GetDocumentRect() const522*b1cdbd2cSJim Jagielski Rectangle GetDocumentRect() const { return Rectangle( Point(), aVirtOutputSize ); } GetVisibleRect() const523*b1cdbd2cSJim Jagielski Rectangle GetVisibleRect() const { return GetOutputRect(); } 524*b1cdbd2cSJim Jagielski 525*b1cdbd2cSJim Jagielski void SetEntryHighlightFrame( SvxIconChoiceCtrlEntry* pEntry,sal_Bool bKeepHighlightFlags=sal_False ); 526*b1cdbd2cSJim Jagielski void HideEntryHighlightFrame(); 527*b1cdbd2cSJim Jagielski void DrawHighlightFrame( OutputDevice* pOut, 528*b1cdbd2cSJim Jagielski const Rectangle& rBmpRect, sal_Bool bHide ); StopSelectTimer()529*b1cdbd2cSJim Jagielski void StopSelectTimer() { aCallSelectHdlTimer.Stop(); } 530*b1cdbd2cSJim Jagielski void Tracking( const TrackingEvent& rTEvt ); 531*b1cdbd2cSJim Jagielski Point GetPopupMenuPosPixel() const; 532*b1cdbd2cSJim Jagielski 533*b1cdbd2cSJim Jagielski sal_Bool HandleShortCutKey( const KeyEvent& rKeyEvent ); 534*b1cdbd2cSJim Jagielski 535*b1cdbd2cSJim Jagielski void CallEventListeners( sal_uLong nEvent, void* pData = NULL ); 536*b1cdbd2cSJim Jagielski 537*b1cdbd2cSJim Jagielski inline ::svt::IAccessibleFactory& GetAccessibleFactory()538*b1cdbd2cSJim Jagielski GetAccessibleFactory() { return aAccFactory.getFactory(); } 539*b1cdbd2cSJim Jagielski }; 540*b1cdbd2cSJim Jagielski 541*b1cdbd2cSJim Jagielski // ---------------------------------------------------------------------------------------------- 542*b1cdbd2cSJim Jagielski 543*b1cdbd2cSJim Jagielski class IcnCursor_Impl 544*b1cdbd2cSJim Jagielski { 545*b1cdbd2cSJim Jagielski SvxIconChoiceCtrl_Impl* pView; 546*b1cdbd2cSJim Jagielski SvPtrarr* pColumns; 547*b1cdbd2cSJim Jagielski SvPtrarr* pRows; 548*b1cdbd2cSJim Jagielski long nCols; 549*b1cdbd2cSJim Jagielski long nRows; 550*b1cdbd2cSJim Jagielski short nDeltaWidth; 551*b1cdbd2cSJim Jagielski short nDeltaHeight; 552*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* pCurEntry; 553*b1cdbd2cSJim Jagielski void SetDeltas(); 554*b1cdbd2cSJim Jagielski void ImplCreate(); Create()555*b1cdbd2cSJim Jagielski void Create() { if( !pColumns ) ImplCreate(); } 556*b1cdbd2cSJim Jagielski 557*b1cdbd2cSJim Jagielski sal_uInt16 GetSortListPos( SvPtrarr* pList, long nValue, int bVertical); 558*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* SearchCol(sal_uInt16 nCol,sal_uInt16 nTop,sal_uInt16 nBottom,sal_uInt16 nPref, 559*b1cdbd2cSJim Jagielski sal_Bool bDown, sal_Bool bSimple ); 560*b1cdbd2cSJim Jagielski 561*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* SearchRow(sal_uInt16 nRow,sal_uInt16 nRight,sal_uInt16 nLeft,sal_uInt16 nPref, 562*b1cdbd2cSJim Jagielski sal_Bool bRight, sal_Bool bSimple ); 563*b1cdbd2cSJim Jagielski 564*b1cdbd2cSJim Jagielski public: 565*b1cdbd2cSJim Jagielski IcnCursor_Impl( SvxIconChoiceCtrl_Impl* pOwner ); 566*b1cdbd2cSJim Jagielski ~IcnCursor_Impl(); 567*b1cdbd2cSJim Jagielski void Clear(); 568*b1cdbd2cSJim Jagielski 569*b1cdbd2cSJim Jagielski // fuer Cursortravelling usw. 570*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GoLeftRight( SvxIconChoiceCtrlEntry*, sal_Bool bRight ); 571*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GoUpDown( SvxIconChoiceCtrlEntry*, sal_Bool bDown ); 572*b1cdbd2cSJim Jagielski SvxIconChoiceCtrlEntry* GoPageUpDown( SvxIconChoiceCtrlEntry*, sal_Bool bDown ); 573*b1cdbd2cSJim Jagielski 574*b1cdbd2cSJim Jagielski // Erzeugt fuer jede Zeile (Hoehe=nGridDY) eine nach BoundRect.Left() 575*b1cdbd2cSJim Jagielski // sortierte Liste der Eintraege, die in ihr stehen. Eine Liste kann 576*b1cdbd2cSJim Jagielski // leer sein. Die Listen gehen in das Eigentum des Rufenden ueber und 577*b1cdbd2cSJim Jagielski // muessen mit DestroyGridAdjustData geloescht werden 578*b1cdbd2cSJim Jagielski void CreateGridAjustData( SvPtrarr& pLists, SvxIconChoiceCtrlEntry* pRow=0); 579*b1cdbd2cSJim Jagielski static void DestroyGridAdjustData( SvPtrarr& rLists ); 580*b1cdbd2cSJim Jagielski }; 581*b1cdbd2cSJim Jagielski 582*b1cdbd2cSJim Jagielski // ---------------------------------------------------------------------------------------------- 583*b1cdbd2cSJim Jagielski 584*b1cdbd2cSJim Jagielski typedef sal_uLong GridId; 585*b1cdbd2cSJim Jagielski 586*b1cdbd2cSJim Jagielski #define GRID_NOT_FOUND ((GridId)ULONG_MAX) 587*b1cdbd2cSJim Jagielski 588*b1cdbd2cSJim Jagielski class IcnGridMap_Impl 589*b1cdbd2cSJim Jagielski { 590*b1cdbd2cSJim Jagielski Rectangle _aLastOccupiedGrid; 591*b1cdbd2cSJim Jagielski SvxIconChoiceCtrl_Impl* _pView; 592*b1cdbd2cSJim Jagielski sal_Bool* _pGridMap; 593*b1cdbd2cSJim Jagielski sal_uInt16 _nGridCols, _nGridRows; 594*b1cdbd2cSJim Jagielski 595*b1cdbd2cSJim Jagielski void Expand(); 596*b1cdbd2cSJim Jagielski void Create_Impl(); Create()597*b1cdbd2cSJim Jagielski void Create() { if(!_pGridMap) Create_Impl(); } 598*b1cdbd2cSJim Jagielski 599*b1cdbd2cSJim Jagielski void GetMinMapSize( sal_uInt16& rDX, sal_uInt16& rDY ) const; 600*b1cdbd2cSJim Jagielski 601*b1cdbd2cSJim Jagielski public: 602*b1cdbd2cSJim Jagielski IcnGridMap_Impl(SvxIconChoiceCtrl_Impl* pView); 603*b1cdbd2cSJim Jagielski ~IcnGridMap_Impl(); 604*b1cdbd2cSJim Jagielski 605*b1cdbd2cSJim Jagielski void Clear(); 606*b1cdbd2cSJim Jagielski 607*b1cdbd2cSJim Jagielski GridId GetGrid( const Point& rDocPos, sal_Bool* pbClipped = 0 ); 608*b1cdbd2cSJim Jagielski GridId GetGrid( sal_uInt16 nGridX, sal_uInt16 nGridY ); 609*b1cdbd2cSJim Jagielski GridId GetUnoccupiedGrid( sal_Bool bOccupyFound=sal_True ); 610*b1cdbd2cSJim Jagielski 611*b1cdbd2cSJim Jagielski void OccupyGrids( const Rectangle&, sal_Bool bOccupy = sal_True ); 612*b1cdbd2cSJim Jagielski void OccupyGrids( const SvxIconChoiceCtrlEntry*, sal_Bool bOccupy = sal_True ); OccupyGrid(GridId nId,sal_Bool bOccupy=sal_True)613*b1cdbd2cSJim Jagielski void OccupyGrid( GridId nId, sal_Bool bOccupy = sal_True ) 614*b1cdbd2cSJim Jagielski { 615*b1cdbd2cSJim Jagielski DBG_ASSERT(!_pGridMap || nId<(sal_uLong)(_nGridCols*_nGridRows),"OccupyGrid: Bad GridId"); 616*b1cdbd2cSJim Jagielski if(_pGridMap && nId < (sal_uLong)(_nGridCols *_nGridRows) ) 617*b1cdbd2cSJim Jagielski _pGridMap[ nId ] = bOccupy; 618*b1cdbd2cSJim Jagielski } 619*b1cdbd2cSJim Jagielski 620*b1cdbd2cSJim Jagielski Rectangle GetGridRect( GridId ); 621*b1cdbd2cSJim Jagielski void GetGridCoord( GridId, sal_uInt16& rGridX, sal_uInt16& rGridY ); 622*b1cdbd2cSJim Jagielski static sal_uLong GetGridCount( const Size& rSizePixel, sal_uInt16 nGridWidth, sal_uInt16 nGridHeight ); 623*b1cdbd2cSJim Jagielski 624*b1cdbd2cSJim Jagielski void OutputSizeChanged(); 625*b1cdbd2cSJim Jagielski }; 626*b1cdbd2cSJim Jagielski 627*b1cdbd2cSJim Jagielski 628*b1cdbd2cSJim Jagielski 629*b1cdbd2cSJim Jagielski 630*b1cdbd2cSJim Jagielski 631*b1cdbd2cSJim Jagielski #endif 632*b1cdbd2cSJim Jagielski 633*b1cdbd2cSJim Jagielski 634