1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sd.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include "OutlineViewShell.hxx"
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski #include <com/sun/star/presentation/XPresentation2.hpp>
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski #include "app.hrc"
32*b1cdbd2cSJim Jagielski #include <svx/hlnkitem.hxx>
33*b1cdbd2cSJim Jagielski #include <sfx2/docfile.hxx>
34*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
35*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
36*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
37*b1cdbd2cSJim Jagielski #ifndef _ZOOMITEM_HXX //autogen
38*b1cdbd2cSJim Jagielski #include <svx/zoomitem.hxx>
39*b1cdbd2cSJim Jagielski #endif
40*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
41*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx>
42*b1cdbd2cSJim Jagielski #include <editeng/flditem.hxx>
43*b1cdbd2cSJim Jagielski #include <editeng/editstat.hxx>
44*b1cdbd2cSJim Jagielski #include "optsitem.hxx"
45*b1cdbd2cSJim Jagielski #include <unotools/useroptions.hxx>
46*b1cdbd2cSJim Jagielski
47*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
48*b1cdbd2cSJim Jagielski #include "Outliner.hxx"
49*b1cdbd2cSJim Jagielski #include "Window.hxx"
50*b1cdbd2cSJim Jagielski #include "OutlineViewShell.hxx"
51*b1cdbd2cSJim Jagielski #include "fubullet.hxx"
52*b1cdbd2cSJim Jagielski #include "fuolbull.hxx"
53*b1cdbd2cSJim Jagielski #include "FrameView.hxx"
54*b1cdbd2cSJim Jagielski #include "fuzoom.hxx"
55*b1cdbd2cSJim Jagielski #include "fuscale.hxx"
56*b1cdbd2cSJim Jagielski #include "fuchar.hxx"
57*b1cdbd2cSJim Jagielski #include "fuinsfil.hxx"
58*b1cdbd2cSJim Jagielski #include "fuprobjs.hxx"
59*b1cdbd2cSJim Jagielski #include "futhes.hxx"
60*b1cdbd2cSJim Jagielski #include "futempl.hxx"
61*b1cdbd2cSJim Jagielski #include "fusldlg.hxx"
62*b1cdbd2cSJim Jagielski #include "zoomlist.hxx"
63*b1cdbd2cSJim Jagielski #include "fuexpand.hxx"
64*b1cdbd2cSJim Jagielski #include "fusumry.hxx"
65*b1cdbd2cSJim Jagielski #include "fucushow.hxx"
66*b1cdbd2cSJim Jagielski #include "drawdoc.hxx"
67*b1cdbd2cSJim Jagielski #include "sdattr.hxx"
68*b1cdbd2cSJim Jagielski #include "ViewShellBase.hxx"
69*b1cdbd2cSJim Jagielski #include "sdabstdlg.hxx"
70*b1cdbd2cSJim Jagielski #include "framework/FrameworkHelper.hxx"
71*b1cdbd2cSJim Jagielski #include "DrawViewShell.hxx"
72*b1cdbd2cSJim Jagielski
73*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
74*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::presentation;
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski namespace sd {
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski
79*b1cdbd2cSJim Jagielski /************************************************************************/
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski /*************************************************************************
82*b1cdbd2cSJim Jagielski |*
83*b1cdbd2cSJim Jagielski |* SfxRequests fuer temporaere Funktionen
84*b1cdbd2cSJim Jagielski |*
85*b1cdbd2cSJim Jagielski \************************************************************************/
86*b1cdbd2cSJim Jagielski
FuTemporary(SfxRequest & rReq)87*b1cdbd2cSJim Jagielski void OutlineViewShell::FuTemporary(SfxRequest &rReq)
88*b1cdbd2cSJim Jagielski {
89*b1cdbd2cSJim Jagielski DeactivateCurrentFunction();
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
92*b1cdbd2cSJim Jagielski sal_uInt16 nSId = rReq.GetSlot();
93*b1cdbd2cSJim Jagielski
94*b1cdbd2cSJim Jagielski switch( nSId )
95*b1cdbd2cSJim Jagielski {
96*b1cdbd2cSJim Jagielski case SID_ATTR_ZOOM:
97*b1cdbd2cSJim Jagielski {
98*b1cdbd2cSJim Jagielski const SfxItemSet* pArgs = rReq.GetArgs();
99*b1cdbd2cSJim Jagielski
100*b1cdbd2cSJim Jagielski if ( pArgs )
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski SvxZoomType eZT = ( ( const SvxZoomItem& ) pArgs->
103*b1cdbd2cSJim Jagielski Get( SID_ATTR_ZOOM ) ).GetType();
104*b1cdbd2cSJim Jagielski switch( eZT )
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski case SVX_ZOOM_PERCENT:
107*b1cdbd2cSJim Jagielski SetZoom( (long) ( ( const SvxZoomItem& ) pArgs->
108*b1cdbd2cSJim Jagielski Get( SID_ATTR_ZOOM ) ).GetValue() );
109*b1cdbd2cSJim Jagielski Invalidate( SID_ATTR_ZOOM );
110*b1cdbd2cSJim Jagielski Invalidate( SID_ATTR_ZOOMSLIDER );
111*b1cdbd2cSJim Jagielski break;
112*b1cdbd2cSJim Jagielski default:
113*b1cdbd2cSJim Jagielski break;
114*b1cdbd2cSJim Jagielski }
115*b1cdbd2cSJim Jagielski rReq.Done();
116*b1cdbd2cSJim Jagielski }
117*b1cdbd2cSJim Jagielski else
118*b1cdbd2cSJim Jagielski {
119*b1cdbd2cSJim Jagielski // hier den Zoom-Dialog oeffnen
120*b1cdbd2cSJim Jagielski SetCurrentFunction( FuScale::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski Cancel();
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski break;
125*b1cdbd2cSJim Jagielski
126*b1cdbd2cSJim Jagielski case SID_ATTR_ZOOMSLIDER:
127*b1cdbd2cSJim Jagielski {
128*b1cdbd2cSJim Jagielski const SfxItemSet* pArgs = rReq.GetArgs();
129*b1cdbd2cSJim Jagielski
130*b1cdbd2cSJim Jagielski if (pArgs && pArgs->Count () == 1 )
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski SFX_REQUEST_ARG (rReq, pScale, SfxUInt16Item, SID_ATTR_ZOOMSLIDER, sal_False);
133*b1cdbd2cSJim Jagielski if (CHECK_RANGE (5, pScale->GetValue (), 3000))
134*b1cdbd2cSJim Jagielski {
135*b1cdbd2cSJim Jagielski SetZoom (pScale->GetValue ());
136*b1cdbd2cSJim Jagielski
137*b1cdbd2cSJim Jagielski SfxBindings& rBindings = GetViewFrame()->GetBindings();
138*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ATTR_ZOOM );
139*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ZOOM_IN );
140*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ZOOM_OUT );
141*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_ATTR_ZOOMSLIDER );
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski Cancel();
147*b1cdbd2cSJim Jagielski rReq.Done ();
148*b1cdbd2cSJim Jagielski break;
149*b1cdbd2cSJim Jagielski }
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski case SID_ZOOM_OUT:
152*b1cdbd2cSJim Jagielski {
153*b1cdbd2cSJim Jagielski SetCurrentFunction( FuZoom::Create(this, GetActiveWindow(), pOlView, GetDoc(), rReq) );
154*b1cdbd2cSJim Jagielski // Beendet sich selbst, kein Cancel() notwendig!
155*b1cdbd2cSJim Jagielski rReq.Done();
156*b1cdbd2cSJim Jagielski }
157*b1cdbd2cSJim Jagielski break;
158*b1cdbd2cSJim Jagielski
159*b1cdbd2cSJim Jagielski case SID_SIZE_REAL:
160*b1cdbd2cSJim Jagielski {
161*b1cdbd2cSJim Jagielski SetZoom( 100 );
162*b1cdbd2cSJim Jagielski Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
163*b1cdbd2cSJim Jagielski GetActiveWindow()->GetOutputSizePixel()) );
164*b1cdbd2cSJim Jagielski mpZoomList->InsertZoomRect(aVisAreaWin);
165*b1cdbd2cSJim Jagielski Invalidate( SID_ATTR_ZOOM );
166*b1cdbd2cSJim Jagielski Invalidate( SID_ATTR_ZOOMSLIDER );
167*b1cdbd2cSJim Jagielski Cancel();
168*b1cdbd2cSJim Jagielski rReq.Done();
169*b1cdbd2cSJim Jagielski }
170*b1cdbd2cSJim Jagielski break;
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski case SID_ZOOM_IN:
173*b1cdbd2cSJim Jagielski {
174*b1cdbd2cSJim Jagielski SetZoom( Max( (long) ( GetActiveWindow()->GetZoom() / 2 ), (long) GetActiveWindow()->GetMinZoom() ) );
175*b1cdbd2cSJim Jagielski Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
176*b1cdbd2cSJim Jagielski GetActiveWindow()->GetOutputSizePixel()) );
177*b1cdbd2cSJim Jagielski mpZoomList->InsertZoomRect(aVisAreaWin);
178*b1cdbd2cSJim Jagielski Invalidate( SID_ATTR_ZOOM );
179*b1cdbd2cSJim Jagielski Invalidate( SID_ZOOM_OUT);
180*b1cdbd2cSJim Jagielski Invalidate( SID_ZOOM_IN );
181*b1cdbd2cSJim Jagielski Invalidate( SID_ATTR_ZOOMSLIDER );
182*b1cdbd2cSJim Jagielski Cancel();
183*b1cdbd2cSJim Jagielski rReq.Done();
184*b1cdbd2cSJim Jagielski }
185*b1cdbd2cSJim Jagielski break;
186*b1cdbd2cSJim Jagielski
187*b1cdbd2cSJim Jagielski case SID_OUTLINE_COLLAPSE_ALL:
188*b1cdbd2cSJim Jagielski {
189*b1cdbd2cSJim Jagielski pOutlinerView->CollapseAll();
190*b1cdbd2cSJim Jagielski Cancel();
191*b1cdbd2cSJim Jagielski rReq.Done();
192*b1cdbd2cSJim Jagielski }
193*b1cdbd2cSJim Jagielski break;
194*b1cdbd2cSJim Jagielski
195*b1cdbd2cSJim Jagielski case SID_OUTLINE_COLLAPSE:
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski pOutlinerView->Collapse();
198*b1cdbd2cSJim Jagielski Cancel();
199*b1cdbd2cSJim Jagielski rReq.Done();
200*b1cdbd2cSJim Jagielski }
201*b1cdbd2cSJim Jagielski break;
202*b1cdbd2cSJim Jagielski
203*b1cdbd2cSJim Jagielski case SID_OUTLINE_EXPAND_ALL:
204*b1cdbd2cSJim Jagielski {
205*b1cdbd2cSJim Jagielski pOutlinerView->ExpandAll();
206*b1cdbd2cSJim Jagielski Cancel();
207*b1cdbd2cSJim Jagielski rReq.Done();
208*b1cdbd2cSJim Jagielski }
209*b1cdbd2cSJim Jagielski break;
210*b1cdbd2cSJim Jagielski
211*b1cdbd2cSJim Jagielski case SID_OUTLINE_EXPAND:
212*b1cdbd2cSJim Jagielski {
213*b1cdbd2cSJim Jagielski pOutlinerView->Expand();
214*b1cdbd2cSJim Jagielski Cancel();
215*b1cdbd2cSJim Jagielski rReq.Done();
216*b1cdbd2cSJim Jagielski }
217*b1cdbd2cSJim Jagielski break;
218*b1cdbd2cSJim Jagielski
219*b1cdbd2cSJim Jagielski case SID_OUTLINE_FORMAT:
220*b1cdbd2cSJim Jagielski {
221*b1cdbd2cSJim Jagielski ::Outliner* pOutl = pOutlinerView->GetOutliner();
222*b1cdbd2cSJim Jagielski pOutl->SetFlatMode( !pOutl->IsFlatMode() );
223*b1cdbd2cSJim Jagielski Invalidate( SID_COLORVIEW );
224*b1cdbd2cSJim Jagielski Cancel();
225*b1cdbd2cSJim Jagielski rReq.Done();
226*b1cdbd2cSJim Jagielski }
227*b1cdbd2cSJim Jagielski break;
228*b1cdbd2cSJim Jagielski
229*b1cdbd2cSJim Jagielski case SID_SELECTALL:
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski ::Outliner* pOutl = pOlView->GetOutliner();
232*b1cdbd2cSJim Jagielski sal_uLong nParaCount = pOutl->GetParagraphCount();
233*b1cdbd2cSJim Jagielski if (nParaCount > 0)
234*b1cdbd2cSJim Jagielski {
235*b1cdbd2cSJim Jagielski pOutlinerView->SelectRange( 0, (sal_uInt16) nParaCount );
236*b1cdbd2cSJim Jagielski }
237*b1cdbd2cSJim Jagielski Cancel();
238*b1cdbd2cSJim Jagielski }
239*b1cdbd2cSJim Jagielski break;
240*b1cdbd2cSJim Jagielski
241*b1cdbd2cSJim Jagielski case SID_PRESENTATION:
242*b1cdbd2cSJim Jagielski case SID_REHEARSE_TIMINGS:
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski pOlView->PrepareClose();
245*b1cdbd2cSJim Jagielski
246*b1cdbd2cSJim Jagielski Reference< XPresentation2 > xPresentation( GetDoc()->getPresentation() );
247*b1cdbd2cSJim Jagielski if( xPresentation.is() )
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski if( ( SID_REHEARSE_TIMINGS != rReq.GetSlot() ) )
250*b1cdbd2cSJim Jagielski xPresentation->start();
251*b1cdbd2cSJim Jagielski else
252*b1cdbd2cSJim Jagielski xPresentation->rehearseTimings();
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski Cancel();
255*b1cdbd2cSJim Jagielski rReq.Done();
256*b1cdbd2cSJim Jagielski }
257*b1cdbd2cSJim Jagielski break;
258*b1cdbd2cSJim Jagielski
259*b1cdbd2cSJim Jagielski case SID_COLORVIEW:
260*b1cdbd2cSJim Jagielski {
261*b1cdbd2cSJim Jagielski ::Outliner* pOutl = pOutlinerView->GetOutliner();
262*b1cdbd2cSJim Jagielski sal_uLong nCntrl = pOutl->GetControlWord();
263*b1cdbd2cSJim Jagielski
264*b1cdbd2cSJim Jagielski if ( !(nCntrl & EE_CNTRL_NOCOLORS) )
265*b1cdbd2cSJim Jagielski {
266*b1cdbd2cSJim Jagielski // Farbansicht ist eingeschaltet: ausschalten
267*b1cdbd2cSJim Jagielski pOutl->SetControlWord(nCntrl | EE_CNTRL_NOCOLORS);
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski else
270*b1cdbd2cSJim Jagielski {
271*b1cdbd2cSJim Jagielski // Farbansicht ist ausgeschaltet: einschalten
272*b1cdbd2cSJim Jagielski pOutl->SetControlWord(nCntrl & ~EE_CNTRL_NOCOLORS);
273*b1cdbd2cSJim Jagielski }
274*b1cdbd2cSJim Jagielski
275*b1cdbd2cSJim Jagielski InvalidateWindows();
276*b1cdbd2cSJim Jagielski Invalidate( SID_COLORVIEW );
277*b1cdbd2cSJim Jagielski Cancel();
278*b1cdbd2cSJim Jagielski rReq.Done();
279*b1cdbd2cSJim Jagielski }
280*b1cdbd2cSJim Jagielski break;
281*b1cdbd2cSJim Jagielski
282*b1cdbd2cSJim Jagielski case SID_STYLE_EDIT:
283*b1cdbd2cSJim Jagielski case SID_STYLE_UPDATE_BY_EXAMPLE:
284*b1cdbd2cSJim Jagielski {
285*b1cdbd2cSJim Jagielski if( rReq.GetArgs() )
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski SetCurrentFunction( FuTemplate::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
288*b1cdbd2cSJim Jagielski Cancel();
289*b1cdbd2cSJim Jagielski }
290*b1cdbd2cSJim Jagielski
291*b1cdbd2cSJim Jagielski rReq.Ignore ();
292*b1cdbd2cSJim Jagielski }
293*b1cdbd2cSJim Jagielski break;
294*b1cdbd2cSJim Jagielski
295*b1cdbd2cSJim Jagielski case SID_PRESENTATION_DLG:
296*b1cdbd2cSJim Jagielski {
297*b1cdbd2cSJim Jagielski SetCurrentFunction( FuSlideShowDlg::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
298*b1cdbd2cSJim Jagielski Cancel();
299*b1cdbd2cSJim Jagielski }
300*b1cdbd2cSJim Jagielski break;
301*b1cdbd2cSJim Jagielski
302*b1cdbd2cSJim Jagielski case SID_CUSTOMSHOW_DLG:
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski SetCurrentFunction( FuCustomShowDlg::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
305*b1cdbd2cSJim Jagielski Cancel();
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski break;
308*b1cdbd2cSJim Jagielski }
309*b1cdbd2cSJim Jagielski
310*b1cdbd2cSJim Jagielski if(HasCurrentFunction())
311*b1cdbd2cSJim Jagielski GetCurrentFunction()->Activate();
312*b1cdbd2cSJim Jagielski
313*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_COLLAPSE_ALL );
314*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_COLLAPSE );
315*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_EXPAND_ALL );
316*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_EXPAND );
317*b1cdbd2cSJim Jagielski
318*b1cdbd2cSJim Jagielski SfxBindings& rBindings = GetViewFrame()->GetBindings();
319*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_OUTLINE_LEFT );
320*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_OUTLINE_RIGHT );
321*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_OUTLINE_UP );
322*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_OUTLINE_DOWN );
323*b1cdbd2cSJim Jagielski
324*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_FORMAT );
325*b1cdbd2cSJim Jagielski Invalidate( SID_COLORVIEW );
326*b1cdbd2cSJim Jagielski Invalidate(SID_CUT);
327*b1cdbd2cSJim Jagielski Invalidate(SID_COPY);
328*b1cdbd2cSJim Jagielski Invalidate(SID_PASTE);
329*b1cdbd2cSJim Jagielski }
330*b1cdbd2cSJim Jagielski
FuTemporaryModify(SfxRequest & rReq)331*b1cdbd2cSJim Jagielski void OutlineViewShell::FuTemporaryModify(SfxRequest &rReq)
332*b1cdbd2cSJim Jagielski {
333*b1cdbd2cSJim Jagielski sal_uInt16 nSId = rReq.GetSlot();
334*b1cdbd2cSJim Jagielski std::auto_ptr< OutlineViewModelChangeGuard > aGuard;
335*b1cdbd2cSJim Jagielski if (nSId != SID_OUTLINE_BULLET && nSId != FN_SVX_SET_BULLET && nSId != FN_SVX_SET_NUMBER)
336*b1cdbd2cSJim Jagielski {
337*b1cdbd2cSJim Jagielski aGuard.reset( new OutlineViewModelChangeGuard(*pOlView) );
338*b1cdbd2cSJim Jagielski }
339*b1cdbd2cSJim Jagielski DeactivateCurrentFunction();
340*b1cdbd2cSJim Jagielski
341*b1cdbd2cSJim Jagielski OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
342*b1cdbd2cSJim Jagielski //sal_uInt16 nSId = rReq.GetSlot();
343*b1cdbd2cSJim Jagielski
344*b1cdbd2cSJim Jagielski switch( nSId )
345*b1cdbd2cSJim Jagielski {
346*b1cdbd2cSJim Jagielski case SID_HYPERLINK_SETLINK:
347*b1cdbd2cSJim Jagielski {
348*b1cdbd2cSJim Jagielski const SfxItemSet* pReqArgs = rReq.GetArgs();
349*b1cdbd2cSJim Jagielski
350*b1cdbd2cSJim Jagielski if (pReqArgs)
351*b1cdbd2cSJim Jagielski {
352*b1cdbd2cSJim Jagielski SvxHyperlinkItem* pHLItem =
353*b1cdbd2cSJim Jagielski (SvxHyperlinkItem*) &pReqArgs->Get(SID_HYPERLINK_SETLINK);
354*b1cdbd2cSJim Jagielski
355*b1cdbd2cSJim Jagielski SvxFieldItem aURLItem(SvxURLField(pHLItem->GetURL(),
356*b1cdbd2cSJim Jagielski pHLItem->GetName(),
357*b1cdbd2cSJim Jagielski SVXURLFORMAT_REPR), EE_FEATURE_FIELD);
358*b1cdbd2cSJim Jagielski ESelection aSel( pOutlinerView->GetSelection() );
359*b1cdbd2cSJim Jagielski pOutlinerView->InsertField(aURLItem);
360*b1cdbd2cSJim Jagielski if ( aSel.nStartPos <= aSel.nEndPos )
361*b1cdbd2cSJim Jagielski aSel.nEndPos = aSel.nStartPos + 1;
362*b1cdbd2cSJim Jagielski else
363*b1cdbd2cSJim Jagielski aSel.nStartPos = aSel.nEndPos + 1;
364*b1cdbd2cSJim Jagielski pOutlinerView->SetSelection( aSel );
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski
367*b1cdbd2cSJim Jagielski Cancel();
368*b1cdbd2cSJim Jagielski rReq.Ignore ();
369*b1cdbd2cSJim Jagielski }
370*b1cdbd2cSJim Jagielski break;
371*b1cdbd2cSJim Jagielski
372*b1cdbd2cSJim Jagielski case FN_INSERT_SOFT_HYPHEN:
373*b1cdbd2cSJim Jagielski case FN_INSERT_HARDHYPHEN:
374*b1cdbd2cSJim Jagielski case FN_INSERT_HARD_SPACE:
375*b1cdbd2cSJim Jagielski case SID_INSERT_RLM :
376*b1cdbd2cSJim Jagielski case SID_INSERT_LRM :
377*b1cdbd2cSJim Jagielski case SID_INSERT_ZWNBSP :
378*b1cdbd2cSJim Jagielski case SID_INSERT_ZWSP:
379*b1cdbd2cSJim Jagielski case SID_CHARMAP:
380*b1cdbd2cSJim Jagielski {
381*b1cdbd2cSJim Jagielski SetCurrentFunction( FuBullet::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
382*b1cdbd2cSJim Jagielski Cancel();
383*b1cdbd2cSJim Jagielski }
384*b1cdbd2cSJim Jagielski break;
385*b1cdbd2cSJim Jagielski
386*b1cdbd2cSJim Jagielski case SID_OUTLINE_BULLET:
387*b1cdbd2cSJim Jagielski case FN_SVX_SET_BULLET:
388*b1cdbd2cSJim Jagielski case FN_SVX_SET_NUMBER:
389*b1cdbd2cSJim Jagielski {
390*b1cdbd2cSJim Jagielski SetCurrentFunction( FuOutlineBullet::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
391*b1cdbd2cSJim Jagielski Cancel();
392*b1cdbd2cSJim Jagielski }
393*b1cdbd2cSJim Jagielski break;
394*b1cdbd2cSJim Jagielski
395*b1cdbd2cSJim Jagielski case SID_THESAURUS:
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski SetCurrentFunction( FuThesaurus::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
398*b1cdbd2cSJim Jagielski Cancel();
399*b1cdbd2cSJim Jagielski rReq.Ignore ();
400*b1cdbd2cSJim Jagielski }
401*b1cdbd2cSJim Jagielski break;
402*b1cdbd2cSJim Jagielski
403*b1cdbd2cSJim Jagielski case SID_CHAR_DLG_EFFECT:
404*b1cdbd2cSJim Jagielski case SID_CHAR_DLG:
405*b1cdbd2cSJim Jagielski {
406*b1cdbd2cSJim Jagielski SetCurrentFunction( FuChar::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
407*b1cdbd2cSJim Jagielski Cancel();
408*b1cdbd2cSJim Jagielski }
409*b1cdbd2cSJim Jagielski break;
410*b1cdbd2cSJim Jagielski
411*b1cdbd2cSJim Jagielski case SID_INSERTFILE:
412*b1cdbd2cSJim Jagielski {
413*b1cdbd2cSJim Jagielski SetCurrentFunction( FuInsertFile::Create(this, GetActiveWindow(), pOlView, GetDoc(), rReq) );
414*b1cdbd2cSJim Jagielski Cancel();
415*b1cdbd2cSJim Jagielski }
416*b1cdbd2cSJim Jagielski break;
417*b1cdbd2cSJim Jagielski
418*b1cdbd2cSJim Jagielski case SID_PRESENTATIONOBJECT:
419*b1cdbd2cSJim Jagielski {
420*b1cdbd2cSJim Jagielski SetCurrentFunction( FuPresentationObjects::Create(this, GetActiveWindow(), pOlView, GetDoc(), rReq) );
421*b1cdbd2cSJim Jagielski Cancel();
422*b1cdbd2cSJim Jagielski }
423*b1cdbd2cSJim Jagielski break;
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski case SID_SET_DEFAULT:
426*b1cdbd2cSJim Jagielski {
427*b1cdbd2cSJim Jagielski // 1. Selektion merken (kriegt die eselige EditEngine nicht selbst
428*b1cdbd2cSJim Jagielski // auf die Reihe!)
429*b1cdbd2cSJim Jagielski // 2. Update auf False (sonst flackert's noch staerker
430*b1cdbd2cSJim Jagielski // an allen selektierten Absaetzen:
431*b1cdbd2cSJim Jagielski // a. deren Vorlage nochmal setzen, um absatzweite harte Attribute
432*b1cdbd2cSJim Jagielski // zu entfernen
433*b1cdbd2cSJim Jagielski // b. harte Zeichenattribute loeschen
434*b1cdbd2cSJim Jagielski // 3. Update auf True und Selektion wieder setzen
435*b1cdbd2cSJim Jagielski /*
436*b1cdbd2cSJim Jagielski ESelection aEsel= pOutlinerView->GetSelection();
437*b1cdbd2cSJim Jagielski Outliner* pOutl = pOutlinerView->GetOutliner();
438*b1cdbd2cSJim Jagielski pOutl->SetUpdateMode(sal_False);
439*b1cdbd2cSJim Jagielski List* pSelectedParas = pOutlinerView->CreateSelectionList();
440*b1cdbd2cSJim Jagielski Paragraph* pPara = (Paragraph*)pSelectedParas->First();
441*b1cdbd2cSJim Jagielski while (pPara)
442*b1cdbd2cSJim Jagielski {
443*b1cdbd2cSJim Jagielski sal_uLong nParaPos = pOutl->GetAbsPos(pPara);
444*b1cdbd2cSJim Jagielski String aName;
445*b1cdbd2cSJim Jagielski SfxStyleFamily aFamily;
446*b1cdbd2cSJim Jagielski pOutl->GetStyleSheet(nParaPos, aName, aFamily);
447*b1cdbd2cSJim Jagielski pOutl->SetStyleSheet(nParaPos, aName, aFamily);
448*b1cdbd2cSJim Jagielski pOutl->QuickRemoveCharAttribs(nParaPos);
449*b1cdbd2cSJim Jagielski pPara = (Paragraph*)pSelectedParas->Next();
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski delete pSelectedParas;
452*b1cdbd2cSJim Jagielski pOutl->SetUpdateMode(sal_True);
453*b1cdbd2cSJim Jagielski pOutlinerView->SetSelection(aEsel);
454*b1cdbd2cSJim Jagielski */
455*b1cdbd2cSJim Jagielski pOutlinerView->RemoveAttribs(sal_True); // sal_True = auch Absatzattribute
456*b1cdbd2cSJim Jagielski Cancel();
457*b1cdbd2cSJim Jagielski rReq.Done();
458*b1cdbd2cSJim Jagielski }
459*b1cdbd2cSJim Jagielski break;
460*b1cdbd2cSJim Jagielski
461*b1cdbd2cSJim Jagielski case SID_SUMMARY_PAGE:
462*b1cdbd2cSJim Jagielski {
463*b1cdbd2cSJim Jagielski pOlView->SetSelectedPages();
464*b1cdbd2cSJim Jagielski SetCurrentFunction( FuSummaryPage::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
465*b1cdbd2cSJim Jagielski pOlView->GetOutliner()->Clear();
466*b1cdbd2cSJim Jagielski pOlView->FillOutliner();
467*b1cdbd2cSJim Jagielski pOlView->GetActualPage();
468*b1cdbd2cSJim Jagielski Cancel();
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski break;
471*b1cdbd2cSJim Jagielski
472*b1cdbd2cSJim Jagielski case SID_EXPAND_PAGE:
473*b1cdbd2cSJim Jagielski {
474*b1cdbd2cSJim Jagielski pOlView->SetSelectedPages();
475*b1cdbd2cSJim Jagielski SetCurrentFunction( FuExpandPage::Create( this, GetActiveWindow(), pOlView, GetDoc(), rReq ) );
476*b1cdbd2cSJim Jagielski pOlView->GetOutliner()->Clear();
477*b1cdbd2cSJim Jagielski pOlView->FillOutliner();
478*b1cdbd2cSJim Jagielski pOlView->GetActualPage();
479*b1cdbd2cSJim Jagielski Cancel();
480*b1cdbd2cSJim Jagielski }
481*b1cdbd2cSJim Jagielski break;
482*b1cdbd2cSJim Jagielski
483*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_DATE_FIX:
484*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_DATE_VAR:
485*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_TIME_FIX:
486*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_TIME_VAR:
487*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_AUTHOR:
488*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_PAGE:
489*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_PAGES:
490*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_FILE:
491*b1cdbd2cSJim Jagielski {
492*b1cdbd2cSJim Jagielski SvxFieldItem* pFieldItem = 0;
493*b1cdbd2cSJim Jagielski
494*b1cdbd2cSJim Jagielski switch( nSId )
495*b1cdbd2cSJim Jagielski {
496*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_DATE_FIX:
497*b1cdbd2cSJim Jagielski pFieldItem = new SvxFieldItem(
498*b1cdbd2cSJim Jagielski SvxDateField( Date(), SVXDATETYPE_FIX ), EE_FEATURE_FIELD );
499*b1cdbd2cSJim Jagielski break;
500*b1cdbd2cSJim Jagielski
501*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_DATE_VAR:
502*b1cdbd2cSJim Jagielski pFieldItem = new SvxFieldItem( SvxDateField(), EE_FEATURE_FIELD );
503*b1cdbd2cSJim Jagielski break;
504*b1cdbd2cSJim Jagielski
505*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_TIME_FIX:
506*b1cdbd2cSJim Jagielski pFieldItem = new SvxFieldItem(
507*b1cdbd2cSJim Jagielski SvxExtTimeField( Time(), SVXTIMETYPE_FIX ), EE_FEATURE_FIELD );
508*b1cdbd2cSJim Jagielski break;
509*b1cdbd2cSJim Jagielski
510*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_TIME_VAR:
511*b1cdbd2cSJim Jagielski pFieldItem = new SvxFieldItem( SvxExtTimeField(), EE_FEATURE_FIELD );
512*b1cdbd2cSJim Jagielski break;
513*b1cdbd2cSJim Jagielski
514*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_AUTHOR:
515*b1cdbd2cSJim Jagielski {
516*b1cdbd2cSJim Jagielski SvtUserOptions aUserOptions;
517*b1cdbd2cSJim Jagielski pFieldItem = new SvxFieldItem(
518*b1cdbd2cSJim Jagielski SvxAuthorField(
519*b1cdbd2cSJim Jagielski aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID() )
520*b1cdbd2cSJim Jagielski , EE_FEATURE_FIELD );
521*b1cdbd2cSJim Jagielski }
522*b1cdbd2cSJim Jagielski break;
523*b1cdbd2cSJim Jagielski
524*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_PAGE:
525*b1cdbd2cSJim Jagielski pFieldItem = new SvxFieldItem( SvxPageField(), EE_FEATURE_FIELD );
526*b1cdbd2cSJim Jagielski break;
527*b1cdbd2cSJim Jagielski
528*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_PAGES:
529*b1cdbd2cSJim Jagielski pFieldItem = new SvxFieldItem( SvxPagesField(), EE_FEATURE_FIELD );
530*b1cdbd2cSJim Jagielski break;
531*b1cdbd2cSJim Jagielski
532*b1cdbd2cSJim Jagielski case SID_INSERT_FLD_FILE:
533*b1cdbd2cSJim Jagielski {
534*b1cdbd2cSJim Jagielski String aName;
535*b1cdbd2cSJim Jagielski if( GetDocSh()->HasName() )
536*b1cdbd2cSJim Jagielski aName = GetDocSh()->GetMedium()->GetName();
537*b1cdbd2cSJim Jagielski //else
538*b1cdbd2cSJim Jagielski // aName = GetDocSh()->GetName();
539*b1cdbd2cSJim Jagielski pFieldItem = new SvxFieldItem( SvxExtFileField( aName ), EE_FEATURE_FIELD );
540*b1cdbd2cSJim Jagielski }
541*b1cdbd2cSJim Jagielski break;
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski
544*b1cdbd2cSJim Jagielski const SvxFieldItem* pOldFldItem = pOutlinerView->GetFieldAtSelection();
545*b1cdbd2cSJim Jagielski
546*b1cdbd2cSJim Jagielski if( pOldFldItem && ( pOldFldItem->GetField()->ISA( SvxURLField ) ||
547*b1cdbd2cSJim Jagielski pOldFldItem->GetField()->ISA( SvxDateField ) ||
548*b1cdbd2cSJim Jagielski pOldFldItem->GetField()->ISA( SvxTimeField ) ||
549*b1cdbd2cSJim Jagielski pOldFldItem->GetField()->ISA( SvxExtTimeField ) ||
550*b1cdbd2cSJim Jagielski pOldFldItem->GetField()->ISA( SvxExtFileField ) ||
551*b1cdbd2cSJim Jagielski pOldFldItem->GetField()->ISA( SvxAuthorField ) ||
552*b1cdbd2cSJim Jagielski pOldFldItem->GetField()->ISA( SvxPageField ) ||
553*b1cdbd2cSJim Jagielski pOldFldItem->GetField()->ISA( SvxPagesField )) )
554*b1cdbd2cSJim Jagielski {
555*b1cdbd2cSJim Jagielski // Feld selektieren, so dass es beim Insert geloescht wird
556*b1cdbd2cSJim Jagielski ESelection aSel = pOutlinerView->GetSelection();
557*b1cdbd2cSJim Jagielski if( aSel.nStartPos == aSel.nEndPos )
558*b1cdbd2cSJim Jagielski aSel.nEndPos++;
559*b1cdbd2cSJim Jagielski pOutlinerView->SetSelection( aSel );
560*b1cdbd2cSJim Jagielski }
561*b1cdbd2cSJim Jagielski
562*b1cdbd2cSJim Jagielski if( pFieldItem )
563*b1cdbd2cSJim Jagielski pOutlinerView->InsertField( *pFieldItem );
564*b1cdbd2cSJim Jagielski
565*b1cdbd2cSJim Jagielski delete pFieldItem;
566*b1cdbd2cSJim Jagielski
567*b1cdbd2cSJim Jagielski Cancel();
568*b1cdbd2cSJim Jagielski rReq.Ignore ();
569*b1cdbd2cSJim Jagielski }
570*b1cdbd2cSJim Jagielski break;
571*b1cdbd2cSJim Jagielski
572*b1cdbd2cSJim Jagielski case SID_MODIFY_FIELD:
573*b1cdbd2cSJim Jagielski {
574*b1cdbd2cSJim Jagielski const SvxFieldItem* pFldItem = pOutlinerView->GetFieldAtSelection();
575*b1cdbd2cSJim Jagielski
576*b1cdbd2cSJim Jagielski if( pFldItem && (pFldItem->GetField()->ISA( SvxDateField ) ||
577*b1cdbd2cSJim Jagielski pFldItem->GetField()->ISA( SvxAuthorField ) ||
578*b1cdbd2cSJim Jagielski pFldItem->GetField()->ISA( SvxExtFileField ) ||
579*b1cdbd2cSJim Jagielski pFldItem->GetField()->ISA( SvxExtTimeField ) ) )
580*b1cdbd2cSJim Jagielski {
581*b1cdbd2cSJim Jagielski // Dialog...
582*b1cdbd2cSJim Jagielski SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
583*b1cdbd2cSJim Jagielski AbstractSdModifyFieldDlg* pDlg = pFact ? pFact->CreateSdModifyFieldDlg(GetActiveWindow(), pFldItem->GetField(), pOutlinerView->GetAttribs() ) : 0;
584*b1cdbd2cSJim Jagielski if( pDlg && (pDlg->Execute() == RET_OK) )
585*b1cdbd2cSJim Jagielski {
586*b1cdbd2cSJim Jagielski SvxFieldData* pField = pDlg->GetField();
587*b1cdbd2cSJim Jagielski if( pField )
588*b1cdbd2cSJim Jagielski {
589*b1cdbd2cSJim Jagielski SvxFieldItem aFieldItem( *pField, EE_FEATURE_FIELD );
590*b1cdbd2cSJim Jagielski //pOLV->DeleteSelected(); <-- fehlt leider !
591*b1cdbd2cSJim Jagielski // Feld selektieren, so dass es beim Insert geloescht wird
592*b1cdbd2cSJim Jagielski ESelection aSel = pOutlinerView->GetSelection();
593*b1cdbd2cSJim Jagielski sal_Bool bSel = sal_True;
594*b1cdbd2cSJim Jagielski if( aSel.nStartPos == aSel.nEndPos )
595*b1cdbd2cSJim Jagielski {
596*b1cdbd2cSJim Jagielski bSel = sal_False;
597*b1cdbd2cSJim Jagielski aSel.nEndPos++;
598*b1cdbd2cSJim Jagielski }
599*b1cdbd2cSJim Jagielski pOutlinerView->SetSelection( aSel );
600*b1cdbd2cSJim Jagielski
601*b1cdbd2cSJim Jagielski pOutlinerView->InsertField( aFieldItem );
602*b1cdbd2cSJim Jagielski
603*b1cdbd2cSJim Jagielski // Selektion wird wieder in den Ursprungszustand gebracht
604*b1cdbd2cSJim Jagielski if( !bSel )
605*b1cdbd2cSJim Jagielski aSel.nEndPos--;
606*b1cdbd2cSJim Jagielski pOutlinerView->SetSelection( aSel );
607*b1cdbd2cSJim Jagielski
608*b1cdbd2cSJim Jagielski delete pField;
609*b1cdbd2cSJim Jagielski }
610*b1cdbd2cSJim Jagielski
611*b1cdbd2cSJim Jagielski SfxItemSet aSet( pDlg->GetItemSet() );
612*b1cdbd2cSJim Jagielski if( aSet.Count() )
613*b1cdbd2cSJim Jagielski {
614*b1cdbd2cSJim Jagielski pOutlinerView->SetAttribs( aSet );
615*b1cdbd2cSJim Jagielski
616*b1cdbd2cSJim Jagielski ::Outliner* pOutliner = pOutlinerView->GetOutliner();
617*b1cdbd2cSJim Jagielski if( pOutliner )
618*b1cdbd2cSJim Jagielski pOutliner->UpdateFields();
619*b1cdbd2cSJim Jagielski }
620*b1cdbd2cSJim Jagielski }
621*b1cdbd2cSJim Jagielski delete pDlg;
622*b1cdbd2cSJim Jagielski }
623*b1cdbd2cSJim Jagielski
624*b1cdbd2cSJim Jagielski Cancel();
625*b1cdbd2cSJim Jagielski rReq.Ignore ();
626*b1cdbd2cSJim Jagielski }
627*b1cdbd2cSJim Jagielski break;
628*b1cdbd2cSJim Jagielski }
629*b1cdbd2cSJim Jagielski
630*b1cdbd2cSJim Jagielski if(HasCurrentFunction())
631*b1cdbd2cSJim Jagielski GetCurrentFunction()->Activate();
632*b1cdbd2cSJim Jagielski
633*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_COLLAPSE_ALL );
634*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_COLLAPSE );
635*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_EXPAND_ALL );
636*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_EXPAND );
637*b1cdbd2cSJim Jagielski
638*b1cdbd2cSJim Jagielski SfxBindings& rBindings = GetViewFrame()->GetBindings();
639*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_OUTLINE_LEFT );
640*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_OUTLINE_RIGHT );
641*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_OUTLINE_UP );
642*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_OUTLINE_DOWN );
643*b1cdbd2cSJim Jagielski
644*b1cdbd2cSJim Jagielski Invalidate( SID_OUTLINE_FORMAT );
645*b1cdbd2cSJim Jagielski Invalidate( SID_COLORVIEW );
646*b1cdbd2cSJim Jagielski Invalidate(SID_CUT);
647*b1cdbd2cSJim Jagielski Invalidate(SID_COPY);
648*b1cdbd2cSJim Jagielski Invalidate(SID_PASTE);
649*b1cdbd2cSJim Jagielski }
650*b1cdbd2cSJim Jagielski
651*b1cdbd2cSJim Jagielski
652*b1cdbd2cSJim Jagielski } // end of namespace sd
653