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 #ifndef DOCUMENT_HXX 24 #define DOCUMENT_HXX 25 26 #define SMDLL 1 27 28 #include <rtl/ustring.hxx> 29 #include <sfx2/docfac.hxx> 30 #include <sfx2/objsh.hxx> 31 #include <sot/sotref.hxx> 32 #include <sot/storage.hxx> 33 #include <svl/lstner.hxx> 34 #include <vcl/jobset.hxx> 35 #include <vcl/virdev.hxx> 36 37 #include <set> 38 39 #include "format.hxx" 40 #include "parse.hxx" 41 #include "smmod.hxx" 42 43 class SmNode; 44 class SfxMenuBarManager; 45 class SfxPrinter; 46 class Printer; 47 48 #define HINT_DATACHANGED 1004 49 50 #define SM30BIDENT ((sal_uLong)0x534D3033L) 51 #define SM30IDENT ((sal_uLong)0x30334d53L) 52 #define SM304AIDENT ((sal_uLong)0x34303330L) 53 #define SM30VERSION ((sal_uLong)0x00010000L) 54 #define SM50VERSION ((sal_uLong)0x00010001L) //Unterschied zur SM30VERSION ist 55 //der neue Border im Format. 56 57 #define FRMIDENT ((sal_uLong)0x03031963L) 58 #define FRMVERSION ((sal_uLong)0x00010001L) 59 60 #define STAROFFICE_XML "StarOffice XML (Math)" 61 #define MATHML_XML "MathML XML (Math)" 62 63 /* Zugriff auf den Drucker sollte ausschliesslich ueber diese Klasse erfolgen 64 * ========================================================================== 65 * 66 * Der Drucker kann dem Dokument oder auch dem OLE-Container gehoeren. Wenn 67 * das Dokument also eine OLE-Dokument ist, so gehoert der Drucker auch 68 * grundsaetzlich dem Container. Der Container arbeitet aber eventuell mit 69 * einer anderen MapUnit als der Server. Der Drucker wird bezueglich des MapMode 70 * im Konstruktor entsprechend eingestellt und im Destruktor wieder restauriert. 71 * Das bedingt natuerlich, das diese Klasse immer nur kurze Zeit existieren darf 72 * (etwa waehrend des Paints). 73 * Die Kontrolle darueber ob der Drucker selbst angelegt, vom Server besorgt 74 * oder dann auch NULL ist, uebernimmt die DocShell in der Methode GetPrt(), 75 * fuer die der Access auch Friend der DocShell ist. 76 */ 77 78 class SmDocShell; 79 class EditEngine; 80 81 //////////////////////////////////////////////////////////// 82 83 class SmPrinterAccess 84 { 85 Printer* pPrinter; 86 OutputDevice* pRefDev; 87 public: 88 SmPrinterAccess( SmDocShell &rDocShell ); 89 ~SmPrinterAccess(); 90 Printer* GetPrinter() { return pPrinter; } 91 OutputDevice* GetRefDev() { return pRefDev; } 92 }; 93 94 95 //////////////////////////////////////////////////////////// 96 97 void SetEditEngineDefaultFonts( 98 EditEngine &rEditEngine, 99 SfxItemPool &rEditEngineItemPool ); 100 101 //////////////////////////////////////////////////////////// 102 103 class SmDocShell : public SfxObjectShell, public SfxListener 104 { 105 friend class SmPrinterAccess; 106 friend class SmModel; 107 108 String aText; 109 SmFormat aFormat; 110 SmParser aInterpreter; 111 String aAccText; 112 SmNode *pTree; 113 SfxMenuBarManager *pMenuMgr; 114 SfxItemPool *pEditEngineItemPool; 115 EditEngine *pEditEngine; 116 SfxPrinter *pPrinter; //Siehe Kommentar zum SmPrinter Access! 117 Printer *pTmpPrinter; //ebenfalls 118 long nLeftBorder, 119 nRightBorder, 120 nTopBorder, 121 nBottomBorder; 122 sal_uInt16 nModifyCount; 123 sal_Bool bIsFormulaArranged; 124 125 std::set< rtl::OUString > aUsedSymbols; // to export used symbols only when saving 126 127 128 129 virtual void SFX_NOTIFY(SfxBroadcaster& rBC, const TypeId& rBCType, 130 const SfxHint& rHint, const TypeId& rHintType); 131 132 sal_Bool WriteAsMathType3( SfxMedium& ); 133 134 virtual void Draw(OutputDevice *pDevice, 135 const JobSetup & rSetup, 136 sal_uInt16 nAspect = ASPECT_CONTENT); 137 138 virtual void FillClass(SvGlobalName* pClassName, 139 sal_uInt32* pFormat, 140 String* pAppName, 141 String* pFullTypeName, 142 String* pShortTypeName, 143 sal_Int32 nFileFormat, 144 sal_Bool bTemplate = sal_False ) const; 145 146 virtual sal_Bool SetData( const String& rData ); 147 virtual sal_uLong GetMiscStatus() const; 148 virtual void OnDocumentPrinterChanged( Printer * ); 149 virtual sal_Bool InitNew( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage ); 150 virtual sal_Bool Load( SfxMedium& rMedium ); 151 void ImplSave( SvStorageStreamRef xStrm ); 152 virtual sal_Bool Save(); 153 virtual sal_Bool SaveAs( SfxMedium& rMedium ); 154 virtual sal_Bool ConvertTo( SfxMedium &rMedium ); 155 virtual sal_Bool SaveCompleted( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage ); 156 157 Printer *GetPrt(); 158 OutputDevice* GetRefDev(); 159 160 sal_Bool IsFormulaArranged() const { return bIsFormulaArranged; } 161 void SetFormulaArranged(sal_Bool bVal) { bIsFormulaArranged = bVal; } 162 163 virtual sal_Bool ConvertFrom(SfxMedium &rMedium); 164 165 public: 166 TYPEINFO(); 167 SFX_DECL_INTERFACE(SFX_INTERFACE_SMA_START+1) 168 using SotObject::GetInterface; 169 SFX_DECL_OBJECTFACTORY(); 170 171 SmDocShell( const sal_uInt64 i_nSfxCreationFlags ); 172 virtual ~SmDocShell(); 173 174 void LoadSymbols(); 175 void SaveSymbols(); 176 177 void ArrangeFormula(); 178 179 //Zugriff fuer die View. Diese Zugriffe sind nur fuer den nicht OLE-Fall! 180 //und fuer die Kommunikation mit dem SFX! 181 //Alle internen Verwendungen des Printers sollten ausschlieslich uber 182 //den SmPrinterAccess funktionieren. 183 sal_Bool HasPrinter() { return 0 != pPrinter; } 184 SfxPrinter *GetPrinter() { GetPrt(); return pPrinter; } 185 void SetPrinter( SfxPrinter * ); 186 187 const String GetComment() const; 188 189 // to replace chars that can not be saved with the document... 190 sal_Bool ReplaceBadChars(); 191 192 void UpdateText(); 193 void SetText(const String& rBuffer); 194 String& GetText() { return (aText); } 195 void SetFormat(SmFormat& rFormat); 196 const SmFormat& GetFormat() { return (aFormat); } 197 198 void Parse(); 199 SmParser & GetParser() { return aInterpreter; } 200 const SmNode * GetFormulaTree() const { return pTree; } 201 void SetFormulaTree(SmNode *&rTree) { pTree = rTree; } 202 203 const std::set< rtl::OUString > & GetUsedSymbols() const { return aUsedSymbols; } 204 205 String GetAccessibleText(); 206 207 EditEngine & GetEditEngine(); 208 SfxItemPool & GetEditEngineItemPool(); 209 210 void Draw(OutputDevice &rDev, Point &rPosition); 211 Size GetSize(); 212 213 void Repaint(); 214 215 virtual ::svl::IUndoManager *GetUndoManager (); 216 217 virtual SfxItemPool& GetPool() const; 218 219 void Execute( SfxRequest& rReq ); 220 void GetState(SfxItemSet &); 221 222 virtual void SetVisArea (const Rectangle & rVisArea); 223 virtual void SetModified(sal_Bool bModified); 224 }; 225 226 227 #endif 228 229