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