xref: /trunk/main/starmath/inc/document.hxx (revision f6a9d5ca)
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