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