Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include "DrawViewShell.hxx"
21 : #include "ViewShellImplementation.hxx"
22 : #include <vcl/waitobj.hxx>
23 : #include <svx/svdograf.hxx>
24 : #include <svx/svxids.hrc>
25 : #include <svx/svdpagv.hxx>
26 : #include <svx/svdundo.hxx>
27 : #include <sfx2/zoomitem.hxx>
28 : #include <editeng/editdata.hxx>
29 : #include <basic/sberrors.hxx>
30 : #include <vcl/msgbox.hxx>
31 : #include <sfx2/request.hxx>
32 : #include <sfx2/dispatch.hxx>
33 : #include <svx/xfillit0.hxx>
34 : #include <svx/xflclit.hxx>
35 : #include <svl/aeitem.hxx>
36 : #include <editeng/eeitem.hxx>
37 : #include <basic/sbstar.hxx>
38 : #include <editeng/flditem.hxx>
39 : #include <svx/xlineit0.hxx>
40 : #include <svx/graphichelper.hxx>
41 : #include <svx/compressgraphicdialog.hxx>
42 : #include <svx/extedit.hxx>
43 : #include <svx/svdoutl.hxx>
44 : #include <svx/xlnwtit.hxx>
45 : #include <svx/svdoattr.hxx>
46 : #include <svx/xlnstwit.hxx>
47 : #include <svx/sdtmfitm.hxx>
48 : #include <svx/sdtagitm.hxx>
49 : #include <svx/xlnedwit.hxx>
50 : #include <svx/fontworkbar.hxx>
51 :
52 : #include <svx/svxdlg.hxx>
53 : #include <svx/dialogs.hrc>
54 :
55 : #include <sfx2/viewfrm.hxx>
56 : #include "sdgrffilter.hxx"
57 :
58 : #include "app.hrc"
59 : #include "glob.hrc"
60 : #include "helpids.h"
61 : #include "sdattr.hxx"
62 : #include "drawview.hxx"
63 : #include "Window.hxx"
64 : #include "drawdoc.hxx"
65 : #include "DrawDocShell.hxx"
66 : #include "sdpage.hxx"
67 : #include "fuscale.hxx"
68 : #include "sdresid.hxx"
69 : #include "GraphicViewShell.hxx"
70 : #include "unmodpg.hxx"
71 : #include "slideshow.hxx"
72 : #include "fuvect.hxx"
73 : #include "stlpool.hxx"
74 :
75 : #include "optsitem.hxx"
76 : #include "sdabstdlg.hxx"
77 : #include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
78 : #include <com/sun/star/drawing/XDrawPages.hpp>
79 :
80 : #include <strings.hrc>
81 :
82 : using namespace ::com::sun::star;
83 : using namespace ::com::sun::star::uno;
84 :
85 : namespace sd {
86 :
87 0 : class SdExternalToolEdit : public ExternalToolEdit
88 : {
89 : FmFormView* m_pView;
90 : SdrObject* m_pObj;
91 :
92 : public:
93 0 : SdExternalToolEdit ( FmFormView* pView, SdrObject* pObj ) :
94 : m_pView (pView),
95 0 : m_pObj (pObj)
96 0 : {}
97 :
98 0 : virtual void Update( Graphic& aGraphic )
99 : {
100 0 : SdrPageView* pPageView = m_pView->GetSdrPageView();
101 0 : if( pPageView )
102 : {
103 0 : SdrGrafObj* pNewObj = (SdrGrafObj*) m_pObj->Clone();
104 0 : String aStr( m_pView->GetDescriptionOfMarkedObjects() );
105 0 : aStr.Append( sal_Unicode(' ') );
106 0 : aStr.Append( String( "External Edit" ) );
107 0 : m_pView->BegUndo( aStr );
108 0 : pNewObj->SetGraphicObject( aGraphic );
109 0 : m_pView->ReplaceObjectAtView( m_pObj, *pPageView, pNewObj );
110 0 : m_pView->EndUndo();
111 : }
112 0 : }
113 : };
114 :
115 : /*************************************************************************
116 : |*
117 : |* SfxRequests fuer temporaere Funktionen
118 : |*
119 : \************************************************************************/
120 :
121 0 : void DrawViewShell::FuTemporary(SfxRequest& rReq)
122 : {
123 : // Waehrend einer Native-Diashow wird nichts ausgefuehrt!
124 0 : if(SlideShow::IsRunning( GetViewShellBase() ) && (rReq.GetSlot() != SID_NAVIGATOR))
125 0 : return;
126 :
127 : DBG_ASSERT( mpDrawView, "sd::DrawViewShell::FuTemporary(), no draw view!" );
128 0 : if( !mpDrawView )
129 0 : return;
130 :
131 0 : CheckLineTo (rReq);
132 :
133 0 : DeactivateCurrentFunction();
134 :
135 0 : sal_uInt16 nSId = rReq.GetSlot();
136 :
137 : // Slot wird gemapped (ToolboxImages/-Slots)
138 0 : MapSlot( nSId );
139 :
140 0 : switch ( nSId )
141 : {
142 : case SID_OUTLINE_TEXT_AUTOFIT:
143 : {
144 0 : ::svl::IUndoManager* pUndoManager = GetDocSh()->GetUndoManager();
145 0 : SdrObject* pObj = NULL;
146 0 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
147 0 : if( rMarkList.GetMarkCount() == 1 )
148 : {
149 0 : pUndoManager->EnterListAction( String(), String() );
150 0 : mpDrawView->BegUndo();
151 :
152 0 : pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
153 0 : bool bSet = ((const SdrTextFitToSizeTypeItem*)pObj->GetMergedItemSet().GetItem(SDRATTR_TEXT_FITTOSIZE))->GetValue() != SDRTEXTFIT_NONE;
154 :
155 0 : mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoAttrObject(*pObj));
156 :
157 0 : pObj->SetMergedItem(SdrTextFitToSizeTypeItem(bSet ? SDRTEXTFIT_NONE : SDRTEXTFIT_AUTOFIT));
158 :
159 0 : mpDrawView->EndUndo();
160 0 : pUndoManager->LeaveListAction();
161 : }
162 0 : Cancel();
163 0 : rReq.Done();
164 : }
165 0 : break;
166 :
167 : // Flaechen und Linien-Attribute:
168 : // Sollten (wie StateMethode) eine eigene
169 : // Execute-Methode besitzen
170 : case SID_ATTR_FILL_STYLE:
171 : case SID_ATTR_FILL_COLOR:
172 : case SID_ATTR_FILL_GRADIENT:
173 : case SID_ATTR_FILL_HATCH:
174 : case SID_ATTR_FILL_BITMAP:
175 : case SID_ATTR_FILL_SHADOW:
176 :
177 : case SID_ATTR_LINE_STYLE:
178 : case SID_ATTR_LINE_DASH:
179 : case SID_ATTR_LINE_WIDTH:
180 : case SID_ATTR_LINE_COLOR:
181 : case SID_ATTR_LINEEND_STYLE:
182 :
183 : case SID_ATTR_TEXT_FITTOSIZE:
184 : {
185 0 : if( rReq.GetArgs() )
186 : {
187 0 : sal_Bool bMergeUndo = sal_False;
188 0 : ::svl::IUndoManager* pUndoManager = GetDocSh()->GetUndoManager();
189 :
190 : // Anpassungen Start/EndWidth
191 0 : if(nSId == SID_ATTR_LINE_WIDTH)
192 : {
193 0 : SdrObject* pObj = NULL;
194 0 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
195 0 : sal_uLong nCount = rMarkList.GetMarkCount();
196 :
197 0 : sal_Int32 nNewLineWidth = ((const XLineWidthItem&)rReq.GetArgs()->Get(XATTR_LINEWIDTH)).GetValue();
198 :
199 0 : for (sal_uLong i=0; i<nCount; i++)
200 : {
201 0 : SfxItemSet aAttr(GetDoc()->GetPool());
202 0 : pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
203 0 : aAttr.Put(pObj->GetMergedItemSet());
204 :
205 0 : sal_Int32 nActLineWidth = ((const XLineWidthItem&)aAttr.Get(XATTR_LINEWIDTH)).GetValue();
206 :
207 0 : if(nActLineWidth != nNewLineWidth)
208 : {
209 0 : sal_Bool bSetItemSet(sal_False);
210 :
211 : // do this for SFX_ITEM_DEFAULT and for SFX_ITEM_SET
212 0 : if(SFX_ITEM_DONTCARE != aAttr.GetItemState(XATTR_LINESTARTWIDTH))
213 : {
214 0 : sal_Int32 nValAct = ((const XLineStartWidthItem&)aAttr.Get(XATTR_LINESTARTWIDTH)).GetValue();
215 0 : sal_Int32 nValNew = nValAct + (((nNewLineWidth - nActLineWidth) * 15) / 10);
216 0 : if(nValNew < 0)
217 0 : nValNew = 0;
218 0 : bSetItemSet = sal_True;
219 0 : aAttr.Put(XLineStartWidthItem(nValNew));
220 : }
221 :
222 : // do this for SFX_ITEM_DEFAULT and for SFX_ITEM_SET
223 0 : if(SFX_ITEM_DONTCARE != aAttr.GetItemState(XATTR_LINEENDWIDTH))
224 : {
225 0 : sal_Int32 nValAct = ((const XLineEndWidthItem&)aAttr.Get(XATTR_LINEENDWIDTH)).GetValue();
226 0 : sal_Int32 nValNew = nValAct + (((nNewLineWidth - nActLineWidth) * 15) / 10);
227 0 : if(nValNew < 0)
228 0 : nValNew = 0;
229 0 : bSetItemSet = sal_True;
230 0 : aAttr.Put(XLineEndWidthItem(nValNew));
231 : }
232 :
233 0 : if(bSetItemSet)
234 0 : pObj->SetMergedItemSet(aAttr);
235 : }
236 0 : }
237 : }
238 :
239 0 : if (nSId == SID_ATTR_FILL_SHADOW)
240 : {
241 : // Ggf. werden transparente Objekte wei?gefuellt
242 0 : SdrObject* pObj = NULL;
243 0 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
244 0 : sal_uLong nCount = rMarkList.GetMarkCount();
245 :
246 0 : const bool bUndo = mpDrawView->IsUndoEnabled();
247 :
248 0 : for (sal_uLong i=0; i<nCount; i++)
249 : {
250 0 : SfxItemSet aAttr(GetDoc()->GetPool());
251 0 : pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
252 :
253 : // #i25616#
254 0 : if(!pObj->ISA(SdrGrafObj))
255 : {
256 0 : aAttr.Put(pObj->GetMergedItemSet());
257 :
258 : const XFillStyleItem& rFillStyle =
259 0 : (const XFillStyleItem&) aAttr.Get(XATTR_FILLSTYLE);
260 :
261 0 : if (rFillStyle.GetValue() == XFILL_NONE)
262 : {
263 0 : if( bUndo )
264 : {
265 : // Vorlage hat keine Fuellung,
266 : // daher hart attributieren: Fuellung setzen
267 0 : if (!bMergeUndo)
268 : {
269 0 : bMergeUndo = sal_True;
270 0 : pUndoManager->EnterListAction( String(), String() );
271 0 : mpDrawView->BegUndo();
272 : }
273 :
274 0 : mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoAttrObject(*pObj));
275 : }
276 :
277 0 : aAttr.Put(XFillStyleItem(XFILL_SOLID));
278 0 : aAttr.Put(XFillColorItem(String(), COL_WHITE));
279 :
280 0 : pObj->SetMergedItemSet(aAttr);
281 : }
282 : }
283 0 : }
284 :
285 0 : if (bMergeUndo)
286 : {
287 0 : mpDrawView->EndUndo();
288 : }
289 : }
290 :
291 0 : mpDrawView->SetAttributes(*rReq.GetArgs());
292 :
293 0 : if (bMergeUndo)
294 : {
295 0 : pUndoManager->LeaveListAction();
296 : }
297 :
298 0 : rReq.Done();
299 : }
300 : else
301 : {
302 0 : switch( rReq.GetSlot() )
303 : {
304 : case SID_ATTR_FILL_SHADOW:
305 : case SID_ATTR_FILL_STYLE:
306 : case SID_ATTR_FILL_COLOR:
307 : case SID_ATTR_FILL_GRADIENT:
308 : case SID_ATTR_FILL_HATCH:
309 : case SID_ATTR_FILL_BITMAP:
310 0 : GetViewFrame()->GetDispatcher()->Execute( SID_ATTRIBUTES_AREA, SFX_CALLMODE_ASYNCHRON );
311 0 : break;
312 : case SID_ATTR_LINE_STYLE:
313 : case SID_ATTR_LINE_DASH:
314 : case SID_ATTR_LINE_WIDTH:
315 : case SID_ATTR_LINE_COLOR:
316 0 : GetViewFrame()->GetDispatcher()->Execute( SID_ATTRIBUTES_LINE, SFX_CALLMODE_ASYNCHRON );
317 0 : break;
318 : case SID_ATTR_TEXT_FITTOSIZE:
319 0 : GetViewFrame()->GetDispatcher()->Execute( SID_TEXTATTR_DLG, SFX_CALLMODE_ASYNCHRON );
320 0 : break;
321 : }
322 : }
323 0 : Cancel();
324 : }
325 0 : break;
326 :
327 : case SID_HYPHENATION:
328 : {
329 : // const SfxPoolItem* pItem = rReq.GetArg( SID_HYPHENATION );
330 : // ^-- Soll so nicht benutzt werden (Defaults sind falsch) !
331 0 : SFX_REQUEST_ARG( rReq, pItem, SfxBoolItem, SID_HYPHENATION, sal_False);
332 :
333 0 : if( pItem )
334 : {
335 0 : SfxItemSet aSet( GetPool(), EE_PARA_HYPHENATE, EE_PARA_HYPHENATE );
336 0 : sal_Bool bValue = ( (const SfxBoolItem*) pItem)->GetValue();
337 0 : aSet.Put( SfxBoolItem( EE_PARA_HYPHENATE, bValue ) );
338 0 : mpDrawView->SetAttributes( aSet );
339 : }
340 : else // nur zum Test
341 : {
342 : OSL_FAIL(" Kein Wert fuer Silbentrennung!");
343 0 : SfxItemSet aSet( GetPool(), EE_PARA_HYPHENATE, EE_PARA_HYPHENATE );
344 0 : sal_Bool bValue = sal_True;
345 0 : aSet.Put( SfxBoolItem( EE_PARA_HYPHENATE, bValue ) );
346 0 : mpDrawView->SetAttributes( aSet );
347 : }
348 0 : rReq.Done();
349 0 : Cancel();
350 : }
351 0 : break;
352 :
353 : case SID_INSERTPAGE:
354 : case SID_INSERTPAGE_QUICK:
355 : case SID_DUPLICATE_PAGE:
356 : {
357 0 : SdPage* pNewPage = CreateOrDuplicatePage (rReq, mePageKind, GetActualPage());
358 0 : Cancel();
359 0 : if(HasCurrentFunction(SID_BEZIER_EDIT) )
360 0 : GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
361 0 : if (pNewPage != NULL)
362 0 : SwitchPage((pNewPage->GetPageNum()-1)/2);
363 0 : rReq.Done ();
364 : }
365 0 : break;
366 :
367 : case SID_INSERT_MASTER_PAGE:
368 : {
369 : // Use the API to create a new page.
370 : Reference<drawing::XMasterPagesSupplier> xMasterPagesSupplier (
371 0 : GetDoc()->getUnoModel(), UNO_QUERY);
372 0 : if (xMasterPagesSupplier.is())
373 : {
374 : Reference<drawing::XDrawPages> xMasterPages (
375 0 : xMasterPagesSupplier->getMasterPages());
376 0 : if (xMasterPages.is())
377 : {
378 0 : sal_uInt16 nIndex = GetCurPageId();
379 0 : xMasterPages->insertNewByIndex (nIndex);
380 :
381 : // Create shapes for the default layout.
382 : SdPage* pMasterPage = GetDoc()->GetMasterSdPage(
383 0 : nIndex, PK_STANDARD);
384 0 : pMasterPage->CreateTitleAndLayout (sal_True,sal_True);
385 0 : }
386 : }
387 :
388 0 : Cancel();
389 0 : if(HasCurrentFunction(SID_BEZIER_EDIT))
390 : GetViewFrame()->GetDispatcher()->Execute(
391 0 : SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
392 0 : rReq.Done ();
393 : }
394 0 : break;
395 :
396 : case SID_MODIFYPAGE:
397 : {
398 0 : if (mePageKind==PK_STANDARD || mePageKind==PK_NOTES ||
399 : (mePageKind==PK_HANDOUT && meEditMode==EM_MASTERPAGE) )
400 : {
401 0 : if ( mpDrawView->IsTextEdit() )
402 : {
403 0 : mpDrawView->SdrEndTextEdit();
404 : }
405 0 : sal_uInt16 nPage = maTabControl.GetCurPageId() - 1;
406 0 : mpActualPage = GetDoc()->GetSdPage(nPage, mePageKind);
407 : ::sd::ViewShell::mpImpl->ProcessModifyPageSlot (
408 : rReq,
409 : mpActualPage,
410 0 : mePageKind);
411 : }
412 :
413 0 : Cancel();
414 0 : rReq.Done ();
415 : }
416 0 : break;
417 :
418 : case SID_ASSIGN_LAYOUT:
419 : {
420 0 : if (mePageKind==PK_STANDARD || mePageKind==PK_NOTES || (mePageKind==PK_HANDOUT && meEditMode==EM_MASTERPAGE))
421 : {
422 0 : if ( mpDrawView->IsTextEdit() )
423 0 : mpDrawView->SdrEndTextEdit();
424 :
425 0 : ::sd::ViewShell::mpImpl->AssignLayout(rReq, mePageKind);
426 : }
427 0 : Cancel();
428 0 : rReq.Done ();
429 : }
430 0 : break;
431 :
432 : case SID_RENAMEPAGE:
433 : case SID_RENAME_MASTER_PAGE:
434 : {
435 0 : if (mePageKind==PK_STANDARD || mePageKind==PK_NOTES )
436 : {
437 0 : if ( mpDrawView->IsTextEdit() )
438 : {
439 0 : mpDrawView->SdrEndTextEdit();
440 : }
441 :
442 0 : sal_uInt16 nPageId = maTabControl.GetCurPageId();
443 0 : SdPage* pCurrentPage = ( GetEditMode() == EM_PAGE )
444 0 : ? GetDoc()->GetSdPage( nPageId - 1, GetPageKind() )
445 0 : : GetDoc()->GetMasterSdPage( nPageId - 1, GetPageKind() );
446 :
447 0 : String aTitle( SdResId( STR_TITLE_RENAMESLIDE ) );
448 0 : String aDescr( SdResId( STR_DESC_RENAMESLIDE ) );
449 0 : String aPageName = pCurrentPage->GetName();
450 :
451 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
452 : DBG_ASSERT(pFact, "Dialogdiet fail!");
453 0 : AbstractSvxNameDialog* aNameDlg = pFact->CreateSvxNameDialog( GetActiveWindow(), aPageName, aDescr );
454 : DBG_ASSERT(aNameDlg, "Dialogdiet fail!");
455 0 : aNameDlg->SetText( aTitle );
456 0 : aNameDlg->SetCheckNameHdl( LINK( this, DrawViewShell, RenameSlideHdl ), true );
457 0 : aNameDlg->SetEditHelpId( HID_SD_NAMEDIALOG_PAGE );
458 :
459 0 : if( aNameDlg->Execute() == RET_OK )
460 : {
461 0 : String aNewName;
462 0 : aNameDlg->GetName( aNewName );
463 0 : if( ! aNewName.Equals( aPageName ) )
464 : {
465 : #ifdef DBG_UTIL
466 : bool bResult =
467 : #endif
468 0 : RenameSlide( nPageId, aNewName );
469 : DBG_ASSERT( bResult, "Couldn't rename slide" );
470 0 : }
471 : }
472 0 : delete aNameDlg;
473 : }
474 :
475 0 : Cancel();
476 0 : rReq.Ignore ();
477 : }
478 0 : break;
479 :
480 : case SID_RENAMEPAGE_QUICK:
481 : {
482 0 : if (mePageKind==PK_STANDARD || mePageKind==PK_NOTES )
483 : {
484 0 : if ( mpDrawView->IsTextEdit() )
485 : {
486 0 : mpDrawView->SdrEndTextEdit();
487 : }
488 :
489 0 : maTabControl.StartEditMode( maTabControl.GetCurPageId() );
490 : }
491 :
492 0 : Cancel();
493 0 : rReq.Ignore ();
494 : }
495 0 : break;
496 :
497 : case SID_PAGESIZE : // entweder dieses (kein menueeintrag o. ae. !!)
498 : {
499 0 : const SfxItemSet *pArgs = rReq.GetArgs ();
500 :
501 0 : if (pArgs)
502 0 : if (pArgs->Count () == 3)
503 : {
504 0 : SFX_REQUEST_ARG (rReq, pWidth, SfxUInt32Item, ID_VAL_PAGEWIDTH, sal_False);
505 0 : SFX_REQUEST_ARG (rReq, pHeight, SfxUInt32Item, ID_VAL_PAGEHEIGHT, sal_False);
506 0 : SFX_REQUEST_ARG (rReq, pScaleAll, SfxBoolItem, ID_VAL_SCALEOBJECTS, sal_False);
507 :
508 0 : Size aSize (pWidth->GetValue (), pHeight->GetValue ());
509 :
510 0 : SetupPage (aSize, 0, 0, 0, 0, sal_True, sal_False, pScaleAll->GetValue ());
511 0 : rReq.Ignore ();
512 : break;
513 : }
514 : #ifndef DISABLE_SCRIPTING
515 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
516 : #endif
517 0 : rReq.Ignore ();
518 0 : break;
519 : }
520 :
521 : case SID_PAGEMARGIN : // oder dieses (kein menueeintrag o. ae. !!)
522 : {
523 0 : const SfxItemSet *pArgs = rReq.GetArgs ();
524 :
525 0 : if (pArgs)
526 0 : if (pArgs->Count () == 5)
527 : {
528 0 : SFX_REQUEST_ARG (rReq, pLeft, SfxUInt32Item, ID_VAL_PAGELEFT, sal_False);
529 0 : SFX_REQUEST_ARG (rReq, pRight, SfxUInt32Item, ID_VAL_PAGERIGHT, sal_False);
530 0 : SFX_REQUEST_ARG (rReq, pUpper, SfxUInt32Item, ID_VAL_PAGETOP, sal_False);
531 0 : SFX_REQUEST_ARG (rReq, pLower, SfxUInt32Item, ID_VAL_PAGEBOTTOM, sal_False);
532 0 : SFX_REQUEST_ARG (rReq, pScaleAll, SfxBoolItem, ID_VAL_SCALEOBJECTS, sal_False);
533 :
534 0 : Size aEmptySize (0, 0);
535 :
536 0 : SetupPage (aEmptySize, pLeft->GetValue (), pRight->GetValue (),
537 0 : pUpper->GetValue (), pLower->GetValue (),
538 0 : sal_False, sal_True, pScaleAll->GetValue ());
539 0 : rReq.Ignore ();
540 : break;
541 : }
542 : #ifndef DISABLE_SCRIPTING
543 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
544 : #endif
545 0 : rReq.Ignore ();
546 0 : break;
547 : }
548 :
549 : case SID_ATTR_ZOOMSLIDER:
550 : {
551 0 : const SfxItemSet* pArgs = rReq.GetArgs();
552 :
553 0 : if (pArgs && pArgs->Count () == 1 )
554 : {
555 0 : SFX_REQUEST_ARG (rReq, pScale, SfxUInt16Item, SID_ATTR_ZOOMSLIDER, sal_False);
556 0 : if (CHECK_RANGE (5, pScale->GetValue (), 3000))
557 : {
558 0 : SetZoom (pScale->GetValue ());
559 :
560 0 : SfxBindings& rBindings = GetViewFrame()->GetBindings();
561 0 : rBindings.Invalidate( SID_ATTR_ZOOM );
562 0 : rBindings.Invalidate( SID_ZOOM_IN );
563 0 : rBindings.Invalidate( SID_ZOOM_OUT );
564 0 : rBindings.Invalidate( SID_ATTR_ZOOMSLIDER );
565 :
566 : }
567 : }
568 :
569 0 : Cancel();
570 0 : rReq.Done ();
571 0 : break;
572 : }
573 : case SID_ZOOMING : // kein Menueintrag, sondern aus dem Zoomdialog generiert
574 : {
575 0 : const SfxItemSet* pArgs = rReq.GetArgs();
576 :
577 0 : if (pArgs)
578 0 : if (pArgs->Count () == 1)
579 : {
580 0 : SFX_REQUEST_ARG (rReq, pScale, SfxUInt32Item, ID_VAL_ZOOM, sal_False);
581 0 : if (CHECK_RANGE (10, pScale->GetValue (), 1000))
582 : {
583 0 : SetZoom (pScale->GetValue ());
584 :
585 0 : SfxBindings& rBindings = GetViewFrame()->GetBindings();
586 0 : rBindings.Invalidate( SID_ATTR_ZOOM );
587 0 : rBindings.Invalidate( SID_ZOOM_IN );
588 0 : rBindings.Invalidate( SID_ZOOM_OUT );
589 0 : rBindings.Invalidate( SID_ATTR_ZOOMSLIDER );
590 : }
591 : #ifndef DISABLE_SCRIPTING
592 0 : else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
593 : #endif
594 0 : rReq.Ignore ();
595 0 : break;
596 : }
597 : #ifndef DISABLE_SCRIPTING
598 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
599 : #endif
600 0 : rReq.Ignore ();
601 0 : break;
602 : }
603 :
604 : case SID_ATTR_ZOOM:
605 : {
606 0 : const SfxItemSet* pArgs = rReq.GetArgs();
607 0 : mbZoomOnPage = sal_False;
608 :
609 0 : if ( pArgs )
610 : {
611 : SvxZoomType eZT = ( ( const SvxZoomItem& ) pArgs->
612 0 : Get( SID_ATTR_ZOOM ) ).GetType();
613 0 : switch( eZT )
614 : {
615 : case SVX_ZOOM_PERCENT:
616 : SetZoom( (long) ( ( const SvxZoomItem& ) pArgs->
617 0 : Get( SID_ATTR_ZOOM ) ).GetValue() );
618 0 : break;
619 :
620 : case SVX_ZOOM_OPTIMAL:
621 : GetViewFrame()->GetDispatcher()->Execute( SID_SIZE_ALL,
622 0 : SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
623 0 : break;
624 :
625 : case SVX_ZOOM_PAGEWIDTH:
626 : GetViewFrame()->GetDispatcher()->Execute( SID_SIZE_PAGE_WIDTH,
627 0 : SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
628 0 : break;
629 :
630 : case SVX_ZOOM_WHOLEPAGE:
631 : GetViewFrame()->GetDispatcher()->Execute( SID_SIZE_PAGE,
632 0 : SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
633 0 : break;
634 : case SVX_ZOOM_PAGEWIDTH_NOBORDER:
635 : OSL_FAIL("sd::DrawViewShell::FuTemporary(), SVX_ZOOM_PAGEWIDTH_NOBORDER not handled!" );
636 0 : break;
637 : }
638 0 : rReq.Ignore ();
639 : }
640 : else
641 : {
642 : // hier den Zoom-Dialog oeffnen
643 0 : SetCurrentFunction( FuScale::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) );
644 : }
645 0 : Cancel();
646 : }
647 0 : break;
648 :
649 : case SID_CHANGEBEZIER:
650 : case SID_CHANGEPOLYGON:
651 0 : if ( mpDrawView->IsTextEdit() )
652 : {
653 0 : mpDrawView->SdrEndTextEdit();
654 0 : GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
655 : }
656 :
657 0 : if ( mpDrawView->IsPresObjSelected() )
658 : {
659 0 : ::sd::Window* pWindow = GetActiveWindow();
660 0 : InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
661 : }
662 : else
663 : {
664 0 : if( rReq.GetSlot() == SID_CHANGEBEZIER )
665 : {
666 0 : WaitObject aWait( (Window*)GetActiveWindow() );
667 0 : mpDrawView->ConvertMarkedToPathObj(sal_False);
668 : }
669 : else
670 : {
671 0 : if( mpDrawView->IsVectorizeAllowed() )
672 : {
673 0 : SetCurrentFunction( FuVectorize::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) );
674 : }
675 : else
676 : {
677 0 : WaitObject aWait( (Window*)GetActiveWindow() );
678 0 : mpDrawView->ConvertMarkedToPolyObj(sal_False);
679 : }
680 : }
681 :
682 0 : Invalidate(SID_CHANGEBEZIER);
683 0 : Invalidate(SID_CHANGEPOLYGON);
684 : }
685 0 : Cancel();
686 :
687 0 : if( HasCurrentFunction(SID_BEZIER_EDIT) )
688 : { // ggf. die richtige Editfunktion aktivieren
689 : GetViewFrame()->GetDispatcher()->Execute(SID_SWITCH_POINTEDIT,
690 0 : SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
691 : }
692 0 : rReq.Ignore ();
693 0 : break;
694 :
695 : case SID_CONVERT_TO_CONTOUR:
696 0 : if ( mpDrawView->IsTextEdit() )
697 : {
698 0 : mpDrawView->SdrEndTextEdit();
699 0 : GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
700 : }
701 :
702 0 : if ( mpDrawView->IsPresObjSelected() )
703 : {
704 0 : ::sd::Window* pWindow = GetActiveWindow();
705 0 : InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
706 : }
707 : else
708 : {
709 0 : WaitObject aWait( (Window*)GetActiveWindow() );
710 0 : mpDrawView->ConvertMarkedToPathObj(sal_True);
711 :
712 0 : Invalidate(SID_CONVERT_TO_CONTOUR);
713 : }
714 0 : Cancel();
715 :
716 0 : rReq.Ignore ();
717 0 : break;
718 :
719 : case SID_CONVERT_TO_METAFILE:
720 : case SID_CONVERT_TO_BITMAP:
721 : {
722 : // End text edit mode when it is active because the metafile or
723 : // bitmap that will be created does not support it.
724 0 : if ( mpDrawView->IsTextEdit() )
725 : {
726 0 : mpDrawView->SdrEndTextEdit();
727 0 : GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
728 : }
729 :
730 0 : if ( mpDrawView->IsPresObjSelected(true,true,true) )
731 : {
732 0 : ::sd::Window* pWindow = GetActiveWindow();
733 0 : InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
734 : }
735 : else
736 : {
737 0 : WaitObject aWait( (Window*)GetActiveWindow() );
738 :
739 : // create SdrGrafObj from metafile/bitmap
740 0 : Graphic aGraphic;
741 0 : switch (nSId)
742 : {
743 : case SID_CONVERT_TO_METAFILE:
744 : {
745 : // switch on undo for the next operations
746 0 : mpDrawView->BegUndo( String( SdResId( STR_UNDO_CONVERT_TO_METAFILE )));
747 0 : GDIMetaFile aMetaFile(mpDrawView->GetMarkedObjMetaFile());
748 0 : aGraphic = Graphic(aMetaFile);
749 : }
750 0 : break;
751 : case SID_CONVERT_TO_BITMAP:
752 : {
753 : // switch on undo for the next operations
754 0 : mpDrawView->BegUndo( String( SdResId( STR_UNDO_CONVERT_TO_BITMAP )));
755 0 : bool bDone(false);
756 :
757 : // I have to get the image here directly since GetMarkedObjBitmapEx works
758 : // based on Bitmaps, but not on BitmapEx, thus throwing away the alpha
759 : // channel. Argh! GetMarkedObjBitmapEx itself is too widely used to safely
760 : // change that, e.g. in the exchange formats. For now I can only add this
761 : // exception to get good results for Svgs. This is how the code gets more
762 : // and more crowded, at last I made a remark for myself to change this
763 : // as one of the next tasks.
764 0 : if(1 == mpDrawView->GetMarkedObjectCount())
765 : {
766 0 : const SdrGrafObj* pSdrGrafObj = dynamic_cast< const SdrGrafObj* >(mpDrawView->GetMarkedObjectByIndex(0));
767 :
768 0 : if(pSdrGrafObj && pSdrGrafObj->isEmbeddedSvg())
769 : {
770 0 : aGraphic = Graphic(pSdrGrafObj->GetGraphic().getSvgData()->getReplacement());
771 0 : bDone = true;
772 : }
773 : }
774 :
775 0 : if(!bDone)
776 : {
777 0 : aGraphic = Graphic(mpDrawView->GetMarkedObjBitmapEx());
778 : }
779 : }
780 0 : break;
781 : }
782 :
783 : // create new object
784 0 : SdrGrafObj* pGraphicObj = new SdrGrafObj (aGraphic);
785 :
786 : // get some necessary info and ensure it
787 0 : const SdrMarkList& rMarkList(mpDrawView->GetMarkedObjectList());
788 0 : const sal_uInt32 nMarkCount(rMarkList.GetMarkCount());
789 0 : SdrPageView* pPageView = mpDrawView->GetSdrPageView();
790 : OSL_ENSURE(nMarkCount, "DrawViewShell::FuTemporary: SID_CONVERT_TO_BITMAP with empty selection (!)");
791 : OSL_ENSURE(pPageView, "DrawViewShell::FuTemporary: SID_CONVERT_TO_BITMAP without SdrPageView (!)");
792 :
793 : // fit rectangle of new graphic object to selection's mark rect
794 0 : Rectangle aAllMarkedRect;
795 0 : rMarkList.TakeBoundRect(pPageView, aAllMarkedRect);
796 0 : pGraphicObj->SetLogicRect(aAllMarkedRect);
797 :
798 : // #i71540# to keep the order, it is necessary to replace the lowest object
799 : // of the selection with the new object. This also means that with multi
800 : // selection, all other objects need to be deleted first
801 0 : SdrMark* pFirstMark = rMarkList.GetMark(0L);
802 0 : SdrObject* pReplacementCandidate = pFirstMark->GetMarkedSdrObj();
803 :
804 0 : if(nMarkCount > 1L)
805 : {
806 : // take first object out of selection
807 0 : mpDrawView->MarkObj(pReplacementCandidate, pPageView, true, true);
808 :
809 : // clear remaining selection
810 0 : mpDrawView->DeleteMarkedObj();
811 : }
812 :
813 : // now replace lowest object with new one
814 0 : mpDrawView->ReplaceObjectAtView(pReplacementCandidate, *pPageView, pGraphicObj);
815 :
816 : // switch off undo
817 0 : mpDrawView->EndUndo();
818 : }
819 : }
820 :
821 0 : Cancel();
822 :
823 0 : rReq.Done ();
824 0 : break;
825 :
826 : case SID_SET_DEFAULT:
827 : {
828 0 : SfxItemSet* pSet = NULL;
829 :
830 0 : if (mpDrawView->IsTextEdit())
831 : {
832 0 : ::Outliner* pOutl = mpDrawView->GetTextEditOutliner();
833 0 : if (pOutl)
834 : {
835 0 : pOutl->RemoveFields(sal_True, (TypeId) SvxURLField::StaticType());
836 : }
837 :
838 0 : pSet = new SfxItemSet( GetPool(), EE_ITEMS_START, EE_ITEMS_END );
839 0 : mpDrawView->SetAttributes( *pSet, sal_True );
840 : }
841 : else
842 : {
843 0 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
844 0 : sal_uLong nCount = rMarkList.GetMarkCount();
845 :
846 : // In diese Liste werden fuer jedes Praesentationsobjekt ein SfxItemSet
847 : // der harten Attribute sowie der UserCall eingetragen, da diese beim nachfolgenden
848 : // mpDrawView->SetAttributes( *pSet, sal_True ) verloren gehen und spaeter restauriert
849 : // werden muessen
850 0 : std::vector<std::pair<SfxItemSet*,SdrObjUserCall*> > aAttrList;
851 0 : SdPage* pPresPage = (SdPage*) mpDrawView->GetSdrPageView()->GetPage();
852 : sal_uLong i;
853 :
854 0 : for ( i = 0; i < nCount; i++ )
855 : {
856 0 : SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
857 :
858 0 : if( pPresPage->IsPresObj( pObj ) )
859 : {
860 0 : SfxItemSet* pNewSet = new SfxItemSet( GetDoc()->GetPool(), SDRATTR_TEXT_MINFRAMEHEIGHT, SDRATTR_TEXT_AUTOGROWHEIGHT, 0 );
861 0 : pNewSet->Put(pObj->GetMergedItemSet());
862 0 : aAttrList.push_back(std::make_pair(pNewSet, pObj->GetUserCall()));
863 : }
864 : }
865 :
866 0 : pSet = new SfxItemSet( GetPool() );
867 0 : mpDrawView->SetAttributes( *pSet, sal_True );
868 :
869 0 : sal_uLong j = 0;
870 :
871 0 : for ( i = 0; i < nCount; i++ )
872 : {
873 0 : SfxStyleSheet* pSheet = NULL;
874 0 : SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
875 :
876 0 : if (pObj->GetObjIdentifier() == OBJ_TITLETEXT)
877 : {
878 0 : pSheet = mpActualPage->GetStyleSheetForPresObj(PRESOBJ_TITLE);
879 0 : if (pSheet)
880 0 : pObj->SetStyleSheet(pSheet, sal_False);
881 : }
882 0 : else if(pObj->GetObjIdentifier() == OBJ_OUTLINETEXT)
883 : {
884 0 : for (sal_uInt16 nLevel = 1; nLevel < 10; nLevel++)
885 : {
886 0 : pSheet = mpActualPage->GetStyleSheetForPresObj( PRESOBJ_OUTLINE );
887 : DBG_ASSERT(pSheet, "Vorlage fuer Gliederungsobjekt nicht gefunden");
888 0 : if (pSheet)
889 : {
890 0 : pObj->StartListening(*pSheet);
891 :
892 0 : if( nLevel == 1 )
893 : // Textrahmen hoert auf StyleSheet der Ebene1
894 0 : pObj->NbcSetStyleSheet(pSheet, sal_False);
895 :
896 : }
897 : }
898 : }
899 :
900 0 : if( pPresPage->IsPresObj( pObj ) )
901 : {
902 0 : std::pair<SfxItemSet*,SdrObjUserCall*> &rAttr = aAttrList[j++];
903 :
904 0 : SfxItemSet* pNewSet = rAttr.first;
905 0 : SdrObjUserCall* pUserCall = rAttr.second;
906 :
907 0 : if ( pNewSet && pNewSet->GetItemState( SDRATTR_TEXT_MINFRAMEHEIGHT ) == SFX_ITEM_ON )
908 : {
909 0 : pObj->SetMergedItem(pNewSet->Get(SDRATTR_TEXT_MINFRAMEHEIGHT));
910 : }
911 :
912 0 : if ( pNewSet && pNewSet->GetItemState( SDRATTR_TEXT_AUTOGROWHEIGHT ) == SFX_ITEM_ON )
913 : {
914 0 : pObj->SetMergedItem(pNewSet->Get(SDRATTR_TEXT_AUTOGROWHEIGHT));
915 : }
916 :
917 0 : if( pUserCall )
918 0 : pObj->SetUserCall( pUserCall );
919 :
920 0 : delete pNewSet;
921 : }
922 0 : }
923 : }
924 :
925 0 : delete pSet;
926 0 : Cancel();
927 : }
928 0 : break;
929 :
930 : case SID_DELETE_SNAPITEM:
931 : {
932 : SdrPageView* pPV;
933 0 : Point aMPos = GetActiveWindow()->PixelToLogic( maMousePos );
934 0 : sal_uInt16 nHitLog = (sal_uInt16) GetActiveWindow()->PixelToLogic( Size(
935 0 : FuPoor::HITPIX, 0 ) ).Width();
936 : sal_uInt16 nHelpLine;
937 :
938 0 : mbMousePosFreezed = sal_False;
939 :
940 0 : if( mpDrawView->PickHelpLine( aMPos, nHitLog, *GetActiveWindow(), nHelpLine, pPV) )
941 : {
942 0 : pPV->DeleteHelpLine( nHelpLine );
943 : }
944 0 : Cancel();
945 0 : rReq.Ignore ();
946 : }
947 0 : break;
948 :
949 : case SID_DELETE_PAGE:
950 : case SID_DELETE_MASTER_PAGE:
951 0 : DeleteActualPage();
952 0 : Cancel();
953 0 : rReq.Ignore ();
954 0 : break;
955 :
956 : case SID_DELETE_LAYER:
957 0 : DeleteActualLayer();
958 0 : Cancel();
959 0 : rReq.Ignore ();
960 0 : break;
961 :
962 : case SID_ORIGINAL_SIZE:
963 0 : mpDrawView->SetMarkedOriginalSize();
964 0 : Cancel();
965 0 : rReq.Done();
966 0 : break;
967 :
968 : case SID_DRAW_FONTWORK:
969 : case SID_DRAW_FONTWORK_VERTICAL:
970 : {
971 0 : svx::FontworkBar::execute( mpView, rReq, GetViewFrame()->GetBindings() ); // SJ: can be removed (I think)
972 0 : Cancel();
973 0 : rReq.Done();
974 : }
975 0 : break;
976 :
977 : case SID_SAVE_GRAPHIC:
978 : {
979 0 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
980 0 : if( rMarkList.GetMarkCount() == 1 )
981 : {
982 0 : SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
983 0 : if( pObj && pObj->ISA( SdrGrafObj ) && ( (SdrGrafObj*) pObj )->GetGraphicType() == GRAPHIC_BITMAP )
984 : {
985 0 : GraphicObject aGraphicObject( ( (SdrGrafObj*) pObj )->GetGraphicObject() );
986 : {
987 0 : GraphicHelper::ExportGraphic( aGraphicObject.GetGraphic(), String("") );
988 0 : }
989 : }
990 : }
991 0 : Cancel();
992 0 : rReq.Ignore();
993 : }
994 0 : break;
995 :
996 : case SID_EXTERNAL_EDIT:
997 : {
998 0 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
999 0 : if( rMarkList.GetMarkCount() == 1 )
1000 : {
1001 0 : SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
1002 0 : if( pObj && pObj->ISA( SdrGrafObj ) && ( (SdrGrafObj*) pObj )->GetGraphicType() == GRAPHIC_BITMAP )
1003 : {
1004 0 : GraphicObject aGraphicObject( ( (SdrGrafObj*) pObj )->GetGraphicObject() );
1005 0 : SdExternalToolEdit* aExternalToolEdit = new SdExternalToolEdit( mpDrawView, pObj );
1006 0 : aExternalToolEdit->Edit( &aGraphicObject );
1007 : }
1008 : }
1009 0 : Cancel();
1010 0 : rReq.Ignore();
1011 : }
1012 0 : break;
1013 :
1014 : case SID_COMPRESS_GRAPHIC:
1015 : {
1016 0 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
1017 0 : if( rMarkList.GetMarkCount() == 1 )
1018 : {
1019 0 : SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
1020 :
1021 0 : if( pObj && pObj->ISA( SdrGrafObj ) && ( (SdrGrafObj*) pObj )->GetGraphicType() == GRAPHIC_BITMAP )
1022 : {
1023 0 : SdrGrafObj* pGraphicObj = (SdrGrafObj*) pObj;
1024 0 : CompressGraphicsDialog dialog( GetParentWindow(), pGraphicObj, GetViewFrame()->GetBindings() );
1025 0 : if ( dialog.Execute() == RET_OK )
1026 : {
1027 0 : SdrGrafObj* pNewObject = dialog.GetCompressedSdrGrafObj();
1028 0 : SdrPageView* pPageView = mpDrawView->GetSdrPageView();
1029 0 : String aUndoString( mpDrawView->GetDescriptionOfMarkedObjects() );
1030 0 : aUndoString += String( " Compress" );
1031 0 : mpDrawView->BegUndo( aUndoString );
1032 0 : mpDrawView->ReplaceObjectAtView( pObj, *pPageView, pNewObject );
1033 0 : mpDrawView->EndUndo();
1034 0 : }
1035 : }
1036 : }
1037 0 : Cancel();
1038 0 : rReq.Ignore();
1039 : }
1040 0 : break;
1041 :
1042 : default:
1043 : {
1044 : // switch Anweisung wegen CLOOKS aufgeteilt. Alle case-Anweisungen die
1045 : // eine Fu???? -Funktion aufrufen, sind in die Methode FuTemp01 (drviews8)
1046 : // gewandert.
1047 0 : FuTemp01(rReq);
1048 : }
1049 0 : break;
1050 : }
1051 :
1052 0 : if(HasCurrentFunction())
1053 : {
1054 0 : GetCurrentFunction()->Activate();
1055 : }
1056 : }
1057 :
1058 :
1059 :
1060 :
1061 : /** This method consists basically of three parts:
1062 : 1. Process the arguments of the SFX request.
1063 : 2. Use the model to create a new page or duplicate an existing one.
1064 : 3. Update the tab control and switch to the new page.
1065 : */
1066 0 : SdPage* DrawViewShell::CreateOrDuplicatePage (
1067 : SfxRequest& rRequest,
1068 : PageKind ePageKind,
1069 : SdPage* pPage,
1070 : const sal_Int32 nInsertPosition)
1071 : {
1072 0 : SdPage* pNewPage = NULL;
1073 0 : if (ePageKind == PK_STANDARD && meEditMode != EM_MASTERPAGE)
1074 : {
1075 0 : if ( mpDrawView->IsTextEdit() )
1076 : {
1077 0 : mpDrawView->SdrEndTextEdit();
1078 : }
1079 0 : pNewPage = ViewShell::CreateOrDuplicatePage (rRequest, ePageKind, pPage, nInsertPosition);
1080 : }
1081 0 : return pNewPage;
1082 : }
1083 :
1084 9 : } // end of namespace sd
1085 :
1086 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|