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>
103#include <document.hxx>
106#include <unonames.hxx>
109#include <globstr.hrc>
128#include <string_view>
132using ::com::sun::star::uno::Any;
133using ::com::sun::star::beans::XPropertySet;
134using ::com::sun::star::uno::Exception;
135using ::com::sun::star::uno::Reference;
136using ::com::sun::star::uno::Sequence;
137using ::com::sun::star::uno::UNO_QUERY;
138using ::com::sun::star::uno::UNO_QUERY_THROW;
139using ::com::sun::star::uno::UNO_SET_THROW;
140using ::com::sun::star::beans::NamedValue;
141using ::com::sun::star::lang::XMultiServiceFactory;
142using ::com::sun::star::container::XIndexContainer;
143using ::com::sun::star::container::XNameContainer;
144using ::com::sun::star::frame::XModel;
145using ::com::sun::star::awt::XControlModel;
146using ::com::sun::star::embed::XEmbeddedObject;
147using ::com::sun::star::embed::XEmbedPersist;
148using ::com::sun::star::drawing::XControlShape;
149using ::com::sun::star::drawing::XShape;
150using ::com::sun::star::form::XFormComponent;
151using ::com::sun::star::form::XFormsSupplier;
152using ::com::sun::star::form::binding::XBindableValue;
153using ::com::sun::star::form::binding::XValueBinding;
154using ::com::sun::star::form::binding::XListEntrySink;
155using ::com::sun::star::form::binding::XListEntrySource;
156using ::com::sun::star::script::ScriptEventDescriptor;
157using ::com::sun::star::script::XEventAttacherManager;
158using ::com::sun::star::table::CellAddress;
159using ::com::sun::star::table::CellRangeAddress;
170 mbHasAnchor( false ),
175 mbAutoMargin( true ),
176 mbSimpleMacro( true ),
177 mbProcessSdr( true ),
179 mbCustomDff( false ),
180 mbNotifyMacroEventRead( false )
192 if(
rStrm.GetRecLeft() >= 30 )
196 nObjType =
rStrm.ReaduInt16();
199 case EXC_OBJTYPE_GROUP: xDrawObj= std::make_shared<XclImpGroupObj>( rRoot );
break;
200 case EXC_OBJTYPE_LINE: xDrawObj= std::make_shared<XclImpLineObj>( rRoot );
break;
202 case EXC_OBJTYPE_OVAL: xDrawObj= std::make_shared<XclImpOvalObj>( rRoot );
break;
203 case EXC_OBJTYPE_ARC: xDrawObj= std::make_shared<XclImpArcObj>( rRoot );
break;
204 case EXC_OBJTYPE_CHART: xDrawObj= std::make_shared<XclImpChartObj>( rRoot );
break;
205 case EXC_OBJTYPE_TEXT: xDrawObj= std::make_shared<XclImpTextObj>( rRoot );
break;
209 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj3 - unknown object type 0x" << std::hex << nObjType );
216 xDrawObj = std::make_shared<XclImpPhObj>(rRoot);
220 xDrawObj->ImplReadObj3(
rStrm );
228 if(
rStrm.GetRecLeft() >= 30 )
232 nObjType =
rStrm.ReaduInt16();
235 case EXC_OBJTYPE_GROUP: xDrawObj = std::make_shared<XclImpGroupObj>( rRoot );
break;
236 case EXC_OBJTYPE_LINE: xDrawObj = std::make_shared<XclImpLineObj>( rRoot );
break;
238 case EXC_OBJTYPE_OVAL: xDrawObj = std::make_shared<XclImpOvalObj>( rRoot );
break;
239 case EXC_OBJTYPE_ARC: xDrawObj = std::make_shared<XclImpArcObj>( rRoot );
break;
240 case EXC_OBJTYPE_CHART: xDrawObj = std::make_shared<XclImpChartObj>( rRoot );
break;
241 case EXC_OBJTYPE_TEXT: xDrawObj = std::make_shared<XclImpTextObj>( rRoot );
break;
242 case EXC_OBJTYPE_BUTTON: xDrawObj = std::make_shared<XclImpButtonObj>( rRoot );
break;
246 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj4 - unknown object type 0x" << std::hex << nObjType );
253 xDrawObj = std::make_shared<XclImpPhObj>(rRoot);
257 xDrawObj->ImplReadObj4(
rStrm );
265 if(
rStrm.GetRecLeft() >= 34 )
269 nObjType =
rStrm.ReaduInt16();
272 case EXC_OBJTYPE_GROUP: xDrawObj = std::make_shared<XclImpGroupObj>( rRoot );
break;
273 case EXC_OBJTYPE_LINE: xDrawObj = std::make_shared<XclImpLineObj>( rRoot );
break;
275 case EXC_OBJTYPE_OVAL: xDrawObj = std::make_shared<XclImpOvalObj>( rRoot );
break;
276 case EXC_OBJTYPE_ARC: xDrawObj = std::make_shared<XclImpArcObj>( rRoot );
break;
277 case EXC_OBJTYPE_CHART: xDrawObj = std::make_shared<XclImpChartObj>( rRoot );
break;
278 case EXC_OBJTYPE_TEXT: xDrawObj = std::make_shared<XclImpTextObj>( rRoot );
break;
279 case EXC_OBJTYPE_BUTTON: xDrawObj = std::make_shared<XclImpButtonObj>( rRoot );
break;
284 case EXC_OBJTYPE_EDIT: xDrawObj = std::make_shared<XclImpEditObj>( rRoot );
break;
285 case EXC_OBJTYPE_LABEL: xDrawObj = std::make_shared<XclImpLabelObj>( rRoot );
break;
286 case EXC_OBJTYPE_DIALOG: xDrawObj = std::make_shared<XclImpDialogObj>( rRoot );
break;
287 case EXC_OBJTYPE_SPIN: xDrawObj = std::make_shared<XclImpSpinButtonObj>( rRoot );
break;
293 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj5 - unknown object type 0x" << std::hex << nObjType );
295 xDrawObj = std::make_shared<XclImpPhObj>( rRoot );
299 OSL_ENSURE(xDrawObj,
"object import failed");
304 xDrawObj->ImplReadObj5(
rStrm );
313 if(
rStrm.GetRecLeft() >= 10 )
315 sal_uInt16 nSubRecId(0), nSubRecSize(0), nObjType(0);
316 nSubRecId =
rStrm.ReaduInt16();
317 nSubRecSize =
rStrm.ReaduInt16();
318 nObjType =
rStrm.ReaduInt16();
319 OSL_ENSURE( nSubRecId ==
EXC_ID_OBJCMO,
"XclImpDrawObjBase::ReadObj8 - OBJCMO subrecord expected" );
327 xDrawObj = std::make_shared<XclImpTextObj>( rRoot );
329 xDrawObj->SetAreaObj(
false );
338 xDrawObj = std::make_shared<XclImpTextObj>( rRoot );
341 case EXC_OBJTYPE_GROUP: xDrawObj = std::make_shared<XclImpGroupObj>( rRoot );
break;
342 case EXC_OBJTYPE_CHART: xDrawObj = std::make_shared<XclImpChartObj>( rRoot );
break;
343 case EXC_OBJTYPE_BUTTON: xDrawObj = std::make_shared<XclImpButtonObj>( rRoot );
break;
347 case EXC_OBJTYPE_EDIT: xDrawObj = std::make_shared<XclImpEditObj>( rRoot );
break;
348 case EXC_OBJTYPE_LABEL: xDrawObj = std::make_shared<XclImpLabelObj>( rRoot );
break;
349 case EXC_OBJTYPE_DIALOG: xDrawObj = std::make_shared<XclImpDialogObj>( rRoot );
break;
350 case EXC_OBJTYPE_SPIN: xDrawObj = std::make_shared<XclImpSpinButtonObj>( rRoot );
break;
355 case EXC_OBJTYPE_NOTE: xDrawObj = std::make_shared<XclImpNoteObj>( rRoot );
break;
358 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj8 - unknown object type 0x" << std::hex << nObjType );
366 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::ReadObj8 import failed, substituting placeholder");
367 xDrawObj = std::make_shared<XclImpPhObj>( rRoot );
371 xDrawObj->ImplReadObj8(
rStrm );
382 const DffObjData& rDffObjData,
const OUString& rObjName,
const OUString& rHyperlink,
383 bool bVisible,
bool bAutoMargin )
464 if( xSdrObj && xSdrObj->IsUnoObj() &&
468 if( pSdrUnoObj !=
nullptr )
471 Reference< XPropertySet > xPropSet(xCtrlModel,UNO_QUERY);
472 static constexpr OUStringLiteral sPropertyName(
u"ControlTypeinMSO");
474 enum { eCreateFromOffice = 0, eCreateFromMSTBXControl, eCreateFromMSOCXControl };
476 if(
mnObjType == 7 || (mnObjType < 25 && mnObjType > 10) )
481 const sal_Int16 nTBXControlType = eCreateFromMSTBXControl ;
482 xPropSet->setPropertyValue(sPropertyName,
Any(nTBXControlType));
486 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::CreateSdrObject, this control can't be set the property ControlTypeinMSO!");
492 static constexpr OUStringLiteral sObjIdPropertyName(
u"ObjIDinMSO");
498 const sal_Int16 nOCXControlType = eCreateFromMSOCXControl;
499 xPropSet->setPropertyValue(sPropertyName,
Any(nOCXControlType));
501 xPropSet->setPropertyValue(sObjIdPropertyName,
Any(sal_uInt16(
mnObjId)));
505 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::CreateSdrObject, this control can't be set the property ObjIDinMSO!");
555 if (!sMacro.isEmpty())
557 pInfo->SetMacro(sMacro);
583 if(
rStrm.GetRecPos() & 1 )
rStrm.Ignore( 1 );
590 rStrm.Ignore( nMacroSize );
592 if(
rStrm.GetRecPos() & 1 )
rStrm.Ignore( 1 );
598 rStrm.Ignore( nMacroSize );
604 rStrm.Ignore( nMacroSize );
610 if(
rStrm.GetRecLeft() <= 6 )
614 sal_uInt16 nFmlaSize;
615 nFmlaSize =
rStrm.ReaduInt16();
617 OSL_ENSURE( nFmlaSize == 7,
"XclImpDrawObjBase::ReadMacro - unexpected formula size" );
621 sal_uInt16 nExtSheet, nExtName;
622 nTokenId =
rStrm.ReaduInt8();
623 nExtSheet =
rStrm.ReaduInt16();
624 nExtName =
rStrm.ReaduInt16();
626 "XclImpDrawObjBase::ReadMacro - tNameXR token expected" );
715 static const sal_uInt8 sppnPatterns[][ 8 ] =
717 { 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55 },
718 { 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD },
719 { 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22 },
720 { 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00 },
721 { 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC },
722 { 0x33, 0x66, 0xCC, 0x99, 0x33, 0x66, 0xCC, 0x99 },
723 { 0xCC, 0x66, 0x33, 0x99, 0xCC, 0x66, 0x33, 0x99 },
724 { 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33 },
725 { 0xCC, 0xFF, 0x33, 0xFF, 0xCC, 0xFF, 0x33, 0xFF },
726 { 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00 },
727 { 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 },
728 { 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88 },
729 { 0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11 },
730 { 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11 },
731 { 0xAA, 0x44, 0xAA, 0x11, 0xAA, 0x44, 0xAA, 0x11 },
732 { 0x88, 0x00, 0x22, 0x00, 0x88, 0x00, 0x22, 0x00 },
733 { 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x08, 0x00 }
741 for(
size_t nIdx = 0; nIdx < 8; ++nIdx )
745 (void)
ReadDIB(aBitmap, aMemStrm,
false);
750 ::std::swap( aPattColor, aBackColor );
850 sal_uInt16 nObjFlags, nMacroSize;
853 nObjFlags =
rStrm.ReaduInt16();
855 nMacroSize =
rStrm.ReaduInt16();
869 sal_uInt16 nObjFlags, nMacroSize;
872 nObjFlags =
rStrm.ReaduInt16();
874 nMacroSize =
rStrm.ReaduInt16();
889 sal_uInt16 nObjFlags, nMacroSize, nNameLen;
892 nObjFlags =
rStrm.ReaduInt16();
894 nMacroSize =
rStrm.ReaduInt16();
896 nNameLen =
rStrm.ReaduInt16();
914 if (
rStrm.GetRecLeft() < 4)
917 sal_uInt16 nSubRecId =
rStrm.ReaduInt16();
918 sal_uInt16 nSubRecSize =
rStrm.ReaduInt16();
919 rStrm.PushPosition();
921 nSubRecSize =
static_cast< sal_uInt16
>( ::std::min< std::size_t >( nSubRecSize,
rStrm.GetRecLeft() ) );
926 OSL_ENSURE(
rStrm.GetRecPos() == 4,
"XclImpDrawObjBase::ImplReadObj8 - unexpected OBJCMO subrecord" );
927 if( (
rStrm.GetRecPos() == 4) && (nSubRecSize >= 6) )
929 sal_uInt16 nObjFlags;
932 nObjFlags =
rStrm.ReaduInt16( );
947 rStrm.Ignore( nSubRecSize );
965 sal_uInt32 nDataSize =
rStrm.ReaduInt32();
966 nDataSize -=
rStrm.GetRecLeft();
974 if (!
rStrm.StartNextRecord())
976 OSL_ENSURE( nDataSize >=
rStrm.GetRecLeft(),
"XclImpDrawObjBase::ImplReadObj8 - CONTINUE too long" );
977 nDataSize -= ::std::min< sal_uInt32 >(
rStrm.GetRecLeft(), nDataSize );
979 OSL_ENSURE( nDataSize == 0,
"XclImpDrawObjBase::ImplReadObj8 - missing CONTINUE records" );
987 if( pGroupObj->TryInsert( xDrawObj ) )
989 mObjs.push_back( xDrawObj );
994 return std::accumulate(
mObjs.begin(),
mObjs.end(), std::size_t(0),
995 [](
const std::size_t& rSum,
const XclImpDrawObjRef& rxObj) { return rSum + rxObj->GetProgressSize(); });
1006 mnFirstUngrouped( 0 )
1053 *
GetDoc().GetDrawLayer()));
1055 SdrObjList& rObjList = *xSdrObj->GetSubList();
1123 *
GetDoc().GetDrawLayer(),
1130 bool bLineStart =
false;
1131 bool bLineEnd =
false;
1132 bool bFilled =
false;
1133 switch( nArrowType )
1135 case EXC_OBJ_ARROW_OPEN: bLineStart =
false; bLineEnd =
true; bFilled =
false;
break;
1140 if( bLineStart || bLineEnd )
1143 double fArrowWidth = 3.0;
1144 switch( nArrowWidth )
1152 double fArrowLength = 3.0;
1153 switch( nArrowLength )
1161#define EXC_ARROW_POINT( x, y ) ::basegfx::B2DPoint( fArrowWidth * (x), fArrowLength * (y) )
1178#undef EXC_ARROW_POINT
1184 xSdrObj->SetMergedItem(
XLineStartItem( OUString(), aArrowPolyPoly ) );
1190 xSdrObj->SetMergedItem(
XLineEndItem( OUString(), aArrowPolyPoly ) );
1242 *
GetDoc().GetDrawLayer(),
1258 *
GetDoc().GetDrawLayer(),
1307 nStartAngle = 0_deg100;
1308 nEndAngle = 9000_deg100;
1313 nStartAngle = 9000_deg100;
1314 nEndAngle = 18000_deg100;
1319 nStartAngle = 18000_deg100;
1320 nEndAngle = 27000_deg100;
1325 nStartAngle = 27000_deg100;
1326 nEndAngle = 0_deg100;
1334 *
GetDoc().GetDrawLayer(),
1357 OSL_ENSURE(
rStrm.GetRecLeft() / 4 ==
mnPointCount,
"XclImpPolygonObj::ReadCoordList - wrong polygon point count" );
1360 if (
rStrm.GetRecLeft() < 4)
1362 sal_uInt16 nX =
rStrm.ReaduInt16();
1363 sal_uInt16 nY =
rStrm.ReaduInt16();
1396 return ::basegfx::B2DPoint(
1397 rAnchorRect.
Left() +
static_cast< sal_Int32
>( ::std::min< double >( rPoint.X(), 16384.0 ) / 16384.0 * rAnchorRect.
GetWidth() + 0.5 ),
1398 rAnchorRect.
Top() +
static_cast< sal_Int32
>( ::std::min< double >( rPoint.Y(), 16384.0 ) / 16384.0 * rAnchorRect.
GetHeight() + 0.5 ) );
1410 for(
const auto& rCoord :
maCoords )
1411 aB2DPolygon.
append( lclGetPolyPoint( rAnchorRect, rCoord ) );
1414 aB2DPolygon.
append( lclGetPolyPoint( rAnchorRect,
maCoords.front() ) );
1419 *
GetDoc().GetDrawLayer(),
1435 if(
rStrm.GetRecPos() & 1 )
rStrm.Ignore( 1 );
1485 *
GetDoc().GetDrawLayer()));
1486 xSdrObj->NbcSetSnapRect( rAnchorRect );
1487 OUString aRectType =
"rectangle";
1488 xSdrObj->MergeDefaultAttributes( &aRectType );
1509 SAL_WARN(
"sc.filter",
"truncating slow long rich text for fuzzing performance");
1514 std::unique_ptr< EditTextObject > xEditObj(
1518 pTextObj->NbcSetOutlinerParaObject( std::move(aOutlineObj) );
1537 namespace csst = ::com::sun::star::text;
1538 csst::WritingMode eWriteMode = csst::WritingMode_LR_TB;
1544 eWriteMode = csst::WritingMode_LR_TB;
1566 css::beans::PropertyValue aTextRotateAngle;
1567 aTextRotateAngle.Name =
"TextRotateAngle";
1568 aTextRotateAngle.Value <<= 180.0;
1571 pObjCustomShape->SetMergedItem( aGeometryItem );
1573 eWriteMode = csst::WritingMode_TB_RL;
1582 switch( eTextAnchor )
1588 eHorAlign = SvxAdjust::Center;
1613 eWriteMode = csst::WritingMode_TB_RL;
1622 switch ( eTextAnchor )
1628 eHorAlign = SvxAdjust::Center;
1675 rStrm.RewindRecord();
1681 sal_uInt16 nBofType;
1683 nBofType =
rStrm.ReaduInt16();
1688 SAL_INFO(
"sc.filter",
"XclImpChartObj::ReadChartSubStream - missing chart substream");
1741 rStrm.ResetRecord(
true );
1745 rStrm.ResetRecord(
false );
1761 OUString aEmbObjName;
1769 sal_Int64 nAspect = css::embed::Aspects::MSOLE_CONTENT;
1772 css::awt::Size aAwtSize( aSize.
Width(), aSize.
Height() );
1773 xEmbObj->setVisualAreaSize( nAspect, aAwtSize );
1782 *
GetDoc().GetDrawLayer(),
1794 if( !(
mxChart && pSdrOleObj) )
1797 const Reference< XEmbeddedObject >& xEmbObj = pSdrOleObj->
GetObjRef();
1800 Reference< XEmbedPersist > xPersist( xEmbObj, UNO_QUERY_THROW );
1801 Reference< XModel >
xModel( xEmbObj->getComponent(), UNO_QUERY_THROW );
1813 OSL_ENSURE(
mbOwnTab,
"XclImpChartObj::FinalizeTabChart - not allowed for embedded chart objects" );
1845 maScPos(
ScAddress::INITIALIZE_INVALID ),
1878 meBindMode( eBindMode )
1887 const Reference< XShape >& rxShape,
const tools::Rectangle& rAnchorRect )
const
1893 xSdrObj->NbcSetSnapRect( rAnchorRect );
1904 if( !xCtrlModel.is() )
1912 Reference< XMultiServiceFactory >
xFactory( pDocShell->
GetModel(), UNO_QUERY );
1919 Reference< XBindableValue > xBindable( xCtrlModel, UNO_QUERY_THROW );
1922 CellAddress aApiAddress;
1927 aValue.Value <<= aApiAddress;
1929 Sequence< Any > aArgs{
Any(aValue) };
1932 OUString aServiceName;
1938 Reference< XValueBinding > xBinding(
1939 xFactory->createInstanceWithArguments( aServiceName, aArgs ), UNO_QUERY_THROW );
1940 xBindable->setValueBinding( xBinding );
1952 Reference< XListEntrySink > xEntrySink( xCtrlModel, UNO_QUERY_THROW );
1955 CellRangeAddress aApiRange;
1960 aValue.Value <<= aApiRange;
1962 Sequence< Any > aArgs{
Any(aValue) };
1965 Reference< XListEntrySource > xEntrySource(
xFactory->createInstanceWithArguments(
1967 xEntrySink->setListEntrySource( xEntrySource );
1977 if( !xCtrlModel.is() )
2000 if ( !aScRanges.
empty() )
2012 if ( !aScRanges.
empty() )
2015 mxSrcRange = std::make_shared<ScRange>( rScRange );
2034 if( bWithBoundSize )
2037 nSize =
rStrm.ReaduInt16();
2040 rStrm.PushPosition();
2042 rStrm.PopPosition();
2043 rStrm.Ignore( nSize );
2062void lclExtractColor(
sal_uInt8& rnColorIdx,
const DffPropSet& rDffPropSet, sal_uInt32 nPropId )
2067 if( (nColor & 0xFF000000) == 0x08000000 )
2068 rnColorIdx = ::extract_value< sal_uInt8 >( nColor, 0, 8 );
2096 if( rFormatRuns.empty() )
2121 Reference< css::beans::XPropertySet > xPropset(
mxShape, UNO_QUERY );
2124 xPropset->setPropertyValue(
"Description",
Any(
aLabel) );
2127 SAL_WARN(
"sc.filter",
"Can't set a default text for TBX Control ");
2158 sal_Int16 nHorAlign = 1;
2168 namespace csss = ::com::sun::star::style;
2169 csss::VerticalAlignment eVerAlign = csss::VerticalAlignment_MIDDLE;
2176 rPropSet.
SetProperty(
"VerticalAlign", eVerAlign );
2186 namespace cssa = ::com::sun::star::awt;
2187 cssa::PushButtonType eButtonType = cssa::PushButtonType_STANDARD;
2189 eButtonType = cssa::PushButtonType_OK;
2191 eButtonType = cssa::PushButtonType_CANCEL;
2193 eButtonType = cssa::PushButtonType_HELP;
2195 rPropSet.
SetProperty(
"PushButtonType", sal_Int16( eButtonType ) );
2200 return "com.sun.star.form.component.CommandButton";
2211 mnCheckBoxFlags( 0 )
2259 sal_Int16 nApiState = 0;
2266 if( bSupportsTristate )
2268 rPropSet.
SetProperty(
"DefaultState", nApiState );
2271 namespace AwtVisualEffect = ::com::sun::star::awt::VisualEffect;
2279 namespace csss = ::com::sun::star::style;
2280 rPropSet.
SetProperty(
"VerticalAlign", csss::VerticalAlignment_MIDDLE );
2286 rPropSet.
SetProperty(
"BackgroundColor", nColor );
2292 return "com.sun.star.form.component.CheckBox";
2353 sal_Int32 nRefVal = 1;
2358 if ( xCtrlModel.is() )
2361 OUString sGroupName = OUString::number( pLeader->
GetDffShapeId() );
2385 return "com.sun.star.form.component.RadioButton";
2405 namespace csss = ::com::sun::star::style;
2406 rPropSet.
SetProperty(
"VerticalAlign", csss::VerticalAlignment_TOP );
2414 return "com.sun.star.form.component.FixedText";
2424 mnGroupBoxFlags( 0 )
2465 return "com.sun.star.form.component.GroupBox";
2487 return "com.sun.star.form.component.GroupBox";
2548 rPropSet.
SetProperty(
"DefaultValue", aText.toDouble() );
2564 OUString(
"com.sun.star.form.component.NumericField" ) :
2565 OUString(
"com.sun.star.form.component.TextField" );
2643 return "com.sun.star.form.component.SpinButton";
2676 namespace AwtScrollOrient = ::com::sun::star::awt::ScrollBarOrientation;
2678 rPropSet.
SetProperty(
"Orientation", nApiOrient );
2683 return "com.sun.star.form.component.ScrollBar";
2697 mbHasDefFontIdx( false )
2713 namespace AwtVisualEffect = ::com::sun::star::awt::VisualEffect;
2731 std::size_t nRecEnd =
rStrm.GetRecPos() + nRecLeft;
2734 "XclImpListBoxObj::ReadFullLbsData - invalid size of OBJLBSDATA record" );
2735 while (
rStrm.IsValid())
2737 if (
rStrm.GetRecPos() >= nRecEnd)
2792 aSelVec.push_back(
nIndex );
2798 aSelVec.push_back(
static_cast< sal_Int16
>(
mnSelEntry - 1 ) );
2800 if( !aSelVec.empty() )
2802 Sequence<sal_Int16> aSelSeq(aSelVec.data(),
static_cast<sal_Int32
>(aSelVec.size()));
2803 rPropSet.
SetProperty(
"DefaultSelection", aSelSeq );
2809 return "com.sun.star.form.component.ListBox";
2823 mnDropDownFlags( 0 ),
2898 Sequence< sal_Int16 > aSelSeq{ o3tl::narrowing<sal_Int16>(
mnSelEntry - 1) };
2899 rPropSet.
SetProperty(
"DefaultSelection", aSelSeq );
2907 OUString(
"com.sun.star.form.component.ComboBox" ) :
2908 OUString(
"com.sun.star.form.component.ListBox" );
2921 mnCtlsStrmSize( 0 ),
2922 mbEmbedded( false ),
2926 mbUseCtlsStrm( false )
2935 OUStringBuffer aStrgName;
2939 static const char spcHexChars[] =
"0123456789ABCDEF";
2941 aStrgName.append(OUStringChar( spcHexChars[ ::extract_value< sal_uInt8 >(
mnStorageId,
nIndex - 4, 4 ) ] ));
2943 return aStrgName.makeStringAndClear();
2948 sal_uInt16 nLinkSize;
2951 nLinkSize =
rStrm.ReaduInt16();
2963 sal_uInt16 nLinkSize;
2966 nLinkSize =
rStrm.ReaduInt16();
2978 sal_uInt16 nLinkSize;
2981 nLinkSize =
rStrm.ReaduInt16();
3037 *
GetDoc().GetDrawLayer(),
3052 if (!
sName.isEmpty())
3072 if( pOleSdrObj && pDocShell )
3075 Reference< XEmbeddedObject > xEmbObj = pOleSdrObj->
GetObjRef();
3092 if( aOldName != aNewName )
3103 nFlags =
rStrm.ReaduInt16();
3110 nFlags =
rStrm.ReaduInt16();
3114 OSL_ENSURE(
mbControl || !
mbUseCtlsStrm,
"XclImpPictureObj::ReadFlags8 - CTLS stream for controls only" );
3120 std::size_t nLinkEnd =
rStrm.GetRecPos() + nLinkSize;
3121 if( nLinkSize >= 6 )
3123 sal_uInt16 nFmlaSize;
3124 nFmlaSize =
rStrm.ReaduInt16();
3125 OSL_ENSURE( nFmlaSize > 0,
"XclImpPictureObj::ReadPictFmla - missing link formula" );
3142 sal_uInt16 nNameIdx;
3145 nNameIdx =
rStrm.ReaduInt16();
3148 if( pExtName && pExtName->
IsOLE() )
3154 sal_uInt16 nXti, nExtName;
3155 nXti =
rStrm.ReaduInt16();
3156 nExtName =
rStrm.ReaduInt16();
3169 OSL_ENSURE( nFmlaSize == 5,
"XclImpPictureObj::ReadPictFmla - unexpected formula size" );
3170 rStrm.Ignore( nFmlaSize - 1 );
3175 if(
rStrm.GetRecPos() + 2 <= nLinkEnd )
3177 sal_uInt16 nLen =
rStrm.ReaduInt16();
3199 if(
rStrm.GetRecLeft() <= 8 )
return;
3205 if(
rStrm.GetRecLeft() <= 8 )
return;
3208 sal_uInt32 nAddStrSize;
3209 nAddStrSize =
rStrm.ReaduInt32();
3210 OSL_ENSURE(
rStrm.GetRecLeft() >= nAddStrSize + 4,
"XclImpPictureObj::ReadPictFmla - missing data" );
3211 if(
rStrm.GetRecLeft() >= nAddStrSize + 4 )
3213 rStrm.Ignore( nAddStrSize );
3229 if( nDffShapeId > 0 )
3231 maSdrInfoMap[ nDffShapeId ].Set( &rSdrObj, nDffFlags );
3239 XclImpSdrObjMap::iterator aIt =
maSdrObjMap.find( &rSdrObj );
3249 if(
SdrObjList* pSubList = pGroupObj->GetSubList() )
3253 for(
SdrObject* pChildObj = aObjIt.
Next(); pChildObj; pChildObj = aObjIt.
Next() )
3261 for (
auto const & pRule :
aCList)
3278 XclImpSdrInfoMap::const_iterator aIt =
maSdrInfoMap.find( nDffShapeId );
3281 rpSdrObj = aIt->second.mpSdrObj;
3283 *pnDffFlags = aIt->second.mnDffFlags;
3311 mrDrawing( rDrawing ),
3312 mrSdrModel( rSdrModel ),
3313 mrSdrPage( rSdrPage ),
3314 mnLastCtrlIndex( -1 ),
3315 mbHasCtrlForm( false )
3354 Reference< XIndexContainer > xIdToOleName;
3356 xIdToOleName->getByIndex( nObjId ) >>= sOleName;
3371 OSL_ENSURE(
mxProgress,
"XclImpDffConverter::Progress - invalid call, no progress bar" );
3377 XclImpDffConvDataRef xConvData = std::make_shared<XclImpDffConvData>( rDrawing, rSdrModel, rSdrPage );
3379 SetModel( &xConvData->mrSdrModel, 1440 );
3406 for(
const auto& rxDrawObj : rDrawObjs )
3425 OSL_ENSURE( !
maDataStack.empty(),
"XclImpDffConverter::FinalizeDrawing - no drawing manager on stack" );
3452 css::awt::Size aDummySize;
3453 Reference< XShape > xShape;
3459 ScriptEventDescriptor aDescriptor;
3463 Reference< XEventAttacherManager > xEventMgr( rConvData.
mxCtrlForm, UNO_QUERY_THROW );
3464 xEventMgr->registerScriptEvent( rConvData.
mnLastCtrlIndex, aDescriptor );
3490 Reference< XShape > xShape;
3493 Reference< XFormComponent > xFComp;
3515 if( pDocShell && xSrcStrg.
is() && (!aStrgName.isEmpty()) )
3525 if( aGraphic.
GetType() != GraphicType::NONE )
3528 namespace cssea = ::com::sun::star::embed::Aspects;
3529 sal_Int64 nAspects = rPicObj.
IsSymbol() ? cssea::MSOLE_ICON : cssea::MSOLE_CONTENT;
3574 rDffStrm >> aAnchor;
3576 if (!rDffStrm.
good())
3578 SAL_WARN(
"sc.filter",
"ProcessClientAnchor2 short read");
3596 XclImpDrawObjClientData()
3597 : m_pTopLevelObj(nullptr)
3600 virtual void NotifyFreeObj(
SdrObject*)
override {}
3620 bool bGlobalPageGroup( rDffObjData.
nSpFlags & ShapeFlag::Patriarch );
3621 if( !xDrawObj || !xDrawObj->IsProcessSdrObj() || bGlobalPageGroup )
3627 XclImpDrawObjClientData& rDrawObjClientData =
static_cast<XclImpDrawObjClientData&
>(rClientData);
3628 const bool bIsTopLevel = !rDrawObjClientData.m_pTopLevelObj;
3630 rDrawObjClientData.m_pTopLevelObj = xDrawObj.get();
3633 if(
dynamic_cast< SdrEdgeObj*
>( xSdrObj.get() ) )
3634 xDrawObj->SetAreaObj(
false );
3640 bool bEmbeddedGroup = !bIsTopLevel &&
dynamic_cast< SdrObjGroup*
>( xSdrObj.get() );
3641 if( !bEmbeddedGroup && !xDrawObj->IsValidSize( rAnchorRect ) )
3649 xDrawObj->SetDffData( rDffObjData, aObjName, aHyperlink,
bVisible, bAutoMargin );
3655 pTextObj->SetTextData( *pTextData );
3659 pTbxObj->SetDffProperties( *
this );
3664 xSdrObj = std::move( xNewSdrObj );
3674 xDrawObj->PreProcessSdrObject( *
this, *xSdrObj );
3680 if( !xDrawObj->IsInsertSdrObj() )
3699 xDrawObj->PostProcessSdrObject( *
this, *xSdrObj );
3717 if( xSdrObj && xDrawObj )
3724 return xSdrObj.get();
3728 const css::awt::Size& , Reference< XShape >* pxShape,
3734 Reference< XIndexContainer > xFormIC( rConvData.
mxCtrlForm, UNO_QUERY_THROW );
3735 Reference< XControlModel > xCtrlModel( rxFormComp, UNO_QUERY_THROW );
3739 Reference< XControlShape > xCtrlShape( xShape, UNO_QUERY_THROW );
3742 sal_Int32 nNewIndex = xFormIC->getCount();
3743 xFormIC->insertByIndex( nNewIndex,
Any( rxFormComp ) );
3748 xCtrlShape->setControl( xCtrlModel );
3749 if( pxShape ) *pxShape = xShape;
3754 OSL_FAIL(
"XclImpDffConverter::InsertControl - cannot create form control" );
3764 OSL_ENSURE( !
maDataStack.empty(),
"XclImpDffConverter::GetConvData - no drawing manager on stack" );
3770 OSL_ENSURE( !
maDataStack.empty(),
"XclImpDffConverter::GetConvData - no drawing manager on stack" );
3790 ::std::vector< sal_uInt8 >
aBuffer( nBufferSize );
3792 if (rDffStrm.
ReadBytes(pnData, nBufferSize) == nBufferSize)
3808 bool isBreak(
false);
3809 while (!isBreak && rDffStrm.
good() && rDffStrm.
Tell() < nEndPos)
3839 bool isBreak(
false);
3840 while (!isBreak && rDffStrm.
good() && rDffStrm.
Tell() < nEndPos)
3872 XclImpDrawObjClientData aDrawObjClientData;
3880 if (aDrawObjClientData.m_pTopLevelObj && xSdrObj )
3917 Reference< XFormsSupplier > xFormsSupplier( rConvData.
mrSdrPage.
getUnoPage(), UNO_QUERY_THROW );
3918 Reference< XNameContainer > xFormsNC( xFormsSupplier->getForms(), UNO_SET_THROW );
3939 mbOleObjs( bOleObjects )
3950 sal_uInt16 nFormat =
rStrm.ReaduInt16();
3952 sal_uInt32 nDataSize =
rStrm.ReaduInt32();
3953 if( nDataSize <=
rStrm.GetRecLeft() )
3959 default: OSL_FAIL(
"XclImpDrawing::ReadImgData - unknown image format" );
3972 OSL_ENSURE(
maDffStrm.
Tell() == 0,
"XclImpDrawing::ReadObj - unexpected DFF stream data, OBJ will be ignored" );
3994 maObjMapId[ xDrawObj->GetObjId() ] = xDrawObj;
4002 rStrm.ResetRecord(
false );
4008 while( bLoop )
switch(
rStrm.GetNextRecId() )
4013 rStrm.StartNextRecord();
4017 rStrm.StartNextRecord();
4021 rStrm.StartNextRecord();
4029 rStrm.ResetRecord(
true );
4043 xDrawObj = aIt->second;
4050 XclImpObjMapById::const_iterator aIt =
maObjMapId.find( nObjId );
4052 xDrawObj = aIt->second;
4066 return aIt->second.get();
4078 [](
const std::size_t& rSum,
const XclImpObjMap::value_type& rEntry) { return rSum + rEntry.second->GetProgressSize(); });
4092 pDrawObj->SetProcessSdrObj(
false );
4106 OSL_ENSURE( rxDrawObj,
"XclImpDrawing::AppendRawObject - unexpected empty reference" );
4117 rStrm.CopyToStream( aMemStrm,
rStrm.GetRecLeft() );
4121 if( ::ReadWindowMetafile( aMemStrm, aGDIMetaFile ) )
4122 rGraphic = aGDIMetaFile;
4137 rStrm.PushPosition();
4138 sal_uInt32 nHdrSize;
4139 sal_uInt16 nWidth, nHeight, nPlanes, nDepth;
4140 nHdrSize =
rStrm.ReaduInt32();
4141 nWidth =
rStrm.ReaduInt16();
4142 nHeight =
rStrm.ReaduInt16();
4143 nPlanes =
rStrm.ReaduInt16();
4144 nDepth =
rStrm.ReaduInt16();
4145 if( (nHdrSize == 12) && (nPlanes == 1) && (nDepth == 32) )
4148 aMemStrm.
SetEndian( SvStreamEndian::LITTLE );
4150 rStrm.CopyToStream( aMemStrm,
rStrm.GetRecLeft() );
4152 rStrm.PopPosition();
4156 if( aMemStrm.
Tell() == 0 )
4157 rStrm.CopyToStream( aMemStrm,
rStrm.GetRecLeft() );
4162 if(
ReadDIB(aBitmap, aMemStrm,
false) )
4177 maObjMapId[ xDrawObj->GetObjId() ] = xDrawObj;
4186 xTextData->maData.ReadTxo8(
rStrm );
4189 xTextData->mxString.reset();
4191 if( xTextData->maData.mnTextLen > 0 )
4194 OSL_ENSURE( bValid,
"XclImpDrawing::ReadTxo - missing CONTINUE record" );
4196 xTextData->mxString = std::make_shared<XclImpString>(
rStrm.ReadUniString( xTextData->maData.mnTextLen ) );
4200 if( xTextData->maData.mnFormatSize > 0 )
4203 OSL_ENSURE( bValid,
"XclImpDrawing::ReadTxo - missing CONTINUE record" );
4205 xTextData->ReadFormats(
rStrm );
4211 maScUsedArea(
ScAddress::INITIALIZE_INVALID )
4238 auto xChartObj = std::make_shared<XclImpChartObj>(
GetRoot(),
true );
4239 xChartObj->ReadChartSubStream(
rStrm );
4269 sal_uInt16 nTotalLen =
rStrm.ReaduInt16();
4275 sal_uInt16 nPartLen = ::std::min( nTotalLen,
static_cast< sal_uInt16
>(
rStrm.GetRecLeft() ) );
4276 OUStringBuffer aNoteText(
rStrm.ReadRawByteString( nPartLen ));
4277 nTotalLen = nTotalLen - nPartLen;
4284 if (!
rStrm.StartNextRecord())
4287 nPartLen =
rStrm.ReaduInt16();
4288 OSL_ENSURE( aXclPos.mnRow == 0xFFFF,
"XclImpObjectManager::ReadNote3 - missing continuation NOTE record" );
4289 if( aXclPos.mnRow == 0xFFFF )
4291 OSL_ENSURE( nPartLen <= nTotalLen,
"XclImpObjectManager::ReadNote3 - string too long" );
4292 aNoteText.append(
rStrm.ReadRawByteString( nPartLen ));
4293 nTotalLen = nTotalLen - ::std::min( nTotalLen, nPartLen );
4309 sal_uInt16 nFlags, nObjId;
4311 nFlags =
rStrm.ReaduInt16();
4312 nObjId =
rStrm.ReaduInt16();
4318 pNoteObj->SetNoteData( aScNotePos, nFlags );
4367 rxDrawing = std::make_shared<XclImpSheetDrawing>(
GetRoot(), nScTab );
4374 if( !
GetDoc().GetDrawLayer() )
4379 [](
const std::size_t& rSum,
const XclImpSheetDrawingMap::value_type& rEntry) { return rSum + rEntry.second->GetProgressSize(); });
4381 if( nProgressSize == 0 )
4387 rEntry.second->ConvertObjects( aDffConv );
4395 OUStringBuffer aDefName;
4398 aDefName.append(aIt->second);
4399 return aDefName.append(
' ').append(
static_cast<sal_Int32
>(rDrawObj.
GetObjId())).makeStringAndClear();
4404 XclImpSheetDrawingMap::const_iterator aIt =
maSheetDrawings.find( nScTab );
4406 return aIt->second->GetUsedArea();
4414 maDffConv( rRoot, maDummyStrm )
4420 sal_uInt32 nPropSetSize;
4422 rStrm.PushPosition();
4424 nPropSetSize =
rStrm.ReaduInt32();
4425 rStrm.PopPosition();
css::uno::Reference< css::frame::XModel2 > mxModel
Bitmap GetBitmap(Color aTransparentReplaceColor) const
sal_uInt32 GetPropertyValue(sal_uInt32 nId, sal_uInt32 nDefault) const
bool IsProperty(sal_uInt32 nRecType) const
bool GetPropertyBool(sal_uInt32 nId) const
OUString GetPropertyString(sal_uInt32 nId, SvStream &rStrm) const
bool SeekToContent(sal_uInt32 nRecType, SvStream &rSt) const
void ReadPropSet(SvStream &rIn, SvxMSDffClientData *pClientData) const
void ApplyAttributes(SvStream &rIn, SfxItemSet &rSet) const
GraphicType GetType() const
void SetOutlinerMode(OutlinerMode nNew)
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
void IncCol(SCCOL nDelta=1)
void IncRow(SCROW nDelta=1)
static ScMacroInfo * GetMacroInfo(SdrObject *pObj, bool bCreate=false)
static void SetCellAnchoredFromPosition(SdrObject &rObj, const ScDocument &rDoc, SCTAB nTab, bool bResizeWithCell)
OUString GetCodeName(SCTAB nTab) const
static ScPostIt * CreateNoteFromObjectData(ScDocument &rDoc, const ScAddress &rPos, SfxItemSet &&oItemSet, const OutlinerParaObject &rOutlinerObj, const tools::Rectangle &rCaptionRect, bool bShown)
Creates a cell note based on the passed caption object data.
static ScPostIt * CreateNoteFromString(ScDocument &rDoc, const ScAddress &rPos, const OUString &rNoteText, bool bShown, bool bAlwaysCreateCaption, sal_uInt32 nPostItId=0)
Creates a cell note based on the passed string and inserts it into the document.
void ExtendTo(const ScRange &rRange)
static void FillApiAddress(css::table::CellAddress &rApiAddress, const ScAddress &rScAddress)
static void FillApiRange(css::table::CellRangeAddress &rApiRange, const ScRange &rScRange)
static css::uno::Reference< css::uno::XInterface > CreateInstance(const css::uno::Reference< css::lang::XMultiServiceFactory > &xFactory, const OUString &rServiceName)
Creates an instance from the passed service name, using the passed service factory.
A wrapper for a UNO property set.
void SetProperty(const OUString &rPropName, const Type &rValue)
Puts the passed value into the property set.
void SetStringProperty(const OUString &rPropName, const OUString &rValue)
Puts the passed string into the property set.
void SetBoolProperty(const OUString &rPropName, bool bValue)
Puts the passed Boolean value into the property set.
void SetPropertyValue(const css::beans::PropertyValue &rPropVal)
void EnableUndo(bool bEnable)
bool IsUndoEnabled() const
virtual void NbcInsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
static SdrObject * getSdrObjectFromXShape(const css::uno::Reference< css::uno::XInterface > &xInt)
virtual void NbcSetLayer(SdrLayerID nLayer)
virtual OutlinerParaObject * GetOutlinerParaObject() const
const SfxItemSet & GetMergedItemSet() const
void SetMergedItem(const SfxPoolItem &rItem)
virtual void SetName(const OUString &rStr, const bool bSetChanged=true)
void setHyperlink(const OUString &sHyperlink)
virtual const tools::Rectangle & GetLogicRect() const
static Graphic GetEmptyOLEReplacementGraphic()
css::uno::Reference< css::embed::XEmbeddedObject > const & GetObjRef() const
const OUString & GetPersistName() const
void SetPersistName(const OUString &rPersistName)
css::uno::Reference< css::uno::XInterface > const & getUnoPage()
const css::uno::Reference< css::awt::XControlModel > & GetUnoControlModel() const
SfxItemSet CloneAsValue(bool bItems=true, SfxItemPool *pToPool=nullptr) const
comphelper::EmbeddedObjectContainer & GetEmbeddedObjectContainer() const
css::uno::Reference< css::frame::XModel3 > GetModel() const
css::uno::Reference< css::embed::XStorage > const & GetStorage()
constexpr tools::Long Height() const
constexpr tools::Long Width() const
void SetEndian(SvStreamEndian SvStreamEndian)
virtual sal_uInt64 TellEnd()
SvStream & ReadInt16(sal_Int16 &rInt16)
std::size_t WriteBytes(const void *pData, std::size_t nSize)
SvStream & WriteInt16(sal_Int16 nInt16)
SvStream & WriteUChar(unsigned char nChar)
SvStream & WriteUInt16(sal_uInt16 nUInt16)
SvStream & WriteUInt32(sal_uInt32 nUInt32)
sal_uInt64 Seek(sal_uInt64 nPos)
std::size_t ReadBytes(void *pData, std::size_t nSize)
sal_uInt64 SeekRel(sal_Int64 nPos)
SvStream & ReadUChar(unsigned char &rChar)