diff options
Diffstat (limited to 'svtools/inc/svtools/svicnvw.hxx')
-rw-r--r-- | svtools/inc/svtools/svicnvw.hxx | 291 |
1 files changed, 291 insertions, 0 deletions
diff --git a/svtools/inc/svtools/svicnvw.hxx b/svtools/inc/svtools/svicnvw.hxx new file mode 100644 index 000000000000..ac15f0b55be6 --- /dev/null +++ b/svtools/inc/svtools/svicnvw.hxx @@ -0,0 +1,291 @@ +/************************************************************************* + * + * 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 _SVICNVW_HXX +#define _SVICNVW_HXX + +#ifndef _IMAGE_HXX +#include <vcl/image.hxx> +#endif +#include <svtools/svlbox.hxx> + +class SvImpIconView; +class SvLBoxEntry; +class SvLBoxItem; +class SvLBoxString; +class SvLBoxContextBmp; +class SvPtrarr; + +#define WB_ICON 0x0001 +#define WB_NAME 0x0002 +#define WB_TEXT 0x0004 +#define WB_FLOW 0x0008 + +#define ICNVW_FLAG_POS_LOCKED 0x0001 +#define ICNVW_FLAG_USER1 0x1000 +#define ICNVW_FLAG_USER2 0x2000 +#define ICNVW_FLAG_USER3 0x4000 +#define ICNVW_FLAG_USER4 0x8000 + +enum SvIconViewTextMode +{ + ShowTextFull = 1, + ShowTextShort, + ShowTextSmart, // not implemented + ShowTextDontKnow // nur fuer Eintraege (->Einstellung der View + // wird genommen) +}; + +class SvIcnVwDataEntry : public SvViewDataEntry +{ +friend class SvImpIconView; + USHORT nIcnVwFlags; + SvIconViewTextMode eTextMode; +public: + Rectangle aRect; // Bounding-Rect des Entries + Rectangle aGridRect; // gesetzt im Grid-Modus + Size aTextSize; // nur gesetzt im Grid-Modus + USHORT nX,nY; // fuer Tastatursteuerung + SvIcnVwDataEntry(); + virtual ~SvIcnVwDataEntry(); + + BOOL IsEntryPosLocked() const { return (BOOL)((nIcnVwFlags & ICNVW_FLAG_POS_LOCKED) !=0); } + void ClearVwFlags( USHORT nMask ) { nIcnVwFlags &= (~nMask); } + void SetVwFlags( USHORT nMask ) { nIcnVwFlags |= nMask; } + USHORT GetVwFlags() const { return nIcnVwFlags; } + SvIconViewTextMode GetTextMode() const { return eTextMode; } +}; + +#define SV_LISTBOX_ID_ICONVIEW 2 + +class SvIconView : public SvLBox +{ + friend class SvImpIconView; + + SvImpIconView* pImp; + Image aCollapsedEntryBmp; + Image aExpandedEntryBmp; + WinBits nWinBits; + USHORT nIcnVwFlags; + void SetModel( SvLBoxTreeList* ); + +protected: + + using SvLBox::CreateEntry; + SvLBoxEntry* CreateEntry( const XubString&, const Image&, const Image&); + void ViewDataInitialized( SvLBoxEntry* ); + virtual SvViewData* CreateViewData( SvListEntry* ); + virtual void InitViewData( SvViewData* pData, SvListEntry* pEntry ); + + void EditingRequest(SvLBoxEntry*,SvLBoxItem*,const Point& ); + void EditedText( const XubString& ); + void EditItemText( SvLBoxEntry*,SvLBoxItem*,const Selection& ); + SvLBoxEntry* pCurEdEntry; + SvLBoxItem* pCurEdItem; + + virtual void WriteDragServerInfo( const Point&, SvLBoxDDInfo* ); + virtual void ReadDragServerInfo( const Point&, SvLBoxDDInfo* ); + virtual void Command( const CommandEvent& rCEvt ); + virtual void PreparePaint( SvLBoxEntry* ); + +public: + + SvIconView( Window* pParent,WinBits nWinStyle=0 ); + SvIconView( Window* pParent,const ResId& rResId ); + ~SvIconView(); + + void DisconnectFromModel(); + + SvLBoxEntry* InsertEntry( const XubString& rText, SvLBoxEntry* pParent = 0, + BOOL bChildsOnDemand = FALSE, + ULONG nPos=LIST_APPEND ); + + SvLBoxEntry* InsertEntry( const XubString& rText, + const Image& rExpandedEntryBmp, + const Image& rCollapsedEntryBmp, + SvLBoxEntry* pParent = 0, + BOOL bChildsOnDemand = FALSE, + ULONG nPos = LIST_APPEND ); + + const Image& GetDefaultExpandedEntryBmp() const { return aExpandedEntryBmp;} + const Image& GetDefaultCollapsedEntryBmp() const { return aCollapsedEntryBmp;} + void SetDefaultExpandedEntryBmp( const Image& rBmp) { aExpandedEntryBmp=rBmp;} + void SetDefaultCollapsedEntryBmp( const Image& rBmp ) { aCollapsedEntryBmp=rBmp;} + + void SetEntryText(SvLBoxEntry*, const XubString& ); + void SetExpandedEntryBmp(SvLBoxEntry*, const Image& ); + void SetCollapsedEntryBmp(SvLBoxEntry*, const Image& ); + + XubString GetEntryText(SvLBoxEntry*) const; + Image GetExpandedEntryBmp(SvLBoxEntry*) const; + Image GetCollapsedEntryBmp(SvLBoxEntry*) const; + + virtual SvLBoxEntry* CloneEntry( SvLBoxEntry* pSource ); + + virtual USHORT IsA(); + + virtual void RequestingChilds( SvLBoxEntry* pParent ); + + virtual void Paint( const Rectangle& rRect ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt ); + virtual void MouseMove( const MouseEvent& rMEvt ); + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void Resize(); + virtual void GetFocus(); + virtual void LoseFocus(); + void SetUpdateMode( BOOL ); + + using SvListView::SetModel; + virtual void SetModel( SvLBoxTreeList*, SvLBoxEntry* pParent ); + virtual void ModelHasCleared(); + virtual void ModelHasInserted( SvListEntry* pEntry ); + virtual void ModelHasInsertedTree( SvListEntry* pEntry ); + virtual void ModelIsMoving(SvListEntry* pSource, + SvListEntry* pTargetParent, ULONG nChildPos ); + virtual void ModelHasMoved(SvListEntry* pSource ); + virtual void ModelIsRemoving( SvListEntry* pEntry ); + virtual void ModelHasRemoved( SvListEntry* pEntry ); + virtual void ModelHasEntryInvalidated( SvListEntry* pEntry ); + + virtual void ShowTargetEmphasis( SvLBoxEntry*, BOOL bShow ); + using Window::GetDropTarget; + virtual SvLBoxEntry* GetDropTarget( const Point& ); + virtual Region GetDragRegion() const; + // NotifyMoving/Copying ueberladen, da wir bei GetDropTarget + // einen "magic pointer" zurueckgeben, falls in einen leeren + // Bereich auf der IconView gedroppt wird. + virtual BOOL NotifyMoving( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, + SvLBoxEntry*& rpNewParent, ULONG& rNewChildPos); + virtual BOOL NotifyCopying( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, + SvLBoxEntry*& rpNewParent, ULONG& rNewChildPos); + + // gibt TopLeft des BoundingRects zurueck + // Konvertierung in Fensterposition: MapMode.Origin addieren + Point GetEntryPosition( SvLBoxEntry* ) const; + void SetEntryPosition( SvLBoxEntry*, const Point& rDocPos); + void SetEntryPosition( SvLBoxEntry*, const Point& rDocPos, + BOOL bAdjustAtGrid ); + + void SetFont( const Font& rFont ); + void SetDefaultFont(); + + using SvLBox::GetEntry; + SvLBoxEntry* GetEntry( const Point& rPixPos, BOOL ) const; + // Gibt den naechsten ueber pCurEntry liegenden Eintrag (ZOrder) + SvLBoxEntry* GetNextEntry( const Point& rPixPos, SvLBoxEntry* pCurEntry, BOOL ) const; + // Gibt den naechsten unter pCurEntry liegenden Eintrag (ZOrder) + SvLBoxEntry* GetPrevEntry( const Point& rPixPos, SvLBoxEntry* pCurEntry, BOOL ) const; + + SvLBoxEntry* GetEntryFromLogicPos( const Point& rDocPos ) const; + + void SetWindowBits( WinBits nWinStyle ); + virtual void PaintEntry( SvLBoxEntry* ); + virtual void PaintEntry( SvLBoxEntry*, const Point& rDocPos ); + Rectangle GetFocusRect( SvLBoxEntry* ); + void InvalidateEntry( SvLBoxEntry* ); + void MakeVisible( SvLBoxEntry* ); + + void SetDragDropMode( DragDropMode ); + void SetSelectionMode( SelectionMode ); + + using SvListView::Select; + BOOL Select( SvLBoxEntry* pEntry, BOOL bSelect=TRUE ); + void SelectAll( BOOL bSelect, BOOL bPaint=TRUE ); + virtual void SetCurEntry( SvLBoxEntry* _pEntry ); + virtual SvLBoxEntry* + GetCurEntry() const; + + // logische Koordinaten + void SelectRect( + const Rectangle& rRect, + BOOL bAdd = FALSE, + // die Schnittmenge mit rRect wird invertiert + // wird bei bAdd == FALSE ignoriert + SvPtrarr* pOtherRects = 0, + short nBorderOffs = -5 ); + ULONG GetSelectionCount() const; + + virtual void Arrange(); + void SetSpaceBetweenEntries( long nHor, long Ver ); + long GetHorSpaceBetweenEntries(); + long GetVerSpaceBetweenEntries(); + + void EnableInplaceEditing( BOOL bEnable ); + void EditEntry( SvLBoxEntry* pEntry = 0 ); + virtual BOOL EditingEntry( SvLBoxEntry* pEntry, Selection& ); + virtual BOOL EditedEntry( SvLBoxEntry*, const XubString& rNewText ); + + void SetCurParent( SvLBoxEntry* pNewParent ); + SvLBoxEntry* GetCurParent() const; + + virtual void ModelNotification( USHORT nActionId, SvListEntry* pEntry1, + SvListEntry* pEntry2, ULONG nPos ); + + // 0,0: Grid-Modus ausschalten + void SetGrid( long nDX, long nDY ); + + // nDeltaY < 0 : View bewegt sich auf dem Doc nach oben + // nDeltaY > 0 : View bewegt sich auf dem Doc nach unten + // nDeltaX < 0 : View bewegt sich auf dem Doc nach links + // nDeltaX > 0 : View bewegt sich auf dem Doc nach rechts + using Window::Scroll; + virtual void Scroll( long nDeltaX, long nDeltaY, USHORT nFlags = 0 ); + + virtual void PrepareCommandEvent( const CommandEvent& ); + virtual void StartDrag( sal_Int8 nAction, const Point& ); + virtual void DragFinished( sal_Int8 ); + virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); + using SvLBox::ExecuteDrop; + virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); + + void ShowDDIcon( SvLBoxEntry* pRefEntry, const Point& rPos ); + void HideDDIcon(); + void HideShowDDIcon( SvLBoxEntry* pRefEntry, const Point& rPos ); + + // fuers Scrollen beim D&D + void CalcScrollOffsets( + const Point& rRefPosPixel, + long& rScrollX, + long& rScrollY, + BOOL bInDragDrop = FALSE, + USHORT nBorderWidth = 10 ); + + using Window::EndTracking; + void EndTracking(); + void AdjustAtGrid( SvLBoxEntry* pEntry = 0 ); + void LockEntryPos( SvLBoxEntry* pEntry, BOOL bLock = TRUE ); + BOOL IsEntryPosLocked( const SvLBoxEntry* pEntry ) const; + + void SetTextMode( SvIconViewTextMode, SvLBoxEntry* pEntry = 0 ); + SvIconViewTextMode GetTextMode( const SvLBoxEntry* pEntry = 0 ) const; + + void ShowFocusRect( const SvLBoxEntry* pEntry ); +}; + +#endif + |