1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_sfx2.hxx" 30 #if defined(_MSC_VER) && (_MSC_VER >= 1300) 31 #pragma warning( disable : 4290 ) 32 #endif 33 #include <com/sun/star/document/UpdateDocMode.hpp> 34 35 #include "sal/config.h" 36 37 #include <sfx2/appuno.hxx> 38 #include "appbaslib.hxx" 39 40 #include "sfx2/dllapi.h" 41 42 #include <basic/sbx.hxx> 43 #include <svl/itempool.hxx> 44 #include <svl/rectitem.hxx> 45 #include <tools/debug.hxx> 46 #include <tools/wldcrd.hxx> 47 48 #include <tools/urlobj.hxx> 49 #include <tools/config.hxx> 50 #include <basic/sbxmeth.hxx> 51 #include <basic/sbmeth.hxx> 52 #include <basic/sbxobj.hxx> 53 #include <basic/sberrors.hxx> 54 #include <basic/basmgr.hxx> 55 #include <basic/sbuno.hxx> 56 57 #include <basic/sbxcore.hxx> 58 #include <svl/ownlist.hxx> 59 #include <svl/lckbitem.hxx> 60 #include <svl/stritem.hxx> 61 #include <svl/slstitm.hxx> 62 #include <svl/intitem.hxx> 63 #include <svl/eitem.hxx> 64 #include <com/sun/star/task/XStatusIndicatorFactory.hpp> 65 #include <com/sun/star/task/XInteractionHandler.hpp> 66 #include <com/sun/star/io/XInputStream.hpp> 67 #include <com/sun/star/beans/XPropertySet.hpp> 68 #include <com/sun/star/frame/XFrameActionListener.hpp> 69 #include <com/sun/star/frame/XComponentLoader.hpp> 70 #include <com/sun/star/frame/XFrame.hpp> 71 #include <com/sun/star/frame/FrameActionEvent.hpp> 72 #include <com/sun/star/frame/FrameAction.hpp> 73 #include <com/sun/star/container/XContainer.hpp> 74 #include <com/sun/star/container/XIndexContainer.hpp> 75 #include <com/sun/star/container/XNameReplace.hpp> 76 #include <com/sun/star/container/XContainerListener.hpp> 77 #include <com/sun/star/container/XSet.hpp> 78 #include <com/sun/star/container/ContainerEvent.hpp> 79 #include <com/sun/star/container/XIndexReplace.hpp> 80 #include <com/sun/star/container/XNameContainer.hpp> 81 #include <com/sun/star/awt/XTopWindow.hpp> 82 #include <com/sun/star/awt/XWindow.hpp> 83 #include <com/sun/star/awt/PosSize.hpp> 84 #include <com/sun/star/registry/RegistryValueType.hpp> 85 #include <comphelper/processfactory.hxx> 86 #include <com/sun/star/awt/PosSize.hpp> 87 #include <com/sun/star/awt/XButton.hpp> 88 #include <com/sun/star/frame/DispatchResultEvent.hpp> 89 #include <com/sun/star/frame/DispatchResultState.hpp> 90 #include <com/sun/star/frame/XModel.hpp> 91 #include <com/sun/star/document/MacroExecMode.hpp> 92 #include <com/sun/star/ucb/XContent.hpp> 93 94 #include <tools/cachestr.hxx> 95 #include <osl/mutex.hxx> 96 #include <comphelper/sequence.hxx> 97 #include <framework/documentundoguard.hxx> 98 #include <rtl/ustrbuf.hxx> 99 #include <comphelper/interaction.hxx> 100 101 using namespace ::com::sun::star; 102 using namespace ::com::sun::star::ucb; 103 using namespace ::com::sun::star::uno; 104 using namespace ::com::sun::star::registry; 105 using namespace ::com::sun::star::frame; 106 using namespace ::com::sun::star::beans; 107 using namespace ::com::sun::star::io; 108 109 #include "sfxtypes.hxx" 110 #include <sfx2/sfxuno.hxx> 111 #include <sfx2/app.hxx> 112 #include <sfx2/sfxsids.hrc> 113 #include <sfx2/msg.hxx> 114 #include <sfx2/msgpool.hxx> 115 #include <sfx2/request.hxx> 116 #include <sfx2/module.hxx> 117 #include <sfx2/fcontnr.hxx> 118 #include "frmload.hxx" 119 #include <sfx2/frame.hxx> 120 #include <sfx2/objsh.hxx> 121 #include <sfx2/objuno.hxx> 122 #include <sfx2/unoctitm.hxx> 123 #include <sfx2/dispatch.hxx> 124 #include "doctemplates.hxx" 125 #include "shutdownicon.hxx" 126 #include "objshimp.hxx" 127 #include "fltoptint.hxx" 128 #include <sfx2/docfile.hxx> 129 #include <sfx2/sfxbasecontroller.hxx> 130 #include <sfx2/brokenpackageint.hxx> 131 #include "eventsupplier.hxx" 132 #include "xpackcreator.hxx" 133 #include "plugin.hxx" 134 #include "iframe.hxx" 135 #include <ownsubfilterservice.hxx> 136 #include "SfxDocumentMetaData.hxx" 137 138 #define FRAMELOADER_SERVICENAME "com.sun.star.frame.FrameLoader" 139 #define PROTOCOLHANDLER_SERVICENAME "com.sun.star.frame.ProtocolHandler" 140 141 #include <sfxslots.hxx> 142 143 // needs to be converted to a better data structure 144 SfxFormalArgument aArgs[] = 145 { 146 SFX_ARGUMENT(SID_DEFAULTFILENAME,"SuggestedSaveAsName",SfxStringItem), 147 SFX_ARGUMENT(SID_DEFAULTFILEPATH,"SuggestedSaveAsDir",SfxStringItem), 148 SFX_ARGUMENT(SID_DOCINFO_AUTHOR,"VersionAuthor",SfxStringItem), 149 SFX_ARGUMENT(SID_DOCINFO_COMMENTS,"VersionComment",SfxStringItem), 150 SFX_ARGUMENT(SID_FILE_FILTEROPTIONS,"FilterOptions",SfxStringItem), 151 SFX_ARGUMENT(SID_FILTER_NAME,"FilterName",SfxStringItem), 152 // SFX_ARGUMENT(SID_FILE_NAME,"FileName",SfxStringItem), 153 SFX_ARGUMENT(SID_FILE_NAME,"URL",SfxStringItem), 154 SFX_ARGUMENT(SID_OPTIONS,"OpenFlags",SfxStringItem), 155 SFX_ARGUMENT(SID_OVERWRITE,"Overwrite",SfxBoolItem), 156 SFX_ARGUMENT(SID_PASSWORD,"Password",SfxStringItem), 157 SFX_ARGUMENT(SID_PASSWORDINTERACTION,"PasswordInteraction",SfxBoolItem), 158 SFX_ARGUMENT(SID_REFERER,"Referer",SfxStringItem), 159 SFX_ARGUMENT(SID_SAVETO,"SaveTo",SfxBoolItem), 160 SFX_ARGUMENT(SID_TEMPLATE_NAME,"TemplateName",SfxStringItem), 161 SFX_ARGUMENT(SID_TEMPLATE_REGIONNAME,"TemplateRegion",SfxStringItem), 162 // SFX_ARGUMENT(SID_TEMPLATE_REGIONNAME,"Region",SfxStringItem), 163 // SFX_ARGUMENT(SID_TEMPLATE_NAME,"Name",SfxStringItem), 164 SFX_ARGUMENT(SID_UNPACK,"Unpacked",SfxBoolItem), 165 SFX_ARGUMENT(SID_VERSION,"Version",SfxInt16Item), 166 }; 167 168 static sal_uInt16 nMediaArgsCount = sizeof(aArgs) / sizeof (SfxFormalArgument); 169 170 static char const sTemplateRegionName[] = "TemplateRegionName"; 171 static char const sTemplateName[] = "TemplateName"; 172 static char const sAsTemplate[] = "AsTemplate"; 173 static char const sOpenNewView[] = "OpenNewView"; 174 static char const sViewId[] = "ViewId"; 175 static char const sPluginMode[] = "PluginMode"; 176 static char const sReadOnly[] = "ReadOnly"; 177 static char const sStartPresentation[] = "StartPresentation"; 178 static char const sFrameName[] = "FrameName"; 179 static char const sMediaType[] = "MediaType"; 180 static char const sPostData[] = "PostData"; 181 static char const sCharacterSet[] = "CharacterSet"; 182 static char const sInputStream[] = "InputStream"; 183 static char const sStream[] = "Stream"; 184 static char const sOutputStream[] = "OutputStream"; 185 static char const sHidden[] = "Hidden"; 186 static char const sPreview[] = "Preview"; 187 static char const sViewOnly[] = "ViewOnly"; 188 static char const sDontEdit[] = "DontEdit"; 189 static char const sSilent[] = "Silent"; 190 static char const sJumpMark[] = "JumpMark"; 191 static char const sFileName[] = "FileName"; 192 static char const sSalvagedFile[] = "SalvagedFile"; 193 static char const sStatusInd[] = "StatusIndicator"; 194 static char const sModel[] = "Model"; 195 static char const sFrame[] = "Frame"; 196 static char const sViewData[] = "ViewData"; 197 static char const sFilterData[] = "FilterData"; 198 static char const sSelectionOnly[] = "SelectionOnly"; 199 static char const sFilterFlags[] = "FilterFlags"; 200 static char const sMacroExecMode[] = "MacroExecutionMode"; 201 static char const sUpdateDocMode[] = "UpdateDocMode"; 202 static char const sMinimized[] = "Minimized"; 203 static char const sInteractionHdl[] = "InteractionHandler"; 204 static char const sUCBContent[] = "UCBContent"; 205 static char const sRepairPackage[] = "RepairPackage"; 206 static char const sDocumentTitle[] = "DocumentTitle"; 207 static char const sComponentData[] = "ComponentData"; 208 static char const sComponentContext[] = "ComponentContext"; 209 static char const sDocumentBaseURL[] = "DocumentBaseURL"; 210 static char const sHierarchicalDocumentName[] = "HierarchicalDocumentName"; 211 static char const sCopyStreamIfPossible[] = "CopyStreamIfPossible"; 212 static char const sNoAutoSave[] = "NoAutoSave"; 213 static char const sFolderName[] = "FolderName"; 214 static char const sUseSystemDialog[] = "UseSystemDialog"; 215 static char const sStandardDir[] = "StandardDir"; 216 static char const sBlackList[] = "BlackList"; 217 static char const sModifyPasswordInfo[] = "ModifyPasswordInfo"; 218 static char const sSuggestedSaveAsDir[] = "SuggestedSaveAsDir"; 219 static char const sSuggestedSaveAsName[] = "SuggestedSaveAsName"; 220 static char const sEncryptionData[] = "EncryptionData"; 221 static char const sFailOnWarning[] = "FailOnWarning"; 222 223 bool isMediaDescriptor( sal_uInt16 nSlotId ) 224 { 225 return ( nSlotId == SID_OPENDOC || nSlotId == SID_EXPORTDOC || nSlotId == SID_SAVEASDOC || nSlotId == SID_SAVEDOC || 226 nSlotId == SID_SAVETO || nSlotId == SID_EXPORTDOCASPDF || nSlotId == SID_DIRECTEXPORTDOCASPDF ); 227 } 228 229 void TransformParameters( sal_uInt16 nSlotId, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& rArgs, SfxAllItemSet& rSet, const SfxSlot* pSlot ) 230 { 231 if ( !pSlot ) 232 pSlot = SFX_SLOTPOOL().GetSlot( nSlotId ); 233 234 if ( !pSlot ) 235 return; 236 237 if ( nSlotId == SID_OPENURL ) 238 nSlotId = SID_OPENDOC; 239 if ( nSlotId == SID_SAVEASURL ) 240 nSlotId = SID_SAVEASDOC; 241 242 sal_Int32 nCount = rArgs.getLength(); 243 if ( !nCount ) 244 return; 245 246 const ::com::sun::star::beans::PropertyValue* pPropsVal = rArgs.getConstArray(); 247 if ( !pSlot->IsMode(SFX_SLOT_METHOD) ) 248 { 249 // slot is a property 250 const SfxType* pType = pSlot->GetType(); 251 SfxPoolItem* pItem = pType->CreateItem(); 252 if ( !pItem ) 253 { 254 #ifdef DBG_UTIL 255 ByteString aStr( "No creator method for item: "); 256 aStr += ByteString::CreateFromInt32( nSlotId ); 257 DBG_ERROR( aStr.GetBuffer() ); 258 #endif 259 return; 260 } 261 262 sal_uInt16 nWhich = rSet.GetPool()->GetWhich(nSlotId); 263 sal_Bool bConvertTwips = ( rSet.GetPool()->GetMetric( nWhich ) == SFX_MAPUNIT_TWIP ); 264 pItem->SetWhich( nWhich ); 265 sal_uInt16 nSubCount = pType->nAttribs; 266 267 const ::com::sun::star::beans::PropertyValue& rProp = pPropsVal[0]; 268 String aName = rProp.Name; 269 if ( nCount == 1 && aName.CompareToAscii( pSlot->pUnoName ) == COMPARE_EQUAL ) 270 { 271 // there is only one parameter and its name matches the name of the property, 272 // so it's either a simple property or a complex property in one single UNO struct 273 if( pItem->PutValue( rProp.Value, bConvertTwips ? CONVERT_TWIPS : 0 ) ) 274 // only use successfully converted items 275 rSet.Put( *pItem ); 276 #ifdef DBG_UTIL 277 else 278 { 279 ByteString aStr( "Property not convertable: "); 280 aStr += pSlot->pUnoName; 281 DBG_ERROR( aStr.GetBuffer() ); 282 } 283 #endif 284 } 285 #ifdef DBG_UTIL 286 else if ( nSubCount == 0 ) 287 { 288 // for a simple property there can be only one parameter and its name *must* match 289 ByteString aStr( "Property name does not match: "); 290 aStr += ByteString( aName, RTL_TEXTENCODING_UTF8 ); 291 DBG_ERROR( aStr.GetBuffer() ); 292 } 293 #endif 294 else 295 { 296 // there is more than one parameter and the property is a complex one 297 #ifdef DBG_UTIL 298 // if the dispatch API is used for UI purposes or from the testtool, 299 // it is possible to skip some or all arguments, 300 // but it indicates an error for macro recording; 301 // so this should be notified as a warning only 302 if ( nCount != nSubCount ) 303 { 304 ByteString aStr( "MacroPlayer: wrong number of parameters for slot: "); 305 aStr += ByteString::CreateFromInt32( nSlotId ); 306 DBG_WARNING( aStr.GetBuffer() ); 307 } 308 #endif 309 // complex property; collect sub items from the parameter set and reconstruct complex item 310 sal_uInt16 nFound=0; 311 for ( sal_uInt16 n=0; n<nCount; n++ ) 312 { 313 const ::com::sun::star::beans::PropertyValue& rPropValue = pPropsVal[n]; 314 sal_uInt16 nSub; 315 for ( nSub=0; nSub<nSubCount; nSub++ ) 316 { 317 // search sub item by name 318 ByteString aStr( pSlot->pUnoName ); 319 aStr += '.'; 320 aStr += ByteString( pType->aAttrib[nSub].pName ); 321 const char* pName = aStr.GetBuffer(); 322 if ( rPropValue.Name.compareToAscii( pName ) == COMPARE_EQUAL ) 323 { 324 sal_uInt8 nSubId = (sal_uInt8) (sal_Int8) pType->aAttrib[nSub].nAID; 325 if ( bConvertTwips ) 326 nSubId |= CONVERT_TWIPS; 327 if ( pItem->PutValue( rPropValue.Value, nSubId ) ) 328 nFound++; 329 #ifdef DBG_UTIL 330 else 331 { 332 ByteString aDbgStr( "Property not convertable: "); 333 aDbgStr += pSlot->pUnoName; 334 DBG_ERROR( aDbgStr.GetBuffer() ); 335 } 336 #endif 337 break; 338 } 339 } 340 341 #ifdef DBG_UTIL 342 if ( nSub >= nSubCount ) 343 { 344 // there was a parameter with a name that didn't match to any of the members 345 ByteString aStr( "Property name does not match: "); 346 aStr += ByteString( String(rPropValue.Name), RTL_TEXTENCODING_UTF8 ); 347 DBG_ERROR( aStr.GetBuffer() ); 348 } 349 #endif 350 } 351 352 // at least one part of the complex item must be present; other parts can have default values 353 if ( nFound > 0 ) 354 rSet.Put( *pItem ); 355 } 356 357 delete pItem; 358 } 359 else if ( nCount ) 360 { 361 #ifdef DBG_UTIL 362 // detect parameters that don't match to any formal argument or one of its members 363 sal_Int32 nFoundArgs = 0; 364 #endif 365 // slot is a method 366 bool bIsMediaDescriptor = isMediaDescriptor( nSlotId ); 367 sal_uInt16 nMaxArgs = bIsMediaDescriptor ? nMediaArgsCount : pSlot->nArgDefCount; 368 for ( sal_uInt16 nArgs=0; nArgs<nMaxArgs; nArgs++ ) 369 { 370 const SfxFormalArgument &rArg = bIsMediaDescriptor ? aArgs[nArgs] : pSlot->GetFormalArgument( nArgs ); 371 SfxPoolItem* pItem = rArg.CreateItem(); 372 if ( !pItem ) 373 { 374 #ifdef DBG_UTIL 375 ByteString aStr( "No creator method for argument: "); 376 aStr += rArg.pName; 377 DBG_ERROR( aStr.GetBuffer() ); 378 #endif 379 return; 380 } 381 382 sal_uInt16 nWhich = rSet.GetPool()->GetWhich(rArg.nSlotId); 383 sal_Bool bConvertTwips = ( rSet.GetPool()->GetMetric( nWhich ) == SFX_MAPUNIT_TWIP ); 384 pItem->SetWhich( nWhich ); 385 const SfxType* pType = rArg.pType; 386 sal_uInt16 nSubCount = pType->nAttribs; 387 if ( nSubCount == 0 ) 388 { 389 // "simple" (base type) argument 390 for ( sal_uInt16 n=0; n<nCount; n++ ) 391 { 392 const ::com::sun::star::beans::PropertyValue& rProp = pPropsVal[n]; 393 String aName = rProp.Name; 394 if ( aName.CompareToAscii(rArg.pName) == COMPARE_EQUAL ) 395 { 396 #ifdef DBG_UTIL 397 ++nFoundArgs; 398 #endif 399 if( pItem->PutValue( rProp.Value ) ) 400 // only use successfully converted items 401 rSet.Put( *pItem ); 402 #ifdef DBG_UTIL 403 else 404 { 405 ByteString aStr( "Property not convertable: "); 406 aStr += rArg.pName; 407 DBG_ERROR( aStr.GetBuffer() ); 408 } 409 #endif 410 break; 411 } 412 } 413 } 414 else 415 { 416 // complex argument, could be passed in one struct 417 sal_Bool bAsWholeItem = sal_False; 418 for ( sal_uInt16 n=0; n<nCount; n++ ) 419 { 420 const ::com::sun::star::beans::PropertyValue& rProp = pPropsVal[n]; 421 String aName = rProp.Name; 422 if ( aName.CompareToAscii(rArg.pName) == COMPARE_EQUAL ) 423 { 424 bAsWholeItem = sal_True; 425 #ifdef DBG_UTIL 426 ++nFoundArgs; 427 #endif 428 if( pItem->PutValue( rProp.Value ) ) 429 // only use successfully converted items 430 rSet.Put( *pItem ); 431 #ifdef DBG_UTIL 432 else 433 { 434 ByteString aStr( "Property not convertable: "); 435 aStr += rArg.pName; 436 DBG_ERROR( aStr.GetBuffer() ); 437 } 438 #endif 439 } 440 } 441 442 if ( !bAsWholeItem ) 443 { 444 // complex argument; collect sub items from argument array and reconstruct complex item 445 // only put item if at least one member was found and had the correct type 446 // (is this a good idea?! Should we ask for *all* members?) 447 sal_Bool bRet = sal_False; 448 for ( sal_uInt16 n=0; n<nCount; n++ ) 449 { 450 const ::com::sun::star::beans::PropertyValue& rProp = pPropsVal[n]; 451 for ( sal_uInt16 nSub=0; nSub<nSubCount; nSub++ ) 452 { 453 // search sub item by name 454 ByteString aStr( rArg.pName ); 455 aStr += '.'; 456 aStr += pType->aAttrib[nSub].pName; 457 const char* pName = aStr.GetBuffer(); 458 if ( rProp.Name.compareToAscii( pName ) == COMPARE_EQUAL ) 459 { 460 // at least one member found ... 461 bRet = sal_True; 462 #ifdef DBG_UTIL 463 ++nFoundArgs; 464 #endif 465 sal_uInt8 nSubId = (sal_uInt8) (sal_Int8) pType->aAttrib[nSub].nAID; 466 if ( bConvertTwips ) 467 nSubId |= CONVERT_TWIPS; 468 if (!pItem->PutValue( rProp.Value, nSubId ) ) 469 { 470 // ... but it was not convertable 471 bRet = sal_False; 472 #ifdef DBG_UTIL 473 ByteString aDbgStr( "Property not convertable: "); 474 aDbgStr += rArg.pName; 475 DBG_ERROR( aDbgStr.GetBuffer() ); 476 #endif 477 } 478 479 break; 480 } 481 } 482 } 483 484 if ( bRet ) 485 // only use successfully converted items 486 rSet.Put( *pItem ); 487 488 } 489 } 490 491 delete pItem; 492 } 493 494 // special additional parameters for some slots not seen in the slot definitions 495 // Some of these slots are not considered to be used for macro recording, because they shouldn't be recorded as slots, 496 // but as dispatching or factory or arbitrary URLs to the frame 497 // Some also can use additional arguments that are not recordable (will be changed later, 498 // f.e. "SaveAs" shouldn't support parameters not in the slot definition!) 499 if ( nSlotId == SID_NEWWINDOW ) 500 { 501 for ( sal_uInt16 n=0; n<nCount; n++ ) 502 { 503 const ::com::sun::star::beans::PropertyValue& rProp = pPropsVal[n]; 504 rtl::OUString aName = rProp.Name; 505 if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sFrame)) ) 506 { 507 Reference< XFrame > xFrame; 508 OSL_VERIFY( rProp.Value >>= xFrame ); 509 rSet.Put( SfxUnoFrameItem( SID_FILLFRAME, xFrame ) ); 510 } 511 else 512 if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sHidden)) ) 513 { 514 sal_Bool bVal = sal_False; 515 if (rProp.Value >>= bVal) 516 rSet.Put( SfxBoolItem( SID_HIDDEN, bVal ) ); 517 } 518 } 519 } 520 else if ( bIsMediaDescriptor ) 521 { 522 for ( sal_uInt16 n=0; n<nCount; n++ ) 523 { 524 #ifdef DBG_UTIL 525 ++nFoundArgs; 526 #endif 527 const ::com::sun::star::beans::PropertyValue& rProp = pPropsVal[n]; 528 rtl::OUString aName = rProp.Name; 529 if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sModel)) ) 530 rSet.Put( SfxUnoAnyItem( SID_DOCUMENT, rProp.Value ) ); 531 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sComponentData)) ) 532 { 533 rSet.Put( SfxUnoAnyItem( SID_COMPONENTDATA, rProp.Value ) ); 534 } 535 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sComponentContext)) ) 536 { 537 rSet.Put( SfxUnoAnyItem( SID_COMPONENTCONTEXT, rProp.Value ) ); 538 } 539 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sStatusInd)) ) 540 { 541 Reference< ::com::sun::star::task::XStatusIndicator > xVal; 542 sal_Bool bOK = (rProp.Value >>= xVal); 543 DBG_ASSERT( bOK, "invalid type for StatusIndicator" ); 544 if (bOK && xVal.is()) 545 rSet.Put( SfxUnoAnyItem( SID_PROGRESS_STATUSBAR_CONTROL, rProp.Value ) ); 546 } 547 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sInteractionHdl)) ) 548 { 549 Reference< ::com::sun::star::task::XInteractionHandler > xVal; 550 sal_Bool bOK = (rProp.Value >>= xVal); 551 DBG_ASSERT( bOK, "invalid type for InteractionHandler" ); 552 if (bOK && xVal.is()) 553 rSet.Put( SfxUnoAnyItem( SID_INTERACTIONHANDLER, rProp.Value ) ); 554 } 555 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sViewData)) ) 556 rSet.Put( SfxUnoAnyItem( SID_VIEW_DATA, rProp.Value ) ); 557 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sFilterData)) ) 558 rSet.Put( SfxUnoAnyItem( SID_FILTER_DATA, rProp.Value ) ); 559 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sInputStream)) ) 560 { 561 Reference< XInputStream > xVal; 562 sal_Bool bOK = ((rProp.Value >>= xVal) && xVal.is()); 563 DBG_ASSERT( bOK, "invalid type for InputStream" ); 564 if (bOK) 565 rSet.Put( SfxUnoAnyItem( SID_INPUTSTREAM, rProp.Value ) ); 566 } 567 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sStream)) ) 568 { 569 Reference< XInputStream > xVal; 570 sal_Bool bOK = ((rProp.Value >>= xVal) && xVal.is()); 571 DBG_ASSERT( bOK, "invalid type for Stream" ); 572 if (bOK) 573 rSet.Put( SfxUnoAnyItem( SID_STREAM, rProp.Value ) ); 574 } 575 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sUCBContent)) ) 576 { 577 Reference< XContent > xVal; 578 sal_Bool bOK = ((rProp.Value >>= xVal) && xVal.is()); 579 DBG_ASSERT( bOK, "invalid type for UCBContent" ); 580 if (bOK) 581 rSet.Put( SfxUnoAnyItem( SID_CONTENT, rProp.Value ) ); 582 } 583 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sOutputStream)) ) 584 { 585 Reference< XOutputStream > xVal; 586 sal_Bool bOK = ((rProp.Value >>= xVal) && xVal.is()); 587 DBG_ASSERT( bOK, "invalid type for OutputStream" ); 588 if (bOK) 589 rSet.Put( SfxUnoAnyItem( SID_OUTPUTSTREAM, rProp.Value ) ); 590 } 591 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sPostData)) ) 592 { 593 Reference< XInputStream > xVal; 594 sal_Bool bOK = (rProp.Value >>= xVal); 595 DBG_ASSERT( bOK, "invalid type for PostData" ); 596 if (bOK) 597 rSet.Put( SfxUnoAnyItem( SID_POSTDATA, rProp.Value ) ); 598 } 599 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sFrame)) ) 600 { 601 Reference< XFrame > xFrame; 602 sal_Bool bOK = (rProp.Value >>= xFrame); 603 DBG_ASSERT( bOK, "invalid type for Frame" ); 604 if (bOK) 605 rSet.Put( SfxUnoFrameItem( SID_FILLFRAME, xFrame ) ); 606 } 607 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sAsTemplate)) ) 608 { 609 sal_Bool bVal = sal_False; 610 sal_Bool bOK = (rProp.Value >>= bVal); 611 DBG_ASSERT( bOK, "invalid type for AsTemplate" ); 612 if (bOK) 613 rSet.Put( SfxBoolItem( SID_TEMPLATE, bVal ) ); 614 } 615 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sOpenNewView)) ) 616 { 617 sal_Bool bVal = sal_False; 618 sal_Bool bOK = (rProp.Value >>= bVal); 619 DBG_ASSERT( bOK, "invalid type for OpenNewView" ); 620 if (bOK) 621 rSet.Put( SfxBoolItem( SID_OPEN_NEW_VIEW, bVal ) ); 622 } 623 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sFailOnWarning)) ) 624 { 625 sal_Bool bVal = sal_False; 626 sal_Bool bOK = (rProp.Value >>= bVal); 627 DBG_ASSERT( bOK, "invalid type for FailOnWarning" ); 628 if (bOK) 629 rSet.Put( SfxBoolItem( SID_FAIL_ON_WARNING, bVal ) ); 630 } 631 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sViewId)) ) 632 { 633 sal_Int16 nVal = -1; 634 sal_Bool bOK = ((rProp.Value >>= nVal) && (nVal != -1)); 635 DBG_ASSERT( bOK, "invalid type for ViewId" ); 636 if (bOK) 637 rSet.Put( SfxUInt16Item( SID_VIEW_ID, nVal ) ); 638 } 639 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sPluginMode)) ) 640 { 641 sal_Int16 nVal = -1; 642 sal_Bool bOK = ((rProp.Value >>= nVal) && (nVal != -1)); 643 DBG_ASSERT( bOK, "invalid type for PluginMode" ); 644 if (bOK) 645 rSet.Put( SfxUInt16Item( SID_PLUGIN_MODE, nVal ) ); 646 } 647 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sReadOnly)) ) 648 { 649 sal_Bool bVal = sal_False; 650 sal_Bool bOK = (rProp.Value >>= bVal); 651 DBG_ASSERT( bOK, "invalid type for ReadOnly" ); 652 if (bOK) 653 rSet.Put( SfxBoolItem( SID_DOC_READONLY, bVal ) ); 654 } 655 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sStartPresentation)) ) 656 { 657 sal_Bool bVal = sal_False; 658 sal_Bool bOK = (rProp.Value >>= bVal); 659 DBG_ASSERT( bOK, "invalid type for StartPresentation" ); 660 if (bOK) 661 rSet.Put( SfxBoolItem( SID_DOC_STARTPRESENTATION, bVal ) ); 662 } 663 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sSelectionOnly)) ) 664 { 665 sal_Bool bVal = sal_False; 666 sal_Bool bOK = (rProp.Value >>= bVal); 667 DBG_ASSERT( bOK, "invalid type for SelectionOnly" ); 668 if (bOK) 669 rSet.Put( SfxBoolItem( SID_SELECTION, bVal ) ); 670 } 671 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sHidden)) ) 672 { 673 sal_Bool bVal = sal_False; 674 sal_Bool bOK = (rProp.Value >>= bVal); 675 DBG_ASSERT( bOK, "invalid type for Hidden" ); 676 if (bOK) 677 rSet.Put( SfxBoolItem( SID_HIDDEN, bVal ) ); 678 } 679 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sMinimized)) ) 680 { 681 sal_Bool bVal = sal_False; 682 sal_Bool bOK = (rProp.Value >>= bVal); 683 DBG_ASSERT( bOK, "invalid type for Minimized" ); 684 if (bOK) 685 rSet.Put( SfxBoolItem( SID_MINIMIZED, bVal ) ); 686 } 687 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sSilent)) ) 688 { 689 sal_Bool bVal = sal_False; 690 sal_Bool bOK = (rProp.Value >>= bVal); 691 DBG_ASSERT( bOK, "invalid type for Silent" ); 692 if (bOK) 693 rSet.Put( SfxBoolItem( SID_SILENT, bVal ) ); 694 } 695 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sPreview)) ) 696 { 697 sal_Bool bVal = sal_False; 698 sal_Bool bOK = (rProp.Value >>= bVal); 699 DBG_ASSERT( bOK, "invalid type for Preview" ); 700 if (bOK) 701 rSet.Put( SfxBoolItem( SID_PREVIEW, bVal ) ); 702 } 703 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sViewOnly)) ) 704 { 705 sal_Bool bVal = sal_False; 706 sal_Bool bOK = (rProp.Value >>= bVal); 707 DBG_ASSERT( bOK, "invalid type for ViewOnly" ); 708 if (bOK) 709 rSet.Put( SfxBoolItem( SID_VIEWONLY, bVal ) ); 710 } 711 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sDontEdit)) ) 712 { 713 sal_Bool bVal = sal_False; 714 sal_Bool bOK = (rProp.Value >>= bVal); 715 DBG_ASSERT( bOK, "invalid type for ViewOnly" ); 716 if (bOK) 717 rSet.Put( SfxBoolItem( SID_EDITDOC, !bVal ) ); 718 } 719 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sUseSystemDialog)) ) 720 { 721 sal_Bool bVal = sal_False; 722 sal_Bool bOK = (rProp.Value >>= bVal); 723 DBG_ASSERT( bOK, "invalid type for ViewOnly" ); 724 if (bOK) 725 rSet.Put( SfxBoolItem( SID_FILE_DIALOG, bVal ) ); 726 } 727 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sStandardDir)) ) 728 { 729 ::rtl::OUString sVal; 730 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 731 DBG_ASSERT( bOK, "invalid type or value for StandardDir" ); 732 if (bOK) 733 rSet.Put( SfxStringItem( SID_STANDARD_DIR, sVal ) ); 734 } 735 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sBlackList)) ) 736 { 737 ::com::sun::star::uno::Sequence< ::rtl::OUString > xVal; 738 sal_Bool bOK = (rProp.Value >>= xVal); 739 DBG_ASSERT( bOK, "invalid type or value for BlackList" ); 740 if (bOK) 741 { 742 SfxStringListItem stringList(SID_BLACK_LIST); 743 stringList.SetStringList( xVal ); 744 rSet.Put( stringList ); 745 } 746 } 747 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sFileName)) ) 748 { 749 ::rtl::OUString sVal; 750 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 751 DBG_ASSERT( bOK, "invalid type or value for FileName" ); 752 if (bOK) 753 rSet.Put( SfxStringItem( SID_FILE_NAME, sVal ) ); 754 } 755 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sSalvagedFile)) ) 756 { 757 ::rtl::OUString sVal; 758 sal_Bool bOK = (rProp.Value >>= sVal); 759 DBG_ASSERT( bOK, "invalid type or value for SalvagedFile" ); 760 if (bOK) 761 rSet.Put( SfxStringItem( SID_DOC_SALVAGE, sVal ) ); 762 } 763 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sFolderName)) ) 764 { 765 ::rtl::OUString sVal; 766 sal_Bool bOK = (rProp.Value >>= sVal); 767 DBG_ASSERT( bOK, "invalid type or value for FolderName" ); 768 if (bOK) 769 rSet.Put( SfxStringItem( SID_PATH, sVal ) ); 770 } 771 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sFrameName)) ) 772 { 773 ::rtl::OUString sVal; 774 sal_Bool bOK = (rProp.Value >>= sVal); 775 DBG_ASSERT( bOK, "invalid type for FrameName" ); 776 if (bOK && sVal.getLength()) 777 rSet.Put( SfxStringItem( SID_TARGETNAME, sVal ) ); 778 } 779 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sMediaType)) ) 780 { 781 ::rtl::OUString sVal; 782 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 783 DBG_ASSERT( bOK, "invalid type or value for MediaType" ); 784 if (bOK) 785 rSet.Put( SfxStringItem( SID_CONTENTTYPE, sVal ) ); 786 } 787 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sTemplateName)) ) 788 { 789 ::rtl::OUString sVal; 790 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 791 DBG_ASSERT( bOK, "invalid type or value for TemplateName" ); 792 if (bOK) 793 rSet.Put( SfxStringItem( SID_TEMPLATE_NAME, sVal ) ); 794 } 795 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sTemplateRegionName)) ) 796 { 797 ::rtl::OUString sVal; 798 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 799 DBG_ASSERT( bOK, "invalid type or value for TemplateRegionName" ); 800 if (bOK) 801 rSet.Put( SfxStringItem( SID_TEMPLATE_REGIONNAME, sVal ) ); 802 } 803 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sJumpMark)) ) 804 { 805 ::rtl::OUString sVal; 806 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 807 DBG_ASSERT( bOK, "invalid type or value for JumpMark" ); 808 if (bOK) 809 rSet.Put( SfxStringItem( SID_JUMPMARK, sVal ) ); 810 } 811 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sCharacterSet)) ) 812 { 813 ::rtl::OUString sVal; 814 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 815 DBG_ASSERT( bOK, "invalid type or value for CharacterSet" ); 816 if (bOK) 817 rSet.Put( SfxStringItem( SID_CHARSET, sVal ) ); 818 } 819 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sFilterFlags)) ) 820 { 821 ::rtl::OUString sVal; 822 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 823 DBG_ASSERT( bOK, "invalid type or value for FilterFlags" ); 824 if (bOK) 825 rSet.Put( SfxStringItem( SID_FILE_FILTEROPTIONS, sVal ) ); 826 } 827 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sMacroExecMode)) ) 828 { 829 sal_Int16 nVal =-1; 830 sal_Bool bOK = ((rProp.Value >>= nVal) && (nVal != -1)); 831 DBG_ASSERT( bOK, "invalid type for MacroExecMode" ); 832 if (bOK) 833 rSet.Put( SfxUInt16Item( SID_MACROEXECMODE, nVal ) ); 834 } 835 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sUpdateDocMode)) ) 836 { 837 sal_Int16 nVal =-1; 838 sal_Bool bOK = ((rProp.Value >>= nVal) && (nVal != -1)); 839 DBG_ASSERT( bOK, "invalid type for UpdateDocMode" ); 840 if (bOK) 841 rSet.Put( SfxUInt16Item( SID_UPDATEDOCMODE, nVal ) ); 842 } 843 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sRepairPackage)) ) 844 { 845 sal_Bool bVal = sal_False; 846 sal_Bool bOK = (rProp.Value >>= bVal); 847 DBG_ASSERT( bOK, "invalid type for RepairPackage" ); 848 if (bOK) 849 rSet.Put( SfxBoolItem( SID_REPAIRPACKAGE, bVal ) ); 850 } 851 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sDocumentTitle)) ) 852 { 853 ::rtl::OUString sVal; 854 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 855 DBG_ASSERT( bOK, "invalid type or value for DocumentTitle" ); 856 if (bOK) 857 rSet.Put( SfxStringItem( SID_DOCINFO_TITLE, sVal ) ); 858 } 859 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sDocumentBaseURL)) ) 860 { 861 ::rtl::OUString sVal; 862 // the base url can be set to empty ( for embedded objects for example ) 863 sal_Bool bOK = (rProp.Value >>= sVal); 864 DBG_ASSERT( bOK, "invalid type or value for DocumentBaseURL" ); 865 if (bOK) 866 rSet.Put( SfxStringItem( SID_DOC_BASEURL, sVal ) ); 867 } 868 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sHierarchicalDocumentName)) ) 869 { 870 ::rtl::OUString sVal; 871 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 872 DBG_ASSERT( bOK, "invalid type or value for HierarchicalDocumentName" ); 873 if (bOK) 874 rSet.Put( SfxStringItem( SID_DOC_HIERARCHICALNAME, sVal ) ); 875 } 876 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sCopyStreamIfPossible)) ) 877 { 878 sal_Bool bVal = sal_False; 879 sal_Bool bOK = (rProp.Value >>= bVal); 880 DBG_ASSERT( bOK, "invalid type for CopyStreamIfPossible" ); 881 if (bOK) 882 rSet.Put( SfxBoolItem( SID_COPY_STREAM_IF_POSSIBLE, bVal ) ); 883 } 884 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sNoAutoSave)) ) 885 { 886 sal_Bool bVal = sal_False; 887 sal_Bool bOK = (rProp.Value >>= bVal); 888 DBG_ASSERT( bOK, "invalid type for NoAutoSave" ); 889 if (bOK) 890 rSet.Put( SfxBoolItem( SID_NOAUTOSAVE, bVal ) ); 891 } 892 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sModifyPasswordInfo)) ) 893 { 894 rSet.Put( SfxUnoAnyItem( SID_MODIFYPASSWORDINFO, rProp.Value ) ); 895 } 896 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sEncryptionData)) ) 897 { 898 rSet.Put( SfxUnoAnyItem( SID_ENCRYPTIONDATA, rProp.Value ) ); 899 } 900 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sSuggestedSaveAsDir)) ) 901 { 902 ::rtl::OUString sVal; 903 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 904 DBG_ASSERT( bOK, "invalid type or value for SuggestedSaveAsDir" ); 905 if (bOK) 906 rSet.Put( SfxStringItem( SID_SUGGESTEDSAVEASDIR, sVal ) ); 907 } 908 else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sSuggestedSaveAsName)) ) 909 { 910 ::rtl::OUString sVal; 911 sal_Bool bOK = ((rProp.Value >>= sVal) && sVal.getLength()); 912 DBG_ASSERT( bOK, "invalid type or value for SuggestedSaveAsName" ); 913 if (bOK) 914 rSet.Put( SfxStringItem( SID_SUGGESTEDSAVEASNAME, sVal ) ); 915 } 916 #ifdef DBG_UTIL 917 else 918 --nFoundArgs; 919 #endif 920 } 921 } 922 // --> PB 2007-12-09 #i83757# 923 else 924 { 925 // transform parameter "OptionsPageURL" of slot "OptionsTreeDialog" 926 String sSlotName( DEFINE_CONST_UNICODE( "OptionsTreeDialog" ) ); 927 String sPropName( DEFINE_CONST_UNICODE( "OptionsPageURL" ) ); 928 if ( sSlotName.EqualsAscii( pSlot->pUnoName ) ) 929 { 930 for ( sal_uInt16 n = 0; n < nCount; ++n ) 931 { 932 const PropertyValue& rProp = pPropsVal[n]; 933 String sName( rProp.Name ); 934 if ( sName == sPropName ) 935 { 936 ::rtl::OUString sURL; 937 if ( rProp.Value >>= sURL ) 938 rSet.Put( SfxStringItem( SID_OPTIONS_PAGEURL, sURL ) ); 939 break; 940 } 941 } 942 } 943 } 944 // <-- 945 #ifdef DB_UTIL 946 if ( nFoundArgs == nCount ) 947 { 948 // except for the "special" slots: assure that every argument was convertable 949 ByteString aStr( "MacroPlayer: Some properties didn't match to any formal argument for slot: "); 950 aStr += pSlot->pUnoName; 951 DBG_WARNING( aStr.GetBuffer() ); 952 } 953 #endif 954 } 955 } 956 957 void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& rArgs, const SfxSlot* pSlot ) 958 { 959 if ( !pSlot ) 960 pSlot = SFX_SLOTPOOL().GetSlot( nSlotId ); 961 962 if ( !pSlot) 963 return; 964 965 if ( nSlotId == SID_OPENURL ) 966 nSlotId = SID_OPENDOC; 967 if ( nSlotId == SID_SAVEASURL ) 968 nSlotId = SID_SAVEASDOC; 969 970 // find number of properties to avoid permanent reallocations in the sequence 971 sal_Int32 nProps=0; 972 973 #ifdef DBG_UTIL 974 // trace number of items and compare with number of properties for debugging purposes 975 sal_Int32 nItems=0; 976 #endif 977 978 const SfxType *pType = pSlot->GetType(); 979 if ( !pSlot->IsMode(SFX_SLOT_METHOD) ) 980 { 981 // slot is a property 982 sal_uInt16 nWhich = rSet.GetPool()->GetWhich(nSlotId); 983 if ( rSet.GetItemState( nWhich ) == SFX_ITEM_SET ) //??? 984 { 985 sal_uInt16 nSubCount = pType->nAttribs; 986 if ( nSubCount ) 987 // it's a complex property, we want it split into simple types 988 // so we expect to get as many items as we have (sub) members 989 nProps = nSubCount; 990 else 991 // simple property: we expect to get exactly one item 992 nProps++; 993 } 994 #ifdef DBG_UTIL 995 else 996 { 997 // we will not rely on the "toggle" ability of some property slots 998 ByteString aStr( "Processing property slot without argument: "); 999 aStr += ByteString::CreateFromInt32( nSlotId ); 1000 DBG_ERROR( aStr.GetBuffer() ); 1001 } 1002 #endif 1003 1004 #ifdef DBG_UTIL 1005 nItems++; 1006 #endif 1007 } 1008 else 1009 { 1010 // slot is a method 1011 bool bIsMediaDescriptor = isMediaDescriptor( nSlotId ); 1012 sal_uInt16 nFormalArgs = bIsMediaDescriptor ? nMediaArgsCount : pSlot->GetFormalArgumentCount(); 1013 for ( sal_uInt16 nArg=0; nArg<nFormalArgs; ++nArg ) 1014 { 1015 // check every formal argument of the method 1016 const SfxFormalArgument &rArg = pSlot->GetFormalArgument( nArg ); 1017 1018 sal_uInt16 nWhich = rSet.GetPool()->GetWhich( rArg.nSlotId ); 1019 if ( rSet.GetItemState( nWhich ) == SFX_ITEM_SET ) //??? 1020 { 1021 sal_uInt16 nSubCount = rArg.pType->nAttribs; 1022 if ( nSubCount ) 1023 // argument has a complex type, we want it split into simple types 1024 // so for this argument we expect to get as many items as we have (sub) members 1025 nProps += nSubCount; 1026 else 1027 // argument of simple type: we expect to get exactly one item for it 1028 nProps++; 1029 #ifdef DBG_UTIL 1030 nItems++; 1031 #endif 1032 } 1033 } 1034 1035 // special treatment for slots that are *not* meant to be recorded as slots (except SaveAs/To) 1036 if ( bIsMediaDescriptor ) 1037 { 1038 sal_Int32 nAdditional=0; 1039 if ( rSet.GetItemState( SID_PROGRESS_STATUSBAR_CONTROL ) == SFX_ITEM_SET ) 1040 nAdditional++; 1041 if ( rSet.GetItemState( SID_INTERACTIONHANDLER ) == SFX_ITEM_SET ) 1042 nAdditional++; 1043 if ( rSet.GetItemState( SID_DOC_SALVAGE ) == SFX_ITEM_SET ) 1044 nAdditional++; 1045 if ( rSet.GetItemState( SID_PATH ) == SFX_ITEM_SET ) 1046 nAdditional++; 1047 if ( rSet.GetItemState( SID_FILE_DIALOG ) == SFX_ITEM_SET ) 1048 nAdditional++; 1049 if ( rSet.GetItemState( SID_STANDARD_DIR ) == SFX_ITEM_SET ) 1050 nAdditional++; 1051 if ( rSet.GetItemState( SID_BLACK_LIST ) == SFX_ITEM_SET ) 1052 nAdditional++; 1053 if ( rSet.GetItemState( SID_CONTENT ) == SFX_ITEM_SET ) 1054 nAdditional++; 1055 if ( rSet.GetItemState( SID_INPUTSTREAM ) == SFX_ITEM_SET ) 1056 nAdditional++; 1057 if ( rSet.GetItemState( SID_STREAM ) == SFX_ITEM_SET ) 1058 nAdditional++; 1059 if ( rSet.GetItemState( SID_OUTPUTSTREAM ) == SFX_ITEM_SET ) 1060 nAdditional++; 1061 if ( rSet.GetItemState( SID_TEMPLATE ) == SFX_ITEM_SET ) 1062 nAdditional++; 1063 if ( rSet.GetItemState( SID_OPEN_NEW_VIEW ) == SFX_ITEM_SET ) 1064 nAdditional++; 1065 if ( rSet.GetItemState( SID_FAIL_ON_WARNING ) == SFX_ITEM_SET ) 1066 nAdditional++; 1067 if ( rSet.GetItemState( SID_VIEW_ID ) == SFX_ITEM_SET ) 1068 nAdditional++; 1069 if ( rSet.GetItemState( SID_VIEW_DATA ) == SFX_ITEM_SET ) 1070 nAdditional++; 1071 if ( rSet.GetItemState( SID_FILTER_DATA ) == SFX_ITEM_SET ) 1072 nAdditional++; 1073 if ( rSet.GetItemState( SID_PLUGIN_MODE ) == SFX_ITEM_SET ) 1074 nAdditional++; 1075 if ( rSet.GetItemState( SID_DOC_READONLY ) == SFX_ITEM_SET ) 1076 nAdditional++; 1077 if ( rSet.GetItemState( SID_DOC_STARTPRESENTATION ) == SFX_ITEM_SET ) 1078 nAdditional++; 1079 if ( rSet.GetItemState( SID_SELECTION ) == SFX_ITEM_SET ) 1080 nAdditional++; 1081 if ( rSet.GetItemState( SID_CONTENTTYPE ) == SFX_ITEM_SET ) 1082 nAdditional++; 1083 if ( rSet.GetItemState( SID_POSTDATA ) == SFX_ITEM_SET ) 1084 nAdditional++; 1085 if ( rSet.GetItemState( SID_FILLFRAME ) == SFX_ITEM_SET ) 1086 nAdditional++; 1087 if ( rSet.GetItemState( SID_CHARSET ) == SFX_ITEM_SET ) 1088 nAdditional++; 1089 if ( rSet.GetItemState( SID_TARGETNAME ) == SFX_ITEM_SET ) 1090 nAdditional++; 1091 if ( rSet.GetItemState( SID_TEMPLATE_NAME ) == SFX_ITEM_SET ) 1092 nAdditional++; 1093 if ( rSet.GetItemState( SID_TEMPLATE_REGIONNAME ) == SFX_ITEM_SET ) 1094 nAdditional++; 1095 if ( rSet.GetItemState( SID_HIDDEN ) == SFX_ITEM_SET ) 1096 nAdditional++; 1097 if ( rSet.GetItemState( SID_MINIMIZED ) == SFX_ITEM_SET ) 1098 nAdditional++; 1099 if ( rSet.GetItemState( SID_PREVIEW ) == SFX_ITEM_SET ) 1100 nAdditional++; 1101 if ( rSet.GetItemState( SID_VIEWONLY ) == SFX_ITEM_SET ) 1102 nAdditional++; 1103 if ( rSet.GetItemState( SID_EDITDOC ) == SFX_ITEM_SET ) 1104 nAdditional++; 1105 if ( rSet.GetItemState( SID_SILENT ) == SFX_ITEM_SET ) 1106 nAdditional++; 1107 if ( rSet.GetItemState( SID_JUMPMARK ) == SFX_ITEM_SET ) 1108 nAdditional++; 1109 if ( rSet.GetItemState( SID_DOCUMENT ) == SFX_ITEM_SET ) 1110 nAdditional++; 1111 if ( rSet.GetItemState( SID_MACROEXECMODE ) == SFX_ITEM_SET ) 1112 nAdditional++; 1113 if ( rSet.GetItemState( SID_UPDATEDOCMODE ) == SFX_ITEM_SET ) 1114 nAdditional++; 1115 if ( rSet.GetItemState( SID_REPAIRPACKAGE ) == SFX_ITEM_SET ) 1116 nAdditional++; 1117 if ( rSet.GetItemState( SID_DOCINFO_TITLE ) == SFX_ITEM_SET ) 1118 nAdditional++; 1119 if ( rSet.GetItemState( SID_COMPONENTDATA ) == SFX_ITEM_SET ) 1120 nAdditional++; 1121 if ( rSet.GetItemState( SID_COMPONENTCONTEXT ) == SFX_ITEM_SET ) 1122 nAdditional++; 1123 if ( rSet.GetItemState( SID_DOC_BASEURL ) == SFX_ITEM_SET ) 1124 nAdditional++; 1125 if ( rSet.GetItemState( SID_DOC_HIERARCHICALNAME ) == SFX_ITEM_SET ) 1126 nAdditional++; 1127 if ( rSet.GetItemState( SID_COPY_STREAM_IF_POSSIBLE ) == SFX_ITEM_SET ) 1128 nAdditional++; 1129 if ( rSet.GetItemState( SID_NOAUTOSAVE ) == SFX_ITEM_SET ) 1130 nAdditional++; 1131 if ( rSet.GetItemState( SID_MODIFYPASSWORDINFO ) == SFX_ITEM_SET ) 1132 nAdditional++; 1133 if ( rSet.GetItemState( SID_SUGGESTEDSAVEASDIR ) == SFX_ITEM_SET ) 1134 nAdditional++; 1135 if ( rSet.GetItemState( SID_ENCRYPTIONDATA ) == SFX_ITEM_SET ) 1136 nAdditional++; 1137 if ( rSet.GetItemState( SID_SUGGESTEDSAVEASNAME ) == SFX_ITEM_SET ) 1138 nAdditional++; 1139 1140 // consider additional arguments 1141 nProps += nAdditional; 1142 #ifdef DBG_UTIL 1143 nItems += nAdditional; 1144 #endif 1145 } 1146 } 1147 1148 #ifdef DBG_UTIL 1149 // now check the itemset: is there any item that is not convertable using the list of formal arguments 1150 // or the table of additional items?! 1151 if ( rSet.Count() != nItems ) 1152 { 1153 // detect unknown item and present error message 1154 const sal_uInt16 *pRanges = rSet.GetRanges(); 1155 while ( *pRanges ) 1156 { 1157 for(sal_uInt16 nId = *pRanges++; nId <= *pRanges; ++nId) 1158 { 1159 if ( rSet.GetItemState(nId) < SFX_ITEM_SET ) //??? 1160 // not really set 1161 continue; 1162 1163 if ( !pSlot->IsMode(SFX_SLOT_METHOD) && nId == rSet.GetPool()->GetWhich( pSlot->GetSlotId() ) ) 1164 continue; 1165 1166 bool bIsMediaDescriptor = isMediaDescriptor( nSlotId ); 1167 sal_uInt16 nFormalArgs = bIsMediaDescriptor ? nMediaArgsCount : pSlot->nArgDefCount; 1168 sal_uInt16 nArg; 1169 for ( nArg=0; nArg<nFormalArgs; ++nArg ) 1170 { 1171 const SfxFormalArgument &rArg = bIsMediaDescriptor ? aArgs[nArg] : pSlot->GetFormalArgument( nArg ); 1172 sal_uInt16 nWhich = rSet.GetPool()->GetWhich( rArg.nSlotId ); 1173 if ( nId == nWhich ) 1174 break; 1175 } 1176 1177 if ( nArg<nFormalArgs ) 1178 continue; 1179 1180 if ( bIsMediaDescriptor ) 1181 { 1182 if ( nId == SID_DOCFRAME ) 1183 continue; 1184 if ( nId == SID_PROGRESS_STATUSBAR_CONTROL ) 1185 continue; 1186 if ( nId == SID_INTERACTIONHANDLER ) 1187 continue; 1188 if ( nId == SID_VIEW_DATA ) 1189 continue; 1190 if ( nId == SID_FILTER_DATA ) 1191 continue; 1192 if ( nId == SID_DOCUMENT ) 1193 continue; 1194 if ( nId == SID_CONTENT ) 1195 continue; 1196 if ( nId == SID_INPUTSTREAM ) 1197 continue; 1198 if ( nId == SID_STREAM ) 1199 continue; 1200 if ( nId == SID_OUTPUTSTREAM ) 1201 continue; 1202 if ( nId == SID_POSTDATA ) 1203 continue; 1204 if ( nId == SID_FILLFRAME ) 1205 continue; 1206 if ( nId == SID_TEMPLATE ) 1207 continue; 1208 if ( nId == SID_OPEN_NEW_VIEW ) 1209 continue; 1210 if ( nId == SID_VIEW_ID ) 1211 continue; 1212 if ( nId == SID_PLUGIN_MODE ) 1213 continue; 1214 if ( nId == SID_DOC_READONLY ) 1215 continue; 1216 if ( nId == SID_DOC_STARTPRESENTATION ) 1217 continue; 1218 if ( nId == SID_SELECTION ) 1219 continue; 1220 if ( nId == SID_HIDDEN ) 1221 continue; 1222 if ( nId == SID_MINIMIZED ) 1223 continue; 1224 if ( nId == SID_SILENT ) 1225 continue; 1226 if ( nId == SID_PREVIEW ) 1227 continue; 1228 if ( nId == SID_VIEWONLY ) 1229 continue; 1230 if ( nId == SID_EDITDOC ) 1231 continue; 1232 if ( nId == SID_TARGETNAME ) 1233 continue; 1234 if ( nId == SID_DOC_SALVAGE ) 1235 continue; 1236 if ( nId == SID_PATH ) 1237 continue; 1238 if ( nId == SID_FILE_DIALOG ) 1239 continue; 1240 if ( nId == SID_STANDARD_DIR ) 1241 continue; 1242 if ( nId == SID_BLACK_LIST ) 1243 continue; 1244 if ( nId == SID_CONTENTTYPE ) 1245 continue; 1246 if ( nId == SID_TEMPLATE_NAME ) 1247 continue; 1248 if ( nId == SID_TEMPLATE_REGIONNAME ) 1249 continue; 1250 if ( nId == SID_JUMPMARK ) 1251 continue; 1252 if ( nId == SID_CHARSET ) 1253 continue; 1254 if ( nId == SID_MACROEXECMODE ) 1255 continue; 1256 if ( nId == SID_UPDATEDOCMODE ) 1257 continue; 1258 if ( nId == SID_REPAIRPACKAGE ) 1259 continue; 1260 if ( nId == SID_DOCINFO_TITLE ) 1261 continue; 1262 if ( nId == SID_COMPONENTDATA ) 1263 continue; 1264 if ( nId == SID_COMPONENTCONTEXT ) 1265 continue; 1266 if ( nId == SID_DOC_BASEURL ) 1267 continue; 1268 if ( nId == SID_DOC_HIERARCHICALNAME ) 1269 continue; 1270 if ( nId == SID_COPY_STREAM_IF_POSSIBLE ) 1271 continue; 1272 if ( nId == SID_NOAUTOSAVE ) 1273 continue; 1274 if ( nId == SID_ENCRYPTIONDATA ) 1275 continue; 1276 1277 // used only internally 1278 if ( nId == SID_SAVETO ) 1279 continue; 1280 if ( nId == SID_MODIFYPASSWORDINFO ) 1281 continue; 1282 if ( nId == SID_SUGGESTEDSAVEASDIR ) 1283 continue; 1284 if ( nId == SID_SUGGESTEDSAVEASNAME ) 1285 continue; 1286 } 1287 1288 ByteString aDbg( "Unknown item detected: "); 1289 aDbg += ByteString::CreateFromInt32( nId ); 1290 DBG_ASSERT( nArg<nFormalArgs, aDbg.GetBuffer() ); 1291 } 1292 } 1293 } 1294 #endif 1295 1296 if ( !nProps ) 1297 return; 1298 1299 // convert every item into a property 1300 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue> aSequ( nProps ); 1301 ::com::sun::star::beans::PropertyValue *pValue = aSequ.getArray(); 1302 1303 sal_Int32 nActProp=0; 1304 if ( !pSlot->IsMode(SFX_SLOT_METHOD) ) 1305 { 1306 // slot is a property 1307 sal_uInt16 nWhich = rSet.GetPool()->GetWhich(nSlotId); 1308 sal_Bool bConvertTwips = ( rSet.GetPool()->GetMetric( nWhich ) == SFX_MAPUNIT_TWIP ); 1309 SFX_ITEMSET_ARG( &rSet, pItem, SfxPoolItem, nWhich, sal_False ); 1310 if ( pItem ) //??? 1311 { 1312 sal_uInt16 nSubCount = pType->nAttribs; 1313 if ( !nSubCount ) 1314 { 1315 //rPool.FillVariable( *pItem, *pVar, eUserMetric ); 1316 pValue[nActProp].Name = String( String::CreateFromAscii( pSlot->pUnoName ) ) ; 1317 if ( !pItem->QueryValue( pValue[nActProp].Value ) ) 1318 { 1319 ByteString aStr( "Item not convertable: "); 1320 aStr += ByteString::CreateFromInt32(nSlotId); 1321 DBG_ERROR( aStr.GetBuffer() ); 1322 } 1323 } 1324 else 1325 { 1326 // complex type, add a property value for every member of the struct 1327 for ( sal_uInt16 n=1; n<=nSubCount; ++n ) 1328 { 1329 //rPool.FillVariable( *pItem, *pVar, eUserMetric ); 1330 sal_uInt8 nSubId = (sal_uInt8) (sal_Int8) pType->aAttrib[n-1].nAID; 1331 if ( bConvertTwips ) 1332 nSubId |= CONVERT_TWIPS; 1333 1334 DBG_ASSERT(( pType->aAttrib[n-1].nAID ) <= 127, "Member ID out of range" ); 1335 String aName( String::CreateFromAscii( pSlot->pUnoName ) ) ; 1336 aName += '.'; 1337 aName += String( String::CreateFromAscii( pType->aAttrib[n-1].pName ) ) ; 1338 pValue[nActProp].Name = aName; 1339 if ( !pItem->QueryValue( pValue[nActProp++].Value, nSubId ) ) 1340 { 1341 ByteString aStr( "Sub item "); 1342 aStr += ByteString::CreateFromInt32( pType->aAttrib[n-1].nAID ); 1343 aStr += " not convertable in slot: "; 1344 aStr += ByteString::CreateFromInt32(nSlotId); 1345 DBG_ERROR( aStr.GetBuffer() ); 1346 } 1347 } 1348 } 1349 } 1350 } 1351 else 1352 { 1353 // slot is a method 1354 sal_uInt16 nFormalArgs = pSlot->GetFormalArgumentCount(); 1355 for ( sal_uInt16 nArg=0; nArg<nFormalArgs; ++nArg ) 1356 { 1357 const SfxFormalArgument &rArg = pSlot->GetFormalArgument( nArg ); 1358 sal_uInt16 nWhich = rSet.GetPool()->GetWhich( rArg.nSlotId ); 1359 sal_Bool bConvertTwips = ( rSet.GetPool()->GetMetric( nWhich ) == SFX_MAPUNIT_TWIP ); 1360 SFX_ITEMSET_ARG( &rSet, pItem, SfxPoolItem, nWhich, sal_False ); 1361 if ( pItem ) //??? 1362 { 1363 sal_uInt16 nSubCount = rArg.pType->nAttribs; 1364 if ( !nSubCount ) 1365 { 1366 //rPool.FillVariable( *pItem, *pVar, eUserMetric ); 1367 pValue[nActProp].Name = String( String::CreateFromAscii( rArg.pName ) ) ; 1368 if ( !pItem->QueryValue( pValue[nActProp++].Value ) ) 1369 { 1370 ByteString aStr( "Item not convertable: "); 1371 aStr += ByteString::CreateFromInt32(rArg.nSlotId); 1372 DBG_ERROR( aStr.GetBuffer() ); 1373 } 1374 } 1375 else 1376 { 1377 // complex type, add a property value for every member of the struct 1378 for ( sal_uInt16 n = 1; n <= nSubCount; ++n ) 1379 { 1380 //rPool.FillVariable( rItem, *pVar, eUserMetric ); 1381 sal_uInt8 nSubId = (sal_uInt8) (sal_Int8) rArg.pType->aAttrib[n-1].nAID; 1382 if ( bConvertTwips ) 1383 nSubId |= CONVERT_TWIPS; 1384 1385 DBG_ASSERT((rArg.pType->aAttrib[n-1].nAID) <= 127, "Member ID out of range" ); 1386 String aName( String::CreateFromAscii( rArg.pName ) ) ; 1387 aName += '.'; 1388 aName += String( String::CreateFromAscii( rArg.pType->aAttrib[n-1].pName ) ) ; 1389 pValue[nActProp].Name = aName; 1390 if ( !pItem->QueryValue( pValue[nActProp++].Value, nSubId ) ) 1391 { 1392 ByteString aStr( "Sub item "); 1393 aStr += ByteString::CreateFromInt32( rArg.pType->aAttrib[n-1].nAID ); 1394 aStr += " not convertable in slot: "; 1395 aStr += ByteString::CreateFromInt32(rArg.nSlotId); 1396 DBG_ERROR( aStr.GetBuffer() ); 1397 } 1398 } 1399 } 1400 } 1401 } 1402 1403 if ( nSlotId == SID_OPENDOC || nSlotId == SID_EXPORTDOC || nSlotId == SID_SAVEASDOC || nSlotId == SID_SAVEDOC || 1404 nSlotId == SID_SAVETO || nSlotId == SID_EXPORTDOCASPDF || nSlotId == SID_DIRECTEXPORTDOCASPDF ) 1405 { 1406 const SfxPoolItem *pItem=0; 1407 if ( rSet.GetItemState( SID_COMPONENTDATA, sal_False, &pItem ) == SFX_ITEM_SET ) 1408 { 1409 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sComponentData)); 1410 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1411 } 1412 if ( rSet.GetItemState( SID_COMPONENTCONTEXT, sal_False, &pItem ) == SFX_ITEM_SET ) 1413 { 1414 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sComponentContext)); 1415 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1416 } 1417 if ( rSet.GetItemState( SID_PROGRESS_STATUSBAR_CONTROL, sal_False, &pItem ) == SFX_ITEM_SET ) 1418 { 1419 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sStatusInd)); 1420 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1421 } 1422 if ( rSet.GetItemState( SID_INTERACTIONHANDLER, sal_False, &pItem ) == SFX_ITEM_SET ) 1423 { 1424 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sInteractionHdl)); 1425 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1426 } 1427 if ( rSet.GetItemState( SID_VIEW_DATA, sal_False, &pItem ) == SFX_ITEM_SET ) 1428 { 1429 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sViewData)); 1430 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1431 } 1432 if ( rSet.GetItemState( SID_FILTER_DATA, sal_False, &pItem ) == SFX_ITEM_SET ) 1433 { 1434 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sFilterData)); 1435 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1436 } 1437 if ( rSet.GetItemState( SID_DOCUMENT, sal_False, &pItem ) == SFX_ITEM_SET ) 1438 { 1439 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sModel)); 1440 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1441 } 1442 if ( rSet.GetItemState( SID_CONTENT, sal_False, &pItem ) == SFX_ITEM_SET ) 1443 { 1444 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sUCBContent)); 1445 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1446 } 1447 if ( rSet.GetItemState( SID_INPUTSTREAM, sal_False, &pItem ) == SFX_ITEM_SET ) 1448 { 1449 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sInputStream)); 1450 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1451 } 1452 if ( rSet.GetItemState( SID_STREAM, sal_False, &pItem ) == SFX_ITEM_SET ) 1453 { 1454 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sStream)); 1455 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1456 } 1457 if ( rSet.GetItemState( SID_OUTPUTSTREAM, sal_False, &pItem ) == SFX_ITEM_SET ) 1458 { 1459 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sOutputStream)); 1460 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1461 } 1462 if ( rSet.GetItemState( SID_POSTDATA, sal_False, &pItem ) == SFX_ITEM_SET ) 1463 { 1464 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sPostData)); 1465 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1466 } 1467 if ( rSet.GetItemState( SID_FILLFRAME, sal_False, &pItem ) == SFX_ITEM_SET ) 1468 { 1469 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sFrame)); 1470 if ( pItem->ISA( SfxUsrAnyItem ) ) 1471 { 1472 OSL_ENSURE( false, "TransformItems: transporting an XFrame via an SfxUsrAnyItem is not deprecated!" ); 1473 pValue[nActProp++].Value = static_cast< const SfxUsrAnyItem* >( pItem )->GetValue(); 1474 } 1475 else if ( pItem->ISA( SfxUnoFrameItem ) ) 1476 pValue[nActProp++].Value <<= static_cast< const SfxUnoFrameItem* >( pItem )->GetFrame(); 1477 else 1478 OSL_ENSURE( false, "TransformItems: invalid item type for SID_FILLFRAME!" ); 1479 } 1480 if ( rSet.GetItemState( SID_TEMPLATE, sal_False, &pItem ) == SFX_ITEM_SET ) 1481 { 1482 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sAsTemplate)); 1483 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1484 } 1485 if ( rSet.GetItemState( SID_OPEN_NEW_VIEW, sal_False, &pItem ) == SFX_ITEM_SET ) 1486 { 1487 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sOpenNewView)); 1488 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1489 } 1490 if ( rSet.GetItemState( SID_FAIL_ON_WARNING, sal_False, &pItem ) == SFX_ITEM_SET ) 1491 { 1492 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sFailOnWarning)); 1493 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1494 } 1495 if ( rSet.GetItemState( SID_VIEW_ID, sal_False, &pItem ) == SFX_ITEM_SET ) 1496 { 1497 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sViewId)); 1498 pValue[nActProp++].Value <<= ( (sal_Int16) ((SfxUInt16Item*)pItem)->GetValue() ); 1499 } 1500 if ( rSet.GetItemState( SID_PLUGIN_MODE, sal_False, &pItem ) == SFX_ITEM_SET ) 1501 { 1502 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sPluginMode)); 1503 pValue[nActProp++].Value <<= ( (sal_Int16) ((SfxUInt16Item*)pItem)->GetValue() ); 1504 } 1505 if ( rSet.GetItemState( SID_DOC_READONLY, sal_False, &pItem ) == SFX_ITEM_SET ) 1506 { 1507 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sReadOnly)); 1508 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1509 } 1510 if ( rSet.GetItemState( SID_DOC_STARTPRESENTATION, sal_False, &pItem ) == SFX_ITEM_SET ) 1511 { 1512 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sStartPresentation)); 1513 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1514 } 1515 if ( rSet.GetItemState( SID_SELECTION, sal_False, &pItem ) == SFX_ITEM_SET ) 1516 { 1517 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sSelectionOnly)); 1518 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1519 } 1520 if ( rSet.GetItemState( SID_HIDDEN, sal_False, &pItem ) == SFX_ITEM_SET ) 1521 { 1522 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sHidden)); 1523 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1524 } 1525 if ( rSet.GetItemState( SID_MINIMIZED, sal_False, &pItem ) == SFX_ITEM_SET ) 1526 { 1527 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sMinimized)); 1528 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1529 } 1530 if ( rSet.GetItemState( SID_SILENT, sal_False, &pItem ) == SFX_ITEM_SET ) 1531 { 1532 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sSilent)); 1533 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1534 } 1535 if ( rSet.GetItemState( SID_PREVIEW, sal_False, &pItem ) == SFX_ITEM_SET ) 1536 { 1537 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sPreview)); 1538 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1539 } 1540 if ( rSet.GetItemState( SID_VIEWONLY, sal_False, &pItem ) == SFX_ITEM_SET ) 1541 { 1542 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sViewOnly)); 1543 pValue[nActProp++].Value <<= (sal_Bool) (( ((SfxBoolItem*)pItem)->GetValue() )); 1544 } 1545 if ( rSet.GetItemState( SID_EDITDOC, sal_False, &pItem ) == SFX_ITEM_SET ) 1546 { 1547 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sDontEdit)); 1548 pValue[nActProp++].Value <<= (sal_Bool) (!( ((SfxBoolItem*)pItem)->GetValue() )); 1549 } 1550 if ( rSet.GetItemState( SID_FILE_DIALOG, sal_False, &pItem ) == SFX_ITEM_SET ) 1551 { 1552 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sUseSystemDialog)); 1553 pValue[nActProp++].Value <<= (sal_Bool) ( ((SfxBoolItem*)pItem)->GetValue() ); 1554 } 1555 if ( rSet.GetItemState( SID_STANDARD_DIR, sal_False, &pItem ) == SFX_ITEM_SET ) 1556 { 1557 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sStandardDir)); 1558 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1559 } 1560 if ( rSet.GetItemState( SID_BLACK_LIST, sal_False, &pItem ) == SFX_ITEM_SET ) 1561 { 1562 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sBlackList)); 1563 1564 com::sun::star::uno::Sequence< rtl::OUString > aList; 1565 ((SfxStringListItem*)pItem)->GetStringList( aList ); 1566 pValue[nActProp++].Value <<= aList ; 1567 } 1568 if ( rSet.GetItemState( SID_TARGETNAME, sal_False, &pItem ) == SFX_ITEM_SET ) 1569 { 1570 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sFrameName)); 1571 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1572 } 1573 if ( rSet.GetItemState( SID_DOC_SALVAGE, sal_False, &pItem ) == SFX_ITEM_SET ) 1574 { 1575 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sSalvagedFile)); 1576 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1577 } 1578 if ( rSet.GetItemState( SID_PATH, sal_False, &pItem ) == SFX_ITEM_SET ) 1579 { 1580 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sFolderName)); 1581 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1582 } 1583 if ( rSet.GetItemState( SID_CONTENTTYPE, sal_False, &pItem ) == SFX_ITEM_SET ) 1584 { 1585 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sMediaType)); 1586 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1587 } 1588 if ( rSet.GetItemState( SID_TEMPLATE_NAME, sal_False, &pItem ) == SFX_ITEM_SET ) 1589 { 1590 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sTemplateName)); 1591 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1592 } 1593 if ( rSet.GetItemState( SID_TEMPLATE_REGIONNAME, sal_False, &pItem ) == SFX_ITEM_SET ) 1594 { 1595 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sTemplateRegionName)); 1596 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1597 } 1598 if ( rSet.GetItemState( SID_JUMPMARK, sal_False, &pItem ) == SFX_ITEM_SET ) 1599 { 1600 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sJumpMark)); 1601 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1602 } 1603 1604 if ( rSet.GetItemState( SID_CHARSET, sal_False, &pItem ) == SFX_ITEM_SET ) 1605 { 1606 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sCharacterSet)); 1607 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1608 } 1609 if ( rSet.GetItemState( SID_MACROEXECMODE, sal_False, &pItem ) == SFX_ITEM_SET ) 1610 { 1611 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sMacroExecMode)); 1612 pValue[nActProp++].Value <<= ( (sal_Int16) ((SfxUInt16Item*)pItem)->GetValue() ); 1613 } 1614 if ( rSet.GetItemState( SID_UPDATEDOCMODE, sal_False, &pItem ) == SFX_ITEM_SET ) 1615 { 1616 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sUpdateDocMode)); 1617 pValue[nActProp++].Value <<= ( (sal_Int16) ((SfxUInt16Item*)pItem)->GetValue() ); 1618 } 1619 if ( rSet.GetItemState( SID_REPAIRPACKAGE, sal_False, &pItem ) == SFX_ITEM_SET ) 1620 { 1621 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sRepairPackage)); 1622 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1623 } 1624 if ( rSet.GetItemState( SID_DOCINFO_TITLE, sal_False, &pItem ) == SFX_ITEM_SET ) 1625 { 1626 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sDocumentTitle)); 1627 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1628 } 1629 if ( rSet.GetItemState( SID_DOC_BASEURL, sal_False, &pItem ) == SFX_ITEM_SET ) 1630 { 1631 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sDocumentBaseURL)); 1632 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1633 } 1634 if ( rSet.GetItemState( SID_DOC_HIERARCHICALNAME, sal_False, &pItem ) == SFX_ITEM_SET ) 1635 { 1636 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sHierarchicalDocumentName)); 1637 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1638 } 1639 if ( rSet.GetItemState( SID_COPY_STREAM_IF_POSSIBLE, sal_False, &pItem ) == SFX_ITEM_SET ) 1640 { 1641 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sCopyStreamIfPossible)); 1642 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1643 } 1644 if ( rSet.GetItemState( SID_NOAUTOSAVE, sal_False, &pItem ) == SFX_ITEM_SET ) 1645 { 1646 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sNoAutoSave)); 1647 pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() ); 1648 } 1649 if ( rSet.GetItemState( SID_MODIFYPASSWORDINFO, sal_False, &pItem ) == SFX_ITEM_SET ) 1650 { 1651 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sModifyPasswordInfo)); 1652 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1653 } 1654 if ( rSet.GetItemState( SID_ENCRYPTIONDATA, sal_False, &pItem ) == SFX_ITEM_SET ) 1655 { 1656 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sEncryptionData)); 1657 pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() ); 1658 } 1659 if ( rSet.GetItemState( SID_SUGGESTEDSAVEASDIR, sal_False, &pItem ) == SFX_ITEM_SET ) 1660 { 1661 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sSuggestedSaveAsDir)); 1662 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1663 } 1664 if ( rSet.GetItemState( SID_SUGGESTEDSAVEASNAME, sal_False, &pItem ) == SFX_ITEM_SET ) 1665 { 1666 pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sSuggestedSaveAsName)); 1667 pValue[nActProp++].Value <<= ( ::rtl::OUString(((SfxStringItem*)pItem)->GetValue()) ); 1668 } 1669 } 1670 } 1671 1672 rArgs = aSequ; 1673 } 1674 1675 SFX_IMPL_XINTERFACE_5( SfxMacroLoader, OWeakObject, ::com::sun::star::frame::XDispatchProvider, ::com::sun::star::frame::XNotifyingDispatch, ::com::sun::star::frame::XDispatch, ::com::sun::star::frame::XSynchronousDispatch,::com::sun::star::lang::XInitialization ) 1676 SFX_IMPL_XTYPEPROVIDER_5( SfxMacroLoader, ::com::sun::star::frame::XDispatchProvider, ::com::sun::star::frame::XNotifyingDispatch, ::com::sun::star::frame::XDispatch, ::com::sun::star::frame::XSynchronousDispatch,::com::sun::star::lang::XInitialization ) 1677 SFX_IMPL_XSERVICEINFO( SfxMacroLoader, PROTOCOLHANDLER_SERVICENAME, "com.sun.star.comp.sfx2.SfxMacroLoader" ) 1678 SFX_IMPL_SINGLEFACTORY( SfxMacroLoader ) 1679 1680 void SAL_CALL SfxMacroLoader::initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException) 1681 { 1682 Reference < XFrame > xFrame; 1683 if ( aArguments.getLength() ) 1684 { 1685 aArguments[0] >>= xFrame; 1686 m_xFrame = xFrame; 1687 } 1688 } 1689 1690 SfxObjectShell* SfxMacroLoader::GetObjectShell_Impl() 1691 { 1692 SfxObjectShell* pDocShell = NULL; 1693 Reference < XFrame > xFrame( m_xFrame.get(), UNO_QUERY ); 1694 if ( xFrame.is() ) 1695 { 1696 SfxFrame* pFrame=0; 1697 for ( pFrame = SfxFrame::GetFirst(); pFrame; pFrame = SfxFrame::GetNext( *pFrame ) ) 1698 { 1699 if ( pFrame->GetFrameInterface() == xFrame ) 1700 break; 1701 } 1702 1703 if ( pFrame ) 1704 pDocShell = pFrame->GetCurrentDocument(); 1705 } 1706 1707 return pDocShell; 1708 } 1709 1710 // ----------------------------------------------------------------------- 1711 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL SfxMacroLoader::queryDispatch( 1712 const ::com::sun::star::util::URL& aURL , 1713 const ::rtl::OUString& /*sTargetFrameName*/, 1714 sal_Int32 /*nSearchFlags*/ ) throw( ::com::sun::star::uno::RuntimeException ) 1715 { 1716 ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatcher; 1717 if(aURL.Complete.compareToAscii("macro:",6)==0) 1718 xDispatcher = this; 1719 return xDispatcher; 1720 } 1721 1722 // ----------------------------------------------------------------------- 1723 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference < ::com::sun::star::frame::XDispatch > > SAL_CALL 1724 SfxMacroLoader::queryDispatches( const ::com::sun::star::uno::Sequence < ::com::sun::star::frame::DispatchDescriptor >& seqDescriptor ) 1725 throw( ::com::sun::star::uno::RuntimeException ) 1726 { 1727 sal_Int32 nCount = seqDescriptor.getLength(); 1728 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference < ::com::sun::star::frame::XDispatch > > lDispatcher(nCount); 1729 for( sal_Int32 i=0; i<nCount; ++i ) 1730 lDispatcher[i] = this->queryDispatch( seqDescriptor[i].FeatureURL, 1731 seqDescriptor[i].FrameName, 1732 seqDescriptor[i].SearchFlags ); 1733 return lDispatcher; 1734 } 1735 1736 // ----------------------------------------------------------------------- 1737 void SAL_CALL SfxMacroLoader::dispatchWithNotification( const ::com::sun::star::util::URL& aURL , 1738 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& lArgs , 1739 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchResultListener >& xListener ) 1740 throw (::com::sun::star::uno::RuntimeException) 1741 { 1742 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 1743 1744 sal_uInt32 nPropertyCount = lArgs.getLength(); 1745 ::rtl::OUString aReferer; 1746 for( sal_uInt32 nProperty=0; nProperty<nPropertyCount; ++nProperty ) 1747 { 1748 if( lArgs[nProperty].Name == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Referer")) ) 1749 { 1750 lArgs[nProperty].Value >>= aReferer; 1751 break; 1752 } 1753 } 1754 1755 ::com::sun::star::uno::Any aAny; 1756 ErrCode nErr = loadMacro( aURL.Complete, aAny, GetObjectShell_Impl() ); 1757 if( xListener.is() ) 1758 { 1759 // always call dispatchFinished(), because we didn't load a document but 1760 // executed a macro instead! 1761 ::com::sun::star::frame::DispatchResultEvent aEvent; 1762 1763 aEvent.Source = static_cast< ::cppu::OWeakObject* >(this); 1764 if( nErr == ERRCODE_NONE ) 1765 aEvent.State = ::com::sun::star::frame::DispatchResultState::SUCCESS; 1766 else 1767 aEvent.State = ::com::sun::star::frame::DispatchResultState::FAILURE; 1768 1769 xListener->dispatchFinished( aEvent ) ; 1770 } 1771 } 1772 1773 ::com::sun::star::uno::Any SAL_CALL SfxMacroLoader::dispatchWithReturnValue( 1774 const ::com::sun::star::util::URL& aURL, 1775 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& ) throw (::com::sun::star::uno::RuntimeException) 1776 { 1777 ::com::sun::star::uno::Any aRet; 1778 /*ErrCode nErr = */loadMacro( aURL.Complete, aRet, GetObjectShell_Impl() ); 1779 return aRet; 1780 } 1781 1782 // ----------------------------------------------------------------------- 1783 void SAL_CALL SfxMacroLoader::dispatch( const ::com::sun::star::util::URL& aURL , 1784 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& lArgs ) 1785 throw (::com::sun::star::uno::RuntimeException) 1786 { 1787 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 1788 1789 sal_uInt32 nPropertyCount = lArgs.getLength(); 1790 ::rtl::OUString aReferer; 1791 for( sal_uInt32 nProperty=0; nProperty<nPropertyCount; ++nProperty ) 1792 { 1793 if( lArgs[nProperty].Name == ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Referer")) ) 1794 { 1795 lArgs[nProperty].Value >>= aReferer; 1796 break; 1797 } 1798 } 1799 1800 ::com::sun::star::uno::Any aAny; 1801 /*ErrCode nErr = */loadMacro( aURL.Complete, aAny, GetObjectShell_Impl() ); 1802 } 1803 1804 // ----------------------------------------------------------------------- 1805 void SAL_CALL SfxMacroLoader::addStatusListener( 1806 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >& , 1807 const ::com::sun::star::util::URL& ) 1808 throw (::com::sun::star::uno::RuntimeException) 1809 { 1810 /* TODO 1811 How we can handle different listener for further coming or currently running dispatch() jobs 1812 without any inconsistency! 1813 */ 1814 } 1815 1816 // ----------------------------------------------------------------------- 1817 void SAL_CALL SfxMacroLoader::removeStatusListener( 1818 const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener >&, 1819 const ::com::sun::star::util::URL& ) 1820 throw (::com::sun::star::uno::RuntimeException) 1821 { 1822 } 1823 1824 ErrCode SfxMacroLoader::loadMacro( const ::rtl::OUString& rURL, com::sun::star::uno::Any& rRetval, SfxObjectShell* pSh ) 1825 throw ( ::com::sun::star::uno::RuntimeException ) 1826 { 1827 SfxObjectShell* pCurrent = pSh; 1828 if ( !pCurrent ) 1829 // all not full qualified names use the BASIC of the given or current document 1830 pCurrent = SfxObjectShell::Current(); 1831 1832 // 'macro:///lib.mod.proc(args)' => macro of App-BASIC 1833 // 'macro://[docname|.]/lib.mod.proc(args)' => macro of current or qualified document 1834 // 'macro://obj.method(args)' => direct API call, execute it via App-BASIC 1835 String aMacro( rURL ); 1836 sal_uInt16 nHashPos = aMacro.Search( '/', 8 ); 1837 sal_uInt16 nArgsPos = aMacro.Search( '(' ); 1838 BasicManager *pAppMgr = SFX_APP()->GetBasicManager(); 1839 BasicManager *pBasMgr = 0; 1840 ErrCode nErr = ERRCODE_NONE; 1841 1842 // should a macro function be executed ( no direct API call)? 1843 if ( STRING_NOTFOUND != nHashPos && nHashPos < nArgsPos ) 1844 { 1845 // find BasicManager 1846 SfxObjectShell* pDoc = NULL; 1847 String aBasMgrName( INetURLObject::decode(aMacro.Copy( 8, nHashPos-8 ), INET_HEX_ESCAPE, INetURLObject::DECODE_WITH_CHARSET) ); 1848 if ( !aBasMgrName.Len() ) 1849 pBasMgr = pAppMgr; 1850 else if ( aBasMgrName.EqualsAscii(".") ) 1851 { 1852 // current/actual document 1853 pDoc = pCurrent; 1854 if (pDoc) 1855 pBasMgr = pDoc->GetBasicManager(); 1856 } 1857 else 1858 { 1859 // full qualified name, find document by name 1860 for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst(); 1861 pObjSh && !pBasMgr; 1862 pObjSh = SfxObjectShell::GetNext(*pObjSh) ) 1863 if ( aBasMgrName == pObjSh->GetTitle(SFX_TITLE_APINAME) ) 1864 { 1865 pDoc = pObjSh; 1866 pBasMgr = pDoc->GetBasicManager(); 1867 } 1868 } 1869 1870 if ( pBasMgr ) 1871 { 1872 const bool bIsAppBasic = ( pBasMgr == pAppMgr ); 1873 const bool bIsDocBasic = ( pBasMgr != pAppMgr ); 1874 1875 if ( pDoc ) 1876 { 1877 // security check for macros from document basic if an SFX doc is given 1878 if ( !pDoc->AdjustMacroMode( String() ) ) 1879 // check forbids execution 1880 return ERRCODE_IO_ACCESSDENIED; 1881 } 1882 else if ( pDoc && pDoc->GetMedium() ) 1883 { 1884 pDoc->AdjustMacroMode( String() ); 1885 SFX_ITEMSET_ARG( pDoc->GetMedium()->GetItemSet(), pUpdateDocItem, SfxUInt16Item, SID_UPDATEDOCMODE, sal_False); 1886 SFX_ITEMSET_ARG( pDoc->GetMedium()->GetItemSet(), pMacroExecModeItem, SfxUInt16Item, SID_MACROEXECMODE, sal_False); 1887 if ( pUpdateDocItem && pMacroExecModeItem 1888 && pUpdateDocItem->GetValue() == document::UpdateDocMode::NO_UPDATE 1889 && pMacroExecModeItem->GetValue() == document::MacroExecMode::NEVER_EXECUTE ) 1890 return ERRCODE_IO_ACCESSDENIED; 1891 } 1892 1893 // find BASIC method 1894 String aQualifiedMethod( INetURLObject::decode(aMacro.Copy( nHashPos+1 ), INET_HEX_ESCAPE, INetURLObject::DECODE_WITH_CHARSET) ); 1895 String aArgs; 1896 if ( STRING_NOTFOUND != nArgsPos ) 1897 { 1898 // remove arguments from macro name 1899 aArgs = aQualifiedMethod.Copy( nArgsPos - nHashPos - 1 ); 1900 aQualifiedMethod.Erase( nArgsPos - nHashPos - 1 ); 1901 } 1902 1903 if ( pBasMgr->HasMacro( aQualifiedMethod ) ) 1904 { 1905 Any aOldThisComponent; 1906 const bool bSetDocMacroMode = ( pDoc != NULL ) && bIsDocBasic; 1907 const bool bSetGlobalThisComponent = ( pDoc != NULL ) && bIsAppBasic; 1908 if ( bSetDocMacroMode ) 1909 { 1910 // mark document: it executes an own macro, so it's in a modal mode 1911 pDoc->SetMacroMode_Impl( sal_True ); 1912 } 1913 1914 if ( bSetGlobalThisComponent ) 1915 { 1916 // document is executed via AppBASIC, adjust ThisComponent variable 1917 aOldThisComponent = pAppMgr->SetGlobalUNOConstant( "ThisComponent", makeAny( pDoc->GetModel() ) ); 1918 } 1919 1920 // just to let the shell be alive 1921 SfxObjectShellRef xKeepDocAlive = pDoc; 1922 1923 { 1924 // attempt to protect the document against the script tampering with its Undo Context 1925 ::std::auto_ptr< ::framework::DocumentUndoGuard > pUndoGuard; 1926 if ( bIsDocBasic ) 1927 pUndoGuard.reset( new ::framework::DocumentUndoGuard( pDoc->GetModel() ) ); 1928 1929 // execute the method 1930 SbxVariableRef retValRef = new SbxVariable; 1931 nErr = pBasMgr->ExecuteMacro( aQualifiedMethod, aArgs, retValRef ); 1932 if ( nErr == ERRCODE_NONE ) 1933 rRetval = sbxToUnoValue( retValRef ); 1934 } 1935 1936 if ( bSetGlobalThisComponent ) 1937 { 1938 pAppMgr->SetGlobalUNOConstant( "ThisComponent", aOldThisComponent ); 1939 } 1940 1941 if ( bSetDocMacroMode ) 1942 { 1943 // remove flag for modal mode 1944 pDoc->SetMacroMode_Impl( sal_False ); 1945 } 1946 } 1947 else 1948 nErr = ERRCODE_BASIC_PROC_UNDEFINED; 1949 } 1950 else 1951 nErr = ERRCODE_IO_NOTEXISTS; 1952 } 1953 else 1954 { 1955 // direct API call on a specified object 1956 String aCall( '[' ); 1957 aCall += String(INetURLObject::decode(aMacro.Copy(6), INET_HEX_ESCAPE, 1958 INetURLObject::DECODE_WITH_CHARSET)); 1959 aCall += ']'; 1960 pAppMgr->GetLib(0)->Execute( aCall ); 1961 nErr = SbxBase::GetError(); 1962 } 1963 1964 SbxBase::ResetError(); 1965 return nErr; 1966 } 1967 1968 SFX_IMPL_XSERVICEINFO( SfxAppDispatchProvider, "com.sun.star.frame.DispatchProvider", "com.sun.star.comp.sfx2.AppDispatchProvider" ) \ 1969 SFX_IMPL_SINGLEFACTORY( SfxAppDispatchProvider ); 1970 1971 void SAL_CALL SfxAppDispatchProvider::initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException) 1972 { 1973 Reference < XFrame > xFrame; 1974 if ( aArguments.getLength() ) 1975 { 1976 aArguments[0] >>= xFrame; 1977 m_xFrame = xFrame; 1978 } 1979 } 1980 1981 Reference < XDispatch > SAL_CALL SfxAppDispatchProvider::queryDispatch( 1982 const ::com::sun::star::util::URL& aURL, 1983 const ::rtl::OUString& /*sTargetFrameName*/, 1984 FrameSearchFlags /*eSearchFlags*/ ) throw( RuntimeException ) 1985 { 1986 sal_uInt16 nId( 0 ); 1987 sal_Bool bMasterCommand( sal_False ); 1988 Reference < XDispatch > xDisp; 1989 const SfxSlot* pSlot = 0; 1990 SfxDispatcher* pAppDisp = SFX_APP()->GetAppDispatcher_Impl(); 1991 if ( aURL.Protocol.compareToAscii( "slot:" ) == COMPARE_EQUAL || 1992 aURL.Protocol.compareToAscii( "commandId:" ) == COMPARE_EQUAL ) 1993 { 1994 nId = (sal_uInt16) aURL.Path.toInt32(); 1995 SfxShell* pShell; 1996 pAppDisp->GetShellAndSlot_Impl( nId, &pShell, &pSlot, sal_True, sal_True ); 1997 } 1998 else if ( aURL.Protocol.compareToAscii( ".uno:" ) == COMPARE_EQUAL ) 1999 { 2000 // Support ".uno" commands. Map commands to slotid 2001 bMasterCommand = SfxOfficeDispatch::IsMasterUnoCommand( aURL ); 2002 if ( bMasterCommand ) 2003 pSlot = pAppDisp->GetSlot( SfxOfficeDispatch::GetMasterUnoCommand( aURL ) ); 2004 else 2005 pSlot = pAppDisp->GetSlot( aURL.Main ); 2006 } 2007 2008 if ( pSlot ) 2009 { 2010 SfxOfficeDispatch* pDispatch = new SfxOfficeDispatch( pAppDisp, pSlot, aURL ) ; 2011 pDispatch->SetFrame(m_xFrame); 2012 pDispatch->SetMasterUnoCommand( bMasterCommand ); 2013 xDisp = pDispatch; 2014 } 2015 2016 return xDisp; 2017 } 2018 2019 Sequence< Reference < XDispatch > > SAL_CALL SfxAppDispatchProvider::queryDispatches( const Sequence < DispatchDescriptor >& seqDescriptor ) 2020 throw( RuntimeException ) 2021 { 2022 sal_Int32 nCount = seqDescriptor.getLength(); 2023 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference < ::com::sun::star::frame::XDispatch > > lDispatcher(nCount); 2024 for( sal_Int32 i=0; i<nCount; ++i ) 2025 lDispatcher[i] = this->queryDispatch( seqDescriptor[i].FeatureURL, 2026 seqDescriptor[i].FrameName, 2027 seqDescriptor[i].SearchFlags ); 2028 return lDispatcher; 2029 } 2030 2031 Sequence< sal_Int16 > SAL_CALL SfxAppDispatchProvider::getSupportedCommandGroups() 2032 throw (::com::sun::star::uno::RuntimeException) 2033 { 2034 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 2035 2036 std::list< sal_Int16 > aGroupList; 2037 SfxSlotPool* pAppSlotPool = &SFX_APP()->GetAppSlotPool_Impl(); 2038 2039 const sal_uIntPtr nMode( SFX_SLOT_TOOLBOXCONFIG|SFX_SLOT_ACCELCONFIG|SFX_SLOT_MENUCONFIG ); 2040 2041 // Gruppe anw"ahlen ( Gruppe 0 ist intern ) 2042 for ( sal_uInt16 i=0; i<pAppSlotPool->GetGroupCount(); i++ ) 2043 { 2044 String aName = pAppSlotPool->SeekGroup( i ); 2045 const SfxSlot* pSfxSlot = pAppSlotPool->FirstSlot(); 2046 while ( pSfxSlot ) 2047 { 2048 if ( pSfxSlot->GetMode() & nMode ) 2049 { 2050 sal_Int16 nCommandGroup = MapGroupIDToCommandGroup( pSfxSlot->GetGroupId() ); 2051 aGroupList.push_back( nCommandGroup ); 2052 break; 2053 } 2054 pSfxSlot = pAppSlotPool->NextSlot(); 2055 } 2056 } 2057 2058 ::com::sun::star::uno::Sequence< sal_Int16 > aSeq = 2059 comphelper::containerToSequence< sal_Int16, std::list< sal_Int16 > >( aGroupList ); 2060 2061 return aSeq; 2062 } 2063 2064 Sequence< ::com::sun::star::frame::DispatchInformation > SAL_CALL SfxAppDispatchProvider::getConfigurableDispatchInformation( sal_Int16 nCmdGroup ) 2065 throw (::com::sun::star::uno::RuntimeException) 2066 { 2067 std::list< ::com::sun::star::frame::DispatchInformation > aCmdList; 2068 2069 ::vos::OGuard aGuard( Application::GetSolarMutex() ); 2070 SfxSlotPool* pAppSlotPool = &SFX_APP()->GetAppSlotPool_Impl(); 2071 2072 if ( pAppSlotPool ) 2073 { 2074 const sal_uIntPtr nMode( SFX_SLOT_TOOLBOXCONFIG|SFX_SLOT_ACCELCONFIG|SFX_SLOT_MENUCONFIG ); 2075 rtl::OUString aCmdPrefix( RTL_CONSTASCII_USTRINGPARAM( ".uno:" )); 2076 2077 // Gruppe anw"ahlen ( Gruppe 0 ist intern ) 2078 for ( sal_uInt16 i=0; i<pAppSlotPool->GetGroupCount(); i++ ) 2079 { 2080 String aName = pAppSlotPool->SeekGroup( i ); 2081 const SfxSlot* pSfxSlot = pAppSlotPool->FirstSlot(); 2082 if ( pSfxSlot ) 2083 { 2084 sal_Int16 nCommandGroup = MapGroupIDToCommandGroup( pSfxSlot->GetGroupId() ); 2085 if ( nCommandGroup == nCmdGroup ) 2086 { 2087 while ( pSfxSlot ) 2088 { 2089 if ( pSfxSlot->GetMode() & nMode ) 2090 { 2091 ::com::sun::star::frame::DispatchInformation aCmdInfo; 2092 ::rtl::OUStringBuffer aBuf( aCmdPrefix ); 2093 aBuf.appendAscii( pSfxSlot->GetUnoName() ); 2094 aCmdInfo.Command = aBuf.makeStringAndClear(); 2095 aCmdInfo.GroupId = nCommandGroup; 2096 aCmdList.push_back( aCmdInfo ); 2097 } 2098 pSfxSlot = pAppSlotPool->NextSlot(); 2099 } 2100 } 2101 } 2102 } 2103 } 2104 2105 ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchInformation > aSeq = 2106 comphelper::containerToSequence< ::com::sun::star::frame::DispatchInformation, std::list< ::com::sun::star::frame::DispatchInformation > >( aCmdList ); 2107 2108 return aSeq; 2109 } 2110 2111 #ifdef TEST_HANDLERS 2112 #include <cppuhelper/implbase2.hxx> 2113 2114 #include <com/sun/star/awt/XKeyHandler.hdl> 2115 #include <com/sun/star/awt/XMouseClickHandler.hdl> 2116 2117 class TestKeyHandler: public ::cppu::WeakImplHelper2 2118 < 2119 com::sun::star::awt::XKeyHandler, 2120 com::sun::star::lang::XServiceInfo 2121 > 2122 { 2123 public: 2124 TestKeyHandler( const com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& ){} 2125 2126 SFX_DECL_XSERVICEINFO 2127 virtual sal_Bool SAL_CALL keyPressed( const ::com::sun::star::awt::KeyEvent& aEvent ) throw (::com::sun::star::uno::RuntimeException); 2128 virtual sal_Bool SAL_CALL keyReleased( const ::com::sun::star::awt::KeyEvent& aEvent ) throw (::com::sun::star::uno::RuntimeException); 2129 virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source) 2130 throw (::com::sun::star::uno::RuntimeException); 2131 }; 2132 2133 class TestMouseClickHandler: public ::cppu::WeakImplHelper2 2134 < 2135 com::sun::star::awt::XMouseClickHandler, 2136 com::sun::star::lang::XServiceInfo 2137 > 2138 { 2139 public: 2140 TestMouseClickHandler( const com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& ){} 2141 2142 SFX_DECL_XSERVICEINFO 2143 virtual sal_Bool SAL_CALL mousePressed( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException); 2144 virtual sal_Bool SAL_CALL mouseReleased( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException); 2145 virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source) 2146 throw (::com::sun::star::uno::RuntimeException); 2147 }; 2148 2149 sal_Bool SAL_CALL TestKeyHandler::keyPressed( const ::com::sun::star::awt::KeyEvent& aEvent ) throw (::com::sun::star::uno::RuntimeException) 2150 { 2151 return sal_False; 2152 } 2153 2154 sal_Bool SAL_CALL TestKeyHandler::keyReleased( const ::com::sun::star::awt::KeyEvent& aEvent ) throw (::com::sun::star::uno::RuntimeException) 2155 { 2156 return sal_False; 2157 } 2158 2159 void SAL_CALL TestKeyHandler::disposing( const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException) 2160 { 2161 } 2162 2163 sal_Bool SAL_CALL TestMouseClickHandler::mousePressed( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException) 2164 { 2165 return sal_False; 2166 } 2167 2168 sal_Bool SAL_CALL TestMouseClickHandler::mouseReleased( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException) 2169 { 2170 return sal_False; 2171 } 2172 2173 void SAL_CALL TestMouseClickHandler::disposing( const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException) 2174 { 2175 } 2176 2177 SFX_IMPL_XSERVICEINFO( TestKeyHandler, "com.sun.star.task.Job", "com.sun.star.comp.Office.KeyHandler"); 2178 SFX_IMPL_XSERVICEINFO( TestMouseClickHandler, "com.sun.star.task.Job", "com.sun.star.comp.Office.MouseClickHandler"); 2179 SFX_IMPL_SINGLEFACTORY( TestKeyHandler ); 2180 SFX_IMPL_SINGLEFACTORY( TestMouseClickHandler ); 2181 #endif 2182 // ----------------------------------------------------------------------- 2183 2184 extern "C" { 2185 2186 SFX2_DLLPUBLIC void SAL_CALL component_getImplementationEnvironment( 2187 const sal_Char** ppEnvironmentTypeName , 2188 uno_Environment** ) 2189 { 2190 *ppEnvironmentTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ; 2191 } 2192 2193 SFX2_DLLPUBLIC void* SAL_CALL component_getFactory( 2194 const sal_Char* pImplementationName , 2195 void* pServiceManager , 2196 void* ) 2197 { 2198 // Set default return value for this operation - if it failed. 2199 void* pReturn = NULL ; 2200 2201 if ( 2202 ( pImplementationName != NULL ) && 2203 ( pServiceManager != NULL ) 2204 ) 2205 { 2206 // Define variables which are used in following macros. 2207 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > 2208 xFactory; 2209 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceManager( reinterpret_cast< ::com::sun::star::lang::XMultiServiceFactory* >( pServiceManager ) ) ; 2210 2211 //============================================================================= 2212 // Add new macro line to handle new service. 2213 // 2214 // !!! ATTENTION !!! 2215 // Write no ";" at end of line and dont forget "else" ! (see macro) 2216 //============================================================================= 2217 IF_NAME_CREATECOMPONENTFACTORY( SfxGlobalEvents_Impl ) 2218 IF_NAME_CREATECOMPONENTFACTORY( SfxFrameLoader_Impl ) 2219 IF_NAME_CREATECOMPONENTFACTORY( SfxMacroLoader ) 2220 IF_NAME_CREATECOMPONENTFACTORY( SfxStandaloneDocumentInfoObject ) 2221 IF_NAME_CREATECOMPONENTFACTORY( SfxAppDispatchProvider ) 2222 IF_NAME_CREATECOMPONENTFACTORY( SfxDocTplService ) 2223 IF_NAME_CREATECOMPONENTFACTORY( ShutdownIcon ) 2224 IF_NAME_CREATECOMPONENTFACTORY( SfxApplicationScriptLibraryContainer ) 2225 IF_NAME_CREATECOMPONENTFACTORY( SfxApplicationDialogLibraryContainer ) 2226 #ifdef TEST_HANDLERS 2227 IF_NAME_CREATECOMPONENTFACTORY( TestKeyHandler ) 2228 IF_NAME_CREATECOMPONENTFACTORY( TestMouseClickHandler ) 2229 #endif 2230 IF_NAME_CREATECOMPONENTFACTORY( OPackageStructureCreator ) 2231 #if 0 2232 if ( ::sfx2::AppletObject::impl_getStaticImplementationName().equals( 2233 ::rtl::OUString::createFromAscii( pImplementationName ) ) ) 2234 { 2235 xFactory = ::sfx2::AppletObject::impl_createFactory(); 2236 } 2237 #endif 2238 IF_NAME_CREATECOMPONENTFACTORY( ::sfx2::PluginObject ) 2239 IF_NAME_CREATECOMPONENTFACTORY( ::sfx2::IFrameObject ) 2240 IF_NAME_CREATECOMPONENTFACTORY( ::sfx2::OwnSubFilterService ) 2241 if ( ::comp_SfxDocumentMetaData::_getImplementationName().equals( 2242 ::rtl::OUString::createFromAscii( pImplementationName ) ) ) 2243 { 2244 xFactory = ::cppu::createSingleComponentFactory( 2245 ::comp_SfxDocumentMetaData::_create, 2246 ::comp_SfxDocumentMetaData::_getImplementationName(), 2247 ::comp_SfxDocumentMetaData::_getSupportedServiceNames()); 2248 } 2249 2250 // Factory is valid - service was found. 2251 if ( xFactory.is() ) 2252 { 2253 xFactory->acquire(); 2254 pReturn = xFactory.get(); 2255 } 2256 } 2257 // Return with result of this operation. 2258 return pReturn ; 2259 } 2260 } // extern "C" 2261 2262 //========================================================================= 2263 2264 void SAL_CALL FilterOptionsContinuation::setFilterOptions( 2265 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rProps ) 2266 throw (::com::sun::star::uno::RuntimeException) 2267 { 2268 rProperties = rProps; 2269 } 2270 2271 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL 2272 FilterOptionsContinuation::getFilterOptions() 2273 throw (::com::sun::star::uno::RuntimeException) 2274 { 2275 return rProperties; 2276 } 2277 2278 //========================================================================= 2279 2280 RequestFilterOptions::RequestFilterOptions( ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > rModel, 2281 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > rProperties ) 2282 { 2283 ::rtl::OUString temp; 2284 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > temp2; 2285 ::com::sun::star::document::FilterOptionsRequest aOptionsRequest( temp, 2286 temp2, 2287 rModel, 2288 rProperties ); 2289 2290 m_aRequest <<= aOptionsRequest; 2291 2292 m_pAbort = new comphelper::OInteractionAbort; 2293 m_pOptions = new FilterOptionsContinuation; 2294 2295 m_lContinuations.realloc( 2 ); 2296 m_lContinuations[0] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pAbort ); 2297 m_lContinuations[1] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pOptions ); 2298 } 2299 2300 ::com::sun::star::uno::Any SAL_CALL RequestFilterOptions::getRequest() 2301 throw( ::com::sun::star::uno::RuntimeException ) 2302 { 2303 return m_aRequest; 2304 } 2305 2306 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > 2307 SAL_CALL RequestFilterOptions::getContinuations() 2308 throw( ::com::sun::star::uno::RuntimeException ) 2309 { 2310 return m_lContinuations; 2311 } 2312 2313 //========================================================================= 2314 class RequestPackageReparation_Impl : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest > 2315 { 2316 ::com::sun::star::uno::Any m_aRequest; 2317 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > m_lContinuations; 2318 comphelper::OInteractionApprove* m_pApprove; 2319 comphelper::OInteractionDisapprove* m_pDisapprove; 2320 2321 public: 2322 RequestPackageReparation_Impl( ::rtl::OUString aName ); 2323 sal_Bool isApproved(); 2324 virtual ::com::sun::star::uno::Any SAL_CALL getRequest() throw( ::com::sun::star::uno::RuntimeException ); 2325 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > SAL_CALL getContinuations() 2326 throw( ::com::sun::star::uno::RuntimeException ); 2327 }; 2328 2329 RequestPackageReparation_Impl::RequestPackageReparation_Impl( ::rtl::OUString aName ) 2330 { 2331 ::rtl::OUString temp; 2332 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > temp2; 2333 ::com::sun::star::document::BrokenPackageRequest aBrokenPackageRequest( temp, 2334 temp2, 2335 aName ); 2336 m_aRequest <<= aBrokenPackageRequest; 2337 m_pApprove = new comphelper::OInteractionApprove; 2338 m_pDisapprove = new comphelper::OInteractionDisapprove; 2339 m_lContinuations.realloc( 2 ); 2340 m_lContinuations[0] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pApprove ); 2341 m_lContinuations[1] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pDisapprove ); 2342 } 2343 2344 sal_Bool RequestPackageReparation_Impl::isApproved() 2345 { 2346 return m_pApprove->wasSelected(); 2347 } 2348 2349 ::com::sun::star::uno::Any SAL_CALL RequestPackageReparation_Impl::getRequest() 2350 throw( ::com::sun::star::uno::RuntimeException ) 2351 { 2352 return m_aRequest; 2353 } 2354 2355 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > 2356 SAL_CALL RequestPackageReparation_Impl::getContinuations() 2357 throw( ::com::sun::star::uno::RuntimeException ) 2358 { 2359 return m_lContinuations; 2360 } 2361 2362 RequestPackageReparation::RequestPackageReparation( ::rtl::OUString aName ) 2363 { 2364 pImp = new RequestPackageReparation_Impl( aName ); 2365 pImp->acquire(); 2366 } 2367 2368 RequestPackageReparation::~RequestPackageReparation() 2369 { 2370 pImp->release(); 2371 } 2372 2373 sal_Bool RequestPackageReparation::isApproved() 2374 { 2375 return pImp->isApproved(); 2376 } 2377 2378 com::sun::star::uno::Reference < ::com::sun::star::task::XInteractionRequest > RequestPackageReparation::GetRequest() 2379 { 2380 return com::sun::star::uno::Reference < ::com::sun::star::task::XInteractionRequest >(pImp); 2381 } 2382 2383 //========================================================================= 2384 class NotifyBrokenPackage_Impl : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest > 2385 { 2386 ::com::sun::star::uno::Any m_aRequest; 2387 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > m_lContinuations; 2388 comphelper::OInteractionAbort* m_pAbort; 2389 2390 public: 2391 NotifyBrokenPackage_Impl( ::rtl::OUString aName ); 2392 sal_Bool isAborted(); 2393 virtual ::com::sun::star::uno::Any SAL_CALL getRequest() throw( ::com::sun::star::uno::RuntimeException ); 2394 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > SAL_CALL getContinuations() 2395 throw( ::com::sun::star::uno::RuntimeException ); 2396 }; 2397 2398 NotifyBrokenPackage_Impl::NotifyBrokenPackage_Impl( ::rtl::OUString aName ) 2399 { 2400 ::rtl::OUString temp; 2401 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > temp2; 2402 ::com::sun::star::document::BrokenPackageRequest aBrokenPackageRequest( temp, 2403 temp2, 2404 aName ); 2405 m_aRequest <<= aBrokenPackageRequest; 2406 m_pAbort = new comphelper::OInteractionAbort; 2407 m_lContinuations.realloc( 1 ); 2408 m_lContinuations[0] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pAbort ); 2409 } 2410 2411 sal_Bool NotifyBrokenPackage_Impl::isAborted() 2412 { 2413 return m_pAbort->wasSelected(); 2414 } 2415 2416 ::com::sun::star::uno::Any SAL_CALL NotifyBrokenPackage_Impl::getRequest() 2417 throw( ::com::sun::star::uno::RuntimeException ) 2418 { 2419 return m_aRequest; 2420 } 2421 2422 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > 2423 SAL_CALL NotifyBrokenPackage_Impl::getContinuations() 2424 throw( ::com::sun::star::uno::RuntimeException ) 2425 { 2426 return m_lContinuations; 2427 } 2428 2429 NotifyBrokenPackage::NotifyBrokenPackage( ::rtl::OUString aName ) 2430 { 2431 pImp = new NotifyBrokenPackage_Impl( aName ); 2432 pImp->acquire(); 2433 } 2434 2435 NotifyBrokenPackage::~NotifyBrokenPackage() 2436 { 2437 pImp->release(); 2438 } 2439 2440 sal_Bool NotifyBrokenPackage::isAborted() 2441 { 2442 return pImp->isAborted(); 2443 } 2444 2445 com::sun::star::uno::Reference < ::com::sun::star::task::XInteractionRequest > NotifyBrokenPackage::GetRequest() 2446 { 2447 return com::sun::star::uno::Reference < ::com::sun::star::task::XInteractionRequest >(pImp); 2448 } 2449 2450