1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5efeef26fSAndrew Rist * distributed with this work for additional information
6efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist * software distributed under the License is distributed on an
15efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17efeef26fSAndrew Rist * specific language governing permissions and limitations
18efeef26fSAndrew Rist * under the License.
19cdf0e10cSrcweir *
20efeef26fSAndrew Rist *************************************************************/
21efeef26fSAndrew Rist
22efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <hintids.hxx>
28cdf0e10cSrcweir #include <tools/list.hxx>
29cdf0e10cSrcweir #include <svx/svdview.hxx>
30cdf0e10cSrcweir #include <svx/svdobj.hxx>
31cdf0e10cSrcweir #include <svl/ptitem.hxx>
32cdf0e10cSrcweir #include <editeng/sizeitem.hxx>
33cdf0e10cSrcweir #include <sfx2/request.hxx>
34cdf0e10cSrcweir #include <sfx2/bindings.hxx>
35cdf0e10cSrcweir #include <fmtclds.hxx>
36cdf0e10cSrcweir #include <frmfmt.hxx>
37cdf0e10cSrcweir #include "cmdid.h"
38cdf0e10cSrcweir #include "basesh.hxx"
39cdf0e10cSrcweir #include "view.hxx"
40cdf0e10cSrcweir #include "wrtsh.hxx"
41cdf0e10cSrcweir #include "drawbase.hxx"
42cdf0e10cSrcweir #include "edtwin.hxx"
43cdf0e10cSrcweir #include "caption.hxx"
44cdf0e10cSrcweir #include "swundo.hxx"
45cdf0e10cSrcweir #include <SwRewriter.hxx>
46cdf0e10cSrcweir #include "comcore.hrc"
47cdf0e10cSrcweir
48cdf0e10cSrcweir using namespace ::com::sun::star;
49cdf0e10cSrcweir
50cdf0e10cSrcweir extern sal_Bool bNoInterrupt; // in mainwn.cxx
51cdf0e10cSrcweir
52cdf0e10cSrcweir #define MINMOVE ((sal_uInt16)m_pSh->GetOut()->PixelToLogic(Size(m_pSh->GetDrawView()->GetMarkHdlSizePixel()/2,0)).Width())
53cdf0e10cSrcweir
54cdf0e10cSrcweir
55cdf0e10cSrcweir /*************************************************************************
56cdf0e10cSrcweir |*
57cdf0e10cSrcweir |* Konstruktor
58cdf0e10cSrcweir |*
59cdf0e10cSrcweir \************************************************************************/
60cdf0e10cSrcweir
61cdf0e10cSrcweir
SwDrawBase(SwWrtShell * pSwWrtShell,SwEditWin * pWindow,SwView * pSwView)62cdf0e10cSrcweir SwDrawBase::SwDrawBase(SwWrtShell* pSwWrtShell, SwEditWin* pWindow, SwView* pSwView) :
63cdf0e10cSrcweir m_pView(pSwView),
64cdf0e10cSrcweir m_pSh(pSwWrtShell),
65cdf0e10cSrcweir m_pWin(pWindow),
66cdf0e10cSrcweir m_nSlotId(USHRT_MAX),
67cdf0e10cSrcweir m_bCreateObj(sal_True),
68cdf0e10cSrcweir m_bInsForm(sal_False)
69cdf0e10cSrcweir {
70cdf0e10cSrcweir if ( !m_pSh->HasDrawView() )
71cdf0e10cSrcweir m_pSh->MakeDrawView();
72cdf0e10cSrcweir }
73cdf0e10cSrcweir
74cdf0e10cSrcweir /*************************************************************************
75cdf0e10cSrcweir |*
76cdf0e10cSrcweir |* Destruktor
77cdf0e10cSrcweir |*
78cdf0e10cSrcweir \************************************************************************/
79cdf0e10cSrcweir
~SwDrawBase()80cdf0e10cSrcweir __EXPORT SwDrawBase::~SwDrawBase()
81cdf0e10cSrcweir {
82cdf0e10cSrcweir if (m_pView->GetWrtShellPtr()) // Im view-Dtor koennte die wrtsh bereits geloescht worden sein...
83cdf0e10cSrcweir m_pSh->GetDrawView()->SetEditMode(sal_True);
84cdf0e10cSrcweir }
85cdf0e10cSrcweir
86cdf0e10cSrcweir /*************************************************************************
87cdf0e10cSrcweir |*
88cdf0e10cSrcweir |* MouseButtonDown-event
89cdf0e10cSrcweir |*
90cdf0e10cSrcweir \************************************************************************/
91cdf0e10cSrcweir
92cdf0e10cSrcweir
MouseButtonDown(const MouseEvent & rMEvt)93cdf0e10cSrcweir sal_Bool SwDrawBase::MouseButtonDown(const MouseEvent& rMEvt)
94cdf0e10cSrcweir {
95cdf0e10cSrcweir sal_Bool bReturn = sal_False;
96cdf0e10cSrcweir
97cdf0e10cSrcweir SdrView *pSdrView = m_pSh->GetDrawView();
98cdf0e10cSrcweir
99cdf0e10cSrcweir // #i33136#
100cdf0e10cSrcweir // pSdrView->SetOrtho(rMEvt.IsShift());
101cdf0e10cSrcweir pSdrView->SetOrtho(doConstructOrthogonal() ? !rMEvt.IsShift() : rMEvt.IsShift());
102cdf0e10cSrcweir pSdrView->SetAngleSnapEnabled(rMEvt.IsShift());
103cdf0e10cSrcweir
104cdf0e10cSrcweir if (rMEvt.IsMod2())
105cdf0e10cSrcweir {
106cdf0e10cSrcweir pSdrView->SetCreate1stPointAsCenter(sal_True);
107cdf0e10cSrcweir pSdrView->SetResizeAtCenter(sal_True);
108cdf0e10cSrcweir }
109cdf0e10cSrcweir else
110cdf0e10cSrcweir {
111cdf0e10cSrcweir pSdrView->SetCreate1stPointAsCenter(sal_False);
112cdf0e10cSrcweir pSdrView->SetResizeAtCenter(sal_False);
113cdf0e10cSrcweir }
114cdf0e10cSrcweir
115cdf0e10cSrcweir SdrViewEvent aVEvt;
116cdf0e10cSrcweir SdrHitKind eHit = pSdrView->PickAnything(rMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
117cdf0e10cSrcweir
118cdf0e10cSrcweir // Nur neues Objekt, wenn nicht im Basismode (bzw reinem Selektionsmode)
119cdf0e10cSrcweir if (rMEvt.IsLeft() && !m_pWin->IsDrawAction())
120cdf0e10cSrcweir {
121cdf0e10cSrcweir if (IsCreateObj() && (eHit == SDRHIT_UNMARKEDOBJECT || eHit == SDRHIT_NONE || m_pSh->IsDrawCreate()))
122cdf0e10cSrcweir {
123cdf0e10cSrcweir bNoInterrupt = sal_True;
124cdf0e10cSrcweir m_pWin->CaptureMouse();
125cdf0e10cSrcweir
126cdf0e10cSrcweir m_aStartPos = m_pWin->PixelToLogic(rMEvt.GetPosPixel());
127cdf0e10cSrcweir
128cdf0e10cSrcweir bReturn = m_pSh->BeginCreate( static_cast< sal_uInt16 >(m_pWin->GetSdrDrawMode()), m_aStartPos);
129cdf0e10cSrcweir
130cdf0e10cSrcweir SetDrawPointer();
131cdf0e10cSrcweir
132cdf0e10cSrcweir if ( bReturn )
133cdf0e10cSrcweir m_pWin->SetDrawAction(sal_True);
134cdf0e10cSrcweir }
135cdf0e10cSrcweir else if (!pSdrView->IsAction())
136cdf0e10cSrcweir {
137cdf0e10cSrcweir /**********************************************************************
138cdf0e10cSrcweir * BEZIER-EDITOR
139cdf0e10cSrcweir **********************************************************************/
140cdf0e10cSrcweir m_pWin->CaptureMouse();
141cdf0e10cSrcweir m_aStartPos = m_pWin->PixelToLogic(rMEvt.GetPosPixel());
142cdf0e10cSrcweir sal_uInt16 nEditMode = m_pWin->GetBezierMode();
143cdf0e10cSrcweir
144cdf0e10cSrcweir if (eHit == SDRHIT_HANDLE && aVEvt.pHdl->GetKind() == HDL_BWGT)
145cdf0e10cSrcweir {
146cdf0e10cSrcweir /******************************************************************
147cdf0e10cSrcweir * Handle draggen
148cdf0e10cSrcweir ******************************************************************/
149cdf0e10cSrcweir bNoInterrupt = sal_True;
150cdf0e10cSrcweir bReturn = pSdrView->BegDragObj(m_aStartPos, (OutputDevice*) NULL, aVEvt.pHdl);
151cdf0e10cSrcweir m_pWin->SetDrawAction(sal_True);
152cdf0e10cSrcweir }
153cdf0e10cSrcweir else if (eHit == SDRHIT_MARKEDOBJECT && nEditMode == SID_BEZIER_INSERT)
154cdf0e10cSrcweir {
155cdf0e10cSrcweir /******************************************************************
156cdf0e10cSrcweir * Klebepunkt einfuegen
157cdf0e10cSrcweir ******************************************************************/
158cdf0e10cSrcweir bNoInterrupt = sal_True;
159cdf0e10cSrcweir bReturn = pSdrView->BegInsObjPoint(m_aStartPos, rMEvt.IsMod1());
160cdf0e10cSrcweir m_pWin->SetDrawAction(sal_True);
161cdf0e10cSrcweir }
162cdf0e10cSrcweir else if (eHit == SDRHIT_MARKEDOBJECT && rMEvt.IsMod1())
163cdf0e10cSrcweir {
164cdf0e10cSrcweir /******************************************************************
165cdf0e10cSrcweir * Klebepunkt selektieren
166cdf0e10cSrcweir ******************************************************************/
167cdf0e10cSrcweir if (!rMEvt.IsShift())
168cdf0e10cSrcweir pSdrView->UnmarkAllPoints();
169cdf0e10cSrcweir
170cdf0e10cSrcweir bReturn = pSdrView->BegMarkPoints(m_aStartPos);
171cdf0e10cSrcweir m_pWin->SetDrawAction(sal_True);
172cdf0e10cSrcweir }
173cdf0e10cSrcweir else if (eHit == SDRHIT_MARKEDOBJECT && !rMEvt.IsShift() && !rMEvt.IsMod2())
174cdf0e10cSrcweir {
175cdf0e10cSrcweir /******************************************************************
176cdf0e10cSrcweir * Objekt verschieben
177cdf0e10cSrcweir ******************************************************************/
178cdf0e10cSrcweir return sal_False;
179cdf0e10cSrcweir }
180cdf0e10cSrcweir else if (eHit == SDRHIT_HANDLE)
181cdf0e10cSrcweir {
182cdf0e10cSrcweir /******************************************************************
183cdf0e10cSrcweir * Klebepunkt selektieren
184cdf0e10cSrcweir ******************************************************************/
185*5f22f2efStruckman if (pSdrView->HasMarkablePoints() && (!pSdrView->IsPointMarked(aVEvt.pHdl) || rMEvt.IsShift()))
186cdf0e10cSrcweir {
187cdf0e10cSrcweir SdrHdl* pHdl = NULL;
188cdf0e10cSrcweir
189cdf0e10cSrcweir if (!rMEvt.IsShift())
190cdf0e10cSrcweir {
191cdf0e10cSrcweir pSdrView->UnmarkAllPoints();
192cdf0e10cSrcweir pHdl = pSdrView->PickHandle(m_aStartPos);
193cdf0e10cSrcweir }
194cdf0e10cSrcweir else
195cdf0e10cSrcweir {
196*5f22f2efStruckman if (pSdrView->IsPointMarked(aVEvt.pHdl))
197cdf0e10cSrcweir {
198cdf0e10cSrcweir bReturn = pSdrView->UnmarkPoint(*aVEvt.pHdl);
199cdf0e10cSrcweir pHdl = NULL;
200cdf0e10cSrcweir }
201cdf0e10cSrcweir else
202cdf0e10cSrcweir {
203cdf0e10cSrcweir pHdl = pSdrView->PickHandle(m_aStartPos);
204cdf0e10cSrcweir }
205cdf0e10cSrcweir }
206cdf0e10cSrcweir
207cdf0e10cSrcweir if (pHdl)
208cdf0e10cSrcweir {
209cdf0e10cSrcweir bNoInterrupt = sal_True;
210cdf0e10cSrcweir pSdrView->MarkPoint(*pHdl);
211cdf0e10cSrcweir // bReturn = pSdrView->BegDragObj(m_aStartPos, (OutputDevice*) NULL, pHdl);
212cdf0e10cSrcweir // m_pWin->SetDrawAction(sal_True);
213cdf0e10cSrcweir }
214cdf0e10cSrcweir }
215cdf0e10cSrcweir }
216cdf0e10cSrcweir else
217cdf0e10cSrcweir {
218cdf0e10cSrcweir /******************************************************************
219cdf0e10cSrcweir * Objekt selektieren oder draggen
220cdf0e10cSrcweir ******************************************************************/
221cdf0e10cSrcweir if (m_pSh->IsObjSelectable(m_aStartPos) && eHit == SDRHIT_UNMARKEDOBJECT)
222cdf0e10cSrcweir {
223cdf0e10cSrcweir if (pSdrView->HasMarkablePoints())
224cdf0e10cSrcweir pSdrView->UnmarkAllPoints();
225cdf0e10cSrcweir
226cdf0e10cSrcweir bNoInterrupt = sal_False;
227cdf0e10cSrcweir // Drag im edtwin verwenden
228cdf0e10cSrcweir return sal_False;
229cdf0e10cSrcweir }
230cdf0e10cSrcweir
231cdf0e10cSrcweir bNoInterrupt = sal_True;
232cdf0e10cSrcweir
233cdf0e10cSrcweir if (m_pSh->IsObjSelected())
234cdf0e10cSrcweir {
235cdf0e10cSrcweir if (!rMEvt.IsShift())
236cdf0e10cSrcweir {
237cdf0e10cSrcweir if (!pSdrView->HasMarkablePoints())
238cdf0e10cSrcweir {
239cdf0e10cSrcweir //JP 10.10.2001: Bug 89619 - don't scroll the
240cdf0e10cSrcweir // cursor into the visible area
241cdf0e10cSrcweir sal_Bool bUnlockView = !m_pSh->IsViewLocked();
242cdf0e10cSrcweir m_pSh->LockView( sal_True ); //lock visible section
243cdf0e10cSrcweir m_pSh->SelectObj(Point(LONG_MAX, LONG_MAX)); // Alles deselektieren
244cdf0e10cSrcweir if( bUnlockView )
245cdf0e10cSrcweir m_pSh->LockView( sal_False );
246cdf0e10cSrcweir }
247cdf0e10cSrcweir else
248cdf0e10cSrcweir pSdrView->UnmarkAllPoints();
249cdf0e10cSrcweir }
250cdf0e10cSrcweir }
251cdf0e10cSrcweir if (!m_pSh->IsSelFrmMode())
252cdf0e10cSrcweir m_pSh->EnterSelFrmMode(NULL);
253cdf0e10cSrcweir
254cdf0e10cSrcweir if( 0 != (bReturn = m_pSh->BeginMark(m_aStartPos)) )
255cdf0e10cSrcweir m_pWin->SetDrawAction(sal_True);
256cdf0e10cSrcweir
257cdf0e10cSrcweir SetDrawPointer();
258cdf0e10cSrcweir }
259cdf0e10cSrcweir }
260cdf0e10cSrcweir }
261cdf0e10cSrcweir return bReturn;
262cdf0e10cSrcweir }
263cdf0e10cSrcweir
264cdf0e10cSrcweir /*************************************************************************
265cdf0e10cSrcweir |*
266cdf0e10cSrcweir |* MouseMove-event
267cdf0e10cSrcweir |*
268cdf0e10cSrcweir \************************************************************************/
269cdf0e10cSrcweir
270cdf0e10cSrcweir
MouseMove(const MouseEvent & rMEvt)271cdf0e10cSrcweir sal_Bool SwDrawBase::MouseMove(const MouseEvent& rMEvt)
272cdf0e10cSrcweir {
273cdf0e10cSrcweir SdrView *pSdrView = m_pSh->GetDrawView();
274cdf0e10cSrcweir Point aPnt(m_pWin->PixelToLogic(rMEvt.GetPosPixel()));
275cdf0e10cSrcweir sal_Bool bRet = sal_False;
276cdf0e10cSrcweir
277cdf0e10cSrcweir if (IsCreateObj() && !m_pWin->IsDrawSelMode() && pSdrView->IsCreateObj())
278cdf0e10cSrcweir {
279cdf0e10cSrcweir // #i33136#
280cdf0e10cSrcweir // pSdrView->SetOrtho(rMEvt.IsShift());
281cdf0e10cSrcweir pSdrView->SetOrtho(doConstructOrthogonal() ? !rMEvt.IsShift() : rMEvt.IsShift());
282cdf0e10cSrcweir pSdrView->SetAngleSnapEnabled(rMEvt.IsShift());
283cdf0e10cSrcweir
284cdf0e10cSrcweir m_pSh->MoveCreate(aPnt);
285cdf0e10cSrcweir bRet = sal_True;
286cdf0e10cSrcweir }
287cdf0e10cSrcweir else if (pSdrView->IsAction() || pSdrView->IsInsObjPoint() || pSdrView->IsMarkPoints())
288cdf0e10cSrcweir {
289cdf0e10cSrcweir m_pSh->MoveMark(aPnt);
290cdf0e10cSrcweir bRet = sal_True;
291cdf0e10cSrcweir }
292cdf0e10cSrcweir
293cdf0e10cSrcweir return (bRet);
294cdf0e10cSrcweir }
295cdf0e10cSrcweir
296cdf0e10cSrcweir /*************************************************************************
297cdf0e10cSrcweir |*
298cdf0e10cSrcweir |* MouseButtonUp-event
299cdf0e10cSrcweir |*
300cdf0e10cSrcweir \************************************************************************/
301cdf0e10cSrcweir
302cdf0e10cSrcweir
MouseButtonUp(const MouseEvent & rMEvt)303cdf0e10cSrcweir sal_Bool SwDrawBase::MouseButtonUp(const MouseEvent& rMEvt)
304cdf0e10cSrcweir {
305cdf0e10cSrcweir sal_Bool bReturn = sal_False;
306cdf0e10cSrcweir sal_Bool bCheckShell = sal_False;
307cdf0e10cSrcweir sal_Bool bAutoCap = sal_False;
308cdf0e10cSrcweir
309cdf0e10cSrcweir Point aPnt(m_pWin->PixelToLogic(rMEvt.GetPosPixel()));
310cdf0e10cSrcweir
311cdf0e10cSrcweir if (IsCreateObj() && m_pSh->IsDrawCreate() && !m_pWin->IsDrawSelMode())
312cdf0e10cSrcweir {
313cdf0e10cSrcweir const SdrObjKind nDrawMode = m_pWin->GetSdrDrawMode();
314cdf0e10cSrcweir //objects with multiple point may end at the start position
315cdf0e10cSrcweir sal_Bool bMultiPoint = OBJ_PLIN == nDrawMode ||
316cdf0e10cSrcweir OBJ_PATHLINE == nDrawMode ||
317cdf0e10cSrcweir OBJ_FREELINE == nDrawMode;
318cdf0e10cSrcweir if(rMEvt.IsRight() || (aPnt == m_aStartPos && !bMultiPoint))
319cdf0e10cSrcweir {
320cdf0e10cSrcweir m_pSh->BreakCreate();
321cdf0e10cSrcweir m_pView->LeaveDrawCreate();
322cdf0e10cSrcweir }
323cdf0e10cSrcweir else
324cdf0e10cSrcweir {
325cdf0e10cSrcweir if (OBJ_NONE == nDrawMode)
326cdf0e10cSrcweir {
327cdf0e10cSrcweir SwRewriter aRewriter;
328cdf0e10cSrcweir
329cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG1, SW_RES(STR_FRAME));
330cdf0e10cSrcweir m_pSh->StartUndo(UNDO_INSERT, &aRewriter);
331cdf0e10cSrcweir }
332cdf0e10cSrcweir
333cdf0e10cSrcweir m_pSh->EndCreate(SDRCREATE_FORCEEND);
334cdf0e10cSrcweir if (OBJ_NONE == nDrawMode) // Textrahmen eingefuegt
335cdf0e10cSrcweir {
336cdf0e10cSrcweir uno::Reference< frame::XDispatchRecorder > xRecorder =
337cdf0e10cSrcweir m_pSh->GetView().GetViewFrame()->GetBindings().GetRecorder();
338cdf0e10cSrcweir if ( xRecorder.is() )
339cdf0e10cSrcweir {
340cdf0e10cSrcweir SfxRequest aReq(m_pSh->GetView().GetViewFrame(),FN_INSERT_FRAME);
341cdf0e10cSrcweir aReq.AppendItem(SfxUInt16Item( FN_INSERT_FRAME,
342cdf0e10cSrcweir static_cast<sal_uInt16>(FLY_AT_PARA) ));
343cdf0e10cSrcweir aReq.AppendItem(SfxPointItem( FN_PARAM_1, m_pSh->GetAnchorObjDiff()));
344cdf0e10cSrcweir aReq.AppendItem(SvxSizeItem( FN_PARAM_2, m_pSh->GetObjSize()));
345cdf0e10cSrcweir aReq.Done();
346cdf0e10cSrcweir }
347cdf0e10cSrcweir bAutoCap = sal_True;
348cdf0e10cSrcweir if(m_pWin->GetFrmColCount() > 1)
349cdf0e10cSrcweir {
350cdf0e10cSrcweir SfxItemSet aSet(m_pView->GetPool(),RES_COL,RES_COL);
351cdf0e10cSrcweir SwFmtCol aCol((const SwFmtCol&)aSet.Get(RES_COL));
352cdf0e10cSrcweir aCol.Init(m_pWin->GetFrmColCount(), aCol.GetGutterWidth(), aCol.GetWishWidth());
353cdf0e10cSrcweir aSet.Put(aCol);
354cdf0e10cSrcweir // Vorlagen-AutoUpdate
355cdf0e10cSrcweir SwFrmFmt* pFmt = m_pSh->GetCurFrmFmt();
356cdf0e10cSrcweir if(pFmt && pFmt->IsAutoUpdateFmt())
357cdf0e10cSrcweir m_pSh->AutoUpdateFrame(pFmt, aSet);
358cdf0e10cSrcweir else
359cdf0e10cSrcweir m_pSh->SetFlyFrmAttr( aSet );
360cdf0e10cSrcweir }
361cdf0e10cSrcweir }
362cdf0e10cSrcweir if (m_pWin->GetSdrDrawMode() == OBJ_NONE)
363cdf0e10cSrcweir {
364cdf0e10cSrcweir m_pSh->EndUndo();
365cdf0e10cSrcweir }
366cdf0e10cSrcweir }
367cdf0e10cSrcweir
368cdf0e10cSrcweir bReturn = sal_True;
369cdf0e10cSrcweir
370cdf0e10cSrcweir EnterSelectMode(rMEvt);
371cdf0e10cSrcweir }
372cdf0e10cSrcweir else
373cdf0e10cSrcweir {
374cdf0e10cSrcweir SdrView *pSdrView = m_pSh->GetDrawView();
375cdf0e10cSrcweir
376cdf0e10cSrcweir if (!pSdrView->HasMarkablePoints())
377cdf0e10cSrcweir {
378cdf0e10cSrcweir /**********************************************************************
379cdf0e10cSrcweir * KEIN BEZIER_EDITOR
380cdf0e10cSrcweir **********************************************************************/
381cdf0e10cSrcweir if ((m_pSh->GetDrawView()->IsMarkObj() || m_pSh->GetDrawView()->IsMarkPoints())
382cdf0e10cSrcweir && rMEvt.IsLeft())
383cdf0e10cSrcweir {
384cdf0e10cSrcweir bReturn = m_pSh->EndMark();
385cdf0e10cSrcweir
386cdf0e10cSrcweir m_pWin->SetDrawAction(sal_False);
387cdf0e10cSrcweir
388cdf0e10cSrcweir if (aPnt == m_aStartPos && m_pSh->IsObjSelectable(aPnt))
389cdf0e10cSrcweir {
390cdf0e10cSrcweir m_pSh->SelectObj(aPnt, ( rMEvt.IsShift() &&
391cdf0e10cSrcweir m_pSh->IsSelFrmMode()) ? SW_ADD_SELECT : 0);
392cdf0e10cSrcweir
393cdf0e10cSrcweir if (!m_pSh->IsObjSelected())
394cdf0e10cSrcweir {
395cdf0e10cSrcweir m_pView->LeaveDrawCreate(); // In Selektionsmode wechseln
396cdf0e10cSrcweir
397cdf0e10cSrcweir m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW);
398cdf0e10cSrcweir
399cdf0e10cSrcweir if (m_pSh->IsSelFrmMode())
400cdf0e10cSrcweir m_pSh->LeaveSelFrmMode();
401cdf0e10cSrcweir }
402cdf0e10cSrcweir m_pView->NoRotate();
403cdf0e10cSrcweir
404cdf0e10cSrcweir bCheckShell = sal_True; // ggf BezierShell anwerfen
405cdf0e10cSrcweir }
406cdf0e10cSrcweir else if (!m_pSh->IsObjSelected() && !m_pWin->IsDrawAction())
407cdf0e10cSrcweir {
408cdf0e10cSrcweir if (m_pSh->IsObjSelectable(aPnt))
409cdf0e10cSrcweir m_pSh->SelectObj(aPnt, ( rMEvt.IsShift() &&
410cdf0e10cSrcweir m_pSh->IsSelFrmMode() ) ? SW_ADD_SELECT : 0 );
411cdf0e10cSrcweir else
412cdf0e10cSrcweir {
413cdf0e10cSrcweir m_pView->LeaveDrawCreate();
414cdf0e10cSrcweir if (m_pSh->IsSelFrmMode())
415cdf0e10cSrcweir m_pSh->LeaveSelFrmMode();
416cdf0e10cSrcweir }
417cdf0e10cSrcweir m_pView->NoRotate();
418cdf0e10cSrcweir
419cdf0e10cSrcweir bReturn = sal_True;
420cdf0e10cSrcweir }
421cdf0e10cSrcweir }
422cdf0e10cSrcweir }
423cdf0e10cSrcweir else
424cdf0e10cSrcweir {
425cdf0e10cSrcweir /**********************************************************************
426cdf0e10cSrcweir * BEZIER_EDITOR
427cdf0e10cSrcweir **********************************************************************/
428cdf0e10cSrcweir if ( pSdrView->IsAction() )
429cdf0e10cSrcweir {
430cdf0e10cSrcweir if ( pSdrView->IsInsObjPoint() )
431cdf0e10cSrcweir bReturn = pSdrView->EndInsObjPoint(SDRCREATE_FORCEEND);
432cdf0e10cSrcweir else if (pSdrView->IsMarkPoints() )
433cdf0e10cSrcweir bReturn = pSdrView->EndMarkPoints();
434cdf0e10cSrcweir else
435cdf0e10cSrcweir {
436cdf0e10cSrcweir pSdrView->EndAction();
437cdf0e10cSrcweir bReturn = sal_True;
438cdf0e10cSrcweir }
439cdf0e10cSrcweir m_pWin->SetDrawAction(sal_False);
440cdf0e10cSrcweir
441cdf0e10cSrcweir if (aPnt == m_aStartPos)
442cdf0e10cSrcweir {
443cdf0e10cSrcweir if (!m_pSh->IsObjSelectable(aPnt))
444cdf0e10cSrcweir m_pSh->SelectObj(Point(LONG_MAX, LONG_MAX));
445cdf0e10cSrcweir else if (!bReturn)
446cdf0e10cSrcweir {
447cdf0e10cSrcweir if (!rMEvt.IsShift())
448cdf0e10cSrcweir pSdrView->UnmarkAllPoints();
449cdf0e10cSrcweir m_pSh->SelectObj(aPnt, (rMEvt.IsShift() &&
450cdf0e10cSrcweir m_pSh->IsSelFrmMode()) ? SW_ADD_SELECT :0);
451cdf0e10cSrcweir }
452cdf0e10cSrcweir
453cdf0e10cSrcweir if (!m_pSh->IsObjSelected())
454cdf0e10cSrcweir {
455cdf0e10cSrcweir m_pView->LeaveDrawCreate(); // In Selektionsmode wechseln
456cdf0e10cSrcweir
457cdf0e10cSrcweir m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW);
458cdf0e10cSrcweir
459cdf0e10cSrcweir if (m_pSh->IsSelFrmMode())
460cdf0e10cSrcweir m_pSh->LeaveSelFrmMode();
461cdf0e10cSrcweir }
462cdf0e10cSrcweir m_pView->NoRotate();
463cdf0e10cSrcweir
464cdf0e10cSrcweir bCheckShell = sal_True; // ggf BezierShell anwerfen
465cdf0e10cSrcweir }
466cdf0e10cSrcweir }
467cdf0e10cSrcweir
468cdf0e10cSrcweir SetDrawPointer();
469cdf0e10cSrcweir
470cdf0e10cSrcweir if (!m_pSh->IsObjSelected() && !m_pWin->IsDrawAction())
471cdf0e10cSrcweir {
472cdf0e10cSrcweir m_pView->LeaveDrawCreate();
473cdf0e10cSrcweir if (m_pSh->IsSelFrmMode())
474cdf0e10cSrcweir m_pSh->LeaveSelFrmMode();
475cdf0e10cSrcweir
476cdf0e10cSrcweir m_pView->NoRotate();
477cdf0e10cSrcweir bReturn = sal_True;
478cdf0e10cSrcweir }
479cdf0e10cSrcweir }
480cdf0e10cSrcweir }
481cdf0e10cSrcweir
482cdf0e10cSrcweir if (bCheckShell)
483cdf0e10cSrcweir m_pView->AttrChangedNotify( m_pSh ); // ggf BezierShell anwerfen
484cdf0e10cSrcweir
485cdf0e10cSrcweir //!!!!!!!!!! Achtung Suizid !!!!!!!!!!! Sollte alles mal erneuert werden
486cdf0e10cSrcweir if ( bAutoCap )
487cdf0e10cSrcweir m_pView->AutoCaption(FRAME_CAP); //Kann derzeit nur FRAME sein, sonst auf
488cdf0e10cSrcweir //enums umstellen
489cdf0e10cSrcweir return (bReturn);
490cdf0e10cSrcweir }
491cdf0e10cSrcweir
492cdf0e10cSrcweir /*************************************************************************
493cdf0e10cSrcweir |*
494cdf0e10cSrcweir |* Function aktivieren
495cdf0e10cSrcweir |*
496cdf0e10cSrcweir \************************************************************************/
497cdf0e10cSrcweir
498cdf0e10cSrcweir
Activate(const sal_uInt16 nSlot)499cdf0e10cSrcweir void SwDrawBase::Activate(const sal_uInt16 nSlot)
500cdf0e10cSrcweir {
501cdf0e10cSrcweir SetSlotId(nSlot);
502cdf0e10cSrcweir SdrView *pSdrView = m_pSh->GetDrawView();
503cdf0e10cSrcweir
504cdf0e10cSrcweir pSdrView->SetCurrentObj( static_cast< sal_uInt16 >(m_pWin->GetSdrDrawMode()) );
505cdf0e10cSrcweir pSdrView->SetEditMode(sal_False);
506cdf0e10cSrcweir
507cdf0e10cSrcweir SetDrawPointer();
508cdf0e10cSrcweir m_pSh->NoEdit();
509cdf0e10cSrcweir }
510cdf0e10cSrcweir
511cdf0e10cSrcweir /*************************************************************************
512cdf0e10cSrcweir |*
513cdf0e10cSrcweir |* Function deaktivieren
514cdf0e10cSrcweir |*
515cdf0e10cSrcweir \************************************************************************/
516cdf0e10cSrcweir
517cdf0e10cSrcweir
Deactivate()518cdf0e10cSrcweir void __EXPORT SwDrawBase::Deactivate()
519cdf0e10cSrcweir {
520cdf0e10cSrcweir SdrView *pSdrView = m_pSh->GetDrawView();
521cdf0e10cSrcweir pSdrView->SetOrtho(sal_False);
522cdf0e10cSrcweir pSdrView->SetAngleSnapEnabled(sal_False);
523cdf0e10cSrcweir
524cdf0e10cSrcweir if (m_pWin->IsDrawAction() && m_pSh->IsDrawCreate())
525cdf0e10cSrcweir m_pSh->BreakCreate();
526cdf0e10cSrcweir
527cdf0e10cSrcweir m_pWin->SetDrawAction(sal_False);
528cdf0e10cSrcweir
529cdf0e10cSrcweir m_pWin->ReleaseMouse();
530cdf0e10cSrcweir bNoInterrupt = sal_False;
531cdf0e10cSrcweir
532cdf0e10cSrcweir // if(!m_pSh->IsObjSelected())
533cdf0e10cSrcweir // m_pSh->Edit();
534cdf0e10cSrcweir
535cdf0e10cSrcweir if(m_pWin->GetApplyTemplate())
536cdf0e10cSrcweir m_pWin->SetApplyTemplate(SwApplyTemplate());
537cdf0e10cSrcweir m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW);
538cdf0e10cSrcweir }
539cdf0e10cSrcweir
540cdf0e10cSrcweir /*************************************************************************
541cdf0e10cSrcweir |*
542cdf0e10cSrcweir |* Tastaturereignisse bearbeiten
543cdf0e10cSrcweir |*
544cdf0e10cSrcweir |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls
545cdf0e10cSrcweir |* sal_False.
546cdf0e10cSrcweir |*
547cdf0e10cSrcweir \************************************************************************/
548cdf0e10cSrcweir
549cdf0e10cSrcweir
KeyInput(const KeyEvent & rKEvt)550cdf0e10cSrcweir sal_Bool SwDrawBase::KeyInput(const KeyEvent& rKEvt)
551cdf0e10cSrcweir {
552cdf0e10cSrcweir sal_Bool bReturn = sal_False;
553cdf0e10cSrcweir sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode();
554cdf0e10cSrcweir
555cdf0e10cSrcweir switch (nCode)
556cdf0e10cSrcweir {
557cdf0e10cSrcweir case KEY_ESCAPE:
558cdf0e10cSrcweir {
559cdf0e10cSrcweir if (m_pWin->IsDrawAction())
560cdf0e10cSrcweir {
561cdf0e10cSrcweir BreakCreate();
562cdf0e10cSrcweir m_pView->LeaveDrawCreate();
563cdf0e10cSrcweir }
564cdf0e10cSrcweir
565cdf0e10cSrcweir bReturn = sal_True;
566cdf0e10cSrcweir }
567cdf0e10cSrcweir break;
568cdf0e10cSrcweir
569cdf0e10cSrcweir case KEY_DELETE:
570cdf0e10cSrcweir {
571cdf0e10cSrcweir m_pSh->DelSelectedObj();
572cdf0e10cSrcweir bReturn = sal_True;
573cdf0e10cSrcweir }
574cdf0e10cSrcweir break;
575cdf0e10cSrcweir
576cdf0e10cSrcweir case KEY_UP:
577cdf0e10cSrcweir case KEY_DOWN:
578cdf0e10cSrcweir case KEY_LEFT:
579cdf0e10cSrcweir case KEY_RIGHT:
580cdf0e10cSrcweir {
581cdf0e10cSrcweir SdrView *pSdrView = m_pSh->GetDrawView();
582cdf0e10cSrcweir
583cdf0e10cSrcweir if (!pSdrView->IsTextEdit())
584cdf0e10cSrcweir {
585cdf0e10cSrcweir long nX = 0;
586cdf0e10cSrcweir long nY = 0;
587cdf0e10cSrcweir
588cdf0e10cSrcweir if (nCode == KEY_UP)
589cdf0e10cSrcweir {
590cdf0e10cSrcweir // Scroll nach oben
591cdf0e10cSrcweir nX = 0;
592cdf0e10cSrcweir nY =-1;
593cdf0e10cSrcweir }
594cdf0e10cSrcweir else if (nCode == KEY_DOWN)
595cdf0e10cSrcweir {
596cdf0e10cSrcweir // Scroll nach unten
597cdf0e10cSrcweir nX = 0;
598cdf0e10cSrcweir nY = 1;
599cdf0e10cSrcweir }
600cdf0e10cSrcweir else if (nCode == KEY_LEFT)
601cdf0e10cSrcweir {
602cdf0e10cSrcweir // Scroll nach links
603cdf0e10cSrcweir nX =-1;
604cdf0e10cSrcweir nY = 0;
605cdf0e10cSrcweir }
606cdf0e10cSrcweir else if (nCode == KEY_RIGHT)
607cdf0e10cSrcweir {
608cdf0e10cSrcweir // Scroll nach rechts
609cdf0e10cSrcweir nX = 1;
610cdf0e10cSrcweir nY = 0;
611cdf0e10cSrcweir }
612cdf0e10cSrcweir
613cdf0e10cSrcweir if (pSdrView->AreObjectsMarked() && rKEvt.GetKeyCode().IsMod2())
614cdf0e10cSrcweir {
615cdf0e10cSrcweir // Objekte verschieben
616cdf0e10cSrcweir nX *= 100;
617cdf0e10cSrcweir nY *= 100;
618cdf0e10cSrcweir pSdrView->MoveAllMarked(Size(nX, nY));
619cdf0e10cSrcweir }
620cdf0e10cSrcweir
621cdf0e10cSrcweir bReturn = sal_True;
622cdf0e10cSrcweir }
623cdf0e10cSrcweir }
624cdf0e10cSrcweir break;
625cdf0e10cSrcweir }
626cdf0e10cSrcweir
627cdf0e10cSrcweir return (bReturn);
628cdf0e10cSrcweir }
629cdf0e10cSrcweir
630cdf0e10cSrcweir
631cdf0e10cSrcweir /*************************************************************************
632cdf0e10cSrcweir |*
633cdf0e10cSrcweir |* Tastaturereignisse bearbeiten
634cdf0e10cSrcweir |*
635cdf0e10cSrcweir |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls
636cdf0e10cSrcweir |* sal_False.
637cdf0e10cSrcweir |*
638cdf0e10cSrcweir \************************************************************************/
639cdf0e10cSrcweir
640cdf0e10cSrcweir
BreakCreate()641cdf0e10cSrcweir void SwDrawBase::BreakCreate()
642cdf0e10cSrcweir {
643cdf0e10cSrcweir m_pSh->BreakCreate();
644cdf0e10cSrcweir m_pWin->SetDrawAction(sal_False);
645cdf0e10cSrcweir m_pWin->ReleaseMouse();
646cdf0e10cSrcweir
647cdf0e10cSrcweir Deactivate();
648cdf0e10cSrcweir // m_pView->LeaveDrawCreate();
649cdf0e10cSrcweir }
650cdf0e10cSrcweir
651cdf0e10cSrcweir /*************************************************************************
652cdf0e10cSrcweir |*
653cdf0e10cSrcweir |* Mauspointer umschalten
654cdf0e10cSrcweir |*
655cdf0e10cSrcweir \************************************************************************/
656cdf0e10cSrcweir
657cdf0e10cSrcweir
SetDrawPointer()658cdf0e10cSrcweir void SwDrawBase::SetDrawPointer()
659cdf0e10cSrcweir {
660cdf0e10cSrcweir SdrView *pSdrView = m_pSh->GetDrawView();
661cdf0e10cSrcweir Point aPnt(m_pWin->OutputToScreenPixel(m_pWin->GetPointerPosPixel()));
662cdf0e10cSrcweir aPnt = m_pWin->PixelToLogic(m_pWin->ScreenToOutputPixel(aPnt));
663cdf0e10cSrcweir const Pointer aPointTyp = pSdrView->GetPreferedPointer(aPnt, m_pSh->GetOut());
664cdf0e10cSrcweir const Pointer aDrawPt(aPointTyp);
665cdf0e10cSrcweir m_pWin->SetPointer(aDrawPt);
666cdf0e10cSrcweir }
667cdf0e10cSrcweir
668cdf0e10cSrcweir /*************************************************************************
669cdf0e10cSrcweir |*
670cdf0e10cSrcweir |* Ggf in Selektionsmode wechseln
671cdf0e10cSrcweir |*
672cdf0e10cSrcweir \************************************************************************/
673cdf0e10cSrcweir
EnterSelectMode(const MouseEvent & rMEvt)674cdf0e10cSrcweir void SwDrawBase::EnterSelectMode(const MouseEvent& rMEvt)
675cdf0e10cSrcweir {
676cdf0e10cSrcweir m_pWin->SetDrawAction(sal_False);
677cdf0e10cSrcweir
678cdf0e10cSrcweir if (!m_pSh->IsObjSelected() && !m_pWin->IsDrawAction())
679cdf0e10cSrcweir {
680cdf0e10cSrcweir Point aPnt(m_pWin->PixelToLogic(rMEvt.GetPosPixel()));
681cdf0e10cSrcweir
682cdf0e10cSrcweir if (m_pSh->IsObjSelectable(aPnt))
683cdf0e10cSrcweir {
684cdf0e10cSrcweir m_pSh->SelectObj(aPnt);
685cdf0e10cSrcweir if (rMEvt.GetModifier() == KEY_SHIFT || !m_pSh->IsObjSelected())
686cdf0e10cSrcweir {
687cdf0e10cSrcweir m_pView->LeaveDrawCreate(); // In Selektionsmode wechseln
688cdf0e10cSrcweir
689cdf0e10cSrcweir m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW);
690cdf0e10cSrcweir }
691cdf0e10cSrcweir }
692cdf0e10cSrcweir else
693cdf0e10cSrcweir {
694cdf0e10cSrcweir m_pView->LeaveDrawCreate();
695cdf0e10cSrcweir if (m_pSh->IsSelFrmMode())
696cdf0e10cSrcweir m_pSh->LeaveSelFrmMode();
697cdf0e10cSrcweir }
698cdf0e10cSrcweir m_pView->NoRotate();
699cdf0e10cSrcweir }
700cdf0e10cSrcweir }
701cdf0e10cSrcweir /* -----------------------------03.04.2002 10:52------------------------------
702cdf0e10cSrcweir
703cdf0e10cSrcweir ---------------------------------------------------------------------------*/
CreateDefaultObject()704cdf0e10cSrcweir void SwDrawBase::CreateDefaultObject()
705cdf0e10cSrcweir {
706cdf0e10cSrcweir Point aStartPos = GetDefaultCenterPos();
707cdf0e10cSrcweir Point aEndPos(aStartPos);
708cdf0e10cSrcweir aStartPos.X() -= 8 * MM50;
709cdf0e10cSrcweir aStartPos.Y() -= 4 * MM50;
710cdf0e10cSrcweir aEndPos.X() += 8 * MM50;
711cdf0e10cSrcweir aEndPos.Y() += 4 * MM50;
712cdf0e10cSrcweir Rectangle aRect(aStartPos, aEndPos);
713cdf0e10cSrcweir m_pSh->CreateDefaultShape( static_cast< sal_uInt16 >(m_pWin->GetSdrDrawMode()), aRect, m_nSlotId);
714cdf0e10cSrcweir }
715cdf0e10cSrcweir /* -----------------25.10.2002 14:14-----------------
716cdf0e10cSrcweir *
717cdf0e10cSrcweir * --------------------------------------------------*/
GetDefaultCenterPos()718cdf0e10cSrcweir Point SwDrawBase::GetDefaultCenterPos()
719cdf0e10cSrcweir {
720cdf0e10cSrcweir Size aDocSz(m_pSh->GetDocSize());
721cdf0e10cSrcweir const SwRect& rVisArea = m_pSh->VisArea();
722cdf0e10cSrcweir Point aStartPos = rVisArea.Center();
723cdf0e10cSrcweir if(rVisArea.Width() > aDocSz.Width())
724cdf0e10cSrcweir aStartPos.X() = aDocSz.Width() / 2 + rVisArea.Left();
725cdf0e10cSrcweir if(rVisArea.Height() > aDocSz.Height())
726cdf0e10cSrcweir aStartPos.Y() = aDocSz.Height() / 2 + rVisArea.Top();
727cdf0e10cSrcweir return aStartPos;
728cdf0e10cSrcweir }
729cdf0e10cSrcweir
730cdf0e10cSrcweir // #i33136#
doConstructOrthogonal() const731cdf0e10cSrcweir bool SwDrawBase::doConstructOrthogonal() const
732cdf0e10cSrcweir {
733cdf0e10cSrcweir return false;
734cdf0e10cSrcweir }
735cdf0e10cSrcweir
736cdf0e10cSrcweir // eof
737