diff options
Diffstat (limited to 'svx/inc/svx/svdpagv.hxx')
-rw-r--r-- | svx/inc/svx/svdpagv.hxx | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/svx/inc/svx/svdpagv.hxx b/svx/inc/svx/svdpagv.hxx new file mode 100644 index 000000000000..e085ccd212dc --- /dev/null +++ b/svx/inc/svx/svdpagv.hxx @@ -0,0 +1,297 @@ +/************************************************************************* + * + * 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 _SVDPAGV_HXX +#define _SVDPAGV_HXX + +#include <com/sun/star/awt/XControlContainer.hpp> +#include <svl/lstner.hxx> +#include <svx/svdhlpln.hxx> +#include <cppuhelper/implbase4.hxx> +#include <svx/svdsob.hxx> +#include <svx/svdtypes.hxx> +#include "svx/svxdllapi.h" + +#include <cppuhelper/implbase3.hxx> +#include <vector> +#include <basegfx/polygon/b2dpolypolygon.hxx> + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class Region; +class SdrObjList; +class SdrObject; +class SdrPage; +class SdrUnoObj; +class SdrPaintWindow; +class SdrView; +class SdrPageObj; +class B2dIAOManager; +class SdrPageView; + +// #110094# +namespace sdr +{ + namespace contact + { + class ViewObjectContactRedirector; + class DisplayInfo; + class ViewObjectContactRedirector; + } // end of namespace contact +} // end of namespace sdr + +// typedefs for a list of SdrPageWindow +class SdrPageWindow; +typedef ::std::vector< SdrPageWindow* > SdrPageWindowVector; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrPageView : public SfxListener +{ +protected: + SdrView& mrView; + SdrPage* mpPage; + Point aPgOrg; // Nullpunkt der Page + + Rectangle aMarkBound; // wird + Rectangle aMarkSnap; // von + sal_Bool mbHasMarked; + sal_Bool mbVisible; + + SetOfByte aLayerVisi; // Menge der sichtbaren Layer + SetOfByte aLayerLock; // Menge der nicht editierbaren Layer + SetOfByte aLayerPrn; // Menge der druckbaren Layer + + SdrObjList* pAktList; // Aktuelle Liste, in der Regel die Page. + SdrObject* pAktGroup; // Aktuelle Gruppe. NULL=Keine. + + SdrHelpLineList aHelpLines; // Hilfslinien und -punkte + + // #103911# Use one reserved slot (bReserveBool2) for the document color + Color maDocumentColor; + + // #103834# Use one reserved slot (bReserveBool1) for the background color + Color maBackgroundColor; + + SdrPageWindowVector maPageWindows; + + // #i72752# member to remember with which SdrPageWindow the BeginDrawLayer + // was done + SdrPageWindow* mpPreparedPageWindow; + + // interface to SdrPageWindow +protected: + void ClearPageWindows(); + void AppendPageWindow(SdrPageWindow& rNew); + SdrPageWindow* RemovePageWindow(sal_uInt32 nPos); + SdrPageWindow* RemovePageWindow(SdrPageWindow& rOld); +public: + sal_uInt32 PageWindowCount() const { return maPageWindows.size(); } + SdrPageWindow* FindPageWindow( SdrPaintWindow& rPaintWindow ) const; + SdrPageWindow* FindPageWindow( const OutputDevice& rOutDev ) const; + SdrPageWindow* GetPageWindow(sal_uInt32 nIndex) const; + + /** finds the page window whose PaintWindow belongs to the given output device + + In opposite to FindPageWindow, this method also cares possibly patched PaintWindow instances. + That is, a SdrPageWindow might have an original, and a patched SdrPaintWindow instance - if + this is the case, then the original SdrPaintWindow is examined before the patched one. + */ + const SdrPageWindow* FindPatchedPageWindow( const OutputDevice& rOutDev ) const; + + void PaintOutlinerView(OutputDevice* pOut, const Rectangle& rRect) const; +private: + SVX_DLLPRIVATE SdrPageWindow& CreateNewPageWindowEntry(SdrPaintWindow& rPaintWindow); + +protected: + void ImpInvalidateHelpLineArea(sal_uInt16 nNum) const; + +protected: + void SetLayer(const String& rName, SetOfByte& rBS, sal_Bool bJa); + sal_Bool IsLayer(const String& rName, const SetOfByte& rBS) const; + void SetAllLayers(SetOfByte& rB, sal_Bool bJa); + + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + // Nachsehen, ob AktGroup noch Inserted ist. + void CheckAktGroup(); + + void AdjHdl(); + +public: + TYPEINFO(); + SdrPageView(SdrPage* pPage1, SdrView& rNewView); + ~SdrPageView(); + + // Wird von der PaintView gerufen, wenn Modelaenderungen abgeschlossen sind + void ModelHasChanged(); + + void Show(); + void Hide(); + + void AddPaintWindowToPageView(SdrPaintWindow& rPaintWindow); + void RemovePaintWindowFromPageView(SdrPaintWindow& rPaintWindow); + + SdrView& GetView() { return mrView; } + const SdrView& GetView() const { return mrView; } + + /** looks up the control container belonging to given output device + + @return + If the given output device belongs to one of the SdrPageViewWinRecs associated with this + SdrPageView instance, the XControlContainer for this output device is returned, <NULL/> + otherwise. + */ + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > + GetControlContainer( const OutputDevice& _rDevice ) const; + + /** sets all elements in the view which support a design and a alive mode into the given mode + */ + void SetDesignMode( bool _bDesignMode ) const; + + sal_Bool IsVisible() const { return mbVisible; } + + // Invalidiert den gesamten Bereich der Page + void InvalidateAllWin(); + + // rRect bezieht sich auf die Page + void InvalidateAllWin(const Rectangle& rRect, sal_Bool bPlus1Pix=sal_False); + + // PrePaint call forwarded from app windows + void PrePaint(); + + // PostPaint call forwarded from app windows + void PostPaint(); + + // rReg bezieht sich auf's OutDev, nicht auf die Page + void CompleteRedraw(SdrPaintWindow& rPaintWindow, const Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector = 0L) const; + + // write access to mpPreparedPageWindow + void setPreparedPageWindow(SdrPageWindow* pKnownTarget); + + void DrawLayer(SdrLayerID nID, OutputDevice* pGivenTarget = 0, sdr::contact::ViewObjectContactRedirector* pRedirector = 0L) const; + void DrawPageViewGrid(OutputDevice& rOut, const Rectangle& rRect, Color aColor = Color( COL_BLACK ) ); + + Rectangle GetPageRect() const; + SdrPage* GetPage() const { return mpPage; } + + // Betretene Liste rausreichen + SdrObjList* GetObjList() const { return pAktList; } + + // Betretene Gruppe rausreichen + SdrObject* GetAktGroup() const { return pAktGroup; } + + // Betretene Gruppe und Liste setzen + void SetAktGroupAndList(SdrObject* pNewGroup, SdrObjList* pNewList); + + sal_Bool HasMarkedObjPageView() const { return mbHasMarked; } + void SetHasMarkedObj(sal_Bool bOn) { mbHasMarked = bOn; } + + const Rectangle& MarkBound() const { return aMarkBound; } + const Rectangle& MarkSnap() const { return aMarkSnap; } + Rectangle& MarkBound() { return aMarkBound; } + Rectangle& MarkSnap() { return aMarkSnap; } + + void SetLayerVisible(const String& rName, sal_Bool bShow = sal_True) { SetLayer(rName, aLayerVisi, bShow); if(!bShow) AdjHdl(); InvalidateAllWin(); } + sal_Bool IsLayerVisible(const String& rName) const { return IsLayer(rName, aLayerVisi); } + void SetAllLayersVisible(sal_Bool bShow = sal_True) { SetAllLayers(aLayerVisi, bShow); if(!bShow) AdjHdl(); InvalidateAllWin(); } + + void SetLayerLocked(const String& rName, sal_Bool bLock = sal_True) { SetLayer(rName, aLayerLock, bLock); if(bLock) AdjHdl(); } + sal_Bool IsLayerLocked(const String& rName) const { return IsLayer(rName,aLayerLock); } + void SetAllLayersLocked(sal_Bool bLock = sal_True) { SetAllLayers(aLayerLock, bLock); if(bLock) AdjHdl(); } + + void SetLayerPrintable(const String& rName, sal_Bool bPrn = sal_True) { SetLayer(rName, aLayerPrn, bPrn); } + sal_Bool IsLayerPrintable(const String& rName) const { return IsLayer(rName, aLayerPrn); } + void SetAllLayersPrintable(sal_Bool bPrn = sal_True) { SetAllLayers(aLayerPrn, bPrn); } + + // PV stellt eine RefPage oder eine SubList eines RefObj dar oder Model ist ReadOnly + sal_Bool IsReadOnly() const; + + // der Origin bezieht sich immer auf die obere linke Ecke der Page + const Point& GetPageOrigin() const { return aPgOrg; } + void SetPageOrigin(const Point& rOrg); + + void LogicToPagePos(Point& rPnt) const { rPnt-=aPgOrg; } + void LogicToPagePos(Rectangle& rRect) const { rRect.Move(-aPgOrg.X(),-aPgOrg.Y()); } + void PagePosToLogic(Point& rPnt) const { rPnt+=aPgOrg; } + void PagePosToLogic(Rectangle& rRect) const { rRect.Move(aPgOrg.X(),aPgOrg.Y()); } + + void SetVisibleLayers(const SetOfByte& rSet) { aLayerVisi=rSet; InvalidateAllWin(); } + const SetOfByte& GetVisibleLayers() const { return aLayerVisi; } + void SetPrintableLayers(const SetOfByte& rSet) { aLayerPrn=rSet; } + const SetOfByte& GetPrintableLayers() const { return aLayerPrn; } + void SetLockedLayers(const SetOfByte& rSet) { aLayerLock=rSet; } + const SetOfByte& GetLockedLayers() const { return aLayerLock; } + + const SdrHelpLineList& GetHelpLines() const { return aHelpLines; } + void SetHelpLines(const SdrHelpLineList& rHLL); + //void SetHelpLinePos(sal_uInt16 nNum, const Point& rNewPos); + void SetHelpLine(sal_uInt16 nNum, const SdrHelpLine& rNewHelpLine); + void DeleteHelpLine(sal_uInt16 nNum); + void InsertHelpLine(const SdrHelpLine& rHL, sal_uInt16 nNum=0xFFFF); + void MoveHelpLine(sal_uInt16 nNum, sal_uInt16 nNewNum) { aHelpLines.Move(nNum,nNewNum); } + + // Liefert sal_True, wenn Layer des Obj sichtbar und nicht gesperrt. + // Beim Gruppenobjekt muss wenigstens ein Member sichtbar sein, + // gesperrt sein darf keiner. + sal_Bool IsObjMarkable(SdrObject* pObj) const; + + // Betreten (Editieren) einer Objektgruppe. Anschliessend liegen alle + // Memberobjekte der Gruppe im direkten Zugriff. Alle anderen Objekte + // koennen waerendessen nicht bearbeitet werden (bis zum naechsten + // LeaveGroup()). (wie MsDos chdir bla). + sal_Bool EnterGroup(SdrObject* pObj); + + // Verlassen einer betretenen Objektgruppe. (wie MsDos chdir ..) + void LeaveOneGroup(); + + // Verlassen aller betretenen Objektgruppen. (wie MsDos chdir \) + void LeaveAllGroup(); + + // Feststellen, wie weit hinabgestiegen wurde (0=Root(Page)) + sal_uInt16 GetEnteredLevel() const; + + // Name der aktuellen Objektgruppe + String GetActualGroupName() const; + + // Die Namen aller z.Zt. betretenen Gruppen + String GetActualPathName(sal_Unicode cSep = sal_Unicode('|')) const; + + // #103834# Set background color for svx at SdrPageViews + void SetApplicationBackgroundColor(Color aBackgroundColor); + + // #109585# + Color GetApplicationBackgroundColor() const; + + // #103911# Set/Get document color for svx at SdrPageViews + void SetApplicationDocumentColor(Color aDocumentColor); + Color GetApplicationDocumentColor() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDPAGV_HXX |