xref: /trunk/main/sc/source/ui/drawfunc/fuconarc.cxx (revision b3f79822)
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_sc.hxx"
26 
27 #include "fuconarc.hxx"
28 #include "sc.hrc"
29 #include "tabvwsh.hxx"
30 #include "drawview.hxx"
31 
32 // #98185# Create default drawing objects via keyboard
33 #include <svx/svdocirc.hxx>
34 #include <svx/sxciaitm.hxx>
35 
36 /*************************************************************************
37 |*
38 |* Konstruktor
39 |*
40 \************************************************************************/
41 
FuConstArc(ScTabViewShell * pViewSh,Window * pWin,ScDrawView * pViewP,SdrModel * pDoc,SfxRequest & rReq)42 FuConstArc::FuConstArc( ScTabViewShell* pViewSh, Window* pWin, ScDrawView* pViewP,
43 				   SdrModel* pDoc, SfxRequest& rReq )
44     : FuConstruct( pViewSh, pWin, pViewP, pDoc, rReq )
45 {
46 }
47 
48 /*************************************************************************
49 |*
50 |* Destruktor
51 |*
52 \************************************************************************/
53 
~FuConstArc()54 FuConstArc::~FuConstArc()
55 {
56 }
57 
58 /*************************************************************************
59 |*
60 |* MouseButtonDown-event
61 |*
62 \************************************************************************/
63 
MouseButtonDown(const MouseEvent & rMEvt)64 sal_Bool __EXPORT FuConstArc::MouseButtonDown( const MouseEvent& rMEvt )
65 {
66 	// #95491# remember button state for creation of own MouseEvents
67 	SetMouseButtonCode(rMEvt.GetButtons());
68 
69 	sal_Bool bReturn = FuConstruct::MouseButtonDown( rMEvt );
70 
71 	if ( rMEvt.IsLeft() && !pView->IsAction() )
72 	{
73 		Point aPnt( pWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
74 		pWindow->CaptureMouse();
75 		pView->BegCreateObj( aPnt );
76 		bReturn = sal_True;
77 	}
78 	return bReturn;
79 }
80 
81 /*************************************************************************
82 |*
83 |* MouseMove-event
84 |*
85 \************************************************************************/
86 
MouseMove(const MouseEvent & rMEvt)87 sal_Bool __EXPORT FuConstArc::MouseMove( const MouseEvent& rMEvt )
88 {
89 	return FuConstruct::MouseMove(rMEvt);
90 }
91 
92 /*************************************************************************
93 |*
94 |* MouseButtonUp-event
95 |*
96 \************************************************************************/
97 
MouseButtonUp(const MouseEvent & rMEvt)98 sal_Bool __EXPORT FuConstArc::MouseButtonUp( const MouseEvent& rMEvt )
99 {
100 	// #95491# remember button state for creation of own MouseEvents
101 	SetMouseButtonCode(rMEvt.GetButtons());
102 
103 	sal_Bool bReturn = sal_False;
104 
105 	if ( pView->IsCreateObj() && rMEvt.IsLeft() )
106 	{
107 		// Point aPnt( pWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
108 		pView->EndCreateObj( SDRCREATE_NEXTPOINT );
109 		bReturn = sal_True;
110 	}
111 /*
112 	else if ( pView->IsCreateObj() && rMEvt.IsRight() )
113 	{
114 		// Point aPnt( pWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
115 		pView->EndCreateObj( SDRCREATE_FORCEEND );
116 		bReturn = sal_True;
117 	}
118 */
119 	return (FuConstruct::MouseButtonUp(rMEvt) || bReturn);
120 }
121 
122 /*************************************************************************
123 |*
124 |* Tastaturereignisse bearbeiten
125 |*
126 |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls
127 |* FALSE.
128 |*
129 \************************************************************************/
130 
KeyInput(const KeyEvent & rKEvt)131 sal_Bool __EXPORT FuConstArc::KeyInput(const KeyEvent& rKEvt)
132 {
133 	sal_Bool bReturn = FuConstruct::KeyInput(rKEvt);
134 	return(bReturn);
135 }
136 
137 /*************************************************************************
138 |*
139 |* Function aktivieren
140 |*
141 \************************************************************************/
142 
Activate()143 void FuConstArc::Activate()
144 {
145 	SdrObjKind aObjKind;
146 
147 	switch (aSfxRequest.GetSlot() )
148 	{
149 		case SID_DRAW_ARC:
150 			aNewPointer = Pointer( POINTER_DRAW_ARC );
151 			aObjKind = OBJ_CARC;
152 			break;
153 
154 		case SID_DRAW_PIE:
155 			aNewPointer = Pointer( POINTER_DRAW_PIE );
156 			aObjKind = OBJ_SECT;
157 			break;
158 
159 		case SID_DRAW_CIRCLECUT:
160 			aNewPointer = Pointer( POINTER_DRAW_CIRCLECUT );
161 			aObjKind = OBJ_CCUT;
162 			break;
163 
164 		default:
165 			aNewPointer = Pointer( POINTER_CROSS );
166 			aObjKind = OBJ_CARC;
167 			break;
168 	}
169 
170     pView->SetCurrentObj( sal::static_int_cast<sal_uInt16>( aObjKind ) );
171 
172 	aOldPointer = pWindow->GetPointer();
173 	pViewShell->SetActivePointer( aNewPointer );
174 
175 	FuDraw::Activate();
176 }
177 
178 /*************************************************************************
179 |*
180 |* Function deaktivieren
181 |*
182 \************************************************************************/
183 
Deactivate()184 void FuConstArc::Deactivate()
185 {
186 	FuDraw::Deactivate();
187 	pViewShell->SetActivePointer( aOldPointer );
188 }
189 
190 // #98185# Create default drawing objects via keyboard
CreateDefaultObject(const sal_uInt16 nID,const Rectangle & rRectangle)191 SdrObject* FuConstArc::CreateDefaultObject(const sal_uInt16 nID, const Rectangle& rRectangle)
192 {
193 	// case SID_DRAW_ARC:
194 	// case SID_DRAW_PIE:
195 	// case SID_DRAW_CIRCLECUT:
196 
197 	SdrObject* pObj = SdrObjFactory::MakeNewObject(
198 		pView->GetCurrentObjInventor(), pView->GetCurrentObjIdentifier(),
199 		0L, pDrDoc);
200 
201 	if(pObj)
202 	{
203 		if(pObj->ISA(SdrCircObj))
204 		{
205 			Rectangle aRect(rRectangle);
206 
207 			if(SID_DRAW_ARC == nID || SID_DRAW_CIRCLECUT == nID)
208 			{
209 				// force quadratic
210 				ImpForceQuadratic(aRect);
211 			}
212 
213 			pObj->SetLogicRect(aRect);
214 
215 			SfxItemSet aAttr(pDrDoc->GetItemPool());
216 			aAttr.Put(SdrCircStartAngleItem(9000));
217 			aAttr.Put(SdrCircEndAngleItem(0));
218 
219 			pObj->SetMergedItemSet(aAttr);
220 		}
221 		else
222 		{
223 			DBG_ERROR("Object is NO circle object");
224 		}
225 	}
226 
227 	return pObj;
228 }
229 
230 
231