summaryrefslogtreecommitdiff
path: root/filter/inc/filter/msfilter/msocximex.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'filter/inc/filter/msfilter/msocximex.hxx')
-rw-r--r--filter/inc/filter/msfilter/msocximex.hxx1423
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