xref: /aoo41x/main/oox/source/ole/axcontrol.cxx (revision b6dc695e)
1ca5ec200SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3ca5ec200SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4ca5ec200SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5ca5ec200SAndrew Rist  * distributed with this work for additional information
6ca5ec200SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7ca5ec200SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8ca5ec200SAndrew Rist  * "License"); you may not use this file except in compliance
9ca5ec200SAndrew Rist  * with the License.  You may obtain a copy of the License at
10ca5ec200SAndrew Rist  *
11ca5ec200SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12ca5ec200SAndrew Rist  *
13ca5ec200SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14ca5ec200SAndrew Rist  * software distributed under the License is distributed on an
15ca5ec200SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16ca5ec200SAndrew Rist  * KIND, either express or implied.  See the License for the
17ca5ec200SAndrew Rist  * specific language governing permissions and limitations
18ca5ec200SAndrew Rist  * under the License.
19ca5ec200SAndrew Rist  *
20ca5ec200SAndrew Rist  *************************************************************/
21ca5ec200SAndrew Rist 
22ca5ec200SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "oox/ole/axcontrol.hxx"
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <com/sun/star/awt/FontSlant.hpp>
27cdf0e10cSrcweir #include <com/sun/star/awt/FontStrikeout.hpp>
28cdf0e10cSrcweir #include <com/sun/star/awt/FontUnderline.hpp>
29cdf0e10cSrcweir #include <com/sun/star/awt/FontWeight.hpp>
30cdf0e10cSrcweir #include <com/sun/star/awt/ImagePosition.hpp>
31cdf0e10cSrcweir #include <com/sun/star/awt/ImageScaleMode.hpp>
32cdf0e10cSrcweir #include <com/sun/star/awt/Point.hpp>
33cdf0e10cSrcweir #include <com/sun/star/awt/ScrollBarOrientation.hpp>
34cdf0e10cSrcweir #include <com/sun/star/awt/Size.hpp>
35cdf0e10cSrcweir #include <com/sun/star/awt/TextAlign.hpp>
36cdf0e10cSrcweir #include <com/sun/star/awt/VisualEffect.hpp>
37cdf0e10cSrcweir #include <com/sun/star/awt/XControlModel.hpp>
38cdf0e10cSrcweir #include <com/sun/star/beans/NamedValue.hpp>
39cdf0e10cSrcweir #include <com/sun/star/container/XIndexContainer.hpp>
40cdf0e10cSrcweir #include <com/sun/star/form/XForm.hpp>
41cdf0e10cSrcweir #include <com/sun/star/form/XFormComponent.hpp>
42cdf0e10cSrcweir #include <com/sun/star/form/XFormsSupplier.hpp>
43cdf0e10cSrcweir #include <com/sun/star/form/binding/XBindableValue.hpp>
44cdf0e10cSrcweir #include <com/sun/star/form/binding/XListEntrySink.hpp>
45cdf0e10cSrcweir #include <com/sun/star/form/binding/XListEntrySource.hpp>
46cdf0e10cSrcweir #include <com/sun/star/form/binding/XValueBinding.hpp>
47cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
48cdf0e10cSrcweir #include <com/sun/star/sheet/XCellRangeAddressable.hpp>
49cdf0e10cSrcweir #include <com/sun/star/sheet/XCellRangeReferrer.hpp>
50cdf0e10cSrcweir #include <com/sun/star/style/VerticalAlignment.hpp>
51cdf0e10cSrcweir #include <com/sun/star/table/CellAddress.hpp>
52cdf0e10cSrcweir #include <com/sun/star/table/CellRangeAddress.hpp>
53cdf0e10cSrcweir #include <rtl/tencinfo.h>
54cdf0e10cSrcweir #include "oox/helper/attributelist.hxx"
55cdf0e10cSrcweir #include "oox/helper/binaryinputstream.hxx"
56cdf0e10cSrcweir #include "oox/helper/containerhelper.hxx"
57cdf0e10cSrcweir #include "oox/helper/graphichelper.hxx"
58cdf0e10cSrcweir #include "oox/helper/propertymap.hxx"
59cdf0e10cSrcweir 
60cdf0e10cSrcweir namespace oox {
61cdf0e10cSrcweir namespace ole {
62cdf0e10cSrcweir 
63cdf0e10cSrcweir // ============================================================================
64cdf0e10cSrcweir 
65cdf0e10cSrcweir using namespace ::com::sun::star::awt;
66cdf0e10cSrcweir using namespace ::com::sun::star::beans;
67cdf0e10cSrcweir using namespace ::com::sun::star::container;
68cdf0e10cSrcweir using namespace ::com::sun::star::drawing;
69cdf0e10cSrcweir using namespace ::com::sun::star::form;
70cdf0e10cSrcweir using namespace ::com::sun::star::form::binding;
71cdf0e10cSrcweir using namespace ::com::sun::star::frame;
72cdf0e10cSrcweir using namespace ::com::sun::star::lang;
73cdf0e10cSrcweir using namespace ::com::sun::star::sheet;
74cdf0e10cSrcweir using namespace ::com::sun::star::style;
75cdf0e10cSrcweir using namespace ::com::sun::star::table;
76cdf0e10cSrcweir using namespace ::com::sun::star::uno;
77cdf0e10cSrcweir 
78cdf0e10cSrcweir using ::rtl::OUString;
79cdf0e10cSrcweir 
80cdf0e10cSrcweir // ============================================================================
81cdf0e10cSrcweir 
82cdf0e10cSrcweir namespace {
83cdf0e10cSrcweir 
84cdf0e10cSrcweir const sal_uInt32 COMCTL_ID_SIZE             = 0x12344321;
85cdf0e10cSrcweir 
86cdf0e10cSrcweir const sal_uInt32 COMCTL_ID_COMMONDATA       = 0xABCDEF01;
87cdf0e10cSrcweir const sal_uInt32 COMCTL_COMMON_FLATBORDER   = 0x00000001;
88cdf0e10cSrcweir const sal_uInt32 COMCTL_COMMON_ENABLED      = 0x00000002;
89cdf0e10cSrcweir const sal_uInt32 COMCTL_COMMON_3DBORDER     = 0x00000004;
90cdf0e10cSrcweir const sal_uInt32 COMCTL_COMMON_OLEDROPMAN   = 0x00002000;
91cdf0e10cSrcweir 
92cdf0e10cSrcweir const sal_uInt32 COMCTL_ID_COMPLEXDATA      = 0xBDECDE1F;
93cdf0e10cSrcweir const sal_uInt32 COMCTL_COMPLEX_FONT        = 0x00000001;
94cdf0e10cSrcweir const sal_uInt32 COMCTL_COMPLEX_MOUSEICON   = 0x00000002;
95cdf0e10cSrcweir 
96cdf0e10cSrcweir const sal_uInt32 COMCTL_ID_SCROLLBAR_60     = 0x99470A83;
97cdf0e10cSrcweir const sal_uInt32 COMCTL_SCROLLBAR_HOR       = 0x00000010;
98cdf0e10cSrcweir const sal_Int32 COMCTL_SCROLLBAR_3D         = 0;
99cdf0e10cSrcweir const sal_Int32 COMCTL_SCROLLBAR_FLAT       = 1;
100cdf0e10cSrcweir const sal_Int32 COMCTL_SCROLLBAR_TRACK3D    = 2;
101cdf0e10cSrcweir 
102cdf0e10cSrcweir const sal_uInt32 COMCTL_ID_PROGRESSBAR_50   = 0xE6E17E84;
103cdf0e10cSrcweir const sal_uInt32 COMCTL_ID_PROGRESSBAR_60   = 0x97AB8A01;
104cdf0e10cSrcweir 
105cdf0e10cSrcweir // ----------------------------------------------------------------------------
106cdf0e10cSrcweir 
107cdf0e10cSrcweir const sal_uInt32 AX_CMDBUTTON_DEFFLAGS      = 0x0000001B;
108cdf0e10cSrcweir const sal_uInt32 AX_LABEL_DEFFLAGS          = 0x0080001B;
109cdf0e10cSrcweir const sal_uInt32 AX_IMAGE_DEFFLAGS          = 0x0000001B;
110cdf0e10cSrcweir const sal_uInt32 AX_MORPHDATA_DEFFLAGS      = 0x2C80081B;
111cdf0e10cSrcweir const sal_uInt32 AX_SPINBUTTON_DEFFLAGS     = 0x0000001B;
112cdf0e10cSrcweir const sal_uInt32 AX_SCROLLBAR_DEFFLAGS      = 0x0000001B;
113cdf0e10cSrcweir const sal_uInt32 AX_TABSTRIP_DEFFLAGS       = 0x0000001B;
114cdf0e10cSrcweir 
115cdf0e10cSrcweir const sal_uInt16 AX_POS_TOPLEFT             = 0;
116cdf0e10cSrcweir const sal_uInt16 AX_POS_TOP                 = 1;
117cdf0e10cSrcweir const sal_uInt16 AX_POS_TOPRIGHT            = 2;
118cdf0e10cSrcweir const sal_uInt16 AX_POS_LEFT                = 3;
119cdf0e10cSrcweir const sal_uInt16 AX_POS_CENTER              = 4;
120cdf0e10cSrcweir const sal_uInt16 AX_POS_RIGHT               = 5;
121cdf0e10cSrcweir const sal_uInt16 AX_POS_BOTTOMLEFT          = 6;
122cdf0e10cSrcweir const sal_uInt16 AX_POS_BOTTOM              = 7;
123cdf0e10cSrcweir const sal_uInt16 AX_POS_BOTTOMRIGHT         = 8;
124cdf0e10cSrcweir 
125cdf0e10cSrcweir #define AX_PICPOS_IMPL( label, image ) ((AX_POS_##label << 16) | AX_POS_##image)
126cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_LEFTTOP          = AX_PICPOS_IMPL( TOPRIGHT,    TOPLEFT );
127cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_LEFTCENTER       = AX_PICPOS_IMPL( RIGHT,       LEFT );
128cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_LEFTBOTTOM       = AX_PICPOS_IMPL( BOTTOMRIGHT, BOTTOMLEFT );
129cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_RIGHTTOP         = AX_PICPOS_IMPL( TOPLEFT,     TOPRIGHT );
130cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_RIGHTCENTER      = AX_PICPOS_IMPL( LEFT,        RIGHT );
131cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_RIGHTBOTTOM      = AX_PICPOS_IMPL( BOTTOMLEFT,  BOTTOMRIGHT );
132cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_ABOVELEFT        = AX_PICPOS_IMPL( BOTTOMLEFT,  TOPLEFT );
133cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_ABOVECENTER      = AX_PICPOS_IMPL( BOTTOM,      TOP  );
134cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_ABOVERIGHT       = AX_PICPOS_IMPL( BOTTOMRIGHT, TOPRIGHT );
135cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_BELOWLEFT        = AX_PICPOS_IMPL( TOPLEFT,     BOTTOMLEFT );
136cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_BELOWCENTER      = AX_PICPOS_IMPL( TOP,         BOTTOM );
137cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_BELOWRIGHT       = AX_PICPOS_IMPL( TOPRIGHT,    BOTTOMRIGHT );
138cdf0e10cSrcweir const sal_uInt32 AX_PICPOS_CENTER           = AX_PICPOS_IMPL( CENTER,      CENTER  );
139cdf0e10cSrcweir #undef AX_PICPOS_IMPL
140cdf0e10cSrcweir 
141cdf0e10cSrcweir const sal_Int32 AX_MATCHENTRY_FIRSTLETTER   = 0;
142cdf0e10cSrcweir const sal_Int32 AX_MATCHENTRY_COMPLETE      = 1;
143cdf0e10cSrcweir const sal_Int32 AX_MATCHENTRY_NONE          = 2;
144cdf0e10cSrcweir 
145cdf0e10cSrcweir const sal_Int32 AX_ORIENTATION_AUTO         = -1;
146cdf0e10cSrcweir const sal_Int32 AX_ORIENTATION_VERTICAL     = 0;
147cdf0e10cSrcweir const sal_Int32 AX_ORIENTATION_HORIZONTAL   = 1;
148cdf0e10cSrcweir 
149cdf0e10cSrcweir const sal_Int32 AX_PROPTHUMB_ON             = -1;
150cdf0e10cSrcweir const sal_Int32 AX_PROPTHUMB_OFF            = 0;
151cdf0e10cSrcweir 
152cdf0e10cSrcweir const sal_uInt32 AX_TABSTRIP_TABS           = 0;
153cdf0e10cSrcweir const sal_uInt32 AX_TABSTRIP_BUTTONS        = 1;
154cdf0e10cSrcweir const sal_uInt32 AX_TABSTRIP_NONE           = 2;
155cdf0e10cSrcweir 
156cdf0e10cSrcweir const sal_uInt32 AX_CONTAINER_ENABLED       = 0x00000004;
157cdf0e10cSrcweir const sal_uInt32 AX_CONTAINER_HASDESIGNEXT  = 0x00004000;
158cdf0e10cSrcweir const sal_uInt32 AX_CONTAINER_NOCLASSTABLE  = 0x00008000;
159cdf0e10cSrcweir 
160cdf0e10cSrcweir const sal_uInt32 AX_CONTAINER_DEFFLAGS      = 0x00000004;
161cdf0e10cSrcweir 
162cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_DEFWIDTH       = 4000;
163cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_DEFHEIGHT      = 3000;
164cdf0e10cSrcweir 
165cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_CYCLEALL       = 0;
166cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_CYCLECURRENT   = 2;
167cdf0e10cSrcweir 
168cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_SCR_NONE       = 0x00;
169cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_SCR_HOR        = 0x01;
170cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_SCR_VER        = 0x02;
171cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_SCR_KEEP_HOR   = 0x04;
172cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_SCR_KEEP_VER   = 0x08;
173cdf0e10cSrcweir const sal_Int32 AX_CONTAINER_SCR_SHOW_LEFT  = 0x10;
174cdf0e10cSrcweir 
175cdf0e10cSrcweir // ----------------------------------------------------------------------------
176cdf0e10cSrcweir 
177cdf0e10cSrcweir const sal_Int16 API_BORDER_NONE             = 0;
178cdf0e10cSrcweir const sal_Int16 API_BORDER_SUNKEN           = 1;
179cdf0e10cSrcweir const sal_Int16 API_BORDER_FLAT             = 2;
180cdf0e10cSrcweir 
181cdf0e10cSrcweir const sal_Int16 API_STATE_UNCHECKED         = 0;
182cdf0e10cSrcweir const sal_Int16 API_STATE_CHECKED           = 1;
183cdf0e10cSrcweir const sal_Int16 API_STATE_DONTKNOW          = 2;
184cdf0e10cSrcweir 
185cdf0e10cSrcweir // ----------------------------------------------------------------------------
186cdf0e10cSrcweir 
187cdf0e10cSrcweir /** Tries to extract a range address from a defined name. */
lclExtractRangeFromName(CellRangeAddress & orRangeAddr,const Reference<XModel> & rxDocModel,const OUString & rAddressString)188cdf0e10cSrcweir bool lclExtractRangeFromName( CellRangeAddress& orRangeAddr, const Reference< XModel >& rxDocModel, const OUString& rAddressString )
189cdf0e10cSrcweir {
190cdf0e10cSrcweir     try
191cdf0e10cSrcweir     {
192cdf0e10cSrcweir         PropertySet aPropSet( rxDocModel );
193cdf0e10cSrcweir         Reference< XNameAccess > xRangesNA( aPropSet.getAnyProperty( PROP_NamedRanges ), UNO_QUERY_THROW );
194cdf0e10cSrcweir         Reference< XCellRangeReferrer > xReferrer( xRangesNA->getByName( rAddressString ), UNO_QUERY_THROW );
195cdf0e10cSrcweir         Reference< XCellRangeAddressable > xAddressable( xReferrer->getReferredCells(), UNO_QUERY_THROW );
196cdf0e10cSrcweir         orRangeAddr = xAddressable->getRangeAddress();
197cdf0e10cSrcweir         return true;
198cdf0e10cSrcweir     }
199cdf0e10cSrcweir     catch( Exception& )
200cdf0e10cSrcweir     {
201cdf0e10cSrcweir     }
202cdf0e10cSrcweir     return false;
203cdf0e10cSrcweir }
204cdf0e10cSrcweir 
lclExtractAddressFromName(CellAddress & orAddress,const Reference<XModel> & rxDocModel,const OUString & rAddressString)205cdf0e10cSrcweir bool lclExtractAddressFromName( CellAddress& orAddress, const Reference< XModel >& rxDocModel, const OUString& rAddressString )
206cdf0e10cSrcweir {
207cdf0e10cSrcweir     CellRangeAddress aRangeAddr;
208cdf0e10cSrcweir     if( lclExtractRangeFromName( aRangeAddr, rxDocModel, rAddressString ) &&
209cdf0e10cSrcweir         (aRangeAddr.StartColumn == aRangeAddr.EndColumn) &&
210cdf0e10cSrcweir         (aRangeAddr.StartRow == aRangeAddr.EndRow) )
211cdf0e10cSrcweir     {
212cdf0e10cSrcweir         orAddress.Sheet = aRangeAddr.Sheet;
213cdf0e10cSrcweir         orAddress.Column = aRangeAddr.StartColumn;
214cdf0e10cSrcweir         orAddress.Row = aRangeAddr.StartRow;
215cdf0e10cSrcweir         return true;
216cdf0e10cSrcweir     }
217cdf0e10cSrcweir     return false;
218cdf0e10cSrcweir }
219cdf0e10cSrcweir 
lclPrepareConverter(PropertySet & rConverter,const Reference<XModel> & rxDocModel,const OUString & rAddressString,sal_Int32 nRefSheet,bool bRange)220cdf0e10cSrcweir void lclPrepareConverter( PropertySet& rConverter, const Reference< XModel >& rxDocModel,
221cdf0e10cSrcweir         const OUString& rAddressString, sal_Int32 nRefSheet, bool bRange )
222cdf0e10cSrcweir {
223cdf0e10cSrcweir     if( !rConverter.is() ) try
224cdf0e10cSrcweir     {
225cdf0e10cSrcweir         Reference< XMultiServiceFactory > xModelFactory( rxDocModel, UNO_QUERY_THROW );
226cdf0e10cSrcweir         OUString aServiceName = bRange ?
227cdf0e10cSrcweir             CREATE_OUSTRING( "com.sun.star.table.CellRangeAddressConversion" ) :
228cdf0e10cSrcweir             CREATE_OUSTRING( "com.sun.star.table.CellAddressConversion" );
229cdf0e10cSrcweir         rConverter.set( xModelFactory->createInstance( aServiceName ) );
230cdf0e10cSrcweir     }
231cdf0e10cSrcweir     catch( Exception& )
232cdf0e10cSrcweir     {
233cdf0e10cSrcweir     }
234cdf0e10cSrcweir     rConverter.setProperty( PROP_XLA1Representation, rAddressString );
235cdf0e10cSrcweir     rConverter.setProperty( PROP_ReferenceSheet, nRefSheet );
236cdf0e10cSrcweir }
237cdf0e10cSrcweir 
238cdf0e10cSrcweir } // namespace
239cdf0e10cSrcweir 
240cdf0e10cSrcweir // ============================================================================
241cdf0e10cSrcweir 
ControlConverter(const Reference<XModel> & rxDocModel,const GraphicHelper & rGraphicHelper,bool bDefaultColorBgr)242cdf0e10cSrcweir ControlConverter::ControlConverter( const Reference< XModel >& rxDocModel,
243cdf0e10cSrcweir         const GraphicHelper& rGraphicHelper, bool bDefaultColorBgr ) :
244cdf0e10cSrcweir     mxDocModel( rxDocModel ),
245cdf0e10cSrcweir     mrGraphicHelper( rGraphicHelper ),
246cdf0e10cSrcweir     mbDefaultColorBgr( bDefaultColorBgr )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir     OSL_ENSURE( mxDocModel.is(), "ControlConverter::ControlConverter - missing document model" );
249cdf0e10cSrcweir }
250cdf0e10cSrcweir 
~ControlConverter()251cdf0e10cSrcweir ControlConverter::~ControlConverter()
252cdf0e10cSrcweir {
253cdf0e10cSrcweir }
254cdf0e10cSrcweir 
255cdf0e10cSrcweir // Generic conversion ---------------------------------------------------------
256cdf0e10cSrcweir 
convertPosition(PropertyMap & rPropMap,const AxPairData & rPos) const257cdf0e10cSrcweir void ControlConverter::convertPosition( PropertyMap& rPropMap, const AxPairData& rPos ) const
258cdf0e10cSrcweir {
259cdf0e10cSrcweir     // position is given in 1/100 mm, UNO needs AppFont units
260cdf0e10cSrcweir     Point aAppFontPos = mrGraphicHelper.convertHmmToAppFont( Point( rPos.first, rPos.second ) );
261cdf0e10cSrcweir     rPropMap.setProperty( PROP_PositionX, aAppFontPos.X );
262cdf0e10cSrcweir     rPropMap.setProperty( PROP_PositionY, aAppFontPos.Y );
263cdf0e10cSrcweir }
264cdf0e10cSrcweir 
convertSize(PropertyMap & rPropMap,const AxPairData & rSize) const265cdf0e10cSrcweir void ControlConverter::convertSize( PropertyMap& rPropMap, const AxPairData& rSize ) const
266cdf0e10cSrcweir {
267cdf0e10cSrcweir     // size is given in 1/100 mm, UNO needs AppFont units
268cdf0e10cSrcweir     Size aAppFontSize = mrGraphicHelper.convertHmmToAppFont( Size( rSize.first, rSize.second ) );
269cdf0e10cSrcweir     rPropMap.setProperty( PROP_Width, aAppFontSize.Width );
270cdf0e10cSrcweir     rPropMap.setProperty( PROP_Height, aAppFontSize.Height );
271cdf0e10cSrcweir }
272cdf0e10cSrcweir 
convertColor(PropertyMap & rPropMap,sal_Int32 nPropId,sal_uInt32 nOleColor) const273cdf0e10cSrcweir void ControlConverter::convertColor( PropertyMap& rPropMap, sal_Int32 nPropId, sal_uInt32 nOleColor ) const
274cdf0e10cSrcweir {
275cdf0e10cSrcweir     rPropMap.setProperty( nPropId, OleHelper::decodeOleColor( mrGraphicHelper, nOleColor, mbDefaultColorBgr ) );
276cdf0e10cSrcweir }
277cdf0e10cSrcweir 
convertPicture(PropertyMap & rPropMap,const StreamDataSequence & rPicData) const278cdf0e10cSrcweir void ControlConverter::convertPicture( PropertyMap& rPropMap, const StreamDataSequence& rPicData ) const
279cdf0e10cSrcweir {
280cdf0e10cSrcweir     if( rPicData.hasElements() )
281cdf0e10cSrcweir     {
282cdf0e10cSrcweir         OUString aGraphicUrl = mrGraphicHelper.importGraphicObject( rPicData );
283cdf0e10cSrcweir         if( aGraphicUrl.getLength() > 0 )
284cdf0e10cSrcweir             rPropMap.setProperty( PROP_ImageURL, aGraphicUrl );
285cdf0e10cSrcweir     }
286cdf0e10cSrcweir }
287cdf0e10cSrcweir 
convertOrientation(PropertyMap & rPropMap,bool bHorizontal) const288cdf0e10cSrcweir void ControlConverter::convertOrientation( PropertyMap& rPropMap, bool bHorizontal ) const
289cdf0e10cSrcweir {
290cdf0e10cSrcweir     sal_Int32 nScrollOrient = bHorizontal ? ScrollBarOrientation::HORIZONTAL : ScrollBarOrientation::VERTICAL;
291cdf0e10cSrcweir     rPropMap.setProperty( PROP_Orientation, nScrollOrient );
292cdf0e10cSrcweir }
293cdf0e10cSrcweir 
convertVerticalAlign(PropertyMap & rPropMap,sal_Int32 nVerticalAlign) const294cdf0e10cSrcweir void ControlConverter::convertVerticalAlign( PropertyMap& rPropMap, sal_Int32 nVerticalAlign ) const
295cdf0e10cSrcweir {
296cdf0e10cSrcweir     VerticalAlignment eAlign = VerticalAlignment_TOP;
297cdf0e10cSrcweir     switch( nVerticalAlign )
298cdf0e10cSrcweir     {
299cdf0e10cSrcweir         case XML_Top:       eAlign = VerticalAlignment_TOP;     break;
300cdf0e10cSrcweir         case XML_Center:    eAlign = VerticalAlignment_MIDDLE;  break;
301cdf0e10cSrcweir         case XML_Bottom:    eAlign = VerticalAlignment_BOTTOM;  break;
302cdf0e10cSrcweir     }
303cdf0e10cSrcweir     rPropMap.setProperty( PROP_VerticalAlign, eAlign );
304cdf0e10cSrcweir }
305cdf0e10cSrcweir 
convertScrollBar(PropertyMap & rPropMap,sal_Int32 nMin,sal_Int32 nMax,sal_Int32 nPosition,sal_Int32 nSmallChange,sal_Int32 nLargeChange,bool bAwtModel) const306cdf0e10cSrcweir void ControlConverter::convertScrollBar( PropertyMap& rPropMap,
307cdf0e10cSrcweir         sal_Int32 nMin, sal_Int32 nMax, sal_Int32 nPosition,
308cdf0e10cSrcweir         sal_Int32 nSmallChange, sal_Int32 nLargeChange, bool bAwtModel ) const
309cdf0e10cSrcweir {
310cdf0e10cSrcweir     rPropMap.setProperty( PROP_ScrollValueMin, ::std::min( nMin, nMax ) );
311cdf0e10cSrcweir     rPropMap.setProperty( PROP_ScrollValueMax, ::std::max( nMin, nMax ) );
312cdf0e10cSrcweir     rPropMap.setProperty( PROP_LineIncrement, nSmallChange );
313cdf0e10cSrcweir     rPropMap.setProperty( PROP_BlockIncrement, nLargeChange );
314cdf0e10cSrcweir     rPropMap.setProperty( bAwtModel ? PROP_ScrollValue : PROP_DefaultScrollValue, nPosition );
315cdf0e10cSrcweir }
316cdf0e10cSrcweir 
bindToSources(const Reference<XControlModel> & rxCtrlModel,const OUString & rCtrlSource,const OUString & rRowSource,sal_Int32 nRefSheet) const317cdf0e10cSrcweir void ControlConverter::bindToSources( const Reference< XControlModel >& rxCtrlModel,
318cdf0e10cSrcweir         const OUString& rCtrlSource, const OUString& rRowSource, sal_Int32 nRefSheet ) const
319cdf0e10cSrcweir {
320cdf0e10cSrcweir     // value binding
321cdf0e10cSrcweir     if( rCtrlSource.getLength() > 0 ) try
322cdf0e10cSrcweir     {
323cdf0e10cSrcweir         // first check if the XBindableValue interface is supported
324cdf0e10cSrcweir         Reference< XBindableValue > xBindable( rxCtrlModel, UNO_QUERY_THROW );
325cdf0e10cSrcweir 
326cdf0e10cSrcweir         // convert address string to cell address struct
327cdf0e10cSrcweir         CellAddress aAddress;
328cdf0e10cSrcweir         if( !lclExtractAddressFromName( aAddress, mxDocModel, rCtrlSource ) )
329cdf0e10cSrcweir         {
330cdf0e10cSrcweir             lclPrepareConverter( maAddressConverter, mxDocModel, rCtrlSource, nRefSheet, false );
331cdf0e10cSrcweir             if( !maAddressConverter.getProperty( aAddress, PROP_Address ) )
332cdf0e10cSrcweir                 throw RuntimeException();
333cdf0e10cSrcweir         }
334cdf0e10cSrcweir 
335cdf0e10cSrcweir         // create argument sequence
336cdf0e10cSrcweir         NamedValue aValue;
337cdf0e10cSrcweir         aValue.Name = CREATE_OUSTRING( "BoundCell" );
338cdf0e10cSrcweir         aValue.Value <<= aAddress;
339cdf0e10cSrcweir         Sequence< Any > aArgs( 1 );
340cdf0e10cSrcweir         aArgs[ 0 ] <<= aValue;
341cdf0e10cSrcweir 
342cdf0e10cSrcweir         // create the CellValueBinding instance and set at the control model
343cdf0e10cSrcweir         Reference< XMultiServiceFactory > xModelFactory( mxDocModel, UNO_QUERY_THROW );
344cdf0e10cSrcweir         Reference< XValueBinding > xBinding( xModelFactory->createInstanceWithArguments(
345cdf0e10cSrcweir             CREATE_OUSTRING( "com.sun.star.table.CellValueBinding" ), aArgs ), UNO_QUERY_THROW );
346cdf0e10cSrcweir         xBindable->setValueBinding( xBinding );
347cdf0e10cSrcweir     }
348cdf0e10cSrcweir     catch( Exception& )
349cdf0e10cSrcweir     {
350cdf0e10cSrcweir     }
351cdf0e10cSrcweir 
352cdf0e10cSrcweir     // list entry source
353cdf0e10cSrcweir     if( rRowSource.getLength() > 0 ) try
354cdf0e10cSrcweir     {
355cdf0e10cSrcweir         // first check if the XListEntrySink interface is supported
356cdf0e10cSrcweir         Reference< XListEntrySink > xEntrySink( rxCtrlModel, UNO_QUERY_THROW );
357cdf0e10cSrcweir 
358cdf0e10cSrcweir         // convert address string to cell range address struct
359cdf0e10cSrcweir         CellRangeAddress aRangeAddr;
360cdf0e10cSrcweir         if( !lclExtractRangeFromName( aRangeAddr, mxDocModel, rRowSource ) )
361cdf0e10cSrcweir         {
362cdf0e10cSrcweir             lclPrepareConverter( maRangeConverter, mxDocModel, rRowSource, nRefSheet, true );
363cdf0e10cSrcweir             if( !maRangeConverter.getProperty( aRangeAddr, PROP_Address ) )
364cdf0e10cSrcweir                 throw RuntimeException();
365cdf0e10cSrcweir         }
366cdf0e10cSrcweir 
367cdf0e10cSrcweir         // create argument sequence
368cdf0e10cSrcweir         NamedValue aValue;
369cdf0e10cSrcweir         aValue.Name = CREATE_OUSTRING( "CellRange" );
370cdf0e10cSrcweir         aValue.Value <<= aRangeAddr;
371cdf0e10cSrcweir         Sequence< Any > aArgs( 1 );
372cdf0e10cSrcweir         aArgs[ 0 ] <<= aValue;
373cdf0e10cSrcweir 
374cdf0e10cSrcweir         // create the EntrySource instance and set at the control model
375cdf0e10cSrcweir         Reference< XMultiServiceFactory > xModelFactory( mxDocModel, UNO_QUERY_THROW );
376cdf0e10cSrcweir         Reference< XListEntrySource > xEntrySource( xModelFactory->createInstanceWithArguments(
377cdf0e10cSrcweir             CREATE_OUSTRING( "com.sun.star.table.CellRangeListSource"  ), aArgs ), UNO_QUERY_THROW );
378cdf0e10cSrcweir         xEntrySink->setListEntrySource( xEntrySource );
379cdf0e10cSrcweir     }
380cdf0e10cSrcweir     catch( Exception& )
381cdf0e10cSrcweir     {
382cdf0e10cSrcweir     }
383cdf0e10cSrcweir }
384cdf0e10cSrcweir 
385cdf0e10cSrcweir // ActiveX (Forms 2.0) specific conversion ------------------------------------
386cdf0e10cSrcweir 
convertAxBackground(PropertyMap & rPropMap,sal_uInt32 nBackColor,sal_uInt32 nFlags,ApiTransparencyMode eTranspMode) const387cdf0e10cSrcweir void ControlConverter::convertAxBackground( PropertyMap& rPropMap,
388cdf0e10cSrcweir         sal_uInt32 nBackColor, sal_uInt32 nFlags, ApiTransparencyMode eTranspMode ) const
389cdf0e10cSrcweir {
390cdf0e10cSrcweir     bool bOpaque = getFlag( nFlags, AX_FLAGS_OPAQUE );
391cdf0e10cSrcweir     switch( eTranspMode )
392cdf0e10cSrcweir     {
393cdf0e10cSrcweir         case API_TRANSPARENCY_NOTSUPPORTED:
394cdf0e10cSrcweir             // fake transparency by using system window background if needed
395cdf0e10cSrcweir             convertColor( rPropMap, PROP_BackgroundColor, bOpaque ? nBackColor : AX_SYSCOLOR_WINDOWBACK );
396cdf0e10cSrcweir         break;
397cdf0e10cSrcweir         case API_TRANSPARENCY_PAINTTRANSPARENT:
398cdf0e10cSrcweir             rPropMap.setProperty( PROP_PaintTransparent, !bOpaque );
399cdf0e10cSrcweir             // run-through intended!
400cdf0e10cSrcweir         case API_TRANSPARENCY_VOID:
401cdf0e10cSrcweir             // keep transparency by leaving the (void) default property value
402cdf0e10cSrcweir             if( bOpaque )
403cdf0e10cSrcweir                 convertColor( rPropMap, PROP_BackgroundColor, nBackColor );
404cdf0e10cSrcweir         break;
405cdf0e10cSrcweir     }
406cdf0e10cSrcweir }
407cdf0e10cSrcweir 
convertAxBorder(PropertyMap & rPropMap,sal_uInt32 nBorderColor,sal_Int32 nBorderStyle,sal_Int32 nSpecialEffect) const408cdf0e10cSrcweir void ControlConverter::convertAxBorder( PropertyMap& rPropMap,
409cdf0e10cSrcweir         sal_uInt32 nBorderColor, sal_Int32 nBorderStyle, sal_Int32 nSpecialEffect ) const
410cdf0e10cSrcweir {
411cdf0e10cSrcweir     sal_Int16 nBorder = (nBorderStyle == AX_BORDERSTYLE_SINGLE) ? API_BORDER_FLAT :
412cdf0e10cSrcweir         ((nSpecialEffect == AX_SPECIALEFFECT_FLAT) ? API_BORDER_NONE : API_BORDER_SUNKEN);
413cdf0e10cSrcweir     rPropMap.setProperty( PROP_Border, nBorder );
414cdf0e10cSrcweir     convertColor( rPropMap, PROP_BorderColor, nBorderColor );
415cdf0e10cSrcweir }
416cdf0e10cSrcweir 
convertAxVisualEffect(PropertyMap & rPropMap,sal_Int32 nSpecialEffect) const417cdf0e10cSrcweir void ControlConverter::convertAxVisualEffect( PropertyMap& rPropMap, sal_Int32 nSpecialEffect ) const
418cdf0e10cSrcweir {
419cdf0e10cSrcweir     sal_Int16 nVisualEffect = (nSpecialEffect == AX_SPECIALEFFECT_FLAT) ? VisualEffect::FLAT : VisualEffect::LOOK3D;
420cdf0e10cSrcweir     rPropMap.setProperty( PROP_VisualEffect, nVisualEffect );
421cdf0e10cSrcweir }
422cdf0e10cSrcweir 
convertAxPicture(PropertyMap & rPropMap,const StreamDataSequence & rPicData,sal_uInt32 nPicPos) const423cdf0e10cSrcweir void ControlConverter::convertAxPicture( PropertyMap& rPropMap, const StreamDataSequence& rPicData, sal_uInt32 nPicPos ) const
424cdf0e10cSrcweir {
425cdf0e10cSrcweir     // the picture
426cdf0e10cSrcweir     convertPicture( rPropMap, rPicData );
427cdf0e10cSrcweir 
428cdf0e10cSrcweir     // picture position
429cdf0e10cSrcweir     sal_Int16 nImagePos = ImagePosition::LeftCenter;
430cdf0e10cSrcweir     switch( nPicPos )
431cdf0e10cSrcweir     {
432cdf0e10cSrcweir         case AX_PICPOS_LEFTTOP:     nImagePos = ImagePosition::LeftTop;     break;
433cdf0e10cSrcweir         case AX_PICPOS_LEFTCENTER:  nImagePos = ImagePosition::LeftCenter;  break;
434cdf0e10cSrcweir         case AX_PICPOS_LEFTBOTTOM:  nImagePos = ImagePosition::LeftBottom;  break;
435cdf0e10cSrcweir         case AX_PICPOS_RIGHTTOP:    nImagePos = ImagePosition::RightTop;    break;
436cdf0e10cSrcweir         case AX_PICPOS_RIGHTCENTER: nImagePos = ImagePosition::RightCenter; break;
437cdf0e10cSrcweir         case AX_PICPOS_RIGHTBOTTOM: nImagePos = ImagePosition::RightBottom; break;
438cdf0e10cSrcweir         case AX_PICPOS_ABOVELEFT:   nImagePos = ImagePosition::AboveLeft;   break;
439cdf0e10cSrcweir         case AX_PICPOS_ABOVECENTER: nImagePos = ImagePosition::AboveCenter; break;
440cdf0e10cSrcweir         case AX_PICPOS_ABOVERIGHT:  nImagePos = ImagePosition::AboveRight;  break;
441cdf0e10cSrcweir         case AX_PICPOS_BELOWLEFT:   nImagePos = ImagePosition::BelowLeft;   break;
442cdf0e10cSrcweir         case AX_PICPOS_BELOWCENTER: nImagePos = ImagePosition::BelowCenter; break;
443cdf0e10cSrcweir         case AX_PICPOS_BELOWRIGHT:  nImagePos = ImagePosition::BelowRight;  break;
444cdf0e10cSrcweir         case AX_PICPOS_CENTER:      nImagePos = ImagePosition::Centered;    break;
445cdf0e10cSrcweir         default:    OSL_ENSURE( false, "ControlConverter::convertAxPicture - unknown picture position" );
446cdf0e10cSrcweir     }
447cdf0e10cSrcweir     rPropMap.setProperty( PROP_ImagePosition, nImagePos );
448cdf0e10cSrcweir }
449cdf0e10cSrcweir 
convertAxPicture(PropertyMap & rPropMap,const StreamDataSequence & rPicData,sal_Int32 nPicSizeMode,sal_Int32,bool) const450cdf0e10cSrcweir void ControlConverter::convertAxPicture( PropertyMap& rPropMap, const StreamDataSequence& rPicData,
451cdf0e10cSrcweir         sal_Int32 nPicSizeMode, sal_Int32 /*nPicAlign*/, bool /*bPicTiling*/ ) const
452cdf0e10cSrcweir {
453cdf0e10cSrcweir     // the picture
454cdf0e10cSrcweir     convertPicture( rPropMap, rPicData );
455cdf0e10cSrcweir 
456cdf0e10cSrcweir     // picture scale mode
457*b6dc695eSAriel Constenla-Haile     sal_Int16 nScaleMode = ImageScaleMode::NONE;
458cdf0e10cSrcweir     switch( nPicSizeMode )
459cdf0e10cSrcweir     {
460*b6dc695eSAriel Constenla-Haile         case AX_PICSIZE_CLIP:       nScaleMode = ImageScaleMode::NONE;        break;
461*b6dc695eSAriel Constenla-Haile         case AX_PICSIZE_STRETCH:    nScaleMode = ImageScaleMode::ISOTROPIC;   break;
462*b6dc695eSAriel Constenla-Haile         case AX_PICSIZE_ZOOM:       nScaleMode = ImageScaleMode::ANISOTROPIC; break;
463cdf0e10cSrcweir         default:    OSL_ENSURE( false, "ControlConverter::convertAxPicture - unknown picture size mode" );
464cdf0e10cSrcweir     }
465cdf0e10cSrcweir     rPropMap.setProperty( PROP_ScaleMode, nScaleMode );
466cdf0e10cSrcweir }
467cdf0e10cSrcweir 
convertAxState(PropertyMap & rPropMap,const OUString & rValue,sal_Int32 nMultiSelect,ApiDefaultStateMode eDefStateMode,bool bAwtModel) const468cdf0e10cSrcweir void ControlConverter::convertAxState( PropertyMap& rPropMap,
469cdf0e10cSrcweir         const OUString& rValue, sal_Int32 nMultiSelect, ApiDefaultStateMode eDefStateMode, bool bAwtModel ) const
470cdf0e10cSrcweir {
471cdf0e10cSrcweir     bool bBooleanState = eDefStateMode == API_DEFAULTSTATE_BOOLEAN;
472cdf0e10cSrcweir     bool bSupportsTriState = eDefStateMode == API_DEFAULTSTATE_TRISTATE;
473cdf0e10cSrcweir 
474cdf0e10cSrcweir     // state
475cdf0e10cSrcweir     sal_Int16 nState = bSupportsTriState ? API_STATE_DONTKNOW : API_STATE_UNCHECKED;
476cdf0e10cSrcweir     if( rValue.getLength() == 1 ) switch( rValue[ 0 ] )
477cdf0e10cSrcweir     {
478cdf0e10cSrcweir         case '0':   nState = API_STATE_UNCHECKED;   break;
479cdf0e10cSrcweir         case '1':   nState = API_STATE_CHECKED;     break;
480cdf0e10cSrcweir         // any other string (also empty) means 'dontknow'
481cdf0e10cSrcweir     }
482cdf0e10cSrcweir     sal_Int32 nPropId = bAwtModel ? PROP_State : PROP_DefaultState;
483cdf0e10cSrcweir     if( bBooleanState )
484cdf0e10cSrcweir         rPropMap.setProperty( nPropId, nState != API_STATE_UNCHECKED );
485cdf0e10cSrcweir     else
486cdf0e10cSrcweir         rPropMap.setProperty( nPropId, nState );
487cdf0e10cSrcweir 
488cdf0e10cSrcweir     // tristate
489cdf0e10cSrcweir     if( bSupportsTriState )
490cdf0e10cSrcweir         rPropMap.setProperty( PROP_TriState, nMultiSelect == AX_SELCTION_MULTI );
491cdf0e10cSrcweir }
492cdf0e10cSrcweir 
convertAxOrientation(PropertyMap & rPropMap,const AxPairData & rSize,sal_Int32 nOrientation) const493cdf0e10cSrcweir void ControlConverter::convertAxOrientation( PropertyMap& rPropMap,
494cdf0e10cSrcweir         const AxPairData& rSize, sal_Int32 nOrientation ) const
495cdf0e10cSrcweir {
496cdf0e10cSrcweir     bool bHorizontal = true;
497cdf0e10cSrcweir     switch( nOrientation )
498cdf0e10cSrcweir     {
499cdf0e10cSrcweir         case AX_ORIENTATION_AUTO:       bHorizontal = rSize.first > rSize.second;   break;
500cdf0e10cSrcweir         case AX_ORIENTATION_VERTICAL:   bHorizontal = false;                        break;
501cdf0e10cSrcweir         case AX_ORIENTATION_HORIZONTAL: bHorizontal = true;                         break;
502cdf0e10cSrcweir         default:    OSL_ENSURE( false, "ControlConverter::convertAxOrientation - unknown orientation" );
503cdf0e10cSrcweir     }
504cdf0e10cSrcweir     convertOrientation( rPropMap, bHorizontal );
505cdf0e10cSrcweir }
506cdf0e10cSrcweir 
507cdf0e10cSrcweir // ============================================================================
508cdf0e10cSrcweir 
ControlModelBase()509cdf0e10cSrcweir ControlModelBase::ControlModelBase() :
510cdf0e10cSrcweir     maSize( 0, 0 ),
511cdf0e10cSrcweir     mbAwtModel( false )
512cdf0e10cSrcweir {
513cdf0e10cSrcweir }
514cdf0e10cSrcweir 
~ControlModelBase()515cdf0e10cSrcweir ControlModelBase::~ControlModelBase()
516cdf0e10cSrcweir {
517cdf0e10cSrcweir }
518cdf0e10cSrcweir 
getServiceName() const519cdf0e10cSrcweir OUString ControlModelBase::getServiceName() const
520cdf0e10cSrcweir {
521cdf0e10cSrcweir     ApiControlType eCtrlType = getControlType();
522cdf0e10cSrcweir     if( mbAwtModel ) switch( eCtrlType )
523cdf0e10cSrcweir     {
524cdf0e10cSrcweir         case API_CONTROL_BUTTON:        return CREATE_OUSTRING( "com.sun.star.awt.UnoControlButtonModel" );
525cdf0e10cSrcweir         case API_CONTROL_FIXEDTEXT:     return CREATE_OUSTRING( "com.sun.star.awt.UnoControlFixedTextModel" );
526cdf0e10cSrcweir         case API_CONTROL_IMAGE:         return CREATE_OUSTRING( "com.sun.star.awt.UnoControlImageControlModel" );
527cdf0e10cSrcweir         case API_CONTROL_CHECKBOX:      return CREATE_OUSTRING( "com.sun.star.awt.UnoControlCheckBoxModel" );
528cdf0e10cSrcweir         case API_CONTROL_RADIOBUTTON:   return CREATE_OUSTRING( "com.sun.star.awt.UnoControlRadioButtonModel" );
529cdf0e10cSrcweir         case API_CONTROL_EDIT:          return CREATE_OUSTRING( "com.sun.star.awt.UnoControlEditModel" );
530cdf0e10cSrcweir         case API_CONTROL_NUMERIC:       return CREATE_OUSTRING( "com.sun.star.awt.UnoControlNumericFieldModel" );
531cdf0e10cSrcweir         case API_CONTROL_LISTBOX:       return CREATE_OUSTRING( "com.sun.star.awt.UnoControlListBoxModel" );
532cdf0e10cSrcweir         case API_CONTROL_COMBOBOX:      return CREATE_OUSTRING( "com.sun.star.awt.UnoControlComboBoxModel" );
533cdf0e10cSrcweir         case API_CONTROL_SPINBUTTON:    return CREATE_OUSTRING( "com.sun.star.awt.UnoControlSpinButtonModel" );
534cdf0e10cSrcweir         case API_CONTROL_SCROLLBAR:     return CREATE_OUSTRING( "com.sun.star.awt.UnoControlScrollBarModel" );
535cdf0e10cSrcweir         case API_CONTROL_PROGRESSBAR:   return CREATE_OUSTRING( "com.sun.star.awt.UnoControlProgressBarModel" );
536cdf0e10cSrcweir         case API_CONTROL_GROUPBOX:      return CREATE_OUSTRING( "com.sun.star.awt.UnoControlGroupBoxModel" );
537cdf0e10cSrcweir         case API_CONTROL_DIALOG:        return CREATE_OUSTRING( "com.sun.star.awt.UnoControlDialogModel" );
538cdf0e10cSrcweir         default:    OSL_ENSURE( false, "ControlModelBase::getServiceName - no AWT model service supported" );
539cdf0e10cSrcweir     }
540cdf0e10cSrcweir     else switch( eCtrlType )
541cdf0e10cSrcweir     {
542cdf0e10cSrcweir         case API_CONTROL_BUTTON:        return CREATE_OUSTRING( "com.sun.star.form.component.CommandButton" );
543cdf0e10cSrcweir         case API_CONTROL_FIXEDTEXT:     return CREATE_OUSTRING( "com.sun.star.form.component.FixedText" );
544cdf0e10cSrcweir         case API_CONTROL_IMAGE:         return CREATE_OUSTRING( "com.sun.star.form.component.DatabaseImageControl" );
545cdf0e10cSrcweir         case API_CONTROL_CHECKBOX:      return CREATE_OUSTRING( "com.sun.star.form.component.CheckBox" );
546cdf0e10cSrcweir         case API_CONTROL_RADIOBUTTON:   return CREATE_OUSTRING( "com.sun.star.form.component.RadioButton" );
547cdf0e10cSrcweir         case API_CONTROL_EDIT:          return CREATE_OUSTRING( "com.sun.star.form.component.TextField" );
548cdf0e10cSrcweir         case API_CONTROL_NUMERIC:       return CREATE_OUSTRING( "com.sun.star.form.component.NumericField" );
549cdf0e10cSrcweir         case API_CONTROL_LISTBOX:       return CREATE_OUSTRING( "com.sun.star.form.component.ListBox" );
550cdf0e10cSrcweir         case API_CONTROL_COMBOBOX:      return CREATE_OUSTRING( "com.sun.star.form.component.ComboBox" );
551cdf0e10cSrcweir         case API_CONTROL_SPINBUTTON:    return CREATE_OUSTRING( "com.sun.star.form.component.SpinButton" );
552cdf0e10cSrcweir         case API_CONTROL_SCROLLBAR:     return CREATE_OUSTRING( "com.sun.star.form.component.ScrollBar" );
553cdf0e10cSrcweir         case API_CONTROL_GROUPBOX:      return CREATE_OUSTRING( "com.sun.star.form.component.GroupBox" );
554cdf0e10cSrcweir         default:    OSL_ENSURE( false, "ControlModelBase::getServiceName - no form component service supported" );
555cdf0e10cSrcweir     }
556cdf0e10cSrcweir     return OUString();
557cdf0e10cSrcweir }
558cdf0e10cSrcweir 
importProperty(sal_Int32,const OUString &)559cdf0e10cSrcweir void ControlModelBase::importProperty( sal_Int32 /*nPropId*/, const OUString& /*rValue*/ )
560cdf0e10cSrcweir {
561cdf0e10cSrcweir }
562cdf0e10cSrcweir 
importPictureData(sal_Int32,BinaryInputStream &)563cdf0e10cSrcweir void ControlModelBase::importPictureData( sal_Int32 /*nPropId*/, BinaryInputStream& /*rInStrm*/ )
564cdf0e10cSrcweir {
565cdf0e10cSrcweir }
566cdf0e10cSrcweir 
convertProperties(PropertyMap &,const ControlConverter &) const567cdf0e10cSrcweir void ControlModelBase::convertProperties( PropertyMap& /*rPropMap*/, const ControlConverter& /*rConv*/ ) const
568cdf0e10cSrcweir {
569cdf0e10cSrcweir }
570cdf0e10cSrcweir 
convertSize(PropertyMap & rPropMap,const ControlConverter & rConv) const571cdf0e10cSrcweir void ControlModelBase::convertSize( PropertyMap& rPropMap, const ControlConverter& rConv ) const
572cdf0e10cSrcweir {
573cdf0e10cSrcweir     rConv.convertSize( rPropMap, maSize );
574cdf0e10cSrcweir }
575cdf0e10cSrcweir 
576cdf0e10cSrcweir // ============================================================================
577cdf0e10cSrcweir 
ComCtlModelBase(sal_uInt32 nDataPartId5,sal_uInt32 nDataPartId6,sal_uInt16 nVersion,bool bCommonPart,bool bComplexPart)578cdf0e10cSrcweir ComCtlModelBase::ComCtlModelBase( sal_uInt32 nDataPartId5, sal_uInt32 nDataPartId6,
579cdf0e10cSrcweir         sal_uInt16 nVersion, bool bCommonPart, bool bComplexPart ) :
580cdf0e10cSrcweir     maFontData( CREATE_OUSTRING( "Tahoma" ), 82500 ),
581cdf0e10cSrcweir     mnFlags( 0 ),
582cdf0e10cSrcweir     mnVersion( nVersion ),
583cdf0e10cSrcweir     mnDataPartId5( nDataPartId5 ),
584cdf0e10cSrcweir     mnDataPartId6( nDataPartId6 ),
585cdf0e10cSrcweir     mbCommonPart( bCommonPart ),
586cdf0e10cSrcweir     mbComplexPart( bComplexPart )
587cdf0e10cSrcweir {
588cdf0e10cSrcweir }
589cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)590cdf0e10cSrcweir bool ComCtlModelBase::importBinaryModel( BinaryInputStream& rInStrm )
591cdf0e10cSrcweir {
592cdf0e10cSrcweir     // read initial size part and header of the control data part
593cdf0e10cSrcweir     if( importSizePart( rInStrm ) && readPartHeader( rInStrm, getDataPartId(), mnVersion ) )
594cdf0e10cSrcweir     {
595cdf0e10cSrcweir         // if flags part exists, the first int32 of the data part contains its size
596cdf0e10cSrcweir         sal_uInt32 nCommonPartSize = mbCommonPart ? rInStrm.readuInt32() : 0;
597cdf0e10cSrcweir         // implementations must read the exact amount of data, stream must point to its end afterwards
598cdf0e10cSrcweir         importControlData( rInStrm );
599cdf0e10cSrcweir         // read following parts
600cdf0e10cSrcweir         if( !rInStrm.isEof() &&
601cdf0e10cSrcweir             (!mbCommonPart || importCommonPart( rInStrm, nCommonPartSize )) &&
602cdf0e10cSrcweir             (!mbComplexPart || importComplexPart( rInStrm )) )
603cdf0e10cSrcweir         {
604cdf0e10cSrcweir             return !rInStrm.isEof();
605cdf0e10cSrcweir         }
606cdf0e10cSrcweir     }
607cdf0e10cSrcweir     return false;
608cdf0e10cSrcweir }
609cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const610cdf0e10cSrcweir void ComCtlModelBase::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
611cdf0e10cSrcweir {
612cdf0e10cSrcweir     if( mbCommonPart )
613cdf0e10cSrcweir         rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, COMCTL_COMMON_ENABLED ) );
614cdf0e10cSrcweir     ControlModelBase::convertProperties( rPropMap, rConv );
615cdf0e10cSrcweir }
616cdf0e10cSrcweir 
importCommonExtraData(BinaryInputStream &)617cdf0e10cSrcweir void ComCtlModelBase::importCommonExtraData( BinaryInputStream& /*rInStrm*/ )
618cdf0e10cSrcweir {
619cdf0e10cSrcweir }
620cdf0e10cSrcweir 
importCommonTrailingData(BinaryInputStream &)621cdf0e10cSrcweir void ComCtlModelBase::importCommonTrailingData( BinaryInputStream& /*rInStrm*/ )
622cdf0e10cSrcweir {
623cdf0e10cSrcweir }
624cdf0e10cSrcweir 
getDataPartId() const625cdf0e10cSrcweir sal_uInt32 ComCtlModelBase::getDataPartId() const
626cdf0e10cSrcweir {
627cdf0e10cSrcweir     switch( mnVersion )
628cdf0e10cSrcweir     {
629cdf0e10cSrcweir         case COMCTL_VERSION_50: return mnDataPartId5;
630cdf0e10cSrcweir         case COMCTL_VERSION_60: return mnDataPartId6;
631cdf0e10cSrcweir     }
632cdf0e10cSrcweir     OSL_ENSURE( false, "ComCtlObjectBase::getDataPartId - unxpected version" );
633cdf0e10cSrcweir     return SAL_MAX_UINT32;
634cdf0e10cSrcweir }
635cdf0e10cSrcweir 
readPartHeader(BinaryInputStream & rInStrm,sal_uInt32 nExpPartId,sal_uInt16 nExpMajor,sal_uInt16 nExpMinor)636cdf0e10cSrcweir bool ComCtlModelBase::readPartHeader( BinaryInputStream& rInStrm, sal_uInt32 nExpPartId, sal_uInt16 nExpMajor, sal_uInt16 nExpMinor )
637cdf0e10cSrcweir {
638cdf0e10cSrcweir     // no idea if all this is correct...
639cdf0e10cSrcweir     sal_uInt32 nPartId;
640cdf0e10cSrcweir     sal_uInt16 nMajor, nMinor;
641cdf0e10cSrcweir     rInStrm >> nPartId >> nMinor >> nMajor;
642cdf0e10cSrcweir     bool bPartId = nPartId == nExpPartId;
643cdf0e10cSrcweir     OSL_ENSURE( bPartId, "ComCtlObjectBase::readPartHeader - unexpected part identifier" );
644cdf0e10cSrcweir     bool bVersion = ((nExpMajor == SAL_MAX_UINT16) || (nExpMajor == nMajor)) && ((nExpMinor == SAL_MAX_UINT16) || (nExpMinor == nMinor));
645cdf0e10cSrcweir     OSL_ENSURE( bVersion, "ComCtlObjectBase::readPartHeader - unexpected part version" );
646cdf0e10cSrcweir     return !rInStrm.isEof() && bPartId && bVersion;
647cdf0e10cSrcweir }
648cdf0e10cSrcweir 
importSizePart(BinaryInputStream & rInStrm)649cdf0e10cSrcweir bool ComCtlModelBase::importSizePart( BinaryInputStream& rInStrm )
650cdf0e10cSrcweir {
651cdf0e10cSrcweir     if( readPartHeader( rInStrm, COMCTL_ID_SIZE, 0, 8 ) )
652cdf0e10cSrcweir     {
653cdf0e10cSrcweir         rInStrm >> maSize.first >> maSize.second;
654cdf0e10cSrcweir         return !rInStrm.isEof();
655cdf0e10cSrcweir     }
656cdf0e10cSrcweir     return false;
657cdf0e10cSrcweir }
658cdf0e10cSrcweir 
importCommonPart(BinaryInputStream & rInStrm,sal_uInt32 nPartSize)659cdf0e10cSrcweir bool ComCtlModelBase::importCommonPart( BinaryInputStream& rInStrm, sal_uInt32 nPartSize )
660cdf0e10cSrcweir {
661cdf0e10cSrcweir     sal_Int64 nEndPos = rInStrm.tell() + nPartSize;
662cdf0e10cSrcweir     if( (nPartSize >= 16) && readPartHeader( rInStrm, COMCTL_ID_COMMONDATA, 5, 0 ) )
663cdf0e10cSrcweir     {
664cdf0e10cSrcweir         rInStrm.skip( 4 );
665cdf0e10cSrcweir         rInStrm >> mnFlags;
666cdf0e10cSrcweir         // implementations may read less than the exact amount of data
667cdf0e10cSrcweir         importCommonExtraData( rInStrm );
668cdf0e10cSrcweir         rInStrm.seek( nEndPos );
669cdf0e10cSrcweir         // implementations must read the exact amount of data, stream must point to its end afterwards
670cdf0e10cSrcweir         importCommonTrailingData( rInStrm );
671cdf0e10cSrcweir         return !rInStrm.isEof();
672cdf0e10cSrcweir     }
673cdf0e10cSrcweir     return false;
674cdf0e10cSrcweir }
675cdf0e10cSrcweir 
importComplexPart(BinaryInputStream & rInStrm)676cdf0e10cSrcweir bool ComCtlModelBase::importComplexPart( BinaryInputStream& rInStrm )
677cdf0e10cSrcweir {
678cdf0e10cSrcweir     if( readPartHeader( rInStrm, COMCTL_ID_COMPLEXDATA, 5, 1 ) )
679cdf0e10cSrcweir     {
680cdf0e10cSrcweir         sal_uInt32 nContFlags;
681cdf0e10cSrcweir         rInStrm >> nContFlags;
682cdf0e10cSrcweir         bool bReadOk =
683cdf0e10cSrcweir             (!getFlag( nContFlags, COMCTL_COMPLEX_FONT ) || OleHelper::importStdFont( maFontData, rInStrm, true )) &&
684cdf0e10cSrcweir             (!getFlag( nContFlags, COMCTL_COMPLEX_MOUSEICON ) || OleHelper::importStdPic( maMouseIcon, rInStrm, true ));
685cdf0e10cSrcweir         return bReadOk && !rInStrm.isEof();
686cdf0e10cSrcweir     }
687cdf0e10cSrcweir     return false;
688cdf0e10cSrcweir }
689cdf0e10cSrcweir 
690cdf0e10cSrcweir // ============================================================================
691cdf0e10cSrcweir 
ComCtlScrollBarModel(sal_uInt16 nVersion)692cdf0e10cSrcweir ComCtlScrollBarModel::ComCtlScrollBarModel( sal_uInt16 nVersion ) :
693cdf0e10cSrcweir     ComCtlModelBase( SAL_MAX_UINT32, COMCTL_ID_SCROLLBAR_60, nVersion, true, true ),
694cdf0e10cSrcweir     mnScrollBarFlags( 0x00000011 ),
695cdf0e10cSrcweir     mnLargeChange( 1 ),
696cdf0e10cSrcweir     mnSmallChange( 1 ),
697cdf0e10cSrcweir     mnMin( 0 ),
698cdf0e10cSrcweir     mnMax( 32767 ),
699cdf0e10cSrcweir     mnPosition( 0 )
700cdf0e10cSrcweir {
701cdf0e10cSrcweir }
702cdf0e10cSrcweir 
getControlType() const703cdf0e10cSrcweir ApiControlType ComCtlScrollBarModel::getControlType() const
704cdf0e10cSrcweir {
705cdf0e10cSrcweir     return API_CONTROL_SCROLLBAR;
706cdf0e10cSrcweir }
707cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const708cdf0e10cSrcweir void ComCtlScrollBarModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
709cdf0e10cSrcweir {
710cdf0e10cSrcweir     rPropMap.setProperty( PROP_Border, API_BORDER_NONE );
711cdf0e10cSrcweir     rConv.convertOrientation( rPropMap, getFlag( mnScrollBarFlags, COMCTL_SCROLLBAR_HOR ) );
712cdf0e10cSrcweir     rConv.convertScrollBar( rPropMap, mnMin, mnMax, mnPosition, mnSmallChange, mnLargeChange, mbAwtModel );
713cdf0e10cSrcweir     ComCtlModelBase::convertProperties( rPropMap, rConv );
714cdf0e10cSrcweir }
715cdf0e10cSrcweir 
importControlData(BinaryInputStream & rInStrm)716cdf0e10cSrcweir void ComCtlScrollBarModel::importControlData( BinaryInputStream& rInStrm )
717cdf0e10cSrcweir {
718cdf0e10cSrcweir     rInStrm >> mnScrollBarFlags >> mnLargeChange >> mnSmallChange >> mnMin >> mnMax >> mnPosition;
719cdf0e10cSrcweir }
720cdf0e10cSrcweir 
721cdf0e10cSrcweir // ============================================================================
722cdf0e10cSrcweir 
ComCtlProgressBarModel(sal_uInt16 nVersion)723cdf0e10cSrcweir ComCtlProgressBarModel::ComCtlProgressBarModel( sal_uInt16 nVersion ) :
724cdf0e10cSrcweir     ComCtlModelBase( COMCTL_ID_PROGRESSBAR_50, COMCTL_ID_PROGRESSBAR_60, nVersion, true, true ),
725cdf0e10cSrcweir     mfMin( 0.0 ),
726cdf0e10cSrcweir     mfMax( 100.0 ),
727cdf0e10cSrcweir     mnVertical( 0 ),
728cdf0e10cSrcweir     mnSmooth( 0 )
729cdf0e10cSrcweir {
730cdf0e10cSrcweir }
731cdf0e10cSrcweir 
getControlType() const732cdf0e10cSrcweir ApiControlType ComCtlProgressBarModel::getControlType() const
733cdf0e10cSrcweir {
734cdf0e10cSrcweir     return API_CONTROL_PROGRESSBAR;
735cdf0e10cSrcweir }
736cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const737cdf0e10cSrcweir void ComCtlProgressBarModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
738cdf0e10cSrcweir {
739cdf0e10cSrcweir     sal_uInt16 nBorder = getFlag( mnFlags, COMCTL_COMMON_3DBORDER ) ? API_BORDER_SUNKEN :
740cdf0e10cSrcweir         (getFlag( mnFlags, COMCTL_COMMON_FLATBORDER ) ? API_BORDER_FLAT : API_BORDER_NONE);
741cdf0e10cSrcweir     rPropMap.setProperty( PROP_Border, nBorder );
742cdf0e10cSrcweir     rPropMap.setProperty( PROP_ProgressValueMin, getLimitedValue< sal_Int32, double >( ::std::min( mfMin, mfMax ), 0.0, SAL_MAX_INT32 ) );
743cdf0e10cSrcweir     rPropMap.setProperty( PROP_ProgressValueMax, getLimitedValue< sal_Int32, double >( ::std::max( mfMin, mfMax ), 0.0, SAL_MAX_INT32 ) );
744cdf0e10cSrcweir     // ComCtl model does not provide current value?
745cdf0e10cSrcweir     ComCtlModelBase::convertProperties( rPropMap, rConv );
746cdf0e10cSrcweir }
747cdf0e10cSrcweir 
importControlData(BinaryInputStream & rInStrm)748cdf0e10cSrcweir void ComCtlProgressBarModel::importControlData( BinaryInputStream& rInStrm )
749cdf0e10cSrcweir {
750cdf0e10cSrcweir     rInStrm >> mfMin >> mfMax;
751cdf0e10cSrcweir     if( mnVersion == COMCTL_VERSION_60 )
752cdf0e10cSrcweir         rInStrm >> mnVertical >> mnSmooth;
753cdf0e10cSrcweir }
754cdf0e10cSrcweir 
755cdf0e10cSrcweir // ============================================================================
756cdf0e10cSrcweir 
AxControlModelBase()757cdf0e10cSrcweir AxControlModelBase::AxControlModelBase()
758cdf0e10cSrcweir {
759cdf0e10cSrcweir }
760cdf0e10cSrcweir 
importProperty(sal_Int32 nPropId,const OUString & rValue)761cdf0e10cSrcweir void AxControlModelBase::importProperty( sal_Int32 nPropId, const OUString& rValue )
762cdf0e10cSrcweir {
763cdf0e10cSrcweir     switch( nPropId )
764cdf0e10cSrcweir     {
765cdf0e10cSrcweir         // size of the control shape: format is "width;height"
766cdf0e10cSrcweir         case XML_Size:
767cdf0e10cSrcweir         {
768cdf0e10cSrcweir             sal_Int32 nSepPos = rValue.indexOf( ';' );
769cdf0e10cSrcweir             OSL_ENSURE( nSepPos >= 0, "AxControlModelBase::importProperty - missing separator in 'Size' property" );
770cdf0e10cSrcweir             if( nSepPos >= 0 )
771cdf0e10cSrcweir             {
772cdf0e10cSrcweir                 maSize.first = rValue.copy( 0, nSepPos ).toInt32();
773cdf0e10cSrcweir                 maSize.second = rValue.copy( nSepPos + 1 ).toInt32();
774cdf0e10cSrcweir             }
775cdf0e10cSrcweir         }
776cdf0e10cSrcweir         break;
777cdf0e10cSrcweir     }
778cdf0e10cSrcweir }
779cdf0e10cSrcweir 
780cdf0e10cSrcweir // ============================================================================
781cdf0e10cSrcweir 
AxFontDataModel(bool bSupportsAlign)782cdf0e10cSrcweir AxFontDataModel::AxFontDataModel( bool bSupportsAlign ) :
783cdf0e10cSrcweir     mbSupportsAlign( bSupportsAlign )
784cdf0e10cSrcweir {
785cdf0e10cSrcweir }
786cdf0e10cSrcweir 
importProperty(sal_Int32 nPropId,const OUString & rValue)787cdf0e10cSrcweir void AxFontDataModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
788cdf0e10cSrcweir {
789cdf0e10cSrcweir     switch( nPropId )
790cdf0e10cSrcweir     {
791cdf0e10cSrcweir         case XML_FontName:          maFontData.maFontName = rValue;                                             break;
792cdf0e10cSrcweir         case XML_FontEffects:       maFontData.mnFontEffects = AttributeConversion::decodeUnsigned( rValue );   break;
793cdf0e10cSrcweir         case XML_FontHeight:        maFontData.mnFontHeight = AttributeConversion::decodeInteger( rValue );     break;
794cdf0e10cSrcweir         case XML_FontCharSet:       maFontData.mnFontCharSet = AttributeConversion::decodeInteger( rValue );    break;
795cdf0e10cSrcweir         case XML_ParagraphAlign:    maFontData.mnHorAlign = AttributeConversion::decodeInteger( rValue );       break;
796cdf0e10cSrcweir         default:                    AxControlModelBase::importProperty( nPropId, rValue );
797cdf0e10cSrcweir     }
798cdf0e10cSrcweir }
799cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)800cdf0e10cSrcweir bool AxFontDataModel::importBinaryModel( BinaryInputStream& rInStrm )
801cdf0e10cSrcweir {
802cdf0e10cSrcweir     return maFontData.importBinaryModel( rInStrm );
803cdf0e10cSrcweir }
804cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const805cdf0e10cSrcweir void AxFontDataModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
806cdf0e10cSrcweir {
807cdf0e10cSrcweir     // font name
808cdf0e10cSrcweir     if( maFontData.maFontName.getLength() > 0 )
809cdf0e10cSrcweir         rPropMap.setProperty( PROP_FontName, maFontData.maFontName );
810cdf0e10cSrcweir 
811cdf0e10cSrcweir     // font effects
812cdf0e10cSrcweir     rPropMap.setProperty( PROP_FontWeight, getFlagValue( maFontData.mnFontEffects, AX_FONTDATA_BOLD, FontWeight::BOLD, FontWeight::NORMAL ) );
813cdf0e10cSrcweir     rPropMap.setProperty( PROP_FontSlant, getFlagValue< sal_Int16 >( maFontData.mnFontEffects, AX_FONTDATA_ITALIC, FontSlant_ITALIC, FontSlant_NONE ) );
814cdf0e10cSrcweir     rPropMap.setProperty( PROP_FontUnderline, getFlagValue( maFontData.mnFontEffects, AX_FONTDATA_UNDERLINE, maFontData.mbDblUnderline ? FontUnderline::DOUBLE : FontUnderline::SINGLE, FontUnderline::NONE ) );
815cdf0e10cSrcweir     rPropMap.setProperty( PROP_FontStrikeout, getFlagValue( maFontData.mnFontEffects, AX_FONTDATA_STRIKEOUT, FontStrikeout::SINGLE, FontStrikeout::NONE ) );
816cdf0e10cSrcweir     rPropMap.setProperty( PROP_FontHeight, maFontData.getHeightPoints() );
817cdf0e10cSrcweir 
818cdf0e10cSrcweir     // font character set
819cdf0e10cSrcweir     rtl_TextEncoding eFontEnc = RTL_TEXTENCODING_DONTKNOW;
820cdf0e10cSrcweir     if( (0 <= maFontData.mnFontCharSet) && (maFontData.mnFontCharSet <= SAL_MAX_UINT8) )
821cdf0e10cSrcweir         eFontEnc = rtl_getTextEncodingFromWindowsCharset( static_cast< sal_uInt8 >( maFontData.mnFontCharSet ) );
822cdf0e10cSrcweir     if( eFontEnc != RTL_TEXTENCODING_DONTKNOW )
823cdf0e10cSrcweir         rPropMap.setProperty( PROP_FontCharset, static_cast< sal_Int16 >( eFontEnc ) );
824cdf0e10cSrcweir 
825cdf0e10cSrcweir     // text alignment
826cdf0e10cSrcweir     if( mbSupportsAlign )
827cdf0e10cSrcweir     {
828cdf0e10cSrcweir         sal_Int32 nAlign = TextAlign::LEFT;
829cdf0e10cSrcweir         switch( maFontData.mnHorAlign )
830cdf0e10cSrcweir         {
831cdf0e10cSrcweir             case AX_FONTDATA_LEFT:      nAlign = TextAlign::LEFT;   break;
832cdf0e10cSrcweir             case AX_FONTDATA_RIGHT:     nAlign = TextAlign::RIGHT;  break;
833cdf0e10cSrcweir             case AX_FONTDATA_CENTER:    nAlign = TextAlign::CENTER; break;
834cdf0e10cSrcweir             default:    OSL_ENSURE( false, "AxFontDataModel::convertProperties - unknown text alignment" );
835cdf0e10cSrcweir         }
836cdf0e10cSrcweir         // form controls expect short value
837cdf0e10cSrcweir         rPropMap.setProperty( PROP_Align, static_cast< sal_Int16 >( nAlign ) );
838cdf0e10cSrcweir     }
839cdf0e10cSrcweir 
840cdf0e10cSrcweir     // process base class properties
841cdf0e10cSrcweir     AxControlModelBase::convertProperties( rPropMap, rConv );
842cdf0e10cSrcweir }
843cdf0e10cSrcweir 
844cdf0e10cSrcweir // ============================================================================
845cdf0e10cSrcweir 
AxCommandButtonModel()846cdf0e10cSrcweir AxCommandButtonModel::AxCommandButtonModel() :
847cdf0e10cSrcweir     mnTextColor( AX_SYSCOLOR_BUTTONTEXT ),
848cdf0e10cSrcweir     mnBackColor( AX_SYSCOLOR_BUTTONFACE ),
849cdf0e10cSrcweir     mnFlags( AX_CMDBUTTON_DEFFLAGS ),
850cdf0e10cSrcweir     mnPicturePos( AX_PICPOS_ABOVECENTER ),
851cdf0e10cSrcweir     mnVerticalAlign( XML_Center ),
852cdf0e10cSrcweir     mbFocusOnClick( true )
853cdf0e10cSrcweir {
854cdf0e10cSrcweir }
855cdf0e10cSrcweir 
importProperty(sal_Int32 nPropId,const OUString & rValue)856cdf0e10cSrcweir void AxCommandButtonModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
857cdf0e10cSrcweir {
858cdf0e10cSrcweir     switch( nPropId )
859cdf0e10cSrcweir     {
860cdf0e10cSrcweir         case XML_Caption:               maCaption = rValue;                                                 break;
861cdf0e10cSrcweir         case XML_ForeColor:             mnTextColor = AttributeConversion::decodeUnsigned( rValue );        break;
862cdf0e10cSrcweir         case XML_BackColor:             mnBackColor = AttributeConversion::decodeUnsigned( rValue );        break;
863cdf0e10cSrcweir         case XML_VariousPropertyBits:   mnFlags = AttributeConversion::decodeUnsigned( rValue );            break;
864cdf0e10cSrcweir         case XML_PicturePosition:       mnPicturePos = AttributeConversion::decodeUnsigned( rValue );       break;
865cdf0e10cSrcweir         case XML_TakeFocusOnClick:      mbFocusOnClick = AttributeConversion::decodeInteger( rValue ) != 0; break;
866cdf0e10cSrcweir         default:                        AxFontDataModel::importProperty( nPropId, rValue );
867cdf0e10cSrcweir     }
868cdf0e10cSrcweir }
869cdf0e10cSrcweir 
importPictureData(sal_Int32 nPropId,BinaryInputStream & rInStrm)870cdf0e10cSrcweir void AxCommandButtonModel::importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm )
871cdf0e10cSrcweir {
872cdf0e10cSrcweir     switch( nPropId )
873cdf0e10cSrcweir     {
874cdf0e10cSrcweir         case XML_Picture:   OleHelper::importStdPic( maPictureData, rInStrm, true );    break;
875cdf0e10cSrcweir         default:            AxFontDataModel::importPictureData( nPropId, rInStrm );
876cdf0e10cSrcweir     }
877cdf0e10cSrcweir }
878cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)879cdf0e10cSrcweir bool AxCommandButtonModel::importBinaryModel( BinaryInputStream& rInStrm )
880cdf0e10cSrcweir {
881cdf0e10cSrcweir     AxBinaryPropertyReader aReader( rInStrm );
882cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnTextColor );
883cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBackColor );
884cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnFlags );
885cdf0e10cSrcweir     aReader.readStringProperty( maCaption );
886cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnPicturePos );
887cdf0e10cSrcweir     aReader.readPairProperty( maSize );
888cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
889cdf0e10cSrcweir     aReader.readPictureProperty( maPictureData );
890cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt16 >(); // accelerator
891cdf0e10cSrcweir     aReader.readBoolProperty( mbFocusOnClick, true ); // binary flag means "do not take focus"
892cdf0e10cSrcweir     aReader.skipPictureProperty(); // mouse icon
893cdf0e10cSrcweir     return aReader.finalizeImport() && AxFontDataModel::importBinaryModel( rInStrm );
894cdf0e10cSrcweir }
895cdf0e10cSrcweir 
getControlType() const896cdf0e10cSrcweir ApiControlType AxCommandButtonModel::getControlType() const
897cdf0e10cSrcweir {
898cdf0e10cSrcweir     return API_CONTROL_BUTTON;
899cdf0e10cSrcweir }
900cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const901cdf0e10cSrcweir void AxCommandButtonModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
902cdf0e10cSrcweir {
903cdf0e10cSrcweir     rPropMap.setProperty( PROP_Label, maCaption );
904cdf0e10cSrcweir     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) );
905cdf0e10cSrcweir     rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) );
906cdf0e10cSrcweir     rPropMap.setProperty( PROP_FocusOnClick, mbFocusOnClick );
907cdf0e10cSrcweir     rConv.convertColor( rPropMap, PROP_TextColor, mnTextColor );
908cdf0e10cSrcweir     rConv.convertVerticalAlign( rPropMap, mnVerticalAlign );
909cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_NOTSUPPORTED );
910cdf0e10cSrcweir     rConv.convertAxPicture( rPropMap, maPictureData, mnPicturePos );
911cdf0e10cSrcweir     AxFontDataModel::convertProperties( rPropMap, rConv );
912cdf0e10cSrcweir }
913cdf0e10cSrcweir 
914cdf0e10cSrcweir // ============================================================================
915cdf0e10cSrcweir 
AxLabelModel()916cdf0e10cSrcweir AxLabelModel::AxLabelModel() :
917cdf0e10cSrcweir     mnTextColor( AX_SYSCOLOR_BUTTONTEXT ),
918cdf0e10cSrcweir     mnBackColor( AX_SYSCOLOR_BUTTONFACE ),
919cdf0e10cSrcweir     mnFlags( AX_LABEL_DEFFLAGS ),
920cdf0e10cSrcweir     mnBorderColor( AX_SYSCOLOR_WINDOWFRAME ),
921cdf0e10cSrcweir     mnBorderStyle( AX_BORDERSTYLE_NONE ),
922cdf0e10cSrcweir     mnSpecialEffect( AX_SPECIALEFFECT_FLAT ),
923cdf0e10cSrcweir     mnVerticalAlign( XML_Top )
924cdf0e10cSrcweir {
925cdf0e10cSrcweir }
926cdf0e10cSrcweir 
importProperty(sal_Int32 nPropId,const OUString & rValue)927cdf0e10cSrcweir void AxLabelModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
928cdf0e10cSrcweir {
929cdf0e10cSrcweir     switch( nPropId )
930cdf0e10cSrcweir     {
931cdf0e10cSrcweir         case XML_Caption:               maCaption = rValue;                                             break;
932cdf0e10cSrcweir         case XML_ForeColor:             mnTextColor = AttributeConversion::decodeUnsigned( rValue );    break;
933cdf0e10cSrcweir         case XML_BackColor:             mnBackColor = AttributeConversion::decodeUnsigned( rValue );    break;
934cdf0e10cSrcweir         case XML_VariousPropertyBits:   mnFlags = AttributeConversion::decodeUnsigned( rValue );        break;
935cdf0e10cSrcweir         case XML_BorderColor:           mnBorderColor = AttributeConversion::decodeUnsigned( rValue );  break;
936cdf0e10cSrcweir         case XML_BorderStyle:           mnBorderStyle = AttributeConversion::decodeInteger( rValue );   break;
937cdf0e10cSrcweir         case XML_SpecialEffect:         mnSpecialEffect = AttributeConversion::decodeInteger( rValue ); break;
938cdf0e10cSrcweir         default:                        AxFontDataModel::importProperty( nPropId, rValue );
939cdf0e10cSrcweir     }
940cdf0e10cSrcweir }
941cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)942cdf0e10cSrcweir bool AxLabelModel::importBinaryModel( BinaryInputStream& rInStrm )
943cdf0e10cSrcweir {
944cdf0e10cSrcweir     AxBinaryPropertyReader aReader( rInStrm );
945cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnTextColor );
946cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBackColor );
947cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnFlags );
948cdf0e10cSrcweir     aReader.readStringProperty( maCaption );
949cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // picture position
950cdf0e10cSrcweir     aReader.readPairProperty( maSize );
951cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
952cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBorderColor );
953cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt16 >( mnBorderStyle );
954cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt16 >( mnSpecialEffect );
955cdf0e10cSrcweir     aReader.skipPictureProperty(); // picture
956cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt16 >(); // accelerator
957cdf0e10cSrcweir     aReader.skipPictureProperty(); // mouse icon
958cdf0e10cSrcweir     return aReader.finalizeImport() && AxFontDataModel::importBinaryModel( rInStrm );
959cdf0e10cSrcweir }
960cdf0e10cSrcweir 
getControlType() const961cdf0e10cSrcweir ApiControlType AxLabelModel::getControlType() const
962cdf0e10cSrcweir {
963cdf0e10cSrcweir     return API_CONTROL_FIXEDTEXT;
964cdf0e10cSrcweir }
965cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const966cdf0e10cSrcweir void AxLabelModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
967cdf0e10cSrcweir {
968cdf0e10cSrcweir     rPropMap.setProperty( PROP_Label, maCaption );
969cdf0e10cSrcweir     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) );
970cdf0e10cSrcweir     rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) );
971cdf0e10cSrcweir     rConv.convertColor( rPropMap, PROP_TextColor, mnTextColor );
972cdf0e10cSrcweir     rConv.convertVerticalAlign( rPropMap, mnVerticalAlign );
973cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID );
974cdf0e10cSrcweir     rConv.convertAxBorder( rPropMap, mnBorderColor, mnBorderStyle, mnSpecialEffect );
975cdf0e10cSrcweir     AxFontDataModel::convertProperties( rPropMap, rConv );
976cdf0e10cSrcweir }
977cdf0e10cSrcweir 
978cdf0e10cSrcweir // ============================================================================
979cdf0e10cSrcweir 
AxImageModel()980cdf0e10cSrcweir AxImageModel::AxImageModel() :
981cdf0e10cSrcweir     mnBackColor( AX_SYSCOLOR_BUTTONFACE ),
982cdf0e10cSrcweir     mnFlags( AX_IMAGE_DEFFLAGS ),
983cdf0e10cSrcweir     mnBorderColor( AX_SYSCOLOR_WINDOWFRAME ),
984cdf0e10cSrcweir     mnBorderStyle( AX_BORDERSTYLE_SINGLE ),
985cdf0e10cSrcweir     mnSpecialEffect( AX_SPECIALEFFECT_FLAT ),
986cdf0e10cSrcweir     mnPicSizeMode( AX_PICSIZE_CLIP ),
987cdf0e10cSrcweir     mnPicAlign( AX_PICALIGN_CENTER ),
988cdf0e10cSrcweir     mbPicTiling( false )
989cdf0e10cSrcweir {
990cdf0e10cSrcweir }
991cdf0e10cSrcweir 
importProperty(sal_Int32 nPropId,const OUString & rValue)992cdf0e10cSrcweir void AxImageModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
993cdf0e10cSrcweir {
994cdf0e10cSrcweir     switch( nPropId )
995cdf0e10cSrcweir     {
996cdf0e10cSrcweir         case XML_BackColor:             mnBackColor = AttributeConversion::decodeUnsigned( rValue );      break;
997cdf0e10cSrcweir         case XML_VariousPropertyBits:   mnFlags = AttributeConversion::decodeUnsigned( rValue );          break;
998cdf0e10cSrcweir         case XML_BorderColor:           mnBorderColor = AttributeConversion::decodeUnsigned( rValue );    break;
999cdf0e10cSrcweir         case XML_BorderStyle:           mnBorderStyle = AttributeConversion::decodeInteger( rValue );     break;
1000cdf0e10cSrcweir         case XML_SpecialEffect:         mnSpecialEffect = AttributeConversion::decodeInteger( rValue );   break;
1001cdf0e10cSrcweir         case XML_SizeMode:              mnPicSizeMode = AttributeConversion::decodeInteger( rValue );     break;
1002cdf0e10cSrcweir         case XML_PictureAlignment:      mnPicAlign = AttributeConversion::decodeInteger( rValue );        break;
1003cdf0e10cSrcweir         case XML_PictureTiling:         mbPicTiling = AttributeConversion::decodeInteger( rValue ) != 0;  break;
1004cdf0e10cSrcweir         default:                        AxControlModelBase::importProperty( nPropId, rValue );
1005cdf0e10cSrcweir     }
1006cdf0e10cSrcweir }
1007cdf0e10cSrcweir 
importPictureData(sal_Int32 nPropId,BinaryInputStream & rInStrm)1008cdf0e10cSrcweir void AxImageModel::importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm )
1009cdf0e10cSrcweir {
1010cdf0e10cSrcweir     switch( nPropId )
1011cdf0e10cSrcweir     {
1012cdf0e10cSrcweir         case XML_Picture:   OleHelper::importStdPic( maPictureData, rInStrm, true );    break;
1013cdf0e10cSrcweir         default:            AxControlModelBase::importPictureData( nPropId, rInStrm );
1014cdf0e10cSrcweir     }
1015cdf0e10cSrcweir }
1016cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)1017cdf0e10cSrcweir bool AxImageModel::importBinaryModel( BinaryInputStream& rInStrm )
1018cdf0e10cSrcweir {
1019cdf0e10cSrcweir     AxBinaryPropertyReader aReader( rInStrm );
1020cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1021cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1022cdf0e10cSrcweir     aReader.skipBoolProperty(); // auto-size
1023cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBorderColor );
1024cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBackColor );
1025cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnBorderStyle );
1026cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
1027cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnPicSizeMode );
1028cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnSpecialEffect );
1029cdf0e10cSrcweir     aReader.readPairProperty( maSize );
1030cdf0e10cSrcweir     aReader.readPictureProperty( maPictureData );
1031cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnPicAlign );
1032cdf0e10cSrcweir     aReader.readBoolProperty( mbPicTiling );
1033cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnFlags );
1034cdf0e10cSrcweir     aReader.skipPictureProperty(); // mouse icon
1035cdf0e10cSrcweir     return aReader.finalizeImport();
1036cdf0e10cSrcweir }
1037cdf0e10cSrcweir 
getControlType() const1038cdf0e10cSrcweir ApiControlType AxImageModel::getControlType() const
1039cdf0e10cSrcweir {
1040cdf0e10cSrcweir     return API_CONTROL_IMAGE;
1041cdf0e10cSrcweir }
1042cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1043cdf0e10cSrcweir void AxImageModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1044cdf0e10cSrcweir {
1045cdf0e10cSrcweir     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) );
1046cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID );
1047cdf0e10cSrcweir     rConv.convertAxBorder( rPropMap, mnBorderColor, mnBorderStyle, mnSpecialEffect );
1048cdf0e10cSrcweir     rConv.convertAxPicture( rPropMap, maPictureData, mnPicSizeMode, mnPicAlign, mbPicTiling );
1049cdf0e10cSrcweir     AxControlModelBase::convertProperties( rPropMap, rConv );
1050cdf0e10cSrcweir }
1051cdf0e10cSrcweir 
1052cdf0e10cSrcweir // ============================================================================
1053cdf0e10cSrcweir 
AxMorphDataModelBase()1054cdf0e10cSrcweir AxMorphDataModelBase::AxMorphDataModelBase() :
1055cdf0e10cSrcweir     mnTextColor( AX_SYSCOLOR_WINDOWTEXT ),
1056cdf0e10cSrcweir     mnBackColor( AX_SYSCOLOR_WINDOWBACK ),
1057cdf0e10cSrcweir     mnFlags( AX_MORPHDATA_DEFFLAGS ),
1058cdf0e10cSrcweir     mnPicturePos( AX_PICPOS_ABOVECENTER ),
1059cdf0e10cSrcweir     mnBorderColor( AX_SYSCOLOR_WINDOWFRAME ),
1060cdf0e10cSrcweir     mnBorderStyle( AX_BORDERSTYLE_NONE ),
1061cdf0e10cSrcweir     mnSpecialEffect( AX_SPECIALEFFECT_SUNKEN ),
1062cdf0e10cSrcweir     mnDisplayStyle( AX_DISPLAYSTYLE_TEXT ),
1063cdf0e10cSrcweir     mnMultiSelect( AX_SELCTION_SINGLE ),
1064cdf0e10cSrcweir     mnScrollBars( AX_SCROLLBAR_NONE ),
1065cdf0e10cSrcweir     mnMatchEntry( AX_MATCHENTRY_NONE ),
1066cdf0e10cSrcweir     mnShowDropButton( AX_SHOWDROPBUTTON_NEVER ),
1067cdf0e10cSrcweir     mnMaxLength( 0 ),
1068cdf0e10cSrcweir     mnPasswordChar( 0 ),
1069cdf0e10cSrcweir     mnListRows( 8 ),
1070cdf0e10cSrcweir     mnVerticalAlign( XML_Center )
1071cdf0e10cSrcweir {
1072cdf0e10cSrcweir }
1073cdf0e10cSrcweir 
importProperty(sal_Int32 nPropId,const OUString & rValue)1074cdf0e10cSrcweir void AxMorphDataModelBase::importProperty( sal_Int32 nPropId, const OUString& rValue )
1075cdf0e10cSrcweir {
1076cdf0e10cSrcweir     switch( nPropId )
1077cdf0e10cSrcweir     {
1078cdf0e10cSrcweir         case XML_Caption:               maCaption = rValue;                                             break;
1079cdf0e10cSrcweir         case XML_Value:                 maValue = rValue;                                               break;
1080cdf0e10cSrcweir         case XML_GroupName:             maGroupName = rValue;                                           break;
1081cdf0e10cSrcweir         case XML_ForeColor:             mnTextColor = AttributeConversion::decodeUnsigned( rValue );    break;
1082cdf0e10cSrcweir         case XML_BackColor:             mnBackColor = AttributeConversion::decodeUnsigned( rValue );    break;
1083cdf0e10cSrcweir         case XML_VariousPropertyBits:   mnFlags = AttributeConversion::decodeUnsigned( rValue );        break;
1084cdf0e10cSrcweir         case XML_PicturePosition:       mnPicturePos = AttributeConversion::decodeUnsigned( rValue );   break;
1085cdf0e10cSrcweir         case XML_BorderColor:           mnBorderColor = AttributeConversion::decodeUnsigned( rValue );  break;
1086cdf0e10cSrcweir         case XML_BorderStyle:           mnBorderStyle = AttributeConversion::decodeInteger( rValue );   break;
1087cdf0e10cSrcweir         case XML_SpecialEffect:         mnSpecialEffect = AttributeConversion::decodeInteger( rValue ); break;
1088cdf0e10cSrcweir         case XML_DisplayStyle:          mnDisplayStyle = AttributeConversion::decodeInteger( rValue );  break;
1089cdf0e10cSrcweir         case XML_MultiSelect:           mnMultiSelect = AttributeConversion::decodeInteger( rValue );   break;
1090cdf0e10cSrcweir         case XML_ScrollBars:            mnScrollBars = AttributeConversion::decodeInteger( rValue );    break;
1091cdf0e10cSrcweir         case XML_MatchEntry:            mnMatchEntry = AttributeConversion::decodeInteger( rValue );    break;
1092cdf0e10cSrcweir         case XML_ShowDropButtonWhen:    mnShowDropButton = AttributeConversion::decodeInteger( rValue );break;
1093cdf0e10cSrcweir         case XML_MaxLength:             mnMaxLength = AttributeConversion::decodeInteger( rValue );     break;
1094cdf0e10cSrcweir         case XML_PasswordChar:          mnPasswordChar = AttributeConversion::decodeInteger( rValue );  break;
1095cdf0e10cSrcweir         case XML_ListRows:              mnListRows = AttributeConversion::decodeInteger( rValue );      break;
1096cdf0e10cSrcweir         default:                        AxFontDataModel::importProperty( nPropId, rValue );
1097cdf0e10cSrcweir     }
1098cdf0e10cSrcweir }
1099cdf0e10cSrcweir 
importPictureData(sal_Int32 nPropId,BinaryInputStream & rInStrm)1100cdf0e10cSrcweir void AxMorphDataModelBase::importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm )
1101cdf0e10cSrcweir {
1102cdf0e10cSrcweir     switch( nPropId )
1103cdf0e10cSrcweir     {
1104cdf0e10cSrcweir         case XML_Picture:   OleHelper::importStdPic( maPictureData, rInStrm, true );    break;
1105cdf0e10cSrcweir         default:            AxFontDataModel::importPictureData( nPropId, rInStrm );
1106cdf0e10cSrcweir     }
1107cdf0e10cSrcweir }
1108cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)1109cdf0e10cSrcweir bool AxMorphDataModelBase::importBinaryModel( BinaryInputStream& rInStrm )
1110cdf0e10cSrcweir {
1111cdf0e10cSrcweir     AxBinaryPropertyReader aReader( rInStrm, true );
1112cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnFlags );
1113cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBackColor );
1114cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnTextColor );
1115cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnMaxLength );
1116cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnBorderStyle );
1117cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnScrollBars );
1118cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnDisplayStyle );
1119cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
1120cdf0e10cSrcweir     aReader.readPairProperty( maSize );
1121cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt16 >( mnPasswordChar );
1122cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // list width
1123cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt16 >(); // bound column
1124cdf0e10cSrcweir     aReader.skipIntProperty< sal_Int16 >(); // text column
1125cdf0e10cSrcweir     aReader.skipIntProperty< sal_Int16 >(); // column count
1126cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt16 >( mnListRows );
1127cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt16 >(); // column info count
1128cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnMatchEntry );
1129cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // list style
1130cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnShowDropButton );
1131cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1132cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // drop down style
1133cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnMultiSelect );
1134cdf0e10cSrcweir     aReader.readStringProperty( maValue );
1135cdf0e10cSrcweir     aReader.readStringProperty( maCaption );
1136cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnPicturePos );
1137cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBorderColor );
1138cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnSpecialEffect );
1139cdf0e10cSrcweir     aReader.skipPictureProperty(); // mouse icon
1140cdf0e10cSrcweir     aReader.readPictureProperty( maPictureData );
1141cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt16 >(); // accelerator
1142cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1143cdf0e10cSrcweir     aReader.skipBoolProperty();
1144cdf0e10cSrcweir     aReader.readStringProperty( maGroupName );
1145cdf0e10cSrcweir     return aReader.finalizeImport() && AxFontDataModel::importBinaryModel( rInStrm );
1146cdf0e10cSrcweir }
1147cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1148cdf0e10cSrcweir void AxMorphDataModelBase::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1149cdf0e10cSrcweir {
1150cdf0e10cSrcweir     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) );
1151cdf0e10cSrcweir     rConv.convertColor( rPropMap, PROP_TextColor, mnTextColor );
1152cdf0e10cSrcweir     AxFontDataModel::convertProperties( rPropMap, rConv );
1153cdf0e10cSrcweir }
1154cdf0e10cSrcweir 
1155cdf0e10cSrcweir // ============================================================================
1156cdf0e10cSrcweir 
AxToggleButtonModel()1157cdf0e10cSrcweir AxToggleButtonModel::AxToggleButtonModel()
1158cdf0e10cSrcweir {
1159cdf0e10cSrcweir     mnDisplayStyle = AX_DISPLAYSTYLE_TOGGLE;
1160cdf0e10cSrcweir }
1161cdf0e10cSrcweir 
getControlType() const1162cdf0e10cSrcweir ApiControlType AxToggleButtonModel::getControlType() const
1163cdf0e10cSrcweir {
1164cdf0e10cSrcweir     OSL_ENSURE( mnDisplayStyle == AX_DISPLAYSTYLE_TOGGLE, "AxToggleButtonModel::getControlType - invalid control type" );
1165cdf0e10cSrcweir     return API_CONTROL_BUTTON;
1166cdf0e10cSrcweir }
1167cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1168cdf0e10cSrcweir void AxToggleButtonModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1169cdf0e10cSrcweir {
1170cdf0e10cSrcweir     rPropMap.setProperty( PROP_Label, maCaption );
1171cdf0e10cSrcweir     rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) );
1172cdf0e10cSrcweir     rPropMap.setProperty( PROP_Toggle, true );
1173cdf0e10cSrcweir     rConv.convertVerticalAlign( rPropMap, mnVerticalAlign );
1174cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_NOTSUPPORTED );
1175cdf0e10cSrcweir     rConv.convertAxPicture( rPropMap, maPictureData, mnPicturePos );
1176cdf0e10cSrcweir     rConv.convertAxState( rPropMap, maValue, mnMultiSelect, API_DEFAULTSTATE_BOOLEAN, mbAwtModel );
1177cdf0e10cSrcweir     AxMorphDataModelBase::convertProperties( rPropMap, rConv );
1178cdf0e10cSrcweir }
1179cdf0e10cSrcweir 
1180cdf0e10cSrcweir // ============================================================================
1181cdf0e10cSrcweir 
AxCheckBoxModel()1182cdf0e10cSrcweir AxCheckBoxModel::AxCheckBoxModel()
1183cdf0e10cSrcweir {
1184cdf0e10cSrcweir     mnDisplayStyle = AX_DISPLAYSTYLE_CHECKBOX;
1185cdf0e10cSrcweir }
1186cdf0e10cSrcweir 
getControlType() const1187cdf0e10cSrcweir ApiControlType AxCheckBoxModel::getControlType() const
1188cdf0e10cSrcweir {
1189cdf0e10cSrcweir     OSL_ENSURE( mnDisplayStyle == AX_DISPLAYSTYLE_CHECKBOX, "AxCheckBoxModel::getControlType - invalid control type" );
1190cdf0e10cSrcweir     return API_CONTROL_CHECKBOX;
1191cdf0e10cSrcweir }
1192cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1193cdf0e10cSrcweir void AxCheckBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1194cdf0e10cSrcweir {
1195cdf0e10cSrcweir     rPropMap.setProperty( PROP_Label, maCaption );
1196cdf0e10cSrcweir     rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) );
1197cdf0e10cSrcweir     rConv.convertVerticalAlign( rPropMap, mnVerticalAlign );
1198cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID );
1199cdf0e10cSrcweir     rConv.convertAxVisualEffect( rPropMap, mnSpecialEffect );
1200cdf0e10cSrcweir     rConv.convertAxPicture( rPropMap, maPictureData, mnPicturePos );
1201cdf0e10cSrcweir     rConv.convertAxState( rPropMap, maValue, mnMultiSelect, API_DEFAULTSTATE_TRISTATE, mbAwtModel );
1202cdf0e10cSrcweir     AxMorphDataModelBase::convertProperties( rPropMap, rConv );
1203cdf0e10cSrcweir }
1204cdf0e10cSrcweir 
1205cdf0e10cSrcweir // ============================================================================
1206cdf0e10cSrcweir 
AxOptionButtonModel()1207cdf0e10cSrcweir AxOptionButtonModel::AxOptionButtonModel()
1208cdf0e10cSrcweir {
1209cdf0e10cSrcweir     mnDisplayStyle = AX_DISPLAYSTYLE_OPTBUTTON;
1210cdf0e10cSrcweir }
1211cdf0e10cSrcweir 
getControlType() const1212cdf0e10cSrcweir ApiControlType AxOptionButtonModel::getControlType() const
1213cdf0e10cSrcweir {
1214cdf0e10cSrcweir     OSL_ENSURE( mnDisplayStyle == AX_DISPLAYSTYLE_OPTBUTTON, "AxOptionButtonModel::getControlType - invalid control type" );
1215cdf0e10cSrcweir     return API_CONTROL_RADIOBUTTON;
1216cdf0e10cSrcweir }
1217cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1218cdf0e10cSrcweir void AxOptionButtonModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1219cdf0e10cSrcweir {
1220cdf0e10cSrcweir     rPropMap.setProperty( PROP_Label, maCaption );
1221cdf0e10cSrcweir     rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) );
1222cdf0e10cSrcweir     rConv.convertVerticalAlign( rPropMap, mnVerticalAlign );
1223cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID );
1224cdf0e10cSrcweir     rConv.convertAxVisualEffect( rPropMap, mnSpecialEffect );
1225cdf0e10cSrcweir     rConv.convertAxPicture( rPropMap, maPictureData, mnPicturePos );
1226cdf0e10cSrcweir     rConv.convertAxState( rPropMap, maValue, mnMultiSelect, API_DEFAULTSTATE_SHORT, mbAwtModel );
1227cdf0e10cSrcweir     AxMorphDataModelBase::convertProperties( rPropMap, rConv );
1228cdf0e10cSrcweir }
1229cdf0e10cSrcweir 
1230cdf0e10cSrcweir // ============================================================================
1231cdf0e10cSrcweir 
AxTextBoxModel()1232cdf0e10cSrcweir AxTextBoxModel::AxTextBoxModel()
1233cdf0e10cSrcweir {
1234cdf0e10cSrcweir     mnDisplayStyle = AX_DISPLAYSTYLE_TEXT;
1235cdf0e10cSrcweir }
1236cdf0e10cSrcweir 
getControlType() const1237cdf0e10cSrcweir ApiControlType AxTextBoxModel::getControlType() const
1238cdf0e10cSrcweir {
1239cdf0e10cSrcweir     OSL_ENSURE( mnDisplayStyle == AX_DISPLAYSTYLE_TEXT, "AxTextBoxModel::getControlType - invalid control type" );
1240cdf0e10cSrcweir     return API_CONTROL_EDIT;
1241cdf0e10cSrcweir }
1242cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1243cdf0e10cSrcweir void AxTextBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1244cdf0e10cSrcweir {
1245cdf0e10cSrcweir     rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_MULTILINE ) );
1246cdf0e10cSrcweir     rPropMap.setProperty( PROP_HideInactiveSelection, getFlag( mnFlags, AX_FLAGS_HIDESELECTION ) );
1247cdf0e10cSrcweir     rPropMap.setProperty( mbAwtModel ? PROP_Text : PROP_DefaultText, maValue );
1248cdf0e10cSrcweir     rPropMap.setProperty( PROP_MaxTextLen, getLimitedValue< sal_Int16, sal_Int32 >( mnMaxLength, 0, SAL_MAX_INT16 ) );
1249cdf0e10cSrcweir     if( (0 < mnPasswordChar) && (mnPasswordChar <= SAL_MAX_INT16) )
1250cdf0e10cSrcweir         rPropMap.setProperty( PROP_EchoChar, static_cast< sal_Int16 >( mnPasswordChar ) );
1251cdf0e10cSrcweir     rPropMap.setProperty( PROP_HScroll, getFlag( mnScrollBars, AX_SCROLLBAR_HORIZONTAL ) );
1252cdf0e10cSrcweir     rPropMap.setProperty( PROP_VScroll, getFlag( mnScrollBars, AX_SCROLLBAR_VERTICAL ) );
1253cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID );
1254cdf0e10cSrcweir     rConv.convertAxBorder( rPropMap, mnBorderColor, mnBorderStyle, mnSpecialEffect );
1255cdf0e10cSrcweir     AxMorphDataModelBase::convertProperties( rPropMap, rConv );
1256cdf0e10cSrcweir }
1257cdf0e10cSrcweir 
1258cdf0e10cSrcweir // ============================================================================
1259cdf0e10cSrcweir 
AxNumericFieldModel()1260cdf0e10cSrcweir AxNumericFieldModel::AxNumericFieldModel()
1261cdf0e10cSrcweir {
1262cdf0e10cSrcweir     mnDisplayStyle = AX_DISPLAYSTYLE_TEXT;
1263cdf0e10cSrcweir }
1264cdf0e10cSrcweir 
getControlType() const1265cdf0e10cSrcweir ApiControlType AxNumericFieldModel::getControlType() const
1266cdf0e10cSrcweir {
1267cdf0e10cSrcweir     OSL_ENSURE( mnDisplayStyle == AX_DISPLAYSTYLE_TEXT, "AxNumericFieldModel::getControlType - invalid control type" );
1268cdf0e10cSrcweir     return API_CONTROL_NUMERIC;
1269cdf0e10cSrcweir }
1270cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1271cdf0e10cSrcweir void AxNumericFieldModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1272cdf0e10cSrcweir {
1273cdf0e10cSrcweir     rPropMap.setProperty( PROP_HideInactiveSelection, getFlag( mnFlags, AX_FLAGS_HIDESELECTION ) );
1274cdf0e10cSrcweir     // TODO: OUString::toDouble() does not handle local decimal separator
1275cdf0e10cSrcweir     rPropMap.setProperty( mbAwtModel ? PROP_Value : PROP_DefaultValue, maValue.toDouble() );
1276cdf0e10cSrcweir     rPropMap.setProperty( PROP_Spin, getFlag( mnScrollBars, AX_SCROLLBAR_VERTICAL ) );
1277cdf0e10cSrcweir     rPropMap.setProperty( PROP_Repeat, true );
1278cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID );
1279cdf0e10cSrcweir     rConv.convertAxBorder( rPropMap, mnBorderColor, mnBorderStyle, mnSpecialEffect );
1280cdf0e10cSrcweir     AxMorphDataModelBase::convertProperties( rPropMap, rConv );
1281cdf0e10cSrcweir }
1282cdf0e10cSrcweir 
1283cdf0e10cSrcweir // ============================================================================
1284cdf0e10cSrcweir 
AxListBoxModel()1285cdf0e10cSrcweir AxListBoxModel::AxListBoxModel()
1286cdf0e10cSrcweir {
1287cdf0e10cSrcweir     mnDisplayStyle = AX_DISPLAYSTYLE_LISTBOX;
1288cdf0e10cSrcweir }
1289cdf0e10cSrcweir 
getControlType() const1290cdf0e10cSrcweir ApiControlType AxListBoxModel::getControlType() const
1291cdf0e10cSrcweir {
1292cdf0e10cSrcweir     OSL_ENSURE( mnDisplayStyle == AX_DISPLAYSTYLE_LISTBOX, "AxListBoxModel::getControlType - invalid control type" );
1293cdf0e10cSrcweir     return API_CONTROL_LISTBOX;
1294cdf0e10cSrcweir }
1295cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1296cdf0e10cSrcweir void AxListBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1297cdf0e10cSrcweir {
1298cdf0e10cSrcweir     bool bMultiSelect = (mnMultiSelect == AX_SELCTION_MULTI) || (mnMultiSelect == AX_SELCTION_EXTENDED);
1299cdf0e10cSrcweir     rPropMap.setProperty( PROP_MultiSelection, bMultiSelect );
1300cdf0e10cSrcweir     rPropMap.setProperty( PROP_Dropdown, false );
1301cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID );
1302cdf0e10cSrcweir     rConv.convertAxBorder( rPropMap, mnBorderColor, mnBorderStyle, mnSpecialEffect );
1303cdf0e10cSrcweir     AxMorphDataModelBase::convertProperties( rPropMap, rConv );
1304cdf0e10cSrcweir }
1305cdf0e10cSrcweir 
1306cdf0e10cSrcweir // ============================================================================
1307cdf0e10cSrcweir 
AxComboBoxModel()1308cdf0e10cSrcweir AxComboBoxModel::AxComboBoxModel()
1309cdf0e10cSrcweir {
1310cdf0e10cSrcweir     mnDisplayStyle = AX_DISPLAYSTYLE_COMBOBOX;
1311cdf0e10cSrcweir }
1312cdf0e10cSrcweir 
getControlType() const1313cdf0e10cSrcweir ApiControlType AxComboBoxModel::getControlType() const
1314cdf0e10cSrcweir {
1315cdf0e10cSrcweir     OSL_ENSURE( (mnDisplayStyle == AX_DISPLAYSTYLE_COMBOBOX) || (mnDisplayStyle == AX_DISPLAYSTYLE_DROPDOWN), "AxComboBoxModel::getControlType - invalid control type" );
1316cdf0e10cSrcweir     return (mnDisplayStyle == AX_DISPLAYSTYLE_DROPDOWN) ? API_CONTROL_LISTBOX : API_CONTROL_COMBOBOX;
1317cdf0e10cSrcweir }
1318cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1319cdf0e10cSrcweir void AxComboBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1320cdf0e10cSrcweir {
1321cdf0e10cSrcweir     if( mnDisplayStyle != AX_DISPLAYSTYLE_DROPDOWN )
1322cdf0e10cSrcweir     {
1323cdf0e10cSrcweir         rPropMap.setProperty( PROP_HideInactiveSelection, getFlag( mnFlags, AX_FLAGS_HIDESELECTION ) );
1324cdf0e10cSrcweir         rPropMap.setProperty( mbAwtModel ? PROP_Text : PROP_DefaultText, maValue );
1325cdf0e10cSrcweir         rPropMap.setProperty( PROP_MaxTextLen, getLimitedValue< sal_Int16, sal_Int32 >( mnMaxLength, 0, SAL_MAX_INT16 ) );
1326cdf0e10cSrcweir         bool bAutoComplete = (mnMatchEntry == AX_MATCHENTRY_FIRSTLETTER) || (mnMatchEntry == AX_MATCHENTRY_COMPLETE);
1327cdf0e10cSrcweir         rPropMap.setProperty( PROP_Autocomplete, bAutoComplete );
1328cdf0e10cSrcweir     }
1329cdf0e10cSrcweir     bool bShowDropdown = (mnShowDropButton == AX_SHOWDROPBUTTON_FOCUS) || (mnShowDropButton == AX_SHOWDROPBUTTON_ALWAYS);
1330cdf0e10cSrcweir     rPropMap.setProperty( PROP_Dropdown, bShowDropdown );
1331cdf0e10cSrcweir     rPropMap.setProperty( PROP_LineCount, getLimitedValue< sal_Int16, sal_Int32 >( mnListRows, 1, SAL_MAX_INT16 ) );
1332cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID );
1333cdf0e10cSrcweir     rConv.convertAxBorder( rPropMap, mnBorderColor, mnBorderStyle, mnSpecialEffect );
1334cdf0e10cSrcweir     AxMorphDataModelBase::convertProperties( rPropMap, rConv );
1335cdf0e10cSrcweir }
1336cdf0e10cSrcweir 
1337cdf0e10cSrcweir // ============================================================================
1338cdf0e10cSrcweir 
AxSpinButtonModel()1339cdf0e10cSrcweir AxSpinButtonModel::AxSpinButtonModel() :
1340cdf0e10cSrcweir     mnArrowColor( AX_SYSCOLOR_BUTTONTEXT ),
1341cdf0e10cSrcweir     mnBackColor( AX_SYSCOLOR_BUTTONFACE ),
1342cdf0e10cSrcweir     mnFlags( AX_SPINBUTTON_DEFFLAGS ),
1343cdf0e10cSrcweir     mnOrientation( AX_ORIENTATION_AUTO ),
1344cdf0e10cSrcweir     mnMin( 0 ),
1345cdf0e10cSrcweir     mnMax( 100 ),
1346cdf0e10cSrcweir     mnPosition( 0 ),
1347cdf0e10cSrcweir     mnSmallChange( 1 ),
1348cdf0e10cSrcweir     mnDelay( 50 )
1349cdf0e10cSrcweir {
1350cdf0e10cSrcweir }
1351cdf0e10cSrcweir 
getControlType() const1352cdf0e10cSrcweir ApiControlType AxSpinButtonModel::getControlType() const
1353cdf0e10cSrcweir {
1354cdf0e10cSrcweir     return API_CONTROL_SPINBUTTON;
1355cdf0e10cSrcweir }
1356cdf0e10cSrcweir 
importProperty(sal_Int32 nPropId,const OUString & rValue)1357cdf0e10cSrcweir void AxSpinButtonModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
1358cdf0e10cSrcweir {
1359cdf0e10cSrcweir     switch( nPropId )
1360cdf0e10cSrcweir     {
1361cdf0e10cSrcweir         case XML_ForeColor:             mnArrowColor = AttributeConversion::decodeUnsigned( rValue );   break;
1362cdf0e10cSrcweir         case XML_BackColor:             mnBackColor = AttributeConversion::decodeUnsigned( rValue );    break;
1363cdf0e10cSrcweir         case XML_VariousPropertyBits:   mnFlags = AttributeConversion::decodeUnsigned( rValue );        break;
1364cdf0e10cSrcweir         case XML_Orientation:           mnOrientation = AttributeConversion::decodeInteger( rValue );   break;
1365cdf0e10cSrcweir         case XML_Min:                   mnMin = AttributeConversion::decodeInteger( rValue );           break;
1366cdf0e10cSrcweir         case XML_Max:                   mnMax = AttributeConversion::decodeInteger( rValue );           break;
1367cdf0e10cSrcweir         case XML_Position:              mnPosition = AttributeConversion::decodeInteger( rValue );      break;
1368cdf0e10cSrcweir         case XML_SmallChange:           mnSmallChange = AttributeConversion::decodeInteger( rValue );   break;
1369cdf0e10cSrcweir         case XML_Delay:                 mnDelay = AttributeConversion::decodeInteger( rValue );         break;
1370cdf0e10cSrcweir         default:                        AxControlModelBase::importProperty( nPropId, rValue );
1371cdf0e10cSrcweir     }
1372cdf0e10cSrcweir }
1373cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)1374cdf0e10cSrcweir bool AxSpinButtonModel::importBinaryModel( BinaryInputStream& rInStrm )
1375cdf0e10cSrcweir {
1376cdf0e10cSrcweir     AxBinaryPropertyReader aReader( rInStrm );
1377cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnArrowColor );
1378cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBackColor );
1379cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnFlags );
1380cdf0e10cSrcweir     aReader.readPairProperty( maSize );
1381cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // unused
1382cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnMin );
1383cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnMax );
1384cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnPosition );
1385cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // prev enabled
1386cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // next enabled
1387cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnSmallChange );
1388cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnOrientation );
1389cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnDelay );
1390cdf0e10cSrcweir     aReader.skipPictureProperty(); // mouse icon
1391cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
1392cdf0e10cSrcweir     return aReader.finalizeImport();
1393cdf0e10cSrcweir }
1394cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1395cdf0e10cSrcweir void AxSpinButtonModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1396cdf0e10cSrcweir {
1397cdf0e10cSrcweir     sal_Int32 nMin = ::std::min( mnMin, mnMax );
1398cdf0e10cSrcweir     sal_Int32 nMax = ::std::max( mnMin, mnMax );
1399cdf0e10cSrcweir     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) );
1400cdf0e10cSrcweir     rPropMap.setProperty( PROP_SpinValueMin, nMin );
1401cdf0e10cSrcweir     rPropMap.setProperty( PROP_SpinValueMax, nMax );
1402cdf0e10cSrcweir     rPropMap.setProperty( PROP_SpinIncrement, mnSmallChange );
1403cdf0e10cSrcweir     rPropMap.setProperty( mbAwtModel ? PROP_SpinValue : PROP_DefaultSpinValue, mnPosition );
1404cdf0e10cSrcweir     rPropMap.setProperty( PROP_Repeat, true );
1405cdf0e10cSrcweir     rPropMap.setProperty( PROP_RepeatDelay, mnDelay );
1406cdf0e10cSrcweir     rPropMap.setProperty( PROP_Border, API_BORDER_NONE );
1407cdf0e10cSrcweir     rConv.convertColor( rPropMap, PROP_SymbolColor, mnArrowColor );
1408cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_NOTSUPPORTED );
1409cdf0e10cSrcweir     rConv.convertAxOrientation( rPropMap, maSize, mnOrientation );
1410cdf0e10cSrcweir     AxControlModelBase::convertProperties( rPropMap, rConv );
1411cdf0e10cSrcweir }
1412cdf0e10cSrcweir 
1413cdf0e10cSrcweir // ============================================================================
1414cdf0e10cSrcweir 
AxScrollBarModel()1415cdf0e10cSrcweir AxScrollBarModel::AxScrollBarModel() :
1416cdf0e10cSrcweir     mnArrowColor( AX_SYSCOLOR_BUTTONTEXT ),
1417cdf0e10cSrcweir     mnBackColor( AX_SYSCOLOR_BUTTONFACE ),
1418cdf0e10cSrcweir     mnFlags( AX_SCROLLBAR_DEFFLAGS ),
1419cdf0e10cSrcweir     mnOrientation( AX_ORIENTATION_AUTO ),
1420cdf0e10cSrcweir     mnPropThumb( AX_PROPTHUMB_ON ),
1421cdf0e10cSrcweir     mnMin( 0 ),
1422cdf0e10cSrcweir     mnMax( 32767 ),
1423cdf0e10cSrcweir     mnPosition( 0 ),
1424cdf0e10cSrcweir     mnSmallChange( 1 ),
1425cdf0e10cSrcweir     mnLargeChange( 1 ),
1426cdf0e10cSrcweir     mnDelay( 50 )
1427cdf0e10cSrcweir {
1428cdf0e10cSrcweir }
1429cdf0e10cSrcweir 
getControlType() const1430cdf0e10cSrcweir ApiControlType AxScrollBarModel::getControlType() const
1431cdf0e10cSrcweir {
1432cdf0e10cSrcweir     return API_CONTROL_SCROLLBAR;
1433cdf0e10cSrcweir }
1434cdf0e10cSrcweir 
importProperty(sal_Int32 nPropId,const OUString & rValue)1435cdf0e10cSrcweir void AxScrollBarModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
1436cdf0e10cSrcweir {
1437cdf0e10cSrcweir     switch( nPropId )
1438cdf0e10cSrcweir     {
1439cdf0e10cSrcweir         case XML_ForeColor:             mnArrowColor = AttributeConversion::decodeUnsigned( rValue );   break;
1440cdf0e10cSrcweir         case XML_BackColor:             mnBackColor = AttributeConversion::decodeUnsigned( rValue );    break;
1441cdf0e10cSrcweir         case XML_VariousPropertyBits:   mnFlags = AttributeConversion::decodeUnsigned( rValue );        break;
1442cdf0e10cSrcweir         case XML_Orientation:           mnOrientation = AttributeConversion::decodeInteger( rValue );   break;
1443cdf0e10cSrcweir         case XML_ProportionalThumb:     mnPropThumb = AttributeConversion::decodeInteger( rValue );     break;
1444cdf0e10cSrcweir         case XML_Min:                   mnMin = AttributeConversion::decodeInteger( rValue );           break;
1445cdf0e10cSrcweir         case XML_Max:                   mnMax = AttributeConversion::decodeInteger( rValue );           break;
1446cdf0e10cSrcweir         case XML_Position:              mnPosition = AttributeConversion::decodeInteger( rValue );      break;
1447cdf0e10cSrcweir         case XML_SmallChange:           mnSmallChange = AttributeConversion::decodeInteger( rValue );   break;
1448cdf0e10cSrcweir         case XML_LargeChange:           mnLargeChange = AttributeConversion::decodeInteger( rValue );   break;
1449cdf0e10cSrcweir         case XML_Delay:                 mnDelay = AttributeConversion::decodeInteger( rValue );         break;
1450cdf0e10cSrcweir         default:                        AxControlModelBase::importProperty( nPropId, rValue );
1451cdf0e10cSrcweir     }
1452cdf0e10cSrcweir }
1453cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)1454cdf0e10cSrcweir bool AxScrollBarModel::importBinaryModel( BinaryInputStream& rInStrm )
1455cdf0e10cSrcweir {
1456cdf0e10cSrcweir     AxBinaryPropertyReader aReader( rInStrm );
1457cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnArrowColor );
1458cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBackColor );
1459cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnFlags );
1460cdf0e10cSrcweir     aReader.readPairProperty( maSize );
1461cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
1462cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnMin );
1463cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnMax );
1464cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnPosition );
1465cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // unused
1466cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // prev enabled
1467cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // next enabled
1468cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnSmallChange );
1469cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnLargeChange );
1470cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnOrientation );
1471cdf0e10cSrcweir     aReader.readIntProperty< sal_Int16 >( mnPropThumb );
1472cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnDelay );
1473cdf0e10cSrcweir     aReader.skipPictureProperty(); // mouse icon
1474cdf0e10cSrcweir     return aReader.finalizeImport();
1475cdf0e10cSrcweir }
1476cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1477cdf0e10cSrcweir void AxScrollBarModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1478cdf0e10cSrcweir {
1479cdf0e10cSrcweir     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) );
1480cdf0e10cSrcweir     rPropMap.setProperty( PROP_RepeatDelay, mnDelay );
1481cdf0e10cSrcweir     rPropMap.setProperty( PROP_Border, API_BORDER_NONE );
1482cdf0e10cSrcweir     if( (mnPropThumb == AX_PROPTHUMB_ON) && (mnMin != mnMax) && (mnLargeChange > 0) )
1483cdf0e10cSrcweir     {
1484cdf0e10cSrcweir         // use double to prevent integer overflow in division (fInterval+mnLargeChange may become 0 when performed as int)
1485cdf0e10cSrcweir         double fInterval = fabs( static_cast< double >( mnMax - mnMin ) );
1486cdf0e10cSrcweir         sal_Int32 nThumbLen = getLimitedValue< sal_Int32, double >( (fInterval * mnLargeChange) / (fInterval + mnLargeChange), 1, SAL_MAX_INT32 );
1487cdf0e10cSrcweir         rPropMap.setProperty( PROP_VisibleSize, nThumbLen );
1488cdf0e10cSrcweir     }
1489cdf0e10cSrcweir     rConv.convertColor( rPropMap, PROP_SymbolColor, mnArrowColor );
1490cdf0e10cSrcweir     rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_NOTSUPPORTED );
1491cdf0e10cSrcweir     rConv.convertAxOrientation( rPropMap, maSize, mnOrientation );
1492cdf0e10cSrcweir     rConv.convertScrollBar( rPropMap, mnMin, mnMax, mnPosition, mnSmallChange, mnLargeChange, mbAwtModel );
1493cdf0e10cSrcweir     AxControlModelBase::convertProperties( rPropMap, rConv );
1494cdf0e10cSrcweir }
1495cdf0e10cSrcweir 
1496cdf0e10cSrcweir // ============================================================================
1497cdf0e10cSrcweir 
AxTabStripModel()1498cdf0e10cSrcweir AxTabStripModel::AxTabStripModel() :
1499cdf0e10cSrcweir     AxFontDataModel( false ),   // no support for alignment properties
1500cdf0e10cSrcweir     mnBackColor( AX_SYSCOLOR_BUTTONFACE ),
1501cdf0e10cSrcweir     mnTextColor( AX_SYSCOLOR_BUTTONTEXT ),
1502cdf0e10cSrcweir     mnFlags( AX_TABSTRIP_DEFFLAGS ),
1503cdf0e10cSrcweir     mnSelectedTab( -1 ),
1504cdf0e10cSrcweir     mnTabStyle( AX_TABSTRIP_TABS ),
1505cdf0e10cSrcweir     mnTabFlagCount( 0 )
1506cdf0e10cSrcweir {
1507cdf0e10cSrcweir }
1508cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)1509cdf0e10cSrcweir bool AxTabStripModel::importBinaryModel( BinaryInputStream& rInStrm )
1510cdf0e10cSrcweir {
1511cdf0e10cSrcweir     AxBinaryPropertyReader aReader( rInStrm );
1512cdf0e10cSrcweir     aReader.readIntProperty< sal_Int32 >( mnSelectedTab );
1513cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBackColor );
1514cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnTextColor );
1515cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1516cdf0e10cSrcweir     aReader.readPairProperty( maSize );
1517cdf0e10cSrcweir     aReader.readStringArrayProperty( maCaptions );
1518cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
1519cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1520cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // tab orientation
1521cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnTabStyle );
1522cdf0e10cSrcweir     aReader.skipBoolProperty(); // multiple rows
1523cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // fixed width
1524cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // fixed height
1525cdf0e10cSrcweir     aReader.skipBoolProperty(); // tooltips
1526cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1527cdf0e10cSrcweir     aReader.skipStringArrayProperty(); // tooltip strings
1528cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1529cdf0e10cSrcweir     aReader.skipStringArrayProperty(); // tab names
1530cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnFlags );
1531cdf0e10cSrcweir     aReader.skipBoolProperty(); // new version
1532cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // tabs allocated
1533cdf0e10cSrcweir     aReader.skipStringArrayProperty(); // tags
1534cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnTabFlagCount );
1535cdf0e10cSrcweir     aReader.skipStringArrayProperty(); // accelerators
1536cdf0e10cSrcweir     aReader.skipPictureProperty(); // mouse icon
1537cdf0e10cSrcweir     return aReader.finalizeImport() && AxFontDataModel::importBinaryModel( rInStrm );
1538cdf0e10cSrcweir }
1539cdf0e10cSrcweir 
getControlType() const1540cdf0e10cSrcweir ApiControlType AxTabStripModel::getControlType() const
1541cdf0e10cSrcweir {
1542cdf0e10cSrcweir     return API_CONTROL_TABSTRIP;
1543cdf0e10cSrcweir }
1544cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1545cdf0e10cSrcweir void AxTabStripModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1546cdf0e10cSrcweir {
1547cdf0e10cSrcweir     rPropMap.setProperty( PROP_Decoration, mnTabStyle != AX_TABSTRIP_NONE );
1548cdf0e10cSrcweir     rPropMap.setProperty( PROP_MultiPageValue, mnSelectedTab );
1549cdf0e10cSrcweir     rConv.convertColor( rPropMap, PROP_BackgroundColor, mnBackColor );
1550cdf0e10cSrcweir     AxFontDataModel::convertProperties( rPropMap, rConv );
1551cdf0e10cSrcweir }
1552cdf0e10cSrcweir 
getCaption(sal_Int32 nIndex) const1553cdf0e10cSrcweir OUString AxTabStripModel::getCaption( sal_Int32 nIndex ) const
1554cdf0e10cSrcweir {
1555cdf0e10cSrcweir     return ContainerHelper::getVectorElement( maCaptions, nIndex, OUString() );
1556cdf0e10cSrcweir }
1557cdf0e10cSrcweir 
1558cdf0e10cSrcweir // ============================================================================
1559cdf0e10cSrcweir 
AxContainerModelBase(bool bFontSupport)1560cdf0e10cSrcweir AxContainerModelBase::AxContainerModelBase( bool bFontSupport ) :
1561cdf0e10cSrcweir     AxFontDataModel( false ),   // no support for alignment properties
1562cdf0e10cSrcweir     maLogicalSize( AX_CONTAINER_DEFWIDTH, AX_CONTAINER_DEFHEIGHT ),
1563cdf0e10cSrcweir     maScrollPos( 0, 0 ),
1564cdf0e10cSrcweir     mnBackColor( AX_SYSCOLOR_BUTTONFACE ),
1565cdf0e10cSrcweir     mnTextColor( AX_SYSCOLOR_BUTTONTEXT ),
1566cdf0e10cSrcweir     mnFlags( AX_CONTAINER_DEFFLAGS ),
1567cdf0e10cSrcweir     mnBorderColor( AX_SYSCOLOR_BUTTONTEXT ),
1568cdf0e10cSrcweir     mnBorderStyle( AX_BORDERSTYLE_NONE ),
1569cdf0e10cSrcweir     mnScrollBars( AX_CONTAINER_SCR_NONE ),
1570cdf0e10cSrcweir     mnCycleType( AX_CONTAINER_CYCLEALL ),
1571cdf0e10cSrcweir     mnSpecialEffect( AX_SPECIALEFFECT_FLAT ),
1572cdf0e10cSrcweir     mnPicAlign( AX_PICALIGN_CENTER ),
1573cdf0e10cSrcweir     mnPicSizeMode( AX_PICSIZE_CLIP ),
1574cdf0e10cSrcweir     mbPicTiling( false ),
1575cdf0e10cSrcweir     mbFontSupport( bFontSupport )
1576cdf0e10cSrcweir {
1577cdf0e10cSrcweir     setAwtModelMode();
1578cdf0e10cSrcweir     // different default size for frame
1579cdf0e10cSrcweir     maSize = AxPairData( AX_CONTAINER_DEFWIDTH, AX_CONTAINER_DEFHEIGHT );
1580cdf0e10cSrcweir }
1581cdf0e10cSrcweir 
importProperty(sal_Int32 nPropId,const OUString & rValue)1582cdf0e10cSrcweir void AxContainerModelBase::importProperty( sal_Int32 nPropId, const OUString& rValue )
1583cdf0e10cSrcweir {
1584cdf0e10cSrcweir     if( nPropId == XML_Caption )
1585cdf0e10cSrcweir         maCaption = rValue;
1586cdf0e10cSrcweir }
1587cdf0e10cSrcweir 
importBinaryModel(BinaryInputStream & rInStrm)1588cdf0e10cSrcweir bool AxContainerModelBase::importBinaryModel( BinaryInputStream& rInStrm )
1589cdf0e10cSrcweir {
1590cdf0e10cSrcweir     AxBinaryPropertyReader aReader( rInStrm );
1591cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1592cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBackColor );
1593cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnTextColor );
1594cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // next availbale control ID
1595cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1596cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1597cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnFlags );
1598cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnBorderStyle );
1599cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
1600cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnScrollBars );
1601cdf0e10cSrcweir     aReader.readPairProperty( maSize );
1602cdf0e10cSrcweir     aReader.readPairProperty( maLogicalSize );
1603cdf0e10cSrcweir     aReader.readPairProperty( maScrollPos );
1604cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // number of control groups
1605cdf0e10cSrcweir     aReader.skipUndefinedProperty();
1606cdf0e10cSrcweir     aReader.skipPictureProperty(); // mouse icon
1607cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnCycleType );
1608cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnSpecialEffect );
1609cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt32 >( mnBorderColor );
1610cdf0e10cSrcweir     aReader.readStringProperty( maCaption );
1611cdf0e10cSrcweir     aReader.readFontProperty( maFontData );
1612cdf0e10cSrcweir     aReader.readPictureProperty( maPictureData );
1613cdf0e10cSrcweir     aReader.skipIntProperty< sal_Int32 >(); // zoom
1614cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnPicAlign );
1615cdf0e10cSrcweir     aReader.readBoolProperty( mbPicTiling );
1616cdf0e10cSrcweir     aReader.readIntProperty< sal_uInt8 >( mnPicSizeMode );
1617cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // shape cookie
1618cdf0e10cSrcweir     aReader.skipIntProperty< sal_uInt32 >(); // draw buffer size
1619cdf0e10cSrcweir     return aReader.finalizeImport();
1620cdf0e10cSrcweir }
1621cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1622cdf0e10cSrcweir void AxContainerModelBase::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1623cdf0e10cSrcweir {
1624cdf0e10cSrcweir     if( mbFontSupport )
1625cdf0e10cSrcweir     {
1626cdf0e10cSrcweir         rConv.convertColor( rPropMap, PROP_TextColor, mnTextColor );
1627cdf0e10cSrcweir         AxFontDataModel::convertProperties( rPropMap, rConv );
1628cdf0e10cSrcweir     }
1629cdf0e10cSrcweir }
1630cdf0e10cSrcweir 
importClassTable(BinaryInputStream & rInStrm,AxClassTable & orClassTable)1631cdf0e10cSrcweir bool AxContainerModelBase::importClassTable( BinaryInputStream& rInStrm, AxClassTable& orClassTable )
1632cdf0e10cSrcweir {
1633cdf0e10cSrcweir     bool bValid = true;
1634cdf0e10cSrcweir     orClassTable.clear();
1635cdf0e10cSrcweir     if( !getFlag( mnFlags, AX_CONTAINER_NOCLASSTABLE ) )
1636cdf0e10cSrcweir     {
1637cdf0e10cSrcweir         sal_uInt16 nCount = rInStrm.readuInt16();
1638cdf0e10cSrcweir         for( sal_uInt16 nIndex = 0; bValid && (nIndex < nCount); ++nIndex )
1639cdf0e10cSrcweir         {
1640cdf0e10cSrcweir             orClassTable.push_back( OUString() );
1641cdf0e10cSrcweir             AxBinaryPropertyReader aReader( rInStrm );
1642cdf0e10cSrcweir             aReader.readGuidProperty( orClassTable.back() );
1643cdf0e10cSrcweir             aReader.skipGuidProperty(); // source interface GUID
1644cdf0e10cSrcweir             aReader.skipUndefinedProperty();
1645cdf0e10cSrcweir             aReader.skipGuidProperty(); // default interface GUID
1646cdf0e10cSrcweir             aReader.skipIntProperty< sal_uInt32 >(); // class table and var flags
1647cdf0e10cSrcweir             aReader.skipIntProperty< sal_uInt32 >(); // method count
1648cdf0e10cSrcweir             aReader.skipIntProperty< sal_Int32 >(); // IDispatch identifier for linked cell access
1649cdf0e10cSrcweir             aReader.skipIntProperty< sal_uInt16 >(); // get function index for linked cell access
1650cdf0e10cSrcweir             aReader.skipIntProperty< sal_uInt16 >(); // put function index for linked cell access
1651cdf0e10cSrcweir             aReader.skipIntProperty< sal_uInt16 >(); // linked cell access property type
1652cdf0e10cSrcweir             aReader.skipIntProperty< sal_uInt16 >(); // get function index of value
1653cdf0e10cSrcweir             aReader.skipIntProperty< sal_uInt16 >(); // put function index of value
1654cdf0e10cSrcweir             aReader.skipIntProperty< sal_uInt16 >(); // value type
1655cdf0e10cSrcweir             aReader.skipIntProperty< sal_Int32 >(); // IDispatch identifier for source range access
1656cdf0e10cSrcweir             aReader.skipIntProperty< sal_uInt16 >(); // get function index for source range access
1657cdf0e10cSrcweir             bValid = aReader.finalizeImport();
1658cdf0e10cSrcweir         }
1659cdf0e10cSrcweir     }
1660cdf0e10cSrcweir     return bValid;
1661cdf0e10cSrcweir }
1662cdf0e10cSrcweir 
1663cdf0e10cSrcweir // ============================================================================
1664cdf0e10cSrcweir 
AxFrameModel()1665cdf0e10cSrcweir AxFrameModel::AxFrameModel() :
1666cdf0e10cSrcweir     AxContainerModelBase( true )
1667cdf0e10cSrcweir {
1668cdf0e10cSrcweir }
1669cdf0e10cSrcweir 
getControlType() const1670cdf0e10cSrcweir ApiControlType AxFrameModel::getControlType() const
1671cdf0e10cSrcweir {
1672cdf0e10cSrcweir     return API_CONTROL_GROUPBOX;
1673cdf0e10cSrcweir }
1674cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1675cdf0e10cSrcweir void AxFrameModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1676cdf0e10cSrcweir {
1677cdf0e10cSrcweir     rPropMap.setProperty( PROP_Label, maCaption );
1678cdf0e10cSrcweir     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_CONTAINER_ENABLED ) );
1679cdf0e10cSrcweir     AxContainerModelBase::convertProperties( rPropMap, rConv );
1680cdf0e10cSrcweir }
1681cdf0e10cSrcweir 
1682cdf0e10cSrcweir // ============================================================================
1683cdf0e10cSrcweir 
AxFormPageModel()1684cdf0e10cSrcweir AxFormPageModel::AxFormPageModel()
1685cdf0e10cSrcweir {
1686cdf0e10cSrcweir }
1687cdf0e10cSrcweir 
getControlType() const1688cdf0e10cSrcweir ApiControlType AxFormPageModel::getControlType() const
1689cdf0e10cSrcweir {
1690cdf0e10cSrcweir     return API_CONTROL_PAGE;
1691cdf0e10cSrcweir }
1692cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1693cdf0e10cSrcweir void AxFormPageModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1694cdf0e10cSrcweir {
1695cdf0e10cSrcweir     rPropMap.setProperty( PROP_Title, maCaption );
1696cdf0e10cSrcweir     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_CONTAINER_ENABLED ) );
1697cdf0e10cSrcweir     rConv.convertColor( rPropMap, PROP_BackgroundColor, mnBackColor );
1698cdf0e10cSrcweir     AxContainerModelBase::convertProperties( rPropMap, rConv );
1699cdf0e10cSrcweir }
1700cdf0e10cSrcweir 
1701cdf0e10cSrcweir // ============================================================================
1702cdf0e10cSrcweir 
AxMultiPageModel()1703cdf0e10cSrcweir AxMultiPageModel::AxMultiPageModel()
1704cdf0e10cSrcweir {
1705cdf0e10cSrcweir }
1706cdf0e10cSrcweir 
getControlType() const1707cdf0e10cSrcweir ApiControlType AxMultiPageModel::getControlType() const
1708cdf0e10cSrcweir {
1709cdf0e10cSrcweir     return API_CONTROL_MULTIPAGE;
1710cdf0e10cSrcweir }
1711cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1712cdf0e10cSrcweir void AxMultiPageModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1713cdf0e10cSrcweir {
1714cdf0e10cSrcweir     rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_CONTAINER_ENABLED ) );
1715cdf0e10cSrcweir     if( mxTabStrip.get() )
1716cdf0e10cSrcweir         mxTabStrip->convertProperties( rPropMap, rConv );
1717cdf0e10cSrcweir     AxContainerModelBase::convertProperties( rPropMap, rConv );
1718cdf0e10cSrcweir }
1719cdf0e10cSrcweir 
setTabStripModel(const AxTabStripModelRef & rxTabStrip)1720cdf0e10cSrcweir void AxMultiPageModel::setTabStripModel( const AxTabStripModelRef& rxTabStrip )
1721cdf0e10cSrcweir {
1722cdf0e10cSrcweir     mxTabStrip = rxTabStrip;
1723cdf0e10cSrcweir }
1724cdf0e10cSrcweir 
1725cdf0e10cSrcweir // ============================================================================
1726cdf0e10cSrcweir 
AxUserFormModel()1727cdf0e10cSrcweir AxUserFormModel::AxUserFormModel()
1728cdf0e10cSrcweir {
1729cdf0e10cSrcweir }
1730cdf0e10cSrcweir 
getControlType() const1731cdf0e10cSrcweir ApiControlType AxUserFormModel::getControlType() const
1732cdf0e10cSrcweir {
1733cdf0e10cSrcweir     return API_CONTROL_DIALOG;
1734cdf0e10cSrcweir }
1735cdf0e10cSrcweir 
convertProperties(PropertyMap & rPropMap,const ControlConverter & rConv) const1736cdf0e10cSrcweir void AxUserFormModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
1737cdf0e10cSrcweir {
1738cdf0e10cSrcweir     rPropMap.setProperty( PROP_Title, maCaption );
1739cdf0e10cSrcweir     rConv.convertColor( rPropMap, PROP_BackgroundColor, mnBackColor );
1740cdf0e10cSrcweir     AxContainerModelBase::convertProperties( rPropMap, rConv );
1741cdf0e10cSrcweir }
1742cdf0e10cSrcweir 
1743cdf0e10cSrcweir // ============================================================================
1744cdf0e10cSrcweir 
EmbeddedControl(const OUString & rName)1745cdf0e10cSrcweir EmbeddedControl::EmbeddedControl( const OUString& rName ) :
1746cdf0e10cSrcweir     maName( rName )
1747cdf0e10cSrcweir {
1748cdf0e10cSrcweir }
1749cdf0e10cSrcweir 
~EmbeddedControl()1750cdf0e10cSrcweir EmbeddedControl::~EmbeddedControl()
1751cdf0e10cSrcweir {
1752cdf0e10cSrcweir }
1753cdf0e10cSrcweir 
createModelFromGuid(const OUString & rClassId)1754cdf0e10cSrcweir ControlModelBase* EmbeddedControl::createModelFromGuid( const OUString& rClassId )
1755cdf0e10cSrcweir {
1756cdf0e10cSrcweir     OUString aClassId = rClassId.toAsciiUpperCase();
1757cdf0e10cSrcweir 
1758cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_COMMANDBUTTON ) )     return &createModel< AxCommandButtonModel >();
1759cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_LABEL ) )             return &createModel< AxLabelModel >();
1760cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_IMAGE ) )             return &createModel< AxImageModel >();
1761cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_TOGGLEBUTTON ) )      return &createModel< AxToggleButtonModel >();
1762cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_CHECKBOX ) )          return &createModel< AxCheckBoxModel >();
1763cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_OPTIONBUTTON ) )      return &createModel< AxOptionButtonModel >();
1764cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_TEXTBOX ) )           return &createModel< AxTextBoxModel >();
1765cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_LISTBOX ) )           return &createModel< AxListBoxModel >();
1766cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_COMBOBOX ) )          return &createModel< AxComboBoxModel >();
1767cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_SPINBUTTON ) )        return &createModel< AxSpinButtonModel >();
1768cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_SCROLLBAR ) )         return &createModel< AxScrollBarModel >();
1769cdf0e10cSrcweir     if( aClassId.equalsAscii( AX_GUID_FRAME ) )             return &createModel< AxFrameModel >();
1770cdf0e10cSrcweir     if( aClassId.equalsAscii( COMCTL_GUID_SCROLLBAR_60 ) )  return &createModel< ComCtlScrollBarModel >( COMCTL_VERSION_60 );
1771cdf0e10cSrcweir 
1772cdf0e10cSrcweir     mxModel.reset();
1773cdf0e10cSrcweir     return 0;
1774cdf0e10cSrcweir }
1775cdf0e10cSrcweir 
getServiceName() const1776cdf0e10cSrcweir OUString EmbeddedControl::getServiceName() const
1777cdf0e10cSrcweir {
1778cdf0e10cSrcweir     return mxModel.get() ? mxModel->getServiceName() : OUString();
1779cdf0e10cSrcweir }
1780cdf0e10cSrcweir 
convertProperties(const Reference<XControlModel> & rxCtrlModel,const ControlConverter & rConv) const1781cdf0e10cSrcweir bool EmbeddedControl::convertProperties( const Reference< XControlModel >& rxCtrlModel, const ControlConverter& rConv ) const
1782cdf0e10cSrcweir {
1783cdf0e10cSrcweir     if( mxModel.get() && rxCtrlModel.is() && (maName.getLength() > 0) )
1784cdf0e10cSrcweir     {
1785cdf0e10cSrcweir         PropertyMap aPropMap;
1786cdf0e10cSrcweir         aPropMap.setProperty( PROP_Name, maName );
1787cdf0e10cSrcweir         mxModel->convertProperties( aPropMap, rConv );
1788cdf0e10cSrcweir         PropertySet aPropSet( rxCtrlModel );
1789cdf0e10cSrcweir         aPropSet.setProperties( aPropMap );
1790cdf0e10cSrcweir         return true;
1791cdf0e10cSrcweir     }
1792cdf0e10cSrcweir     return false;
1793cdf0e10cSrcweir }
1794cdf0e10cSrcweir 
1795cdf0e10cSrcweir // ============================================================================
1796cdf0e10cSrcweir 
EmbeddedForm(const Reference<XModel> & rxDocModel,const Reference<XDrawPage> & rxDrawPage,const GraphicHelper & rGraphicHelper,bool bDefaultColorBgr)1797cdf0e10cSrcweir EmbeddedForm::EmbeddedForm( const Reference< XModel >& rxDocModel,
1798cdf0e10cSrcweir         const Reference< XDrawPage >& rxDrawPage, const GraphicHelper& rGraphicHelper, bool bDefaultColorBgr ) :
1799cdf0e10cSrcweir     maControlConv( rxDocModel, rGraphicHelper, bDefaultColorBgr ),
1800cdf0e10cSrcweir     mxModelFactory( rxDocModel, UNO_QUERY ),
1801cdf0e10cSrcweir     mxFormsSupp( rxDrawPage, UNO_QUERY )
1802cdf0e10cSrcweir {
1803cdf0e10cSrcweir     OSL_ENSURE( mxModelFactory.is(), "EmbeddedForm::EmbeddedForm - missing service factory" );
1804cdf0e10cSrcweir }
1805cdf0e10cSrcweir 
convertAndInsert(const EmbeddedControl & rControl,sal_Int32 & rnCtrlIndex)1806cdf0e10cSrcweir Reference< XControlModel > EmbeddedForm::convertAndInsert( const EmbeddedControl& rControl, sal_Int32& rnCtrlIndex )
1807cdf0e10cSrcweir {
1808cdf0e10cSrcweir     if( mxModelFactory.is() && rControl.hasModel() ) try
1809cdf0e10cSrcweir     {
1810cdf0e10cSrcweir         // create the UNO control model
1811cdf0e10cSrcweir         OUString aServiceName = rControl.getServiceName();
1812cdf0e10cSrcweir         Reference< XFormComponent > xFormComp( mxModelFactory->createInstance( aServiceName ), UNO_QUERY_THROW );
1813cdf0e10cSrcweir         Reference< XControlModel > xCtrlModel( xFormComp, UNO_QUERY_THROW );
1814cdf0e10cSrcweir 
1815cdf0e10cSrcweir         // insert the control into the form
1816cdf0e10cSrcweir         Reference< XIndexContainer > xFormIC( createXForm(), UNO_SET_THROW );
1817cdf0e10cSrcweir         rnCtrlIndex = xFormIC->getCount();
1818cdf0e10cSrcweir         xFormIC->insertByIndex( rnCtrlIndex, Any( xFormComp ) );
1819cdf0e10cSrcweir 
1820cdf0e10cSrcweir         // convert the control properties
1821cdf0e10cSrcweir         if( rControl.convertProperties( xCtrlModel, maControlConv ) )
1822cdf0e10cSrcweir             return xCtrlModel;
1823cdf0e10cSrcweir     }
1824cdf0e10cSrcweir     catch( Exception& )
1825cdf0e10cSrcweir     {
1826cdf0e10cSrcweir     }
1827cdf0e10cSrcweir     return Reference< XControlModel >();
1828cdf0e10cSrcweir }
1829cdf0e10cSrcweir 
createXForm()1830cdf0e10cSrcweir Reference< XIndexContainer > EmbeddedForm::createXForm()
1831cdf0e10cSrcweir {
1832cdf0e10cSrcweir     if( mxFormsSupp.is() )
1833cdf0e10cSrcweir     {
1834cdf0e10cSrcweir         try
1835cdf0e10cSrcweir         {
1836cdf0e10cSrcweir             Reference< XNameContainer > xFormsNC( mxFormsSupp->getForms(), UNO_SET_THROW );
1837cdf0e10cSrcweir             OUString aFormName = CREATE_OUSTRING( "Standard" );
1838cdf0e10cSrcweir             if( xFormsNC->hasByName( aFormName ) )
1839cdf0e10cSrcweir             {
1840cdf0e10cSrcweir                 mxFormIC.set( xFormsNC->getByName( aFormName ), UNO_QUERY_THROW );
1841cdf0e10cSrcweir             }
1842cdf0e10cSrcweir             else if( mxModelFactory.is() )
1843cdf0e10cSrcweir             {
1844cdf0e10cSrcweir                 Reference< XForm > xForm( mxModelFactory->createInstance( CREATE_OUSTRING( "com.sun.star.form.component.Form" ) ), UNO_QUERY_THROW );
1845cdf0e10cSrcweir                 xFormsNC->insertByName( aFormName, Any( xForm ) );
1846cdf0e10cSrcweir                 mxFormIC.set( xForm, UNO_QUERY_THROW );
1847cdf0e10cSrcweir             }
1848cdf0e10cSrcweir         }
1849cdf0e10cSrcweir         catch( Exception& )
1850cdf0e10cSrcweir         {
1851cdf0e10cSrcweir         }
1852cdf0e10cSrcweir         // always clear the forms supplier to not try to create the form again
1853cdf0e10cSrcweir         mxFormsSupp.clear();
1854cdf0e10cSrcweir     }
1855cdf0e10cSrcweir     return mxFormIC;
1856cdf0e10cSrcweir }
1857cdf0e10cSrcweir 
1858cdf0e10cSrcweir // ============================================================================
1859cdf0e10cSrcweir 
1860cdf0e10cSrcweir } // namespace ole
1861cdf0e10cSrcweir } // namespace oox
1862