xref: /AOO41X/main/sd/source/ui/inc/OutlineView.hxx (revision 67e470dafe1997e73f56ff7ff4878983707e3e07)
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;
GetOutliner()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 
GetPaperWidth() const120     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