xref: /aoo41x/main/sd/source/ui/inc/OutlineView.hxx (revision 67e470da)
1*c45d927aSAndrew Rist /**************************************************************
2*c45d927aSAndrew Rist  *
3*c45d927aSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*c45d927aSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*c45d927aSAndrew Rist  * distributed with this work for additional information
6*c45d927aSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*c45d927aSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*c45d927aSAndrew Rist  * "License"); you may not use this file except in compliance
9*c45d927aSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*c45d927aSAndrew Rist  *
11*c45d927aSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*c45d927aSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*c45d927aSAndrew Rist  * software distributed under the License is distributed on an
15*c45d927aSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*c45d927aSAndrew Rist  * KIND, either express or implied.  See the License for the
17*c45d927aSAndrew Rist  * specific language governing permissions and limitations
18*c45d927aSAndrew Rist  * under the License.
19*c45d927aSAndrew Rist  *
20*c45d927aSAndrew Rist  *************************************************************/
21*c45d927aSAndrew Rist 
22*c45d927aSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef SD_OUTLINE_VIEW_HXX
25cdf0e10cSrcweir #define SD_OUTLINE_VIEW_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <vcl/image.hxx>
28cdf0e10cSrcweir #include <editeng/lrspitem.hxx>
29cdf0e10cSrcweir #include "View.hxx"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir class SdPage;
32cdf0e10cSrcweir class SdrPage;
33cdf0e10cSrcweir class EditStatus;
34cdf0e10cSrcweir class Paragraph;
35cdf0e10cSrcweir class SdrTextObj;
36cdf0e10cSrcweir class Outliner;
37cdf0e10cSrcweir class SfxProgress;
38cdf0e10cSrcweir struct PaintFirstLineInfo;
39cdf0e10cSrcweir struct PasteOrDropInfos;
40cdf0e10cSrcweir 
41cdf0e10cSrcweir namespace sd { namespace tools {
42cdf0e10cSrcweir class EventMultiplexerEvent;
43cdf0e10cSrcweir } }
44cdf0e10cSrcweir 
45cdf0e10cSrcweir namespace sd {
46cdf0e10cSrcweir 
47cdf0e10cSrcweir class DrawDocShell;
48cdf0e10cSrcweir class OutlineViewShell;
49cdf0e10cSrcweir class OutlineViewModelChangeGuard;
50cdf0e10cSrcweir class DrawDocShell;
51cdf0e10cSrcweir 
52cdf0e10cSrcweir static const int MAX_OUTLINERVIEWS = 4;
53cdf0e10cSrcweir 
54cdf0e10cSrcweir /*************************************************************************
55cdf0e10cSrcweir |*
56cdf0e10cSrcweir |* Ableitung von ::sd::View fuer den Outline-Modus
57cdf0e10cSrcweir |*
58cdf0e10cSrcweir \************************************************************************/
59cdf0e10cSrcweir 
60cdf0e10cSrcweir class OutlineView
61cdf0e10cSrcweir     : public ::sd::View
62cdf0e10cSrcweir {
63cdf0e10cSrcweir 	friend class OutlineViewModelChangeGuard;
64cdf0e10cSrcweir public:
65cdf0e10cSrcweir     OutlineView (DrawDocShell* pDocSh,
66cdf0e10cSrcweir         ::Window* pWindow,
67cdf0e10cSrcweir         OutlineViewShell* pOutlineViewSh);
68cdf0e10cSrcweir 	~OutlineView (void);
69cdf0e10cSrcweir 
70cdf0e10cSrcweir     /** This method is called by the view shell that owns the view to tell
71cdf0e10cSrcweir         the view that it can safely connect to the application.
72cdf0e10cSrcweir         This method must not be called before the view shell is on the shell
73cdf0e10cSrcweir         stack.
74cdf0e10cSrcweir     */
75cdf0e10cSrcweir     void ConnectToApplication (void);
76cdf0e10cSrcweir     void DisconnectFromApplication (void);
77cdf0e10cSrcweir 
78cdf0e10cSrcweir 	TYPEINFO();
79cdf0e10cSrcweir 
80cdf0e10cSrcweir 	SdrTextObj* 	GetTitleTextObject(SdrPage* pPage);
81cdf0e10cSrcweir 	SdrTextObj* 	GetOutlineTextObject(SdrPage* pPage);
82cdf0e10cSrcweir 
83cdf0e10cSrcweir 	SdrTextObj* 	CreateTitleTextObject(SdPage* pPage);
84cdf0e10cSrcweir 	SdrTextObj* 	CreateOutlineTextObject(SdPage* pPage);
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 	virtual void AddWindowToPaintView(OutputDevice* pWin);
87cdf0e10cSrcweir 	virtual void DeleteWindowFromPaintView(OutputDevice* pWin);
88cdf0e10cSrcweir 
89cdf0e10cSrcweir 	OutlinerView* 	GetViewByWindow (::Window* pWin) const;
GetOutliner()90cdf0e10cSrcweir 	SdrOutliner*    GetOutliner() { return(mpOutliner) ; }
91cdf0e10cSrcweir 
92cdf0e10cSrcweir 	Paragraph*		GetPrevTitle(const Paragraph* pPara);
93cdf0e10cSrcweir 	Paragraph*		GetNextTitle(const Paragraph* pPara);
94cdf0e10cSrcweir 	SdPage* 		GetActualPage();
95cdf0e10cSrcweir 	SdPage*			GetPageForParagraph( Paragraph* pPara );
96cdf0e10cSrcweir 	Paragraph*		GetParagraphForPage( ::Outliner* pOutl, SdPage* pPage );
97cdf0e10cSrcweir 
98cdf0e10cSrcweir 	/** selects the paragraph for the given page at the outliner view*/
99cdf0e10cSrcweir 	void			SetActualPage( SdPage* pActual );
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 	virtual void Paint (const Rectangle& rRect, ::sd::Window* pWin);
102cdf0e10cSrcweir 	virtual void AdjustPosSizePixel(
103cdf0e10cSrcweir         const Point &rPos,
104cdf0e10cSrcweir         const Size &rSize,
105cdf0e10cSrcweir         ::sd::Window* pWindow);
106cdf0e10cSrcweir 
107cdf0e10cSrcweir 					// Callbacks fuer LINKs
108cdf0e10cSrcweir 	DECL_LINK( ParagraphInsertedHdl, Outliner * );
109cdf0e10cSrcweir 	DECL_LINK( ParagraphRemovingHdl, Outliner * );
110cdf0e10cSrcweir 	DECL_LINK( DepthChangedHdl, Outliner * );
111cdf0e10cSrcweir 	DECL_LINK( StatusEventHdl, EditStatus * );
112cdf0e10cSrcweir 	DECL_LINK( BeginMovingHdl, Outliner * );
113cdf0e10cSrcweir 	DECL_LINK( EndMovingHdl, Outliner * );
114cdf0e10cSrcweir 	DECL_LINK( RemovingPagesHdl, OutlinerView * );
115cdf0e10cSrcweir 	DECL_LINK( IndentingPagesHdl, OutlinerView * );
116cdf0e10cSrcweir 	DECL_LINK( BeginDropHdl, void * );
117cdf0e10cSrcweir 	DECL_LINK( EndDropHdl, void * );
118cdf0e10cSrcweir     DECL_LINK( PaintingFirstLineHdl, PaintFirstLineInfo* );
119cdf0e10cSrcweir 
GetPaperWidth() const120cdf0e10cSrcweir 	sal_uLong		  GetPaperWidth() const { return 2*21000; }  // DIN A4 Breite
121cdf0e10cSrcweir 
122cdf0e10cSrcweir 	sal_Bool		  PrepareClose(sal_Bool bUI = sal_True);
123cdf0e10cSrcweir 
124cdf0e10cSrcweir 	virtual sal_Bool 	GetAttributes( SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr=sal_False ) const;
125cdf0e10cSrcweir 	virtual sal_Bool   	SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll = sal_False);
126cdf0e10cSrcweir 
127cdf0e10cSrcweir //	virtual sal_Bool	   HasMarkedObjUnused() const;
128cdf0e10cSrcweir 	void			   FillOutliner();
129cdf0e10cSrcweir 	void               SetLinks();
130cdf0e10cSrcweir 	void               ResetLinks() const;
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 	SfxStyleSheet*     GetStyleSheet() const;
133cdf0e10cSrcweir 
134cdf0e10cSrcweir 	void               SetSelectedPages();
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 	virtual sal_Int8 AcceptDrop (
137cdf0e10cSrcweir         const AcceptDropEvent& rEvt,
138cdf0e10cSrcweir         DropTargetHelper& rTargetHelper,
139cdf0e10cSrcweir         ::sd::Window* pTargetWindow = NULL,
140cdf0e10cSrcweir         sal_uInt16 nPage = SDRPAGE_NOTFOUND,
141cdf0e10cSrcweir         sal_uInt16 nLayer = SDRPAGE_NOTFOUND);
142cdf0e10cSrcweir 	virtual sal_Int8 ExecuteDrop (
143cdf0e10cSrcweir         const ExecuteDropEvent& rEvt,
144cdf0e10cSrcweir         DropTargetHelper& rTargetHelper,
145cdf0e10cSrcweir         ::sd::Window* pTargetWindow = NULL,
146cdf0e10cSrcweir         sal_uInt16 nPage = SDRPAGE_NOTFOUND,
147cdf0e10cSrcweir         sal_uInt16 nLayer = SDRPAGE_NOTFOUND);
148cdf0e10cSrcweir 
149cdf0e10cSrcweir 
150cdf0e10cSrcweir 	// #97766# Re-implement GetScriptType for this view to get correct results
151cdf0e10cSrcweir 	virtual sal_uInt16 GetScriptType() const;
152cdf0e10cSrcweir 
153cdf0e10cSrcweir     /** After this method has been called with <TRUE/> following changes of
154cdf0e10cSrcweir         the current page are ignored in that the corresponding text is not
155cdf0e10cSrcweir         selected.
156cdf0e10cSrcweir         This is used to supress unwanted side effects between selection and
157cdf0e10cSrcweir         cursor position.
158cdf0e10cSrcweir     */
159cdf0e10cSrcweir     void IgnoreCurrentPageChanges (bool bIgnore);
160cdf0e10cSrcweir 
161cdf0e10cSrcweir #if 0
162cdf0e10cSrcweir 	sal_Int32 GetPageNumberWidthPixel();
163cdf0e10cSrcweir #endif
164cdf0e10cSrcweir 
165cdf0e10cSrcweir     void InvalidateSlideNumberArea();
166cdf0e10cSrcweir 
167cdf0e10cSrcweir 	/** creates and inserts an empty slide for the given paragraph. */
168cdf0e10cSrcweir 	SdPage* InsertSlideForParagraph( Paragraph* pPara );
169cdf0e10cSrcweir 
170cdf0e10cSrcweir 	void UpdateParagraph( sal_uInt16 nPara );
171cdf0e10cSrcweir 
172cdf0e10cSrcweir protected:
173cdf0e10cSrcweir     virtual void OnBeginPasteOrDrop( PasteOrDropInfos* pInfos );
174cdf0e10cSrcweir     virtual void OnEndPasteOrDrop( PasteOrDropInfos* pInfos );
175cdf0e10cSrcweir 
176cdf0e10cSrcweir private:
177cdf0e10cSrcweir 	/** call this method before you do anything that can modify the outliner
178cdf0e10cSrcweir 		and or the drawing document model. It will create needed undo actions */
179cdf0e10cSrcweir 	void BeginModelChange();
180cdf0e10cSrcweir 
181cdf0e10cSrcweir 	/** call this method after BeginModelChange(), when all possible model
182cdf0e10cSrcweir 		changes are done. */
183cdf0e10cSrcweir 	void EndModelChange();
184cdf0e10cSrcweir 
185cdf0e10cSrcweir 	/** merge edit engine undo actions if possible */
186cdf0e10cSrcweir 	void TryToMergeUndoActions();
187cdf0e10cSrcweir 
188cdf0e10cSrcweir 	/** updates all changes in the outliner model to the draw model */
189cdf0e10cSrcweir 	void UpdateDocument();
190cdf0e10cSrcweir 
191cdf0e10cSrcweir 	OutlineViewShell*	mpOutlineViewShell;
192cdf0e10cSrcweir 	SdrOutliner*		mpOutliner;
193cdf0e10cSrcweir 	OutlinerView*		mpOutlinerView[MAX_OUTLINERVIEWS];
194cdf0e10cSrcweir 
195cdf0e10cSrcweir 	List*				mpOldParaOrder;
196cdf0e10cSrcweir 	List*				mpSelectedParas;
197cdf0e10cSrcweir 
198cdf0e10cSrcweir 	sal_uInt16				mnPagesToProcess;	 // fuer die Fortschrittsanzeige
199cdf0e10cSrcweir 	sal_uInt16				mnPagesProcessed;
200cdf0e10cSrcweir 
201cdf0e10cSrcweir 	sal_Bool				mbFirstPaint;
202cdf0e10cSrcweir 
203cdf0e10cSrcweir 	SfxProgress*		mpProgress;
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 	/** stores the last used high contrast mode.
206cdf0e10cSrcweir 		this is changed in onUpdateStyleSettings()
207cdf0e10cSrcweir 	*/
208cdf0e10cSrcweir 	bool mbHighContrastMode;
209cdf0e10cSrcweir 
210cdf0e10cSrcweir 	/** stores the last used document color.
211cdf0e10cSrcweir 		this is changed in onUpdateStyleSettings()
212cdf0e10cSrcweir 	*/
213cdf0e10cSrcweir 	Color maDocColor;
214cdf0e10cSrcweir 
215cdf0e10cSrcweir 	/** updates the high contrast settings and document color if they changed.
216cdf0e10cSrcweir 		@param bForceUpdate	forces the method to set all style settings
217cdf0e10cSrcweir 	*/
218cdf0e10cSrcweir 	void onUpdateStyleSettings( bool bForceUpdate = false );
219cdf0e10cSrcweir 
220cdf0e10cSrcweir 	/** this link is called from the vcl applicaten when the stylesettings
221cdf0e10cSrcweir 		change. Its only purpose is to call onUpdateStyleSettings() then.
222cdf0e10cSrcweir 	*/
223cdf0e10cSrcweir 	DECL_LINK( AppEventListenerHdl, void * );
224cdf0e10cSrcweir 
225cdf0e10cSrcweir     DECL_LINK(EventMultiplexerListener, sd::tools::EventMultiplexerEvent*);
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 	/** holds a model guard during drag and drop between BeginMovingHdl and EndMovingHdl */
228cdf0e10cSrcweir 	std::auto_ptr< OutlineViewModelChangeGuard > maDragAndDropModelGuard;
229cdf0e10cSrcweir 
230cdf0e10cSrcweir 	Font maPageNumberFont;
231cdf0e10cSrcweir 	sal_Int32 mnPageNumberWidthPixel;
232cdf0e10cSrcweir 	Font maBulletFont;
233cdf0e10cSrcweir 
234cdf0e10cSrcweir     SvxLRSpaceItem maLRSpaceItem;
235cdf0e10cSrcweir 	Image maSlideImage;
236cdf0e10cSrcweir };
237cdf0e10cSrcweir 
238cdf0e10cSrcweir // calls IgnoreCurrentPageChangesLevel with true in ctor and with false in dtor
239cdf0e10cSrcweir class OutlineViewPageChangesGuard
240cdf0e10cSrcweir {
241cdf0e10cSrcweir public:
242cdf0e10cSrcweir 	OutlineViewPageChangesGuard( OutlineView* pView );
243cdf0e10cSrcweir 	~OutlineViewPageChangesGuard();
244cdf0e10cSrcweir private:
245cdf0e10cSrcweir 	OutlineView* mpView;
246cdf0e10cSrcweir };
247cdf0e10cSrcweir 
248cdf0e10cSrcweir // calls BeginModelChange() on c'tor and EndModelChange() on d'tor
249cdf0e10cSrcweir class OutlineViewModelChangeGuard
250cdf0e10cSrcweir {
251cdf0e10cSrcweir public:
252cdf0e10cSrcweir 	OutlineViewModelChangeGuard( OutlineView& rView );
253cdf0e10cSrcweir 	~OutlineViewModelChangeGuard();
254cdf0e10cSrcweir private:
255cdf0e10cSrcweir 	OutlineView& mrView;
256cdf0e10cSrcweir };
257cdf0e10cSrcweir 
258cdf0e10cSrcweir } // end of namespace sd
259cdf0e10cSrcweir 
260cdf0e10cSrcweir #endif
261