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