xref: /trunk/main/sd/source/ui/view/sdview.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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