22 #include <com/sun/star/beans/NamedValue.hpp>
23 #include <com/sun/star/container/XIndexContainer.hpp>
24 #include <com/sun/star/container/XNameContainer.hpp>
25 #include <com/sun/star/embed/Aspects.hpp>
26 #include <com/sun/star/embed/XEmbeddedObject.hpp>
27 #include <com/sun/star/embed/XEmbedPersist.hpp>
28 #include <com/sun/star/awt/PushButtonType.hpp>
29 #include <com/sun/star/awt/ScrollBarOrientation.hpp>
30 #include <com/sun/star/awt/VisualEffect.hpp>
31 #include <com/sun/star/style/VerticalAlignment.hpp>
32 #include <com/sun/star/drawing/XControlShape.hpp>
33 #include <com/sun/star/form/XForm.hpp>
34 #include <com/sun/star/form/XFormsSupplier.hpp>
35 #include <com/sun/star/form/binding/XBindableValue.hpp>
36 #include <com/sun/star/form/binding/XValueBinding.hpp>
37 #include <com/sun/star/form/binding/XListEntrySink.hpp>
38 #include <com/sun/star/form/binding/XListEntrySource.hpp>
39 #include <com/sun/star/script/ScriptEventDescriptor.hpp>
40 #include <com/sun/star/script/XEventAttacherManager.hpp>
41 #include <com/sun/star/beans/XPropertySet.hpp>
42 #include <com/sun/star/frame/XModel.hpp>
101 #include <document.hxx>
104 #include <unonames.hxx>
107 #include <globstr.hrc>
129 using ::com::sun::star::uno::makeAny;
130 using ::com::sun::star::uno::Any;
131 using ::com::sun::star::beans::XPropertySet;
132 using ::com::sun::star::uno::makeAny;
133 using ::com::sun::star::uno::Exception;
134 using ::com::sun::star::uno::Reference;
135 using ::com::sun::star::uno::Sequence;
136 using ::com::sun::star::uno::UNO_QUERY;
137 using ::com::sun::star::uno::UNO_QUERY_THROW;
138 using ::com::sun::star::uno::UNO_SET_THROW;
139 using ::com::sun::star::beans::NamedValue;
140 using ::com::sun::star::lang::XMultiServiceFactory;
141 using ::com::sun::star::container::XIndexContainer;
142 using ::com::sun::star::container::XNameContainer;
143 using ::com::sun::star::frame::XModel;
144 using ::com::sun::star::awt::XControlModel;
145 using ::com::sun::star::embed::XEmbeddedObject;
146 using ::com::sun::star::embed::XEmbedPersist;
147 using ::com::sun::star::drawing::XControlShape;
148 using ::com::sun::star::drawing::XShape;
149 using ::com::sun::star::form::XFormComponent;
150 using ::com::sun::star::form::XFormsSupplier;
151 using ::com::sun::star::form::binding::XBindableValue;
152 using ::com::sun::star::form::binding::XValueBinding;
153 using ::com::sun::star::form::binding::XListEntrySink;
154 using ::com::sun::star::form::binding::XListEntrySource;
155 using ::com::sun::star::script::ScriptEventDescriptor;
156 using ::com::sun::star::script::XEventAttacherManager;
157 using ::com::sun::star::table::CellAddress;
158 using ::com::sun::star::table::CellRangeAddress;
169 mbHasAnchor( false ),
174 mbAutoMargin( true ),
175 mbSimpleMacro( true ),
176 mbProcessSdr( true ),
178 mbCustomDff( false ),
179 mbNotifyMacroEventRead( false )
198 case EXC_OBJTYPE_GROUP: xDrawObj= std::make_shared<XclImpGroupObj>( rRoot );
break;
199 case EXC_OBJTYPE_LINE: xDrawObj= std::make_shared<XclImpLineObj>( rRoot );
break;
201 case EXC_OBJTYPE_OVAL: xDrawObj= std::make_shared<XclImpOvalObj>( rRoot );
break;
202 case EXC_OBJTYPE_ARC: xDrawObj= std::make_shared<XclImpArcObj>( rRoot );
break;
203 case EXC_OBJTYPE_CHART: xDrawObj= std::make_shared<XclImpChartObj>( rRoot );
break;
204 case EXC_OBJTYPE_TEXT: xDrawObj= std::make_shared<XclImpTextObj>( rRoot );
break;
208 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj3 - unknown object type 0x" << std::hex << nObjType );
215 xDrawObj = std::make_shared<XclImpPhObj>(rRoot);
219 xDrawObj->ImplReadObj3( rStrm );
234 case EXC_OBJTYPE_GROUP: xDrawObj = std::make_shared<XclImpGroupObj>( rRoot );
break;
235 case EXC_OBJTYPE_LINE: xDrawObj = std::make_shared<XclImpLineObj>( rRoot );
break;
237 case EXC_OBJTYPE_OVAL: xDrawObj = std::make_shared<XclImpOvalObj>( rRoot );
break;
238 case EXC_OBJTYPE_ARC: xDrawObj = std::make_shared<XclImpArcObj>( rRoot );
break;
239 case EXC_OBJTYPE_CHART: xDrawObj = std::make_shared<XclImpChartObj>( rRoot );
break;
240 case EXC_OBJTYPE_TEXT: xDrawObj = std::make_shared<XclImpTextObj>( rRoot );
break;
241 case EXC_OBJTYPE_BUTTON: xDrawObj = std::make_shared<XclImpButtonObj>( rRoot );
break;
245 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj4 - unknown object type 0x" << std::hex << nObjType );
252 xDrawObj = std::make_shared<XclImpPhObj>(rRoot);
256 xDrawObj->ImplReadObj4( rStrm );
271 case EXC_OBJTYPE_GROUP: xDrawObj = std::make_shared<XclImpGroupObj>( rRoot );
break;
272 case EXC_OBJTYPE_LINE: xDrawObj = std::make_shared<XclImpLineObj>( rRoot );
break;
274 case EXC_OBJTYPE_OVAL: xDrawObj = std::make_shared<XclImpOvalObj>( rRoot );
break;
275 case EXC_OBJTYPE_ARC: xDrawObj = std::make_shared<XclImpArcObj>( rRoot );
break;
276 case EXC_OBJTYPE_CHART: xDrawObj = std::make_shared<XclImpChartObj>( rRoot );
break;
277 case EXC_OBJTYPE_TEXT: xDrawObj = std::make_shared<XclImpTextObj>( rRoot );
break;
278 case EXC_OBJTYPE_BUTTON: xDrawObj = std::make_shared<XclImpButtonObj>( rRoot );
break;
283 case EXC_OBJTYPE_EDIT: xDrawObj = std::make_shared<XclImpEditObj>( rRoot );
break;
284 case EXC_OBJTYPE_LABEL: xDrawObj = std::make_shared<XclImpLabelObj>( rRoot );
break;
285 case EXC_OBJTYPE_DIALOG: xDrawObj = std::make_shared<XclImpDialogObj>( rRoot );
break;
286 case EXC_OBJTYPE_SPIN: xDrawObj = std::make_shared<XclImpSpinButtonObj>( rRoot );
break;
292 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj5 - unknown object type 0x" << std::hex << nObjType );
294 xDrawObj = std::make_shared<XclImpPhObj>( rRoot );
298 OSL_ENSURE(xDrawObj,
"object import failed");
303 xDrawObj->ImplReadObj5( rStrm );
314 sal_uInt16 nSubRecId(0), nSubRecSize(0), nObjType(0);
318 OSL_ENSURE( nSubRecId ==
EXC_ID_OBJCMO,
"XclImpDrawObjBase::ReadObj8 - OBJCMO subrecord expected" );
326 xDrawObj = std::make_shared<XclImpTextObj>( rRoot );
328 xDrawObj->SetAreaObj(
false );
337 xDrawObj = std::make_shared<XclImpTextObj>( rRoot );
340 case EXC_OBJTYPE_GROUP: xDrawObj = std::make_shared<XclImpGroupObj>( rRoot );
break;
341 case EXC_OBJTYPE_CHART: xDrawObj = std::make_shared<XclImpChartObj>( rRoot );
break;
342 case EXC_OBJTYPE_BUTTON: xDrawObj = std::make_shared<XclImpButtonObj>( rRoot );
break;
346 case EXC_OBJTYPE_EDIT: xDrawObj = std::make_shared<XclImpEditObj>( rRoot );
break;
347 case EXC_OBJTYPE_LABEL: xDrawObj = std::make_shared<XclImpLabelObj>( rRoot );
break;
348 case EXC_OBJTYPE_DIALOG: xDrawObj = std::make_shared<XclImpDialogObj>( rRoot );
break;
349 case EXC_OBJTYPE_SPIN: xDrawObj = std::make_shared<XclImpSpinButtonObj>( rRoot );
break;
354 case EXC_OBJTYPE_NOTE: xDrawObj = std::make_shared<XclImpNoteObj>( rRoot );
break;
357 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj8 - unknown object type 0x" << std::hex << nObjType );
365 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj8 import failed, substituting placeholder");
366 xDrawObj = std::make_shared<XclImpPhObj>( rRoot );
370 xDrawObj->ImplReadObj8( rStrm );
381 const DffObjData& rDffObjData,
const OUString& rObjName,
const OUString& rHyperlink,
382 bool bVisible,
bool bAutoMargin )
463 if( xSdrObj && xSdrObj->IsUnoObj() &&
467 if( pSdrUnoObj !=
nullptr )
471 static constexpr OUStringLiteral sPropertyName(
u"ControlTypeinMSO");
473 enum { eCreateFromOffice = 0, eCreateFromMSTBXControl, eCreateFromMSOCXControl };
475 if(
mnObjType == 7 || (mnObjType < 25 && mnObjType > 10) )
480 const sal_Int16 nTBXControlType = eCreateFromMSTBXControl ;
481 xPropSet->setPropertyValue(sPropertyName,
Any(nTBXControlType));
485 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::CreateSdrObject, this control can't be set the property ControlTypeinMSO!");
491 static constexpr OUStringLiteral sObjIdPropertyName(
u"ObjIDinMSO");
497 const sal_Int16 nOCXControlType = eCreateFromMSOCXControl;
498 xPropSet->setPropertyValue(sPropertyName,
Any(nOCXControlType));
500 xPropSet->setPropertyValue(sObjIdPropertyName, makeAny<sal_uInt16>(
mnObjId));
504 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::CreateSdrObject, this control can't be set the property ObjIDinMSO!");
554 if (!sMacro.isEmpty())
556 pInfo->SetMacro(sMacro);
588 rStrm.
Ignore( nMacroSize );
596 rStrm.
Ignore( nMacroSize );
602 rStrm.
Ignore( nMacroSize );
612 sal_uInt16 nFmlaSize;
615 OSL_ENSURE( nFmlaSize == 7,
"XclImpDrawObjBase::ReadMacro - unexpected formula size" );
619 sal_uInt16 nExtSheet, nExtName;
624 "XclImpDrawObjBase::ReadMacro - tNameXR token expected" );
713 static const sal_uInt8 sppnPatterns[][ 8 ] =
715 { 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55 },
716 { 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD },
717 { 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22 },
718 { 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00 },
719 { 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC },
720 { 0x33, 0x66, 0xCC, 0x99, 0x33, 0x66, 0xCC, 0x99 },
721 { 0xCC, 0x66, 0x33, 0x99, 0xCC, 0x66, 0x33, 0x99 },
722 { 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33 },
723 { 0xCC, 0xFF, 0x33, 0xFF, 0xCC, 0xFF, 0x33, 0xFF },
724 { 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00 },
725 { 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 },
726 { 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88 },
727 { 0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11 },
728 { 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11 },
729 { 0xAA, 0x44, 0xAA, 0x11, 0xAA, 0x44, 0xAA, 0x11 },
730 { 0x88, 0x00, 0x22, 0x00, 0x88, 0x00, 0x22, 0x00 },
731 { 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x08, 0x00 }
739 for(
size_t nIdx = 0; nIdx < 8; ++nIdx )
743 ReadDIB(aBitmap, aMemStrm,
false);
748 ::std::swap( aPattColor, aBackColor );
848 sal_uInt16 nObjFlags, nMacroSize;
867 sal_uInt16 nObjFlags, nMacroSize;
887 sal_uInt16 nObjFlags, nMacroSize, nNameLen;
912 sal_uInt16 nSubRecId, nSubRecSize;
917 nSubRecSize =
static_cast< sal_uInt16
>( ::std::min< std::size_t >( nSubRecSize, rStrm.
GetRecLeft() ) );
922 OSL_ENSURE( rStrm.
GetRecPos() == 4,
"XclImpDrawObjBase::ImplReadObj8 - unexpected OBJCMO subrecord" );
923 if( (rStrm.
GetRecPos() == 4) && (nSubRecSize >= 6) )
925 sal_uInt16 nObjFlags;
943 rStrm.
Ignore( nSubRecSize );
960 sal_uInt32 nDataSize;
967 OSL_ENSURE( nDataSize >= rStrm.
GetRecLeft(),
"XclImpDrawObjBase::ImplReadObj8 - CONTINUE too long" );
968 nDataSize -= ::std::min< sal_uInt32 >( rStrm.
GetRecLeft(), nDataSize );
970 OSL_ENSURE( nDataSize == 0,
"XclImpDrawObjBase::ImplReadObj8 - missing CONTINUE records" );
978 if( pGroupObj->TryInsert( xDrawObj ) )
980 mObjs.push_back( xDrawObj );
985 return std::accumulate(
mObjs.begin(),
mObjs.end(), std::size_t(0),
986 [](
const std::size_t& rSum,
const XclImpDrawObjRef& rxObj) {
return rSum + rxObj->GetProgressSize(); });
997 mnFirstUngrouped( 0 )
1042 std::unique_ptr<SdrObjGroup, SdrObjectFreeOp> xSdrObj(
1044 *
GetDoc().GetDrawLayer()));
1046 SdrObjList& rObjList = *xSdrObj->GetSubList();
1114 *
GetDoc().GetDrawLayer(),
1121 bool bLineStart =
false;
1122 bool bLineEnd =
false;
1123 bool bFilled =
false;
1124 switch( nArrowType )
1126 case EXC_OBJ_ARROW_OPEN: bLineStart =
false; bLineEnd =
true; bFilled =
false;
break;
1131 if( bLineStart || bLineEnd )
1134 double fArrowWidth = 3.0;
1135 switch( nArrowWidth )
1143 double fArrowLength = 3.0;
1144 switch( nArrowLength )
1152 #define EXC_ARROW_POINT( x, y ) ::basegfx::B2DPoint( fArrowWidth * (x), fArrowLength * (y) )
1169 #undef EXC_ARROW_POINT
1233 *
GetDoc().GetDrawLayer(),
1249 *
GetDoc().GetDrawLayer(),
1298 nStartAngle = 0_deg100;
1299 nEndAngle = 9000_deg100;
1304 nStartAngle = 9000_deg100;
1305 nEndAngle = 18000_deg100;
1310 nStartAngle = 18000_deg100;
1311 nEndAngle = 27000_deg100;
1316 nStartAngle = 27000_deg100;
1317 nEndAngle = 0_deg100;
1325 *
GetDoc().GetDrawLayer(),
1348 OSL_ENSURE( rStrm.
GetRecLeft() / 4 ==
mnPointCount,
"XclImpPolygonObj::ReadCoordList - wrong polygon point count" );
1386 return ::basegfx::B2DPoint(
1387 rAnchorRect.
Left() +
static_cast< sal_Int32
>( ::std::min< double >( rPoint.X(), 16384.0 ) / 16384.0 * rAnchorRect.
GetWidth() + 0.5 ),
1388 rAnchorRect.
Top() +
static_cast< sal_Int32
>( ::std::min< double >( rPoint.Y(), 16384.0 ) / 16384.0 * rAnchorRect.
GetHeight() + 0.5 ) );
1400 for(
const auto& rCoord :
maCoords )
1401 aB2DPolygon.
append( lclGetPolyPoint( rAnchorRect, rCoord ) );
1404 aB2DPolygon.
append( lclGetPolyPoint( rAnchorRect, maCoords.front() ) );
1409 *
GetDoc().GetDrawLayer(),
1473 std::unique_ptr<SdrObjCustomShape, SdrObjectFreeOp> xSdrObj(
1475 *
GetDoc().GetDrawLayer()));
1476 xSdrObj->NbcSetSnapRect( rAnchorRect );
1477 OUString aRectType =
"rectangle";
1478 xSdrObj->MergeDefaultAttributes( &aRectType );
1491 if(
SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( &rSdrObj ) )
1498 std::unique_ptr< EditTextObject > xEditObj(
1500 std::unique_ptr<OutlinerParaObject> pOutlineObj(
new OutlinerParaObject(std::move(xEditObj)));
1501 pOutlineObj->SetOutlinerMode( OutlinerMode::TextObject );
1502 pTextObj->NbcSetOutlinerParaObject( std::move(pOutlineObj) );
1521 namespace csst = ::com::sun::star::text;
1522 csst::WritingMode eWriteMode = csst::WritingMode_LR_TB;
1528 eWriteMode = csst::WritingMode_LR_TB;
1548 if(
SdrObjCustomShape* pObjCustomShape = dynamic_cast< SdrObjCustomShape* >( &rSdrObj ) )
1550 css::beans::PropertyValue aTextRotateAngle;
1551 aTextRotateAngle.Name =
"TextRotateAngle";
1552 aTextRotateAngle.Value <<= 180.0;
1554 aGeometryItem.SetPropertyValue( aTextRotateAngle );
1555 pObjCustomShape->SetMergedItem( aGeometryItem );
1557 eWriteMode = csst::WritingMode_TB_RL;
1566 switch( eTextAnchor )
1572 eHorAlign = SvxAdjust::Center;
1597 eWriteMode = csst::WritingMode_TB_RL;
1606 switch ( eTextAnchor )
1612 eHorAlign = SvxAdjust::Center;
1665 sal_uInt16 nBofType;
1672 SAL_INFO(
"sc.filter",
"XclImpChartObj::ReadChartSubStream - missing chart substream");
1679 mxChart->ReadChartSubStream( rStrm );
1745 OUString aEmbObjName;
1753 sal_Int64 nAspect = css::embed::Aspects::MSOLE_CONTENT;
1756 css::awt::Size aAwtSize( aSize.Width(), aSize.Height() );
1757 xEmbObj->setVisualAreaSize( nAspect, aAwtSize );
1766 *
GetDoc().GetDrawLayer(),
1778 if( !(
mxChart && pSdrOleObj) )
1781 const Reference< XEmbeddedObject >& xEmbObj = pSdrOleObj->
GetObjRef();
1784 Reference< XEmbedPersist > xPersist( xEmbObj, UNO_QUERY_THROW );
1785 Reference< XModel >
xModel( xEmbObj->getComponent(), UNO_QUERY_THROW );
1797 OSL_ENSURE(
mbOwnTab,
"XclImpChartObj::FinalizeTabChart - not allowed for embedded chart objects" );
1829 maScPos(
ScAddress::INITIALIZE_INVALID ),
1862 meBindMode( eBindMode )
1871 const Reference< XShape >& rxShape,
const tools::Rectangle& rAnchorRect )
const
1877 xSdrObj->NbcSetSnapRect( rAnchorRect );
1888 if( !xCtrlModel.is() )
1896 Reference< XMultiServiceFactory >
xFactory( pDocShell->
GetModel(), UNO_QUERY );
1903 Reference< XBindableValue > xBindable( xCtrlModel, UNO_QUERY_THROW );
1906 CellAddress aApiAddress;
1911 aValue.Value <<= aApiAddress;
1913 Sequence< Any > aArgs( 1 );
1914 aArgs[ 0 ] <<= aValue;
1917 OUString aServiceName;
1923 Reference< XValueBinding > xBinding(
1924 xFactory->createInstanceWithArguments( aServiceName, aArgs ), UNO_QUERY_THROW );
1925 xBindable->setValueBinding( xBinding );
1937 Reference< XListEntrySink > xEntrySink( xCtrlModel, UNO_QUERY_THROW );
1940 CellRangeAddress aApiRange;
1945 aValue.Value <<= aApiRange;
1947 Sequence< Any > aArgs( 1 );
1948 aArgs[ 0 ] <<= aValue;
1951 Reference< XListEntrySource > xEntrySource(
xFactory->createInstanceWithArguments(
1953 xEntrySink->setListEntrySource( xEntrySource );
1963 if( !xCtrlModel.is() )
1986 if ( !aScRanges.
empty() )
1998 if ( !aScRanges.
empty() )
2001 mxSrcRange = std::make_shared<ScRange>( rScRange );
2020 if( bWithBoundSize )
2048 void lclExtractColor(
sal_uInt8& rnColorIdx,
const DffPropSet& rDffPropSet, sal_uInt32 nPropId )
2053 if( (nColor & 0xFF000000) == 0x08000000 )
2054 rnColorIdx = ::extract_value< sal_uInt8 >( nColor, 0, 8 );
2082 if( rFormatRuns.empty() )
2098 aLabel = aLabel.replaceAt( nPos, 0,
"~" );
2107 Reference< css::beans::XPropertySet > xPropset(
mxShape, UNO_QUERY );
2110 xPropset->setPropertyValue(
"Description",
makeAny(aLabel) );
2113 SAL_WARN(
"sc.filter",
"Can't set a default text for TBX Control ");
2144 sal_Int16 nHorAlign = 1;
2154 namespace csss = ::com::sun::star::style;
2155 csss::VerticalAlignment eVerAlign = csss::VerticalAlignment_MIDDLE;
2162 rPropSet.
SetProperty(
"VerticalAlign", eVerAlign );
2172 namespace cssa = ::com::sun::star::awt;
2173 cssa::PushButtonType eButtonType = cssa::PushButtonType_STANDARD;
2175 eButtonType = cssa::PushButtonType_OK;
2177 eButtonType = cssa::PushButtonType_CANCEL;
2179 eButtonType = cssa::PushButtonType_HELP;
2181 rPropSet.
SetProperty(
"PushButtonType", sal_Int16( eButtonType ) );
2186 return "com.sun.star.form.component.CommandButton";
2197 mnCheckBoxFlags( 0 )
2245 sal_Int16 nApiState = 0;
2252 if( bSupportsTristate )
2254 rPropSet.
SetProperty(
"DefaultState", nApiState );
2257 namespace AwtVisualEffect = ::com::sun::star::awt::VisualEffect;
2265 namespace csss = ::com::sun::star::style;
2266 rPropSet.
SetProperty(
"VerticalAlign", csss::VerticalAlignment_MIDDLE );
2272 rPropSet.
SetProperty(
"BackgroundColor", nColor );
2278 return "com.sun.star.form.component.CheckBox";
2339 sal_Int32 nRefVal = 1;
2344 if ( xCtrlModel.is() )
2347 OUString sGroupName = OUString::number( pLeader->
GetDffShapeId() );
2371 return "com.sun.star.form.component.RadioButton";
2391 namespace csss = ::com::sun::star::style;
2392 rPropSet.
SetProperty(
"VerticalAlign", csss::VerticalAlignment_TOP );
2400 return "com.sun.star.form.component.FixedText";
2410 mnGroupBoxFlags( 0 )
2451 return "com.sun.star.form.component.GroupBox";
2473 return "com.sun.star.form.component.GroupBox";
2534 rPropSet.
SetProperty(
"DefaultValue", aText.toDouble() );
2550 OUString(
"com.sun.star.form.component.NumericField" ) :
2551 OUString(
"com.sun.star.form.component.TextField" );
2629 return "com.sun.star.form.component.SpinButton";
2662 namespace AwtScrollOrient = ::com::sun::star::awt::ScrollBarOrientation;
2664 rPropSet.
SetProperty(
"Orientation", nApiOrient );
2669 return "com.sun.star.form.component.ScrollBar";
2683 mbHasDefFontIdx( false )
2699 namespace AwtVisualEffect = ::com::sun::star::awt::VisualEffect;
2717 std::size_t nRecEnd = rStrm.
GetRecPos() + nRecLeft;
2720 "XclImpListBoxObj::ReadFullLbsData - invalid size of OBJLBSDATA record" );
2774 aSelVec.push_back( nIndex );
2780 aSelVec.push_back( static_cast< sal_Int16 >(
mnSelEntry - 1 ) );
2782 if( !aSelVec.empty() )
2784 Sequence<sal_Int16> aSelSeq(aSelVec.data(),
static_cast<sal_Int32
>(aSelVec.size()));
2785 rPropSet.
SetProperty(
"DefaultSelection", aSelSeq );
2791 return "com.sun.star.form.component.ListBox";
2805 mnDropDownFlags( 0 ),
2880 Sequence< sal_Int16 > aSelSeq( 1 );
2882 rPropSet.
SetProperty(
"DefaultSelection", aSelSeq );
2890 OUString(
"com.sun.star.form.component.ComboBox" ) :
2891 OUString(
"com.sun.star.form.component.ListBox" );
2904 mnCtlsStrmSize( 0 ),
2905 mbEmbedded( false ),
2909 mbUseCtlsStrm( false )
2918 OUStringBuffer aStrgName;
2922 static const char spcHexChars[] =
"0123456789ABCDEF";
2924 aStrgName.append(OUStringChar( spcHexChars[ ::extract_value< sal_uInt8 >(
mnStorageId,
nIndex - 4, 4 ) ] ));
2926 return aStrgName.makeStringAndClear();
2931 sal_uInt16 nLinkSize;
2946 sal_uInt16 nLinkSize;
2961 sal_uInt16 nLinkSize;
3020 *
GetDoc().GetDrawLayer(),
3035 if (!sName.isEmpty())
3055 if( pOleSdrObj && pDocShell )
3058 Reference< XEmbeddedObject > xEmbObj = pOleSdrObj->
GetObjRef();
3075 if( aOldName != aNewName )
3097 OSL_ENSURE(
mbControl || !
mbUseCtlsStrm,
"XclImpPictureObj::ReadFlags8 - CTLS stream for controls only" );
3103 std::size_t nLinkEnd = rStrm.
GetRecPos() + nLinkSize;
3104 if( nLinkSize >= 6 )
3106 sal_uInt16 nFmlaSize;
3108 OSL_ENSURE( nFmlaSize > 0,
"XclImpPictureObj::ReadPictFmla - missing link formula" );
3125 sal_uInt16 nNameIdx;
3131 if( pExtName && pExtName->
IsOLE() )
3137 sal_uInt16 nXti, nExtName;
3152 OSL_ENSURE( nFmlaSize == 5,
"XclImpPictureObj::ReadPictFmla - unexpected formula size" );
3153 rStrm.
Ignore( nFmlaSize - 1 );
3170 rStrm.
Seek( nLinkEnd );
3191 sal_uInt32 nAddStrSize;
3193 OSL_ENSURE( rStrm.
GetRecLeft() >= nAddStrSize + 4,
"XclImpPictureObj::ReadPictFmla - missing data" );
3196 rStrm.
Ignore( nAddStrSize );
3212 if( nDffShapeId > 0 )
3214 maSdrInfoMap[ nDffShapeId ].Set( &rSdrObj, nDffFlags );
3222 XclImpSdrObjMap::iterator aIt =
maSdrObjMap.find( &rSdrObj );
3230 if(
SdrObjGroup* pGroupObj = dynamic_cast< SdrObjGroup* >( &rSdrObj ) )
3232 if(
SdrObjList* pSubList = pGroupObj->GetSubList() )
3236 for(
SdrObject* pChildObj = aObjIt.
Next(); pChildObj; pChildObj = aObjIt.
Next() )
3244 for (
auto const & pRule :
aCList)
3261 XclImpSdrInfoMap::const_iterator aIt =
maSdrInfoMap.find( nDffShapeId );
3264 rpSdrObj = aIt->second.mpSdrObj;
3266 *pnDffFlags = aIt->second.mnDffFlags;
3294 mrDrawing( rDrawing ),
3295 mrSdrModel( rSdrModel ),
3296 mrSdrPage( rSdrPage ),
3297 mnLastCtrlIndex( -1 ),
3298 mbHasCtrlForm( false )
3337 Reference< XIndexContainer > xIdToOleName;
3339 xIdToOleName->getByIndex( nObjId ) >>= sOleName;
3354 OSL_ENSURE(
mxProgress,
"XclImpDffConverter::Progress - invalid call, no progress bar" );
3360 XclImpDffConvDataRef xConvData = std::make_shared<XclImpDffConvData>( rDrawing, rSdrModel, rSdrPage );
3362 SetModel( &xConvData->mrSdrModel, 1440 );
3389 for(
const auto& rxDrawObj : rDrawObjs )
3408 OSL_ENSURE( !
maDataStack.empty(),
"XclImpDffConverter::FinalizeDrawing - no drawing manager on stack" );
3435 css::awt::Size aDummySize;
3436 Reference< XShape > xShape;
3442 ScriptEventDescriptor aDescriptor;
3446 Reference< XEventAttacherManager > xEventMgr( rConvData.
mxCtrlForm, UNO_QUERY_THROW );
3447 xEventMgr->registerScriptEvent( rConvData.
mnLastCtrlIndex, aDescriptor );
3473 Reference< XShape > xShape;
3476 Reference< XFormComponent > xFComp;
3498 if( pDocShell && xSrcStrg.
is() && (!aStrgName.isEmpty()) )
3508 if( aGraphic.
GetType() != GraphicType::NONE )
3511 namespace cssea = ::com::sun::star::embed::Aspects;
3512 sal_Int64 nAspects = rPicObj.
IsSymbol() ? cssea::MSOLE_ICON : cssea::MSOLE_CONTENT;
3557 rDffStrm >> aAnchor;
3573 XclImpDrawObjClientData()
3574 : m_pTopLevelObj(nullptr)
3577 virtual void NotifyFreeObj(
SdrObject*)
override {}
3597 bool bGlobalPageGroup( rDffObjData.
nSpFlags & ShapeFlag::Patriarch );
3598 if( !xDrawObj || !xDrawObj->IsProcessSdrObj() || bGlobalPageGroup )
3604 XclImpDrawObjClientData& rDrawObjClientData =
static_cast<XclImpDrawObjClientData&
>(rClientData);
3605 const bool bIsTopLevel = !rDrawObjClientData.m_pTopLevelObj;
3607 rDrawObjClientData.m_pTopLevelObj = xDrawObj.get();
3610 if( dynamic_cast< SdrEdgeObj* >( xSdrObj.get() ) )
3611 xDrawObj->SetAreaObj(
false );
3617 bool bEmbeddedGroup = !bIsTopLevel &&
dynamic_cast< SdrObjGroup*
>( xSdrObj.get() );
3618 if( !bEmbeddedGroup && !xDrawObj->IsValidSize( rAnchorRect ) )
3626 xDrawObj->SetDffData( rDffObjData, aObjName, aHyperlink, bVisible, bAutoMargin );
3630 if(
XclImpTextObj* pTextObj = dynamic_cast< XclImpTextObj* >( xDrawObj.get() ) )
3632 pTextObj->SetTextData( *pTextData );
3635 if(
XclImpTbxObjBase* pTbxObj = dynamic_cast< XclImpTbxObjBase* >( xDrawObj.get() ) )
3636 pTbxObj->SetDffProperties( *
this );
3639 SdrObjectUniquePtr xNewSdrObj( xDrawObj->CreateSdrObject( *
this, rAnchorRect,
true ) );
3641 xSdrObj = std::move( xNewSdrObj );
3651 xDrawObj->PreProcessSdrObject( *
this, *xSdrObj );
3657 if( !xDrawObj->IsInsertSdrObj() )
3676 xDrawObj->PostProcessSdrObject( *
this, *xSdrObj );
3679 return xSdrObj.release();
3694 if( xSdrObj && xDrawObj )
3701 return xSdrObj.release();
3705 const css::awt::Size& , Reference< XShape >* pxShape,
3711 Reference< XIndexContainer > xFormIC( rConvData.
mxCtrlForm, UNO_QUERY_THROW );
3712 Reference< XControlModel > xCtrlModel( rxFormComp, UNO_QUERY_THROW );
3716 Reference< XControlShape > xCtrlShape( xShape, UNO_QUERY_THROW );
3719 sal_Int32 nNewIndex = xFormIC->getCount();
3720 xFormIC->insertByIndex( nNewIndex,
Any( rxFormComp ) );
3725 xCtrlShape->setControl( xCtrlModel );
3726 if( pxShape ) *pxShape = xShape;
3731 OSL_FAIL(
"XclImpDffConverter::InsertControl - cannot create form control" );
3741 OSL_ENSURE( !
maDataStack.empty(),
"XclImpDffConverter::GetConvData - no drawing manager on stack" );
3747 OSL_ENSURE( !
maDataStack.empty(),
"XclImpDffConverter::GetConvData - no drawing manager on stack" );
3767 ::std::vector< sal_uInt8 >
aBuffer( nBufferSize );
3769 if (rDffStrm.
ReadBytes(pnData, nBufferSize) == nBufferSize)
3785 bool isBreak(
false);
3786 while (!isBreak && rDffStrm.
good() && rDffStrm.
Tell() < nEndPos)
3816 bool isBreak(
false);
3817 while (!isBreak && rDffStrm.
good() && rDffStrm.
Tell() < nEndPos)
3849 XclImpDrawObjClientData aDrawObjClientData;
3857 if (aDrawObjClientData.m_pTopLevelObj && xSdrObj )
3894 Reference< XFormsSupplier > xFormsSupplier( rConvData.
mrSdrPage.
getUnoPage(), UNO_QUERY_THROW );
3895 Reference< XNameContainer > xFormsNC( xFormsSupplier->getForms(), UNO_SET_THROW );
3916 mbOleObjs( bOleObjects )
3936 default: OSL_FAIL(
"XclImpDrawing::ReadImgData - unknown image format" );
3949 OSL_ENSURE(
maDffStrm.
Tell() == 0,
"XclImpDrawing::ReadObj - unexpected DFF stream data, OBJ will be ignored" );
3971 maObjMapId[ xDrawObj->GetObjId() ] = xDrawObj;
4020 xDrawObj = aIt->second;
4027 XclImpObjMapById::const_iterator aIt =
maObjMapId.find( nObjId );
4029 xDrawObj = aIt->second;
4043 return aIt->second.get();
4055 [](
const std::size_t& rSum,
const XclImpObjMap::value_type& rEntry) {
return rSum + rEntry.second->GetProgressSize(); });
4069 pDrawObj->SetProcessSdrObj(
false );
4083 OSL_ENSURE( rxDrawObj,
"XclImpDrawing::AppendRawObject - unexpected empty reference" );
4099 rGraphic = aGDIMetaFile;
4115 sal_uInt32 nHdrSize;
4116 sal_uInt16 nWidth, nHeight, nPlanes, nDepth;
4122 if( (nHdrSize == 12) && (nPlanes == 1) && (nDepth == 32) )
4125 aMemStrm.
SetEndian( SvStreamEndian::LITTLE );
4133 if( aMemStrm.
Tell() == 0 )
4139 if(
ReadDIB(aBitmap, aMemStrm,
false) )
4154 maObjMapId[ xDrawObj->GetObjId() ] = xDrawObj;
4163 xTextData->maData.ReadTxo8( rStrm );
4166 xTextData->mxString.reset();
4168 if( xTextData->maData.mnTextLen > 0 )
4171 OSL_ENSURE( bValid,
"XclImpDrawing::ReadTxo - missing CONTINUE record" );
4173 xTextData->mxString = std::make_shared<XclImpString>( rStrm.
ReadUniString( xTextData->maData.mnTextLen ) );
4177 if( xTextData->maData.mnFormatSize > 0 )
4180 OSL_ENSURE( bValid,
"XclImpDrawing::ReadTxo - missing CONTINUE record" );
4182 xTextData->ReadFormats( rStrm );
4188 maScUsedArea(
ScAddress::INITIALIZE_INVALID )
4215 auto xChartObj = std::make_shared<XclImpChartObj>(
GetRoot(), true );
4216 xChartObj->ReadChartSubStream( rStrm );
4245 sal_uInt16 nTotalLen;
4253 sal_uInt16 nPartLen = ::std::min( nTotalLen, static_cast< sal_uInt16 >( rStrm.
GetRecLeft() ) );
4255 nTotalLen = nTotalLen - nPartLen;
4260 OSL_ENSURE( aXclPos.mnRow == 0xFFFF,
"XclImpObjectManager::ReadNote3 - missing continuation NOTE record" );
4261 if( aXclPos.mnRow == 0xFFFF )
4263 OSL_ENSURE( nPartLen <= nTotalLen,
"XclImpObjectManager::ReadNote3 - string too long" );
4265 nTotalLen = nTotalLen - ::std::min( nTotalLen, nPartLen );
4281 sal_uInt16 nFlags, nObjId;
4290 pNoteObj->SetNoteData( aScNotePos, nFlags );
4339 rxDrawing = std::make_shared<XclImpSheetDrawing>(
GetRoot(), nScTab );
4346 if( !
GetDoc().GetDrawLayer() )
4351 [](
const std::size_t& rSum,
const XclImpSheetDrawingMap::value_type& rEntry) {
return rSum + rEntry.second->GetProgressSize(); });
4353 if( nProgressSize == 0 )
4359 rEntry.second->ConvertObjects( aDffConv );
4367 OUStringBuffer aDefName;
4370 aDefName.append(aIt->second);
4371 return aDefName.append(
' ').append(static_cast<sal_Int32>(rDrawObj.
GetObjId())).makeStringAndClear();
4376 XclImpSheetDrawingMap::const_iterator aIt =
maSheetDrawings.find( nScTab );
4378 return aIt->second->GetUsedArea();
4386 maDffConv( rRoot, maDummyStrm )
4392 sal_uInt32 nPropSetSize;
4418 rPropSet.
Read( rStrm );
void StartProgressBar(std::size_t nProgressSize)
Initializes the internal progress bar with the passed size and starts it.
OUString ReadRawByteString(sal_uInt16 nChars)
Reads nChar byte characters and returns the string.
void ProcessObject(SdrObjList &rObjList, XclImpDrawObjBase &rDrawObj)
Processes BIFF5 drawing objects without DFF data, inserts into the passed object list.
const DffRecordHeader & rSpHd
virtual void DoReadObj5(XclImpStream &rStrm, sal_uInt16 nNameLen, sal_uInt16 nMacroSize) override
Reads the contents of the a BIFF5 OBJ record from the passed stream.
double mfRightMargin
Left margin in inches.
void ConvertLabel(ScfPropertySet &rPropSet) const
Sets control label and text formatting.
void ReadFullLbsData(XclImpStream &rStrm)
Reads dropdown box settings.
std::size_t GetProgressSize() const
Returns the needed size on the progress bar for all contained objects.
virtual SdrObjectUniquePtr DoCreateSdrObj(XclImpDffConverter &rDffConv, const tools::Rectangle &rAnchorRect) const override
Creates and returns a new SdrObject from the contained data.
SdrMetricItem makeSdrTextUpperDistItem(tools::Long mnHeight)
XclImpObjTextData maTextData
void SetPixelColor(const Color &rColor)
XclImpDropDownObj(const XclImpRoot &rRoot)
void SetPaperSize(sal_uInt16 nXclPaperSize, bool bPortrait)
Overrides paper size and orientation (used in sheet-charts).
virtual ~XclImpSimpleDffConverter() override
OUString ReadHlinkProperty(SvStream &rDffStrm) const
Reads contents of a hyperlink property and returns the extracted URL.
static std::unique_ptr< EditTextObject > CreateTextObject(const XclImpRoot &rRoot, const XclImpString &rString)
Returns a new edit engine text object.
XclImpPhObj(const XclImpRoot &rRoot)
bool SupportsOleObjects() const
Returns true, if the conversion of OLE objects is supported.
const sal_uInt16 EXC_ID_OBJSBS
Radio button group data.
sal_uInt16 GetNextRecId()
Returns the record ID of the following record.
Helper base class for TBX and OCX form controls to manage spreadsheet links.
SdrMetricItem makeSdrShadowYDistItem(tools::Long nDist)
void Seek(std::size_t nPos)
Seeks absolute in record content to the specified position.
Drawing manager of a single sheet.
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
virtual void DoReadObj8SubRec(XclImpStream &rStrm, sal_uInt16 nSubRecId, sal_uInt16 nSubRecSize) override
Reads the contents of the specified subrecord of a BIFF8 OBJ record from stream.
const sal_uInt8 EXC_OBJ_LINE_MEDTRANS
bool IsProcessSdrObj() const
Returns true, if the object is valid and will be processed.
A note object, which is a specialized text box object.
const sal_uInt8 EXC_OBJ_LINE_BL
const sal_uInt16 EXC_ID_OBJEND
const sal_uInt16 EXC_OBJ_POLY_CLOSED
void SetDffData(const DffObjData &rDffObjData, const OUString &rObjName, const OUString &rHyperlink, bool bVisible, bool bAutoMargin)
Sets shape data from DFF stream.
const sal_uInt16 EXC_OBJ_ORIENT_90CCW
Stacked top to bottom.
virtual XclTbxEventType DoGetEventType() const override
Returns the type of the macro event to be created.
virtual void DoProcessControl(ScfPropertySet &rPropSet) const override
Sets additional properties for the current form control.
std::size_t GetProgressSize() const
Returns the needed size on the progress bar (calls virtual DoGetProgressSize() function).
void SetBackgroundColor(const Color &rColor)
XclImpTbxObjBase(const XclImpRoot &rRoot)
const OUString & GetMacroName() const
Returns associated macro name, if set, otherwise zero length string.
const OUString & GetMacroName(sal_uInt16 nExtSheet, sal_uInt16 nExtName) const
Returns the specified macro name or an empty string on error.
const sal_uInt8 EXC_OBJ_ARROW_NARROW
std::size_t GetRecPos() const
Returns the position inside of the whole record content.
css::uno::Reference< css::embed::XEmbeddedObject > const & GetObjRef() const
bool SeekToContent(sal_uInt32 nRecType, SvStream &rSt) const
virtual SdrObject * FinalizeObj(DffObjData &rDffObjData, SdrObject *pOldSdrObj) override
Finalize a DFF object, sets anchor after nested objs have been loaded.
SvStream & WriteUInt16(sal_uInt16 nUInt16)
bool IsMathType2Math() const
static SdrOle2Obj * CreateSdrOLEFromStorage(SdrModel &rSdrModel, const OUString &rStorageName, tools::SvRef< SotStorage > const &rSrcStorage, const css::uno::Reference< css::embed::XStorage > &xDestStg, const Graphic &rGraf, const tools::Rectangle &rBoundRect, const tools::Rectangle &rVisArea, SvStream *pDataStrrm, ErrCode &rError, sal_uInt32 nConvertFlags, sal_Int64 nAspect, OUString const &rBaseURL)
sal_uInt16 GetRecId() const
Returns the current record ID.
const sal_uInt16 EXC_OBJTYPE_UNKNOWN
virtual tools::Rectangle CalcAnchorRect(const XclObjAnchor &rAnchor, bool bDffAnchor) const =0
Derived classes calculate the resulting rectangle of the passed anchor.
constexpr OUStringLiteral gaStdFormName(u"Standard")
const XclImpRoot & mrRoot
const std::size_t EXC_REC_SEEK_TO_BEGIN
virtual void DoPreProcessSdrObj(XclImpDffConverter &rDffConv, SdrObject &rSdrObj) const override
Inserts the contained text data at the passed object.
const sal_uInt16 EXC_OBJ_PIC_CONTROL
virtual void DoProcessControl(ScfPropertySet &rPropSet) const override
Sets additional properties for the current form control.
const sal_uInt16 EXC_ID_NOTE
void FinalizeTabChart()
Calculates the object anchor of a sheet chart (chart fills one page).
const sal_uInt16 EXC_OBJ_EDIT_INTEGER
Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
const sal_uInt16 EXC_OBJ_ORIENT_NONE
sal_uInt16 mnRX
Y offset in top row (1/256 of row height).
void SetName(const OUString &rStr, const bool bSetChanged=true)
virtual std::size_t DoGetProgressSize() const override
Returns a progress bar size that takes all group children into account.
const Color & GetBackgroundColor() const
std::shared_ptr< ScRange > mxSrcRange
Not derived from XclImpRoot to allow multiple inheritance.
const sal_uInt16 EXC_OBJ_PIC_SYMBOL
bool ReadWindowMetafile(SvStream &rStream, GDIMetaFile &rMTF)
virtual void DoPreProcessSdrObj(XclImpDffConverter &rDffConv, SdrObject &rSdrObj) const override
Inserts the note into the document, sets visibility.
void SetPersistName(const OUString &rPersistName)
const sal_uInt8 EXC_OBJ_ARC_BL
const sal_uInt16 EXC_ID_TXO
const sal_uInt16 EXC_OBJ_INVALID_ID
#define DFF_Prop_AutoTextMargin
XclImpLineObj(const XclImpRoot &rRoot)
sal_Int32 GetDefaultTextMargin() const
Returns the default text margin in drawing layer units.
virtual SdrObject * ProcessObj(SvStream &rDffStrm, DffObjData &rDffObjData, SvxMSDffClientData &rClientData, tools::Rectangle &rTextRect, SdrObject *pOldSdrObj) override
Processes a DFF object, reads properties from DFF stream.
const sal_uInt16 EXC_ID_OBJPICTFMLA
Option flags.
virtual sal_uInt64 TellEnd()
void NotifyMacroEventRead()
Notify that this document contains a macro event handler.
virtual void DoReadObj8SubRec(XclImpStream &rStrm, sal_uInt16 nSubRecId, sal_uInt16 nSubRecSize) override
Reads the contents of the specified subrecord of a BIFF8 OBJ record from stream.
XclImpNoteObj(const XclImpRoot &rRoot)
void RewindRecord()
Sets stream pointer before current record and invalidates stream.
static ScMacroInfo * GetMacroInfo(SdrObject *pObj, bool bCreate=false)
XclImpObjMap maObjMap
Copy of the DFF page stream in memory.
void PostProcessSdrObject(XclImpDffConverter &rDffConv, SdrObject &rSdrObj) const
Additional processing for the passed SdrObject after insertion into the drawing page (calls virtual D...
XclImpChartObj(const XclImpRoot &rRoot, bool bOwnTab=false)
XclImpTextObj(const XclImpRoot &rRoot)
constexpr::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
static SdrObject * getSdrObjectFromXShape(const css::uno::Reference< css::uno::XInterface > &xInt)
virtual void NbcInsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
const sal_uInt16 EXC_ID_MSODRAWINGGROUP
virtual void DoReadObj4(XclImpStream &rStrm, sal_uInt16 nMacroSize) override
Reads the contents of the a BIFF4 OBJ record from the passed stream.
XclImpListBoxObj(const XclImpRoot &rRoot)
const sal_uInt16 EXC_OBJ_SCROLLBAR_HOR
constexpr::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
void ImplReadObj4(XclImpStream &rStrm)
Reads the contents of a BIFF4 OBJ record.
SC_DLLPUBLIC void ExtendTo(const ScRange &rRange)
virtual void DoReadObj8SubRec(XclImpStream &rStrm, sal_uInt16 nSubRecId, sal_uInt16 nSubRecSize)
Derived classes read the contents of the specified subrecord of a BIFF8 OBJ record from stream...
SdrObjectUniquePtr CreateSdrObjectFromShape(const css::uno::Reference< css::drawing::XShape > &rxShape, const tools::Rectangle &rAnchorRect) const
Returns the SdrObject from the passed control shape and sets the bounding rectangle.
Base class for textbox based form controls.
const sal_uInt16 EXC_ID_OBJCMO
Check box/radio button cell link.
std::shared_ptr< XclImpDffConvData > XclImpDffConvDataRef
bool IsValid() const
Returns record reading state: false = record overread.
XclImpDrawing(const XclImpRoot &rRoot, bool bOleObjects)
Color GetSolidLineColor(const XclObjLineData &rLineData) const
Returns a solid line color from the passed line data struct.