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 );
387 const DffObjData& rDffObjData,
const OUString& rObjName,
const OUString& rHyperlink,
388 bool bVisible,
bool bAutoMargin )
470 if( xSdrObj && xSdrObj->IsUnoObj() &&
474 if( pSdrUnoObj !=
nullptr )
477 Reference< XPropertySet > xPropSet(xCtrlModel,UNO_QUERY);
478 static constexpr OUStringLiteral sPropertyName(
u"ControlTypeinMSO");
480 enum { eCreateFromOffice = 0, eCreateFromMSTBXControl, eCreateFromMSOCXControl };
482 if(
mnObjType == 7 || (mnObjType < 25 && mnObjType > 10) )
487 const sal_Int16 nTBXControlType = eCreateFromMSTBXControl ;
488 xPropSet->setPropertyValue(sPropertyName,
Any(nTBXControlType));
492 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::CreateSdrObject, this control can't be set the property ControlTypeinMSO!");
498 static constexpr OUStringLiteral sObjIdPropertyName(
u"ObjIDinMSO");
504 const sal_Int16 nOCXControlType = eCreateFromMSOCXControl;
505 xPropSet->setPropertyValue(sPropertyName,
Any(nOCXControlType));
507 xPropSet->setPropertyValue(sObjIdPropertyName,
Any(sal_uInt16(
mnObjId)));
511 SAL_WARN(
"sc.filter",
"XclImpDrawObjBase::CreateSdrObject, this control can't be set the property ObjIDinMSO!");
561 if (!sMacro.isEmpty())
563 pInfo->SetMacro(sMacro);
589 if(
rStrm.GetRecPos() & 1 )
rStrm.Ignore( 1 );
596 rStrm.Ignore( nMacroSize );
598 if(
rStrm.GetRecPos() & 1 )
rStrm.Ignore( 1 );
604 rStrm.Ignore( nMacroSize );
610 rStrm.Ignore( nMacroSize );
616 if(
rStrm.GetRecLeft() <= 6 )
620 sal_uInt16 nFmlaSize;
621 nFmlaSize =
rStrm.ReaduInt16();
623 OSL_ENSURE( nFmlaSize == 7,
"XclImpDrawObjBase::ReadMacro - unexpected formula size" );
627 sal_uInt16 nExtSheet, nExtName;
628 nTokenId =
rStrm.ReaduInt8();
629 nExtSheet =
rStrm.ReaduInt16();
630 nExtName =
rStrm.ReaduInt16();
632 "XclImpDrawObjBase::ReadMacro - tNameXR token expected" );
721 static const sal_uInt8 sppnPatterns[][ 8 ] =
723 { 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55 },
724 { 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD },
725 { 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22 },
726 { 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00 },
727 { 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC },
728 { 0x33, 0x66, 0xCC, 0x99, 0x33, 0x66, 0xCC, 0x99 },
729 { 0xCC, 0x66, 0x33, 0x99, 0xCC, 0x66, 0x33, 0x99 },
730 { 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33 },
731 { 0xCC, 0xFF, 0x33, 0xFF, 0xCC, 0xFF, 0x33, 0xFF },
732 { 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00 },
733 { 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88 },
734 { 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88 },
735 { 0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11 },
736 { 0xFF, 0x11, 0x11, 0x11, 0xFF, 0x11, 0x11, 0x11 },
737 { 0xAA, 0x44, 0xAA, 0x11, 0xAA, 0x44, 0xAA, 0x11 },
738 { 0x88, 0x00, 0x22, 0x00, 0x88, 0x00, 0x22, 0x00 },
739 { 0x80, 0x00, 0x08, 0x00, 0x80, 0x00, 0x08, 0x00 }
747 for(
size_t nIdx = 0; nIdx < 8; ++nIdx )
751 (void)
ReadDIB(aBitmap, aMemStrm,
false);
756 ::std::swap( aPattColor, aBackColor );
856 sal_uInt16 nObjFlags, nMacroSize;
859 nObjFlags =
rStrm.ReaduInt16();
861 nMacroSize =
rStrm.ReaduInt16();
875 sal_uInt16 nObjFlags, nMacroSize;
878 nObjFlags =
rStrm.ReaduInt16();
880 nMacroSize =
rStrm.ReaduInt16();
895 sal_uInt16 nObjFlags, nMacroSize, nNameLen;
898 nObjFlags =
rStrm.ReaduInt16();
900 nMacroSize =
rStrm.ReaduInt16();
902 nNameLen =
rStrm.ReaduInt16();
920 if (
rStrm.GetRecLeft() < 4)
923 sal_uInt16 nSubRecId =
rStrm.ReaduInt16();
924 sal_uInt16 nSubRecSize =
rStrm.ReaduInt16();
925 rStrm.PushPosition();
927 nSubRecSize =
static_cast< sal_uInt16
>( ::std::min< std::size_t >( nSubRecSize,
rStrm.GetRecLeft() ) );
932 OSL_ENSURE(
rStrm.GetRecPos() == 4,
"XclImpDrawObjBase::ImplReadObj8 - unexpected OBJCMO subrecord" );
933 if( (
rStrm.GetRecPos() == 4) && (nSubRecSize >= 6) )
935 sal_uInt16 nObjFlags;
938 nObjFlags =
rStrm.ReaduInt16( );
953 rStrm.Ignore( nSubRecSize );
971 sal_uInt32 nDataSize =
rStrm.ReaduInt32();
972 nDataSize -=
rStrm.GetRecLeft();
980 if (!
rStrm.StartNextRecord())
982 OSL_ENSURE( nDataSize >=
rStrm.GetRecLeft(),
"XclImpDrawObjBase::ImplReadObj8 - CONTINUE too long" );
983 nDataSize -= ::std::min< sal_uInt32 >(
rStrm.GetRecLeft(), nDataSize );
985 OSL_ENSURE( nDataSize == 0,
"XclImpDrawObjBase::ImplReadObj8 - missing CONTINUE records" );
993 if( pGroupObj->TryInsert( xDrawObj ) )
995 mObjs.push_back( xDrawObj );
1000 return std::accumulate(
mObjs.begin(),
mObjs.end(), std::size_t(0),
1001 [](
const std::size_t& rSum,
const XclImpDrawObjRef& rxObj) { return rSum + rxObj->GetProgressSize(); });
1012 mnFirstUngrouped( 0 )
1059 *
GetDoc().GetDrawLayer()));
1061 SdrObjList& rObjList = *xSdrObj->GetSubList();
1129 *
GetDoc().GetDrawLayer(),
1136 bool bLineStart =
false;
1137 bool bLineEnd =
false;
1138 bool bFilled =
false;
1139 switch( nArrowType )
1141 case EXC_OBJ_ARROW_OPEN: bLineStart =
false; bLineEnd =
true; bFilled =
false;
break;
1146 if( bLineStart || bLineEnd )
1149 double fArrowWidth = 3.0;
1150 switch( nArrowWidth )
1158 double fArrowLength = 3.0;
1159 switch( nArrowLength )
1167#define EXC_ARROW_POINT( x, y ) ::basegfx::B2DPoint( fArrowWidth * (x), fArrowLength * (y) )
1184#undef EXC_ARROW_POINT
1190 xSdrObj->SetMergedItem(
XLineStartItem( OUString(), aArrowPolyPoly ) );
1196 xSdrObj->SetMergedItem(
XLineEndItem( OUString(), aArrowPolyPoly ) );
1248 *
GetDoc().GetDrawLayer(),
1264 *
GetDoc().GetDrawLayer(),
1313 nStartAngle = 0_deg100;
1314 nEndAngle = 9000_deg100;
1319 nStartAngle = 9000_deg100;
1320 nEndAngle = 18000_deg100;
1325 nStartAngle = 18000_deg100;
1326 nEndAngle = 27000_deg100;
1331 nStartAngle = 27000_deg100;
1332 nEndAngle = 0_deg100;
1340 *
GetDoc().GetDrawLayer(),
1363 OSL_ENSURE(
rStrm.GetRecLeft() / 4 ==
mnPointCount,
"XclImpPolygonObj::ReadCoordList - wrong polygon point count" );
1366 if (
rStrm.GetRecLeft() < 4)
1368 sal_uInt16 nX =
rStrm.ReaduInt16();
1369 sal_uInt16 nY =
rStrm.ReaduInt16();
1402 return ::basegfx::B2DPoint(
1403 rAnchorRect.
Left() +
static_cast< sal_Int32
>( ::std::min< double >( rPoint.
X(), 16384.0 ) / 16384.0 * rAnchorRect.
GetWidth() + 0.5 ),
1404 rAnchorRect.
Top() +
static_cast< sal_Int32
>( ::std::min< double >( rPoint.
Y(), 16384.0 ) / 16384.0 * rAnchorRect.
GetHeight() + 0.5 ) );
1416 for(
const auto& rCoord :
maCoords )
1417 aB2DPolygon.
append( lclGetPolyPoint( rAnchorRect, rCoord ) );
1420 aB2DPolygon.
append( lclGetPolyPoint( rAnchorRect,
maCoords.front() ) );
1425 *
GetDoc().GetDrawLayer(),
1441 if(
rStrm.GetRecPos() & 1 )
rStrm.Ignore( 1 );
1491 *
GetDoc().GetDrawLayer()));
1492 xSdrObj->NbcSetSnapRect( rAnchorRect );
1493 OUString aRectType =
"rectangle";
1494 xSdrObj->MergeDefaultAttributes( &aRectType );
1515 SAL_WARN(
"sc.filter",
"truncating slow long rich text for fuzzing performance");
1520 std::unique_ptr< EditTextObject > xEditObj(
1524 pTextObj->NbcSetOutlinerParaObject( std::move(aOutlineObj) );
1543 namespace csst = ::com::sun::star::text;
1544 csst::WritingMode eWriteMode = csst::WritingMode_LR_TB;
1550 eWriteMode = csst::WritingMode_LR_TB;
1572 css::beans::PropertyValue aTextRotateAngle;
1573 aTextRotateAngle.Name =
"TextRotateAngle";
1574 aTextRotateAngle.Value <<= 180.0;
1577 pObjCustomShape->SetMergedItem( aGeometryItem );
1579 eWriteMode = csst::WritingMode_TB_RL;
1588 switch( eTextAnchor )
1594 eHorAlign = SvxAdjust::Center;
1619 eWriteMode = csst::WritingMode_TB_RL;
1628 switch ( eTextAnchor )
1634 eHorAlign = SvxAdjust::Center;
1681 rStrm.RewindRecord();
1687 sal_uInt16 nBofType;
1689 nBofType =
rStrm.ReaduInt16();
1694 SAL_INFO(
"sc.filter",
"XclImpChartObj::ReadChartSubStream - missing chart substream");
1747 rStrm.ResetRecord(
true );
1751 rStrm.ResetRecord(
false );
1767 OUString aEmbObjName;
1778 sal_Int64 nAspect = css::embed::Aspects::MSOLE_CONTENT;
1781 css::awt::Size aAwtSize( aSize.
Width(), aSize.
Height() );
1782 xEmbObj->setVisualAreaSize( nAspect, aAwtSize );
1791 *
GetDoc().GetDrawLayer(),
1803 if( !(
mxChart && pSdrOleObj) )
1806 const Reference< XEmbeddedObject >& xEmbObj = pSdrOleObj->
GetObjRef();
1809 Reference< XEmbedPersist > xPersist( xEmbObj, UNO_QUERY_THROW );
1810 Reference< XModel >
xModel( xEmbObj->getComponent(), UNO_QUERY_THROW );
1822 OSL_ENSURE(
mbOwnTab,
"XclImpChartObj::FinalizeTabChart - not allowed for embedded chart objects" );
1854 maScPos(
ScAddress::INITIALIZE_INVALID ),
1879 OUString(), *pOutlinerObj,
1887 meBindMode( eBindMode )
1896 const Reference< XShape >& rxShape,
const tools::Rectangle& rAnchorRect )
const
1902 xSdrObj->NbcSetSnapRect( rAnchorRect );
1913 if( !xCtrlModel.is() )
1921 Reference< XMultiServiceFactory >
xFactory( pDocShell->
GetModel(), UNO_QUERY );
1928 Reference< XBindableValue > xBindable( xCtrlModel, UNO_QUERY_THROW );
1931 CellAddress aApiAddress;
1936 aValue.Value <<= aApiAddress;
1938 Sequence< Any > aArgs{
Any(aValue) };
1941 OUString aServiceName;
1947 Reference< XValueBinding > xBinding(
1948 xFactory->createInstanceWithArguments( aServiceName, aArgs ), UNO_QUERY_THROW );
1949 xBindable->setValueBinding( xBinding );
1961 Reference< XListEntrySink > xEntrySink( xCtrlModel, UNO_QUERY_THROW );
1964 CellRangeAddress aApiRange;
1969 aValue.Value <<= aApiRange;
1971 Sequence< Any > aArgs{
Any(aValue) };
1974 Reference< XListEntrySource > xEntrySource(
xFactory->createInstanceWithArguments(
1976 xEntrySink->setListEntrySource( xEntrySource );
1986 if( !xCtrlModel.is() )
2009 if ( !aScRanges.
empty() )
2021 if ( !aScRanges.
empty() )
2024 mxSrcRange = std::make_shared<ScRange>( rScRange );
2043 if( bWithBoundSize )
2046 nSize =
rStrm.ReaduInt16();
2049 rStrm.PushPosition();
2051 rStrm.PopPosition();
2052 rStrm.Ignore( nSize );
2071void lclExtractColor(
sal_uInt8& rnColorIdx,
const DffPropSet& rDffPropSet, sal_uInt32 nPropId )
2076 if( (nColor & 0xFF000000) == 0x08000000 )
2077 rnColorIdx = ::extract_value< sal_uInt8 >( nColor, 0, 8 );
2098 if (!xCtrlModel.is())
2115 if( rFormatRuns.empty() )
2140 Reference< css::beans::XPropertySet > xPropset(
mxShape, UNO_QUERY );
2143 xPropset->setPropertyValue(
"Description",
Any(
aLabel) );
2146 SAL_WARN(
"sc.filter",
"Can't set a default text for TBX Control ");
2177 sal_Int16 nHorAlign = 1;
2187 namespace csss = ::com::sun::star::style;
2188 csss::VerticalAlignment eVerAlign = csss::VerticalAlignment_MIDDLE;
2195 rPropSet.
SetProperty(
"VerticalAlign", eVerAlign );
2205 namespace cssa = ::com::sun::star::awt;
2206 cssa::PushButtonType eButtonType = cssa::PushButtonType_STANDARD;
2208 eButtonType = cssa::PushButtonType_OK;
2210 eButtonType = cssa::PushButtonType_CANCEL;
2212 eButtonType = cssa::PushButtonType_HELP;
2214 rPropSet.
SetProperty(
"PushButtonType", sal_Int16( eButtonType ) );
2219 return "com.sun.star.form.component.CommandButton";
2230 mnCheckBoxFlags( 0 )
2278 sal_Int16 nApiState = 0;
2285 if( bSupportsTristate )
2287 rPropSet.
SetProperty(
"DefaultState", nApiState );
2290 namespace AwtVisualEffect = ::com::sun::star::awt::VisualEffect;
2298 namespace csss = ::com::sun::star::style;
2299 rPropSet.
SetProperty(
"VerticalAlign", csss::VerticalAlignment_MIDDLE );
2305 rPropSet.
SetProperty(
"BackgroundColor", nColor );
2311 return "com.sun.star.form.component.CheckBox";
2372 sal_Int32 nRefVal = 1;
2377 if ( xCtrlModel.is() )
2380 OUString sGroupName = OUString::number( pLeader->
GetDffShapeId() );
2404 return "com.sun.star.form.component.RadioButton";
2429 namespace csss = ::com::sun::star::style;
2430 rPropSet.
SetProperty(
"VerticalAlign", csss::VerticalAlignment_TOP );
2438 return "com.sun.star.form.component.FixedText";
2448 mnGroupBoxFlags( 0 )
2489 return "com.sun.star.form.component.GroupBox";
2511 return "com.sun.star.form.component.GroupBox";
2572 rPropSet.
SetProperty(
"DefaultValue", aText.toDouble() );
2588 OUString(
"com.sun.star.form.component.NumericField" ) :
2589 OUString(
"com.sun.star.form.component.TextField" );
2667 return "com.sun.star.form.component.SpinButton";
2700 namespace AwtScrollOrient = ::com::sun::star::awt::ScrollBarOrientation;
2702 rPropSet.
SetProperty(
"Orientation", nApiOrient );
2707 return "com.sun.star.form.component.ScrollBar";
2721 mbHasDefFontIdx( false )
2737 namespace AwtVisualEffect = ::com::sun::star::awt::VisualEffect;
2755 std::size_t nRecEnd =
rStrm.GetRecPos() + nRecLeft;
2758 "XclImpListBoxObj::ReadFullLbsData - invalid size of OBJLBSDATA record" );
2759 while (
rStrm.IsValid())
2761 if (
rStrm.GetRecPos() >= nRecEnd)
2816 aSelVec.push_back(
nIndex );
2822 aSelVec.push_back(
static_cast< sal_Int16
>(
mnSelEntry - 1 ) );
2824 if( !aSelVec.empty() )
2826 Sequence<sal_Int16> aSelSeq(aSelVec.data(),
static_cast<sal_Int32
>(aSelVec.size()));
2827 rPropSet.
SetProperty(
"DefaultSelection", aSelSeq );
2833 return "com.sun.star.form.component.ListBox";
2847 mnDropDownFlags( 0 ),
2922 Sequence< sal_Int16 > aSelSeq{ o3tl::narrowing<sal_Int16>(
mnSelEntry - 1) };
2923 rPropSet.
SetProperty(
"DefaultSelection", aSelSeq );
2931 OUString(
"com.sun.star.form.component.ComboBox" ) :
2932 OUString(
"com.sun.star.form.component.ListBox" );
2945 mnCtlsStrmSize( 0 ),
2946 mbEmbedded( false ),
2950 mbUseCtlsStrm( false )
2959 OUStringBuffer aStrgName;
2963 static const char spcHexChars[] =
"0123456789ABCDEF";
2965 aStrgName.append(OUStringChar( spcHexChars[ ::extract_value< sal_uInt8 >(
mnStorageId,
nIndex - 4, 4 ) ] ));
2967 return aStrgName.makeStringAndClear();
2972 sal_uInt16 nLinkSize;
2975 nLinkSize =
rStrm.ReaduInt16();
2987 sal_uInt16 nLinkSize;
2990 nLinkSize =
rStrm.ReaduInt16();
3002 sal_uInt16 nLinkSize;
3005 nLinkSize =
rStrm.ReaduInt16();
3061 *
GetDoc().GetDrawLayer(),
3076 if (!
sName.isEmpty())
3096 if( pOleSdrObj && pDocShell )
3099 Reference< XEmbeddedObject > xEmbObj = pOleSdrObj->
GetObjRef();
3116 if( aOldName != aNewName )
3127 nFlags =
rStrm.ReaduInt16();
3134 nFlags =
rStrm.ReaduInt16();
3138 OSL_ENSURE(
mbControl || !
mbUseCtlsStrm,
"XclImpPictureObj::ReadFlags8 - CTLS stream for controls only" );
3144 std::size_t nLinkEnd =
rStrm.GetRecPos() + nLinkSize;
3145 if( nLinkSize >= 6 )
3147 sal_uInt16 nFmlaSize;
3148 nFmlaSize =
rStrm.ReaduInt16();
3149 OSL_ENSURE( nFmlaSize > 0,
"XclImpPictureObj::ReadPictFmla - missing link formula" );
3166 sal_uInt16 nNameIdx;
3169 nNameIdx =
rStrm.ReaduInt16();
3172 if( pExtName && pExtName->
IsOLE() )
3178 sal_uInt16 nXti, nExtName;
3179 nXti =
rStrm.ReaduInt16();
3180 nExtName =
rStrm.ReaduInt16();
3193 OSL_ENSURE( nFmlaSize == 5,
"XclImpPictureObj::ReadPictFmla - unexpected formula size" );
3194 rStrm.Ignore( nFmlaSize - 1 );
3199 if(
rStrm.GetRecPos() + 2 <= nLinkEnd )
3201 sal_uInt16 nLen =
rStrm.ReaduInt16();
3223 if(
rStrm.GetRecLeft() <= 8 )
return;
3229 if(
rStrm.GetRecLeft() <= 8 )
return;
3232 sal_uInt32 nAddStrSize;
3233 nAddStrSize =
rStrm.ReaduInt32();
3234 OSL_ENSURE(
rStrm.GetRecLeft() >= nAddStrSize + 4,
"XclImpPictureObj::ReadPictFmla - missing data" );
3235 if(
rStrm.GetRecLeft() >= nAddStrSize + 4 )
3237 rStrm.Ignore( nAddStrSize );
3253 if( nDffShapeId > 0 )
3255 maSdrInfoMap[ nDffShapeId ].Set( &rSdrObj, nDffFlags );
3263 XclImpSdrObjMap::iterator aIt =
maSdrObjMap.find( &rSdrObj );
3273 if(
SdrObjList* pSubList = pGroupObj->GetSubList() )
3277 for(
SdrObject* pChildObj = aObjIt.
Next(); pChildObj; pChildObj = aObjIt.
Next() )
3285 for (
auto const & pRule :
aCList)
3302 XclImpSdrInfoMap::const_iterator aIt =
maSdrInfoMap.find( nDffShapeId );
3305 rpSdrObj = aIt->second.mpSdrObj;
3307 *pnDffFlags = aIt->second.mnDffFlags;
3335 mrDrawing( rDrawing ),
3336 mrSdrModel( rSdrModel ),
3337 mrSdrPage( rSdrPage ),
3338 mnLastCtrlIndex( -1 ),
3339 mbHasCtrlForm( false )
3378 Reference< XIndexContainer > xIdToOleName;
3380 xIdToOleName->getByIndex( nObjId ) >>= sOleName;
3395 OSL_ENSURE(
mxProgress,
"XclImpDffConverter::Progress - invalid call, no progress bar" );
3401 XclImpDffConvDataRef xConvData = std::make_shared<XclImpDffConvData>( rDrawing, rSdrModel, rSdrPage );
3403 SetModel( &xConvData->mrSdrModel, 1440 );
3430 for(
const auto& rxDrawObj : rDrawObjs )
3449 OSL_ENSURE( !
maDataStack.empty(),
"XclImpDffConverter::FinalizeDrawing - no drawing manager on stack" );
3476 css::awt::Size aDummySize;
3477 Reference< XShape > xShape;
3483 ScriptEventDescriptor aDescriptor;
3487 Reference< XEventAttacherManager > xEventMgr( rConvData.
mxCtrlForm, UNO_QUERY_THROW );
3488 xEventMgr->registerScriptEvent( rConvData.
mnLastCtrlIndex, aDescriptor );
3514 Reference< XShape > xShape;
3517 Reference< XFormComponent > xFComp;
3539 if( pDocShell && xSrcStrg.
is() && (!aStrgName.isEmpty()) )
3549 if( aGraphic.
GetType() != GraphicType::NONE )
3552 namespace cssea = ::com::sun::star::embed::Aspects;
3553 sal_Int64 nAspects = rPicObj.
IsSymbol() ? cssea::MSOLE_ICON : cssea::MSOLE_CONTENT;
3598 rDffStrm >> aAnchor;
3600 if (!rDffStrm.
good())
3602 SAL_WARN(
"sc.filter",
"ProcessClientAnchor2 short read");
3620 XclImpDrawObjClientData()
3621 : m_pTopLevelObj(nullptr)
3624 virtual void NotifyFreeObj(
SdrObject*)
override {}
3644 bool bGlobalPageGroup( rDffObjData.
nSpFlags & ShapeFlag::Patriarch );
3645 if( !xDrawObj || !xDrawObj->IsProcessSdrObj() || bGlobalPageGroup )
3651 XclImpDrawObjClientData& rDrawObjClientData =
static_cast<XclImpDrawObjClientData&
>(rClientData);
3652 const bool bIsTopLevel = !rDrawObjClientData.m_pTopLevelObj;
3654 rDrawObjClientData.m_pTopLevelObj = xDrawObj.get();
3657 if(
dynamic_cast< SdrEdgeObj*
>( xSdrObj.get() ) )
3658 xDrawObj->SetAreaObj(
false );
3664 bool bEmbeddedGroup = !bIsTopLevel &&
dynamic_cast< SdrObjGroup*
>( xSdrObj.get() );
3665 if( !bEmbeddedGroup && !xDrawObj->IsValidSize( rAnchorRect ) )
3673 xDrawObj->SetDffData( rDffObjData, aObjName, aHyperlink,
bVisible, bAutoMargin );
3679 pTextObj->SetTextData( *pTextData );
3683 pTbxObj->SetDffProperties( *
this );
3688 xSdrObj = std::move( xNewSdrObj );
3698 xDrawObj->PreProcessSdrObject( *
this, *xSdrObj );
3704 if( !xDrawObj->IsInsertSdrObj() )
3723 xDrawObj->PostProcessSdrObject( *
this, *xSdrObj );
3741 if( xSdrObj && xDrawObj )
3748 return xSdrObj.get();
3752 const css::awt::Size& , Reference< XShape >* pxShape,
3758 Reference< XIndexContainer > xFormIC( rConvData.
mxCtrlForm, UNO_QUERY_THROW );
3759 Reference< XControlModel > xCtrlModel( rxFormComp, UNO_QUERY_THROW );
3763 Reference< XControlShape > xCtrlShape( xShape, UNO_QUERY_THROW );
3766 sal_Int32 nNewIndex = xFormIC->getCount();
3767 xFormIC->insertByIndex( nNewIndex,
Any( rxFormComp ) );
3772 xCtrlShape->setControl( xCtrlModel );
3773 if( pxShape ) *pxShape = xShape;
3778 OSL_FAIL(
"XclImpDffConverter::InsertControl - cannot create form control" );
3788 OSL_ENSURE( !
maDataStack.empty(),
"XclImpDffConverter::GetConvData - no drawing manager on stack" );
3794 OSL_ENSURE( !
maDataStack.empty(),
"XclImpDffConverter::GetConvData - no drawing manager on stack" );
3814 ::std::vector< sal_uInt8 >
aBuffer( nBufferSize );
3816 if (rDffStrm.
ReadBytes(pnData, nBufferSize) == nBufferSize)
3832 bool isBreak(
false);
3833 while (!isBreak && rDffStrm.
good() && rDffStrm.
Tell() < nEndPos)
3863 bool isBreak(
false);
3864 while (!isBreak && rDffStrm.
good() && rDffStrm.
Tell() < nEndPos)
3896 XclImpDrawObjClientData aDrawObjClientData;
3904 if (aDrawObjClientData.m_pTopLevelObj && xSdrObj )
3941 Reference< XFormsSupplier > xFormsSupplier( rConvData.
mrSdrPage.
getUnoPage(), UNO_QUERY_THROW );
3942 Reference< XNameContainer > xFormsNC( xFormsSupplier->getForms(), UNO_SET_THROW );
3963 mbOleObjs( bOleObjects )
3974 sal_uInt16 nFormat =
rStrm.ReaduInt16();
3976 sal_uInt32 nDataSize =
rStrm.ReaduInt32();
3977 if( nDataSize <=
rStrm.GetRecLeft() )
3983 default: OSL_FAIL(
"XclImpDrawing::ReadImgData - unknown image format" );
3996 OSL_ENSURE(
maDffStrm.
Tell() == 0,
"XclImpDrawing::ReadObj - unexpected DFF stream data, OBJ will be ignored" );
4018 maObjMapId[ xDrawObj->GetObjId() ] = xDrawObj;
4026 rStrm.ResetRecord(
false );
4032 while( bLoop )
switch(
rStrm.GetNextRecId() )
4037 rStrm.StartNextRecord();
4041 rStrm.StartNextRecord();
4045 rStrm.StartNextRecord();
4053 rStrm.ResetRecord(
true );
4067 xDrawObj = aIt->second;
4074 XclImpObjMapById::const_iterator aIt =
maObjMapId.find( nObjId );
4076 xDrawObj = aIt->second;
4090 return aIt->second.get();
4098 std::multimap<double, XclImpDrawObjRef> aGroupBoxAreaMap;
4105 aGroupBoxAreaMap.insert(std::pair<double, XclImpDrawObjRef>(fArea, rGroupBox.second));
4111 if (!pRadioButton || pRadioButton->IsInGroup())
4114 OUString sGroupName(
"autoGroup_");
4115 for (
auto& rGroupBox : aGroupBoxAreaMap)
4117 assert(pRadioButton->GetTab() == rGroupBox.second->GetTab() &&
"impossible right?");
4118 if (!rGroupBox.second->GetDffRect().Contains(pRadioButton->GetDffRect()))
4121 sGroupName = rGroupBox.second->GetObjName();
4122 if (sGroupName.isEmpty())
4123 sGroupName +=
"autoGroup_" + OUString::number(rGroupBox.second->GetObjId());
4127 pRadioButton->SetStringProperty(
"GroupName", sGroupName);
4139 [](
const std::size_t& rSum,
const XclImpObjMap::value_type& rEntry) { return rSum + rEntry.second->GetProgressSize(); });
4153 pDrawObj->SetProcessSdrObj(
false );
4169 OSL_ENSURE( rxDrawObj,
"XclImpDrawing::AppendRawObject - unexpected empty reference" );
4180 rStrm.CopyToStream( aMemStrm,
rStrm.GetRecLeft() );
4184 if( ::ReadWindowMetafile( aMemStrm, aGDIMetaFile ) )
4185 rGraphic = aGDIMetaFile;
4200 rStrm.PushPosition();
4201 sal_uInt32 nHdrSize;
4202 sal_uInt16 nWidth, nHeight, nPlanes, nDepth;
4203 nHdrSize =
rStrm.ReaduInt32();
4204 nWidth =
rStrm.ReaduInt16();
4205 nHeight =
rStrm.ReaduInt16();
4206 nPlanes =
rStrm.ReaduInt16();
4207 nDepth =
rStrm.ReaduInt16();
4208 if( (nHdrSize == 12) && (nPlanes == 1) && (nDepth == 32) )
4211 aMemStrm.
SetEndian( SvStreamEndian::LITTLE );
4213 rStrm.CopyToStream( aMemStrm,
rStrm.GetRecLeft() );
4215 rStrm.PopPosition();
4219 if( aMemStrm.
Tell() == 0 )
4220 rStrm.CopyToStream( aMemStrm,
rStrm.GetRecLeft() );
4225 if(
ReadDIB(aBitmap, aMemStrm,
false) )
4240 maObjMapId[ xDrawObj->GetObjId() ] = xDrawObj;
4249 xTextData->maData.ReadTxo8(
rStrm );
4252 xTextData->mxString.reset();
4254 if( xTextData->maData.mnTextLen > 0 )
4257 OSL_ENSURE( bValid,
"XclImpDrawing::ReadTxo - missing CONTINUE record" );
4259 xTextData->mxString = std::make_shared<XclImpString>(
rStrm.ReadUniString( xTextData->maData.mnTextLen ) );
4263 if( xTextData->maData.mnFormatSize > 0 )
4266 OSL_ENSURE( bValid,
"XclImpDrawing::ReadTxo - missing CONTINUE record" );
4268 xTextData->ReadFormats(
rStrm );
4274 maScUsedArea(
ScAddress::INITIALIZE_INVALID )
4301 auto xChartObj = std::make_shared<XclImpChartObj>(
GetRoot(),
true );
4302 xChartObj->ReadChartSubStream(
rStrm );
4332 sal_uInt16 nTotalLen =
rStrm.ReaduInt16();
4338 sal_uInt16 nPartLen = ::std::min( nTotalLen,
static_cast< sal_uInt16
>(
rStrm.GetRecLeft() ) );
4339 OUStringBuffer aNoteText(
rStrm.ReadRawByteString( nPartLen ));
4340 nTotalLen = nTotalLen - nPartLen;
4347 if (!
rStrm.StartNextRecord())
4350 nPartLen =
rStrm.ReaduInt16();
4351 OSL_ENSURE( aXclPos.mnRow == 0xFFFF,
"XclImpObjectManager::ReadNote3 - missing continuation NOTE record" );
4352 if( aXclPos.mnRow == 0xFFFF )
4354 OSL_ENSURE( nPartLen <= nTotalLen,
"XclImpObjectManager::ReadNote3 - string too long" );
4355 aNoteText.append(
rStrm.ReadRawByteString( nPartLen ));
4356 nTotalLen = nTotalLen - ::std::min( nTotalLen, nPartLen );
4372 sal_uInt16 nFlags, nObjId;
4374 nFlags =
rStrm.ReaduInt16();
4375 nObjId =
rStrm.ReaduInt16();
4381 pNoteObj->SetNoteData( aScNotePos, nFlags );
4430 rxDrawing = std::make_shared<XclImpSheetDrawing>(
GetRoot(), nScTab );
4437 if( !
GetDoc().GetDrawLayer() )
4442 [](
const std::size_t& rSum,
const XclImpSheetDrawingMap::value_type& rEntry) { return rSum + rEntry.second->GetProgressSize(); });
4444 if( nProgressSize == 0 )
4450 rEntry.second->ConvertObjects( aDffConv );
4461 aDefName = aIt->second;
4462 return aDefName +
" " + OUString::number(
static_cast<sal_Int32
>(rDrawObj.
GetObjId()));
4467 XclImpSheetDrawingMap::const_iterator aIt =
maSheetDrawings.find( nScTab );
4469 return aIt->second->GetUsedArea();
4477 maDffConv( rRoot, maDummyStrm )
4483 sal_uInt32 nPropSetSize;
4485 rStrm.PushPosition();
4487 nPropSetSize =
rStrm.ReaduInt32();
4488 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
constexpr tools::Long Y() const
constexpr tools::Long X() 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 * 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.
static ScPostIt * CreateNoteFromObjectData(ScDocument &rDoc, const ScAddress &rPos, SfxItemSet &&oItemSet, const OUString &rStyleName, const OutlinerParaObject &rOutlinerObj, const tools::Rectangle &rCaptionRect, bool bShown)
Creates a cell note based on the passed caption object data.
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