15b190011SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
35b190011SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
45b190011SAndrew Rist * or more contributor license agreements. See the NOTICE file
55b190011SAndrew Rist * distributed with this work for additional information
65b190011SAndrew Rist * regarding copyright ownership. The ASF licenses this file
75b190011SAndrew Rist * to you under the Apache License, Version 2.0 (the
85b190011SAndrew Rist * "License"); you may not use this file except in compliance
95b190011SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
115b190011SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
135b190011SAndrew Rist * Unless required by applicable law or agreed to in writing,
145b190011SAndrew Rist * software distributed under the License is distributed on an
155b190011SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
165b190011SAndrew Rist * KIND, either express or implied. See the License for the
175b190011SAndrew Rist * specific language governing permissions and limitations
185b190011SAndrew Rist * under the License.
19cdf0e10cSrcweir *
205b190011SAndrew Rist *************************************************************/
215b190011SAndrew Rist
225b190011SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sd.hxx"
26cdf0e10cSrcweir #include <com/sun/star/embed/NoVisualAreaSizeException.hpp>
27cdf0e10cSrcweir #include <com/sun/star/linguistic2/XSpellChecker1.hpp>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include "View.hxx"
30cdf0e10cSrcweir #include <editeng/unolingu.hxx>
31cdf0e10cSrcweir #include <sfx2/request.hxx>
32cdf0e10cSrcweir #include <svx/obj3d.hxx>
33cdf0e10cSrcweir #include <svx/fmview.hxx>
34cdf0e10cSrcweir #include <editeng/outliner.hxx>
35cdf0e10cSrcweir #ifndef _SVX_SVXIDS_HRC
36cdf0e10cSrcweir #include <svx/svxids.hrc>
37cdf0e10cSrcweir #endif
38cdf0e10cSrcweir #include <svx/svdograf.hxx>
39cdf0e10cSrcweir #include <svx/svdoole2.hxx>
40cdf0e10cSrcweir #include <svx/svdundo.hxx>
41cdf0e10cSrcweir #include <vcl/msgbox.hxx>
42cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
43cdf0e10cSrcweir #include <sfx2/app.hxx>
44cdf0e10cSrcweir #include <svx/svdpagv.hxx>
45cdf0e10cSrcweir #include <sfx2/docfile.hxx>
46cdf0e10cSrcweir #include <svx/svdoutl.hxx>
47cdf0e10cSrcweir #include <svx/sdr/contact/displayinfo.hxx>
48cdf0e10cSrcweir
49cdf0e10cSrcweir #include <svx/svdetc.hxx>
50cdf0e10cSrcweir #include <editeng/editstat.hxx>
51cdf0e10cSrcweir
52cdf0e10cSrcweir #include <svx/dialogs.hrc>
53cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
54f120fe41SAndre Fischer #include <sfx2/sidebar/EnumContext.hxx>
55cdf0e10cSrcweir #include <svx/svdopage.hxx>
56cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
57cdf0e10cSrcweir #include <svx/xlndsit.hxx>
58cdf0e10cSrcweir #include <svx/xlineit0.hxx>
59cdf0e10cSrcweir #include <svx/xlnclit.hxx>
6095a18594SAndre Fischer #include <svx/sidebar/ContextChangeEventMultiplexer.hxx>
61cdf0e10cSrcweir #include <vcl/virdev.hxx>
62cdf0e10cSrcweir
63cdf0e10cSrcweir #include "app.hrc"
64cdf0e10cSrcweir #include "strings.hrc"
65cdf0e10cSrcweir #include "Window.hxx"
66cdf0e10cSrcweir #include "Client.hxx"
67cdf0e10cSrcweir #include "drawdoc.hxx"
68cdf0e10cSrcweir #include "DrawDocShell.hxx"
69cdf0e10cSrcweir #include "app.hxx"
70cdf0e10cSrcweir #include "sdpage.hxx"
71cdf0e10cSrcweir #include "glob.hrc"
72cdf0e10cSrcweir #include "sdresid.hxx"
73cdf0e10cSrcweir #include "DrawViewShell.hxx"
74cdf0e10cSrcweir #include "futext.hxx"
75cdf0e10cSrcweir #include "fuinsfil.hxx"
76cdf0e10cSrcweir #include "slideshow.hxx"
77cdf0e10cSrcweir #include "stlpool.hxx"
78cdf0e10cSrcweir #include "FrameView.hxx"
79cdf0e10cSrcweir #include "ViewClipboard.hxx"
80cdf0e10cSrcweir #include "undo/undomanager.hxx"
81cdf0e10cSrcweir #include <svx/sdr/contact/viewobjectcontact.hxx>
82cdf0e10cSrcweir #include <svx/sdr/contact/viewcontact.hxx>
83cdf0e10cSrcweir #include <svx/sdr/contact/displayinfo.hxx>
84766ce4d0SZheng Fan #include <svx/svdotable.hxx>
85cdf0e10cSrcweir #include "EventMultiplexer.hxx"
86cdf0e10cSrcweir #include "ViewShellBase.hxx"
87cdf0e10cSrcweir #include "ViewShellManager.hxx"
88cdf0e10cSrcweir
89cdf0e10cSrcweir #include <basegfx/polygon/b2dpolygontools.hxx>
90cdf0e10cSrcweir #include <basegfx/color/bcolor.hxx>
91cdf0e10cSrcweir #include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
92cdf0e10cSrcweir #include <drawinglayer/primitive2d/textlayoutdevice.hxx>
93cdf0e10cSrcweir #include <drawinglayer/primitive2d/groupprimitive2d.hxx>
94cdf0e10cSrcweir #include <svx/sdr/contact/objectcontact.hxx>
95766ce4d0SZheng Fan #include <svx/sdr/table/tablecontroller.hxx>
96cdf0e10cSrcweir #include <basegfx/matrix/b2dhommatrix.hxx>
97cdf0e10cSrcweir #include <drawinglayer/primitive2d/textprimitive2d.hxx>
98cdf0e10cSrcweir #include <svx/unoapi.hxx>
99cdf0e10cSrcweir #include <basegfx/matrix/b2dhommatrixtools.hxx>
100edf077abSOliver-Rainer Wittmann #include "DrawController.hxx"
101cdf0e10cSrcweir
102cdf0e10cSrcweir #include <numeric>
103cdf0e10cSrcweir
104cdf0e10cSrcweir using namespace com::sun::star;
105cdf0e10cSrcweir using namespace com::sun::star::uno;
106766ce4d0SZheng Fan using namespace sdr::table;
107cdf0e10cSrcweir namespace sd {
108cdf0e10cSrcweir
109cdf0e10cSrcweir #ifndef SO2_DECL_SVINPLACEOBJECT_DEFINED
110cdf0e10cSrcweir #define SO2_DECL_SVINPLACEOBJECT_DEFINED
111cdf0e10cSrcweir SO2_DECL_REF(SvInPlaceObject)
112cdf0e10cSrcweir #endif
113cdf0e10cSrcweir
114cdf0e10cSrcweir TYPEINIT1(View, FmFormView);
115cdf0e10cSrcweir
116cdf0e10cSrcweir /*************************************************************************
117cdf0e10cSrcweir |*
118cdf0e10cSrcweir |* Ctor
119cdf0e10cSrcweir |*
120cdf0e10cSrcweir \************************************************************************/
121cdf0e10cSrcweir
View(SdDrawDocument * pDrawDoc,OutputDevice * pOutDev,ViewShell * pViewShell)122cdf0e10cSrcweir View::View(SdDrawDocument* pDrawDoc, OutputDevice* pOutDev,
123cdf0e10cSrcweir ViewShell* pViewShell)
124cdf0e10cSrcweir : FmFormView(pDrawDoc, pOutDev),
125cdf0e10cSrcweir mpDoc(pDrawDoc),
126cdf0e10cSrcweir mpDocSh( pDrawDoc->GetDocSh() ),
127cdf0e10cSrcweir mpViewSh(pViewShell),
128cdf0e10cSrcweir mpDragSrcMarkList(NULL),
129cdf0e10cSrcweir mpDropMarkerObj(NULL),
130cdf0e10cSrcweir mpDropMarker(NULL),
131cdf0e10cSrcweir mnDragSrcPgNum(SDRPAGE_NOTFOUND),
132cdf0e10cSrcweir mnAction(DND_ACTION_NONE),
133cdf0e10cSrcweir mnLockRedrawSmph(0),
134cdf0e10cSrcweir mpLockedRedraws(NULL),
135cdf0e10cSrcweir mbIsDropAllowed(sal_True),
136cdf0e10cSrcweir maSmartTags(*this),
137cdf0e10cSrcweir mpClipboard (new ViewClipboard (*this))
138cdf0e10cSrcweir {
139cdf0e10cSrcweir // #i73602# Use default from the configuration
140cdf0e10cSrcweir SetBufferedOverlayAllowed(getOptionsDrawinglayer().IsOverlayBuffer_DrawImpress());
141cdf0e10cSrcweir
142cdf0e10cSrcweir // #i74769#, #i75172# Use default from the configuration
143cdf0e10cSrcweir SetBufferedOutputAllowed(getOptionsDrawinglayer().IsPaintBuffer_DrawImpress());
144cdf0e10cSrcweir
145cdf0e10cSrcweir EnableExtendedKeyInputDispatcher(sal_False);
146cdf0e10cSrcweir EnableExtendedMouseEventDispatcher(sal_False);
147cdf0e10cSrcweir EnableExtendedCommandEventDispatcher(sal_False);
148cdf0e10cSrcweir
149cdf0e10cSrcweir SetUseIncompatiblePathCreateInterface(sal_False);
150cdf0e10cSrcweir SetMarkHdlWhenTextEdit(sal_True);
151cdf0e10cSrcweir EnableTextEditOnObjectsWithoutTextIfTextTool(sal_True);
152cdf0e10cSrcweir
153cdf0e10cSrcweir SetMinMoveDistancePixel(2);
154cdf0e10cSrcweir SetHitTolerancePixel(2);
155cdf0e10cSrcweir SetMeasureLayer(String(SdResId(STR_LAYER_MEASURELINES)));
156cdf0e10cSrcweir
157cdf0e10cSrcweir // Timer fuer verzoegertes Drop (muss fuer MAC sein)
158cdf0e10cSrcweir maDropErrorTimer.SetTimeoutHdl( LINK(this, View, DropErrorHdl) );
159cdf0e10cSrcweir maDropErrorTimer.SetTimeout(50);
160cdf0e10cSrcweir maDropInsertFileTimer.SetTimeoutHdl( LINK(this, View, DropInsertFileHdl) );
161cdf0e10cSrcweir maDropInsertFileTimer.SetTimeout(50);
162cdf0e10cSrcweir }
163cdf0e10cSrcweir
ImplClearDrawDropMarker()164cdf0e10cSrcweir void View::ImplClearDrawDropMarker()
165cdf0e10cSrcweir {
166cdf0e10cSrcweir if(mpDropMarker)
167cdf0e10cSrcweir {
168cdf0e10cSrcweir delete mpDropMarker;
169cdf0e10cSrcweir mpDropMarker = 0L;
170cdf0e10cSrcweir }
171cdf0e10cSrcweir }
172cdf0e10cSrcweir
173cdf0e10cSrcweir /*************************************************************************
174cdf0e10cSrcweir |*
175cdf0e10cSrcweir |* Dtor
176cdf0e10cSrcweir |*
177cdf0e10cSrcweir \************************************************************************/
178cdf0e10cSrcweir
~View()179cdf0e10cSrcweir View::~View()
180cdf0e10cSrcweir {
181cdf0e10cSrcweir maSmartTags.Dispose();
182cdf0e10cSrcweir
183cdf0e10cSrcweir // release content of selection clipboard, if we own the content
184cdf0e10cSrcweir UpdateSelectionClipboard( sal_True );
185cdf0e10cSrcweir
186cdf0e10cSrcweir maDropErrorTimer.Stop();
187cdf0e10cSrcweir maDropInsertFileTimer.Stop();
188cdf0e10cSrcweir
189cdf0e10cSrcweir ImplClearDrawDropMarker();
190cdf0e10cSrcweir
191cdf0e10cSrcweir while(PaintWindowCount())
192cdf0e10cSrcweir {
193cdf0e10cSrcweir // Alle angemeldeten OutDevs entfernen
194cdf0e10cSrcweir DeleteWindowFromPaintView(GetFirstOutputDevice() /*GetWin(0)*/);
195cdf0e10cSrcweir }
196cdf0e10cSrcweir
197cdf0e10cSrcweir // gespeicherte Redraws loeschen
198cdf0e10cSrcweir if (mpLockedRedraws)
199cdf0e10cSrcweir {
200cdf0e10cSrcweir SdViewRedrawRec* pRec = (SdViewRedrawRec*)mpLockedRedraws->First();
201cdf0e10cSrcweir while (pRec)
202cdf0e10cSrcweir {
203cdf0e10cSrcweir delete pRec;
204cdf0e10cSrcweir pRec = (SdViewRedrawRec*)mpLockedRedraws->Next();
205cdf0e10cSrcweir }
206cdf0e10cSrcweir delete mpLockedRedraws;
207cdf0e10cSrcweir }
208cdf0e10cSrcweir }
209cdf0e10cSrcweir
210cdf0e10cSrcweir
211cdf0e10cSrcweir class ViewRedirector : public ::sdr::contact::ViewObjectContactRedirector
212cdf0e10cSrcweir {
213cdf0e10cSrcweir public:
214cdf0e10cSrcweir ViewRedirector();
215cdf0e10cSrcweir virtual ~ViewRedirector();
216cdf0e10cSrcweir
217cdf0e10cSrcweir // all default implementations just call the same methods at the original. To do something
218cdf0e10cSrcweir // different, overload the method and at least do what the method does.
219cdf0e10cSrcweir virtual drawinglayer::primitive2d::Primitive2DSequence createRedirectedPrimitive2DSequence(
220cdf0e10cSrcweir const sdr::contact::ViewObjectContact& rOriginal,
221cdf0e10cSrcweir const sdr::contact::DisplayInfo& rDisplayInfo);
222cdf0e10cSrcweir };
223cdf0e10cSrcweir
ViewRedirector()224cdf0e10cSrcweir ViewRedirector::ViewRedirector()
225cdf0e10cSrcweir {
226cdf0e10cSrcweir }
227cdf0e10cSrcweir
~ViewRedirector()228cdf0e10cSrcweir ViewRedirector::~ViewRedirector()
229cdf0e10cSrcweir {
230cdf0e10cSrcweir }
231cdf0e10cSrcweir
createRedirectedPrimitive2DSequence(const sdr::contact::ViewObjectContact & rOriginal,const sdr::contact::DisplayInfo & rDisplayInfo)232cdf0e10cSrcweir drawinglayer::primitive2d::Primitive2DSequence ViewRedirector::createRedirectedPrimitive2DSequence(
233cdf0e10cSrcweir const sdr::contact::ViewObjectContact& rOriginal,
234cdf0e10cSrcweir const sdr::contact::DisplayInfo& rDisplayInfo)
235cdf0e10cSrcweir {
236cdf0e10cSrcweir SdrObject* pObject = rOriginal.GetViewContact().TryToGetSdrObject();
237cdf0e10cSrcweir drawinglayer::primitive2d::Primitive2DSequence xRetval;
238cdf0e10cSrcweir
239cdf0e10cSrcweir if(pObject && pObject->GetPage())
240cdf0e10cSrcweir {
241cdf0e10cSrcweir const bool bDoCreateGeometry(pObject->GetPage()->checkVisibility( rOriginal, rDisplayInfo, true ));
242cdf0e10cSrcweir
243cdf0e10cSrcweir if(!bDoCreateGeometry && !(( pObject->GetObjInventor() == SdrInventor ) && ( pObject->GetObjIdentifier() == OBJ_PAGE )) )
244cdf0e10cSrcweir return xRetval;
245cdf0e10cSrcweir
246cdf0e10cSrcweir PresObjKind eKind(PRESOBJ_NONE);
247cdf0e10cSrcweir const bool bSubContentProcessing(rDisplayInfo.GetSubContentActive());
248cdf0e10cSrcweir const bool bIsMasterPageObject(pObject->GetPage()->IsMasterPage());
249cdf0e10cSrcweir const bool bIsPrinting(rOriginal.GetObjectContact().isOutputToPrinter());
250cdf0e10cSrcweir const SdrPageView* pPageView = rOriginal.GetObjectContact().TryToGetSdrPageView();
251cdf0e10cSrcweir const SdrPage* pVisualizedPage = GetSdrPageFromXDrawPage(rOriginal.GetObjectContact().getViewInformation2D().getVisualizedPage());
252cdf0e10cSrcweir const SdPage* pObjectsSdPage = dynamic_cast< SdPage* >(pObject->GetPage());
253cdf0e10cSrcweir const bool bIsInsidePageObj(pPageView && pPageView->GetPage() != pVisualizedPage);
254cdf0e10cSrcweir
255cdf0e10cSrcweir // check if we need to draw a placeholder border. Never do it for
256cdf0e10cSrcweir // objects inside a SdrPageObj and never when printing
257cdf0e10cSrcweir if(!bIsInsidePageObj && !bIsPrinting)
258cdf0e10cSrcweir {
259cdf0e10cSrcweir bool bCreateOutline(false);
260cdf0e10cSrcweir
261cdf0e10cSrcweir if( pObject->IsEmptyPresObj() && pObject->ISA(SdrTextObj) )
262cdf0e10cSrcweir {
263cdf0e10cSrcweir if( !bSubContentProcessing || !pObject->IsNotVisibleAsMaster() )
264cdf0e10cSrcweir {
265cdf0e10cSrcweir eKind = pObjectsSdPage ? pObjectsSdPage->GetPresObjKind(pObject) : PRESOBJ_NONE;
266cdf0e10cSrcweir bCreateOutline = true;
267cdf0e10cSrcweir }
268cdf0e10cSrcweir }
269cdf0e10cSrcweir else if( ( pObject->GetObjInventor() == SdrInventor ) && ( pObject->GetObjIdentifier() == OBJ_TEXT ) )
270cdf0e10cSrcweir {
271cdf0e10cSrcweir if( pObjectsSdPage )
272cdf0e10cSrcweir {
273cdf0e10cSrcweir eKind = pObjectsSdPage->GetPresObjKind(pObject);
274cdf0e10cSrcweir
275cdf0e10cSrcweir if((eKind == PRESOBJ_FOOTER) || (eKind == PRESOBJ_HEADER) || (eKind == PRESOBJ_DATETIME) || (eKind == PRESOBJ_SLIDENUMBER) )
276cdf0e10cSrcweir {
277cdf0e10cSrcweir if( !bSubContentProcessing )
278cdf0e10cSrcweir {
279cdf0e10cSrcweir // only draw a boundary for header&footer objects on the masterpage itself
280cdf0e10cSrcweir bCreateOutline = true;
281cdf0e10cSrcweir }
282cdf0e10cSrcweir }
283cdf0e10cSrcweir }
284cdf0e10cSrcweir }
285cdf0e10cSrcweir else if( ( pObject->GetObjInventor() == SdrInventor ) && ( pObject->GetObjIdentifier() == OBJ_PAGE ) )
286cdf0e10cSrcweir {
287cdf0e10cSrcweir // only for handout page, else this frame will be created for each
288cdf0e10cSrcweir // page preview object in SlideSorter and PagePane
289cdf0e10cSrcweir if(pObjectsSdPage && PK_HANDOUT == pObjectsSdPage->GetPageKind())
290cdf0e10cSrcweir {
291cdf0e10cSrcweir bCreateOutline = true;
292cdf0e10cSrcweir }
293cdf0e10cSrcweir }
294cdf0e10cSrcweir
295cdf0e10cSrcweir if(bCreateOutline)
296cdf0e10cSrcweir {
297cdf0e10cSrcweir // empty presentation objects get a gray frame
298cdf0e10cSrcweir const svtools::ColorConfig aColorConfig;
299cdf0e10cSrcweir const svtools::ColorConfigValue aColor( aColorConfig.GetColorValue( svtools::OBJECTBOUNDARIES ) );
300cdf0e10cSrcweir
301cdf0e10cSrcweir if( aColor.bIsVisible )
302cdf0e10cSrcweir {
303cdf0e10cSrcweir // get basic object transformation
304cdf0e10cSrcweir const basegfx::BColor aRGBColor(Color(aColor.nColor).getBColor());
305cdf0e10cSrcweir basegfx::B2DHomMatrix aObjectMatrix;
306cdf0e10cSrcweir basegfx::B2DPolyPolygon aObjectPolyPolygon;
307cdf0e10cSrcweir pObject->TRGetBaseGeometry(aObjectMatrix, aObjectPolyPolygon);
308cdf0e10cSrcweir
309cdf0e10cSrcweir // create dashed border
310cdf0e10cSrcweir {
311cdf0e10cSrcweir // create object polygon
312cdf0e10cSrcweir basegfx::B2DPolygon aPolygon(basegfx::tools::createUnitPolygon());
313cdf0e10cSrcweir aPolygon.transform(aObjectMatrix);
314cdf0e10cSrcweir
315cdf0e10cSrcweir // create line and stroke attribute
316cdf0e10cSrcweir ::std::vector< double > aDotDashArray;
317cdf0e10cSrcweir
318cdf0e10cSrcweir aDotDashArray.push_back(160.0);
319cdf0e10cSrcweir aDotDashArray.push_back(80.0);
320cdf0e10cSrcweir
321cdf0e10cSrcweir const double fFullDotDashLen(::std::accumulate(aDotDashArray.begin(), aDotDashArray.end(), 0.0));
322cdf0e10cSrcweir const drawinglayer::attribute::LineAttribute aLine(aRGBColor);
323cdf0e10cSrcweir const drawinglayer::attribute::StrokeAttribute aStroke(aDotDashArray, fFullDotDashLen);
324cdf0e10cSrcweir
325cdf0e10cSrcweir // create primitive and add
326cdf0e10cSrcweir const drawinglayer::primitive2d::Primitive2DReference xRef(new drawinglayer::primitive2d::PolygonStrokePrimitive2D(
327cdf0e10cSrcweir aPolygon,
328cdf0e10cSrcweir aLine,
329cdf0e10cSrcweir aStroke));
330cdf0e10cSrcweir drawinglayer::primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence(xRetval, xRef);
331cdf0e10cSrcweir }
332cdf0e10cSrcweir
333cdf0e10cSrcweir // now paint the placeholder description, but only when masterpage
334cdf0e10cSrcweir // is displayed as page directly (MasterPage view)
335cdf0e10cSrcweir if(!bSubContentProcessing && bIsMasterPageObject)
336cdf0e10cSrcweir {
337cdf0e10cSrcweir String aObjectString;
338cdf0e10cSrcweir
339cdf0e10cSrcweir switch( eKind )
340cdf0e10cSrcweir {
341cdf0e10cSrcweir case PRESOBJ_TITLE:
342cdf0e10cSrcweir {
343cdf0e10cSrcweir if(pObjectsSdPage && pObjectsSdPage->GetPageKind() == PK_STANDARD)
344cdf0e10cSrcweir {
345cdf0e10cSrcweir static String aTitleAreaStr( SdResId( STR_PLACEHOLDER_DESCRIPTION_TITLE ) );
346cdf0e10cSrcweir aObjectString = aTitleAreaStr;
347cdf0e10cSrcweir }
348cdf0e10cSrcweir
349cdf0e10cSrcweir break;
350cdf0e10cSrcweir }
351cdf0e10cSrcweir case PRESOBJ_OUTLINE:
352cdf0e10cSrcweir {
353cdf0e10cSrcweir static String aOutlineAreaStr( SdResId( STR_PLACEHOLDER_DESCRIPTION_OUTLINE ) );
354cdf0e10cSrcweir aObjectString = aOutlineAreaStr;
355cdf0e10cSrcweir break;
356cdf0e10cSrcweir }
357cdf0e10cSrcweir case PRESOBJ_FOOTER:
358cdf0e10cSrcweir {
359cdf0e10cSrcweir static String aFooterAreaStr( SdResId( STR_PLACEHOLDER_DESCRIPTION_FOOTER ) );
360cdf0e10cSrcweir aObjectString = aFooterAreaStr;
361cdf0e10cSrcweir break;
362cdf0e10cSrcweir }
363cdf0e10cSrcweir case PRESOBJ_HEADER:
364cdf0e10cSrcweir {
365cdf0e10cSrcweir static String aHeaderAreaStr( SdResId( STR_PLACEHOLDER_DESCRIPTION_HEADER ) );
366cdf0e10cSrcweir aObjectString = aHeaderAreaStr;
367cdf0e10cSrcweir break;
368cdf0e10cSrcweir }
369cdf0e10cSrcweir case PRESOBJ_DATETIME:
370cdf0e10cSrcweir {
371cdf0e10cSrcweir static String aDateTimeStr( SdResId( STR_PLACEHOLDER_DESCRIPTION_DATETIME ) );
372cdf0e10cSrcweir aObjectString = aDateTimeStr;
373cdf0e10cSrcweir break;
374cdf0e10cSrcweir }
375cdf0e10cSrcweir case PRESOBJ_NOTES:
376cdf0e10cSrcweir {
377cdf0e10cSrcweir static String aDateTimeStr( SdResId( STR_PLACEHOLDER_DESCRIPTION_NOTES ) );
378cdf0e10cSrcweir aObjectString = aDateTimeStr;
379cdf0e10cSrcweir break;
380cdf0e10cSrcweir }
381cdf0e10cSrcweir case PRESOBJ_SLIDENUMBER:
382cdf0e10cSrcweir {
383cdf0e10cSrcweir if(pObjectsSdPage && pObjectsSdPage->GetPageKind() == PK_STANDARD)
384cdf0e10cSrcweir {
385cdf0e10cSrcweir static String aSlideAreaStr( SdResId( STR_PLACEHOLDER_DESCRIPTION_SLIDE ) );
386cdf0e10cSrcweir aObjectString = aSlideAreaStr;
387cdf0e10cSrcweir }
388cdf0e10cSrcweir else
389cdf0e10cSrcweir {
390cdf0e10cSrcweir static String aNumberAreaStr( SdResId( STR_PLACEHOLDER_DESCRIPTION_NUMBER ) );
391cdf0e10cSrcweir aObjectString = aNumberAreaStr;
392cdf0e10cSrcweir }
393cdf0e10cSrcweir break;
394cdf0e10cSrcweir }
395cdf0e10cSrcweir default:
396cdf0e10cSrcweir {
397cdf0e10cSrcweir break;
398cdf0e10cSrcweir }
399cdf0e10cSrcweir }
400cdf0e10cSrcweir
401cdf0e10cSrcweir if( aObjectString.Len() )
402cdf0e10cSrcweir {
403cdf0e10cSrcweir // decompose object matrix to be able to place text correctly
404cdf0e10cSrcweir basegfx::B2DTuple aScale;
405cdf0e10cSrcweir basegfx::B2DTuple aTranslate;
406cdf0e10cSrcweir double fRotate, fShearX;
407cdf0e10cSrcweir aObjectMatrix.decompose(aScale, aTranslate, fRotate, fShearX);
408cdf0e10cSrcweir
409cdf0e10cSrcweir // create font
410cdf0e10cSrcweir SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObject );
411cdf0e10cSrcweir const SdrTextVertAdjust eTVA(pTextObj ? pTextObj->GetTextVerticalAdjust() : SDRTEXTVERTADJUST_CENTER);
412cdf0e10cSrcweir Font aScaledVclFont;
413cdf0e10cSrcweir
414cdf0e10cSrcweir // use a text size factor to get more reliable text sizes from the text layouter
415cdf0e10cSrcweir // (and from vcl), tipp from HDU
416cdf0e10cSrcweir static sal_uInt32 nTextSizeFactor(100);
417cdf0e10cSrcweir
418cdf0e10cSrcweir // use a factor to get more linear text size calculations
419cdf0e10cSrcweir aScaledVclFont.SetHeight( 500 * nTextSizeFactor );
420cdf0e10cSrcweir
421cdf0e10cSrcweir // get basic geometry and get text size
422cdf0e10cSrcweir drawinglayer::primitive2d::TextLayouterDevice aTextLayouter;
423cdf0e10cSrcweir aTextLayouter.setFont(aScaledVclFont);
424cdf0e10cSrcweir const xub_StrLen nTextLength(aObjectString.Len());
425cdf0e10cSrcweir
426cdf0e10cSrcweir // do not forget to use the factor again to get the width for the 500
427cdf0e10cSrcweir const double fTextWidth(aTextLayouter.getTextWidth(aObjectString, 0, nTextLength) * (1.0 / nTextSizeFactor));
428cdf0e10cSrcweir const double fTextHeight(aTextLayouter.getTextHeight() * (1.0 / nTextSizeFactor));
429cdf0e10cSrcweir
430cdf0e10cSrcweir // calculate text primitive position. If text is at bottom, use top for
431cdf0e10cSrcweir // the extra text and vice versa
432cdf0e10cSrcweir const double fHorDist(125);
433cdf0e10cSrcweir const double fVerDist(125);
434cdf0e10cSrcweir const double fPosX((aTranslate.getX() + aScale.getX()) - fTextWidth - fHorDist);
435cdf0e10cSrcweir const double fPosY((SDRTEXTVERTADJUST_BOTTOM == eTVA)
436cdf0e10cSrcweir ? aTranslate.getY() - fVerDist + fTextHeight
437cdf0e10cSrcweir : (aTranslate.getY() + aScale.getY()) - fVerDist);
438cdf0e10cSrcweir
439cdf0e10cSrcweir // get font attributes; use normally scaled font
440cdf0e10cSrcweir const basegfx::BColor aFontColor(aRGBColor);
441cdf0e10cSrcweir Font aVclFont;
442cdf0e10cSrcweir basegfx::B2DVector aTextSizeAttribute;
443cdf0e10cSrcweir
444cdf0e10cSrcweir aVclFont.SetHeight( 500 );
445cdf0e10cSrcweir
446cdf0e10cSrcweir const drawinglayer::attribute::FontAttribute aFontAttribute(
447cdf0e10cSrcweir drawinglayer::primitive2d::getFontAttributeFromVclFont(
448cdf0e10cSrcweir aTextSizeAttribute,
449cdf0e10cSrcweir aVclFont,
450cdf0e10cSrcweir false,
451cdf0e10cSrcweir false));
452cdf0e10cSrcweir
453cdf0e10cSrcweir // fill text matrix
454cdf0e10cSrcweir const basegfx::B2DHomMatrix aTextMatrix(basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix(
455cdf0e10cSrcweir aTextSizeAttribute.getX(), aTextSizeAttribute.getY(),
456cdf0e10cSrcweir fShearX,
457cdf0e10cSrcweir fRotate,
458cdf0e10cSrcweir fPosX, fPosY));
459cdf0e10cSrcweir
460cdf0e10cSrcweir // create DXTextArray (can be empty one)
461cdf0e10cSrcweir const ::std::vector< double > aDXArray;
462cdf0e10cSrcweir
463cdf0e10cSrcweir // create locale; this may need some more information in the future
464cdf0e10cSrcweir const ::com::sun::star::lang::Locale aLocale;
465cdf0e10cSrcweir
466cdf0e10cSrcweir // create primitive and add
467cdf0e10cSrcweir const drawinglayer::primitive2d::Primitive2DReference xRef(
468cdf0e10cSrcweir new drawinglayer::primitive2d::TextSimplePortionPrimitive2D(
469cdf0e10cSrcweir aTextMatrix,
470cdf0e10cSrcweir aObjectString,
471cdf0e10cSrcweir 0,
472cdf0e10cSrcweir nTextLength,
473cdf0e10cSrcweir aDXArray,
474cdf0e10cSrcweir aFontAttribute,
475cdf0e10cSrcweir aLocale,
476cdf0e10cSrcweir aFontColor));
477cdf0e10cSrcweir drawinglayer::primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence(xRetval, xRef);
478cdf0e10cSrcweir }
479cdf0e10cSrcweir }
480cdf0e10cSrcweir }
481cdf0e10cSrcweir }
482cdf0e10cSrcweir }
483cdf0e10cSrcweir
484cdf0e10cSrcweir if(bDoCreateGeometry)
485cdf0e10cSrcweir {
486cdf0e10cSrcweir drawinglayer::primitive2d::appendPrimitive2DSequenceToPrimitive2DSequence(
487cdf0e10cSrcweir xRetval,
488cdf0e10cSrcweir sdr::contact::ViewObjectContactRedirector::createRedirectedPrimitive2DSequence(
489cdf0e10cSrcweir rOriginal,
490cdf0e10cSrcweir rDisplayInfo));
491cdf0e10cSrcweir }
492cdf0e10cSrcweir }
493cdf0e10cSrcweir else
494cdf0e10cSrcweir {
495cdf0e10cSrcweir // not a SdrObject visualisation (maybe e.g. page) or no page
496cdf0e10cSrcweir xRetval = sdr::contact::ViewObjectContactRedirector::createRedirectedPrimitive2DSequence(rOriginal, rDisplayInfo);
497cdf0e10cSrcweir }
498cdf0e10cSrcweir
499cdf0e10cSrcweir return xRetval;
500cdf0e10cSrcweir }
501cdf0e10cSrcweir
502cdf0e10cSrcweir /*************************************************************************
503cdf0e10cSrcweir |*
504cdf0e10cSrcweir |* Paint-Methode: das Ereignis wird an die View weitergeleitet
505cdf0e10cSrcweir |*
506cdf0e10cSrcweir \************************************************************************/
507cdf0e10cSrcweir
CompleteRedraw(OutputDevice * pOutDev,const Region & rReg,sdr::contact::ViewObjectContactRedirector * pRedirector)508cdf0e10cSrcweir void View::CompleteRedraw(OutputDevice* pOutDev, const Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector /*=0L*/)
509cdf0e10cSrcweir {
510cdf0e10cSrcweir // ausfuehren ??
511cdf0e10cSrcweir if (mnLockRedrawSmph == 0)
512cdf0e10cSrcweir {
513cdf0e10cSrcweir SdrPageView* pPgView = GetSdrPageView();
514cdf0e10cSrcweir
515cdf0e10cSrcweir if (pPgView)
516cdf0e10cSrcweir {
517cdf0e10cSrcweir SdPage* pPage = (SdPage*) pPgView->GetPage();
518cdf0e10cSrcweir if( pPage )
519cdf0e10cSrcweir {
520cdf0e10cSrcweir SdrOutliner& rOutl=mpDoc->GetDrawOutliner(NULL);
521cdf0e10cSrcweir bool bScreenDisplay(true);
522cdf0e10cSrcweir
523cdf0e10cSrcweir if(bScreenDisplay && pOutDev && OUTDEV_PRINTER == pOutDev->GetOutDevType())
524cdf0e10cSrcweir {
525cdf0e10cSrcweir // #i75566# printing; suppress AutoColor BackgroundColor generation
526cdf0e10cSrcweir // for visibility reasons by giving GetPageBackgroundColor()
527cdf0e10cSrcweir // the needed hint
528cdf0e10cSrcweir bScreenDisplay = false;
529cdf0e10cSrcweir }
530cdf0e10cSrcweir
531cdf0e10cSrcweir if(bScreenDisplay && pOutDev && pOutDev->GetPDFWriter())
532cdf0e10cSrcweir {
533cdf0e10cSrcweir // #i75566# PDF export; suppress AutoColor BackgroundColor generation (see above)
534cdf0e10cSrcweir bScreenDisplay = false;
535cdf0e10cSrcweir }
536cdf0e10cSrcweir
537cdf0e10cSrcweir // #i75566# Name change GetBackgroundColor -> GetPageBackgroundColor and
538cdf0e10cSrcweir // hint value if screen display. Only then the AutoColor mechanisms shall be applied
539cdf0e10cSrcweir rOutl.SetBackgroundColor( pPage->GetPageBackgroundColor(pPgView, bScreenDisplay) );
540cdf0e10cSrcweir }
541cdf0e10cSrcweir }
542cdf0e10cSrcweir
543cdf0e10cSrcweir ViewRedirector aViewRedirector;
544cdf0e10cSrcweir FmFormView::CompleteRedraw(pOutDev, rReg, pRedirector ? pRedirector : &aViewRedirector);
545cdf0e10cSrcweir }
546cdf0e10cSrcweir // oder speichern?
547cdf0e10cSrcweir else
548cdf0e10cSrcweir {
549cdf0e10cSrcweir if (!mpLockedRedraws)
550cdf0e10cSrcweir mpLockedRedraws = new List;
551cdf0e10cSrcweir
552cdf0e10cSrcweir SdViewRedrawRec* pRec = new SdViewRedrawRec;
553cdf0e10cSrcweir pRec->mpOut = pOutDev;
554cdf0e10cSrcweir pRec->aRect = rReg.GetBoundRect();
555cdf0e10cSrcweir mpLockedRedraws->Insert(pRec, LIST_APPEND);
556cdf0e10cSrcweir }
557cdf0e10cSrcweir }
558cdf0e10cSrcweir
559cdf0e10cSrcweir
560cdf0e10cSrcweir /*************************************************************************
561cdf0e10cSrcweir |*
562cdf0e10cSrcweir |* Selektion hat sich geaendert
563cdf0e10cSrcweir |*
564cdf0e10cSrcweir \************************************************************************/
565cdf0e10cSrcweir
MarkListHasChanged()566cdf0e10cSrcweir void View::MarkListHasChanged()
567cdf0e10cSrcweir {
568cdf0e10cSrcweir FmFormView::MarkListHasChanged();
569cdf0e10cSrcweir
570cdf0e10cSrcweir if( GetMarkedObjectCount() > 0 )
571cdf0e10cSrcweir maSmartTags.deselect();
572cdf0e10cSrcweir }
573cdf0e10cSrcweir
574cdf0e10cSrcweir
575cdf0e10cSrcweir /*************************************************************************
576cdf0e10cSrcweir |*
577cdf0e10cSrcweir |* Attribute setzen
578cdf0e10cSrcweir |*
579cdf0e10cSrcweir \************************************************************************/
580cdf0e10cSrcweir
SetAttributes(const SfxItemSet & rSet,sal_Bool bReplaceAll)581cdf0e10cSrcweir sal_Bool View::SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll)
582cdf0e10cSrcweir {
583cdf0e10cSrcweir sal_Bool bOk = FmFormView::SetAttributes(rSet, bReplaceAll);
584cdf0e10cSrcweir return (bOk);
585cdf0e10cSrcweir }
586cdf0e10cSrcweir
587cdf0e10cSrcweir
588cdf0e10cSrcweir /*************************************************************************
589cdf0e10cSrcweir |*
590cdf0e10cSrcweir |* Attribute holen
591cdf0e10cSrcweir |*
592cdf0e10cSrcweir \************************************************************************/
593cdf0e10cSrcweir
GetAttributes(SfxItemSet & rTargetSet,sal_Bool bOnlyHardAttr) const594cdf0e10cSrcweir sal_Bool View::GetAttributes( SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr ) const
595cdf0e10cSrcweir {
596cdf0e10cSrcweir return( FmFormView::GetAttributes( rTargetSet, bOnlyHardAttr ) );
597cdf0e10cSrcweir }
598cdf0e10cSrcweir
599cdf0e10cSrcweir
600cdf0e10cSrcweir /*************************************************************************
601cdf0e10cSrcweir |*
602cdf0e10cSrcweir |* Ist ein Praesentationsobjekt selektiert?
603cdf0e10cSrcweir |*
604cdf0e10cSrcweir \************************************************************************/
605cdf0e10cSrcweir
IsPresObjSelected(sal_Bool bOnPage,sal_Bool bOnMasterPage,sal_Bool bCheckPresObjListOnly,sal_Bool bCheckLayoutOnly) const606cdf0e10cSrcweir sal_Bool View::IsPresObjSelected(sal_Bool bOnPage, sal_Bool bOnMasterPage, sal_Bool bCheckPresObjListOnly, sal_Bool bCheckLayoutOnly) const
607cdf0e10cSrcweir {
608cdf0e10cSrcweir /**************************************************************************
609cdf0e10cSrcweir * Ist ein Presentationsobjekt selektiert?
610cdf0e10cSrcweir **************************************************************************/
611cdf0e10cSrcweir SdrMarkList* pMarkList;
612cdf0e10cSrcweir
613cdf0e10cSrcweir if (mnDragSrcPgNum != SDRPAGE_NOTFOUND &&
614cdf0e10cSrcweir mnDragSrcPgNum != GetSdrPageView()->GetPage()->GetPageNum())
615cdf0e10cSrcweir {
616cdf0e10cSrcweir // Es laeuft gerade Drag&Drop
617cdf0e10cSrcweir // Source- und Destination-Page unterschiedlich:
618cdf0e10cSrcweir // es wird die gemerkte MarkList verwendet
619cdf0e10cSrcweir pMarkList = mpDragSrcMarkList;
620cdf0e10cSrcweir }
621cdf0e10cSrcweir else
622cdf0e10cSrcweir {
623cdf0e10cSrcweir // Es wird die aktuelle MarkList verwendet
624cdf0e10cSrcweir pMarkList = new SdrMarkList(GetMarkedObjectList());
625cdf0e10cSrcweir }
626cdf0e10cSrcweir
627cdf0e10cSrcweir SdrMark* pMark;
628cdf0e10cSrcweir SdPage* pPage;
629cdf0e10cSrcweir SdrObject* pObj;
630cdf0e10cSrcweir
631cdf0e10cSrcweir sal_Bool bSelected = sal_False;
632cdf0e10cSrcweir sal_Bool bMasterPage = sal_False;
633cdf0e10cSrcweir long nMark;
634cdf0e10cSrcweir long nMarkMax = long(pMarkList->GetMarkCount()) - 1;
635cdf0e10cSrcweir
636cdf0e10cSrcweir for (nMark = nMarkMax; (nMark >= 0) && !bSelected; nMark--)
637cdf0e10cSrcweir {
638cdf0e10cSrcweir // Rueckwaerts durch die Marklist
639cdf0e10cSrcweir pMark = pMarkList->GetMark(nMark);
640cdf0e10cSrcweir pObj = pMark->GetMarkedSdrObj();
641cdf0e10cSrcweir
642cdf0e10cSrcweir if ( pObj && ( bCheckPresObjListOnly || pObj->IsEmptyPresObj() || pObj->GetUserCall() ) )
643cdf0e10cSrcweir {
644cdf0e10cSrcweir pPage = (SdPage*) pObj->GetPage();
645cdf0e10cSrcweir bMasterPage = pPage->IsMasterPage();
646cdf0e10cSrcweir
647cdf0e10cSrcweir if ( (bMasterPage && bOnMasterPage) || (!bMasterPage && bOnPage) )
648cdf0e10cSrcweir {
649cdf0e10cSrcweir if ( pPage && pPage->IsPresObj(pObj) )
650cdf0e10cSrcweir {
651cdf0e10cSrcweir if( bCheckLayoutOnly )
652cdf0e10cSrcweir {
653cdf0e10cSrcweir PresObjKind eKind = pPage->GetPresObjKind(pObj);
654cdf0e10cSrcweir
655cdf0e10cSrcweir if((eKind != PRESOBJ_FOOTER) && (eKind != PRESOBJ_HEADER) && (eKind != PRESOBJ_DATETIME) && (eKind != PRESOBJ_SLIDENUMBER) )
656cdf0e10cSrcweir bSelected = sal_True;
657cdf0e10cSrcweir }
658cdf0e10cSrcweir else
659cdf0e10cSrcweir {
660cdf0e10cSrcweir bSelected = sal_True;
661cdf0e10cSrcweir }
662cdf0e10cSrcweir }
663cdf0e10cSrcweir }
664cdf0e10cSrcweir }
665cdf0e10cSrcweir }
666cdf0e10cSrcweir
667cdf0e10cSrcweir if (pMarkList != mpDragSrcMarkList)
668cdf0e10cSrcweir {
669cdf0e10cSrcweir delete pMarkList;
670cdf0e10cSrcweir }
671cdf0e10cSrcweir
672cdf0e10cSrcweir return (bSelected);
673cdf0e10cSrcweir }
674cdf0e10cSrcweir
675cdf0e10cSrcweir /*************************************************************************
676cdf0e10cSrcweir |*
677cdf0e10cSrcweir |* Alles selektieren
678cdf0e10cSrcweir |*
679cdf0e10cSrcweir \************************************************************************/
680cdf0e10cSrcweir
SelectAll()681cdf0e10cSrcweir void View::SelectAll()
682cdf0e10cSrcweir {
683cdf0e10cSrcweir if ( IsTextEdit() )
684cdf0e10cSrcweir {
685cdf0e10cSrcweir OutlinerView* pOLV = GetTextEditOutlinerView();
686cdf0e10cSrcweir const ::Outliner* pOutliner = GetTextEditOutliner();
687c2eaa082SDamjan Jovanovic pOLV->SelectRange( 0, pOutliner->GetParagraphCount() );
688cdf0e10cSrcweir }
689cdf0e10cSrcweir else
690cdf0e10cSrcweir {
691cdf0e10cSrcweir MarkAll();
692cdf0e10cSrcweir }
693cdf0e10cSrcweir }
694cdf0e10cSrcweir
695cdf0e10cSrcweir
696cdf0e10cSrcweir /*************************************************************************
697cdf0e10cSrcweir |*
698cdf0e10cSrcweir |* Dokument hat sich geaendert
699cdf0e10cSrcweir |*
700cdf0e10cSrcweir \************************************************************************/
701cdf0e10cSrcweir
ModelHasChanged()702cdf0e10cSrcweir void View::ModelHasChanged()
703cdf0e10cSrcweir {
704cdf0e10cSrcweir // Erst SdrView benachrichtigen
705cdf0e10cSrcweir FmFormView::ModelHasChanged();
706cdf0e10cSrcweir }
707cdf0e10cSrcweir
708cdf0e10cSrcweir /*************************************************************************
709cdf0e10cSrcweir |*
710cdf0e10cSrcweir |* StyleSheet setzen
711cdf0e10cSrcweir |*
712cdf0e10cSrcweir \************************************************************************/
713cdf0e10cSrcweir
SetStyleSheet(SfxStyleSheet * pStyleSheet,sal_Bool bDontRemoveHardAttr)714cdf0e10cSrcweir sal_Bool View::SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr)
715cdf0e10cSrcweir {
716cdf0e10cSrcweir // weiter an SdrView
717cdf0e10cSrcweir return FmFormView::SetStyleSheet(pStyleSheet, bDontRemoveHardAttr);
718cdf0e10cSrcweir }
719cdf0e10cSrcweir
720cdf0e10cSrcweir
721cdf0e10cSrcweir /*************************************************************************
722cdf0e10cSrcweir |*
723cdf0e10cSrcweir |* Texteingabe beginnen
724cdf0e10cSrcweir |*
725cdf0e10cSrcweir \************************************************************************/
726cdf0e10cSrcweir
SetSpellOptions(SdDrawDocument * pDoc,sal_uLong & rCntrl)727cdf0e10cSrcweir static void SetSpellOptions( SdDrawDocument* pDoc, sal_uLong& rCntrl )
728cdf0e10cSrcweir {
729cdf0e10cSrcweir sal_Bool bOnlineSpell = pDoc->GetOnlineSpell();
730cdf0e10cSrcweir
731cdf0e10cSrcweir if( bOnlineSpell )
732cdf0e10cSrcweir rCntrl |= EE_CNTRL_ONLINESPELLING;
733cdf0e10cSrcweir else
734cdf0e10cSrcweir rCntrl &= ~EE_CNTRL_ONLINESPELLING;
735cdf0e10cSrcweir }
736cdf0e10cSrcweir
SdrBeginTextEdit(SdrObject * pObj,SdrPageView * pPV,::Window * pWin,sal_Bool bIsNewObj,SdrOutliner * pOutl,OutlinerView * pGivenOutlinerView,sal_Bool bDontDeleteOutliner,sal_Bool bOnlyOneView,sal_Bool bGrabFocus)737cdf0e10cSrcweir sal_Bool View::SdrBeginTextEdit(
738cdf0e10cSrcweir SdrObject* pObj, SdrPageView* pPV, ::Window* pWin,
739cdf0e10cSrcweir sal_Bool bIsNewObj,
740cdf0e10cSrcweir SdrOutliner* pOutl, OutlinerView* pGivenOutlinerView,
741cdf0e10cSrcweir sal_Bool bDontDeleteOutliner, sal_Bool bOnlyOneView, sal_Bool bGrabFocus )
742cdf0e10cSrcweir {
743cdf0e10cSrcweir GetViewShell()->GetViewShellBase().GetEventMultiplexer()->MultiplexEvent(
744cdf0e10cSrcweir sd::tools::EventMultiplexerEvent::EID_BEGIN_TEXT_EDIT, (void*)pObj );
745cdf0e10cSrcweir
746cdf0e10cSrcweir if( pOutl==NULL && pObj )
747cdf0e10cSrcweir pOutl = SdrMakeOutliner( OUTLINERMODE_TEXTOBJECT, pObj->GetModel() );
748cdf0e10cSrcweir
749cdf0e10cSrcweir // make draw&impress specific initialisations
750cdf0e10cSrcweir if( pOutl )
751cdf0e10cSrcweir {
752cdf0e10cSrcweir pOutl->SetStyleSheetPool((SfxStyleSheetPool*) mpDoc->GetStyleSheetPool());
753cdf0e10cSrcweir pOutl->SetCalcFieldValueHdl(LINK(SD_MOD(), SdModule, CalcFieldValueHdl));
754cdf0e10cSrcweir sal_uLong nCntrl = pOutl->GetControlWord();
755cdf0e10cSrcweir nCntrl |= EE_CNTRL_ALLOWBIGOBJS;
756cdf0e10cSrcweir nCntrl |= EE_CNTRL_URLSFXEXECUTE;
757cdf0e10cSrcweir nCntrl |= EE_CNTRL_MARKFIELDS;
758cdf0e10cSrcweir nCntrl |= EE_CNTRL_AUTOCORRECT;
759cdf0e10cSrcweir
760cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_ULSPACESUMMATION;
761cdf0e10cSrcweir if ( mpDoc->IsSummationOfParagraphs() )
762cdf0e10cSrcweir nCntrl |= EE_CNTRL_ULSPACESUMMATION;
763cdf0e10cSrcweir
764cdf0e10cSrcweir SetSpellOptions( mpDoc, nCntrl );
765cdf0e10cSrcweir
766cdf0e10cSrcweir pOutl->SetControlWord(nCntrl);
767cdf0e10cSrcweir
768cdf0e10cSrcweir Reference< linguistic2::XSpellChecker1 > xSpellChecker( LinguMgr::GetSpellChecker() );
769cdf0e10cSrcweir if ( xSpellChecker.is() )
770cdf0e10cSrcweir pOutl->SetSpeller( xSpellChecker );
771cdf0e10cSrcweir
772cdf0e10cSrcweir Reference< linguistic2::XHyphenator > xHyphenator( LinguMgr::GetHyphenator() );
773cdf0e10cSrcweir if( xHyphenator.is() )
774cdf0e10cSrcweir pOutl->SetHyphenator( xHyphenator );
775cdf0e10cSrcweir
776cdf0e10cSrcweir pOutl->SetDefaultLanguage( Application::GetSettings().GetLanguage() );
777cdf0e10cSrcweir }
778cdf0e10cSrcweir
779cdf0e10cSrcweir sal_Bool bReturn = FmFormView::SdrBeginTextEdit(
780cdf0e10cSrcweir pObj, pPV, pWin, bIsNewObj, pOutl,
781cdf0e10cSrcweir pGivenOutlinerView, bDontDeleteOutliner,
782cdf0e10cSrcweir bOnlyOneView, bGrabFocus);
783cdf0e10cSrcweir
784edf077abSOliver-Rainer Wittmann if ( mpViewSh )
785edf077abSOliver-Rainer Wittmann {
786edf077abSOliver-Rainer Wittmann mpViewSh->GetViewShellBase().GetDrawController().FireSelectionChangeListener();
787edf077abSOliver-Rainer Wittmann }
788edf077abSOliver-Rainer Wittmann
789cdf0e10cSrcweir if (bReturn)
790cdf0e10cSrcweir {
791cdf0e10cSrcweir ::Outliner* pOL = GetTextEditOutliner();
792cdf0e10cSrcweir
793cdf0e10cSrcweir if( pObj && pObj->GetPage() )
794cdf0e10cSrcweir {
795cdf0e10cSrcweir Color aBackground;
796cdf0e10cSrcweir if( pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_TABLE )
797cdf0e10cSrcweir {
798cdf0e10cSrcweir aBackground = GetTextEditBackgroundColor(*this);
799cdf0e10cSrcweir }
800cdf0e10cSrcweir else
801cdf0e10cSrcweir {
802cdf0e10cSrcweir aBackground = pObj->GetPage()->GetPageBackgroundColor(pPV);
803cdf0e10cSrcweir }
80402c50d82SAndre Fischer if (pOL != NULL)
805cdf0e10cSrcweir pOL->SetBackgroundColor( aBackground );
806cdf0e10cSrcweir }
807cdf0e10cSrcweir
80802c50d82SAndre Fischer if (pOL != NULL)
80902c50d82SAndre Fischer {
810cdf0e10cSrcweir pOL->SetParaInsertedHdl(LINK(this, View, OnParagraphInsertedHdl));
811cdf0e10cSrcweir pOL->SetParaRemovingHdl(LINK(this, View, OnParagraphRemovingHdl));
812cdf0e10cSrcweir }
81302c50d82SAndre Fischer }
814cdf0e10cSrcweir
815cdf0e10cSrcweir return(bReturn);
816cdf0e10cSrcweir }
817cdf0e10cSrcweir
818cdf0e10cSrcweir /** ends current text editing */
SdrEndTextEdit(sal_Bool bDontDeleteReally)819cdf0e10cSrcweir SdrEndTextEditKind View::SdrEndTextEdit(sal_Bool bDontDeleteReally )
820cdf0e10cSrcweir {
821cdf0e10cSrcweir SdrObjectWeakRef xObj( GetTextEditObject() );
822cdf0e10cSrcweir
823cdf0e10cSrcweir sal_Bool bDefaultTextRestored = RestoreDefaultText( dynamic_cast< SdrTextObj* >( GetTextEditObject() ) );
824cdf0e10cSrcweir
825cdf0e10cSrcweir SdrEndTextEditKind eKind = FmFormView::SdrEndTextEdit(bDontDeleteReally);
826cdf0e10cSrcweir
827cdf0e10cSrcweir if( bDefaultTextRestored )
828cdf0e10cSrcweir {
829cdf0e10cSrcweir if( xObj.is() && !xObj->IsEmptyPresObj() )
830cdf0e10cSrcweir {
831cdf0e10cSrcweir xObj->SetEmptyPresObj( sal_True );
832cdf0e10cSrcweir }
833cdf0e10cSrcweir else
834cdf0e10cSrcweir {
835cdf0e10cSrcweir eKind = SDRENDTEXTEDIT_UNCHANGED;
836cdf0e10cSrcweir }
837cdf0e10cSrcweir }
838cdf0e10cSrcweir else if( xObj.is() && xObj->IsEmptyPresObj() )
839cdf0e10cSrcweir {
840cdf0e10cSrcweir SdrTextObj* pObj = dynamic_cast< SdrTextObj* >( xObj.get() );
841cdf0e10cSrcweir if( pObj && pObj->HasText() )
842cdf0e10cSrcweir {
843cdf0e10cSrcweir SdrPage* pPage = pObj->GetPage();
844cdf0e10cSrcweir if( !pPage || !pPage->IsMasterPage() )
845cdf0e10cSrcweir pObj->SetEmptyPresObj( sal_False );
846cdf0e10cSrcweir }
847cdf0e10cSrcweir }
848cdf0e10cSrcweir
84995a18594SAndre Fischer GetViewShell()->GetViewShellBase().GetEventMultiplexer()->MultiplexEvent(
85095a18594SAndre Fischer sd::tools::EventMultiplexerEvent::EID_END_TEXT_EDIT,
85195a18594SAndre Fischer (void*)xObj.get() );
852cdf0e10cSrcweir
853cdf0e10cSrcweir if( xObj.is() )
854cdf0e10cSrcweir {
855edf077abSOliver-Rainer Wittmann if ( mpViewSh )
856edf077abSOliver-Rainer Wittmann {
857edf077abSOliver-Rainer Wittmann mpViewSh->GetViewShellBase().GetDrawController().FireSelectionChangeListener();
858edf077abSOliver-Rainer Wittmann }
859edf077abSOliver-Rainer Wittmann
860cdf0e10cSrcweir SdPage* pPage = dynamic_cast< SdPage* >( xObj->GetPage() );
861cdf0e10cSrcweir if( pPage )
862cdf0e10cSrcweir pPage->onEndTextEdit( xObj.get() );
863cdf0e10cSrcweir }
864cdf0e10cSrcweir
865cdf0e10cSrcweir return(eKind);
866cdf0e10cSrcweir }
867cdf0e10cSrcweir
868cdf0e10cSrcweir // --------------------------------------------------------------------
869cdf0e10cSrcweir
870cdf0e10cSrcweir /** restores the default text if the given text object is currently in edit mode and
87186e1cf34SPedro Giffuni no text has been entered already. Is only useful just before text edit ends. */
RestoreDefaultText(SdrTextObj * pTextObj)872cdf0e10cSrcweir bool View::RestoreDefaultText( SdrTextObj* pTextObj )
873cdf0e10cSrcweir {
874cdf0e10cSrcweir bool bRestored = false;
875cdf0e10cSrcweir
876cdf0e10cSrcweir if( pTextObj && (pTextObj == GetTextEditObject()) )
877cdf0e10cSrcweir {
878cdf0e10cSrcweir if( !pTextObj->HasText() )
879cdf0e10cSrcweir {
880cdf0e10cSrcweir SdPage* pPage = dynamic_cast< SdPage* >( pTextObj->GetPage() );
881cdf0e10cSrcweir
882cdf0e10cSrcweir if(pPage)
883cdf0e10cSrcweir {
884cdf0e10cSrcweir bRestored = pPage->RestoreDefaultText( pTextObj );
885cdf0e10cSrcweir if( bRestored )
886cdf0e10cSrcweir {
887cdf0e10cSrcweir SdrOutliner* pOutliner = GetTextEditOutliner();
888cdf0e10cSrcweir pTextObj->SetTextEditOutliner( pOutliner );
889cdf0e10cSrcweir OutlinerParaObject* pParaObj = pTextObj->GetOutlinerParaObject();
890cdf0e10cSrcweir if (pOutliner)
891cdf0e10cSrcweir pOutliner->SetText(*pParaObj);
892cdf0e10cSrcweir }
893cdf0e10cSrcweir }
894cdf0e10cSrcweir }
895cdf0e10cSrcweir }
896cdf0e10cSrcweir
897cdf0e10cSrcweir return bRestored;
898cdf0e10cSrcweir }
899cdf0e10cSrcweir
900cdf0e10cSrcweir /*************************************************************************
901cdf0e10cSrcweir |*
902cdf0e10cSrcweir |* Originalgroesse der markierten Objekte setzen
903cdf0e10cSrcweir |*
904cdf0e10cSrcweir \************************************************************************/
905cdf0e10cSrcweir
SetMarkedOriginalSize()906cdf0e10cSrcweir void View::SetMarkedOriginalSize()
907cdf0e10cSrcweir {
908cdf0e10cSrcweir SdrUndoGroup* pUndoGroup = new SdrUndoGroup(*mpDoc);
909cdf0e10cSrcweir sal_uLong nCount = GetMarkedObjectCount();
910cdf0e10cSrcweir sal_Bool bOK = sal_False;
911cdf0e10cSrcweir
912cdf0e10cSrcweir for( sal_uInt32 i = 0; i < nCount; i++ )
913cdf0e10cSrcweir {
914cdf0e10cSrcweir SdrObject* pObj = GetMarkedObjectByIndex(i);
915cdf0e10cSrcweir
916cdf0e10cSrcweir if( pObj->GetObjInventor() == SdrInventor )
917cdf0e10cSrcweir {
918cdf0e10cSrcweir if( pObj->GetObjIdentifier() == OBJ_OLE2 )
919cdf0e10cSrcweir {
920cdf0e10cSrcweir uno::Reference < embed::XEmbeddedObject > xObj = ((SdrOle2Obj*)pObj)->GetObjRef();
921cdf0e10cSrcweir if( xObj.is() )
922cdf0e10cSrcweir {
923cdf0e10cSrcweir // TODO/LEAN: working with VisualArea can switch object to running state
924cdf0e10cSrcweir
925cdf0e10cSrcweir sal_Int64 nAspect = ((SdrOle2Obj*)pObj)->GetAspect();
926cdf0e10cSrcweir Size aOleSize;
927cdf0e10cSrcweir
928cdf0e10cSrcweir if ( nAspect == embed::Aspects::MSOLE_ICON )
929cdf0e10cSrcweir {
930cdf0e10cSrcweir MapMode aMap100( MAP_100TH_MM );
931cdf0e10cSrcweir aOleSize = ((SdrOle2Obj*)pObj)->GetOrigObjSize( &aMap100 );
932cdf0e10cSrcweir bOK = sal_True;
933cdf0e10cSrcweir }
934cdf0e10cSrcweir else
935cdf0e10cSrcweir {
936cdf0e10cSrcweir MapUnit aUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) );
937cdf0e10cSrcweir try
938cdf0e10cSrcweir {
939cdf0e10cSrcweir awt::Size aSz = xObj->getVisualAreaSize( nAspect );
940cdf0e10cSrcweir aOleSize = OutputDevice::LogicToLogic( Size( aSz.Width, aSz.Height ), aUnit, MAP_100TH_MM );
941cdf0e10cSrcweir bOK = sal_True;
942cdf0e10cSrcweir }
943cdf0e10cSrcweir catch( embed::NoVisualAreaSizeException& )
944cdf0e10cSrcweir {}
945cdf0e10cSrcweir }
946cdf0e10cSrcweir
947cdf0e10cSrcweir if ( bOK )
948cdf0e10cSrcweir {
949cdf0e10cSrcweir Rectangle aDrawRect( pObj->GetLogicRect() );
950cdf0e10cSrcweir
951cdf0e10cSrcweir pUndoGroup->AddAction( mpDoc->GetSdrUndoFactory().CreateUndoGeoObject( *pObj ) );
952cdf0e10cSrcweir pObj->Resize( aDrawRect.TopLeft(), Fraction( aOleSize.Width(), aDrawRect.GetWidth() ),
953cdf0e10cSrcweir Fraction( aOleSize.Height(), aDrawRect.GetHeight() ) );
954cdf0e10cSrcweir }
955cdf0e10cSrcweir }
956cdf0e10cSrcweir }
957cdf0e10cSrcweir else if( pObj->GetObjIdentifier() == OBJ_GRAF )
958cdf0e10cSrcweir {
959cdf0e10cSrcweir const MapMode aMap100( MAP_100TH_MM );
960cdf0e10cSrcweir Size aSize;
961cdf0e10cSrcweir
962cdf0e10cSrcweir if ( static_cast< SdrGrafObj* >( pObj )->GetGrafPrefMapMode().GetMapUnit() == MAP_PIXEL )
963cdf0e10cSrcweir aSize = Application::GetDefaultDevice()->PixelToLogic( static_cast< SdrGrafObj* >( pObj )->GetGrafPrefSize(), aMap100 );
964cdf0e10cSrcweir else
965cdf0e10cSrcweir {
966cdf0e10cSrcweir aSize = OutputDevice::LogicToLogic( static_cast< SdrGrafObj* >( pObj )->GetGrafPrefSize(),
967cdf0e10cSrcweir static_cast< SdrGrafObj* >( pObj )->GetGrafPrefMapMode(),
968cdf0e10cSrcweir aMap100 );
969cdf0e10cSrcweir }
970cdf0e10cSrcweir
971cdf0e10cSrcweir pUndoGroup->AddAction( GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*pObj ) );
972cdf0e10cSrcweir Rectangle aRect( pObj->GetLogicRect() );
973cdf0e10cSrcweir aRect.SetSize( aSize );
974cdf0e10cSrcweir pObj->SetLogicRect( aRect );
975cdf0e10cSrcweir
976cdf0e10cSrcweir bOK = sal_True;
977cdf0e10cSrcweir }
978cdf0e10cSrcweir }
979cdf0e10cSrcweir }
980cdf0e10cSrcweir
981cdf0e10cSrcweir if( bOK )
982cdf0e10cSrcweir {
983cdf0e10cSrcweir pUndoGroup->SetComment( String(SdResId(STR_UNDO_ORIGINALSIZE)) );
984cdf0e10cSrcweir mpDocSh->GetUndoManager()->AddUndoAction(pUndoGroup);
985cdf0e10cSrcweir }
986cdf0e10cSrcweir else
987cdf0e10cSrcweir delete pUndoGroup;
988cdf0e10cSrcweir }
989cdf0e10cSrcweir
990cdf0e10cSrcweir /*************************************************************************
991cdf0e10cSrcweir |*
992cdf0e10cSrcweir |* OLE-Obj am Client connecten
993cdf0e10cSrcweir |*
994cdf0e10cSrcweir \************************************************************************/
995cdf0e10cSrcweir
DoConnect(SdrOle2Obj * pObj)996cdf0e10cSrcweir void View::DoConnect(SdrOle2Obj* pObj)
997cdf0e10cSrcweir {
998cdf0e10cSrcweir if (mpViewSh)
999cdf0e10cSrcweir {
1000cdf0e10cSrcweir uno::Reference < embed::XEmbeddedObject > xObj( pObj->GetObjRef() );
1001cdf0e10cSrcweir if( xObj.is() )
1002cdf0e10cSrcweir {
1003cdf0e10cSrcweir ::sd::Window* pWindow = mpViewSh->GetActiveWindow();
1004cdf0e10cSrcweir SfxInPlaceClient* pSdClient = mpViewSh-> GetViewShellBase().FindIPClient( xObj, pWindow );
1005cdf0e10cSrcweir if ( !pSdClient )
1006cdf0e10cSrcweir {
1007cdf0e10cSrcweir pSdClient = new Client(pObj, mpViewSh, pWindow);
1008cdf0e10cSrcweir Rectangle aRect = pObj->GetLogicRect();
1009cdf0e10cSrcweir {
1010cdf0e10cSrcweir // TODO/LEAN: working with visual area can switch object to running state
1011cdf0e10cSrcweir Size aDrawSize = aRect.GetSize();
1012cdf0e10cSrcweir awt::Size aSz;
1013cdf0e10cSrcweir
1014cdf0e10cSrcweir MapMode aMapMode( mpDoc->GetScaleUnit() );
1015cdf0e10cSrcweir Size aObjAreaSize = pObj->GetOrigObjSize( &aMapMode );
1016cdf0e10cSrcweir
1017cdf0e10cSrcweir Fraction aScaleWidth (aDrawSize.Width(), aObjAreaSize.Width() );
1018cdf0e10cSrcweir Fraction aScaleHeight(aDrawSize.Height(), aObjAreaSize.Height() );
1019cdf0e10cSrcweir aScaleWidth.ReduceInaccurate(10); // kompatibel zum SdrOle2Obj
1020cdf0e10cSrcweir aScaleHeight.ReduceInaccurate(10);
1021cdf0e10cSrcweir pSdClient->SetSizeScale(aScaleWidth, aScaleHeight);
1022cdf0e10cSrcweir
1023cdf0e10cSrcweir // sichtbarer Ausschnitt wird nur inplace veraendert!
1024cdf0e10cSrcweir // the object area must be set after the scaling, since it triggers resize
1025cdf0e10cSrcweir aRect.SetSize(aObjAreaSize);
1026cdf0e10cSrcweir pSdClient->SetObjArea(aRect);
1027cdf0e10cSrcweir }
1028cdf0e10cSrcweir }
1029cdf0e10cSrcweir }
1030cdf0e10cSrcweir }
1031cdf0e10cSrcweir }
1032cdf0e10cSrcweir
1033cdf0e10cSrcweir /*************************************************************************
1034cdf0e10cSrcweir |*
1035cdf0e10cSrcweir |*
1036cdf0e10cSrcweir |*
1037cdf0e10cSrcweir \************************************************************************/
1038cdf0e10cSrcweir
IsMorphingAllowed() const1039cdf0e10cSrcweir sal_Bool View::IsMorphingAllowed() const
1040cdf0e10cSrcweir {
1041cdf0e10cSrcweir const SdrMarkList& rMarkList = GetMarkedObjectList();
1042cdf0e10cSrcweir sal_Bool bRet = sal_False;
1043cdf0e10cSrcweir
1044cdf0e10cSrcweir if ( rMarkList.GetMarkCount() == 2 )
1045cdf0e10cSrcweir {
1046cdf0e10cSrcweir const SdrObject* pObj1 = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
1047cdf0e10cSrcweir const SdrObject* pObj2 = rMarkList.GetMark( 1 )->GetMarkedSdrObj();
1048cdf0e10cSrcweir const sal_uInt16 nKind1 = pObj1->GetObjIdentifier();
1049cdf0e10cSrcweir const sal_uInt16 nKind2 = pObj2->GetObjIdentifier();
1050cdf0e10cSrcweir
1051cdf0e10cSrcweir if ( ( nKind1 != OBJ_TEXT && nKind2 != OBJ_TEXT ) &&
1052cdf0e10cSrcweir ( nKind1 != OBJ_TITLETEXT && nKind2 != OBJ_TITLETEXT ) &&
1053cdf0e10cSrcweir ( nKind1 != OBJ_OUTLINETEXT && nKind2 != OBJ_OUTLINETEXT ) &&
1054cdf0e10cSrcweir ( nKind1 != OBJ_GRUP && nKind2 != OBJ_GRUP ) &&
1055cdf0e10cSrcweir ( nKind1 != OBJ_LINE && nKind2 != OBJ_LINE ) &&
1056cdf0e10cSrcweir ( nKind1 != OBJ_PLIN && nKind2 != OBJ_PLIN ) &&
1057cdf0e10cSrcweir ( nKind1 != OBJ_PATHLINE && nKind2 != OBJ_PATHLINE ) &&
1058cdf0e10cSrcweir ( nKind1 != OBJ_FREELINE && nKind2 != OBJ_FREELINE ) &&
1059cdf0e10cSrcweir ( nKind1 != OBJ_PATHPLIN && nKind2 != OBJ_PATHPLIN ) &&
1060cdf0e10cSrcweir ( nKind1 != OBJ_MEASURE && nKind2 != OBJ_MEASURE ) &&
1061cdf0e10cSrcweir ( nKind1 != OBJ_EDGE && nKind2 != OBJ_EDGE ) &&
1062cdf0e10cSrcweir ( nKind1 != OBJ_GRAF && nKind2 != OBJ_GRAF ) &&
1063cdf0e10cSrcweir ( nKind1 != OBJ_OLE2 && nKind2 != OBJ_OLE2 ) &&
1064cdf0e10cSrcweir ( nKind1 != OBJ_CAPTION && nKind2 != OBJ_CAPTION ) &&
1065cdf0e10cSrcweir !pObj1->ISA( E3dObject) && !pObj2->ISA( E3dObject) )
1066cdf0e10cSrcweir {
1067cdf0e10cSrcweir SfxItemSet aSet1( mpDoc->GetPool(), XATTR_FILLSTYLE, XATTR_FILLSTYLE );
1068cdf0e10cSrcweir SfxItemSet aSet2( mpDoc->GetPool(), XATTR_FILLSTYLE, XATTR_FILLSTYLE );
1069cdf0e10cSrcweir
1070cdf0e10cSrcweir aSet1.Put(pObj1->GetMergedItemSet());
1071cdf0e10cSrcweir aSet2.Put(pObj2->GetMergedItemSet());
1072cdf0e10cSrcweir
1073cdf0e10cSrcweir const XFillStyle eFillStyle1 = ( (const XFillStyleItem&) aSet1.Get( XATTR_FILLSTYLE ) ).GetValue();
1074cdf0e10cSrcweir const XFillStyle eFillStyle2 = ( (const XFillStyleItem&) aSet2.Get( XATTR_FILLSTYLE ) ).GetValue();
1075cdf0e10cSrcweir
1076cdf0e10cSrcweir if( ( eFillStyle1 == XFILL_NONE || eFillStyle1 == XFILL_SOLID ) &&
1077cdf0e10cSrcweir ( eFillStyle2 == XFILL_NONE || eFillStyle2 == XFILL_SOLID ) )
1078cdf0e10cSrcweir bRet = sal_True;
1079cdf0e10cSrcweir }
1080cdf0e10cSrcweir }
1081cdf0e10cSrcweir
1082cdf0e10cSrcweir return bRet;
1083cdf0e10cSrcweir }
1084cdf0e10cSrcweir
1085cdf0e10cSrcweir /*************************************************************************
1086cdf0e10cSrcweir |*
1087cdf0e10cSrcweir |*
1088cdf0e10cSrcweir |*
1089cdf0e10cSrcweir \************************************************************************/
1090cdf0e10cSrcweir
IsVectorizeAllowed() const1091cdf0e10cSrcweir sal_Bool View::IsVectorizeAllowed() const
1092cdf0e10cSrcweir {
1093cdf0e10cSrcweir const SdrMarkList& rMarkList = GetMarkedObjectList();
1094cdf0e10cSrcweir sal_Bool bRet = sal_False;
1095cdf0e10cSrcweir
1096cdf0e10cSrcweir if( rMarkList.GetMarkCount() == 1 )
1097cdf0e10cSrcweir {
1098ddde725dSArmin Le Grand const SdrGrafObj* pObj = dynamic_cast< const SdrGrafObj* >(rMarkList.GetMark( 0 )->GetMarkedSdrObj());
1099cdf0e10cSrcweir
1100ddde725dSArmin Le Grand if(pObj)
1101ddde725dSArmin Le Grand {
1102ddde725dSArmin Le Grand if(GRAPHIC_BITMAP == pObj->GetGraphicType() && !pObj->isEmbeddedSvg())
1103ddde725dSArmin Le Grand {
1104cdf0e10cSrcweir bRet = sal_True;
1105cdf0e10cSrcweir }
1106ddde725dSArmin Le Grand }
1107ddde725dSArmin Le Grand }
1108cdf0e10cSrcweir
1109cdf0e10cSrcweir return bRet;
1110cdf0e10cSrcweir }
1111cdf0e10cSrcweir
onAccessibilityOptionsChanged()1112cdf0e10cSrcweir void View::onAccessibilityOptionsChanged()
1113cdf0e10cSrcweir {
1114cdf0e10cSrcweir if( mpViewSh )
1115cdf0e10cSrcweir {
1116cdf0e10cSrcweir ::sd::Window* pWindow = mpViewSh->GetActiveWindow();
1117cdf0e10cSrcweir if( pWindow )
1118cdf0e10cSrcweir {
1119cdf0e10cSrcweir const StyleSettings& rStyleSettings = pWindow->GetSettings().GetStyleSettings();
1120cdf0e10cSrcweir
1121cdf0e10cSrcweir sal_uInt16 nOutputSlot, nPreviewSlot;
1122cdf0e10cSrcweir
1123cdf0e10cSrcweir SvtAccessibilityOptions& aAccOptions = getAccessibilityOptions();
1124cdf0e10cSrcweir
1125cdf0e10cSrcweir if( mpViewSh->GetViewFrame() && mpViewSh->GetViewFrame()->GetDispatcher() )
1126cdf0e10cSrcweir {
1127cdf0e10cSrcweir if( rStyleSettings.GetHighContrastMode() )
1128cdf0e10cSrcweir {
1129cdf0e10cSrcweir nOutputSlot = SID_OUTPUT_QUALITY_CONTRAST;
1130cdf0e10cSrcweir }
1131cdf0e10cSrcweir else
1132cdf0e10cSrcweir {
1133cdf0e10cSrcweir nOutputSlot = SID_OUTPUT_QUALITY_COLOR;
1134cdf0e10cSrcweir }
1135cdf0e10cSrcweir
1136cdf0e10cSrcweir if( rStyleSettings.GetHighContrastMode() && aAccOptions.GetIsForPagePreviews() )
1137cdf0e10cSrcweir {
1138cdf0e10cSrcweir nPreviewSlot = SID_PREVIEW_QUALITY_CONTRAST;
1139cdf0e10cSrcweir }
1140cdf0e10cSrcweir else
1141cdf0e10cSrcweir {
1142cdf0e10cSrcweir nPreviewSlot = SID_PREVIEW_QUALITY_COLOR;
1143cdf0e10cSrcweir }
1144cdf0e10cSrcweir
1145cdf0e10cSrcweir mpViewSh->GetViewFrame()->GetDispatcher()->Execute( nOutputSlot, SFX_CALLMODE_ASYNCHRON );
1146cdf0e10cSrcweir mpViewSh->GetViewFrame()->GetDispatcher()->Execute( nPreviewSlot, SFX_CALLMODE_ASYNCHRON );
1147cdf0e10cSrcweir }
1148cdf0e10cSrcweir
1149cdf0e10cSrcweir mpViewSh->Invalidate();
1150cdf0e10cSrcweir }
1151cdf0e10cSrcweir }
1152cdf0e10cSrcweir }
1153cdf0e10cSrcweir
IMPL_LINK(View,OnParagraphInsertedHdl,::Outliner *,pOutliner)1154cdf0e10cSrcweir IMPL_LINK( View, OnParagraphInsertedHdl, ::Outliner *, pOutliner )
1155cdf0e10cSrcweir {
1156cdf0e10cSrcweir Paragraph* pPara = pOutliner->GetHdlParagraph();
1157cdf0e10cSrcweir SdrObject* pObj = GetTextEditObject();
1158cdf0e10cSrcweir
1159cdf0e10cSrcweir if( pPara && pObj )
1160cdf0e10cSrcweir {
1161cdf0e10cSrcweir SdPage* pPage = dynamic_cast< SdPage* >( pObj->GetPage() );
1162cdf0e10cSrcweir if( pPage )
1163cdf0e10cSrcweir pPage->onParagraphInserted( pOutliner, pPara, pObj );
1164cdf0e10cSrcweir }
1165cdf0e10cSrcweir return 0;
1166cdf0e10cSrcweir }
1167cdf0e10cSrcweir
1168cdf0e10cSrcweir /*************************************************************************
1169cdf0e10cSrcweir |*
1170cdf0e10cSrcweir |* Handler fuer das Loeschen von Seiten (Absaetzen)
1171cdf0e10cSrcweir |*
1172cdf0e10cSrcweir \************************************************************************/
1173cdf0e10cSrcweir
IMPL_LINK(View,OnParagraphRemovingHdl,::Outliner *,pOutliner)1174cdf0e10cSrcweir IMPL_LINK( View, OnParagraphRemovingHdl, ::Outliner *, pOutliner )
1175cdf0e10cSrcweir {
1176cdf0e10cSrcweir Paragraph* pPara = pOutliner->GetHdlParagraph();
1177cdf0e10cSrcweir SdrObject* pObj = GetTextEditObject();
1178cdf0e10cSrcweir
1179cdf0e10cSrcweir if( pPara && pObj )
1180cdf0e10cSrcweir {
1181cdf0e10cSrcweir SdPage* pPage = dynamic_cast< SdPage* >( pObj->GetPage() );
1182cdf0e10cSrcweir if( pPage )
1183cdf0e10cSrcweir pPage->onParagraphRemoving( pOutliner, pPara, pObj );
1184cdf0e10cSrcweir }
1185cdf0e10cSrcweir return 0;
1186cdf0e10cSrcweir }
1187cdf0e10cSrcweir
isRecordingUndo() const1188cdf0e10cSrcweir bool View::isRecordingUndo() const
1189cdf0e10cSrcweir {
1190cdf0e10cSrcweir if( mpDoc && mpDoc->IsUndoEnabled() )
1191cdf0e10cSrcweir {
1192cdf0e10cSrcweir sd::UndoManager* pUndoManager = mpDoc ? mpDoc->GetUndoManager() : 0;
1193cdf0e10cSrcweir return pUndoManager && pUndoManager->IsInListAction();
1194cdf0e10cSrcweir }
1195cdf0e10cSrcweir else
1196cdf0e10cSrcweir {
1197cdf0e10cSrcweir return false;
1198cdf0e10cSrcweir }
1199cdf0e10cSrcweir }
1200cdf0e10cSrcweir
AddCustomHdl()1201cdf0e10cSrcweir void View::AddCustomHdl()
1202cdf0e10cSrcweir {
1203cdf0e10cSrcweir maSmartTags.addCustomHandles( aHdl );
1204cdf0e10cSrcweir }
1205cdf0e10cSrcweir
updateHandles()1206cdf0e10cSrcweir void View::updateHandles()
1207cdf0e10cSrcweir {
1208cdf0e10cSrcweir AdjustMarkHdl();
1209cdf0e10cSrcweir }
1210cdf0e10cSrcweir
GetContext() const1211cdf0e10cSrcweir SdrViewContext View::GetContext() const
1212cdf0e10cSrcweir {
1213cdf0e10cSrcweir SdrViewContext eContext = SDRCONTEXT_STANDARD;
1214cdf0e10cSrcweir if( maSmartTags.getContext( eContext ) )
1215cdf0e10cSrcweir return eContext;
1216cdf0e10cSrcweir else
1217cdf0e10cSrcweir return FmFormView::GetContext();
1218cdf0e10cSrcweir }
1219cdf0e10cSrcweir
HasMarkablePoints() const1220cdf0e10cSrcweir sal_Bool View::HasMarkablePoints() const
1221cdf0e10cSrcweir {
1222cdf0e10cSrcweir if( maSmartTags.HasMarkablePoints() )
1223cdf0e10cSrcweir return true;
1224cdf0e10cSrcweir else
1225cdf0e10cSrcweir return FmFormView::HasMarkablePoints();
1226cdf0e10cSrcweir }
1227cdf0e10cSrcweir
GetMarkablePointCount() const1228cdf0e10cSrcweir sal_uLong View::GetMarkablePointCount() const
1229cdf0e10cSrcweir {
1230cdf0e10cSrcweir sal_uLong nCount = FmFormView::GetMarkablePointCount();
1231cdf0e10cSrcweir nCount += maSmartTags.GetMarkablePointCount();
1232cdf0e10cSrcweir return nCount;
1233cdf0e10cSrcweir }
1234cdf0e10cSrcweir
HasMarkedPoints() const1235cdf0e10cSrcweir sal_Bool View::HasMarkedPoints() const
1236cdf0e10cSrcweir {
1237cdf0e10cSrcweir if( maSmartTags.HasMarkedPoints() )
1238cdf0e10cSrcweir return true;
1239cdf0e10cSrcweir else
1240cdf0e10cSrcweir return FmFormView::HasMarkedPoints();
1241cdf0e10cSrcweir }
1242cdf0e10cSrcweir
GetMarkedPointCount() const1243cdf0e10cSrcweir sal_uLong View::GetMarkedPointCount() const
1244cdf0e10cSrcweir {
1245cdf0e10cSrcweir sal_uLong nCount = FmFormView::GetMarkedPointCount();
1246cdf0e10cSrcweir nCount += maSmartTags.GetMarkedPointCount();
1247cdf0e10cSrcweir return nCount;
1248cdf0e10cSrcweir }
1249cdf0e10cSrcweir
IsPointMarkable(const SdrHdl & rHdl) const1250cdf0e10cSrcweir sal_Bool View::IsPointMarkable(const SdrHdl& rHdl) const
1251cdf0e10cSrcweir {
1252cdf0e10cSrcweir if( maSmartTags.IsPointMarkable( rHdl ) )
1253cdf0e10cSrcweir return true;
1254cdf0e10cSrcweir else
1255cdf0e10cSrcweir return FmFormView::IsPointMarkable( rHdl );
1256cdf0e10cSrcweir }
1257cdf0e10cSrcweir
MarkPoint(SdrHdl & rHdl,sal_Bool bUnmark)1258cdf0e10cSrcweir sal_Bool View::MarkPoint(SdrHdl& rHdl, sal_Bool bUnmark )
1259cdf0e10cSrcweir {
1260cdf0e10cSrcweir if( maSmartTags.MarkPoint( rHdl, bUnmark ) )
1261cdf0e10cSrcweir return true;
1262cdf0e10cSrcweir else
1263cdf0e10cSrcweir return FmFormView::MarkPoint( rHdl, bUnmark );
1264cdf0e10cSrcweir }
1265cdf0e10cSrcweir
MarkPoints(const Rectangle * pRect,sal_Bool bUnmark)1266cdf0e10cSrcweir sal_Bool View::MarkPoints(const Rectangle* pRect, sal_Bool bUnmark)
1267cdf0e10cSrcweir {
1268cdf0e10cSrcweir if( maSmartTags.MarkPoints( pRect, bUnmark ) )
1269cdf0e10cSrcweir return true;
1270cdf0e10cSrcweir else
1271cdf0e10cSrcweir return FmFormView::MarkPoints( pRect, bUnmark );
1272cdf0e10cSrcweir }
1273cdf0e10cSrcweir
CheckPossibilities()1274cdf0e10cSrcweir void View::CheckPossibilities()
1275cdf0e10cSrcweir {
1276cdf0e10cSrcweir FmFormView::CheckPossibilities();
1277cdf0e10cSrcweir maSmartTags.CheckPossibilities();
1278cdf0e10cSrcweir }
1279cdf0e10cSrcweir
OnBeginPasteOrDrop(PasteOrDropInfos *)1280cdf0e10cSrcweir void View::OnBeginPasteOrDrop( PasteOrDropInfos* /*pInfos*/ )
1281cdf0e10cSrcweir {
1282cdf0e10cSrcweir }
1283cdf0e10cSrcweir
1284cdf0e10cSrcweir /** this is called after a paste or drop operation, make sure that the newly inserted paragraphs
1285cdf0e10cSrcweir get the correct style sheet. */
OnEndPasteOrDrop(PasteOrDropInfos * pInfos)1286cdf0e10cSrcweir void View::OnEndPasteOrDrop( PasteOrDropInfos* pInfos )
1287cdf0e10cSrcweir {
1288cdf0e10cSrcweir SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( GetTextEditObject() );
1289cdf0e10cSrcweir SdrOutliner* pOutliner = GetTextEditOutliner();
1290cdf0e10cSrcweir if( pOutliner && pTextObj && pTextObj->GetPage() )
1291cdf0e10cSrcweir {
1292cdf0e10cSrcweir SdPage* pPage = static_cast< SdPage* >( pTextObj->GetPage() );
1293cdf0e10cSrcweir
1294cdf0e10cSrcweir SfxStyleSheet* pStyleSheet = 0;
1295cdf0e10cSrcweir
1296cdf0e10cSrcweir const PresObjKind eKind = pPage->GetPresObjKind(pTextObj);
1297cdf0e10cSrcweir if( eKind != PRESOBJ_NONE )
1298cdf0e10cSrcweir pStyleSheet = pPage->GetStyleSheetForPresObj(eKind);
1299cdf0e10cSrcweir else
1300cdf0e10cSrcweir pStyleSheet = pTextObj->GetStyleSheet();
1301cdf0e10cSrcweir
1302cdf0e10cSrcweir if( eKind == PRESOBJ_OUTLINE )
1303cdf0e10cSrcweir {
1304cdf0e10cSrcweir // for outline shapes, set the correct outline style sheet for each
1305cdf0e10cSrcweir // new paragraph, depending on the paragraph depth
1306cdf0e10cSrcweir SfxStyleSheetBasePool* pStylePool = GetDoc()->GetStyleSheetPool();
1307cdf0e10cSrcweir
1308*cd9c0841SDamjan Jovanovic for ( sal_uInt32 nPara = pInfos->nStartPara; nPara <= pInfos->nEndPara; nPara++ )
1309cdf0e10cSrcweir {
1310cdf0e10cSrcweir sal_Int16 nDepth = pOutliner->GetDepth( nPara );
1311cdf0e10cSrcweir
1312cdf0e10cSrcweir SfxStyleSheet* pStyle = 0;
1313cdf0e10cSrcweir if( nDepth > 0 )
1314cdf0e10cSrcweir {
1315cdf0e10cSrcweir String aStyleSheetName( pStyleSheet->GetName() );
1316cdf0e10cSrcweir aStyleSheetName.Erase( aStyleSheetName.Len() - 1, 1 );
1317cdf0e10cSrcweir aStyleSheetName += String::CreateFromInt32( nDepth );
1318cdf0e10cSrcweir pStyle = static_cast<SfxStyleSheet*>( pStylePool->Find( aStyleSheetName, pStyleSheet->GetFamily() ) );
1319cdf0e10cSrcweir DBG_ASSERT( pStyle, "sd::View::OnEndPasteOrDrop(), Style not found!" );
1320cdf0e10cSrcweir }
1321cdf0e10cSrcweir
1322cdf0e10cSrcweir if( !pStyle )
1323cdf0e10cSrcweir pStyle = pStyleSheet;
1324cdf0e10cSrcweir
1325cdf0e10cSrcweir pOutliner->SetStyleSheet( nPara, pStyle );
1326cdf0e10cSrcweir }
1327cdf0e10cSrcweir }
1328cdf0e10cSrcweir else
1329cdf0e10cSrcweir {
1330cdf0e10cSrcweir // just put the object style on each new paragraph
1331cdf0e10cSrcweir for ( sal_uInt16 nPara = pInfos->nStartPara; nPara <= pInfos->nEndPara; nPara++ )
1332cdf0e10cSrcweir {
1333cdf0e10cSrcweir pOutliner->SetStyleSheet( nPara, pStyleSheet );
1334cdf0e10cSrcweir }
1335cdf0e10cSrcweir }
1336cdf0e10cSrcweir }
1337cdf0e10cSrcweir }
1338cdf0e10cSrcweir
ShouldToggleOn(const bool bBulletOnOffMode,const bool bNormalBullet)1339af89ca6eSOliver-Rainer Wittmann bool View::ShouldToggleOn(
1340af89ca6eSOliver-Rainer Wittmann const bool bBulletOnOffMode,
1341af89ca6eSOliver-Rainer Wittmann const bool bNormalBullet)
1342766ce4d0SZheng Fan {
1343766ce4d0SZheng Fan // If setting bullets/numbering by the dialog, always should toggle on.
1344766ce4d0SZheng Fan if (!bBulletOnOffMode)
1345766ce4d0SZheng Fan return sal_True;
1346766ce4d0SZheng Fan SdrModel* pSdrModel = GetModel();
1347766ce4d0SZheng Fan if (!pSdrModel)
1348766ce4d0SZheng Fan return sal_False;
1349766ce4d0SZheng Fan
1350766ce4d0SZheng Fan sal_Bool bToggleOn = sal_False;
1351766ce4d0SZheng Fan SdrOutliner* pOutliner = SdrMakeOutliner(OUTLINERMODE_TEXTOBJECT, pSdrModel);
1352766ce4d0SZheng Fan sal_uInt32 nMarkCount = GetMarkedObjectCount();
1353766ce4d0SZheng Fan for (sal_uInt32 nIndex = 0; nIndex < nMarkCount && !bToggleOn; nIndex++)
1354766ce4d0SZheng Fan {
1355766ce4d0SZheng Fan SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >(GetMarkedObjectByIndex(nIndex));
1356766ce4d0SZheng Fan if (!pTextObj || pTextObj->IsTextEditActive())
1357766ce4d0SZheng Fan continue;
1358766ce4d0SZheng Fan if (pTextObj->ISA(SdrTableObj))
1359766ce4d0SZheng Fan {
1360766ce4d0SZheng Fan SdrTableObj* pTableObj = dynamic_cast< SdrTableObj* >(pTextObj);
1361766ce4d0SZheng Fan if (!pTableObj)
1362766ce4d0SZheng Fan continue;
1363766ce4d0SZheng Fan CellPos aStart, aEnd;
1364766ce4d0SZheng Fan SvxTableController* pTableController = dynamic_cast< SvxTableController* >(getSelectionController().get());
1365766ce4d0SZheng Fan if (pTableController)
1366766ce4d0SZheng Fan {
1367766ce4d0SZheng Fan pTableController->getSelectedCells(aStart, aEnd);
1368766ce4d0SZheng Fan }
1369766ce4d0SZheng Fan else
1370766ce4d0SZheng Fan {
1371766ce4d0SZheng Fan aStart = pTableObj->getFirstCell();
1372766ce4d0SZheng Fan aEnd = pTableObj->getLastCell();
1373766ce4d0SZheng Fan }
1374766ce4d0SZheng Fan sal_Int32 nColCount = pTableObj->getColumnCount();
1375766ce4d0SZheng Fan for (sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow && !bToggleOn; nRow++)
1376766ce4d0SZheng Fan {
1377766ce4d0SZheng Fan for (sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol && !bToggleOn; nCol++)
1378766ce4d0SZheng Fan {
1379766ce4d0SZheng Fan sal_Int32 nIndex = nRow * nColCount + nCol;
1380766ce4d0SZheng Fan SdrText* pText = pTableObj->getText(nIndex);
1381766ce4d0SZheng Fan if (!pText || !pText->GetOutlinerParaObject())
1382766ce4d0SZheng Fan continue;
1383766ce4d0SZheng Fan pOutliner->SetText(*(pText->GetOutlinerParaObject()));
1384766ce4d0SZheng Fan sal_Int16 nStatus = pOutliner->GetBulletsNumberingStatus();
1385766ce4d0SZheng Fan bToggleOn = ((bNormalBullet && nStatus != 0) || (!bNormalBullet && nStatus != 1)) ? sal_True : bToggleOn;
1386766ce4d0SZheng Fan pOutliner->Clear();
1387766ce4d0SZheng Fan }
1388766ce4d0SZheng Fan }
1389766ce4d0SZheng Fan }
1390766ce4d0SZheng Fan else
1391766ce4d0SZheng Fan {
1392766ce4d0SZheng Fan OutlinerParaObject* pParaObj = pTextObj->GetOutlinerParaObject();
1393766ce4d0SZheng Fan if (!pParaObj)
1394766ce4d0SZheng Fan continue;
1395766ce4d0SZheng Fan pOutliner->SetText(*pParaObj);
1396766ce4d0SZheng Fan sal_Int16 nStatus = pOutliner->GetBulletsNumberingStatus();
1397766ce4d0SZheng Fan bToggleOn = ((bNormalBullet && nStatus != 0) || (!bNormalBullet && nStatus != 1)) ? sal_True : bToggleOn;
1398766ce4d0SZheng Fan pOutliner->Clear();
1399766ce4d0SZheng Fan }
1400766ce4d0SZheng Fan }
1401766ce4d0SZheng Fan delete pOutliner;
1402766ce4d0SZheng Fan return bToggleOn;
1403766ce4d0SZheng Fan }
1404766ce4d0SZheng Fan
ChangeMarkedObjectsBulletsNumbering(const bool bToggle,const bool bHandleBullets,const SvxNumRule * pNumRule,const bool bSwitchOff)1405af89ca6eSOliver-Rainer Wittmann void View::ChangeMarkedObjectsBulletsNumbering(
1406af89ca6eSOliver-Rainer Wittmann const bool bToggle,
1407af89ca6eSOliver-Rainer Wittmann const bool bHandleBullets,
1408af89ca6eSOliver-Rainer Wittmann const SvxNumRule* pNumRule,
1409af89ca6eSOliver-Rainer Wittmann const bool bSwitchOff )
1410766ce4d0SZheng Fan {
1411766ce4d0SZheng Fan SdrModel* pSdrModel = GetModel();
1412766ce4d0SZheng Fan Window* pWindow = dynamic_cast< Window* >(GetFirstOutputDevice());
1413766ce4d0SZheng Fan if (!pSdrModel || !pWindow)
1414766ce4d0SZheng Fan return;
1415766ce4d0SZheng Fan
1416af89ca6eSOliver-Rainer Wittmann const bool bUndoEnabled = pSdrModel->IsUndoEnabled();
1417af89ca6eSOliver-Rainer Wittmann SdrUndoGroup* pUndoGroup = bUndoEnabled ? new SdrUndoGroup(*pSdrModel) : 0;
1418af89ca6eSOliver-Rainer Wittmann
1419af89ca6eSOliver-Rainer Wittmann const bool bToggleOn =
1420af89ca6eSOliver-Rainer Wittmann bSwitchOff
1421af89ca6eSOliver-Rainer Wittmann ? false
1422af89ca6eSOliver-Rainer Wittmann : ShouldToggleOn( bToggle, bHandleBullets );
1423af89ca6eSOliver-Rainer Wittmann
1424766ce4d0SZheng Fan SdrOutliner* pOutliner = SdrMakeOutliner(OUTLINERMODE_TEXTOBJECT, pSdrModel);
1425766ce4d0SZheng Fan OutlinerView* pOutlinerView = new OutlinerView(pOutliner, pWindow);
1426766ce4d0SZheng Fan
1427af89ca6eSOliver-Rainer Wittmann const sal_uInt32 nMarkCount = GetMarkedObjectCount();
1428766ce4d0SZheng Fan for (sal_uInt32 nIndex = 0; nIndex < nMarkCount; nIndex++)
1429766ce4d0SZheng Fan {
1430766ce4d0SZheng Fan SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >(GetMarkedObjectByIndex(nIndex));
1431766ce4d0SZheng Fan if (!pTextObj || pTextObj->IsTextEditActive())
1432766ce4d0SZheng Fan continue;
1433766ce4d0SZheng Fan if (pTextObj->ISA(SdrTableObj))
1434766ce4d0SZheng Fan {
1435766ce4d0SZheng Fan SdrTableObj* pTableObj = dynamic_cast< SdrTableObj* >(pTextObj);
1436766ce4d0SZheng Fan if (!pTableObj)
1437766ce4d0SZheng Fan continue;
1438766ce4d0SZheng Fan CellPos aStart, aEnd;
1439766ce4d0SZheng Fan SvxTableController* pTableController = dynamic_cast< SvxTableController* >(getSelectionController().get());
1440766ce4d0SZheng Fan if (pTableController)
1441766ce4d0SZheng Fan {
1442766ce4d0SZheng Fan pTableController->getSelectedCells(aStart, aEnd);
1443766ce4d0SZheng Fan }
1444766ce4d0SZheng Fan else
1445766ce4d0SZheng Fan {
1446766ce4d0SZheng Fan aStart = pTableObj->getFirstCell();
1447766ce4d0SZheng Fan aEnd = pTableObj->getLastCell();
1448766ce4d0SZheng Fan }
1449766ce4d0SZheng Fan sal_Int32 nColCount = pTableObj->getColumnCount();
1450766ce4d0SZheng Fan for (sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++)
1451766ce4d0SZheng Fan {
1452766ce4d0SZheng Fan for (sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++)
1453766ce4d0SZheng Fan {
1454766ce4d0SZheng Fan sal_Int32 nIndex = nRow * nColCount + nCol;
1455766ce4d0SZheng Fan SdrText* pText = pTableObj->getText(nIndex);
1456766ce4d0SZheng Fan if (!pText || !pText->GetOutlinerParaObject())
1457766ce4d0SZheng Fan continue;
1458766ce4d0SZheng Fan
1459766ce4d0SZheng Fan pOutliner->SetText(*(pText->GetOutlinerParaObject()));
1460766ce4d0SZheng Fan if (bUndoEnabled)
1461766ce4d0SZheng Fan {
1462766ce4d0SZheng Fan SdrUndoObjSetText* pTxtUndo = dynamic_cast< SdrUndoObjSetText* >(pSdrModel->GetSdrUndoFactory().CreateUndoObjectSetText(*pTextObj, nIndex));
1463766ce4d0SZheng Fan pUndoGroup->AddAction(pTxtUndo);
1464766ce4d0SZheng Fan }
1465af89ca6eSOliver-Rainer Wittmann if ( !bToggleOn )
1466af89ca6eSOliver-Rainer Wittmann {
1467af89ca6eSOliver-Rainer Wittmann pOutlinerView->SwitchOffBulletsNumbering();
1468af89ca6eSOliver-Rainer Wittmann }
1469af89ca6eSOliver-Rainer Wittmann else
1470af89ca6eSOliver-Rainer Wittmann {
1471af89ca6eSOliver-Rainer Wittmann pOutlinerView->ApplyBulletsNumbering( bHandleBullets, pNumRule, bToggle );
1472af89ca6eSOliver-Rainer Wittmann }
1473766ce4d0SZheng Fan sal_uInt32 nParaCount = pOutliner->GetParagraphCount();
1474c2eaa082SDamjan Jovanovic pText->SetOutlinerParaObject(pOutliner->CreateParaObject(0, nParaCount));
1475766ce4d0SZheng Fan pOutliner->Clear();
1476766ce4d0SZheng Fan }
1477766ce4d0SZheng Fan }
1478766ce4d0SZheng Fan // Broadcast the object change event.
1479766ce4d0SZheng Fan if (!pTextObj->AdjustTextFrameWidthAndHeight())
1480766ce4d0SZheng Fan {
1481766ce4d0SZheng Fan pTextObj->SetChanged();
1482766ce4d0SZheng Fan pTextObj->BroadcastObjectChange();
1483766ce4d0SZheng Fan }
1484766ce4d0SZheng Fan }
1485766ce4d0SZheng Fan else
1486766ce4d0SZheng Fan {
1487766ce4d0SZheng Fan OutlinerParaObject* pParaObj = pTextObj->GetOutlinerParaObject();
1488766ce4d0SZheng Fan if (!pParaObj)
1489766ce4d0SZheng Fan continue;
1490766ce4d0SZheng Fan pOutliner->SetText(*pParaObj);
1491766ce4d0SZheng Fan if (bUndoEnabled)
1492766ce4d0SZheng Fan {
1493766ce4d0SZheng Fan SdrUndoObjSetText* pTxtUndo = dynamic_cast< SdrUndoObjSetText* >(pSdrModel->GetSdrUndoFactory().CreateUndoObjectSetText(*pTextObj, 0));
1494766ce4d0SZheng Fan pUndoGroup->AddAction(pTxtUndo);
1495766ce4d0SZheng Fan }
1496af89ca6eSOliver-Rainer Wittmann if ( !bToggleOn )
1497af89ca6eSOliver-Rainer Wittmann {
1498af89ca6eSOliver-Rainer Wittmann pOutlinerView->SwitchOffBulletsNumbering();
1499af89ca6eSOliver-Rainer Wittmann }
1500af89ca6eSOliver-Rainer Wittmann else
1501af89ca6eSOliver-Rainer Wittmann {
1502af89ca6eSOliver-Rainer Wittmann pOutlinerView->ApplyBulletsNumbering( bHandleBullets, pNumRule, bToggle );
1503af89ca6eSOliver-Rainer Wittmann }
1504766ce4d0SZheng Fan sal_uInt32 nParaCount = pOutliner->GetParagraphCount();
1505c2eaa082SDamjan Jovanovic pTextObj->SetOutlinerParaObject(pOutliner->CreateParaObject(0, nParaCount));
1506766ce4d0SZheng Fan pOutliner->Clear();
1507766ce4d0SZheng Fan }
1508766ce4d0SZheng Fan }
1509766ce4d0SZheng Fan
1510af89ca6eSOliver-Rainer Wittmann if ( bUndoEnabled && pUndoGroup->GetActionCount() > 0 )
1511766ce4d0SZheng Fan {
1512766ce4d0SZheng Fan pSdrModel->BegUndo();
1513766ce4d0SZheng Fan pSdrModel->AddUndo(pUndoGroup);
1514766ce4d0SZheng Fan pSdrModel->EndUndo();
1515766ce4d0SZheng Fan }
1516af89ca6eSOliver-Rainer Wittmann
1517766ce4d0SZheng Fan delete pOutliner;
1518766ce4d0SZheng Fan delete pOutlinerView;
1519766ce4d0SZheng Fan }
1520766ce4d0SZheng Fan
1521cdf0e10cSrcweir } // end of namespace sd
1522