| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef DOCUMENT_HXX |
| #define DOCUMENT_HXX |
| |
| #define SMDLL 1 |
| |
| #include <rtl/ustring.hxx> |
| #include <sfx2/docfac.hxx> |
| #include <sfx2/objsh.hxx> |
| #include <sot/sotref.hxx> |
| #include <sot/storage.hxx> |
| #include <svl/lstner.hxx> |
| #include <vcl/jobset.hxx> |
| #include <vcl/virdev.hxx> |
| |
| #include <set> |
| |
| #include "format.hxx" |
| #include "parse.hxx" |
| #include "smmod.hxx" |
| |
| class SmNode; |
| class SfxMenuBarManager; |
| class SfxPrinter; |
| class Printer; |
| |
| #define HINT_DATACHANGED 1004 |
| |
| #define SM30BIDENT ((sal_uLong)0x534D3033L) |
| #define SM30IDENT ((sal_uLong)0x30334d53L) |
| #define SM304AIDENT ((sal_uLong)0x34303330L) |
| #define SM30VERSION ((sal_uLong)0x00010000L) |
| #define SM50VERSION ((sal_uLong)0x00010001L) //Unterschied zur SM30VERSION ist |
| //der neue Border im Format. |
| |
| #define FRMIDENT ((sal_uLong)0x03031963L) |
| #define FRMVERSION ((sal_uLong)0x00010001L) |
| |
| #define STAROFFICE_XML "StarOffice XML (Math)" |
| #define MATHML_XML "MathML XML (Math)" |
| |
| /* Zugriff auf den Drucker sollte ausschliesslich ueber diese Klasse erfolgen |
| * ========================================================================== |
| * |
| * Der Drucker kann dem Dokument oder auch dem OLE-Container gehoeren. Wenn |
| * das Dokument also eine OLE-Dokument ist, so gehoert der Drucker auch |
| * grundsaetzlich dem Container. Der Container arbeitet aber eventuell mit |
| * einer anderen MapUnit als der Server. Der Drucker wird bezueglich des MapMode |
| * im Konstruktor entsprechend eingestellt und im Destruktor wieder restauriert. |
| * Das bedingt natuerlich, das diese Klasse immer nur kurze Zeit existieren darf |
| * (etwa waehrend des Paints). |
| * Die Kontrolle darueber ob der Drucker selbst angelegt, vom Server besorgt |
| * oder dann auch NULL ist, uebernimmt die DocShell in der Methode GetPrt(), |
| * fuer die der Access auch Friend der DocShell ist. |
| */ |
| |
| class SmDocShell; |
| class EditEngine; |
| |
| //////////////////////////////////////////////////////////// |
| |
| class SmPrinterAccess |
| { |
| Printer* pPrinter; |
| OutputDevice* pRefDev; |
| public: |
| SmPrinterAccess( SmDocShell &rDocShell ); |
| ~SmPrinterAccess(); |
| Printer* GetPrinter() { return pPrinter; } |
| OutputDevice* GetRefDev() { return pRefDev; } |
| }; |
| |
| |
| //////////////////////////////////////////////////////////// |
| |
| void SetEditEngineDefaultFonts( |
| EditEngine &rEditEngine, |
| SfxItemPool &rEditEngineItemPool ); |
| |
| //////////////////////////////////////////////////////////// |
| |
| class SmDocShell : public SfxObjectShell, public SfxListener |
| { |
| friend class SmPrinterAccess; |
| friend class SmModel; |
| |
| String aText; |
| SmFormat aFormat; |
| SmParser aInterpreter; |
| String aAccText; |
| SmNode *pTree; |
| SfxMenuBarManager *pMenuMgr; |
| SfxItemPool *pEditEngineItemPool; |
| EditEngine *pEditEngine; |
| SfxPrinter *pPrinter; //Siehe Kommentar zum SmPrinter Access! |
| Printer *pTmpPrinter; //ebenfalls |
| long nLeftBorder, |
| nRightBorder, |
| nTopBorder, |
| nBottomBorder; |
| sal_uInt16 nModifyCount; |
| sal_Bool bIsFormulaArranged; |
| |
| std::set< rtl::OUString > aUsedSymbols; // to export used symbols only when saving |
| |
| |
| |
| virtual void SFX_NOTIFY(SfxBroadcaster& rBC, const TypeId& rBCType, |
| const SfxHint& rHint, const TypeId& rHintType); |
| |
| sal_Bool WriteAsMathType3( SfxMedium& ); |
| |
| virtual void Draw(OutputDevice *pDevice, |
| const JobSetup & rSetup, |
| sal_uInt16 nAspect = ASPECT_CONTENT); |
| |
| virtual void FillClass(SvGlobalName* pClassName, |
| sal_uInt32* pFormat, |
| String* pAppName, |
| String* pFullTypeName, |
| String* pShortTypeName, |
| sal_Int32 nFileFormat, |
| sal_Bool bTemplate = sal_False ) const; |
| |
| virtual sal_Bool SetData( const String& rData ); |
| virtual sal_uLong GetMiscStatus() const; |
| virtual void OnDocumentPrinterChanged( Printer * ); |
| virtual sal_Bool InitNew( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage ); |
| virtual sal_Bool Load( SfxMedium& rMedium ); |
| void ImplSave( SvStorageStreamRef xStrm ); |
| virtual sal_Bool Save(); |
| virtual sal_Bool SaveAs( SfxMedium& rMedium ); |
| virtual sal_Bool ConvertTo( SfxMedium &rMedium ); |
| virtual sal_Bool SaveCompleted( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage ); |
| |
| Printer *GetPrt(); |
| OutputDevice* GetRefDev(); |
| |
| sal_Bool IsFormulaArranged() const { return bIsFormulaArranged; } |
| void SetFormulaArranged(sal_Bool bVal) { bIsFormulaArranged = bVal; } |
| |
| virtual sal_Bool ConvertFrom(SfxMedium &rMedium); |
| |
| public: |
| TYPEINFO(); |
| SFX_DECL_INTERFACE(SFX_INTERFACE_SMA_START+1) |
| using SotObject::GetInterface; |
| SFX_DECL_OBJECTFACTORY(); |
| |
| SmDocShell( const sal_uInt64 i_nSfxCreationFlags ); |
| virtual ~SmDocShell(); |
| |
| void LoadSymbols(); |
| void SaveSymbols(); |
| |
| void ArrangeFormula(); |
| |
| //Zugriff fuer die View. Diese Zugriffe sind nur fuer den nicht OLE-Fall! |
| //und fuer die Kommunikation mit dem SFX! |
| //Alle internen Verwendungen des Printers sollten ausschlieslich uber |
| //den SmPrinterAccess funktionieren. |
| sal_Bool HasPrinter() { return 0 != pPrinter; } |
| SfxPrinter *GetPrinter() { GetPrt(); return pPrinter; } |
| void SetPrinter( SfxPrinter * ); |
| |
| const String GetComment() const; |
| |
| // to replace chars that can not be saved with the document... |
| sal_Bool ReplaceBadChars(); |
| |
| void UpdateText(); |
| void SetText(const String& rBuffer); |
| String& GetText() { return (aText); } |
| void SetFormat(SmFormat& rFormat); |
| const SmFormat& GetFormat() { return (aFormat); } |
| |
| void Parse(); |
| SmParser & GetParser() { return aInterpreter; } |
| const SmNode * GetFormulaTree() const { return pTree; } |
| void SetFormulaTree(SmNode *&rTree) { pTree = rTree; } |
| |
| const std::set< rtl::OUString > & GetUsedSymbols() const { return aUsedSymbols; } |
| |
| String GetAccessibleText(); |
| |
| EditEngine & GetEditEngine(); |
| SfxItemPool & GetEditEngineItemPool(); |
| |
| void Draw(OutputDevice &rDev, Point &rPosition); |
| Size GetSize(); |
| |
| void Repaint(); |
| |
| virtual ::svl::IUndoManager *GetUndoManager (); |
| |
| virtual SfxItemPool& GetPool() const; |
| |
| void Execute( SfxRequest& rReq ); |
| void GetState(SfxItemSet &); |
| |
| virtual void SetVisArea (const Rectangle & rVisArea); |
| virtual void SetModified(sal_Bool bModified); |
| }; |
| |
| |
| #endif |
| |