xref: /aoo41x/main/sw/source/ui/ribbar/conrect.cxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sw.hxx"
30 
31 
32 #include <sfx2/bindings.hxx>
33 #include <svx/htmlmode.hxx>
34 #include <svx/sdtacitm.hxx>
35 #include <svx/svdobj.hxx>
36 #include <svx/sdtagitm.hxx>
37 #include <svx/sdtakitm.hxx>
38 #include <svx/sdtaditm.hxx>
39 #include <svx/sdtaaitm.hxx>
40 #include <svx/svdview.hxx>
41 #include <svx/svdocapt.hxx>
42 #include <editeng/outlobj.hxx>
43 #include <cmdid.h>
44 #include <view.hxx>
45 #include <edtwin.hxx>
46 #include <wrtsh.hxx>
47 #include <viewopt.hxx>
48 #include <drawbase.hxx>
49 #include <conrect.hxx>
50 
51 
52 /*************************************************************************
53 |*
54 |* Konstruktor
55 |*
56 \************************************************************************/
57 
58 ConstRectangle::ConstRectangle( SwWrtShell* pWrtShell, SwEditWin* pEditWin,
59 								SwView* pSwView )
60 	: SwDrawBase( pWrtShell, pEditWin, pSwView ),
61 	bMarquee(sal_False),
62 	// #93382#
63 	mbVertical(sal_False)
64 {
65 }
66 
67 /*************************************************************************
68 |*
69 |* MouseButtonDown-event
70 |*
71 \************************************************************************/
72 
73 sal_Bool ConstRectangle::MouseButtonDown(const MouseEvent& rMEvt)
74 {
75 	sal_Bool bReturn;
76 
77 	if ((bReturn = SwDrawBase::MouseButtonDown(rMEvt)) == sal_True
78                                     && m_pWin->GetSdrDrawMode() == OBJ_CAPTION)
79 	{
80         m_pView->NoRotate();
81         if (m_pView->IsDrawSelMode())
82 		{
83             m_pView->FlipDrawSelMode();
84             m_pSh->GetDrawView()->SetFrameDragSingles(m_pView->IsDrawSelMode());
85 		}
86 	}
87 	return (bReturn);
88 }
89 
90 /*************************************************************************
91 |*
92 |* MouseButtonUp-event
93 |*
94 \************************************************************************/
95 
96 sal_Bool ConstRectangle::MouseButtonUp(const MouseEvent& rMEvt)
97 {
98     Point aPnt(m_pWin->PixelToLogic(rMEvt.GetPosPixel()));
99 
100 	sal_Bool bRet = SwDrawBase::MouseButtonUp(rMEvt);
101 	if( bRet )
102 	{
103         SdrView *pSdrView = m_pSh->GetDrawView();
104 		const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList();
105 		SdrObject* pObj = rMarkList.GetMark(0) ? rMarkList.GetMark(0)->GetMarkedSdrObj()
106 											   : 0;
107         switch( m_pWin->GetSdrDrawMode() )
108 		{
109 		case OBJ_TEXT:
110 			if( bMarquee )
111 			{
112                 m_pSh->ChgAnchor(FLY_AS_CHAR);
113 
114 				if( pObj )
115 				{
116 					// die fuer das Scrollen benoetigten Attribute setzen
117 					SfxItemSet aItemSet( pSdrView->GetModel()->GetItemPool(),
118 										SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST);
119 
120 					aItemSet.Put( SdrTextAutoGrowWidthItem( sal_False ) );
121 					aItemSet.Put( SdrTextAutoGrowHeightItem( sal_False ) );
122 					aItemSet.Put( SdrTextAniKindItem( SDRTEXTANI_SCROLL ) );
123 					aItemSet.Put( SdrTextAniDirectionItem( SDRTEXTANI_LEFT ) );
124 					aItemSet.Put( SdrTextAniCountItem( 0 ) );
125 					aItemSet.Put( SdrTextAniAmountItem(
126                             (sal_Int16)m_pWin->PixelToLogic(Size(2,1)).Width()) );
127 
128 					pObj->SetMergedItemSetAndBroadcast(aItemSet);
129 				}
130 			}
131 			else if(mbVertical && pObj && pObj->ISA(SdrTextObj))
132 			{
133 				// #93382#
134 				SdrTextObj* pText = (SdrTextObj*)pObj;
135 				SfxItemSet aSet(pSdrView->GetModel()->GetItemPool());
136 
137 				pText->SetVerticalWriting(sal_True);
138 
139 				aSet.Put(SdrTextAutoGrowWidthItem(sal_True));
140 				aSet.Put(SdrTextAutoGrowHeightItem(sal_False));
141 				aSet.Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_TOP));
142 				aSet.Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_RIGHT));
143 
144 				pText->SetMergedItemSet(aSet);
145 			}
146 			if( pObj )
147 			{
148 				SdrPageView* pPV = pSdrView->GetSdrPageView();
149                 m_pView->BeginTextEdit( pObj, pPV, m_pWin, sal_True );
150 			}
151             m_pView->LeaveDrawCreate();  // In Selektionsmode wechseln
152             m_pSh->GetView().GetViewFrame()->GetBindings().Invalidate(SID_INSERT_DRAW);
153 			break;
154 
155 		case OBJ_CAPTION:
156         {
157             SdrCaptionObj* pCaptObj = dynamic_cast<SdrCaptionObj*>(pObj);
158             if( bCapVertical && pCaptObj )
159 			{
160 				pCaptObj->ForceOutlinerParaObject();
161 				OutlinerParaObject* pOPO = pCaptObj->GetOutlinerParaObject();
162 				if( pOPO && !pOPO->IsVertical() )
163 					pOPO->SetVertical( sal_True );
164 			}
165         }
166         break;
167         default:; //prevent warning
168 		}
169 	}
170 	return bRet;
171 }
172 
173 /*************************************************************************
174 |*
175 |* Function aktivieren
176 |*
177 \************************************************************************/
178 
179 void ConstRectangle::Activate(const sal_uInt16 nSlotId)
180 {
181 	bMarquee = bCapVertical = sal_False;
182 	mbVertical = sal_False;
183 
184 	switch (nSlotId)
185 	{
186 	case SID_DRAW_LINE:
187         m_pWin->SetSdrDrawMode(OBJ_LINE);
188 		break;
189 
190 	case SID_DRAW_RECT:
191         m_pWin->SetSdrDrawMode(OBJ_RECT);
192 		break;
193 
194 	case SID_DRAW_ELLIPSE:
195         m_pWin->SetSdrDrawMode(OBJ_CIRC);
196 		break;
197 
198 	case SID_DRAW_TEXT_MARQUEE:
199 		bMarquee = sal_True;
200         m_pWin->SetSdrDrawMode(OBJ_TEXT);
201 		break;
202 
203 	case SID_DRAW_TEXT_VERTICAL:
204 		// #93382#
205 		mbVertical = sal_True;
206         m_pWin->SetSdrDrawMode(OBJ_TEXT);
207 		break;
208 
209 	case SID_DRAW_TEXT:
210         m_pWin->SetSdrDrawMode(OBJ_TEXT);
211 		break;
212 
213 	case SID_DRAW_CAPTION_VERTICAL:
214 		bCapVertical = sal_True;
215 		// no break
216 	case SID_DRAW_CAPTION:
217         m_pWin->SetSdrDrawMode(OBJ_CAPTION);
218 		break;
219 
220 	default:
221         m_pWin->SetSdrDrawMode(OBJ_NONE);
222 		break;
223 	}
224 
225 	SwDrawBase::Activate(nSlotId);
226 }
227 
228 
229 
230