diff options
Diffstat (limited to 'svtools/source/contnr/imivctl.hxx')
-rw-r--r-- | svtools/source/contnr/imivctl.hxx | 637 |
1 files changed, 637 insertions, 0 deletions
diff --git a/svtools/source/contnr/imivctl.hxx b/svtools/source/contnr/imivctl.hxx new file mode 100644 index 000000000000..cc7aa4e05ee1 --- /dev/null +++ b/svtools/source/contnr/imivctl.hxx @@ -0,0 +1,637 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _IMPICNVW_HXX +#define _IMPICNVW_HXX + +#ifndef _VIRDEV_HXX +#include <vcl/virdev.hxx> +#endif +#ifndef _SCRBAR_HXX +#include <vcl/scrbar.hxx> +#endif +#include <vcl/timer.hxx> +#include <vcl/seleng.hxx> +#include <tools/debug.hxx> +#include "svtaccessiblefactory.hxx" + +#include <limits.h> + +#include "ivctrl.hxx" +#include <svl/svarray.hxx> + +class IcnCursor_Impl; +class SvtIconChoiceCtrl; +class SvxIconChoiceCtrlEntry; +class IcnViewEdit_Impl; +class IcnGridMap_Impl; + +/////////////////////////////////////////////////////////////////////////////// +// +// some defines +// +#define PAINTFLAG_HOR_CENTERED 0x0001 +#define PAINTFLAG_VER_CENTERED 0x0002 + +#define F_VER_SBARSIZE_WITH_HBAR 0x0001 +#define F_HOR_SBARSIZE_WITH_VBAR 0x0002 +#define F_PAINTED 0x0004 // TRUE nach erstem Paint +#define F_ADD_MODE 0x0008 +#define F_SELECTING_RECT 0x0020 +#define F_DOWN_CTRL 0x0080 +#define F_DOWN_DESELECT 0x0100 +#define F_START_EDITTIMER_IN_MOUSEUP 0x0400 +#define F_MOVED_ENTRIES 0x0800 +#define F_ENTRYLISTPOS_VALID 0x1000 +#define F_CLEARING_SELECTION 0x2000 +#define F_ARRANGING 0x4000 + +// alle Angaben in Pixel +// Abstaende von Fensterraendern +#define LROFFS_WINBORDER 4 +#define TBOFFS_WINBORDER 4 +// fuer das Bounding-Rectangle +#define LROFFS_BOUND 2 +#define TBOFFS_BOUND 2 +// Abstand Fokusrechteck - Icon +#define LROFFS_ICON 2 +#define TBOFFS_ICON 2 +// Abstaende Icon - Text +#define HOR_DIST_BMP_STRING 3 +#define VER_DIST_BMP_STRING 3 +// Breitenoffset Highlight-Rect bei Text +#define LROFFS_TEXT 2 + +#define DEFAULT_MAX_VIRT_WIDTH 200 +#define DEFAULT_MAX_VIRT_HEIGHT 200 + +#define VIEWMODE_MASK (WB_ICON | WB_SMALLICON | WB_DETAILS) + +/////////////////////////////////////////////////////////////////////////////// +// +// +// +enum IcnViewFieldType +{ + IcnViewFieldTypeDontknow = 0, + IcnViewFieldTypeImage = 1, + IcnViewFieldTypeText = 2 +}; + +/////////////////////////////////////////////////////////////////////////////// +// +// Data about the focus of entries +// +struct LocalFocus +{ + BOOL bOn; + Rectangle aRect; + Color aPenColor; + + LocalFocus() { bOn = FALSE; } +}; + +/////////////////////////////////////////////////////////////////////////////// +// +// Entry-List +// +class EntryList_Impl : public List +{ +private: + + using List::Replace; + + SvxIconChoiceCtrl_Impl* _pOwner; + + void Removed_Impl( SvxIconChoiceCtrlEntry* pEntry ); + +public: + EntryList_Impl( + SvxIconChoiceCtrl_Impl*, + USHORT _nInitSize = 1024, + USHORT _nReSize = 1024 ); + EntryList_Impl( + SvxIconChoiceCtrl_Impl*, + USHORT _nBlockSize, + USHORT _nInitSize, + USHORT _nReSize ); + ~EntryList_Impl(); + + void Clear(); + void Insert( SvxIconChoiceCtrlEntry* pEntry, ULONG nPos ); + SvxIconChoiceCtrlEntry* Remove( ULONG nPos ); + void Remove( SvxIconChoiceCtrlEntry* pEntry ); +}; + + +/////////////////////////////////////////////////////////////////////////////// +// +// Implementation-class of IconChoiceCtrl +// +class SvxIconChoiceCtrl_Impl +{ + friend class IcnCursor_Impl; + friend class EntryList_Impl; + friend class IcnGridMap_Impl; + + BOOL bChooseWithCursor; + EntryList_Impl aEntries; + ScrollBar aVerSBar; + ScrollBar aHorSBar; + ScrollBarBox aScrBarBox; + Rectangle aCurSelectionRect; + SvPtrarr aSelectedRectList; + Timer aEditTimer; // fuer Inplace-Editieren + Timer aAutoArrangeTimer; + Timer aDocRectChangedTimer; + Timer aVisRectChangedTimer; + Timer aCallSelectHdlTimer; + Size aVirtOutputSize; + Size aImageSize; + Size aDefaultTextSize; + Size aOutputSize; // Pixel + Point aDDLastEntryPos; + Point aDDLastRectPos; + Point aDDPaintOffs; + Point aDDStartPos; + SvtIconChoiceCtrl* pView; + IcnCursor_Impl* pImpCursor; + IcnGridMap_Impl* pGridMap; + long nMaxVirtWidth; // max. Breite aVirtOutputSize bei ALIGN_TOP + long nMaxVirtHeight; // max. Hoehe aVirtOutputSize bei ALIGN_LEFT + List* pZOrderList; + SvPtrarr* pColumns; + IcnViewEdit_Impl* pEdit; + WinBits nWinBits; + long nMaxBoundHeight; // Hoehe des hoechsten BoundRects + USHORT nFlags; + USHORT nCurTextDrawFlags; + ULONG nUserEventAdjustScrBars; + ULONG nUserEventShowCursor; + SvxIconChoiceCtrlEntry* pCurHighlightFrame; + BOOL bHighlightFramePressed; + SvxIconChoiceCtrlEntry* pHead; // Eintrag oben links + SvxIconChoiceCtrlEntry* pCursor; + SvxIconChoiceCtrlEntry* pPrevDropTarget; + SvxIconChoiceCtrlEntry* pHdlEntry; + SvxIconChoiceCtrlEntry* pDDRefEntry; + VirtualDevice* pDDDev; + VirtualDevice* pDDBufDev; + VirtualDevice* pDDTempDev; + VirtualDevice* pEntryPaintDev; + SvxIconChoiceCtrlEntry* pAnchor; // fuer Selektion + LocalFocus aFocus; // Data for focusrect + ::svt::AccessibleFactoryAccess aAccFactory; + + List* pDraggedSelection; + SvxIconChoiceCtrlEntry* pCurEditedEntry; + SvxIconChoiceCtrlTextMode eTextMode; + SelectionMode eSelectionMode; + ULONG nSelectionCount; + SvxIconChoiceCtrlPositionMode ePositionMode; + BOOL bBoundRectsDirty; + BOOL bUpdateMode; + BOOL bEntryEditingEnabled; + BOOL bInDragDrop; + + void ShowCursor( BOOL bShow ); + + void ImpArrange( BOOL bKeepPredecessors = FALSE ); + void AdjustVirtSize( const Rectangle& ); + void ResetVirtSize(); + void CheckScrollBars(); + + DECL_LINK( ScrollUpDownHdl, ScrollBar * ); + DECL_LINK( ScrollLeftRightHdl, ScrollBar * ); + DECL_LINK( EditTimeoutHdl, Timer* ); + DECL_LINK( UserEventHdl, void* ); + DECL_LINK( EndScrollHdl, void* ); + DECL_LINK( AutoArrangeHdl, void* ); + DECL_LINK( DocRectChangedHdl, void* ); + DECL_LINK( VisRectChangedHdl, void* ); + DECL_LINK( CallSelectHdlHdl, void* ); + + void AdjustScrollBars( BOOL bVirtSizeGrowedOnly = FALSE); + void PositionScrollBars( long nRealWidth, long nRealHeight ); + long GetScrollBarPageSize( long nVisibleRange ) const { return ((nVisibleRange*75)/100); } + long GetScrollBarLineSize() const { return nMaxBoundHeight / 2; } + BOOL HandleScrollCommand( const CommandEvent& rCmd ); + void ToDocPos( Point& rPosPixel ) { rPosPixel -= pView->GetMapMode().GetOrigin(); } + void InitScrollBarBox(); + SvxIconChoiceCtrlEntry* FindNewCursor(); + void ToggleSelection( SvxIconChoiceCtrlEntry* ); + void DeselectAllBut( SvxIconChoiceCtrlEntry*, BOOL bPaintSync=FALSE ); + void Center( SvxIconChoiceCtrlEntry* pEntry ) const; + void StopEditTimer() { aEditTimer.Stop(); } + void StartEditTimer() { aEditTimer.Start(); } + void ImpHideDDIcon(); + void CallSelectHandler( SvxIconChoiceCtrlEntry* ); + void SelectRect( + SvxIconChoiceCtrlEntry* pEntry1, + SvxIconChoiceCtrlEntry* pEntry2, + BOOL bAdd = TRUE, + SvPtrarr* pOtherRects = 0 ); + + void SelectRange( + SvxIconChoiceCtrlEntry* pStart, + SvxIconChoiceCtrlEntry* pEnd, + BOOL bAdd = TRUE ); + + void AddSelectedRect( const Rectangle& ); + void AddSelectedRect( + SvxIconChoiceCtrlEntry* pEntry1, + SvxIconChoiceCtrlEntry* pEntry2 ); + + void ClearSelectedRectList(); + void ClearColumnList(); + Rectangle CalcMaxTextRect( const SvxIconChoiceCtrlEntry* pEntry ) const; + + void ClipAtVirtOutRect( Rectangle& rRect ) const; + void AdjustAtGrid( const SvPtrarr& rRow, SvxIconChoiceCtrlEntry* pStart=0 ); + Point AdjustAtGrid( + const Rectangle& rCenterRect, // "Schwerpunkt" des Objekts (typ. Bmp-Rect) + const Rectangle& rBoundRect ) const; + ULONG GetPredecessorGrid( const Point& rDocPos) const; + + void InitPredecessors(); + void ClearPredecessors(); + + BOOL CheckVerScrollBar(); + BOOL CheckHorScrollBar(); + void CancelUserEvents(); + void EntrySelected( SvxIconChoiceCtrlEntry* pEntry, BOOL bSelect, + BOOL bSyncPaint ); + void SaveSelection( List** ); + void RepaintEntries( USHORT nEntryFlagsMask ); + void SetListPositions(); + void SetDefaultTextSize(); + BOOL IsAutoArrange() const { + return (BOOL)(ePositionMode == IcnViewPositionModeAutoArrange); } + BOOL IsAutoAdjust() const { + return (BOOL)(ePositionMode == IcnViewPositionModeAutoAdjust); } + void DocRectChanged() { aDocRectChangedTimer.Start(); } + void VisRectChanged() { aVisRectChangedTimer.Start(); } + void SetOrigin( const Point&, BOOL bDoNotUpdateWallpaper = FALSE ); + + DECL_LINK( TextEditEndedHdl, IcnViewEdit_Impl* ); + + void ShowFocus ( Rectangle& rRect ); + void HideFocus (); + void DrawFocusRect ( OutputDevice* pOut ); + + BOOL IsMnemonicChar( sal_Unicode cChar, ULONG& rPos ) const; + +public: + + long nGridDX, + nGridDY; + long nHorSBarHeight, + nVerSBarWidth; + + SvxIconChoiceCtrl_Impl( SvtIconChoiceCtrl* pView, WinBits nWinStyle ); + ~SvxIconChoiceCtrl_Impl(); + + BOOL SetChoiceWithCursor ( BOOL bDo = TRUE ) { BOOL bOld=bChooseWithCursor; bChooseWithCursor = bDo; return bOld; } + void Clear( BOOL bInCtor = FALSE ); + void SetStyle( WinBits nWinStyle ); + WinBits GetStyle() const { return nWinBits; } + void InsertEntry( SvxIconChoiceCtrlEntry*, ULONG nPos, const Point* pPos=0 ); + void CreateAutoMnemonics( MnemonicGenerator* _pGenerator = NULL ); + void RemoveEntry( SvxIconChoiceCtrlEntry* pEntry ); + void FontModified(); + void SelectAll( BOOL bSelect = TRUE, BOOL bPaint = TRUE ); + void SelectEntry( + SvxIconChoiceCtrlEntry*, + BOOL bSelect, + BOOL bCallHdl = TRUE, + BOOL bAddToSelection = FALSE, + BOOL bSyncPaint = FALSE ); + void Paint( const Rectangle& rRect ); + BOOL MouseButtonDown( const MouseEvent& ); + BOOL MouseButtonUp( const MouseEvent& ); + BOOL MouseMove( const MouseEvent&); + BOOL RequestHelp( const HelpEvent& rHEvt ); + void SetCursor_Impl( + SvxIconChoiceCtrlEntry* pOldCursor, + SvxIconChoiceCtrlEntry* pNewCursor, + BOOL bMod1, + BOOL bShift, + BOOL bPaintSync = FALSE); + BOOL KeyInput( const KeyEvent& ); + void Resize(); + void GetFocus(); + void LoseFocus(); + void SetUpdateMode( BOOL bUpdate ); + BOOL GetUpdateMode() const { return bUpdateMode; } + void PaintEntry( SvxIconChoiceCtrlEntry* pEntry, BOOL bIsBackgroundPainted=FALSE ); + void PaintEntry( + SvxIconChoiceCtrlEntry*, + const Point&, + OutputDevice* pOut = 0, + BOOL bIsBackgroundPainted = FALSE); + void PaintEntryVirtOutDev( SvxIconChoiceCtrlEntry* ); + + void SetEntryPos( + SvxIconChoiceCtrlEntry* pEntry, + const Point& rPos, + BOOL bAdjustRow = FALSE, + BOOL bCheckScrollBars = FALSE, + BOOL bKeepGridMap = FALSE ); + + void InvalidateEntry( SvxIconChoiceCtrlEntry* ); + IcnViewFieldType GetItem( SvxIconChoiceCtrlEntry*, const Point& rAbsPos ); + + void SetNoSelection(); + + SvxIconChoiceCtrlEntry* GetCurEntry() const { return pCursor; } + void SetCursor( + SvxIconChoiceCtrlEntry*, + // TRUE == bei Single-Selection die Sel. mitfuehren + BOOL bSyncSingleSelection = TRUE, + BOOL bShowFocusAsync = FALSE ); + + SvxIconChoiceCtrlEntry* GetEntry( const Point& rDocPos, BOOL bHit = FALSE ); + SvxIconChoiceCtrlEntry* GetNextEntry( const Point& rDocPos, SvxIconChoiceCtrlEntry* pCurEntry ); + SvxIconChoiceCtrlEntry* GetPrevEntry( const Point& rDocPos, SvxIconChoiceCtrlEntry* pCurEntry ); + + Point GetEntryPos( SvxIconChoiceCtrlEntry* ); + void MakeEntryVisible( SvxIconChoiceCtrlEntry* pEntry, BOOL bBound = TRUE ); + + void Arrange(BOOL bKeepPredecessors = FALSE, long nSetMaxVirtWidth =0, long nSetMaxVirtHeight =0 ); + + Rectangle CalcFocusRect( SvxIconChoiceCtrlEntry* ); + Rectangle CalcBmpRect( SvxIconChoiceCtrlEntry*, const Point* pPos = 0 ); + Rectangle CalcTextRect( + SvxIconChoiceCtrlEntry*, + const Point* pPos = 0, + BOOL bForInplaceEdit = FALSE, + const String* pStr = 0 ); + + long CalcBoundingWidth( SvxIconChoiceCtrlEntry* ) const; + long CalcBoundingHeight( SvxIconChoiceCtrlEntry* ) const; + Size CalcBoundingSize( SvxIconChoiceCtrlEntry* ) const; + void FindBoundingRect( SvxIconChoiceCtrlEntry* pEntry ); + void SetBoundingRect_Impl( + SvxIconChoiceCtrlEntry* pEntry, + const Point& rPos, + const Size& rBoundingSize ); + // berechnet alle BoundRects neu + void RecalcAllBoundingRects(); + // berechnet alle ungueltigen BoundRects neu + void RecalcAllBoundingRectsSmart(); + const Rectangle& GetEntryBoundRect( SvxIconChoiceCtrlEntry* ); + void InvalidateBoundingRect( SvxIconChoiceCtrlEntry* ); + void InvalidateBoundingRect( Rectangle& rRect ) { rRect.Right() = LONG_MAX; bBoundRectsDirty = TRUE; } + BOOL IsBoundingRectValid( const Rectangle& rRect ) const { return (BOOL)( rRect.Right() != LONG_MAX ); } + + void PaintEmphasis( + const Rectangle& rRect1, + const Rectangle& rRect2, + BOOL bSelected, + BOOL bDropTarget, + BOOL bCursored, + OutputDevice* pOut, + BOOL bIsBackgroundPainted = FALSE); + + void PaintItem( + const Rectangle& rRect, + IcnViewFieldType eItem, + SvxIconChoiceCtrlEntry* pEntry, + USHORT nPaintFlags, + OutputDevice* pOut, + const String* pStr = 0, + ::vcl::ControlLayoutData* _pLayoutData = NULL ); + + // berechnet alle BoundingRects neu, wenn bMustRecalcBoundingRects == TRUE + void CheckBoundingRects() { if (bBoundRectsDirty) RecalcAllBoundingRectsSmart(); } + // berechnet alle invalidierten BoundingRects neu + void UpdateBoundingRects(); + void ShowTargetEmphasis( SvxIconChoiceCtrlEntry* pEntry, BOOL bShow ); + void PrepareCommandEvent( const CommandEvent& ); + void Command( const CommandEvent& rCEvt ); + void ToTop( SvxIconChoiceCtrlEntry* ); + + ULONG GetSelectionCount() const; + void SetGrid( const Size& ); + Size GetMinGrid() const; + ULONG GetGridCount( + const Size& rSize, + BOOL bCheckScrBars, + BOOL bSmartScrBar ) const; + void Scroll( long nDeltaX, long nDeltaY, BOOL bScrollBar = FALSE ); + const Size& GetItemSize( SvxIconChoiceCtrlEntry*, IcnViewFieldType ) const; + + void HideDDIcon(); + void ShowDDIcon( SvxIconChoiceCtrlEntry* pRefEntry, const Point& rPos ); + void HideShowDDIcon( + SvxIconChoiceCtrlEntry* pRefEntry, + const Point& rPos ); + + BOOL IsOver( + SvPtrarr* pSelectedRectList, + const Rectangle& rEntryBoundRect ) const; + + void SelectRect( + const Rectangle&, + BOOL bAdd = TRUE, + SvPtrarr* pOtherRects = 0 ); + + void CalcScrollOffsets( + const Point& rRefPosPixel, + long& rX, + long& rY, + BOOL bDragDrop = FALSE, + USHORT nBorderWidth = 10 ); + + BOOL IsTextHit( SvxIconChoiceCtrlEntry* pEntry, const Point& rDocPos ); + void MakeVisible( + const Rectangle& rDocPos, + BOOL bInScrollBarEvent=FALSE, + BOOL bCallRectChangedHdl = TRUE ); + + void AdjustEntryAtGrid( SvxIconChoiceCtrlEntry* pStart = 0 ); + void SetEntryTextMode( SvxIconChoiceCtrlTextMode, SvxIconChoiceCtrlEntry* pEntry = 0 ); + SvxIconChoiceCtrlTextMode GetTextMode( const SvxIconChoiceCtrlEntry* pEntry = 0 ) const; + void ShowEntryFocusRect( const SvxIconChoiceCtrlEntry* pEntry ); + void EnableEntryEditing( BOOL bEnable ) { bEntryEditingEnabled = bEnable; } + BOOL IsEntryEditingEnabled() const { return bEntryEditingEnabled; } + BOOL IsEntryEditing() const { return (BOOL)(pCurEditedEntry!=0); } + void EditEntry( SvxIconChoiceCtrlEntry* pEntry ); + void StopEntryEditing( BOOL bCancel ); + void LockEntryPos( SvxIconChoiceCtrlEntry* pEntry, BOOL bLock ); + ULONG GetEntryCount() const { return aEntries.Count(); } + SvxIconChoiceCtrlEntry* GetEntry( ULONG nPos ) const { return (SvxIconChoiceCtrlEntry*)aEntries.GetObject(nPos); } + SvxIconChoiceCtrlEntry* GetFirstSelectedEntry( ULONG& ) const; + SvxIconChoiceCtrlEntry* GetNextSelectedEntry( ULONG& ) const; + SvxIconChoiceCtrlEntry* GetHdlEntry() const { return pHdlEntry; } + void SetHdlEntry( SvxIconChoiceCtrlEntry* pEntry ) { pHdlEntry = pEntry; } + + SvxIconChoiceCtrlTextMode GetEntryTextModeSmart( const SvxIconChoiceCtrlEntry* pEntry ) const; + void SetSelectionMode( SelectionMode eMode ) { eSelectionMode=eMode; } + SelectionMode GetSelectionMode() const { return eSelectionMode; } + BOOL AreEntriesMoved() const { return (BOOL)((nFlags & F_MOVED_ENTRIES)!=0); } + void SetEntriesMoved( BOOL bMoved ) + { + if( bMoved ) nFlags |= F_MOVED_ENTRIES; + else nFlags &= ~(F_MOVED_ENTRIES); + } + ULONG GetEntryListPos( SvxIconChoiceCtrlEntry* ) const; + void SetEntryListPos( SvxIconChoiceCtrlEntry* pEntry, ULONG nNewPos ); + void SetEntryImageSize( const Size& rSize ) { aImageSize = rSize; } + void SetEntryFlags( SvxIconChoiceCtrlEntry* pEntry, USHORT nFlags ); + SvxIconChoiceCtrlEntry* GoLeftRight( SvxIconChoiceCtrlEntry*, BOOL bRight ); + SvxIconChoiceCtrlEntry* GoUpDown( SvxIconChoiceCtrlEntry*, BOOL bDown ); + void InitSettings(); + Rectangle GetOutputRect() const; + + BOOL ArePredecessorsSet() const { return (BOOL)(pHead != 0); } + SvxIconChoiceCtrlEntry* GetPredecessorHead() const { return pHead; } + void SetEntryPredecessor(SvxIconChoiceCtrlEntry* pEntry,SvxIconChoiceCtrlEntry* pPredecessor); + BOOL GetEntryPredecessor(SvxIconChoiceCtrlEntry* pEntry,SvxIconChoiceCtrlEntry** ppPredecessor); + // liefert gueltige Ergebnisse nur im AutoArrange-Modus! + SvxIconChoiceCtrlEntry* FindEntryPredecessor( SvxIconChoiceCtrlEntry* pEntry, const Point& ); + + void SetPositionMode( SvxIconChoiceCtrlPositionMode ); + SvxIconChoiceCtrlPositionMode GetPositionMode() const { return ePositionMode;} + + void Flush(); + void SetColumn( USHORT nIndex, const SvxIconChoiceCtrlColumnInfo& ); + const SvxIconChoiceCtrlColumnInfo* GetColumn( USHORT nIndex ) const; + const SvxIconChoiceCtrlColumnInfo* GetItemColumn( USHORT nSubItem, long& rLeft ) const; + + Rectangle GetDocumentRect() const { return Rectangle( Point(), aVirtOutputSize ); } + Rectangle GetVisibleRect() const { return GetOutputRect(); } + + void SetEntryHighlightFrame( SvxIconChoiceCtrlEntry* pEntry,BOOL bKeepHighlightFlags=FALSE ); + void HideEntryHighlightFrame(); + void DrawHighlightFrame( OutputDevice* pOut, + const Rectangle& rBmpRect, BOOL bHide ); + void StopSelectTimer() { aCallSelectHdlTimer.Stop(); } + void Tracking( const TrackingEvent& rTEvt ); + Point GetPopupMenuPosPixel() const; + + BOOL HandleShortCutKey( const KeyEvent& rKeyEvent ); + + void CallEventListeners( ULONG nEvent, void* pData = NULL ); + + inline ::svt::IAccessibleFactory& + GetAccessibleFactory() { return aAccFactory.getFactory(); } +}; + +// ---------------------------------------------------------------------------------------------- + +class IcnCursor_Impl +{ + SvxIconChoiceCtrl_Impl* pView; + SvPtrarr* pColumns; + SvPtrarr* pRows; + long nCols; + long nRows; + short nDeltaWidth; + short nDeltaHeight; + SvxIconChoiceCtrlEntry* pCurEntry; + void SetDeltas(); + void ImplCreate(); + void Create() { if( !pColumns ) ImplCreate(); } + + USHORT GetSortListPos( SvPtrarr* pList, long nValue, int bVertical); + SvxIconChoiceCtrlEntry* SearchCol(USHORT nCol,USHORT nTop,USHORT nBottom,USHORT nPref, + BOOL bDown, BOOL bSimple ); + + SvxIconChoiceCtrlEntry* SearchRow(USHORT nRow,USHORT nRight,USHORT nLeft,USHORT nPref, + BOOL bRight, BOOL bSimple ); + +public: + IcnCursor_Impl( SvxIconChoiceCtrl_Impl* pOwner ); + ~IcnCursor_Impl(); + void Clear(); + + // fuer Cursortravelling usw. + SvxIconChoiceCtrlEntry* GoLeftRight( SvxIconChoiceCtrlEntry*, BOOL bRight ); + SvxIconChoiceCtrlEntry* GoUpDown( SvxIconChoiceCtrlEntry*, BOOL bDown ); + SvxIconChoiceCtrlEntry* GoPageUpDown( SvxIconChoiceCtrlEntry*, BOOL bDown ); + + // Erzeugt fuer jede Zeile (Hoehe=nGridDY) eine nach BoundRect.Left() + // sortierte Liste der Eintraege, die in ihr stehen. Eine Liste kann + // leer sein. Die Listen gehen in das Eigentum des Rufenden ueber und + // muessen mit DestroyGridAdjustData geloescht werden + void CreateGridAjustData( SvPtrarr& pLists, SvxIconChoiceCtrlEntry* pRow=0); + static void DestroyGridAdjustData( SvPtrarr& rLists ); +}; + +// ---------------------------------------------------------------------------------------------- + +typedef ULONG GridId; + +#define GRID_NOT_FOUND ((GridId)ULONG_MAX) + +class IcnGridMap_Impl +{ + Rectangle _aLastOccupiedGrid; + SvxIconChoiceCtrl_Impl* _pView; + BOOL* _pGridMap; + USHORT _nGridCols, _nGridRows; + + void Expand(); + void Create_Impl(); + void Create() { if(!_pGridMap) Create_Impl(); } + + void GetMinMapSize( USHORT& rDX, USHORT& rDY ) const; + +public: + IcnGridMap_Impl(SvxIconChoiceCtrl_Impl* pView); + ~IcnGridMap_Impl(); + + void Clear(); + + GridId GetGrid( const Point& rDocPos, BOOL* pbClipped = 0 ); + GridId GetGrid( USHORT nGridX, USHORT nGridY ); + GridId GetUnoccupiedGrid( BOOL bOccupyFound=TRUE ); + + void OccupyGrids( const Rectangle&, BOOL bOccupy = TRUE ); + void OccupyGrids( const SvxIconChoiceCtrlEntry*, BOOL bOccupy = TRUE ); + void OccupyGrid( GridId nId, BOOL bOccupy = TRUE ) + { + DBG_ASSERT(!_pGridMap || nId<(ULONG)(_nGridCols*_nGridRows),"OccupyGrid: Bad GridId"); + if(_pGridMap && nId < (ULONG)(_nGridCols *_nGridRows) ) + _pGridMap[ nId ] = bOccupy; + } + + Rectangle GetGridRect( GridId ); + void GetGridCoord( GridId, USHORT& rGridX, USHORT& rGridY ); + static ULONG GetGridCount( const Size& rSizePixel, USHORT nGridWidth, USHORT nGridHeight ); + + void OutputSizeChanged(); +}; + + + + + +#endif + + |