xref: /aoo42x/main/sd/source/ui/func/fuconstr.cxx (revision 5b190011)
1*5b190011SAndrew Rist /**************************************************************
2*5b190011SAndrew Rist  *
3*5b190011SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*5b190011SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*5b190011SAndrew Rist  * distributed with this work for additional information
6*5b190011SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*5b190011SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*5b190011SAndrew Rist  * "License"); you may not use this file except in compliance
9*5b190011SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*5b190011SAndrew Rist  *
11*5b190011SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*5b190011SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*5b190011SAndrew Rist  * software distributed under the License is distributed on an
15*5b190011SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5b190011SAndrew Rist  * KIND, either express or implied.  See the License for the
17*5b190011SAndrew Rist  * specific language governing permissions and limitations
18*5b190011SAndrew Rist  * under the License.
19*5b190011SAndrew Rist  *
20*5b190011SAndrew Rist  *************************************************************/
21*5b190011SAndrew Rist 
22*5b190011SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sd.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "fuconstr.hxx"
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <svx/svxids.hrc>
30cdf0e10cSrcweir #include <svl/aeitem.hxx>
31cdf0e10cSrcweir #include <svx/svdpagv.hxx>
32cdf0e10cSrcweir #include <svx/xdef.hxx>
33cdf0e10cSrcweir #include <svx/xfillit0.hxx>
34cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
35cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include "app.hrc"
38cdf0e10cSrcweir #include "glob.hrc"
39cdf0e10cSrcweir #include "fudraw.hxx"
40cdf0e10cSrcweir #include "View.hxx"
41cdf0e10cSrcweir #include "Window.hxx"
42cdf0e10cSrcweir #include "ViewShell.hxx"
43cdf0e10cSrcweir #include "drawdoc.hxx"
44cdf0e10cSrcweir #include "FrameView.hxx"
45cdf0e10cSrcweir #include "sdpage.hxx"
46cdf0e10cSrcweir #include "sdresid.hxx"
47cdf0e10cSrcweir #include "stlpool.hxx"
48cdf0e10cSrcweir #include <svx/globl3d.hxx>
49cdf0e10cSrcweir 
50cdf0e10cSrcweir namespace sd {
51cdf0e10cSrcweir 
52cdf0e10cSrcweir TYPEINIT1( FuConstruct, FuDraw );
53cdf0e10cSrcweir 
54cdf0e10cSrcweir /*************************************************************************
55cdf0e10cSrcweir |*
56cdf0e10cSrcweir |* Konstruktor
57cdf0e10cSrcweir |*
58cdf0e10cSrcweir \************************************************************************/
59cdf0e10cSrcweir 
60cdf0e10cSrcweir FuConstruct::FuConstruct (
61cdf0e10cSrcweir     ViewShell*		pViewSh,
62cdf0e10cSrcweir     ::sd::Window*			pWin,
63cdf0e10cSrcweir     ::sd::View*			pView,
64cdf0e10cSrcweir     SdDrawDocument*	pDoc,
65cdf0e10cSrcweir     SfxRequest&		rReq)
66cdf0e10cSrcweir     : FuDraw(pViewSh, pWin, pView, pDoc, rReq),
67cdf0e10cSrcweir       bSelectionChanged(sal_False)
68cdf0e10cSrcweir {
69cdf0e10cSrcweir }
70cdf0e10cSrcweir 
71cdf0e10cSrcweir void FuConstruct::DoExecute( SfxRequest& rReq )
72cdf0e10cSrcweir {
73cdf0e10cSrcweir 	FuDraw::DoExecute( rReq );
74cdf0e10cSrcweir }
75cdf0e10cSrcweir 
76cdf0e10cSrcweir /*************************************************************************
77cdf0e10cSrcweir |*
78cdf0e10cSrcweir |* MouseButtonDown-event
79cdf0e10cSrcweir |*
80cdf0e10cSrcweir \************************************************************************/
81cdf0e10cSrcweir 
82cdf0e10cSrcweir sal_Bool FuConstruct::MouseButtonDown(const MouseEvent& rMEvt)
83cdf0e10cSrcweir {
84cdf0e10cSrcweir 	sal_Bool bReturn = FuDraw::MouseButtonDown(rMEvt);
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 	bMBDown = sal_True;
87cdf0e10cSrcweir 	bSelectionChanged = sal_False;
88cdf0e10cSrcweir 
89cdf0e10cSrcweir 	if ( mpView->IsAction() )
90cdf0e10cSrcweir 	{
91cdf0e10cSrcweir 		// #90235# this extra triggering is an error and leads to
92cdf0e10cSrcweir 		// erasing the last two points when creating a polygon.
93cdf0e10cSrcweir 		// if ( rMEvt.IsRight() )
94cdf0e10cSrcweir 		//	mpView->BckAction();
95cdf0e10cSrcweir 		return sal_True;
96cdf0e10cSrcweir 	}
97cdf0e10cSrcweir 
98cdf0e10cSrcweir 	bFirstMouseMove = sal_True;
99cdf0e10cSrcweir 	aDragTimer.Start();
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 	aMDPos = mpWindow->PixelToLogic( rMEvt.GetPosPixel() );
102cdf0e10cSrcweir 	sal_uInt16 nHitLog = sal_uInt16 (mpWindow->PixelToLogic(Size(HITPIX,0)).Width());
103cdf0e10cSrcweir 
104cdf0e10cSrcweir 	if (rMEvt.IsLeft() && mpView->IsExtendedMouseEventDispatcherEnabled())
105cdf0e10cSrcweir 	{
106cdf0e10cSrcweir 		mpWindow->CaptureMouse();
107cdf0e10cSrcweir 
108cdf0e10cSrcweir 		SdrHdl* pHdl = mpView->PickHandle(aMDPos);
109cdf0e10cSrcweir 
110cdf0e10cSrcweir 		if ( pHdl != NULL || mpView->IsMarkedHit(aMDPos, nHitLog) )
111cdf0e10cSrcweir 		{
112cdf0e10cSrcweir 			sal_uInt16 nDrgLog = sal_uInt16 ( mpWindow->PixelToLogic(Size(DRGPIX,0)).Width() );
113cdf0e10cSrcweir 			mpView->BegDragObj(aMDPos, (OutputDevice*) NULL, pHdl, nDrgLog);
114cdf0e10cSrcweir 			bReturn = sal_True;
115cdf0e10cSrcweir 		}
116cdf0e10cSrcweir 		else if ( mpView->AreObjectsMarked() )
117cdf0e10cSrcweir 		{
118cdf0e10cSrcweir 			mpView->UnmarkAll();
119cdf0e10cSrcweir 			bReturn = sal_True;
120cdf0e10cSrcweir 		}
121cdf0e10cSrcweir 	}
122cdf0e10cSrcweir 
123cdf0e10cSrcweir 	return bReturn;
124cdf0e10cSrcweir }
125cdf0e10cSrcweir 
126cdf0e10cSrcweir /*************************************************************************
127cdf0e10cSrcweir |*
128cdf0e10cSrcweir |* MouseMove-event
129cdf0e10cSrcweir |*
130cdf0e10cSrcweir \************************************************************************/
131cdf0e10cSrcweir 
132cdf0e10cSrcweir sal_Bool FuConstruct::MouseMove(const MouseEvent& rMEvt)
133cdf0e10cSrcweir {
134cdf0e10cSrcweir 	FuDraw::MouseMove(rMEvt);
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 	if (aDragTimer.IsActive() )
137cdf0e10cSrcweir 	{
138cdf0e10cSrcweir 		if( bFirstMouseMove )
139cdf0e10cSrcweir 			bFirstMouseMove = sal_False;
140cdf0e10cSrcweir 		else
141cdf0e10cSrcweir 			aDragTimer.Stop();
142cdf0e10cSrcweir 	}
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 	Point aPix(rMEvt.GetPosPixel());
145cdf0e10cSrcweir 	Point aPnt( mpWindow->PixelToLogic(aPix) );
146cdf0e10cSrcweir 
147cdf0e10cSrcweir 	if ( mpView->IsAction() )
148cdf0e10cSrcweir 	{
149cdf0e10cSrcweir 		ForceScroll(aPix);
150cdf0e10cSrcweir 		mpView->MovAction(aPnt);
151cdf0e10cSrcweir 	}
152cdf0e10cSrcweir 
153cdf0e10cSrcweir 	return sal_True;
154cdf0e10cSrcweir }
155cdf0e10cSrcweir 
156cdf0e10cSrcweir /*************************************************************************
157cdf0e10cSrcweir |*
158cdf0e10cSrcweir |* MouseButtonUp-event
159cdf0e10cSrcweir |*
160cdf0e10cSrcweir \************************************************************************/
161cdf0e10cSrcweir 
162cdf0e10cSrcweir sal_Bool FuConstruct::MouseButtonUp(const MouseEvent& rMEvt)
163cdf0e10cSrcweir {
164cdf0e10cSrcweir 	sal_Bool bReturn = sal_True;
165cdf0e10cSrcweir 
166cdf0e10cSrcweir 	if (aDragTimer.IsActive() )
167cdf0e10cSrcweir 	{
168cdf0e10cSrcweir 		aDragTimer.Stop();
169cdf0e10cSrcweir 		bIsInDragMode = sal_False;
170cdf0e10cSrcweir 	}
171cdf0e10cSrcweir 
172cdf0e10cSrcweir 	FuDraw::MouseButtonUp(rMEvt);
173cdf0e10cSrcweir 
174cdf0e10cSrcweir 	Point aPnt( mpWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
175cdf0e10cSrcweir 
176cdf0e10cSrcweir 	if ( mpView && mpView->IsDragObj() )
177cdf0e10cSrcweir 	{
178cdf0e10cSrcweir 		FrameView* pFrameView = mpViewShell->GetFrameView();
179cdf0e10cSrcweir 		sal_Bool bDragWithCopy = (rMEvt.IsMod1() && pFrameView->IsDragWithCopy());
180cdf0e10cSrcweir 
181cdf0e10cSrcweir 		if (bDragWithCopy)
182cdf0e10cSrcweir 		{
183cdf0e10cSrcweir 			bDragWithCopy = !mpView->IsPresObjSelected(sal_False, sal_True);
184cdf0e10cSrcweir 		}
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 		mpView->SetDragWithCopy(bDragWithCopy);
187cdf0e10cSrcweir 		mpView->EndDragObj( mpView->IsDragWithCopy() );
188cdf0e10cSrcweir 	}
189cdf0e10cSrcweir 	else if ( mpView && mpView->IsMarkObj() )
190cdf0e10cSrcweir 	{
191cdf0e10cSrcweir 		mpView->EndMarkObj();
192cdf0e10cSrcweir 	}
193cdf0e10cSrcweir 	else
194cdf0e10cSrcweir 	{
195cdf0e10cSrcweir 		bReturn = sal_False;
196cdf0e10cSrcweir 	}
197cdf0e10cSrcweir 
198cdf0e10cSrcweir 	if ( mpView &&  !mpView->IsAction() )
199cdf0e10cSrcweir 	{
200cdf0e10cSrcweir 		mpWindow->ReleaseMouse();
201cdf0e10cSrcweir 		sal_uInt16 nDrgLog = sal_uInt16 ( mpWindow->PixelToLogic(Size(DRGPIX,0)).Width() );
202cdf0e10cSrcweir 
203cdf0e10cSrcweir 		if ( !mpView->AreObjectsMarked() )
204cdf0e10cSrcweir 		{
205cdf0e10cSrcweir 			SdrObject* pObj;
206cdf0e10cSrcweir 			SdrPageView* pPV;
207cdf0e10cSrcweir 			sal_uInt16 nHitLog = sal_uInt16 ( mpWindow->PixelToLogic(Size(HITPIX,0)).Width() );
208cdf0e10cSrcweir 
209cdf0e10cSrcweir 			if (!mpView->PickObj(aPnt, mpView->getHitTolLog(), pObj, pPV))
210cdf0e10cSrcweir 			{
211cdf0e10cSrcweir 				mpView->MarkObj(aPnt, nHitLog);
212cdf0e10cSrcweir 			}
213cdf0e10cSrcweir 
214cdf0e10cSrcweir 			mpViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
215cdf0e10cSrcweir 		}
216cdf0e10cSrcweir 		else if (rMEvt.IsLeft() && !rMEvt.IsShift() && !rMEvt.IsMod1() && !rMEvt.IsMod2() &&
217cdf0e10cSrcweir 				 !bSelectionChanged                   &&
218cdf0e10cSrcweir 				 Abs(aPnt.X() - aMDPos.X()) < nDrgLog &&
219cdf0e10cSrcweir 				 Abs(aPnt.Y() - aMDPos.Y()) < nDrgLog)
220cdf0e10cSrcweir 		{
221cdf0e10cSrcweir 			/**************************************************************
222cdf0e10cSrcweir 			* Toggle zw. Selektion und Rotation
223cdf0e10cSrcweir 			**************************************************************/
224cdf0e10cSrcweir 			SdrObject* pSingleObj = NULL;
225cdf0e10cSrcweir 			sal_uLong nMarkCount = mpView->GetMarkedObjectList().GetMarkCount();
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 			if (nMarkCount==1)
228cdf0e10cSrcweir 			{
229cdf0e10cSrcweir 				pSingleObj = mpView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
230cdf0e10cSrcweir 			}
231cdf0e10cSrcweir 
232cdf0e10cSrcweir 			if (mpView->GetDragMode() == SDRDRAG_MOVE && mpView->IsRotateAllowed() &&
233cdf0e10cSrcweir 				(mpViewShell->GetFrameView()->IsClickChangeRotation() ||
234cdf0e10cSrcweir 				 (pSingleObj && pSingleObj->GetObjInventor()==E3dInventor)))
235cdf0e10cSrcweir 			{
236cdf0e10cSrcweir 				mpView->SetDragMode(SDRDRAG_ROTATE);
237cdf0e10cSrcweir 			}
238cdf0e10cSrcweir 			else
239cdf0e10cSrcweir 			{
240cdf0e10cSrcweir 				mpView->SetDragMode(SDRDRAG_MOVE);
241cdf0e10cSrcweir 			}
242cdf0e10cSrcweir 		}
243cdf0e10cSrcweir 	}
244cdf0e10cSrcweir 
245cdf0e10cSrcweir 	sal_uInt16 nClicks = rMEvt.GetClicks();
246cdf0e10cSrcweir 
247cdf0e10cSrcweir 	if (nClicks == 2 && rMEvt.IsLeft() && bMBDown &&
248cdf0e10cSrcweir 		!rMEvt.IsMod1() && !rMEvt.IsMod2() && !rMEvt.IsShift() )
249cdf0e10cSrcweir 	{
250cdf0e10cSrcweir 		DoubleClick(rMEvt);
251cdf0e10cSrcweir 	}
252cdf0e10cSrcweir 	bMBDown = sal_False;
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 	return bReturn;
255cdf0e10cSrcweir }
256cdf0e10cSrcweir 
257cdf0e10cSrcweir /*************************************************************************
258cdf0e10cSrcweir |*
259cdf0e10cSrcweir |* Tastaturereignisse bearbeiten
260cdf0e10cSrcweir |*
261cdf0e10cSrcweir |* Wird ein KeyEvent bearbeitet, so ist der Return-Wert sal_True, andernfalls
262cdf0e10cSrcweir |* sal_False.
263cdf0e10cSrcweir |*
264cdf0e10cSrcweir \************************************************************************/
265cdf0e10cSrcweir 
266cdf0e10cSrcweir sal_Bool FuConstruct::KeyInput(const KeyEvent& rKEvt)
267cdf0e10cSrcweir {
268cdf0e10cSrcweir 	sal_Bool bReturn = sal_False;
269cdf0e10cSrcweir 
270cdf0e10cSrcweir 	if ( !bReturn )
271cdf0e10cSrcweir 		bReturn = FuDraw::KeyInput(rKEvt);
272cdf0e10cSrcweir 
273cdf0e10cSrcweir 	return(bReturn);
274cdf0e10cSrcweir }
275cdf0e10cSrcweir 
276cdf0e10cSrcweir /*************************************************************************
277cdf0e10cSrcweir |*
278cdf0e10cSrcweir |* Function aktivieren
279cdf0e10cSrcweir |*
280cdf0e10cSrcweir \************************************************************************/
281cdf0e10cSrcweir 
282cdf0e10cSrcweir void FuConstruct::Activate()
283cdf0e10cSrcweir {
284cdf0e10cSrcweir 	mpView->SetEditMode(SDREDITMODE_CREATE);
285cdf0e10cSrcweir 	FuDraw::Activate();
286cdf0e10cSrcweir }
287cdf0e10cSrcweir 
288cdf0e10cSrcweir /*************************************************************************
289cdf0e10cSrcweir |*
290cdf0e10cSrcweir |* Function deaktivieren
291cdf0e10cSrcweir |*
292cdf0e10cSrcweir \************************************************************************/
293cdf0e10cSrcweir 
294cdf0e10cSrcweir void FuConstruct::Deactivate()
295cdf0e10cSrcweir {
296cdf0e10cSrcweir 	FuDraw::Deactivate();
297cdf0e10cSrcweir 	mpView->SetEditMode(SDREDITMODE_EDIT);
298cdf0e10cSrcweir }
299cdf0e10cSrcweir 
300cdf0e10cSrcweir /*************************************************************************
301cdf0e10cSrcweir |*
302cdf0e10cSrcweir |* StyleSheet fuer das zu erzeugende Objekt setzen
303cdf0e10cSrcweir |*
304cdf0e10cSrcweir \************************************************************************/
305cdf0e10cSrcweir 
306cdf0e10cSrcweir void FuConstruct::SetStyleSheet(SfxItemSet& rAttr, SdrObject* pObj)
307cdf0e10cSrcweir {
308cdf0e10cSrcweir 	sal_Bool bUseFillStyle, bUseNoFillStyle;
309cdf0e10cSrcweir 	bUseFillStyle = bUseNoFillStyle = sal_False;
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 	switch( nSlotId )
312cdf0e10cSrcweir 	{
313cdf0e10cSrcweir 	case SID_DRAW_RECT:
314cdf0e10cSrcweir 	case SID_DRAW_RECT_ROUND:
315cdf0e10cSrcweir 	case SID_DRAW_SQUARE:
316cdf0e10cSrcweir 	case SID_DRAW_SQUARE_ROUND:
317cdf0e10cSrcweir 	case SID_DRAW_ELLIPSE:
318cdf0e10cSrcweir 	case SID_DRAW_PIE:
319cdf0e10cSrcweir 	case SID_DRAW_ELLIPSECUT:
320cdf0e10cSrcweir 	case SID_DRAW_CIRCLE:
321cdf0e10cSrcweir 	case SID_DRAW_CIRCLEPIE:
322cdf0e10cSrcweir 	case SID_DRAW_CIRCLECUT:
323cdf0e10cSrcweir 	case SID_DRAW_POLYGON:
324cdf0e10cSrcweir 	case SID_DRAW_XPOLYGON:
325cdf0e10cSrcweir 	case SID_DRAW_FREELINE:
326cdf0e10cSrcweir 	case SID_DRAW_BEZIER_FILL:
327cdf0e10cSrcweir 	{
328cdf0e10cSrcweir 		bUseFillStyle = sal_True;
329cdf0e10cSrcweir 		break;
330cdf0e10cSrcweir 	}
331cdf0e10cSrcweir 	case  SID_DRAW_RECT_NOFILL:
332cdf0e10cSrcweir 	case SID_DRAW_RECT_ROUND_NOFILL:
333cdf0e10cSrcweir 	case SID_DRAW_SQUARE_NOFILL:
334cdf0e10cSrcweir 	case SID_DRAW_SQUARE_ROUND_NOFILL:
335cdf0e10cSrcweir 	case SID_DRAW_ELLIPSE_NOFILL:
336cdf0e10cSrcweir 	case SID_DRAW_PIE_NOFILL:
337cdf0e10cSrcweir 	case SID_DRAW_ELLIPSECUT_NOFILL:
338cdf0e10cSrcweir 	case SID_DRAW_CIRCLE_NOFILL:
339cdf0e10cSrcweir 	case SID_DRAW_CIRCLEPIE_NOFILL:
340cdf0e10cSrcweir 	case SID_DRAW_CIRCLECUT_NOFILL:
341cdf0e10cSrcweir 	case SID_DRAW_POLYGON_NOFILL:
342cdf0e10cSrcweir 	case SID_DRAW_XPOLYGON_NOFILL:
343cdf0e10cSrcweir 	case SID_DRAW_FREELINE_NOFILL:
344cdf0e10cSrcweir 	case SID_DRAW_LINE:
345cdf0e10cSrcweir 	case SID_DRAW_XLINE:
346cdf0e10cSrcweir 	case SID_CONNECTOR_ARROW_START:
347cdf0e10cSrcweir 	case SID_CONNECTOR_ARROW_END:
348cdf0e10cSrcweir 	case SID_CONNECTOR_ARROWS:
349cdf0e10cSrcweir 	case SID_CONNECTOR_CIRCLE_START:
350cdf0e10cSrcweir 	case SID_CONNECTOR_CIRCLE_END:
351cdf0e10cSrcweir 	case SID_CONNECTOR_CIRCLES:
352cdf0e10cSrcweir 	case SID_CONNECTOR_LINE:
353cdf0e10cSrcweir 	case SID_CONNECTOR_LINE_ARROW_START:
354cdf0e10cSrcweir 	case SID_CONNECTOR_LINE_ARROW_END:
355cdf0e10cSrcweir 	case SID_CONNECTOR_LINE_ARROWS:
356cdf0e10cSrcweir 	case SID_CONNECTOR_LINE_CIRCLE_START:
357cdf0e10cSrcweir 	case SID_CONNECTOR_LINE_CIRCLE_END:
358cdf0e10cSrcweir 	case SID_CONNECTOR_LINE_CIRCLES:
359cdf0e10cSrcweir 	case SID_CONNECTOR_CURVE:
360cdf0e10cSrcweir 	case SID_CONNECTOR_CURVE_ARROW_START:
361cdf0e10cSrcweir 	case SID_CONNECTOR_CURVE_ARROW_END:
362cdf0e10cSrcweir 	case SID_CONNECTOR_CURVE_ARROWS:
363cdf0e10cSrcweir 	case SID_CONNECTOR_CURVE_CIRCLE_START:
364cdf0e10cSrcweir 	case SID_CONNECTOR_CURVE_CIRCLE_END:
365cdf0e10cSrcweir 	case SID_CONNECTOR_CURVE_CIRCLES:
366cdf0e10cSrcweir 	case SID_CONNECTOR_LINES:
367cdf0e10cSrcweir 	case SID_CONNECTOR_LINES_ARROW_START:
368cdf0e10cSrcweir 	case SID_CONNECTOR_LINES_ARROW_END:
369cdf0e10cSrcweir 	case SID_CONNECTOR_LINES_ARROWS:
370cdf0e10cSrcweir 	case SID_CONNECTOR_LINES_CIRCLE_START:
371cdf0e10cSrcweir 	case SID_CONNECTOR_LINES_CIRCLE_END:
372cdf0e10cSrcweir 	case SID_CONNECTOR_LINES_CIRCLES:
373cdf0e10cSrcweir 	case SID_DRAW_BEZIER_NOFILL:
374cdf0e10cSrcweir 	case SID_LINE_ARROW_END:
375cdf0e10cSrcweir 	{
376cdf0e10cSrcweir 		bUseNoFillStyle = sal_True;
377cdf0e10cSrcweir 		break;
378cdf0e10cSrcweir 	}
379cdf0e10cSrcweir 	}
380cdf0e10cSrcweir 	SetStyleSheet( rAttr, pObj, bUseFillStyle, bUseNoFillStyle );
381cdf0e10cSrcweir }
382cdf0e10cSrcweir 
383cdf0e10cSrcweir void FuConstruct::SetStyleSheet( SfxItemSet& rAttr, SdrObject* pObj,
384cdf0e10cSrcweir 		const sal_Bool bForceFillStyle, const sal_Bool bForceNoFillStyle )
385cdf0e10cSrcweir {
386cdf0e10cSrcweir 	SdPage* pPage = (SdPage*)mpView->GetSdrPageView()->GetPage();
387cdf0e10cSrcweir 	if ( pPage->IsMasterPage() && pPage->GetPageKind() == PK_STANDARD &&
388cdf0e10cSrcweir 	     mpDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS )
389cdf0e10cSrcweir 	{
390cdf0e10cSrcweir 		/**********************************************
391cdf0e10cSrcweir 		* Objects was created on the slide master page
392cdf0e10cSrcweir 		***********************************************/
393cdf0e10cSrcweir 		String aName( pPage->GetLayoutName() );
394cdf0e10cSrcweir 		String aSep = UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( SD_LT_SEPARATOR ) );
395cdf0e10cSrcweir 		sal_uInt16 n = aName.Search(aSep);
396cdf0e10cSrcweir 		n = n + aSep.Len();
397cdf0e10cSrcweir 		aName.Erase(n);
398cdf0e10cSrcweir 		aName.Append( String ( SdResId( STR_LAYOUT_BACKGROUNDOBJECTS ) ) );
399cdf0e10cSrcweir 		SfxStyleSheet* pSheet = (SfxStyleSheet*)pPage->GetModel()->
400cdf0e10cSrcweir 												GetStyleSheetPool()->
401cdf0e10cSrcweir 												Find(aName, SD_STYLE_FAMILY_MASTERPAGE);
402cdf0e10cSrcweir 		DBG_ASSERT(pSheet, "Objektvorlage nicht gefunden");
403cdf0e10cSrcweir 		if (pSheet)
404cdf0e10cSrcweir 		{
405cdf0e10cSrcweir 			// applying style sheet for background objects
406cdf0e10cSrcweir 			pObj->SetStyleSheet(pSheet, sal_False);
407cdf0e10cSrcweir 			SfxItemSet& rSet = pSheet->GetItemSet();
408cdf0e10cSrcweir 			const XFillStyleItem& rFillStyle = (const XFillStyleItem&)rSet.Get(XATTR_FILLSTYLE);
409cdf0e10cSrcweir 			if ( bForceFillStyle )
410cdf0e10cSrcweir 			{
411cdf0e10cSrcweir 				if (rFillStyle.GetValue() == XFILL_NONE)
412cdf0e10cSrcweir 					rAttr.Put(XFillStyleItem(XFILL_SOLID));
413cdf0e10cSrcweir 			}
414cdf0e10cSrcweir 			else if ( bForceNoFillStyle )
415cdf0e10cSrcweir 			{
416cdf0e10cSrcweir 				if (rFillStyle.GetValue() != XFILL_NONE)
417cdf0e10cSrcweir 					rAttr.Put(XFillStyleItem(XFILL_NONE));
418cdf0e10cSrcweir 			}
419cdf0e10cSrcweir 		}
420cdf0e10cSrcweir 	}
421cdf0e10cSrcweir 	else
422cdf0e10cSrcweir 	{
423cdf0e10cSrcweir 		/***********************************
424cdf0e10cSrcweir 		* object was created on normal page
425cdf0e10cSrcweir 		************************************/
426cdf0e10cSrcweir 		if ( bForceNoFillStyle )
427cdf0e10cSrcweir 		{
428cdf0e10cSrcweir 			String aName(SdResId(STR_POOLSHEET_OBJWITHOUTFILL));
429cdf0e10cSrcweir 			SfxStyleSheet* pSheet = (SfxStyleSheet*)pPage->GetModel()->
430cdf0e10cSrcweir 										 GetStyleSheetPool()->
431cdf0e10cSrcweir 										 Find(aName, SD_STYLE_FAMILY_GRAPHICS);
432cdf0e10cSrcweir 			DBG_ASSERT(pSheet, "Objektvorlage nicht gefunden");
433cdf0e10cSrcweir 			if (pSheet)
434cdf0e10cSrcweir 			{
435cdf0e10cSrcweir 				pObj->SetStyleSheet(pSheet, sal_False);
436cdf0e10cSrcweir 				SfxItemSet aAttr(*mpView->GetDefaultAttr().Clone());
437cdf0e10cSrcweir 				aAttr.Put(pSheet->GetItemSet().Get(XATTR_FILLSTYLE));
438cdf0e10cSrcweir 				pObj->SetMergedItemSet(aAttr);
439cdf0e10cSrcweir 			}
440cdf0e10cSrcweir 			else
441cdf0e10cSrcweir 			{
442cdf0e10cSrcweir 				SfxItemSet aAttr(*mpView->GetDefaultAttr().Clone());
443cdf0e10cSrcweir 				rAttr.Put(XFillStyleItem(XFILL_NONE));
444cdf0e10cSrcweir 				pObj->SetMergedItemSet(aAttr);
445cdf0e10cSrcweir 			}
446cdf0e10cSrcweir 		}
447cdf0e10cSrcweir 	}
448cdf0e10cSrcweir }
449cdf0e10cSrcweir 
450cdf0e10cSrcweir } // end of namespace sd
451