1*efeef26fSAndrew Rist /**************************************************************
2*efeef26fSAndrew Rist *
3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*efeef26fSAndrew Rist * distributed with this work for additional information
6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10*efeef26fSAndrew Rist *
11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*efeef26fSAndrew Rist *
13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17*efeef26fSAndrew Rist * specific language governing permissions and limitations
18*efeef26fSAndrew Rist * under the License.
19*efeef26fSAndrew Rist *
20*efeef26fSAndrew Rist *************************************************************/
21*efeef26fSAndrew Rist
22*efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir
28cdf0e10cSrcweir #include "hintids.hxx"
29cdf0e10cSrcweir #include <svl/aeitem.hxx>
30cdf0e10cSrcweir #include <svl/itempool.hxx>
31cdf0e10cSrcweir #include <svx/svdobj.hxx>
32cdf0e10cSrcweir #include <svx/svdview.hxx>
33cdf0e10cSrcweir #include <svx/svdpage.hxx>
34cdf0e10cSrcweir #include <editeng/editview.hxx>
35cdf0e10cSrcweir #include <editeng/editeng.hxx>
36cdf0e10cSrcweir #include <editeng/outliner.hxx>
37cdf0e10cSrcweir #include <svx/fmview.hxx>
38cdf0e10cSrcweir #include <svx/dataaccessdescriptor.hxx>
39cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
40cdf0e10cSrcweir #include <doc.hxx>
41cdf0e10cSrcweir #include <editeng/langitem.hxx>
42cdf0e10cSrcweir #include <linguistic/lngprops.hxx>
43cdf0e10cSrcweir #include <editeng/unolingu.hxx>
44cdf0e10cSrcweir #include <svx/fontworkbar.hxx>
45cdf0e10cSrcweir #include <svx/fontworkgallery.hxx>
46cdf0e10cSrcweir #include <editeng/eeitem.hxx>
47cdf0e10cSrcweir #include <svx/svdogrp.hxx>
48cdf0e10cSrcweir #include <svx/svdetc.hxx>
49cdf0e10cSrcweir #include <editeng/editstat.hxx>
50cdf0e10cSrcweir #include <sfx2/request.hxx>
51cdf0e10cSrcweir #include <sfx2/bindings.hxx>
52cdf0e10cSrcweir #include <sfx2/printer.hxx>
53cdf0e10cSrcweir #include <svx/fmglob.hxx>
54cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
55cdf0e10cSrcweir #include <svx/svdoutl.hxx>
56cdf0e10cSrcweir
57cdf0e10cSrcweir #include "view.hxx"
58cdf0e10cSrcweir #include "wrtsh.hxx"
59cdf0e10cSrcweir #include "viewopt.hxx"
60cdf0e10cSrcweir #include "cmdid.h"
61cdf0e10cSrcweir #include "drawsh.hxx"
62cdf0e10cSrcweir #include "drwbassh.hxx"
63cdf0e10cSrcweir #include "beziersh.hxx"
64cdf0e10cSrcweir #include "conrect.hxx"
65cdf0e10cSrcweir #include "conpoly.hxx"
66cdf0e10cSrcweir #include "conarc.hxx"
67cdf0e10cSrcweir #include "conform.hxx"
68cdf0e10cSrcweir #include "concustomshape.hxx"
69cdf0e10cSrcweir #include "dselect.hxx"
70cdf0e10cSrcweir #include "edtwin.hxx"
71cdf0e10cSrcweir
72cdf0e10cSrcweir // #108784#
73cdf0e10cSrcweir #include <dcontact.hxx>
74cdf0e10cSrcweir
75cdf0e10cSrcweir // #108784#
76cdf0e10cSrcweir #include <svx/svdpagv.hxx>
77cdf0e10cSrcweir #include <svx/extrusionbar.hxx>
78cdf0e10cSrcweir #include <vcl/svapp.hxx>
79cdf0e10cSrcweir
80cdf0e10cSrcweir using namespace ::com::sun::star;
81cdf0e10cSrcweir /*--------------------------------------------------------------------
82cdf0e10cSrcweir Beschreibung: Drawing-Ids ausfuehren
83cdf0e10cSrcweir --------------------------------------------------------------------*/
84cdf0e10cSrcweir
ExecDraw(SfxRequest & rReq)85cdf0e10cSrcweir void SwView::ExecDraw(SfxRequest& rReq)
86cdf0e10cSrcweir {
87cdf0e10cSrcweir const SfxItemSet *pArgs = rReq.GetArgs();
88cdf0e10cSrcweir const SfxPoolItem* pItem;
89cdf0e10cSrcweir const SfxAllEnumItem* pEItem = 0;
90cdf0e10cSrcweir const SfxStringItem* pStringItem = 0;
91cdf0e10cSrcweir SdrView *pSdrView = pWrtShell->GetDrawView();
92cdf0e10cSrcweir sal_Bool bDeselect = sal_False;
93cdf0e10cSrcweir
94cdf0e10cSrcweir sal_uInt16 nSlotId = rReq.GetSlot();
95cdf0e10cSrcweir if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(GetPool().GetWhich(nSlotId), sal_False, &pItem))
96cdf0e10cSrcweir {
97cdf0e10cSrcweir pEItem = dynamic_cast< const SfxAllEnumItem*>(pItem);
98cdf0e10cSrcweir pStringItem = dynamic_cast< const SfxStringItem*>(pItem);
99cdf0e10cSrcweir }
100cdf0e10cSrcweir
101cdf0e10cSrcweir if (SID_INSERT_DRAW == nSlotId && pEItem)
102cdf0e10cSrcweir switch ( pEItem->GetValue() )
103cdf0e10cSrcweir {
104cdf0e10cSrcweir case SVX_SNAP_DRAW_SELECT: nSlotId = SID_OBJECT_SELECT; break;
105cdf0e10cSrcweir case SVX_SNAP_DRAW_LINE: nSlotId = SID_DRAW_LINE; break;
106cdf0e10cSrcweir case SVX_SNAP_DRAW_RECT: nSlotId = SID_DRAW_RECT; break;
107cdf0e10cSrcweir case SVX_SNAP_DRAW_ELLIPSE: nSlotId = SID_DRAW_ELLIPSE; break;
108cdf0e10cSrcweir case SVX_SNAP_DRAW_POLYGON_NOFILL: nSlotId = SID_DRAW_POLYGON_NOFILL; break;
109cdf0e10cSrcweir case SVX_SNAP_DRAW_BEZIER_NOFILL: nSlotId = SID_DRAW_BEZIER_NOFILL; break;
110cdf0e10cSrcweir case SVX_SNAP_DRAW_FREELINE_NOFILL: nSlotId = SID_DRAW_FREELINE_NOFILL; break;
111cdf0e10cSrcweir case SVX_SNAP_DRAW_ARC: nSlotId = SID_DRAW_ARC; break;
112cdf0e10cSrcweir case SVX_SNAP_DRAW_PIE: nSlotId = SID_DRAW_PIE; break;
113cdf0e10cSrcweir case SVX_SNAP_DRAW_CIRCLECUT: nSlotId = SID_DRAW_CIRCLECUT; break;
114cdf0e10cSrcweir case SVX_SNAP_DRAW_TEXT: nSlotId = SID_DRAW_TEXT; break;
115cdf0e10cSrcweir case SVX_SNAP_DRAW_TEXT_VERTICAL: nSlotId = SID_DRAW_TEXT_VERTICAL; break;
116cdf0e10cSrcweir case SVX_SNAP_DRAW_TEXT_MARQUEE: nSlotId = SID_DRAW_TEXT_MARQUEE; break;
117cdf0e10cSrcweir case SVX_SNAP_DRAW_CAPTION: nSlotId = SID_DRAW_CAPTION; break;
118cdf0e10cSrcweir case SVX_SNAP_DRAW_CAPTION_VERTICAL: nSlotId = SID_DRAW_CAPTION_VERTICAL; break;
119cdf0e10cSrcweir }
120cdf0e10cSrcweir
121cdf0e10cSrcweir if (nSlotId == SID_OBJECT_SELECT && nFormSfxId == nSlotId)
122cdf0e10cSrcweir {
123cdf0e10cSrcweir bDeselect = sal_True;
124cdf0e10cSrcweir }
125cdf0e10cSrcweir else if (nSlotId == SID_FM_CREATE_CONTROL)
126cdf0e10cSrcweir {
127cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pIdentifierItem, SfxUInt16Item, SID_FM_CONTROL_IDENTIFIER, sal_False );
128cdf0e10cSrcweir if( pIdentifierItem )
129cdf0e10cSrcweir {
130cdf0e10cSrcweir sal_uInt16 nNewId = pIdentifierItem->GetValue();
131cdf0e10cSrcweir if (nNewId == nFormSfxId)
132cdf0e10cSrcweir {
133cdf0e10cSrcweir bDeselect = sal_True;
134cdf0e10cSrcweir GetViewFrame()->GetDispatcher()->Execute(SID_FM_LEAVE_CREATE); // Button soll rauspoppen
135cdf0e10cSrcweir }
136cdf0e10cSrcweir }
137cdf0e10cSrcweir }
138cdf0e10cSrcweir else if( nSlotId == SID_FM_CREATE_FIELDCONTROL)
139cdf0e10cSrcweir {
140cdf0e10cSrcweir FmFormView* pFormView = PTR_CAST( FmFormView, pSdrView );
141cdf0e10cSrcweir if ( pFormView )
142cdf0e10cSrcweir {
143cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pDescriptorItem, SfxUnoAnyItem, SID_FM_DATACCESS_DESCRIPTOR, sal_False );
144cdf0e10cSrcweir DBG_ASSERT( pDescriptorItem, "SwView::ExecDraw(SID_FM_CREATE_FIELDCONTROL): invalid request args!" );
145cdf0e10cSrcweir if( pDescriptorItem )
146cdf0e10cSrcweir {
147cdf0e10cSrcweir ::svx::ODataAccessDescriptor aDescriptor( pDescriptorItem->GetValue() );
148cdf0e10cSrcweir SdrObject* pObj = pFormView->CreateFieldControl( aDescriptor );
149cdf0e10cSrcweir
150cdf0e10cSrcweir if ( pObj )
151cdf0e10cSrcweir {
152cdf0e10cSrcweir Size aDocSize(pWrtShell->GetDocSize());
153cdf0e10cSrcweir const SwRect& rVisArea = pWrtShell->VisArea();
154cdf0e10cSrcweir Point aStartPos = rVisArea.Center();
155cdf0e10cSrcweir if(rVisArea.Width() > aDocSize.Width())
156cdf0e10cSrcweir aStartPos.X() = aDocSize.Width() / 2 + rVisArea.Left();
157cdf0e10cSrcweir if(rVisArea.Height() > aDocSize.Height())
158cdf0e10cSrcweir aStartPos.Y() = aDocSize.Height() / 2 + rVisArea.Top();
159cdf0e10cSrcweir
160cdf0e10cSrcweir //determine the size of the object
161cdf0e10cSrcweir if(pObj->IsGroupObject())
162cdf0e10cSrcweir {
163cdf0e10cSrcweir const Rectangle& rBoundRect = ((SdrObjGroup*)pObj)->GetCurrentBoundRect();
164cdf0e10cSrcweir aStartPos.X() -= rBoundRect.GetWidth()/2;
165cdf0e10cSrcweir aStartPos.Y() -= rBoundRect.GetHeight()/2;
166cdf0e10cSrcweir }
167cdf0e10cSrcweir
168cdf0e10cSrcweir // TODO: unmark all other
169cdf0e10cSrcweir pWrtShell->EnterStdMode();
170cdf0e10cSrcweir pWrtShell->SwFEShell::InsertDrawObj( *pObj, aStartPos );
171cdf0e10cSrcweir }
172cdf0e10cSrcweir }
173cdf0e10cSrcweir }
174cdf0e10cSrcweir }
175cdf0e10cSrcweir else if ( nSlotId == SID_FONTWORK_GALLERY_FLOATER )
176cdf0e10cSrcweir {
177cdf0e10cSrcweir Window* pWin = &( pWrtShell->GetView().GetViewFrame()->GetWindow() );
178cdf0e10cSrcweir
179cdf0e10cSrcweir if ( pWin )
180cdf0e10cSrcweir pWin->EnterWait();
181cdf0e10cSrcweir
182cdf0e10cSrcweir if( !pWrtShell->HasDrawView() )
183cdf0e10cSrcweir pWrtShell->MakeDrawView();
184cdf0e10cSrcweir
185cdf0e10cSrcweir pSdrView = pWrtShell->GetDrawView();
186cdf0e10cSrcweir if ( pSdrView )
187cdf0e10cSrcweir {
188cdf0e10cSrcweir SdrObject* pObj = NULL;
189cdf0e10cSrcweir svx::FontWorkGalleryDialog aDlg( pSdrView, pWin, nSlotId );
190cdf0e10cSrcweir aDlg.SetSdrObjectRef( &pObj, pSdrView->GetModel() );
191cdf0e10cSrcweir aDlg.Execute();
192cdf0e10cSrcweir if ( pObj )
193cdf0e10cSrcweir {
194cdf0e10cSrcweir Size aDocSize( pWrtShell->GetDocSize() );
195cdf0e10cSrcweir const SwRect& rVisArea = pWrtShell->VisArea();
196cdf0e10cSrcweir Point aPos( rVisArea.Center() );
197cdf0e10cSrcweir Size aSize;
198cdf0e10cSrcweir Size aPrefSize( pObj->GetSnapRect().GetSize() );
199cdf0e10cSrcweir
200cdf0e10cSrcweir if( rVisArea.Width() > aDocSize.Width())
201cdf0e10cSrcweir aPos.X() = aDocSize.Width() / 2 + rVisArea.Left();
202cdf0e10cSrcweir
203cdf0e10cSrcweir if(rVisArea.Height() > aDocSize.Height())
204cdf0e10cSrcweir aPos.Y() = aDocSize.Height() / 2 + rVisArea.Top();
205cdf0e10cSrcweir
206cdf0e10cSrcweir if( aPrefSize.Width() && aPrefSize.Height() )
207cdf0e10cSrcweir {
208cdf0e10cSrcweir if( pWin )
209cdf0e10cSrcweir aSize = pWin->PixelToLogic( aPrefSize, MAP_TWIP );
210cdf0e10cSrcweir else
211cdf0e10cSrcweir aSize = Application::GetDefaultDevice()->PixelToLogic( aPrefSize, MAP_TWIP );
212cdf0e10cSrcweir }
213cdf0e10cSrcweir else
214cdf0e10cSrcweir aSize = Size( 2835, 2835 );
215cdf0e10cSrcweir
216cdf0e10cSrcweir pWrtShell->EnterStdMode();
217cdf0e10cSrcweir pWrtShell->SwFEShell::InsertDrawObj( *pObj, aPos );
218cdf0e10cSrcweir rReq.Ignore ();
219cdf0e10cSrcweir }
220cdf0e10cSrcweir }
221cdf0e10cSrcweir if( pWin )
222cdf0e10cSrcweir pWin->LeaveWait();
223cdf0e10cSrcweir }
224cdf0e10cSrcweir
225cdf0e10cSrcweir if( nSlotId == SID_DRAW_CS_ID )
226cdf0e10cSrcweir {
227cdf0e10cSrcweir //deselect if same custom shape is selected again
228cdf0e10cSrcweir SwDrawBase* pFuncPtr = GetDrawFuncPtr();
229cdf0e10cSrcweir if( pFuncPtr && pFuncPtr->GetSlotId() == SID_DRAW_CS_ID )
230cdf0e10cSrcweir {
231cdf0e10cSrcweir ConstCustomShape* pConstCustomShape = (ConstCustomShape*)(pFuncPtr);
232cdf0e10cSrcweir rtl::OUString aNew = ConstCustomShape::GetShapeTypeFromRequest( rReq );
233cdf0e10cSrcweir rtl::OUString aOld = pConstCustomShape->GetShapeType();
234cdf0e10cSrcweir if( aNew == aOld )
235cdf0e10cSrcweir {
236cdf0e10cSrcweir bDeselect = true;
237cdf0e10cSrcweir }
238cdf0e10cSrcweir }
239cdf0e10cSrcweir }
240cdf0e10cSrcweir
241cdf0e10cSrcweir //deselect if same shape is selected again (but different custom shapes do have same slot id)
242cdf0e10cSrcweir if ( bDeselect || (nSlotId == nDrawSfxId &&
243cdf0e10cSrcweir (!pStringItem || (pStringItem->GetValue() == sDrawCustom))
244cdf0e10cSrcweir && (nSlotId != SID_DRAW_CS_ID) ) )
245cdf0e10cSrcweir {
246cdf0e10cSrcweir if (GetDrawFuncPtr())
247cdf0e10cSrcweir {
248cdf0e10cSrcweir GetDrawFuncPtr()->Deactivate();
249cdf0e10cSrcweir SetDrawFuncPtr(NULL);
250cdf0e10cSrcweir }
251cdf0e10cSrcweir
252cdf0e10cSrcweir if (pWrtShell->IsObjSelected() && !pWrtShell->IsSelFrmMode())
253cdf0e10cSrcweir pWrtShell->EnterSelFrmMode(NULL);
254cdf0e10cSrcweir LeaveDrawCreate();
255cdf0e10cSrcweir
256cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW);
257cdf0e10cSrcweir
258cdf0e10cSrcweir AttrChangedNotify(pWrtShell);
259cdf0e10cSrcweir return;
260cdf0e10cSrcweir }
261cdf0e10cSrcweir
262cdf0e10cSrcweir LeaveDrawCreate();
263cdf0e10cSrcweir
264cdf0e10cSrcweir if (pWrtShell->IsFrmSelected())
265cdf0e10cSrcweir pWrtShell->EnterStdMode(); // wegen Bug #45639
266cdf0e10cSrcweir
267cdf0e10cSrcweir SwDrawBase* pFuncPtr = NULL;
268cdf0e10cSrcweir
269cdf0e10cSrcweir switch (nSlotId)
270cdf0e10cSrcweir {
271cdf0e10cSrcweir case SID_OBJECT_SELECT:
272cdf0e10cSrcweir case SID_DRAW_SELECT:
273cdf0e10cSrcweir pFuncPtr = new DrawSelection(pWrtShell, pEditWin, this);
274cdf0e10cSrcweir nDrawSfxId = nFormSfxId = SID_OBJECT_SELECT;
275cdf0e10cSrcweir sDrawCustom.Erase();
276cdf0e10cSrcweir break;
277cdf0e10cSrcweir
278cdf0e10cSrcweir case SID_DRAW_LINE:
279cdf0e10cSrcweir case SID_DRAW_RECT:
280cdf0e10cSrcweir case SID_DRAW_ELLIPSE:
281cdf0e10cSrcweir case SID_DRAW_TEXT:
282cdf0e10cSrcweir case SID_DRAW_TEXT_VERTICAL:
283cdf0e10cSrcweir case SID_DRAW_TEXT_MARQUEE:
284cdf0e10cSrcweir case SID_DRAW_CAPTION:
285cdf0e10cSrcweir case SID_DRAW_CAPTION_VERTICAL:
286cdf0e10cSrcweir pFuncPtr = new ConstRectangle(pWrtShell, pEditWin, this);
287cdf0e10cSrcweir nDrawSfxId = nSlotId;
288cdf0e10cSrcweir sDrawCustom.Erase();
289cdf0e10cSrcweir break;
290cdf0e10cSrcweir
291cdf0e10cSrcweir case SID_DRAW_POLYGON_NOFILL:
292cdf0e10cSrcweir case SID_DRAW_BEZIER_NOFILL:
293cdf0e10cSrcweir case SID_DRAW_FREELINE_NOFILL:
294cdf0e10cSrcweir pFuncPtr = new ConstPolygon(pWrtShell, pEditWin, this);
295cdf0e10cSrcweir nDrawSfxId = nSlotId;
296cdf0e10cSrcweir sDrawCustom.Erase();
297cdf0e10cSrcweir break;
298cdf0e10cSrcweir
299cdf0e10cSrcweir case SID_DRAW_ARC:
300cdf0e10cSrcweir case SID_DRAW_PIE:
301cdf0e10cSrcweir case SID_DRAW_CIRCLECUT:
302cdf0e10cSrcweir pFuncPtr = new ConstArc(pWrtShell, pEditWin, this);
303cdf0e10cSrcweir nDrawSfxId = nSlotId;
304cdf0e10cSrcweir sDrawCustom.Erase();
305cdf0e10cSrcweir break;
306cdf0e10cSrcweir
307cdf0e10cSrcweir case SID_FM_CREATE_CONTROL:
308cdf0e10cSrcweir {
309cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pIdentifierItem, SfxUInt16Item, SID_FM_CONTROL_IDENTIFIER, sal_False );
310cdf0e10cSrcweir if( pIdentifierItem )
311cdf0e10cSrcweir nSlotId = pIdentifierItem->GetValue();
312cdf0e10cSrcweir pFuncPtr = new ConstFormControl(pWrtShell, pEditWin, this);
313cdf0e10cSrcweir nFormSfxId = nSlotId;
314cdf0e10cSrcweir }
315cdf0e10cSrcweir break;
316cdf0e10cSrcweir
317cdf0e10cSrcweir case SID_DRAWTBX_CS_BASIC :
318cdf0e10cSrcweir case SID_DRAWTBX_CS_SYMBOL :
319cdf0e10cSrcweir case SID_DRAWTBX_CS_ARROW :
320cdf0e10cSrcweir case SID_DRAWTBX_CS_FLOWCHART :
321cdf0e10cSrcweir case SID_DRAWTBX_CS_CALLOUT :
322cdf0e10cSrcweir case SID_DRAWTBX_CS_STAR :
323cdf0e10cSrcweir case SID_DRAW_CS_ID :
324cdf0e10cSrcweir {
325cdf0e10cSrcweir pFuncPtr = new ConstCustomShape(pWrtShell, pEditWin, this, rReq );
326cdf0e10cSrcweir nDrawSfxId = nSlotId;
327cdf0e10cSrcweir if ( nSlotId != SID_DRAW_CS_ID )
328cdf0e10cSrcweir {
329cdf0e10cSrcweir if ( pStringItem )
330cdf0e10cSrcweir {
331cdf0e10cSrcweir sDrawCustom = pStringItem->GetValue();
332cdf0e10cSrcweir aCurrShapeEnumCommand[ nSlotId - SID_DRAWTBX_CS_BASIC ] = sDrawCustom;
333cdf0e10cSrcweir SfxBindings& rBind = GetViewFrame()->GetBindings();
334cdf0e10cSrcweir rBind.Invalidate( nSlotId );
335cdf0e10cSrcweir rBind.Update( nSlotId );
336cdf0e10cSrcweir }
337cdf0e10cSrcweir }
338cdf0e10cSrcweir }
339cdf0e10cSrcweir break;
340cdf0e10cSrcweir
341cdf0e10cSrcweir default:
342cdf0e10cSrcweir break;
343cdf0e10cSrcweir }
344cdf0e10cSrcweir
345cdf0e10cSrcweir static sal_uInt16 __READONLY_DATA aInval[] =
346cdf0e10cSrcweir {
347cdf0e10cSrcweir // Slot-Ids muessen beim Aufruf von Invalidate sortiert sein!
348cdf0e10cSrcweir SID_ATTRIBUTES_AREA,
349cdf0e10cSrcweir SID_INSERT_DRAW,
350cdf0e10cSrcweir 0
351cdf0e10cSrcweir };
352cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate(aInval);
353cdf0e10cSrcweir
354cdf0e10cSrcweir sal_Bool bEndTextEdit = sal_True;
355cdf0e10cSrcweir if (pFuncPtr)
356cdf0e10cSrcweir {
357cdf0e10cSrcweir if (GetDrawFuncPtr())
358cdf0e10cSrcweir {
359cdf0e10cSrcweir GetDrawFuncPtr()->Deactivate();
360cdf0e10cSrcweir SetDrawFuncPtr(NULL);
361cdf0e10cSrcweir }
362cdf0e10cSrcweir
363cdf0e10cSrcweir SetDrawFuncPtr(pFuncPtr);
364cdf0e10cSrcweir AttrChangedNotify(pWrtShell);
365cdf0e10cSrcweir
366cdf0e10cSrcweir pFuncPtr->Activate(nSlotId);
367cdf0e10cSrcweir NoRotate();
368cdf0e10cSrcweir if(rReq.GetModifier() == KEY_MOD1)
369cdf0e10cSrcweir {
370cdf0e10cSrcweir if(SID_OBJECT_SELECT == nDrawSfxId )
371cdf0e10cSrcweir {
372cdf0e10cSrcweir pWrtShell->GotoObj(sal_True);
373cdf0e10cSrcweir }
374cdf0e10cSrcweir else
375cdf0e10cSrcweir {
376cdf0e10cSrcweir pFuncPtr->CreateDefaultObject();
377cdf0e10cSrcweir pFuncPtr->Deactivate();
378cdf0e10cSrcweir SetDrawFuncPtr(NULL);
379cdf0e10cSrcweir LeaveDrawCreate();
380cdf0e10cSrcweir pWrtShell->EnterStdMode();
381cdf0e10cSrcweir SdrView *pTmpSdrView = pWrtShell->GetDrawView();
382cdf0e10cSrcweir const SdrMarkList& rMarkList = pTmpSdrView->GetMarkedObjectList();
383cdf0e10cSrcweir if(rMarkList.GetMarkCount() == 1 &&
384cdf0e10cSrcweir (SID_DRAW_TEXT == nSlotId || SID_DRAW_TEXT_VERTICAL == nSlotId ||
385cdf0e10cSrcweir SID_DRAW_TEXT_MARQUEE == nSlotId ))
386cdf0e10cSrcweir {
387cdf0e10cSrcweir SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
388cdf0e10cSrcweir BeginTextEdit(pObj);
389cdf0e10cSrcweir bEndTextEdit = sal_False;
390cdf0e10cSrcweir }
391cdf0e10cSrcweir }
392cdf0e10cSrcweir }
393cdf0e10cSrcweir }
394cdf0e10cSrcweir else
395cdf0e10cSrcweir {
396cdf0e10cSrcweir if (pWrtShell->IsObjSelected() && !pWrtShell->IsSelFrmMode())
397cdf0e10cSrcweir pWrtShell->EnterSelFrmMode(NULL);
398cdf0e10cSrcweir }
399cdf0e10cSrcweir
400cdf0e10cSrcweir if(bEndTextEdit && pSdrView && pSdrView->IsTextEdit())
401cdf0e10cSrcweir pSdrView->SdrEndTextEdit( sal_True );
402cdf0e10cSrcweir
403cdf0e10cSrcweir AttrChangedNotify(pWrtShell);
404cdf0e10cSrcweir }
405cdf0e10cSrcweir
406cdf0e10cSrcweir /*--------------------------------------------------------------------
407cdf0e10cSrcweir Beschreibung: Drawing beenden
408cdf0e10cSrcweir --------------------------------------------------------------------*/
409cdf0e10cSrcweir
410cdf0e10cSrcweir
411cdf0e10cSrcweir
ExitDraw()412cdf0e10cSrcweir void SwView::ExitDraw()
413cdf0e10cSrcweir {
414cdf0e10cSrcweir NoRotate();
415cdf0e10cSrcweir
416cdf0e10cSrcweir if(pShell)
417cdf0e10cSrcweir {
418cdf0e10cSrcweir //#126062 # the shell may be invalid at close/reload/SwitchToViewShell
419cdf0e10cSrcweir SfxDispatcher* pDispatch = GetViewFrame()->GetDispatcher();
420cdf0e10cSrcweir sal_uInt16 nIdx = 0;
421cdf0e10cSrcweir SfxShell* pTest = 0;
422cdf0e10cSrcweir do
423cdf0e10cSrcweir {
424cdf0e10cSrcweir pTest = pDispatch->GetShell(nIdx++);
425cdf0e10cSrcweir }
426cdf0e10cSrcweir while( pTest && pTest != this && pTest != pShell);
427cdf0e10cSrcweir if(pTest == pShell &&
428cdf0e10cSrcweir // don't call LeaveSelFrmMode() etc. for the below,
429cdf0e10cSrcweir // because objects may still be selected:
430cdf0e10cSrcweir !pShell->ISA(SwDrawBaseShell) &&
431cdf0e10cSrcweir !pShell->ISA(SwBezierShell) &&
432cdf0e10cSrcweir !pShell->ISA(svx::ExtrusionBar) &&
433cdf0e10cSrcweir !pShell->ISA(svx::FontworkBar))
434cdf0e10cSrcweir {
435cdf0e10cSrcweir SdrView *pSdrView = pWrtShell->GetDrawView();
436cdf0e10cSrcweir
437cdf0e10cSrcweir if (pSdrView && pSdrView->IsGroupEntered())
438cdf0e10cSrcweir {
439cdf0e10cSrcweir pSdrView->LeaveOneGroup();
440cdf0e10cSrcweir pSdrView->UnmarkAll();
441cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate(SID_ENTER_GROUP);
442cdf0e10cSrcweir }
443cdf0e10cSrcweir
444cdf0e10cSrcweir if (GetDrawFuncPtr())
445cdf0e10cSrcweir {
446cdf0e10cSrcweir if (pWrtShell->IsSelFrmMode())
447cdf0e10cSrcweir pWrtShell->LeaveSelFrmMode();
448cdf0e10cSrcweir GetDrawFuncPtr()->Deactivate();
449cdf0e10cSrcweir
450cdf0e10cSrcweir SetDrawFuncPtr(NULL);
451cdf0e10cSrcweir LeaveDrawCreate();
452cdf0e10cSrcweir
453cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW);
454cdf0e10cSrcweir }
455cdf0e10cSrcweir GetEditWin().SetPointer(Pointer(POINTER_TEXT));
456cdf0e10cSrcweir }
457cdf0e10cSrcweir }
458cdf0e10cSrcweir }
459cdf0e10cSrcweir
460cdf0e10cSrcweir /*--------------------------------------------------------------------
461cdf0e10cSrcweir Beschreibung: Rotate-Mode abschalten
462cdf0e10cSrcweir --------------------------------------------------------------------*/
463cdf0e10cSrcweir
464cdf0e10cSrcweir
465cdf0e10cSrcweir
NoRotate()466cdf0e10cSrcweir void SwView::NoRotate()
467cdf0e10cSrcweir {
468cdf0e10cSrcweir if (IsDrawRotate())
469cdf0e10cSrcweir {
470cdf0e10cSrcweir pWrtShell->SetDragMode(SDRDRAG_MOVE);
471cdf0e10cSrcweir FlipDrawRotate();
472cdf0e10cSrcweir
473cdf0e10cSrcweir const SfxBoolItem aTmp( SID_OBJECT_ROTATE, sal_False );
474cdf0e10cSrcweir GetViewFrame()->GetBindings().SetState( aTmp );
475cdf0e10cSrcweir }
476cdf0e10cSrcweir }
477cdf0e10cSrcweir
478cdf0e10cSrcweir /******************************************************************************
479cdf0e10cSrcweir * Beschreibung: DrawTextEditMode einschalten
480cdf0e10cSrcweir ******************************************************************************/
481cdf0e10cSrcweir
EnterDrawTextMode(const Point & aDocPos)482cdf0e10cSrcweir sal_Bool SwView::EnterDrawTextMode(const Point& aDocPos)
483cdf0e10cSrcweir {
484cdf0e10cSrcweir SdrObject* pObj;
485cdf0e10cSrcweir SdrPageView* pPV;
486cdf0e10cSrcweir SwWrtShell *pSh = &GetWrtShell();
487cdf0e10cSrcweir SdrView *pSdrView = pSh->GetDrawView();
488cdf0e10cSrcweir ASSERT( pSdrView, "EnterDrawTextMode without DrawView?" );
489cdf0e10cSrcweir
490cdf0e10cSrcweir sal_Bool bReturn = sal_False;
491cdf0e10cSrcweir
492cdf0e10cSrcweir sal_uInt16 nOld = pSdrView->GetHitTolerancePixel();
493cdf0e10cSrcweir pSdrView->SetHitTolerancePixel( 2 );
494cdf0e10cSrcweir
495cdf0e10cSrcweir if( pSdrView->IsMarkedHit( aDocPos ) &&
496cdf0e10cSrcweir !pSdrView->PickHandle( aDocPos ) && IsTextTool() &&
497cdf0e10cSrcweir pSdrView->PickObj( aDocPos, pSdrView->getHitTolLog(), pObj, pPV, SDRSEARCH_PICKTEXTEDIT ) &&
498cdf0e10cSrcweir
499cdf0e10cSrcweir // #108784#
500cdf0e10cSrcweir // To allow SwDrawVirtObj text objects to be activated, allow their type, too.
501cdf0e10cSrcweir //pObj->ISA( SdrTextObj ) &&
502cdf0e10cSrcweir ( pObj->ISA( SdrTextObj ) ||
503cdf0e10cSrcweir ( pObj->ISA(SwDrawVirtObj) &&
504cdf0e10cSrcweir ((SwDrawVirtObj*)pObj)->GetReferencedObj().ISA(SdrTextObj) ) ) &&
505cdf0e10cSrcweir
506cdf0e10cSrcweir !pWrtShell->IsSelObjProtected(FLYPROTECT_CONTENT))
507cdf0e10cSrcweir {
508cdf0e10cSrcweir bReturn = BeginTextEdit( pObj, pPV, pEditWin, sal_False );
509cdf0e10cSrcweir }
510cdf0e10cSrcweir
511cdf0e10cSrcweir pSdrView->SetHitTolerancePixel( nOld );
512cdf0e10cSrcweir
513cdf0e10cSrcweir return bReturn;
514cdf0e10cSrcweir }
515cdf0e10cSrcweir
516cdf0e10cSrcweir /******************************************************************************
517cdf0e10cSrcweir * Beschreibung: DrawTextEditMode einschalten
518cdf0e10cSrcweir ******************************************************************************/
BeginTextEdit(SdrObject * pObj,SdrPageView * pPV,Window * pWin,bool bIsNewObj,bool bSetSelectionToStart)519cdf0e10cSrcweir sal_Bool SwView::BeginTextEdit(SdrObject* pObj, SdrPageView* pPV, Window* pWin,
520cdf0e10cSrcweir bool bIsNewObj, bool bSetSelectionToStart)
521cdf0e10cSrcweir {
522cdf0e10cSrcweir SwWrtShell *pSh = &GetWrtShell();
523cdf0e10cSrcweir SdrView *pSdrView = pSh->GetDrawView();
524cdf0e10cSrcweir SdrOutliner* pOutliner = ::SdrMakeOutliner(OUTLINERMODE_TEXTOBJECT, pSdrView->GetModel());
525cdf0e10cSrcweir uno::Reference< linguistic2::XSpellChecker1 > xSpell( ::GetSpellChecker() );
526cdf0e10cSrcweir if (pOutliner)
527cdf0e10cSrcweir {
528cdf0e10cSrcweir pOutliner->SetRefDevice(pSh->getIDocumentDeviceAccess()->getReferenceDevice(false));
529cdf0e10cSrcweir pOutliner->SetSpeller(xSpell);
530cdf0e10cSrcweir uno::Reference<linguistic2::XHyphenator> xHyphenator( ::GetHyphenator() );
531cdf0e10cSrcweir pOutliner->SetHyphenator( xHyphenator );
532cdf0e10cSrcweir pSh->SetCalcFieldValueHdl(pOutliner);
533cdf0e10cSrcweir
534cdf0e10cSrcweir sal_uInt32 nCntrl = pOutliner->GetControlWord();
535cdf0e10cSrcweir nCntrl |= EE_CNTRL_ALLOWBIGOBJS;
536cdf0e10cSrcweir nCntrl |= EE_CNTRL_URLSFXEXECUTE;
537cdf0e10cSrcweir
538cdf0e10cSrcweir const SwViewOption *pOpt = pSh->GetViewOptions();
539cdf0e10cSrcweir
540cdf0e10cSrcweir if (SwViewOption::IsFieldShadings())
541cdf0e10cSrcweir nCntrl |= EE_CNTRL_MARKFIELDS;
542cdf0e10cSrcweir else
543cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_MARKFIELDS;
544cdf0e10cSrcweir
545cdf0e10cSrcweir if (pOpt->IsOnlineSpell())
546cdf0e10cSrcweir nCntrl |= EE_CNTRL_ONLINESPELLING;
547cdf0e10cSrcweir else
548cdf0e10cSrcweir nCntrl &= ~EE_CNTRL_ONLINESPELLING;
549cdf0e10cSrcweir
550cdf0e10cSrcweir pOutliner->SetControlWord(nCntrl);
551cdf0e10cSrcweir const SfxPoolItem& rItem = pSh->GetDoc()->GetDefault(RES_CHRATR_LANGUAGE);
552cdf0e10cSrcweir pOutliner->SetDefaultLanguage(((const SvxLanguageItem&)rItem).GetLanguage());
553cdf0e10cSrcweir
554cdf0e10cSrcweir if( bIsNewObj )
555cdf0e10cSrcweir pOutliner->SetVertical( SID_DRAW_TEXT_VERTICAL == nDrawSfxId ||
556cdf0e10cSrcweir SID_DRAW_CAPTION_VERTICAL == nDrawSfxId );
557cdf0e10cSrcweir // #i7672#
558cdf0e10cSrcweir // No longer necessary, see text below
559cdf0e10cSrcweir // Color aBackground(pSh->GetShapeBackgrd());
560cdf0e10cSrcweir // pOutliner->SetBackgroundColor(aBackground);
561cdf0e10cSrcweir
562cdf0e10cSrcweir // OD 09.12.2002 #103045# - set default horizontal text direction at outliner
563cdf0e10cSrcweir EEHorizontalTextDirection aDefHoriTextDir =
564cdf0e10cSrcweir pSh->IsShapeDefaultHoriTextDirR2L() ? EE_HTEXTDIR_R2L : EE_HTEXTDIR_L2R;
565cdf0e10cSrcweir pOutliner->SetDefaultHorizontalTextDirection( aDefHoriTextDir );
566cdf0e10cSrcweir }
567cdf0e10cSrcweir
568cdf0e10cSrcweir // #108784#
569cdf0e10cSrcweir // To allow editing the referenced object from a SwDrawVirtObj here
570cdf0e10cSrcweir // the original needs to be fetched evenually. This ATM activates the
571cdf0e10cSrcweir // text edit mode for the original object.
572cdf0e10cSrcweir SdrObject* pToBeActivated = pObj;
573cdf0e10cSrcweir
574cdf0e10cSrcweir // #108784#
575cdf0e10cSrcweir // Always the original object is edited. To allow the TextEdit to happen
576cdf0e10cSrcweir // where the VirtObj is positioned, on demand a occurring offset is set at
577cdf0e10cSrcweir // the TextEdit object. That offset is used for creating and managing the
578cdf0e10cSrcweir // OutlinerView.
579cdf0e10cSrcweir Point aNewTextEditOffset(0, 0);
580cdf0e10cSrcweir
581cdf0e10cSrcweir if(pObj->ISA(SwDrawVirtObj))
582cdf0e10cSrcweir {
583cdf0e10cSrcweir SwDrawVirtObj* pVirtObj = (SwDrawVirtObj*)pObj;
584cdf0e10cSrcweir pToBeActivated = &((SdrObject&)pVirtObj->GetReferencedObj());
585cdf0e10cSrcweir aNewTextEditOffset = pVirtObj->GetOffset();
586cdf0e10cSrcweir }
587cdf0e10cSrcweir
588cdf0e10cSrcweir // set in each case, thus it will be correct for all objects
589cdf0e10cSrcweir ((SdrTextObj*)pToBeActivated)->SetTextEditOffset(aNewTextEditOffset);
590cdf0e10cSrcweir
591cdf0e10cSrcweir sal_Bool bRet(pSdrView->SdrBeginTextEdit( pToBeActivated, pPV, pWin, sal_True, pOutliner, 0, sal_False, sal_False, sal_False ));
592cdf0e10cSrcweir
593cdf0e10cSrcweir // #i7672#
594cdf0e10cSrcweir // Since SdrBeginTextEdit actually creates the OutlinerView and thus also
595cdf0e10cSrcweir // sets the background color, an own background color needs to be set
596cdf0e10cSrcweir // after TextEditing was started. This is now done here.
597cdf0e10cSrcweir if(bRet)
598cdf0e10cSrcweir {
599cdf0e10cSrcweir OutlinerView* pView = pSdrView->GetTextEditOutlinerView();
600cdf0e10cSrcweir
601cdf0e10cSrcweir if(pView)
602cdf0e10cSrcweir {
603cdf0e10cSrcweir Color aBackground(pSh->GetShapeBackgrd());
604cdf0e10cSrcweir pView->SetBackgroundColor(aBackground);
605cdf0e10cSrcweir }
606cdf0e10cSrcweir
607cdf0e10cSrcweir // editing should start at the end of text, spell checking at the beginning ...
608cdf0e10cSrcweir ESelection aNewSelection(EE_PARA_NOT_FOUND, EE_INDEX_NOT_FOUND, EE_PARA_NOT_FOUND, EE_INDEX_NOT_FOUND);
609cdf0e10cSrcweir if (bSetSelectionToStart)
610cdf0e10cSrcweir aNewSelection = ESelection();
611cdf0e10cSrcweir pView->SetSelection(aNewSelection);
612cdf0e10cSrcweir }
613cdf0e10cSrcweir
614cdf0e10cSrcweir return bRet;
615cdf0e10cSrcweir }
616cdf0e10cSrcweir
617cdf0e10cSrcweir /******************************************************************************
618cdf0e10cSrcweir * Beschreibung: Ist ein DrawTextObjekt selektiert?
619cdf0e10cSrcweir ******************************************************************************/
620cdf0e10cSrcweir
621cdf0e10cSrcweir
622cdf0e10cSrcweir
IsTextTool() const623cdf0e10cSrcweir sal_Bool SwView::IsTextTool() const
624cdf0e10cSrcweir {
625cdf0e10cSrcweir sal_uInt16 nId;
626cdf0e10cSrcweir sal_uInt32 nInvent;
627cdf0e10cSrcweir SdrView *pSdrView = GetWrtShell().GetDrawView();
628cdf0e10cSrcweir ASSERT( pSdrView, "IsTextTool without DrawView?" );
629cdf0e10cSrcweir
630cdf0e10cSrcweir if (pSdrView->IsCreateMode())
631cdf0e10cSrcweir pSdrView->SetCreateMode(sal_False);
632cdf0e10cSrcweir
633cdf0e10cSrcweir pSdrView->TakeCurrentObj(nId,nInvent);
634cdf0e10cSrcweir return (nInvent==SdrInventor);
635cdf0e10cSrcweir }
636cdf0e10cSrcweir
637cdf0e10cSrcweir /*--------------------------------------------------------------------
638cdf0e10cSrcweir Beschreibung:
639cdf0e10cSrcweir --------------------------------------------------------------------*/
640cdf0e10cSrcweir
641cdf0e10cSrcweir
642cdf0e10cSrcweir
GetDrawView() const643cdf0e10cSrcweir SdrView* SwView::GetDrawView() const
644cdf0e10cSrcweir {
645cdf0e10cSrcweir return GetWrtShell().GetDrawView();
646cdf0e10cSrcweir }
647cdf0e10cSrcweir
648cdf0e10cSrcweir /*--------------------------------------------------------------------
649cdf0e10cSrcweir Beschreibung:
650cdf0e10cSrcweir --------------------------------------------------------------------*/
651cdf0e10cSrcweir
652cdf0e10cSrcweir
653cdf0e10cSrcweir
IsBezierEditMode()654cdf0e10cSrcweir sal_Bool SwView::IsBezierEditMode()
655cdf0e10cSrcweir {
656cdf0e10cSrcweir return (!IsDrawSelMode() && GetWrtShell().GetDrawView()->HasMarkablePoints());
657cdf0e10cSrcweir }
658cdf0e10cSrcweir
659cdf0e10cSrcweir /*--------------------------------------------------------------------
660cdf0e10cSrcweir Beschreibung:
661cdf0e10cSrcweir --------------------------------------------------------------------*/
662cdf0e10cSrcweir
IsFormMode() const663cdf0e10cSrcweir sal_Bool SwView::IsFormMode() const
664cdf0e10cSrcweir {
665cdf0e10cSrcweir if (GetDrawFuncPtr() && GetDrawFuncPtr()->IsCreateObj())
666cdf0e10cSrcweir {
667cdf0e10cSrcweir return (GetDrawFuncPtr()->IsInsertForm());
668cdf0e10cSrcweir }
669cdf0e10cSrcweir
670cdf0e10cSrcweir return AreOnlyFormsSelected();
671cdf0e10cSrcweir }
672cdf0e10cSrcweir
673cdf0e10cSrcweir /*--------------------------------------------------------------------
674cdf0e10cSrcweir Beschreibung:
675cdf0e10cSrcweir --------------------------------------------------------------------*/
676cdf0e10cSrcweir
677cdf0e10cSrcweir
678cdf0e10cSrcweir
SetDrawFuncPtr(SwDrawBase * pFuncPtr)679cdf0e10cSrcweir void SwView::SetDrawFuncPtr(SwDrawBase* pFuncPtr)
680cdf0e10cSrcweir {
681cdf0e10cSrcweir if (pDrawActual)
682cdf0e10cSrcweir delete pDrawActual;
683cdf0e10cSrcweir pDrawActual = pFuncPtr;
684cdf0e10cSrcweir }
685cdf0e10cSrcweir
686cdf0e10cSrcweir /*--------------------------------------------------------------------
687cdf0e10cSrcweir Beschreibung:
688cdf0e10cSrcweir --------------------------------------------------------------------*/
689cdf0e10cSrcweir
SetSelDrawSlot()690cdf0e10cSrcweir void SwView::SetSelDrawSlot()
691cdf0e10cSrcweir {
692cdf0e10cSrcweir nDrawSfxId = SID_OBJECT_SELECT;
693cdf0e10cSrcweir sDrawCustom.Erase();
694cdf0e10cSrcweir }
695cdf0e10cSrcweir
696cdf0e10cSrcweir /*--------------------------------------------------------------------
697cdf0e10cSrcweir Beschreibung:
698cdf0e10cSrcweir --------------------------------------------------------------------*/
699cdf0e10cSrcweir
AreOnlyFormsSelected() const700cdf0e10cSrcweir sal_Bool SwView::AreOnlyFormsSelected() const
701cdf0e10cSrcweir {
702cdf0e10cSrcweir if ( GetWrtShell().IsFrmSelected() )
703cdf0e10cSrcweir return sal_False;
704cdf0e10cSrcweir
705cdf0e10cSrcweir sal_Bool bForm = sal_True;
706cdf0e10cSrcweir
707cdf0e10cSrcweir SdrView* pSdrView = GetWrtShell().GetDrawView();
708cdf0e10cSrcweir
709cdf0e10cSrcweir const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
710cdf0e10cSrcweir sal_uInt32 nCount = rMarkList.GetMarkCount();
711cdf0e10cSrcweir
712cdf0e10cSrcweir if (nCount)
713cdf0e10cSrcweir {
714cdf0e10cSrcweir for (sal_uInt32 i = 0; i < nCount; i++)
715cdf0e10cSrcweir {
716cdf0e10cSrcweir // Sind ausser Controls noch normale Draw-Objekte selektiert?
717cdf0e10cSrcweir SdrObject *pSdrObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
718cdf0e10cSrcweir
719cdf0e10cSrcweir if (!HasOnlyObj(pSdrObj, FmFormInventor))
720cdf0e10cSrcweir {
721cdf0e10cSrcweir bForm = sal_False;
722cdf0e10cSrcweir break;
723cdf0e10cSrcweir }
724cdf0e10cSrcweir }
725cdf0e10cSrcweir }
726cdf0e10cSrcweir else
727cdf0e10cSrcweir bForm = sal_False;
728cdf0e10cSrcweir
729cdf0e10cSrcweir return bForm;
730cdf0e10cSrcweir }
731cdf0e10cSrcweir
732cdf0e10cSrcweir /*--------------------------------------------------------------------
733cdf0e10cSrcweir Beschreibung:
734cdf0e10cSrcweir --------------------------------------------------------------------*/
735cdf0e10cSrcweir
HasDrwObj(SdrObject * pSdrObj) const736cdf0e10cSrcweir sal_Bool SwView::HasDrwObj(SdrObject *pSdrObj) const
737cdf0e10cSrcweir {
738cdf0e10cSrcweir sal_Bool bRet = sal_False;
739cdf0e10cSrcweir
740cdf0e10cSrcweir if (pSdrObj->IsGroupObject())
741cdf0e10cSrcweir {
742cdf0e10cSrcweir SdrObjList* pList = pSdrObj->GetSubList();
743cdf0e10cSrcweir sal_uInt32 nCnt = pList->GetObjCount();
744cdf0e10cSrcweir
745cdf0e10cSrcweir for (sal_uInt32 i = 0; i < nCnt; i++)
746cdf0e10cSrcweir if ((bRet = HasDrwObj(pList->GetObj(i))) == sal_True)
747cdf0e10cSrcweir break;
748cdf0e10cSrcweir }
749cdf0e10cSrcweir else if (SdrInventor == pSdrObj->GetObjInventor() || pSdrObj->Is3DObj())
750cdf0e10cSrcweir return sal_True;
751cdf0e10cSrcweir
752cdf0e10cSrcweir return bRet;
753cdf0e10cSrcweir }
754cdf0e10cSrcweir
755cdf0e10cSrcweir /*--------------------------------------------------------------------
756cdf0e10cSrcweir Beschreibung:
757cdf0e10cSrcweir --------------------------------------------------------------------*/
758cdf0e10cSrcweir
HasOnlyObj(SdrObject * pSdrObj,sal_uInt32 eObjInventor) const759cdf0e10cSrcweir sal_Bool SwView::HasOnlyObj(SdrObject *pSdrObj, sal_uInt32 eObjInventor) const
760cdf0e10cSrcweir {
761cdf0e10cSrcweir sal_Bool bRet = sal_False;
762cdf0e10cSrcweir
763cdf0e10cSrcweir if (pSdrObj->IsGroupObject())
764cdf0e10cSrcweir {
765cdf0e10cSrcweir SdrObjList* pList = pSdrObj->GetSubList();
766cdf0e10cSrcweir sal_uInt32 nCnt = pList->GetObjCount();
767cdf0e10cSrcweir
768cdf0e10cSrcweir for (sal_uInt32 i = 0; i < nCnt; i++)
769cdf0e10cSrcweir if ((bRet = HasOnlyObj(pList->GetObj(i), eObjInventor)) == sal_False)
770cdf0e10cSrcweir break;
771cdf0e10cSrcweir }
772cdf0e10cSrcweir else if (eObjInventor == pSdrObj->GetObjInventor())
773cdf0e10cSrcweir return sal_True;
774cdf0e10cSrcweir
775cdf0e10cSrcweir return bRet;
776cdf0e10cSrcweir }
777cdf0e10cSrcweir
778cdf0e10cSrcweir
779cdf0e10cSrcweir //#i87414# mod
IMPL_LINK(SwView,OnlineSpellCallback,SpellCallbackInfo *,pInfo)780cdf0e10cSrcweir IMPL_LINK(SwView, OnlineSpellCallback, SpellCallbackInfo*, pInfo)
781cdf0e10cSrcweir {
782cdf0e10cSrcweir if (pInfo->nCommand == SPELLCMD_STARTSPELLDLG)
783cdf0e10cSrcweir GetViewFrame()->GetDispatcher()->Execute( FN_SPELL_GRAMMAR_DIALOG, SFX_CALLMODE_ASYNCHRON);
784cdf0e10cSrcweir return 0;
785cdf0e10cSrcweir }
786cdf0e10cSrcweir
787cdf0e10cSrcweir /*--------------------------------------------------------------------
788cdf0e10cSrcweir Beschreibung:
789cdf0e10cSrcweir --------------------------------------------------------------------*/
ExecDrwTxtSpellPopup(const Point & rPt)790cdf0e10cSrcweir sal_Bool SwView::ExecDrwTxtSpellPopup(const Point& rPt)
791cdf0e10cSrcweir {
792cdf0e10cSrcweir sal_Bool bRet = sal_False;
793cdf0e10cSrcweir SdrView *pSdrView = pWrtShell->GetDrawView();
794cdf0e10cSrcweir OutlinerView* pOLV = pSdrView->GetTextEditOutlinerView();
795cdf0e10cSrcweir Point aPos( GetEditWin().LogicToPixel( rPt ) );
796cdf0e10cSrcweir
797cdf0e10cSrcweir if (pOLV->IsWrongSpelledWordAtPos( aPos ))
798cdf0e10cSrcweir {
799cdf0e10cSrcweir bRet = sal_True;
800cdf0e10cSrcweir Link aLink = LINK(this, SwView, OnlineSpellCallback);
801cdf0e10cSrcweir pOLV->ExecuteSpellPopup( aPos,&aLink );
802cdf0e10cSrcweir }
803cdf0e10cSrcweir return bRet;
804cdf0e10cSrcweir }
805cdf0e10cSrcweir
806cdf0e10cSrcweir /*--------------------------------------------------------------------
807cdf0e10cSrcweir Beschreibung:
808cdf0e10cSrcweir --------------------------------------------------------------------*/
809cdf0e10cSrcweir
810cdf0e10cSrcweir
811cdf0e10cSrcweir
IsDrawTextHyphenate()812cdf0e10cSrcweir sal_Bool SwView::IsDrawTextHyphenate()
813cdf0e10cSrcweir {
814cdf0e10cSrcweir SdrView *pSdrView = pWrtShell->GetDrawView();
815cdf0e10cSrcweir sal_Bool bHyphenate = sal_False;
816cdf0e10cSrcweir
817cdf0e10cSrcweir SfxItemSet aNewAttr( pSdrView->GetModel()->GetItemPool(),
818cdf0e10cSrcweir EE_PARA_HYPHENATE, EE_PARA_HYPHENATE );
819cdf0e10cSrcweir if( pSdrView->GetAttributes( aNewAttr ) &&
820cdf0e10cSrcweir aNewAttr.GetItemState( EE_PARA_HYPHENATE ) >= SFX_ITEM_AVAILABLE )
821cdf0e10cSrcweir bHyphenate = ((const SfxBoolItem&)aNewAttr.Get( EE_PARA_HYPHENATE )).
822cdf0e10cSrcweir GetValue();
823cdf0e10cSrcweir
824cdf0e10cSrcweir return bHyphenate;
825cdf0e10cSrcweir }
826cdf0e10cSrcweir
827cdf0e10cSrcweir /*--------------------------------------------------------------------
828cdf0e10cSrcweir Beschreibung:
829cdf0e10cSrcweir --------------------------------------------------------------------*/
830cdf0e10cSrcweir
831cdf0e10cSrcweir
832cdf0e10cSrcweir
HyphenateDrawText()833cdf0e10cSrcweir void SwView::HyphenateDrawText()
834cdf0e10cSrcweir {
835cdf0e10cSrcweir SdrView *pSdrView = pWrtShell->GetDrawView();
836cdf0e10cSrcweir sal_Bool bHyphenate = IsDrawTextHyphenate();
837cdf0e10cSrcweir
838cdf0e10cSrcweir SfxItemSet aSet( GetPool(), EE_PARA_HYPHENATE, EE_PARA_HYPHENATE );
839cdf0e10cSrcweir aSet.Put( SfxBoolItem( EE_PARA_HYPHENATE, !bHyphenate ) );
840cdf0e10cSrcweir pSdrView->SetAttributes( aSet );
841cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate(FN_HYPHENATE_OPT_DLG);
842cdf0e10cSrcweir }
843cdf0e10cSrcweir
844cdf0e10cSrcweir
845cdf0e10cSrcweir
846