xref: /AOO41X/main/filter/inc/filter/msfilter/msocximex.hxx (revision ffce66a582e837c67f82e21ef34234f48453fca9)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _MSOCXIMEX_HXX
24 #define _MSOCXIMEX_HXX
25 
26 #include <sot/storage.hxx>
27 #include <tools/debug.hxx>
28 
29 //!! no such defines in global namespaces - it will break other existing code that uses the same define!!
30 //#ifndef C2U
31 //#define C2U(cChar)    rtl::OUString::createFromAscii(cChar)
32 //#endif
33 #include "filter/msfilter/msfilterdllapi.h"
34 #include <vector>
35 #include <hash_map>
36 
37 namespace com{namespace sun{namespace star{
38         namespace drawing{
39                 class XDrawPage;
40                 class XShape;
41                 class XShapes;
42         }
43         namespace form{
44                 class XFormComponent;
45         }
46         namespace lang{
47                 class XMultiServiceFactory;
48         }
49         namespace container{
50                 class XIndexContainer;
51                 class XNameContainer;
52         }
53         namespace beans{
54                 class XPropertySet;
55         }
56         namespace text{
57                 class XText;
58         }
59         namespace awt{
60                 struct Size;
61                 class XControlModel;
62         }
63         namespace uno{
64                 class XComponentContext;
65         }
66 
67 }}}
68 
69 class OCX_Control;
70 class SfxObjectShell;
71 class SwPaM;
72 
73 class TypeName
74 {
75 public:
76     String msName;
77     sal_uInt16 mnType;
78     sal_Int32 mnLeft;
79     sal_Int32 mnTop;
80     sal_Int32 mnStoreId;
81     TypeName(sal_Char *pName, sal_uInt32 nStoreId, sal_uInt32 nLen, sal_uInt16 nType,
82         sal_Int32 nLeft, sal_Int32 nTop);
83 };
84 
85 
86 class MSFILTER_DLLPUBLIC SvxMSConvertOCXControls
87 {
88 public:
89     SvxMSConvertOCXControls( SfxObjectShell *pDSh,SwPaM *pP );
90     virtual ~SvxMSConvertOCXControls();
91 
92     //Reads a control from the given storage, constructed shape in pShapeRef
93     sal_Bool ReadOCXStream( SotStorageRef& rSrc1,
94         com::sun::star::uno::Reference<
95         com::sun::star::drawing::XShape > *pShapeRef=0,
96         sal_Bool bFloatingCtrl=sal_False );
97 
98 
99     //Excel has a nasty kludged mechanism for this, read
100     //the comments in the source to follow it
101     sal_Bool ReadOCXExcelKludgeStream(SotStorageStreamRef& rSrc1,
102         com::sun::star::uno::Reference <
103         com::sun::star::drawing::XShape > *pShapeRef,sal_Bool bFloatingCtrl);
104 
105 
106     //Writes the given Uno Control into the given storage
107 
108     static sal_Bool WriteOCXStream(SotStorageRef &rSrc1,
109         const com::sun::star::uno::Reference<
110         com::sun::star::awt::XControlModel > &rControlModel,
111         const com::sun::star::awt::Size& rSize,String &rName);
112 
113     //Excel has a nasty kludged mechanism for this, read
114     //the comments in the source to follow it
115     static sal_Bool WriteOCXExcelKludgeStream(SotStorageStreamRef& rContents,
116         const com::sun::star::uno::Reference<
117         com::sun::star::awt::XControlModel > &rControlModel,
118         const com::sun::star::awt::Size &rSize, String &rName);
119 
120     //Generate an OCX converter based on the OLE2 name
121     static OCX_Control *OCX_Factory(const String &rId);
122 
123     //Generate an OCX converter based on the StarOffice UNO id
124     static OCX_Control *OCX_Factory( const com::sun::star::uno::Reference<
125         com::sun::star::awt::XControlModel > &rControlModel,
126         String &rId,String &rName);
127 
InsertControl(const com::sun::star::uno::Reference<com::sun::star::form::XFormComponent> &,const com::sun::star::awt::Size &,com::sun::star::uno::Reference<com::sun::star::drawing::XShape> *,sal_Bool)128     virtual sal_Bool InsertControl(
129         const com::sun::star::uno::Reference<
130         com::sun::star::form::XFormComponent >& /*rFComp*/,
131         const com::sun::star::awt::Size& /*rSize*/,
132         com::sun::star::uno::Reference<
133         com::sun::star::drawing::XShape >* /*pShape*/,
134         sal_Bool /*bFloatingCtrl*/ ) {return sal_False;}
135 
136     /*begin: Backwards compatability with office 95 import, modify later*/
137     const com::sun::star::uno::Reference<
138         com::sun::star::lang::XMultiServiceFactory > & GetServiceFactory();
139 
GetEditNum()140     sal_uInt16 GetEditNum() { return ++nEdit; }
GetCheckboxNum()141     sal_uInt16 GetCheckboxNum() { return ++nCheckbox; }
142     /*end: Backwards compatability*/
143 protected:
144     const com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > &
145         GetShapes();
146 
147     const com::sun::star::uno::Reference<
148         com::sun::star::container::XIndexContainer > &  GetFormComps();
149 
150     SfxObjectShell *pDocSh;
151     SwPaM *pPaM;
152 
153     // gecachte Interfaces
154     com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage >
155         xDrawPage;
156     com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >
157         xShapes;
158     com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >        xServiceFactory;
159 
160     // das einzige Formular
161     com::sun::star::uno::Reference< com::sun::star::container::XIndexContainer >
162         xFormComps;
163 
164     sal_uInt16 nEdit;
165     sal_uInt16 nCheckbox;
166 
167     virtual const com::sun::star::uno::Reference<
168         com::sun::star::drawing::XDrawPage > & GetDrawPage();
169 };
170 
171 class OCX_FontData
172 {
173 public:
OCX_FontData()174     OCX_FontData() : nFontNameLen(0), fBold(0), fItalic(0), fUnderline(0),
175         fStrike(0), nFontSize(12), nJustification(1), nDefaultAlign(0), pFontName(0),
176         bHasAlign(sal_False), bHasFont(sal_True) {}
~OCX_FontData()177     ~OCX_FontData()  {
178         if (pFontName)
179         delete [] pFontName;
180     }
181     sal_Bool Read(SotStorageStream *pS);
182     void Import(com::sun::star::uno::Reference<
183         com::sun::star::beans::XPropertySet > &rPropSet);
184 
185     sal_Bool Export(SotStorageStreamRef &rContent,
186         const com::sun::star::uno::Reference<
187         com::sun::star::beans::XPropertySet> &rPropSet);
188 
189     sal_uInt16 nIdentifier;
190     sal_uInt16 nFixedAreaLen;
191     sal_uInt8 pBlockFlags[4];
192 
193     sal_uInt32 nFontNameLen;
194 
195     sal_uInt8   fBold:1;
196     sal_uInt8   fItalic:1;
197     sal_uInt8   fUnderline:1;
198     sal_uInt8   fStrike:1;
199     sal_uInt8   fUnknown1:4;
200 
201     sal_uInt8   nUnknown2;
202     sal_uInt8   nUnknown3;
203     sal_uInt8   nUnknown4;
204 
205     sal_uInt32  nFontSize;
206     sal_uInt16 nLanguageID;
207     sal_uInt8   nJustification;
208     sal_uInt16  nFontWeight;
209     sal_Int16 nDefaultAlign;
210     char *pFontName;
SetHasAlign(sal_Bool bIn)211     void SetHasAlign(sal_Bool bIn) {bHasAlign=bIn;}
SetHasFont(sal_Bool bIn)212     void SetHasFont(sal_Bool bIn) {bHasFont=bIn;}
213 protected:
214     static sal_uInt16 nStandardId;
215     sal_uInt8 ExportAlign(sal_Int16 nAlign) const;
216     sal_Int16 ImportAlign(sal_uInt8 nJustification) const;
217 private:
218     sal_Bool bHasAlign;
219     sal_Bool bHasFont;
220 };
221 
222 class MSFILTER_DLLPUBLIC OCX_Control
223 {
224 public:
OCX_Control(UniString sN,OCX_Control * parent=NULL)225     OCX_Control(UniString sN, OCX_Control* parent = NULL ) : nWidth( 0 ), nHeight( 0 ), mnLeft(0), mnTop(0),
226         mnStep(0), mnBackColor(0x8000000FL), mnForeColor(0), mnTabPos(0), mbVisible(true), sName(sN), pDocSh(0),
227         bSetInDialog(sal_False), mpParent( parent ) {}
FullRead(SotStorageStream * pS)228     sal_Bool FullRead(SotStorageStream *pS)
229     {
230         return Read(pS) && ReadFontData(pS);
231     };
232     virtual sal_Bool Read(SotStorageStream *pS);
233     virtual sal_Bool ReadFontData(SotStorageStream *pS);
234     virtual sal_Bool Import(const com::sun::star::uno::Reference<
235         com::sun::star::lang::XMultiServiceFactory >  &rServiceFactory,
236         com::sun::star::uno::Reference<
237         com::sun::star::form::XFormComponent > &rFComp,
238         com::sun::star::awt::Size &rSz);
239     virtual sal_Bool Import(com::sun::star::uno::Reference<
240         com::sun::star::container::XNameContainer>
241         &rDialog);
Import(com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> &)242     virtual sal_Bool Import(com::sun::star::uno::Reference<
243         com::sun::star::beans::XPropertySet>& /*rPropSet*/)
244         {return sal_False;}
245     //Export exports a control as an OLE style storage stream tree
Export(SotStorageRef &,const com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> &,const com::sun::star::awt::Size &)246     virtual sal_Bool Export(SotStorageRef& /*rObj*/,
247     const com::sun::star::uno::Reference<
248         com::sun::star::beans::XPropertySet>& /*rPropSet*/,
249         const com::sun::star::awt::Size& /*rSize*/) {return sal_False;}
250 
251     //WriteContents writes the contents of a contents stream, for
252     //the Excel export you cannot use Export, only WriteContents instead
WriteContents(SotStorageStreamRef &,const com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet> &,const com::sun::star::awt::Size &)253     virtual sal_Bool WriteContents(SotStorageStreamRef& /*rObj*/,
254     const com::sun::star::uno::Reference<
255         com::sun::star::beans::XPropertySet>& /*rPropSet*/,
256         const com::sun::star::awt::Size& /*rSize*/) {return sal_False;}
SetInDialog(bool bState)257     void SetInDialog(bool bState) { bSetInDialog = bState; }
GetInDialog()258     bool GetInDialog() { return bSetInDialog; }
259 
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)260     sal_Bool ReadAndImport(SotStorageStream *pS,
261         com::sun::star::uno::Reference<
262         com::sun::star::lang::XMultiServiceFactory >  &rSF,
263         com::sun::star::uno::Reference<
264         com::sun::star::form::XFormComponent > &rFComp,
265         com::sun::star::awt::Size &rSz)
266     {
267         if (Read(pS))
268             return Import(rSF,rFComp,rSz);
269         return sal_False;
270     }
~OCX_Control()271     virtual ~OCX_Control() {}
272 
273     static void FillSystemColors();
274 
275     sal_uInt32 nWidth;
276     sal_uInt32 nHeight;
277         sal_Int32 mnLeft;
278         sal_Int32 mnTop;
279         sal_Int32 mnStep;
280     sal_Int32 mnBackColor;
281     sal_Int32 mnForeColor;
282         sal_uInt16 mnTabPos;
283     bool mbVisible;
284     UniString sName;
285     UniString msToolTip;
286     OCX_FontData aFontData;
287         SfxObjectShell *pDocSh;
288 protected:
289 
290     sal_uInt32 ImportColor(sal_uInt32 nColorCode) const;
291     sal_uInt32 ExportColor(sal_uInt32 nColorCode) const;
292     sal_uInt32 SwapColor(sal_uInt32 nColorCode) const;
293     sal_Int16 ImportBorder(sal_uInt16 nSpecialEffect,sal_uInt16 nBorderStyle)
294         const;
295     sal_uInt8 ExportBorder(sal_uInt16 nBorder,sal_uInt8 &rBorderStyle) const;
296     bool bSetInDialog;
297     sal_Int16 ImportSpecEffect( sal_uInt8 nSpecialEffect ) const;
298     sal_uInt8 ExportSpecEffect( sal_Int16 nApiEffect ) const;
299     static sal_uInt16 nStandardId;
300     static sal_uInt8 __READONLY_DATA aObjInfo[4];
301     rtl::OUString msFormType;
302     rtl::OUString msDialogType;
303         OCX_Control* mpParent;
304 private:
305     static sal_uInt32 pColor[25];
306 };
307 
308 class OCX_ModernControl : public OCX_Control
309 {
310 public:
OCX_ModernControl(UniString sN)311     OCX_ModernControl(UniString sN) : OCX_Control(sN),
312     fEnabled(1), fLocked(0), fBackStyle(1), fColumnHeads(0), fIntegralHeight(1),
313     fMatchRequired(0), fAlignment(1), fDragBehaviour(0), fEnterKeyBehaviour(0),
314     fEnterFieldBehaviour(0), fTabKeyBehaviour(0), fWordWrap(1),
315     fSelectionMargin(1), fAutoWordSelect(1), fAutoSize(0), fHideSelection(1),
316     fAutoTab(0), fMultiLine(1), nMaxLength(0), nBorderStyle(0), nScrollBars(0),
317     nStyle(0), nMousePointer(0), nPasswordChar(0), nListWidth(0),
318     nBoundColumn(1), nTextColumn(-1), nColumnCount(1), nListRows(8),
319     nMatchEntry(2), nListStyle(0), nShowDropButtonWhen(0), nDropButtonStyle(1),
320     nMultiState(0), nValueLen(0), nCaptionLen(0), nVertPos(1), nHorzPos(7),
321     nSpecialEffect(2), nIcon(0), nPicture(0), nAccelerator(0), nGroupNameLen(0),
322     pValue(0), pCaption(0), pGroupName(0), nIconLen(0), pIcon(0),
323     nPictureLen(0), pPicture(0) {}
324 
~OCX_ModernControl()325     ~OCX_ModernControl() {
326         if (pValue) delete[] pValue;
327         if (pCaption) delete[] pCaption;
328         if (pGroupName) delete[] pGroupName;
329         if (pIcon) delete[] pIcon;
330         if (pPicture) delete[] pPicture;
331     }
332     sal_Bool Read(SotStorageStream *pS);
333 
334 
335     /*sal_uInt8 for sal_uInt8 Word Struct*/
336     sal_uInt16  nIdentifier;
337     sal_uInt16  nFixedAreaLen;
338     sal_uInt8   pBlockFlags[8];
339 
340     sal_uInt8   fUnknown1:1;
341     sal_uInt8   fEnabled:1;
342     sal_uInt8   fLocked:1;
343     sal_uInt8   fBackStyle:1;
344     sal_uInt8   fUnknown2:4;
345 
346     sal_uInt8   fUnknown3:2;
347     sal_uInt8   fColumnHeads:1;
348     sal_uInt8   fIntegralHeight:1;
349     sal_uInt8   fMatchRequired:1;
350     sal_uInt8   fAlignment:1;
351     sal_uInt8   fUnknown4:2;
352 
353     sal_uInt8   fUnknown5:3;
354     sal_uInt8   fDragBehaviour:1;
355     sal_uInt8   fEnterKeyBehaviour:1;
356     sal_uInt8   fEnterFieldBehaviour:1;
357     sal_uInt8   fTabKeyBehaviour:1;
358     sal_uInt8   fWordWrap:1;
359 
360     sal_uInt8   fUnknown6:2;
361     sal_uInt8   fSelectionMargin:1;
362     sal_uInt8   fAutoWordSelect:1;
363     sal_uInt8   fAutoSize:1;
364     sal_uInt8   fHideSelection:1;
365     sal_uInt8   fAutoTab:1;
366     sal_uInt8   fMultiLine:1;
367 
368     sal_uInt32  nMaxLength;
369     sal_uInt8   nBorderStyle;
370     sal_uInt8   nScrollBars;
371     sal_uInt8   nStyle;
372     sal_uInt8   nMousePointer;
373     sal_uInt8   nUnknown7;
374     sal_uInt8   nPasswordChar;
375     sal_uInt32  nListWidth;
376     sal_uInt16  nBoundColumn;
377     sal_Int16   nTextColumn;
378     sal_uInt16  nColumnCount;
379     sal_uInt16  nListRows;
380     sal_uInt16  nUnknown8;
381     sal_uInt8   nMatchEntry;
382     sal_uInt8   nListStyle;
383     sal_uInt8   nShowDropButtonWhen;
384     sal_uInt8   nDropButtonStyle;
385     sal_uInt8   nMultiState;
386     sal_uInt32  nValueLen;
387     sal_uInt32  nCaptionLen;
388 
389     sal_uInt16 nVertPos;
390     sal_uInt16 nHorzPos;
391 
392     sal_uInt32 nBorderColor;
393     sal_uInt8 nSpecialEffect;
394     sal_uInt16 nIcon;
395     sal_uInt16 nPicture;
396     sal_uInt8 nAccelerator;
397     sal_uInt8 nUnknown9;
398     sal_uInt32 nGroupNameLen;
399     sal_uInt32 nUnknown10;
400 
401     char *pValue;
402     char *pCaption;
403     char *pGroupName;
404 
405     sal_uInt8 pIconHeader[20];
406     sal_uInt32 nIconLen;
407     sal_uInt8 *pIcon;
408 
409     sal_uInt8 pPictureHeader[20];
410     sal_uInt32 nPictureLen;
411     sal_uInt8 *pPicture;
412 
413 };
414 
415 class OCX_TabStrip : public OCX_Control
416 {
417 public:
OCX_TabStrip()418     OCX_TabStrip() : OCX_Control( rtl::OUString::createFromAscii("TabStrip")) {}
419         virtual sal_Bool ReadFontData(SotStorageStream *pS);
420         virtual sal_Bool Read(SotStorageStream *pS);
421 
422     sal_uInt16  nIdentifier;
423     sal_uInt16  nFixedAreaLen;
424     sal_uInt8   pBlockFlags[4];
425     sal_uInt16  nNumTabs;
426 };
427 
428 class OCX_Image : public OCX_Control
429 {
430 public:
OCX_Image()431     OCX_Image() : OCX_Control(rtl::OUString::createFromAscii("Image")), fEnabled(1), fBackStyle(0), bPictureTiling(false), bAutoSize(false) {
432                 msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.DatabaseImageControl");
433         msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlImageControlModel");
434          }
435 
~OCX_Image()436     ~OCX_Image() { }
437     /*sal_uInt8 for sal_uInt8 Word Struct*/
438     sal_uInt16  nIdentifier;
439     sal_uInt16  nFixedAreaLen;
440     sal_uInt8   pBlockFlags[4];
441 
442     sal_uInt32  nBorderColor;
443     sal_uInt8   nBorderStyle;
444     sal_uInt8   nMousePointer;
445         sal_uInt8       nPictureSizeMode;
446 
447 
448         sal_uInt8   fUnknown1:1;
449     sal_uInt8   fEnabled:1;
450     sal_uInt8   fUnknown2:2;
451     sal_uInt8   fBackStyle:1;
452     sal_uInt8   fUnknown3:3;
453 
454         sal_uInt8       nPictureAlignment;
455         bool            bPictureTiling;
456     sal_uInt8   nSpecialEffect;
457 
458         bool bAutoSize;
459         ::rtl::OUString sImageUrl;
460         sal_Bool Read(SotStorageStream *pS);
461 
462     using OCX_Control::Import; // to not hide the other two import methods
463     virtual sal_Bool Import(com::sun::star::uno::Reference<
464         com::sun::star::beans::XPropertySet>& rPropSet);
465     sal_Bool Export(SotStorageRef &rObj,
466         const com::sun::star::uno::Reference<
467         com::sun::star::beans::XPropertySet> &rPropSet,
468         const com::sun::star::awt::Size& rSize);
469     sal_Bool WriteContents(SotStorageStreamRef &rObj,
470         const com::sun::star::uno::Reference<
471         com::sun::star::beans::XPropertySet> &rPropSet,
472         const com::sun::star::awt::Size& rSize);
473         // No Font record
ReadFontData(SvStorageStream *)474     virtual sal_Bool ReadFontData(SvStorageStream* /*pS*/) { return sal_True; }
475 
Create()476     static OCX_Control *Create() { return new OCX_Image;}
477 };
478 struct ContainerRecord
479 {
ContainerRecordContainerRecord480     ContainerRecord():nTop(0), nLeft(0), nSubStorageId(0), nSubStreamLen(0), nTabPos(0), nTypeIdent(0), bVisible( true ) {}
481 
482     ::rtl::OUString cName;
483     ::rtl::OUString controlTip;
484 
485     sal_uInt32 nTop;
486     sal_uInt32 nLeft;
487     sal_uInt32 nSubStorageId;
488     sal_uInt32 nSubStreamLen;
489     sal_uInt16  nTabPos;
490     sal_uInt16 nTypeIdent;
491     bool bVisible;
492 };
493 
494 typedef std::vector<OCX_Control*>::iterator CtrlIterator;
495 typedef std::vector<OCX_Control*>::const_iterator CtrlIteratorConst;
496 typedef std::vector<OCX_Control*>  CtrlList;
497 
498 
499 
500 class RBGroup
501 {
502     public:
RBGroup()503     RBGroup():mRBGroupPos(0){}
RBGroup(sal_uInt16 & groupPos)504     RBGroup(sal_uInt16& groupPos ):mRBGroupPos(groupPos){}
tabPos() const505     sal_Int16 tabPos() const { return mRBGroupPos; }
numControls()506     std::vector<OCX_Control*>::size_type numControls()
507     { return mpControls.size(); }
controls()508     std::vector<OCX_Control*>& controls() { return mpControls; }
509 
510     void add(OCX_Control* pRB);
511     private:
512     sal_uInt16 mRBGroupPos;
513     std::vector<OCX_Control*> mpControls;
514 };
515 
516 typedef ::std::hash_map < ::rtl::OUString, RBGroup*, ::rtl::OUStringHash,
517     ::std::equal_to< ::rtl::OUString > > RBGroupHash;
518 typedef std::vector<RBGroup*>::iterator GroupIterator;
519 
520 class OCX_OptionButton;
521 
522 class RBGroupManager
523 {
524 public:
525     RBGroupManager( String& defaultName );
526     ~RBGroupManager();
527 
528     CtrlList insertGroupsIntoControlList( const CtrlList& sourceList );
529     void addRadioButton( OCX_OptionButton* pRButton );
530 private:
531 
532     void addSeperator( std::vector< OCX_Control* >& dest );
533     void copyList( std::vector< OCX_Control* >& src,
534                   std::vector< OCX_Control* >& dest,
535                   bool addGroupSeperator );
536 
537     RBGroupHash rbGroups;
538     String mSDefaultName;
539     std::vector< RBGroup* > groupList;
540     sal_uInt16 numRadioButtons;
541 };
542 
543 
544 
545 
546 class OCX_ContainerControl : public OCX_Control
547 {
548 public:
549     virtual ~OCX_ContainerControl();
550         // sub class will process the control specific information
551         // e.g frame or userform ( maybe tab, mulipage in the future )
552         // Base (this) class will process the container specific information
553         // e.g. the controls contained by this container
554         // will
555         // a) create the controls
556         // b) read the controls
557         // c) store these controls in a list for post processing
558         //     e.g. import
559         //
560     virtual sal_Bool Read(SvStorageStream *pS);
561         // No Font record
ReadFontData(SvStorageStream *)562     virtual sal_Bool ReadFontData(SvStorageStream* /*pS*/) { return sal_True; }
563 
564     using OCX_Control::Import; // to not hide the other two import methods
565     virtual sal_Bool Import(com::sun::star::uno::Reference<
566         com::sun::star::beans::XPropertySet> &rPropSet);
567 
getContainerStream()568         SotStorageStreamRef getContainerStream() { return mContainerStream; }
569 
570         virtual void ProcessControl( OCX_Control* pControl, SvStorageStream* pS, ContainerRecord& rec );
571         bool createFromContainerRecord( const ContainerRecord& record,
572             OCX_Control*& );
573 protected:
574         // This class not meant to be instantiated
575         // needs to be subclassed
576     OCX_ContainerControl( SotStorageRef& parent,
577             const ::rtl::OUString& storageName,
578             const ::rtl::OUString& sN,
579             const com::sun::star::uno::Reference<
580                 com::sun::star::container::XNameContainer >  &rParent,
581             OCX_Control* pParent = NULL );
582         rtl::OUString createSubStreamName( const sal_uInt32& subStorageID );
583 
584         RBGroupManager rbGroupMgr;
585         com::sun::star::uno::Reference<
586                 com::sun::star::container::XNameContainer > mxParent;
587     std::vector<OCX_Control*> mpControls;
588         SotStorageRef mContainerStorage;
589         SotStorageStreamRef mContainerStream;
590         SotStorageStreamRef mContainedControlsStream;
591     sal_uInt32 nNoRecords;
592     sal_uInt32 nTotalLen;
593         sal_uInt32 containerType;
594 
595 private:
596         OCX_ContainerControl(); // not implemented
597         OCX_ContainerControl(const OCX_ContainerControl&); // not implemented
598 };
599 
600 
601 class OCX_MultiPage : public OCX_ContainerControl
602 {
603 public:
604     OCX_MultiPage( SotStorageRef& parent,
605             const ::rtl::OUString& storageName,
606             const ::rtl::OUString& sN,
607             const com::sun::star::uno::Reference<
608                 com::sun::star::container::XNameContainer >  &rDialog, OCX_Control* pParent = NULL);
~OCX_MultiPage()609     virtual ~OCX_MultiPage()
610     {
611         delete[] pCaption;
612         delete[] pIcon;
613         delete[] pPicture;
614     }
615     virtual sal_Bool Read(SvStorageStream *pS);
616 
617     using OCX_ContainerControl::Import; // to not hide the other two import methods
618     virtual sal_Bool Import(com::sun::star::uno::Reference<
619         com::sun::star::beans::XPropertySet> &rPropSet);
620     virtual sal_Bool Import(com::sun::star::uno::Reference<
621         com::sun::star::container::XNameContainer>
622         &rDialog);
623         virtual void ProcessControl( OCX_Control* pControl, SvStorageStream* pS, ContainerRecord& rec );
624     /*sal_uInt8 for sal_uInt8 Word Struct*/
625     sal_uInt16 nIdentifier;
626     sal_uInt16 nFixedAreaLen;
627     sal_uInt8   pBlockFlags[4];
628 
629     sal_uInt32  fUnknown1;
630 
631     sal_uInt8   fUnknown2:1;
632     sal_uInt8   fEnabled:1;
633     sal_uInt8   fLocked:1;
634     sal_uInt8   fBackStyle:1;
635     sal_uInt8   fUnknown3:4;
636 
637     sal_uInt8   fUnknown4:8;
638 
639     sal_uInt8   fUnknown5:7;
640     sal_uInt8   fWordWrap:1;
641 
642     sal_uInt8   fUnknown6:4;
643     sal_uInt8   fAutoSize:1;
644     sal_uInt8   fUnknown7:3;
645 
646     sal_uInt32  nCaptionLen;
647     sal_uInt16  nVertPos;
648     sal_uInt16  nHorzPos;
649     sal_uInt8   nMousePointer;
650     sal_uInt32  nBorderColor;
651     sal_uInt32  fUnknown8;
652     sal_uInt32  fUnknown9;
653     sal_uInt8   nKeepScrollBarsVisible;
654     sal_uInt8   nCycle;
655     sal_uInt16  nBorderStyle;
656     sal_uInt16  nSpecialEffect;
657     sal_uInt16  nPicture;
658     sal_uInt8   nPictureAlignment;
659     sal_uInt8   nPictureSizeMode;
660     bool        bPictureTiling;
661     sal_uInt16  nAccelerator;
662     sal_uInt16  nIcon;
663 
664     char *pCaption;
665 
666     sal_uInt32  nScrollWidth;
667     sal_uInt32  nScrollHeight;
668 
669 
670     sal_uInt8 pIconHeader[20];
671     sal_uInt32  nIconLen;
672     sal_uInt8 *pIcon;
673 
674     sal_uInt8 pPictureHeader[20];
675     sal_uInt32  nPictureLen;
676     sal_uInt8 *pPicture;
677 private:
678         sal_Int32 mnCurrentPageStep;
679 };
680 
681 
682 
683 class OCX_Page : public OCX_ContainerControl
684 {
685 public:
686     OCX_Page( SotStorageRef& parentStorage,
687             const ::rtl::OUString& storageName,
688             const ::rtl::OUString& sN,
689             const com::sun::star::uno::Reference<
690                 com::sun::star::container::XNameContainer >  &rDialog, OCX_Control* parent = NULL);
~OCX_Page()691     virtual ~OCX_Page()
692     {
693         delete[] pCaption;
694         delete[] pIcon;
695         delete[] pPicture;
696     }
697     virtual sal_Bool Read(SvStorageStream *pS);
698 
699     using OCX_ContainerControl::Import; // to not hide the other two import methods
700     virtual sal_Bool Import(com::sun::star::uno::Reference<
701         com::sun::star::container::XNameContainer>
702         &rDialog);
703 /*  virtual sal_Bool Import(com::sun::star::uno::Reference<
704         com::sun::star::beans::XPropertySet> &rPropSet);
705 */
706     /*sal_uInt8 for sal_uInt8 Word Struct*/
707     sal_uInt16 nIdentifier;
708     sal_uInt16 nFixedAreaLen;
709     sal_uInt8   pBlockFlags[4];
710 
711     sal_uInt32  fUnknown1;
712 
713     sal_uInt8   fUnknown2:1;
714     sal_uInt8   fEnabled:1;
715     sal_uInt8   fLocked:1;
716     sal_uInt8   fBackStyle:1;
717     sal_uInt8   fUnknown3:4;
718 
719     sal_uInt8   fUnknown4:8;
720 
721     sal_uInt8   fUnknown5:7;
722     sal_uInt8   fWordWrap:1;
723 
724     sal_uInt8   fUnknown6:4;
725     sal_uInt8   fAutoSize:1;
726     sal_uInt8   fUnknown7:3;
727 
728     sal_uInt32  nCaptionLen;
729     sal_uInt16  nVertPos;
730     sal_uInt16  nHorzPos;
731     sal_uInt8   nMousePointer;
732     sal_uInt32  nBorderColor;
733     sal_uInt32  fUnknown8;
734     sal_uInt32  fUnknown9;
735     sal_uInt8   nKeepScrollBarsVisible;
736     sal_uInt8   nCycle;
737     sal_uInt16  nBorderStyle;
738     sal_uInt16  nSpecialEffect;
739     sal_uInt16  nPicture;
740     sal_uInt8   nPictureAlignment;
741     sal_uInt8   nPictureSizeMode;
742     bool        bPictureTiling;
743     sal_uInt16  nAccelerator;
744     sal_uInt16  nIcon;
745 
746     char *pCaption;
747 
748     sal_uInt32  nScrollWidth;
749     sal_uInt32  nScrollHeight;
750 
751 
752     sal_uInt8 pIconHeader[20];
753     sal_uInt32  nIconLen;
754     sal_uInt8 *pIcon;
755 
756     sal_uInt8 pPictureHeader[20];
757     sal_uInt32  nPictureLen;
758     sal_uInt8 *pPicture;
759 private:
760 };
761 
762 
763 class OCX_Frame : public OCX_ContainerControl
764 {
765 public:
766     OCX_Frame( SotStorageRef& parent,
767             const ::rtl::OUString& storageName,
768             const ::rtl::OUString& sN,
769             const com::sun::star::uno::Reference<
770                 com::sun::star::container::XNameContainer >  &rDialog, OCX_Control* pParent = NULL);
~OCX_Frame()771     virtual ~OCX_Frame()
772     {
773         delete[] pCaption;
774         delete[] pIcon;
775         delete[] pPicture;
776     }
777     virtual sal_Bool Read(SvStorageStream *pS);
778 
779     using OCX_ContainerControl::Import; // to not hide the other two import methods
780     virtual sal_Bool Import(com::sun::star::uno::Reference<
781         com::sun::star::beans::XPropertySet> &rPropSet);
782 
783     /*sal_uInt8 for sal_uInt8 Word Struct*/
784     sal_uInt16 nIdentifier;
785     sal_uInt16 nFixedAreaLen;
786     sal_uInt8   pBlockFlags[4];
787 
788     sal_uInt32  fUnknown1;
789 
790     sal_uInt8   fUnknown2:1;
791     sal_uInt8   fEnabled:1;
792     sal_uInt8   fLocked:1;
793     sal_uInt8   fBackStyle:1;
794     sal_uInt8   fUnknown3:4;
795 
796     sal_uInt8   fUnknown4:8;
797 
798     sal_uInt8   fUnknown5:7;
799     sal_uInt8   fWordWrap:1;
800 
801     sal_uInt8   fUnknown6:4;
802     sal_uInt8   fAutoSize:1;
803     sal_uInt8   fUnknown7:3;
804 
805     sal_uInt32  nCaptionLen;
806     sal_uInt16  nVertPos;
807     sal_uInt16  nHorzPos;
808     sal_uInt8   nMousePointer;
809     sal_uInt32  nBorderColor;
810     sal_uInt32  fUnknown8;
811     sal_uInt32  fUnknown9;
812     sal_uInt8   nKeepScrollBarsVisible;
813     sal_uInt8   nCycle;
814     sal_uInt16  nBorderStyle;
815     sal_uInt16  nSpecialEffect;
816     sal_uInt16  nPicture;
817     sal_uInt8   nPictureAlignment;
818     sal_uInt8   nPictureSizeMode;
819     bool        bPictureTiling;
820     sal_uInt16  nAccelerator;
821     sal_uInt16  nIcon;
822 
823     char *pCaption;
824 
825     sal_uInt32  nScrollWidth;
826     sal_uInt32  nScrollHeight;
827     sal_uInt32  nScrollLeft;
828     sal_uInt32  nScrollTop;
829 
830 
831     sal_uInt8 pIconHeader[20];
832     sal_uInt32  nIconLen;
833     sal_uInt8 *pIcon;
834 
835     sal_uInt8 pPictureHeader[20];
836     sal_uInt32  nPictureLen;
837     sal_uInt8 *pPicture;
838 private:
839 };
840 
841 class OCX_UserForm : public OCX_ContainerControl
842 {
843 public:
844     OCX_UserForm( SotStorageRef& parent,
845             const ::rtl::OUString& storageName,
846             const ::rtl::OUString& sN,
847             const com::sun::star::uno::Reference<
848                 com::sun::star::container::XNameContainer >  &rDialog,
849             const com::sun::star::uno::Reference<
850                 com::sun::star::lang::XMultiServiceFactory >& rMsf);
~OCX_UserForm()851     ~OCX_UserForm()
852     {
853         delete[] pCaption;
854         delete[] pIcon;
855         delete[] pPicture;
856     }
857 
858     virtual sal_Bool Read(SvStorageStream *pS);
859 
860     using OCX_ContainerControl::Import; // to not hide the other two import methods
861     virtual sal_Bool Import( com::sun::star::uno::Reference<
862         com::sun::star::container::XNameContainer>
863         &rDialog);
864 
865     /*sal_uInt8 for sal_uInt8 Word Struct*/
866     sal_uInt16 nIdentifier;
867     sal_uInt16 nFixedAreaLen;
868     sal_uInt8   pBlockFlags[4];
869 
870     sal_uInt32  nChildrenA;
871 
872     sal_uInt8   fUnknown1:1;
873     sal_uInt8   fEnabled:1;
874     sal_uInt8   fLocked:1;
875     sal_uInt8   fBackStyle:1;
876     sal_uInt8   fUnknown2:4;
877 
878     sal_uInt8   fUnknown3:8;
879 
880     sal_uInt8   fUnknown4:7;
881     sal_uInt8   fWordWrap:1;
882 
883     sal_uInt8   fUnknown5:4;
884     sal_uInt8   fAutoSize:1;
885     sal_uInt8   fUnknown6:3;
886 
887     sal_uInt32  nCaptionLen;
888     sal_uInt16  nVertPos;
889     sal_uInt16  nHorzPos;
890     sal_uInt8   nMousePointer;
891     sal_uInt32  nBorderColor;
892     sal_uInt32  nDrawBuffer;
893     sal_uInt32  nChildrenB;
894     sal_uInt8   nKeepScrollBarsVisible;
895     sal_uInt8   nCycle;
896     sal_uInt16  nBorderStyle;
897     sal_uInt8   nSpecialEffect;
898     sal_uInt16  nPicture;
899     sal_uInt8   nPictureAlignment;
900     sal_uInt8   nPictureSizeMode;
901     bool        bPictureTiling;
902     sal_uInt16  nAccelerator;
903     sal_uInt16  nIcon;
904     sal_uInt16  fUnknown7;
905 
906     char *pCaption;
907 
908     sal_uInt32  nScrollWidth;
909     sal_uInt32  nScrollHeight;
910     sal_uInt32  nScrollLeft;
911     sal_uInt32  nScrollTop;
912 
913     sal_uInt8 pIconHeader[20];
914     sal_uInt32  nIconLen;
915     sal_uInt8 *pIcon;
916 
917     sal_uInt8 pPictureHeader[20];
918     sal_uInt32  nPictureLen;
919     sal_uInt8 *pPicture;
920 private:
921         com::sun::star::uno::Reference<
922                 com::sun::star::uno::XComponentContext> mxCtx;
923 };
924 
925 
926 
927 class OCX_CheckBox : public OCX_ModernControl
928 {
929 public:
OCX_CheckBox()930     OCX_CheckBox() : OCX_ModernControl(rtl::OUString::createFromAscii("CheckBox")){
931         msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.CheckBox");
932         msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlCheckBoxModel");
933         mnBackColor = 0x80000005L;
934         mnForeColor = 0x80000008L;
935         aFontData.SetHasAlign(sal_True);
936     }
937 
938     using OCX_ModernControl::Import; // to not hide the other two import methods
939     virtual sal_Bool Import(com::sun::star::uno::Reference<
940         com::sun::star::beans::XPropertySet> &rPropSet);
941     sal_Bool Export(SotStorageRef &rObj,
942         const com::sun::star::uno::Reference<
943         com::sun::star::beans::XPropertySet> &rPropSet,
944         const com::sun::star::awt::Size& rSize);
945     sal_Bool WriteContents(SotStorageStreamRef &rObj,
946         const com::sun::star::uno::Reference<
947         com::sun::star::beans::XPropertySet> &rPropSet,
948         const com::sun::star::awt::Size& rSize);
Create()949     static OCX_Control *Create() { return new OCX_CheckBox;}
950 };
951 
952 class OCX_OptionButton : public OCX_ModernControl
953 {
954 public:
OCX_OptionButton()955     OCX_OptionButton() : OCX_ModernControl(rtl::OUString::createFromAscii("OptionButton"))
956     {
957         msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.RadioButton");
958         msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlRadioButtonModel");
959         mnBackColor = 0x80000005L;
960         mnForeColor = 0x80000008L;
961         aFontData.SetHasAlign(sal_True);
962     }
963 
964     using OCX_ModernControl::Import; // to not hide the other two import methods
965     virtual sal_Bool Import(com::sun::star::uno::Reference<
966         com::sun::star::beans::XPropertySet> &rPropSet);
967     sal_Bool Export(SotStorageRef &rObj,
968         const com::sun::star::uno::Reference<
969         com::sun::star::beans::XPropertySet> &rPropSet,
970         const com::sun::star::awt::Size& rSize);
971     sal_Bool WriteContents(SotStorageStreamRef &rObj,
972         const com::sun::star::uno::Reference<
973         com::sun::star::beans::XPropertySet> &rPropSet,
974         const com::sun::star::awt::Size& rSize);
975 
976 
Create()977     static OCX_Control *Create() { return new OCX_OptionButton;}
978 };
979 
980 class OCX_TextBox : public OCX_ModernControl
981 {
982 public:
OCX_TextBox()983     OCX_TextBox() : OCX_ModernControl(rtl::OUString::createFromAscii("TextBox")) {
984         msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.TextField");
985         msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlEditModel");
986         mnBackColor = 0x80000005L;
987         mnForeColor = 0x80000008L;
988         nBorderColor = 0x80000006L;
989         aFontData.SetHasAlign(sal_True);
990     }
991 
992     using OCX_ModernControl::Import; // to not hide the other two import methods
993     virtual sal_Bool Import(com::sun::star::uno::Reference<
994         com::sun::star::beans::XPropertySet> &rPropSet);
995 
996     sal_Bool Export(SotStorageRef &rObj,
997         const com::sun::star::uno::Reference<
998         com::sun::star::beans::XPropertySet> &rPropSet,
999         const com::sun::star::awt::Size& rSize);
1000     sal_Bool WriteContents(SotStorageStreamRef &rObj,
1001         const com::sun::star::uno::Reference<
1002         com::sun::star::beans::XPropertySet> &rPropSet,
1003         const com::sun::star::awt::Size& rSize);
Create()1004     static OCX_Control *Create() { return new OCX_TextBox;}
1005 };
1006 
1007 class OCX_FieldControl: public OCX_ModernControl
1008 {
1009 public:
OCX_FieldControl()1010     OCX_FieldControl() : OCX_ModernControl(rtl::OUString::createFromAscii("TextBox")) {
1011         mnBackColor = 0x80000005L;
1012         mnForeColor = 0x80000008L;
1013         nBorderColor = 0x80000006L;
1014     }
1015     sal_Bool Export(SotStorageRef &rObj,
1016         const com::sun::star::uno::Reference<
1017         com::sun::star::beans::XPropertySet> &rPropSet,
1018         const com::sun::star::awt::Size& rSize);
1019     sal_Bool WriteContents(SotStorageStreamRef &rObj,
1020         const com::sun::star::uno::Reference<
1021         com::sun::star::beans::XPropertySet> &rPropSet,
1022         const com::sun::star::awt::Size& rSize);
Create()1023     static OCX_Control *Create() { return new OCX_FieldControl;}
1024 };
1025 
1026 
1027 class OCX_ToggleButton : public OCX_ModernControl
1028 {
1029 public:
OCX_ToggleButton()1030     OCX_ToggleButton() : OCX_ModernControl(rtl::OUString::createFromAscii("ToggleButton")) {
1031                 msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.CommandButton");
1032                 msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlButtonModel");
1033 
1034         mnBackColor = 0x8000000F;
1035         mnForeColor = 0x80000012;
1036         aFontData.SetHasAlign(sal_True);
1037         aFontData.nJustification = 3;   // centered by default
1038     }
Create()1039     static OCX_Control *Create() { return new OCX_ToggleButton;}
1040 
1041     using OCX_ModernControl::Import; // to not hide the other two import methods
1042     virtual sal_Bool Import(com::sun::star::uno::Reference<
1043         com::sun::star::beans::XPropertySet> &rPropSet);
1044     sal_Bool Export(SvStorageRef &rObj,
1045         const com::sun::star::uno::Reference<
1046         com::sun::star::beans::XPropertySet> &rPropSet,
1047         const com::sun::star::awt::Size& rSize);
1048     sal_Bool WriteContents(SvStorageStreamRef &rObj,
1049         const com::sun::star::uno::Reference<
1050         com::sun::star::beans::XPropertySet> &rPropSet,
1051         const com::sun::star::awt::Size& rSize);
1052 };
1053 
1054 class OCX_ComboBox : public OCX_ModernControl
1055 {
1056 public:
OCX_ComboBox()1057     OCX_ComboBox() : OCX_ModernControl(rtl::OUString::createFromAscii("ComboBox")){
1058         msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.ComboBox");
1059             msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlComboBoxModel");
1060         mnBackColor = 0x80000005;
1061         mnForeColor = 0x80000008;
1062         nBorderColor = 0x80000006;
1063         aFontData.SetHasAlign(sal_True);
1064     }
Create()1065     static OCX_Control *Create() { return new OCX_ComboBox;}
1066     using OCX_ModernControl::Import; // to not hide the other two import methods
1067     virtual sal_Bool Import(com::sun::star::uno::Reference<
1068         com::sun::star::beans::XPropertySet> &rPropSet);
1069     sal_Bool Export(SotStorageRef &rObj,
1070         const com::sun::star::uno::Reference<
1071         com::sun::star::beans::XPropertySet> &rPropSet,
1072         const com::sun::star::awt::Size& rSize);
1073     sal_Bool WriteContents(SotStorageStreamRef &rObj,
1074         const com::sun::star::uno::Reference<
1075         com::sun::star::beans::XPropertySet> &rPropSet,
1076         const com::sun::star::awt::Size& rSize);
1077 };
1078 
1079 class OCX_ListBox : public OCX_ModernControl
1080 {
1081 public:
OCX_ListBox()1082     OCX_ListBox() : OCX_ModernControl(rtl::OUString::createFromAscii("ListBox")){
1083         msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.ListBox");
1084         msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlListBoxModel");
1085         mnBackColor = 0x80000005;
1086         mnForeColor = 0x80000008;
1087         nBorderColor = 0x80000006;
1088         aFontData.SetHasAlign(sal_True);
1089     }
Create()1090     static OCX_Control *Create() { return new OCX_ListBox;}
1091     using OCX_ModernControl::Import; // to not hide the other two import methods
1092     virtual sal_Bool Import(com::sun::star::uno::Reference<
1093         com::sun::star::beans::XPropertySet> &rPropSet);
1094     sal_Bool Export(SotStorageRef &rObj,
1095         const com::sun::star::uno::Reference<
1096         com::sun::star::beans::XPropertySet> &rPropSet,
1097         const com::sun::star::awt::Size& rSize);
1098     sal_Bool WriteContents(SotStorageStreamRef &rObj,
1099         const com::sun::star::uno::Reference<
1100         com::sun::star::beans::XPropertySet> &rPropSet,
1101         const com::sun::star::awt::Size& rSize);
1102 
1103 };
1104 
1105 class OCX_CommandButton : public OCX_Control
1106 {
1107 public:
OCX_CommandButton()1108     OCX_CommandButton() : OCX_Control(String::CreateFromAscii("CommandButton")),
1109     fEnabled(1), fLocked(0), fBackStyle(1), fWordWrap(0), fAutoSize(0),
1110         nCaptionLen(0), nVertPos(1), nHorzPos(7), nMousePointer(0), nPicture(0),
1111         nAccelerator(0), nIcon(0), pCaption(0), nIconLen(0), pIcon(0), nPictureLen(0),
1112         pPicture(0), mbTakeFocus( true )
1113     {
1114             msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.CommandButton");
1115             msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlButtonModel");
1116             mnForeColor = 0x80000012L;
1117                 mnBackColor = 0x8000000FL;
1118                 aFontData.SetHasAlign(sal_True);
1119     }
1120 
~OCX_CommandButton()1121     ~OCX_CommandButton() {
1122         if (pCaption) delete[] pCaption;
1123         if (pIcon) delete[] pIcon;
1124         if (pPicture) delete[] pPicture;
1125     }
1126     sal_Bool Read(SotStorageStream *pS);
1127 
1128     /*sal_uInt8 for sal_uInt8 Word Struct*/
1129     sal_uInt16  nIdentifier;
1130     sal_uInt16  nFixedAreaLen;
1131     sal_uInt8   pBlockFlags[4];
1132 
1133 
1134     sal_uInt8   fUnknown1:1;
1135     sal_uInt8   fEnabled:1;
1136     sal_uInt8   fLocked:1;
1137     sal_uInt8   fBackStyle:1;
1138     sal_uInt8   fUnknown2:4;
1139 
1140     sal_uInt8   fUnknown3:8;
1141 
1142     sal_uInt8   fUnknown4:7;
1143     sal_uInt8   fWordWrap:1;
1144 
1145     sal_uInt8   fUnknown5:4;
1146     sal_uInt8   fAutoSize:1;
1147     sal_uInt8   fUnknown6:3;
1148 
1149     sal_uInt32  nCaptionLen;
1150 
1151     sal_uInt16  nVertPos;
1152     sal_uInt16  nHorzPos;
1153 
1154     sal_uInt16  nMousePointer;
1155     sal_uInt16  nPicture;
1156     sal_uInt16  nAccelerator;
1157     sal_uInt16  nIcon;
1158 
1159     char *pCaption;
1160 
1161     sal_uInt8 pIconHeader[20];
1162     sal_uInt32  nIconLen;
1163     sal_uInt8 *pIcon;
1164 
1165     sal_uInt8 pPictureHeader[20];
1166     sal_uInt32  nPictureLen;
1167     sal_uInt8 *pPicture;
1168 
1169     bool        mbTakeFocus;
1170 
Create()1171     static OCX_Control *Create() { return new OCX_CommandButton;}
1172     using OCX_Control::Import; // to not hide the other two import methods
1173     virtual sal_Bool Import(com::sun::star::uno::Reference<
1174         com::sun::star::beans::XPropertySet> &rPropSet);
1175     sal_Bool Export(SotStorageRef &rObj,
1176         const com::sun::star::uno::Reference<
1177         com::sun::star::beans::XPropertySet> &rPropSet,
1178         const com::sun::star::awt::Size& rSize);
1179     sal_Bool WriteContents(SotStorageStreamRef &rObj,
1180         const com::sun::star::uno::Reference<
1181         com::sun::star::beans::XPropertySet> &rPropSet,
1182         const com::sun::star::awt::Size& rSize);
1183 
1184 };
1185 
1186 class OCX_ImageButton: public OCX_CommandButton
1187 {
1188 public:
OCX_ImageButton()1189     OCX_ImageButton() {
1190         aFontData.SetHasAlign(sal_False);
1191         aFontData.SetHasFont(sal_False);
1192     }
Create()1193     static OCX_Control *Create() { return new OCX_ImageButton;}
1194     sal_Bool Export(SotStorageRef &rObj,
1195         const com::sun::star::uno::Reference<
1196         com::sun::star::beans::XPropertySet> &rPropSet,
1197         const com::sun::star::awt::Size& rSize);
1198     sal_Bool WriteContents(SotStorageStreamRef &rObj,
1199         const com::sun::star::uno::Reference<
1200         com::sun::star::beans::XPropertySet> &rPropSet,
1201         const com::sun::star::awt::Size& rSize);
1202 
1203 };
1204 
1205 class OCX_GroupBox: public OCX_Control
1206 {
1207 public:
OCX_GroupBox()1208     OCX_GroupBox() : OCX_Control(String::CreateFromAscii("GroupBox")) {}
Create()1209     static OCX_Control *Create() { return new OCX_GroupBox;}
1210     sal_Bool Export(SotStorageRef &rObj,
1211         const com::sun::star::uno::Reference<
1212         com::sun::star::beans::XPropertySet> &rPropSet,
1213         const com::sun::star::awt::Size& rSize);
1214     sal_Bool WriteContents(SotStorageStreamRef &rObj,
1215         const com::sun::star::uno::Reference<
1216         com::sun::star::beans::XPropertySet> &rPropSet,
1217         const com::sun::star::awt::Size& rSize);
1218 
1219 };
1220 
1221 class OCX_Label : public OCX_Control
1222 {
1223 public:
OCX_Label(OCX_Control * pParent=NULL)1224     OCX_Label(OCX_Control* pParent = NULL ) : OCX_Control(rtl::OUString::createFromAscii("Label"), pParent ), fEnabled(1),
1225         fLocked(0),fBackStyle(1),fWordWrap(1),
1226     fAutoSize(0),nCaptionLen(0),nVertPos(1),nHorzPos(7),nMousePointer(0),
1227     nBorderColor(0x80000006),nBorderStyle(0),nSpecialEffect(0),
1228     nPicture(0),nAccelerator(0),nIcon(0),pCaption(0),nIconLen(0),pIcon(0),
1229     nPictureLen(0),pPicture(0)
1230     {
1231         msFormType = rtl::OUString::createFromAscii("com.sun.star.form.component.FixedText");
1232         msDialogType = rtl::OUString::createFromAscii("com.sun.star.awt.UnoControlFixedTextModel");
1233                 mnForeColor = 0x80000008;
1234                 mnBackColor = 0x80000005;
1235         aFontData.SetHasAlign(sal_True);
1236     }
1237 
~OCX_Label()1238     ~OCX_Label() {
1239         if (pCaption) delete[] pCaption;
1240         if (pIcon) delete[] pIcon;
1241         if (pPicture) delete[] pPicture;
1242     }
1243     sal_Bool Read(SotStorageStream *pS);
1244 
1245     /*sal_uInt8 for sal_uInt8 Word Struct*/
1246     sal_uInt16 nIdentifier;
1247     sal_uInt16 nFixedAreaLen;
1248     sal_uInt8   pBlockFlags[4];
1249 
1250 
1251     sal_uInt8   fUnknown1:1;
1252     sal_uInt8   fEnabled:1;
1253     sal_uInt8   fLocked:1;
1254     sal_uInt8   fBackStyle:1;
1255     sal_uInt8   fUnknown2:4;
1256 
1257     sal_uInt8   fUnknown3:8;
1258 
1259     sal_uInt8   fUnknown4:7;
1260     sal_uInt8   fWordWrap:1;
1261 
1262     sal_uInt8   fUnknown5:4;
1263     sal_uInt8   fAutoSize:1;
1264     sal_uInt8   fUnknown6:3;
1265 
1266     sal_uInt32  nCaptionLen;
1267     sal_uInt16  nVertPos;
1268     sal_uInt16  nHorzPos;
1269     sal_uInt8   nMousePointer;
1270     sal_uInt32  nBorderColor;
1271     sal_uInt16  nBorderStyle;
1272     sal_uInt16  nSpecialEffect;
1273     sal_uInt16  nPicture;
1274     sal_uInt16  nAccelerator;
1275     sal_uInt16  nIcon;
1276 
1277     char *pCaption;
1278 
1279     sal_uInt8 pIconHeader[20];
1280     sal_uInt32  nIconLen;
1281     sal_uInt8 *pIcon;
1282 
1283     sal_uInt8 pPictureHeader[20];
1284     sal_uInt32  nPictureLen;
1285     sal_uInt8 *pPicture;
1286 
Create()1287     static OCX_Control *Create() { return new OCX_Label;}
1288 
1289     using OCX_Control::Import; // to not hide the other two import methods
1290     virtual sal_Bool Import(com::sun::star::uno::Reference<
1291         com::sun::star::beans::XPropertySet> &rPropSet);
1292 
1293     sal_Bool Export(SotStorageRef &rObj,
1294         const com::sun::star::uno::Reference<
1295         com::sun::star::beans::XPropertySet> &rPropSet,
1296         const com::sun::star::awt::Size& rSize);
1297     sal_Bool WriteContents(SotStorageStreamRef &rObj,
1298         const com::sun::star::uno::Reference<
1299         com::sun::star::beans::XPropertySet> &rPropSet,
1300         const com::sun::star::awt::Size& rSize);
1301 
1302 };
1303 
1304 
1305 class OCX_ProgressBar : public OCX_Control
1306 {
1307 public:
1308     explicit            OCX_ProgressBar();
1309 
1310     static OCX_Control* Create();
1311 
1312     virtual sal_Bool    Read( SvStorageStream *pS );
1313     using OCX_Control::Import; // to not hide the other two import methods
1314     virtual sal_Bool Import(com::sun::star::uno::Reference<
1315             com::sun::star::beans::XPropertySet> &rPropSet);
1316         // No Font record
ReadFontData(SvStorageStream *)1317     virtual sal_Bool ReadFontData(SvStorageStream* /*pS*/) { return sal_True; }
1318 private:
1319     sal_Int32   nMin;
1320     sal_Int32   nMax;
1321     bool        bFixedSingle;
1322     bool        bEnabled;
1323     bool        b3d;
1324 };
1325 
1326 class OCX_SpinButton : public OCX_Control
1327 {
1328 public:
1329     explicit            OCX_SpinButton();
1330 
1331     static OCX_Control* Create();
1332 
1333     virtual sal_Bool    Read( SvStorageStream *pS );
1334 
1335     virtual sal_Bool    ReadFontData( SvStorageStream *pS );
1336 
1337     using OCX_Control::Import; // to not hide the other two import methods
1338     virtual sal_Bool Import(com::sun::star::uno::Reference<
1339         com::sun::star::beans::XPropertySet> &rPropSet);
1340     //Export exports a control as an OLE style storage stream tree
1341     virtual sal_Bool    Export( SvStorageRef &rObj,
1342                             const com::sun::star::uno::Reference<
1343                                 com::sun::star::beans::XPropertySet> &rPropSet,
1344                                 const com::sun::star::awt::Size& rSize );
1345 
1346     //WriteContents writes the contents of a contents stream, for
1347     //the Excel export you cannot use Export, only WriteContents instead
1348     virtual sal_Bool    WriteContents( SvStorageStreamRef &rObj,
1349                             const com::sun::star::uno::Reference<
1350                                 com::sun::star::beans::XPropertySet> &rPropSet,
1351                                 const com::sun::star::awt::Size& rSize );
1352 
1353 protected:
1354     void                UpdateInt32Property(
1355                             sal_Int32& rnCoreValue, sal_Int32 nNewValue,
1356                             sal_Int32 nBlockFlag );
1357 
1358     void                GetInt32Property(
1359                             sal_Int32& rnCoreValue,
1360                             const com::sun::star::uno::Reference<
1361                                 com::sun::star::beans::XPropertySet >& rxPropSet,
1362                             const rtl::OUString& rPropName,
1363                             sal_Int32 nBlockFlag );
1364 
1365     void                UpdateBoolProperty(
1366                             bool& rbCoreValue, bool bNewValue,
1367                             sal_Int32 nBlockFlag );
1368 
1369     void                GetBoolProperty(
1370                             bool& rbCoreValue,
1371                             const com::sun::star::uno::Reference<
1372                                 com::sun::star::beans::XPropertySet >& rxPropSet,
1373                             const rtl::OUString& rPropName,
1374                             sal_Int32 nBlockFlag );
1375 
1376     /** Writes the data from own members to stream. */
1377     sal_Bool            WriteData( SvStream& rStrm ) const;
1378 
1379     sal_Int32           mnBlockFlags;
1380     sal_Int32           mnValue;
1381     sal_Int32           mnMin;
1382     sal_Int32           mnMax;
1383     sal_Int32           mnSmallStep;
1384     sal_Int32           mnPageStep;
1385     sal_Int32           mnOrient;
1386     sal_Int32           mnDelay;
1387     bool                mbEnabled;
1388     bool                mbLocked;
1389     bool                mbPropThumb;
1390 };
1391 
1392 class OCX_ScrollBar : public OCX_SpinButton
1393 {
1394 public:
1395     explicit            OCX_ScrollBar();
1396 
1397     static OCX_Control* Create();
1398 
1399     using OCX_Control::Import; // to not hide the other two import methods
1400     virtual sal_Bool Import(com::sun::star::uno::Reference<
1401         com::sun::star::beans::XPropertySet> &rPropSet);
1402 
1403     //Export exports a control as an OLE style storage stream tree
1404     virtual sal_Bool    Export( SvStorageRef &rObj,
1405                             const com::sun::star::uno::Reference<
1406                                 com::sun::star::beans::XPropertySet> &rPropSet,
1407                                 const com::sun::star::awt::Size& rSize );
1408 
1409     //WriteContents writes the contents of a contents stream, for
1410     //the Excel export you cannot use Export, only WriteContents instead
1411     virtual sal_Bool    WriteContents( SvStorageStreamRef &rObj,
1412                             const com::sun::star::uno::Reference<
1413                                 com::sun::star::beans::XPropertySet> &rPropSet,
1414                                 const com::sun::star::awt::Size& rSize );
1415 };
1416 
1417 #endif
1418