xref: /aoo41x/main/sd/source/ui/inc/DrawDocShell.hxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef SD_DRAW_DOC_SHELL_HXX
29 #define SD_DRAW_DOC_SHELL_HXX
30 
31 #include <sfx2/docfac.hxx>
32 #include <sfx2/objsh.hxx>
33 
34 #include <vcl/jobset.hxx>
35 #include "glob.hxx"
36 #include "sdmod.hxx"
37 #include "pres.hxx"
38 #include "sddllapi.h"
39 #include "fupoor.hxx"
40 
41 class SfxStyleSheetBasePool;
42 class SfxStatusBarManager;
43 class SdStyleSheetPool;
44 class FontList;
45 class SdDrawDocument;
46 class SvxItemFactory;
47 class SdPage;
48 class SfxPrinter;
49 struct SdrDocumentStreamInfo;
50 struct SpellCallbackInfo;
51 class AbstractSvxNameDialog;
52 class SfxUndoManager;
53 
54 namespace sd {
55 
56 class FrameView;
57 class View;
58 class ViewShell;
59 
60 // ------------------
61 // - DrawDocShell -
62 // ------------------
63 
64 class SD_DLLPUBLIC DrawDocShell : public SfxObjectShell
65 {
66 public:
67     TYPEINFO();
68     SFX_DECL_INTERFACE(SD_IF_SDDRAWDOCSHELL)
69     SFX_DECL_OBJECTFACTORY();
70 
71     DrawDocShell (
72         SfxObjectCreateMode eMode = SFX_CREATE_MODE_EMBEDDED,
73         sal_Bool bSdDataObj=sal_False,
74         DocumentType=DOCUMENT_TYPE_IMPRESS);
75 
76     DrawDocShell (
77         const sal_uInt64 nModelCreationFlags,
78         sal_Bool bSdDataObj=sal_False,
79         DocumentType=DOCUMENT_TYPE_IMPRESS);
80 
81 	DrawDocShell (
82         SdDrawDocument* pDoc,
83         SfxObjectCreateMode eMode = SFX_CREATE_MODE_EMBEDDED,
84         sal_Bool bSdDataObj=sal_False,
85         DocumentType=DOCUMENT_TYPE_IMPRESS);
86     virtual ~DrawDocShell();
87 
88     void                    UpdateRefDevice();
89 	virtual void	        Activate( sal_Bool bMDI );
90 	virtual void	        Deactivate( sal_Bool bMDI );
91     virtual sal_Bool            InitNew( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
92 	virtual sal_Bool	        ConvertFrom( SfxMedium &rMedium );
93 	virtual sal_Bool	        Save();
94 	virtual sal_Bool            SaveAsOwnFormat( SfxMedium& rMedium );
95 	virtual sal_Bool            ConvertTo( SfxMedium &rMedium );
96     virtual sal_Bool            SaveCompleted( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
97 
98     virtual sal_Bool        Load( SfxMedium &rMedium  );
99     virtual sal_Bool        LoadFrom( SfxMedium& rMedium );
100     virtual sal_Bool        SaveAs( SfxMedium &rMedium  );
101 
102     virtual Rectangle       GetVisArea(sal_uInt16 nAspect) const;
103 	virtual void        	Draw(OutputDevice*, const JobSetup& rSetup, sal_uInt16 nAspect = ASPECT_CONTENT);
104     virtual ::svl::IUndoManager*
105                             GetUndoManager();
106 	virtual Printer*        GetDocumentPrinter();
107 	virtual void            OnDocumentPrinterChanged(Printer* pNewPrinter);
108 	virtual SfxStyleSheetBasePool* GetStyleSheetPool();
109 	virtual void	        SetOrganizerSearchMask(SfxStyleSheetBasePool* pBasePool) const;
110 	virtual Size	        GetFirstPageSize();
111     virtual void            FillClass(SvGlobalName* pClassName, sal_uInt32*  pFormat, String* pAppName, String* pFullTypeName, String* pShortTypeName, sal_Int32 nFileFormat, sal_Bool bTemplate = sal_False ) const;
112 	virtual void            SetModified( sal_Bool = sal_True );
113 
114 	using SotObject::GetInterface;
115 	using SfxObjectShell::GetVisArea;
116 	using SfxShell::GetViewShell;
117 
118     sd::ViewShell* GetViewShell() { return mpViewShell; }
119     ::sd::FrameView* GetFrameView();
120     ::sd::FunctionReference	GetDocShellFunction() const { return mxDocShellFunction; }
121 	void SetDocShellFunction( const ::sd::FunctionReference& xFunction );
122 
123     SdDrawDocument*         GetDoc();
124 	DocumentType            GetDocumentType() const { return meDocType; }
125 
126 	SfxPrinter*             GetPrinter(sal_Bool bCreate);
127 	void			        SetPrinter(SfxPrinter *pNewPrinter);
128 	void			        UpdateFontList();
129 
130 	sal_Bool                    IsInDestruction() const { return mbInDestruction; }
131 
132 	void			        CancelSearching();
133 
134 	void			        Execute( SfxRequest& rReq );
135 	void			        GetState(SfxItemSet&);
136 
137 	void			        Connect(sd::ViewShell* pViewSh);
138 	void			        Disconnect(sd::ViewShell* pViewSh);
139 	void			        UpdateTablePointers();
140 
141 	sal_Bool			        GotoBookmark(const String& rBookmark);
142 
143 	Bitmap                  GetPagePreviewBitmap(SdPage* pPage, sal_uInt16 nMaxEdgePixel);
144 
145     /** checks, if the given name is a valid new name for a slide
146 
147         <p>If the name is invalid, an <type>SvxNameDialog</type> pops up that
148         queries again for a new name until it is ok or the user chose
149         Cancel.</p>
150 
151         @param pWin is necessary to pass to the <type>SvxNameDialog</type> in
152                     case an invalid name was entered.
153         @param rName the new name that is to be set for a slide.  This string
154                      may be set to an empty string (see below).
155 
156         @return sal_True, if the new name is unique.  Note that if the user entered
157                 a default name of a not-yet-existing slide (e.g. 'Slide 17'),
158                 sal_True is returned, but rName is set to an empty string.
159      */
160 	sal_Bool	                CheckPageName(::Window* pWin, String& rName );
161 
162 	void                    SetSlotFilter(sal_Bool bEnable = sal_False, sal_uInt16 nCount = 0, const sal_uInt16* pSIDs = NULL) { mbFilterEnable = bEnable; mnFilterCount = nCount; mpFilterSIDs = pSIDs; }
163 	void                    ApplySlotFilter() const;
164 
165 	sal_uInt16	                GetStyleFamily() const { return mnStyleFamily; }
166 	void	                SetStyleFamily( sal_uInt16 nSF ) { mnStyleFamily = nSF; }
167 
168 	/** executes the SID_OPENDOC slot to let the framework open a document
169 		with the given URL and this document as a referer */
170 	void					OpenBookmark( const String& rBookmarkURL );
171 
172     /** checks, if the given name is a valid new name for a slide
173 
174         <p>This method does not pop up any dialog (like CheckPageName).</p>
175 
176         @param rInOutPageName the new name for a slide that is to be renamed.
177                     This string will be set to an empty string if
178                     bResetStringIfStandardName is true and the name is of the
179                     form of any, possibly not-yet existing, standard slide
180                     (e.g. 'Slide 17')
181 
182         @param bResetStringIfStandardName if true allows setting rInOutPageName
183                     to an empty string, which returns true and implies that the
184                     slide will later on get a new standard name (with a free
185                     slide number).
186 
187         @return true, if the new name is unique.  If bResetStringIfStandardName
188                     is true, the return value is also true, if the slide name is
189                     a standard name (see above)
190      */
191     bool                    IsNewPageNameValid( String & rInOutPageName, bool bResetStringIfStandardName = false );
192 
193 
194     /** Return the reference device for the current document.  When the
195         inherited implementation returns a device then this is passed to the
196         caller.  Otherwise the returned value depends on the printer
197         independent layout mode and will usually be either a printer or a
198         virtual device used for screen rendering.
199         @return
200             Returns NULL when the current document has no reference device.
201     */
202     virtual OutputDevice* GetDocumentRefDev (void);
203 
204     DECL_LINK( RenameSlideHdl, AbstractSvxNameDialog* );
205 
206                             // #91457# ExecuteSpellPopup now handled by DrawDocShell
207 	                        DECL_LINK( OnlineSpellCallback, SpellCallbackInfo* );
208 
209 	void					ClearUndoBuffer();
210 
211 protected:
212 
213 	SdDrawDocument* 		mpDoc;
214     SfxUndoManager*         mpUndoManager;
215 	SfxPrinter* 			mpPrinter;
216 	::sd::ViewShell*		mpViewShell;
217 	FontList*				mpFontList;
218 	::sd::FunctionReference	mxDocShellFunction;
219 	DocumentType            meDocType;
220 	sal_uInt16					mnStyleFamily;
221 	const sal_uInt16*           mpFilterSIDs;
222 	sal_uInt16                  mnFilterCount;
223 	sal_Bool                    mbFilterEnable;
224 	sal_Bool					mbSdDataObj;
225 	sal_Bool                    mbInDestruction;
226 	sal_Bool 					mbOwnPrinter;
227     sal_Bool                    mbNewDocument;
228 
229 	bool					mbOwnDocument;			// if true, we own mpDoc and will delete it in our d'tor
230     void					Construct(bool bClipboard);
231     virtual void            InPlaceActivate( sal_Bool bActive );
232 };
233 
234 #ifndef SV_DECL_DRAW_DOC_SHELL_DEFINED
235 #define SV_DECL_DRAW_DOC_SHELL_DEFINED
236 SV_DECL_REF(DrawDocShell)
237 #endif
238 
239 SV_IMPL_REF (DrawDocShell)
240 
241 } // end of namespace sd
242 
243 #endif
244