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