1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef SD_OUTLINE_VIEW_HXX
21 #define SD_OUTLINE_VIEW_HXX
23 #include <vcl/image.hxx>
24 #include <editeng/lrspitem.hxx>
33 struct PaintFirstLineInfo
;
34 struct PasteOrDropInfos
;
36 namespace sd
{ namespace tools
{
37 class EventMultiplexerEvent
;
43 class OutlineViewShell
;
44 class OutlineViewModelChangeGuard
;
47 static const int MAX_OUTLINERVIEWS
= 4;
50 * Derivative of ::sd::View for the outline mode
52 \************************************************************************/
57 friend class OutlineViewModelChangeGuard
;
59 OutlineView (DrawDocShell
& rDocSh
,
61 OutlineViewShell
& rOutlineViewSh
);
64 /** This method is called by the view shell that owns the view to tell
65 the view that it can safely connect to the application.
66 This method must not be called before the view shell is on the shell
69 void ConnectToApplication (void);
70 void DisconnectFromApplication (void);
74 SdrTextObj
* GetTitleTextObject(SdrPage
* pPage
);
75 SdrTextObj
* GetOutlineTextObject(SdrPage
* pPage
);
77 SdrTextObj
* CreateTitleTextObject(SdPage
* pPage
);
78 SdrTextObj
* CreateOutlineTextObject(SdPage
* pPage
);
80 virtual void AddWindowToPaintView(OutputDevice
* pWin
);
81 virtual void DeleteWindowFromPaintView(OutputDevice
* pWin
);
83 OutlinerView
* GetViewByWindow (::Window
* pWin
) const;
84 SdrOutliner
* GetOutliner() { return(&mrOutliner
) ; }
86 Paragraph
* GetPrevTitle(const Paragraph
* pPara
);
87 Paragraph
* GetNextTitle(const Paragraph
* pPara
);
88 SdPage
* GetActualPage();
89 SdPage
* GetPageForParagraph( Paragraph
* pPara
);
90 Paragraph
* GetParagraphForPage( ::Outliner
& rOutl
, SdPage
* pPage
);
92 /** selects the paragraph for the given page at the outliner view*/
93 void SetActualPage( SdPage
* pActual
);
95 virtual void Paint (const Rectangle
& rRect
, ::sd::Window
* pWin
);
96 virtual void AdjustPosSizePixel(
99 ::sd::Window
* pWindow
);
101 // Callbacks fuer LINKs
102 DECL_LINK( ParagraphInsertedHdl
, Outliner
* );
103 DECL_LINK( ParagraphRemovingHdl
, Outliner
* );
104 DECL_LINK( DepthChangedHdl
, Outliner
* );
105 DECL_LINK( StatusEventHdl
, void * );
106 DECL_LINK( BeginMovingHdl
, Outliner
* );
107 DECL_LINK( EndMovingHdl
, Outliner
* );
108 DECL_LINK(RemovingPagesHdl
, void *);
109 DECL_LINK( IndentingPagesHdl
, OutlinerView
* );
110 DECL_LINK( BeginDropHdl
, void * );
111 DECL_LINK( EndDropHdl
, void * );
112 DECL_LINK( PaintingFirstLineHdl
, PaintFirstLineInfo
* );
114 sal_uLong
GetPaperWidth() const { return 2*21000; } // DIN A4 Breite
116 sal_Bool
PrepareClose(sal_Bool bUI
= sal_True
);
118 virtual sal_Bool
GetAttributes( SfxItemSet
& rTargetSet
, sal_Bool bOnlyHardAttr
=sal_False
) const;
119 virtual sal_Bool
SetAttributes(const SfxItemSet
& rSet
, sal_Bool bReplaceAll
= sal_False
);
123 void ResetLinks() const;
125 SfxStyleSheet
* GetStyleSheet() const;
127 void SetSelectedPages();
129 virtual sal_Int8
AcceptDrop (
130 const AcceptDropEvent
& rEvt
,
131 DropTargetHelper
& rTargetHelper
,
132 ::sd::Window
* pTargetWindow
= NULL
,
133 sal_uInt16 nPage
= SDRPAGE_NOTFOUND
,
134 sal_uInt16 nLayer
= SDRPAGE_NOTFOUND
);
135 virtual sal_Int8
ExecuteDrop (
136 const ExecuteDropEvent
& rEvt
,
137 DropTargetHelper
& rTargetHelper
,
138 ::sd::Window
* pTargetWindow
= NULL
,
139 sal_uInt16 nPage
= SDRPAGE_NOTFOUND
,
140 sal_uInt16 nLayer
= SDRPAGE_NOTFOUND
);
143 // Re-implement GetScriptType for this view to get correct results
144 virtual sal_uInt16
GetScriptType() const;
146 /** After this method has been called with <TRUE/> following changes of
147 the current page are ignored in that the corresponding text is not
149 This is used to supress unwanted side effects between selection and
152 void IgnoreCurrentPageChanges (bool bIgnore
);
153 void InvalidateSlideNumberArea();
155 /** creates and inserts an empty slide for the given paragraph. */
156 SdPage
* InsertSlideForParagraph( Paragraph
* pPara
);
158 void UpdateParagraph( sal_Int32 nPara
);
161 virtual void OnBeginPasteOrDrop( PasteOrDropInfos
* pInfos
);
162 virtual void OnEndPasteOrDrop( PasteOrDropInfos
* pInfos
);
165 /** call this method before you do anything that can modify the outliner
166 and or the drawing document model. It will create needed undo actions */
167 void BeginModelChange();
169 /** call this method after BeginModelChange(), when all possible model
171 void EndModelChange();
173 /** merge edit engine undo actions if possible */
174 void TryToMergeUndoActions();
176 /** updates all changes in the outliner model to the draw model */
177 void UpdateDocument();
179 OutlineViewShell
& mrOutlineViewShell
;
180 SdrOutliner
& mrOutliner
;
181 OutlinerView
* mpOutlinerView
[MAX_OUTLINERVIEWS
];
183 std::vector
<Paragraph
*> maOldParaOrder
;
184 std::vector
<Paragraph
*> maSelectedParas
;
186 sal_Int32 mnPagesToProcess
; // for the progress bar
187 sal_Int32 mnPagesProcessed
;
189 sal_Bool mbFirstPaint
;
191 SfxProgress
* mpProgress
;
193 /** stores the last used document color.
194 this is changed in onUpdateStyleSettings()
198 /** updates the high contrast settings and document color if they changed.
199 @param bForceUpdate forces the method to set all style settings
201 void onUpdateStyleSettings( bool bForceUpdate
= false );
203 /** this link is called from the vcl applicaten when the stylesettings
204 change. Its only purpose is to call onUpdateStyleSettings() then.
206 DECL_LINK( AppEventListenerHdl
, void * );
208 DECL_LINK(EventMultiplexerListener
, sd::tools::EventMultiplexerEvent
*);
210 /** holds a model guard during drag and drop between BeginMovingHdl and EndMovingHdl */
211 std::auto_ptr
< OutlineViewModelChangeGuard
> maDragAndDropModelGuard
;
213 Font maPageNumberFont
;
216 SvxLRSpaceItem maLRSpaceItem
;
220 // calls IgnoreCurrentPageChangesLevel with true in ctor and with false in dtor
221 class OutlineViewPageChangesGuard
224 OutlineViewPageChangesGuard( OutlineView
* pView
);
225 ~OutlineViewPageChangesGuard();
230 // calls BeginModelChange() on c'tor and EndModelChange() on d'tor
231 class OutlineViewModelChangeGuard
234 OutlineViewModelChangeGuard( OutlineView
& rView
);
235 ~OutlineViewModelChangeGuard();
240 } // end of namespace sd
244 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */