xref: /AOO41X/main/sw/inc/docsh.hxx (revision 1d2dbeb0b7301723c6d13094e87a8714ef81a328)
1*1d2dbeb0SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*1d2dbeb0SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*1d2dbeb0SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*1d2dbeb0SAndrew Rist  * distributed with this work for additional information
6*1d2dbeb0SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*1d2dbeb0SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*1d2dbeb0SAndrew Rist  * "License"); you may not use this file except in compliance
9*1d2dbeb0SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*1d2dbeb0SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*1d2dbeb0SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*1d2dbeb0SAndrew Rist  * software distributed under the License is distributed on an
15*1d2dbeb0SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*1d2dbeb0SAndrew Rist  * KIND, either express or implied.  See the License for the
17*1d2dbeb0SAndrew Rist  * specific language governing permissions and limitations
18*1d2dbeb0SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*1d2dbeb0SAndrew Rist  *************************************************************/
21*1d2dbeb0SAndrew Rist 
22*1d2dbeb0SAndrew Rist 
23cdf0e10cSrcweir #ifndef _SWDOCSH_HXX
24cdf0e10cSrcweir #define _SWDOCSH_HXX
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <rtl/ref.hxx>
27cdf0e10cSrcweir #include <com/sun/star/frame/XController.hpp>
28cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.h>
29cdf0e10cSrcweir #include <vcl/timer.hxx>
30cdf0e10cSrcweir #include <sfx2/docfac.hxx>
31cdf0e10cSrcweir #include <sfx2/objsh.hxx>
32cdf0e10cSrcweir #include "swdllapi.h"
33cdf0e10cSrcweir #include <swdll.hxx>
34cdf0e10cSrcweir #include <shellid.hxx>
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #include <svl/lstner.hxx>
37cdf0e10cSrcweir #include <svtools/embedhlp.hxx>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir class SwDoc;
40cdf0e10cSrcweir class SfxDocumentInfoDialog;
41cdf0e10cSrcweir class SfxStyleSheetBasePool;
42cdf0e10cSrcweir class SfxInPlaceClient;
43cdf0e10cSrcweir class FontList;
44cdf0e10cSrcweir class SwView;
45cdf0e10cSrcweir class SwWrtShell;
46cdf0e10cSrcweir class SwFEShell;
47cdf0e10cSrcweir class Reader;
48cdf0e10cSrcweir class SwReader;
49cdf0e10cSrcweir class SwCrsrShell;
50cdf0e10cSrcweir class SwSrcView;
51cdf0e10cSrcweir class SwPaM;
52cdf0e10cSrcweir class SwgReaderOption;
53cdf0e10cSrcweir class SwOLEObj;
54cdf0e10cSrcweir class IDocumentDeviceAccess;
55cdf0e10cSrcweir class IDocumentSettingAccess;
56cdf0e10cSrcweir class IDocumentTimerAccess;
57cdf0e10cSrcweir class IDocumentChartDataProviderAccess;
58cdf0e10cSrcweir 
59cdf0e10cSrcweir 
60cdf0e10cSrcweir class SW_DLLPUBLIC SwDocShell: public SfxObjectShell, public SfxListener
61cdf0e10cSrcweir {
62cdf0e10cSrcweir 	SwDoc*					pDoc;			// Document
63cdf0e10cSrcweir 	rtl::Reference< SfxStyleSheetBasePool >	mxBasePool;		// Durchreiche fuer Formate
64cdf0e10cSrcweir 	FontList*				pFontList;		// aktuelle FontListe
65cdf0e10cSrcweir 
66cdf0e10cSrcweir 	// Nix geht ohne die WrtShell (historische Gruende)
67cdf0e10cSrcweir 	// RuekwaertsPointer auf die View (historische Gruende)
68cdf0e10cSrcweir 	// Dieser gilt solange bis im Activate ein neuer gesetzt wird
69cdf0e10cSrcweir 	// oder dieser im Dtor der View geloescht wird
70cdf0e10cSrcweir 	//
71cdf0e10cSrcweir 	SwView* 				pView;
72cdf0e10cSrcweir 	SwWrtShell* 			pWrtShell;
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 	Timer					aFinishedTimer;	// Timer fuers ueberpriefen der
75cdf0e10cSrcweir 											// Grafik-Links. Sind alle da,
76cdf0e10cSrcweir 											// dann ist Doc voll. geladen
77cdf0e10cSrcweir 
78cdf0e10cSrcweir     //SvPersistRef            xOLEChildList;  // fuers RemoveOLEObjects
79cdf0e10cSrcweir     comphelper::EmbeddedObjectContainer*    pOLEChildList;
80cdf0e10cSrcweir     sal_Int16               nUpdateDocMode; // contains the com::sun::star::document::UpdateDocMode
81cdf0e10cSrcweir     bool                    bInUpdateFontList; //prevent nested calls of UpdateFontList
82cdf0e10cSrcweir 	// Methoden fuer den Zugriff aufs Doc
83cdf0e10cSrcweir 	SW_DLLPRIVATE void					AddLink();
84cdf0e10cSrcweir 	SW_DLLPRIVATE void					RemoveLink();
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 	// Hint abfangen fuer DocInfo
87cdf0e10cSrcweir 	SW_DLLPRIVATE virtual void			Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
88cdf0e10cSrcweir 
89cdf0e10cSrcweir 	// FileIO
90cdf0e10cSrcweir     SW_DLLPRIVATE virtual sal_Bool InitNew( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
91cdf0e10cSrcweir     SW_DLLPRIVATE virtual sal_Bool Load( SfxMedium& rMedium );
92cdf0e10cSrcweir     SW_DLLPRIVATE virtual sal_Bool LoadFrom( SfxMedium& rMedium );
93cdf0e10cSrcweir     SW_DLLPRIVATE virtual sal_Bool            ConvertFrom( SfxMedium &rMedium );
94cdf0e10cSrcweir     SW_DLLPRIVATE virtual sal_Bool            ConvertTo( SfxMedium &rMedium );
95cdf0e10cSrcweir     SW_DLLPRIVATE virtual sal_Bool SaveAs( SfxMedium& rMedium );
96cdf0e10cSrcweir     SW_DLLPRIVATE virtual sal_Bool SaveCompleted( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
97cdf0e10cSrcweir 
98cdf0e10cSrcweir 	SW_DLLPRIVATE virtual sal_uInt16			PrepareClose( sal_Bool bUI = sal_True, sal_Bool bForBrowsing = sal_False );
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 	// DocInfo dem Doc melden
101cdf0e10cSrcweir 	//
102cdf0e10cSrcweir 	SW_DLLPRIVATE virtual SfxDocumentInfoDialog* CreateDocumentInfoDialog(
103cdf0e10cSrcweir 									Window *pParent, const SfxItemSet &);
104cdf0e10cSrcweir 	// OLE-Geraffel
105cdf0e10cSrcweir 	SW_DLLPRIVATE virtual void			Draw( OutputDevice*, const JobSetup&, sal_uInt16);
106cdf0e10cSrcweir 
107cdf0e10cSrcweir 	// Methoden fuer StyleSheets
108cdf0e10cSrcweir 	SW_DLLPRIVATE sal_uInt16					Edit( const String &rName, const String& rParent, sal_uInt16 nFamily,
109cdf0e10cSrcweir 									sal_uInt16 nMask, sal_Bool bNew,
110cdf0e10cSrcweir 									sal_Bool bColumn = sal_False,
111cdf0e10cSrcweir 									SwWrtShell* pActShell = 0,
112cdf0e10cSrcweir 									sal_Bool bBasic = sal_False );
113cdf0e10cSrcweir 	SW_DLLPRIVATE sal_uInt16					Delete(const String &rName, sal_uInt16 nFamily);
114cdf0e10cSrcweir 	SW_DLLPRIVATE sal_uInt16					ApplyStyles(const String &rName, sal_uInt16 nFamily, SwWrtShell* pShell = 0,
115cdf0e10cSrcweir 										sal_uInt16 nMode = 0 );
116cdf0e10cSrcweir 	SW_DLLPRIVATE sal_uInt16					DoWaterCan( const String &rName, sal_uInt16 nFamily);
117cdf0e10cSrcweir 	SW_DLLPRIVATE sal_uInt16					UpdateStyle(const String &rName, sal_uInt16 nFamily, SwWrtShell* pShell = 0);
118cdf0e10cSrcweir 	SW_DLLPRIVATE sal_uInt16					MakeByExample(const String &rName,
119cdf0e10cSrcweir 											sal_uInt16 nFamily, sal_uInt16 nMask, SwWrtShell* pShell = 0);
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 	SW_DLLPRIVATE void					InitDraw();
122cdf0e10cSrcweir 	SW_DLLPRIVATE void					SubInitNew();   // fuer InitNew und HtmlSourceModus
123cdf0e10cSrcweir 
124cdf0e10cSrcweir 	SW_DLLPRIVATE void 					RemoveOLEObjects();
125cdf0e10cSrcweir 	SW_DLLPRIVATE void					CalcLayoutForOLEObjects();
126cdf0e10cSrcweir 
127cdf0e10cSrcweir     SW_DLLPRIVATE void                    Init_Impl();
128cdf0e10cSrcweir     SW_DLLPRIVATE DECL_STATIC_LINK( SwDocShell, IsLoadFinished, void* );
129cdf0e10cSrcweir 
130cdf0e10cSrcweir 
131cdf0e10cSrcweir     using SfxObjectShell::GetVisArea;
132cdf0e10cSrcweir     using SfxObjectShell::GetStyleFamilyBitmap;
133cdf0e10cSrcweir 
134cdf0e10cSrcweir protected:
135cdf0e10cSrcweir     /// override to update text fields
136cdf0e10cSrcweir     virtual void                DoFlushDocInfo();
137cdf0e10cSrcweir 
138cdf0e10cSrcweir public:
139cdf0e10cSrcweir     using SotObject::GetInterface;
140cdf0e10cSrcweir 
141cdf0e10cSrcweir 	// aber selbst implementieren
142cdf0e10cSrcweir 	SFX_DECL_INTERFACE(SW_DOCSHELL)
143cdf0e10cSrcweir     SFX_DECL_OBJECTFACTORY()
144cdf0e10cSrcweir 	TYPEINFO();
145cdf0e10cSrcweir 
146cdf0e10cSrcweir     static SfxInterface *_GetInterface() { return GetStaticInterface(); }
147cdf0e10cSrcweir 
148cdf0e10cSrcweir 	static rtl::OUString GetEventName( sal_Int32 nId );
149cdf0e10cSrcweir 
150cdf0e10cSrcweir 	//Das Doc wird fuer SO-Datenaustausch benoetigt!
151cdf0e10cSrcweir 	SwDocShell( SfxObjectCreateMode eMode = SFX_CREATE_MODE_EMBEDDED );
152cdf0e10cSrcweir 	SwDocShell( const sal_uInt64 i_nSfxCreationFlags );
153cdf0e10cSrcweir 	SwDocShell( SwDoc *pDoc, SfxObjectCreateMode eMode = SFX_CREATE_MODE_STANDARD );
154cdf0e10cSrcweir 	~SwDocShell();
155cdf0e10cSrcweir 
156cdf0e10cSrcweir 	// OLE 2.0-Benachrichtigung
157cdf0e10cSrcweir 	DECL_LINK( Ole2ModifiedHdl, void * );
158cdf0e10cSrcweir 
159cdf0e10cSrcweir 	// OLE-Geraffel
160cdf0e10cSrcweir 	virtual void	  SetVisArea( const Rectangle &rRect );
161cdf0e10cSrcweir 	virtual Rectangle GetVisArea( sal_uInt16 nAspect ) const;
162cdf0e10cSrcweir 	virtual Printer  *GetDocumentPrinter();
163cdf0e10cSrcweir     virtual OutputDevice* GetDocumentRefDev();
164cdf0e10cSrcweir 	virtual void	  OnDocumentPrinterChanged( Printer * pNewPrinter );
165cdf0e10cSrcweir 	virtual sal_uLong	  GetMiscStatus() const;
166cdf0e10cSrcweir 
167cdf0e10cSrcweir 	virtual void			PrepareReload();
168cdf0e10cSrcweir 	virtual void			SetModified( sal_Bool = sal_True );
169cdf0e10cSrcweir 
170cdf0e10cSrcweir 	// Dispatcher
171cdf0e10cSrcweir 	void					Execute(SfxRequest &);
172cdf0e10cSrcweir 	void					ExecStyleSheet(SfxRequest&);
173cdf0e10cSrcweir 	void					ExecDB(SfxRequest&);
174cdf0e10cSrcweir 
175cdf0e10cSrcweir 	void					GetState(SfxItemSet &);
176cdf0e10cSrcweir 	void					StateAlways(SfxItemSet &);
177cdf0e10cSrcweir 	void					StateStyleSheet(SfxItemSet&, SwWrtShell* pSh = 0 );
178cdf0e10cSrcweir 
179cdf0e10cSrcweir 	// Doc rausreichen aber VORSICHT
180cdf0e10cSrcweir     inline SwDoc*                   GetDoc() { return pDoc; }
181cdf0e10cSrcweir     inline const SwDoc*             GetDoc() const { return pDoc; }
182cdf0e10cSrcweir     IDocumentDeviceAccess*          getIDocumentDeviceAccess();
183cdf0e10cSrcweir     const IDocumentSettingAccess*   getIDocumentSettingAccess() const;
184cdf0e10cSrcweir     IDocumentChartDataProviderAccess*       getIDocumentChartDataProviderAccess();
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 
187cdf0e10cSrcweir     void                    UpdateFontList();
188cdf0e10cSrcweir 	void					UpdateChildWindows();
189cdf0e10cSrcweir 
190cdf0e10cSrcweir 	// globaler IO
191cdf0e10cSrcweir 	virtual sal_Bool			Save();
192cdf0e10cSrcweir 
193cdf0e10cSrcweir 	// fuer VorlagenPI
194cdf0e10cSrcweir 	virtual SfxStyleSheetBasePool*	GetStyleSheetPool();
195cdf0e10cSrcweir 
196cdf0e10cSrcweir 	// Fuer Organizer
197cdf0e10cSrcweir 	virtual sal_Bool Insert(SfxObjectShell &rSource,
198cdf0e10cSrcweir 						sal_uInt16	nSourceIdx1,
199cdf0e10cSrcweir 						sal_uInt16	nSourceIdx2,
200cdf0e10cSrcweir 						sal_uInt16	nSourceIdx3,
201cdf0e10cSrcweir 						sal_uInt16& nIdx1,
202cdf0e10cSrcweir 						sal_uInt16& nIdx2,
203cdf0e10cSrcweir 						sal_uInt16& nIdx3,
204cdf0e10cSrcweir 						sal_uInt16& nRemovedIdx);
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 	virtual sal_Bool Remove(sal_uInt16 nIdx1,
207cdf0e10cSrcweir 						sal_uInt16 nIdx2 = INDEX_IGNORE,
208cdf0e10cSrcweir 						sal_uInt16 nIdx3 = INDEX_IGNORE);
209cdf0e10cSrcweir 
210cdf0e10cSrcweir 	virtual Bitmap 		GetStyleFamilyBitmap( SfxStyleFamily eFamily, BmpColorMode eColorMode );
211cdf0e10cSrcweir 
212cdf0e10cSrcweir 	// View setzen fuer Aktionen ueber Shell
213cdf0e10cSrcweir 	void 		  SetView(SwView* pVw);
214cdf0e10cSrcweir 	const SwView *GetView() const { return pView; }
215cdf0e10cSrcweir     SwView       *GetView()       { return pView; }
216cdf0e10cSrcweir 
217cdf0e10cSrcweir 	// Zugriff auf die zur SwView gehoerige SwWrtShell
218cdf0e10cSrcweir 		  SwWrtShell *GetWrtShell() 	  { return pWrtShell; }
219cdf0e10cSrcweir 	const SwWrtShell *GetWrtShell() const { return pWrtShell; }
220cdf0e10cSrcweir 
221cdf0e10cSrcweir 	// fuer die Core - die kennt die DocShell aber keine WrtShell!
222cdf0e10cSrcweir 		  SwFEShell *GetFEShell();
223cdf0e10cSrcweir 	const SwFEShell *GetFEShell() const
224cdf0e10cSrcweir 				{ return ((SwDocShell*)this)->GetFEShell(); }
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 	// Fuer Einfuegen Dokument
228cdf0e10cSrcweir 	Reader* StartConvertFrom(SfxMedium& rMedium, SwReader** ppRdr,
229cdf0e10cSrcweir 							SwCrsrShell* pCrsrSh = 0, SwPaM* pPaM = 0);
230cdf0e10cSrcweir 
231cdf0e10cSrcweir 	virtual long DdeGetData( const String& rItem, const String& rMimeType,
232cdf0e10cSrcweir 							 ::com::sun::star::uno::Any & rValue );
233cdf0e10cSrcweir 	virtual long DdeSetData( const String& rItem, const String& rMimeType,
234cdf0e10cSrcweir 								const ::com::sun::star::uno::Any & rValue );
235cdf0e10cSrcweir     virtual ::sfx2::SvLinkSource* DdeCreateLinkSource( const String& rItem );
236cdf0e10cSrcweir 	virtual void FillClass( SvGlobalName * pClassName,
237cdf0e10cSrcweir 								   sal_uInt32 * pClipFormat,
238cdf0e10cSrcweir 								   String * pAppName,
239cdf0e10cSrcweir 								   String * pLongUserName,
240cdf0e10cSrcweir                                    String * pUserName,
241cdf0e10cSrcweir                                    sal_Int32 nFileFormat,
242cdf0e10cSrcweir                                    sal_Bool bTemplate = sal_False ) const;
243cdf0e10cSrcweir 
244cdf0e10cSrcweir 	virtual void LoadStyles( SfxObjectShell& rSource );
245cdf0e10cSrcweir 
246cdf0e10cSrcweir     void _LoadStyles( SfxObjectShell& rSource, sal_Bool bPreserveCurrentDocument );
247cdf0e10cSrcweir 
248cdf0e10cSrcweir 	// Seitenvorlagedialog anzeigen, ggf. auf Spaltenpage
249cdf0e10cSrcweir 	void FormatPage( const String& rPage,
250cdf0e10cSrcweir 						sal_Bool bColumn = sal_False,
251cdf0e10cSrcweir 						SwWrtShell* 	pActShell = 0 );
252cdf0e10cSrcweir 
253cdf0e10cSrcweir     // --> OD 2006-11-07 #i59688#
254cdf0e10cSrcweir     // linked graphics are now loaded on demand.
255cdf0e10cSrcweir     // Thus, loading of linked graphics no longer needed and necessary for
256cdf0e10cSrcweir     // the load of document being finished.
257cdf0e10cSrcweir //    // Timer starten fuers ueberpruefen der Grafik-Links. Sind alle
258cdf0e10cSrcweir //    // vollstaendig geladen, dann ist das Doc fertig
259cdf0e10cSrcweir //    void StartLoadFinishedTimer();
260cdf0e10cSrcweir     void LoadingFinished();
261cdf0e10cSrcweir     // <--
262cdf0e10cSrcweir 
263cdf0e10cSrcweir 	// eine Uebertragung wird abgebrochen (wird aus dem SFX gerufen)
264cdf0e10cSrcweir 	virtual void CancelTransfers();
265cdf0e10cSrcweir 
266cdf0e10cSrcweir 	// Doc aus Html-Source neu laden
267cdf0e10cSrcweir 	void	ReloadFromHtml( const String& rStreamName, SwSrcView* pSrcView );
268cdf0e10cSrcweir 
269cdf0e10cSrcweir     sal_Int16   GetUpdateDocMode() const {return nUpdateDocMode;}
270cdf0e10cSrcweir 
271cdf0e10cSrcweir 	//Activate wait cursor for all windows of this document
272cdf0e10cSrcweir 	//Optionally all dispatcher could be Locked
273cdf0e10cSrcweir 	//Usually locking should be done using the class: SwWaitObject!
274cdf0e10cSrcweir 	void EnterWait( sal_Bool bLockDispatcher );
275cdf0e10cSrcweir 	void LeaveWait( sal_Bool bLockDispatcher );
276cdf0e10cSrcweir 
277cdf0e10cSrcweir 	void ToggleBrowserMode(sal_Bool bOn, SwView* pView);
278cdf0e10cSrcweir 
279cdf0e10cSrcweir 	sal_uLong LoadStylesFromFile( const String& rURL, SwgReaderOption& rOpt,
280cdf0e10cSrcweir 								sal_Bool bUnoCall );
281cdf0e10cSrcweir 	void InvalidateModel();
282cdf0e10cSrcweir 	void ReactivateModel();
283cdf0e10cSrcweir 
284cdf0e10cSrcweir 	virtual ::com::sun::star::uno::Sequence< ::rtl::OUString >	GetEventNames();
285cdf0e10cSrcweir 
286cdf0e10cSrcweir     // --> FME 2004-08-05 #i20883# Digital Signatures and Encryption
287cdf0e10cSrcweir     virtual sal_uInt16 GetHiddenInformationState( sal_uInt16 nStates );
288cdf0e10cSrcweir     // <--
289cdf0e10cSrcweir 
290cdf0e10cSrcweir     // --> FME 2005-02-25 #i42634# Overwrites SfxObjectShell::UpdateLinks
291cdf0e10cSrcweir     // This new function is necessary to trigger update of links in docs
292cdf0e10cSrcweir     // read by the binary filter:
293cdf0e10cSrcweir     virtual void UpdateLinks();
294cdf0e10cSrcweir     // <--
295cdf0e10cSrcweir 
296cdf0e10cSrcweir     ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >
297cdf0e10cSrcweir                                 GetController();
298cdf0e10cSrcweir 
299cdf0e10cSrcweir     SfxInPlaceClient* GetIPClient( const ::svt::EmbeddedObjectRef& xObjRef );
300cdf0e10cSrcweir 
301cdf0e10cSrcweir     virtual const ::sfx2::IXmlIdRegistry* GetXmlIdRegistry() const;
302cdf0e10cSrcweir 
303cdf0e10cSrcweir     // passwword protection for Writer (derived from SfxObjectShell)
304cdf0e10cSrcweir     // see also:    FN_REDLINE_ON, FN_REDLINE_ON
305cdf0e10cSrcweir     virtual bool    IsChangeRecording() const;
306cdf0e10cSrcweir     virtual bool    HasChangeRecordProtection() const;
307cdf0e10cSrcweir     virtual void    SetChangeRecording( bool bActivate );
308cdf0e10cSrcweir     virtual bool    SetProtectionPassword( const String &rPassword );
309cdf0e10cSrcweir     virtual bool    GetProtectionHash( /*out*/ ::com::sun::star::uno::Sequence< sal_Int8 > &rPasswordHash );
310cdf0e10cSrcweir };
311cdf0e10cSrcweir 
312cdf0e10cSrcweir class Graphic;
313cdf0e10cSrcweir //implemented in source/ui/docvw/romenu.cxx
314cdf0e10cSrcweir String ExportGraphic( const Graphic &rGraphic, const String &rGrfName );
315cdf0e10cSrcweir 
316cdf0e10cSrcweir #endif
317