diff options
Diffstat (limited to 'filter/inc/filter/msfilter/msocximex.hxx')
-rw-r--r-- | filter/inc/filter/msfilter/msocximex.hxx | 1423 |
1 files changed, 1423 insertions, 0 deletions
diff --git a/filter/inc/filter/msfilter/msocximex.hxx b/filter/inc/filter/msfilter/msocximex.hxx new file mode 100644 index 000000000000..cf06e8378541 --- /dev/null +++ b/filter/inc/filter/msfilter/msocximex.hxx @@ -0,0 +1,1423 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: msocximex.hxx,v $ + * $Revision: 1.6 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef _MSOCXIMEX_HXX +#define _MSOCXIMEX_HXX + +#include <sot/storage.hxx> +#include <tools/debug.hxx> + +//!! no such defines in global namespaces - it will break other existing code that uses the same define!! +//#ifndef C2U +//#define C2U(cChar) rtl::OUString::createFromAscii(cChar) +//#endif +#include "filter/msfilter/msfilterdllapi.h" +#include <vector> +#include <hash_map> + +namespace com{namespace sun{namespace star{ + namespace drawing{ + class XDrawPage; + class XShape; + class XShapes; + } + namespace form{ + class XFormComponent; + } + namespace lang{ + class XMultiServiceFactory; + } + namespace container{ + class XIndexContainer; + class XNameContainer; + } + namespace beans{ + class XPropertySet; + } + namespace text{ + class XText; + } + namespace awt{ + struct Size; + class XControlModel; + } + namespace uno{ + class XComponentContext; + } + +}}} + +class OCX_Control; +class SfxObjectShell; +class SwPaM; + +class TypeName +{ +public: + String msName; + sal_uInt16 mnType; + sal_Int32 mnLeft; + sal_Int32 mnTop; + sal_Int32 mnStoreId; + TypeName(sal_Char *pName, sal_uInt32 nStoreId, sal_uInt32 nLen, sal_uInt16 nType, + sal_Int32 nLeft, sal_Int32 nTop); +}; + + +class MSFILTER_DLLPUBLIC SvxMSConvertOCXControls +{ +public: + SvxMSConvertOCXControls( SfxObjectShell *pDSh,SwPaM *pP ); + virtual ~SvxMSConvertOCXControls(); + + //Reads a control from the given storage, constructed shape in pShapeRef + sal_Bool ReadOCXStream( SotStorageRef& rSrc1, + com::sun::star::uno::Reference< + com::sun::star::drawing::XShape > *pShapeRef=0, + BOOL bFloatingCtrl=FALSE ); + + + //Excel has a nasty kludged mechanism for this, read + //the comments in the source to follow it + sal_Bool ReadOCXExcelKludgeStream(SotStorageStreamRef& rSrc1, + com::sun::star::uno::Reference < + com::sun::star::drawing::XShape > *pShapeRef,BOOL bFloatingCtrl); + + + //Writes the given Uno Control into the given storage + + static sal_Bool WriteOCXStream(SotStorageRef &rSrc1, + const com::sun::star::uno::Reference< + com::sun::star::awt::XControlModel > &rControlModel, + const com::sun::star::awt::Size& rSize,String &rName); + + //Excel has a nasty kludged mechanism for this, read + //the comments in the source to follow it + static sal_Bool WriteOCXExcelKludgeStream(SotStorageStreamRef& rContents, + const com::sun::star::uno::Reference< + com::sun::star::awt::XControlModel > &rControlModel, + const com::sun::star::awt::Size &rSize, String &rName); + + //Generate an OCX converter based on the OLE2 name + static OCX_Control *OCX_Factory(const String &rId); + + //Generate an OCX converter based on the StarOffice UNO id + static OCX_Control *OCX_Factory( const com::sun::star::uno::Reference< + com::sun::star::awt::XControlModel > &rControlModel, + String &rId,String &rName); + + virtual sal_Bool InsertControl( + const com::sun::star::uno::Reference< + com::sun::star::form::XFormComponent >& /*rFComp*/, + const com::sun::star::awt::Size& /*rSize*/, + com::sun::star::uno::Reference< + com::sun::star::drawing::XShape >* /*pShape*/, + BOOL /*bFloatingCtrl*/ ) {return sal_False;} + + /*begin: Backwards compatability with office 95 import, modify later*/ + const com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory > & GetServiceFactory(); + + sal_uInt16 GetEditNum() { return ++nEdit; } + sal_uInt16 GetCheckboxNum() { return ++nCheckbox; } + /*end: Backwards compatability*/ +protected: + const com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > & + GetShapes(); + + const com::sun::star::uno::Reference< + com::sun::star::container::XIndexContainer > & GetFormComps(); + + SfxObjectShell *pDocSh; + SwPaM *pPaM; + + // gecachte Interfaces + com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage > + xDrawPage; + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > + xShapes; + com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > xServiceFactory; + + // das einzige Formular + com::sun::star::uno::Reference< com::sun::star::container::XIndexContainer > + xFormComps; + + sal_uInt16 nEdit; + sal_uInt16 nCheckbox; + + virtual const com::sun::star::uno::Reference< + com::sun::star::drawing::XDrawPage > & GetDrawPage(); +}; + +class OCX_FontData +{ +public: + OCX_FontData() : nFontNameLen(0), fBold(0), fItalic(0), fUnderline(0), + fStrike(0), nFontSize(12), nJustification(1), pFontName(0), + bHasAlign(FALSE), bHasFont(TRUE) {} + ~OCX_FontData() { + if (pFontName) + delete [] pFontName; + } + sal_Bool Read(SotStorageStream *pS); + void Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet > &rPropSet); + + sal_Bool Export(SotStorageStreamRef &rContent, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[4]; + + sal_uInt32 nFontNameLen; + + sal_uInt8 fBold:1; + sal_uInt8 fItalic:1; + sal_uInt8 fUnderline:1; + sal_uInt8 fStrike:1; + sal_uInt8 fUnknown1:4; + + sal_uInt8 nUnknown2; + sal_uInt8 nUnknown3; + sal_uInt8 nUnknown4; + + sal_uInt32 nFontSize; + sal_uInt16 nLanguageID; + sal_uInt8 nJustification; + sal_uInt16 nFontWeight; + + char *pFontName; + void SetHasAlign(sal_Bool bIn) {bHasAlign=bIn;} + void SetHasFont(sal_Bool bIn) {bHasFont=bIn;} +protected: + static sal_uInt16 nStandardId; + sal_uInt8 ExportAlign(sal_Int16 nAlign) const; + sal_Int16 ImportAlign(sal_uInt8 nJustification) const; +private: + sal_Bool bHasAlign; + sal_Bool bHasFont; +}; + +class MSFILTER_DLLPUBLIC OCX_Control +{ +public: + OCX_Control(UniString sN, OCX_Control* parent = NULL ) : nWidth( 0 ), nHeight( 0 ), mnLeft(0), mnTop(0), + mnStep(0), mnBackColor(0x8000000FL), mnForeColor(0), mnTabPos(0), mbVisible(true), sName(sN), pDocSh(0), + bSetInDialog(FALSE), mpParent( parent ) {} + sal_Bool FullRead(SotStorageStream *pS) + { + return Read(pS) && ReadFontData(pS); + }; + virtual sal_Bool Read(SotStorageStream *pS); + virtual sal_Bool ReadFontData(SotStorageStream *pS); + virtual sal_Bool Import(const com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory > &rServiceFactory, + com::sun::star::uno::Reference< + com::sun::star::form::XFormComponent > &rFComp, + com::sun::star::awt::Size &rSz); + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer> + &rDialog); + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet>& /*rPropSet*/) + {return sal_False;} + //Export exports a control as an OLE style storage stream tree + virtual sal_Bool Export(SotStorageRef& /*rObj*/, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet>& /*rPropSet*/, + const com::sun::star::awt::Size& /*rSize*/) {return sal_False;} + + //WriteContents writes the contents of a contents stream, for + //the Excel export you cannot use Export, only WriteContents instead + virtual sal_Bool WriteContents(SotStorageStreamRef& /*rObj*/, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet>& /*rPropSet*/, + const com::sun::star::awt::Size& /*rSize*/) {return sal_False;} + void SetInDialog(bool bState) { bSetInDialog = bState; } + bool GetInDialog() { return bSetInDialog; } + + sal_Bool ReadAndImport(SotStorageStream *pS, + com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory > &rSF, + com::sun::star::uno::Reference< + com::sun::star::form::XFormComponent > &rFComp, + com::sun::star::awt::Size &rSz) + { + if (Read(pS)) + return Import(rSF,rFComp,rSz); + return sal_False; + } + virtual ~OCX_Control() {} + + static void FillSystemColors(); + + sal_uInt32 nWidth; + sal_uInt32 nHeight; + sal_Int32 mnLeft; + sal_Int32 mnTop; + sal_Int32 mnStep; + sal_Int32 mnBackColor; + sal_Int32 mnForeColor; + sal_uInt16 mnTabPos; + bool mbVisible; + UniString sName; + UniString msToolTip; + OCX_FontData aFontData; + SfxObjectShell *pDocSh; +protected: + + sal_uInt32 ImportColor(sal_uInt32 nColorCode) const; + sal_uInt32 ExportColor(sal_uInt32 nColorCode) const; + sal_uInt32 SwapColor(sal_uInt32 nColorCode) const; + sal_Int16 ImportBorder(sal_uInt16 nSpecialEffect,sal_uInt16 nBorderStyle) + const; + sal_uInt8 ExportBorder(sal_uInt16 nBorder,sal_uInt8 &rBorderStyle) const; + bool bSetInDialog; + sal_Int16 ImportSpecEffect( sal_uInt8 nSpecialEffect ) const; + sal_uInt8 ExportSpecEffect( sal_Int16 nApiEffect ) const; + static sal_uInt16 nStandardId; + static sal_uInt8 __READONLY_DATA aObjInfo[4]; + rtl::OUString msFormType; + rtl::OUString msDialogType; + OCX_Control* mpParent; +private: + static sal_uInt32 pColor[25]; +}; + +class OCX_ModernControl : public OCX_Control +{ +public: + OCX_ModernControl(UniString sN) : OCX_Control(sN), + fEnabled(1), fLocked(0), fBackStyle(1), fColumnHeads(0), fIntegralHeight(1), + fMatchRequired(0), fAlignment(1), fDragBehaviour(0), fEnterKeyBehaviour(0), + fEnterFieldBehaviour(0), fTabKeyBehaviour(0), fWordWrap(1), + fSelectionMargin(1), fAutoWordSelect(1), fAutoSize(0), fHideSelection(1), + fAutoTab(0), fMultiLine(1), nMaxLength(0), nBorderStyle(0), nScrollBars(0), + nStyle(0), nMousePointer(0), nPasswordChar(0), nListWidth(0), + nBoundColumn(1), nTextColumn(-1), nColumnCount(1), nListRows(8), + nMatchEntry(2), nListStyle(0), nShowDropButtonWhen(0), nDropButtonStyle(1), + nMultiState(0), nValueLen(0), nCaptionLen(0), nVertPos(1), nHorzPos(7), + nSpecialEffect(2), nIcon(0), nPicture(0), nAccelerator(0), nGroupNameLen(0), + pValue(0), pCaption(0), pGroupName(0), nIconLen(0), pIcon(0), + nPictureLen(0), pPicture(0) {} + + ~OCX_ModernControl() { + if (pValue) delete[] pValue; + if (pCaption) delete[] pCaption; + if (pGroupName) delete[] pGroupName; + if (pIcon) delete[] pIcon; + if (pPicture) delete[] pPicture; + } + sal_Bool Read(SotStorageStream *pS); + + + /*sal_uInt8 for sal_uInt8 Word Struct*/ + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[8]; + + sal_uInt8 fUnknown1:1; + sal_uInt8 fEnabled:1; + sal_uInt8 fLocked:1; + sal_uInt8 fBackStyle:1; + sal_uInt8 fUnknown2:4; + + sal_uInt8 fUnknown3:2; + sal_uInt8 fColumnHeads:1; + sal_uInt8 fIntegralHeight:1; + sal_uInt8 fMatchRequired:1; + sal_uInt8 fAlignment:1; + sal_uInt8 fUnknown4:2; + + sal_uInt8 fUnknown5:3; + sal_uInt8 fDragBehaviour:1; + sal_uInt8 fEnterKeyBehaviour:1; + sal_uInt8 fEnterFieldBehaviour:1; + sal_uInt8 fTabKeyBehaviour:1; + sal_uInt8 fWordWrap:1; + + sal_uInt8 fUnknown6:2; + sal_uInt8 fSelectionMargin:1; + sal_uInt8 fAutoWordSelect:1; + sal_uInt8 fAutoSize:1; + sal_uInt8 fHideSelection:1; + sal_uInt8 fAutoTab:1; + sal_uInt8 fMultiLine:1; + + sal_uInt32 nMaxLength; + sal_uInt8 nBorderStyle; + sal_uInt8 nScrollBars; + sal_uInt8 nStyle; + sal_uInt8 nMousePointer; + sal_uInt8 nUnknown7; + sal_uInt8 nPasswordChar; + sal_uInt32 nListWidth; + sal_uInt16 nBoundColumn; + sal_Int16 nTextColumn; + sal_uInt16 nColumnCount; + sal_uInt16 nListRows; + sal_uInt16 nUnknown8; + sal_uInt8 nMatchEntry; + sal_uInt8 nListStyle; + sal_uInt8 nShowDropButtonWhen; + sal_uInt8 nDropButtonStyle; + sal_uInt8 nMultiState; + sal_uInt32 nValueLen; + sal_uInt32 nCaptionLen; + + sal_uInt16 nVertPos; + sal_uInt16 nHorzPos; + + sal_uInt32 nBorderColor; + sal_uInt8 nSpecialEffect; + sal_uInt16 nIcon; + sal_uInt16 nPicture; + sal_uInt8 nAccelerator; + sal_uInt8 nUnknown9; + sal_uInt32 nGroupNameLen; + sal_uInt32 nUnknown10; + + char *pValue; + char *pCaption; + char *pGroupName; + + sal_uInt8 pIconHeader[20]; + sal_uInt32 nIconLen; + sal_uInt8 *pIcon; + + sal_uInt8 pPictureHeader[20]; + sal_uInt32 nPictureLen; + sal_uInt8 *pPicture; + +}; + +class OCX_TabStrip : public OCX_Control +{ +public: + OCX_TabStrip() : OCX_Control( rtl::OUString::createFromAscii("TabStrip")) {} + virtual sal_Bool ReadFontData(SotStorageStream *pS); + virtual sal_Bool Read(SotStorageStream *pS); + + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[4]; + sal_uInt16 nNumTabs; +}; + +class OCX_Image : public OCX_Control +{ +public: + OCX_Image() : OCX_Control(rtl::OUString::createFromAscii("Image")), fEnabled(1), fBackStyle(0), bPictureTiling(false), bAutoSize(false) { + msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.DatabaseImageControl"); + msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlImageControlModel"); + } + + ~OCX_Image() { } + /*sal_uInt8 for sal_uInt8 Word Struct*/ + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[4]; + + sal_uInt32 nBorderColor; + sal_uInt8 nBorderStyle; + sal_uInt8 nMousePointer; + sal_uInt8 nPictureSizeMode; + + + sal_uInt8 fUnknown1:1; + sal_uInt8 fEnabled:1; + sal_uInt8 fUnknown2:2; + sal_uInt8 fBackStyle:1; + sal_uInt8 fUnknown3:3; + + sal_uInt8 nPictureAlignment; + bool bPictureTiling; + sal_uInt8 nSpecialEffect; + + bool bAutoSize; + ::rtl::OUString sImageUrl; + sal_Bool Read(SotStorageStream *pS); + + using OCX_Control::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet>& rPropSet); + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + // No Font record + virtual sal_Bool ReadFontData(SvStorageStream* /*pS*/) { return sal_True; } + + static OCX_Control *Create() { return new OCX_Image;} +}; +struct ContainerRecord +{ + ContainerRecord():nTop(0), nLeft(0), nSubStorageId(0), nSubStreamLen(0), nTabPos(0), nTypeIdent(0), bVisible( true ) {} + + ::rtl::OUString cName; + ::rtl::OUString controlTip; + + sal_uInt32 nTop; + sal_uInt32 nLeft; + sal_uInt32 nSubStorageId; + sal_uInt32 nSubStreamLen; + sal_uInt16 nTabPos; + sal_uInt16 nTypeIdent; + bool bVisible; +}; + +typedef std::vector<OCX_Control*>::iterator CtrlIterator; +typedef std::vector<OCX_Control*>::const_iterator CtrlIteratorConst; +typedef std::vector<OCX_Control*> CtrlList; + + + +class RBGroup +{ + public: + RBGroup():mRBGroupPos(0){} + RBGroup(sal_uInt16& groupPos ):mRBGroupPos(groupPos){} + sal_Int16 tabPos() const { return mRBGroupPos; } + std::vector<OCX_Control*>::size_type numControls() + { return mpControls.size(); } + std::vector<OCX_Control*>& controls() { return mpControls; } + + void add(OCX_Control* pRB); + private: + sal_uInt16 mRBGroupPos; + std::vector<OCX_Control*> mpControls; +}; + +typedef ::std::hash_map < ::rtl::OUString, RBGroup*, ::rtl::OUStringHash, + ::std::equal_to< ::rtl::OUString > > RBGroupHash; +typedef std::vector<RBGroup*>::iterator GroupIterator; + +class OCX_OptionButton; + +class RBGroupManager +{ +public: + RBGroupManager( String& defaultName ); + ~RBGroupManager(); + + CtrlList insertGroupsIntoControlList( const CtrlList& sourceList ); + void addRadioButton( OCX_OptionButton* pRButton ); +private: + + void addSeperator( std::vector< OCX_Control* >& dest ); + void copyList( std::vector< OCX_Control* >& src, + std::vector< OCX_Control* >& dest, + bool addGroupSeperator ); + + RBGroupHash rbGroups; + String mSDefaultName; + std::vector< RBGroup* > groupList; + sal_uInt16 numRadioButtons; +}; + + + + +class OCX_ContainerControl : public OCX_Control +{ +public: + virtual ~OCX_ContainerControl(); + // sub class will process the control specific information + // e.g frame or userform ( maybe tab, mulipage in the future ) + // Base (this) class will process the container specific information + // e.g. the controls contained by this container + // will + // a) create the controls + // b) read the controls + // c) store these controls in a list for post processing + // e.g. import + // + virtual sal_Bool Read(SvStorageStream *pS); + // No Font record + virtual sal_Bool ReadFontData(SvStorageStream* /*pS*/) { return sal_True; } + + using OCX_Control::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + + SotStorageStreamRef getContainerStream() { return mContainerStream; } + + virtual void ProcessControl( OCX_Control* pControl, SvStorageStream* pS, ContainerRecord& rec ); + bool createFromContainerRecord( const ContainerRecord& record, + OCX_Control*& ); +protected: + // This class not meant to be instantiated + // needs to be subclassed + OCX_ContainerControl( SotStorageRef& parent, + const ::rtl::OUString& storageName, + const ::rtl::OUString& sN, + const com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer > &rParent, + OCX_Control* pParent = NULL ); + rtl::OUString createSubStreamName( const sal_uInt32& subStorageID ); + + RBGroupManager rbGroupMgr; + com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer > mxParent; + std::vector<OCX_Control*> mpControls; + SotStorageRef mContainerStorage; + SotStorageStreamRef mContainerStream; + SotStorageStreamRef mContainedControlsStream; + sal_uInt32 nNoRecords; + sal_uInt32 nTotalLen; + sal_uInt32 containerType; + +private: + OCX_ContainerControl(); // not implemented + OCX_ContainerControl(const OCX_ContainerControl&); // not implemented +}; + + +class OCX_MultiPage : public OCX_ContainerControl +{ +public: + OCX_MultiPage( SotStorageRef& parent, + const ::rtl::OUString& storageName, + const ::rtl::OUString& sN, + const com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer > &rDialog, OCX_Control* pParent = NULL); + virtual ~OCX_MultiPage() + { + delete[] pCaption; + delete[] pIcon; + delete[] pPicture; + } + virtual sal_Bool Read(SvStorageStream *pS); + + using OCX_ContainerControl::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer> + &rDialog); + virtual void ProcessControl( OCX_Control* pControl, SvStorageStream* pS, ContainerRecord& rec ); + /*sal_uInt8 for sal_uInt8 Word Struct*/ + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[4]; + + sal_uInt32 fUnknown1; + + sal_uInt8 fUnknown2:1; + sal_uInt8 fEnabled:1; + sal_uInt8 fLocked:1; + sal_uInt8 fBackStyle:1; + sal_uInt8 fUnknown3:4; + + sal_uInt8 fUnknown4:8; + + sal_uInt8 fUnknown5:7; + sal_uInt8 fWordWrap:1; + + sal_uInt8 fUnknown6:4; + sal_uInt8 fAutoSize:1; + sal_uInt8 fUnknown7:3; + + sal_uInt32 nCaptionLen; + sal_uInt16 nVertPos; + sal_uInt16 nHorzPos; + sal_uInt8 nMousePointer; + sal_uInt32 nBorderColor; + sal_uInt32 fUnknown8; + sal_uInt32 fUnknown9; + sal_uInt8 nKeepScrollBarsVisible; + sal_uInt8 nCycle; + sal_uInt16 nBorderStyle; + sal_uInt16 nSpecialEffect; + sal_uInt16 nPicture; + sal_uInt8 nPictureAlignment; + sal_uInt8 nPictureSizeMode; + bool bPictureTiling; + sal_uInt16 nAccelerator; + sal_uInt16 nIcon; + + char *pCaption; + + sal_uInt32 nScrollWidth; + sal_uInt32 nScrollHeight; + + + sal_uInt8 pIconHeader[20]; + sal_uInt32 nIconLen; + sal_uInt8 *pIcon; + + sal_uInt8 pPictureHeader[20]; + sal_uInt32 nPictureLen; + sal_uInt8 *pPicture; +private: + sal_Int32 mnCurrentPageStep; +}; + + + +class OCX_Page : public OCX_ContainerControl +{ +public: + OCX_Page( SotStorageRef& parentStorage, + const ::rtl::OUString& storageName, + const ::rtl::OUString& sN, + const com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer > &rDialog, OCX_Control* parent = NULL); + virtual ~OCX_Page() + { + delete[] pCaption; + delete[] pIcon; + delete[] pPicture; + } + virtual sal_Bool Read(SvStorageStream *pS); + + using OCX_ContainerControl::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer> + &rDialog); +/* virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); +*/ + /*sal_uInt8 for sal_uInt8 Word Struct*/ + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[4]; + + sal_uInt32 fUnknown1; + + sal_uInt8 fUnknown2:1; + sal_uInt8 fEnabled:1; + sal_uInt8 fLocked:1; + sal_uInt8 fBackStyle:1; + sal_uInt8 fUnknown3:4; + + sal_uInt8 fUnknown4:8; + + sal_uInt8 fUnknown5:7; + sal_uInt8 fWordWrap:1; + + sal_uInt8 fUnknown6:4; + sal_uInt8 fAutoSize:1; + sal_uInt8 fUnknown7:3; + + sal_uInt32 nCaptionLen; + sal_uInt16 nVertPos; + sal_uInt16 nHorzPos; + sal_uInt8 nMousePointer; + sal_uInt32 nBorderColor; + sal_uInt32 fUnknown8; + sal_uInt32 fUnknown9; + sal_uInt8 nKeepScrollBarsVisible; + sal_uInt8 nCycle; + sal_uInt16 nBorderStyle; + sal_uInt16 nSpecialEffect; + sal_uInt16 nPicture; + sal_uInt8 nPictureAlignment; + sal_uInt8 nPictureSizeMode; + bool bPictureTiling; + sal_uInt16 nAccelerator; + sal_uInt16 nIcon; + + char *pCaption; + + sal_uInt32 nScrollWidth; + sal_uInt32 nScrollHeight; + + + sal_uInt8 pIconHeader[20]; + sal_uInt32 nIconLen; + sal_uInt8 *pIcon; + + sal_uInt8 pPictureHeader[20]; + sal_uInt32 nPictureLen; + sal_uInt8 *pPicture; +private: +}; + + +class OCX_Frame : public OCX_ContainerControl +{ +public: + OCX_Frame( SotStorageRef& parent, + const ::rtl::OUString& storageName, + const ::rtl::OUString& sN, + const com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer > &rDialog, OCX_Control* pParent = NULL); + virtual ~OCX_Frame() + { + delete[] pCaption; + delete[] pIcon; + delete[] pPicture; + } + virtual sal_Bool Read(SvStorageStream *pS); + + using OCX_ContainerControl::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + + /*sal_uInt8 for sal_uInt8 Word Struct*/ + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[4]; + + sal_uInt32 fUnknown1; + + sal_uInt8 fUnknown2:1; + sal_uInt8 fEnabled:1; + sal_uInt8 fLocked:1; + sal_uInt8 fBackStyle:1; + sal_uInt8 fUnknown3:4; + + sal_uInt8 fUnknown4:8; + + sal_uInt8 fUnknown5:7; + sal_uInt8 fWordWrap:1; + + sal_uInt8 fUnknown6:4; + sal_uInt8 fAutoSize:1; + sal_uInt8 fUnknown7:3; + + sal_uInt32 nCaptionLen; + sal_uInt16 nVertPos; + sal_uInt16 nHorzPos; + sal_uInt8 nMousePointer; + sal_uInt32 nBorderColor; + sal_uInt32 fUnknown8; + sal_uInt32 fUnknown9; + sal_uInt8 nKeepScrollBarsVisible; + sal_uInt8 nCycle; + sal_uInt16 nBorderStyle; + sal_uInt16 nSpecialEffect; + sal_uInt16 nPicture; + sal_uInt8 nPictureAlignment; + sal_uInt8 nPictureSizeMode; + bool bPictureTiling; + sal_uInt16 nAccelerator; + sal_uInt16 nIcon; + + char *pCaption; + + sal_uInt32 nScrollWidth; + sal_uInt32 nScrollHeight; + sal_uInt32 nScrollLeft; + sal_uInt32 nScrollTop; + + + sal_uInt8 pIconHeader[20]; + sal_uInt32 nIconLen; + sal_uInt8 *pIcon; + + sal_uInt8 pPictureHeader[20]; + sal_uInt32 nPictureLen; + sal_uInt8 *pPicture; +private: +}; + +class OCX_UserForm : public OCX_ContainerControl +{ +public: + OCX_UserForm( SotStorageRef& parent, + const ::rtl::OUString& storageName, + const ::rtl::OUString& sN, + const com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer > &rDialog, + const com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory >& rMsf); + ~OCX_UserForm() + { + delete[] pCaption; + delete[] pIcon; + delete[] pPicture; + } + + virtual sal_Bool Read(SvStorageStream *pS); + + using OCX_ContainerControl::Import; // to not hide the other two import methods + virtual sal_Bool Import( com::sun::star::uno::Reference< + com::sun::star::container::XNameContainer> + &rDialog); + + /*sal_uInt8 for sal_uInt8 Word Struct*/ + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[4]; + + sal_uInt32 nChildrenA; + + sal_uInt8 fUnknown1:1; + sal_uInt8 fEnabled:1; + sal_uInt8 fLocked:1; + sal_uInt8 fBackStyle:1; + sal_uInt8 fUnknown2:4; + + sal_uInt8 fUnknown3:8; + + sal_uInt8 fUnknown4:7; + sal_uInt8 fWordWrap:1; + + sal_uInt8 fUnknown5:4; + sal_uInt8 fAutoSize:1; + sal_uInt8 fUnknown6:3; + + sal_uInt32 nCaptionLen; + sal_uInt16 nVertPos; + sal_uInt16 nHorzPos; + sal_uInt8 nMousePointer; + sal_uInt32 nBorderColor; + sal_uInt32 nDrawBuffer; + sal_uInt32 nChildrenB; + sal_uInt8 nKeepScrollBarsVisible; + sal_uInt8 nCycle; + sal_uInt16 nBorderStyle; + sal_uInt8 nSpecialEffect; + sal_uInt16 nPicture; + sal_uInt8 nPictureAlignment; + sal_uInt8 nPictureSizeMode; + bool bPictureTiling; + sal_uInt16 nAccelerator; + sal_uInt16 nIcon; + sal_uInt16 fUnknown7; + + char *pCaption; + + sal_uInt32 nScrollWidth; + sal_uInt32 nScrollHeight; + sal_uInt32 nScrollLeft; + sal_uInt32 nScrollTop; + + sal_uInt8 pIconHeader[20]; + sal_uInt32 nIconLen; + sal_uInt8 *pIcon; + + sal_uInt8 pPictureHeader[20]; + sal_uInt32 nPictureLen; + sal_uInt8 *pPicture; +private: + com::sun::star::uno::Reference< + com::sun::star::uno::XComponentContext> mxCtx; +}; + + + +class OCX_CheckBox : public OCX_ModernControl +{ +public: + OCX_CheckBox() : OCX_ModernControl(rtl::OUString::createFromAscii("CheckBox")){ + msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.CheckBox"); + msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlCheckBoxModel"); + mnBackColor = 0x80000005L; + mnForeColor = 0x80000008L; + aFontData.SetHasAlign(TRUE); + } + + using OCX_ModernControl::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + static OCX_Control *Create() { return new OCX_CheckBox;} +}; + +class OCX_OptionButton : public OCX_ModernControl +{ +public: + OCX_OptionButton() : OCX_ModernControl(rtl::OUString::createFromAscii("OptionButton")) + { + msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.RadioButton"); + msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlRadioButtonModel"); + mnBackColor = 0x80000005L; + mnForeColor = 0x80000008L; + aFontData.SetHasAlign(TRUE); + } + + using OCX_ModernControl::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + + + static OCX_Control *Create() { return new OCX_OptionButton;} +}; + +class OCX_TextBox : public OCX_ModernControl +{ +public: + OCX_TextBox() : OCX_ModernControl(rtl::OUString::createFromAscii("TextBox")) { + msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.TextField"); + msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlEditModel"); + mnBackColor = 0x80000005L; + mnForeColor = 0x80000008L; + nBorderColor = 0x80000006L; + aFontData.SetHasAlign(TRUE); + } + + using OCX_ModernControl::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + static OCX_Control *Create() { return new OCX_TextBox;} +}; + +class OCX_FieldControl: public OCX_ModernControl +{ +public: + OCX_FieldControl() : OCX_ModernControl(rtl::OUString::createFromAscii("TextBox")) { + mnBackColor = 0x80000005L; + mnForeColor = 0x80000008L; + nBorderColor = 0x80000006L; + } + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + static OCX_Control *Create() { return new OCX_FieldControl;} +}; + + +class OCX_ToggleButton : public OCX_ModernControl +{ +public: + OCX_ToggleButton() : OCX_ModernControl(rtl::OUString::createFromAscii("ToggleButton")) { + msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.CommandButton"); + msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlButtonModel"); + + mnBackColor = 0x8000000F; + mnForeColor = 0x80000012; + aFontData.SetHasAlign(TRUE); + aFontData.nJustification = 3; // centered by default + } + static OCX_Control *Create() { return new OCX_ToggleButton;} + + using OCX_ModernControl::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + sal_Bool Export(SvStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SvStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); +}; + +class OCX_ComboBox : public OCX_ModernControl +{ +public: + OCX_ComboBox() : OCX_ModernControl(rtl::OUString::createFromAscii("ComboBox")){ + msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.ComboBox"); + msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlComboBoxModel"); + mnBackColor = 0x80000005; + mnForeColor = 0x80000008; + nBorderColor = 0x80000006; + aFontData.SetHasAlign(TRUE); + } + static OCX_Control *Create() { return new OCX_ComboBox;} + using OCX_ModernControl::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); +}; + +class OCX_ListBox : public OCX_ModernControl +{ +public: + OCX_ListBox() : OCX_ModernControl(rtl::OUString::createFromAscii("ListBox")){ + msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.ListBox"); + msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlListBoxModel"); + mnBackColor = 0x80000005; + mnForeColor = 0x80000008; + nBorderColor = 0x80000006; + aFontData.SetHasAlign(TRUE); + } + static OCX_Control *Create() { return new OCX_ListBox;} + using OCX_ModernControl::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + +}; + +class OCX_CommandButton : public OCX_Control +{ +public: + OCX_CommandButton() : OCX_Control(String::CreateFromAscii("CommandButton")), + fEnabled(1), fLocked(0), fBackStyle(1), fWordWrap(0), fAutoSize(0), + nCaptionLen(0), nVertPos(1), nHorzPos(7), nMousePointer(0), nPicture(0), + nAccelerator(0), nIcon(0), pCaption(0), nIconLen(0), pIcon(0), nPictureLen(0), + pPicture(0), mbTakeFocus( true ) + { + msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.CommandButton"); + msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlButtonModel"); + mnForeColor = 0x80000012L; + mnBackColor = 0x8000000FL; + } + + ~OCX_CommandButton() { + if (pCaption) delete[] pCaption; + if (pIcon) delete[] pIcon; + if (pPicture) delete[] pPicture; + } + sal_Bool Read(SotStorageStream *pS); + + /*sal_uInt8 for sal_uInt8 Word Struct*/ + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[4]; + + + sal_uInt8 fUnknown1:1; + sal_uInt8 fEnabled:1; + sal_uInt8 fLocked:1; + sal_uInt8 fBackStyle:1; + sal_uInt8 fUnknown2:4; + + sal_uInt8 fUnknown3:8; + + sal_uInt8 fUnknown4:7; + sal_uInt8 fWordWrap:1; + + sal_uInt8 fUnknown5:4; + sal_uInt8 fAutoSize:1; + sal_uInt8 fUnknown6:3; + + sal_uInt32 nCaptionLen; + + sal_uInt16 nVertPos; + sal_uInt16 nHorzPos; + + sal_uInt16 nMousePointer; + sal_uInt16 nPicture; + sal_uInt16 nAccelerator; + sal_uInt16 nIcon; + + char *pCaption; + + sal_uInt8 pIconHeader[20]; + sal_uInt32 nIconLen; + sal_uInt8 *pIcon; + + sal_uInt8 pPictureHeader[20]; + sal_uInt32 nPictureLen; + sal_uInt8 *pPicture; + + bool mbTakeFocus; + + static OCX_Control *Create() { return new OCX_CommandButton;} + using OCX_Control::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + +}; + +class OCX_ImageButton: public OCX_CommandButton +{ +public: + OCX_ImageButton() { + aFontData.SetHasAlign(FALSE); + aFontData.SetHasFont(FALSE); + } + static OCX_Control *Create() { return new OCX_ImageButton;} + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + +}; + +class OCX_GroupBox: public OCX_Control +{ +public: + OCX_GroupBox() : OCX_Control(String::CreateFromAscii("GroupBox")) {} + static OCX_Control *Create() { return new OCX_GroupBox;} + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + +}; + +class OCX_Label : public OCX_Control +{ +public: + OCX_Label(OCX_Control* pParent = NULL ) : OCX_Control(rtl::OUString::createFromAscii("Label"), pParent ), fEnabled(1), + fLocked(0),fBackStyle(1),fWordWrap(1), + fAutoSize(0),nCaptionLen(0),nVertPos(1),nHorzPos(7),nMousePointer(0), + nBorderColor(0x80000006),nBorderStyle(0),nSpecialEffect(0), + nPicture(0),nAccelerator(0),nIcon(0),pCaption(0),nIconLen(0),pIcon(0), + nPictureLen(0),pPicture(0) + { + msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.FixedText"); + msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlFixedTextModel"); + mnForeColor = 0x80000008; + mnBackColor = 0x80000005; + aFontData.SetHasAlign(TRUE); + } + + ~OCX_Label() { + if (pCaption) delete[] pCaption; + if (pIcon) delete[] pIcon; + if (pPicture) delete[] pPicture; + } + sal_Bool Read(SotStorageStream *pS); + + /*sal_uInt8 for sal_uInt8 Word Struct*/ + sal_uInt16 nIdentifier; + sal_uInt16 nFixedAreaLen; + sal_uInt8 pBlockFlags[4]; + + + sal_uInt8 fUnknown1:1; + sal_uInt8 fEnabled:1; + sal_uInt8 fLocked:1; + sal_uInt8 fBackStyle:1; + sal_uInt8 fUnknown2:4; + + sal_uInt8 fUnknown3:8; + + sal_uInt8 fUnknown4:7; + sal_uInt8 fWordWrap:1; + + sal_uInt8 fUnknown5:4; + sal_uInt8 fAutoSize:1; + sal_uInt8 fUnknown6:3; + + sal_uInt32 nCaptionLen; + sal_uInt16 nVertPos; + sal_uInt16 nHorzPos; + sal_uInt8 nMousePointer; + sal_uInt32 nBorderColor; + sal_uInt16 nBorderStyle; + sal_uInt16 nSpecialEffect; + sal_uInt16 nPicture; + sal_uInt16 nAccelerator; + sal_uInt16 nIcon; + + char *pCaption; + + sal_uInt8 pIconHeader[20]; + sal_uInt32 nIconLen; + sal_uInt8 *pIcon; + + sal_uInt8 pPictureHeader[20]; + sal_uInt32 nPictureLen; + sal_uInt8 *pPicture; + + static OCX_Control *Create() { return new OCX_Label;} + + using OCX_Control::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + + sal_Bool Export(SotStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + sal_Bool WriteContents(SotStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize); + +}; + + +class OCX_ProgressBar : public OCX_Control +{ +public: + explicit OCX_ProgressBar(); + + static OCX_Control* Create(); + + virtual sal_Bool Read( SvStorageStream *pS ); + using OCX_Control::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + // No Font record + virtual sal_Bool ReadFontData(SvStorageStream* /*pS*/) { return sal_True; } +private: + sal_Int32 nMin; + sal_Int32 nMax; + bool bFixedSingle; + bool bEnabled; + bool b3d; +}; + +class OCX_SpinButton : public OCX_Control +{ +public: + explicit OCX_SpinButton(); + + static OCX_Control* Create(); + + virtual sal_Bool Read( SvStorageStream *pS ); + + virtual sal_Bool ReadFontData( SvStorageStream *pS ); + + using OCX_Control::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + //Export exports a control as an OLE style storage stream tree + virtual sal_Bool Export( SvStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize ); + + //WriteContents writes the contents of a contents stream, for + //the Excel export you cannot use Export, only WriteContents instead + virtual sal_Bool WriteContents( SvStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize ); + +protected: + void UpdateInt32Property( + sal_Int32& rnCoreValue, sal_Int32 nNewValue, + sal_Int32 nBlockFlag ); + + void GetInt32Property( + sal_Int32& rnCoreValue, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet >& rxPropSet, + const rtl::OUString& rPropName, + sal_Int32 nBlockFlag ); + + void UpdateBoolProperty( + bool& rbCoreValue, bool bNewValue, + sal_Int32 nBlockFlag ); + + void GetBoolProperty( + bool& rbCoreValue, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet >& rxPropSet, + const rtl::OUString& rPropName, + sal_Int32 nBlockFlag ); + + /** Writes the data from own members to stream. */ + sal_Bool WriteData( SvStream& rStrm ) const; + + sal_Int32 mnBlockFlags; + sal_Int32 mnValue; + sal_Int32 mnMin; + sal_Int32 mnMax; + sal_Int32 mnSmallStep; + sal_Int32 mnPageStep; + sal_Int32 mnOrient; + sal_Int32 mnDelay; + bool mbEnabled; + bool mbLocked; + bool mbPropThumb; +}; + +class OCX_ScrollBar : public OCX_SpinButton +{ +public: + explicit OCX_ScrollBar(); + + static OCX_Control* Create(); + + using OCX_Control::Import; // to not hide the other two import methods + virtual sal_Bool Import(com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet); + + //Export exports a control as an OLE style storage stream tree + virtual sal_Bool Export( SvStorageRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize ); + + //WriteContents writes the contents of a contents stream, for + //the Excel export you cannot use Export, only WriteContents instead + virtual sal_Bool WriteContents( SvStorageStreamRef &rObj, + const com::sun::star::uno::Reference< + com::sun::star::beans::XPropertySet> &rPropSet, + const com::sun::star::awt::Size& rSize ); +}; + +#endif |