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