xref: /aoo4110/main/sc/source/ui/view/tabvwsh2.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski // INCLUDE ---------------------------------------------------------------
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #ifdef _MSC_VER
32*b1cdbd2cSJim Jagielski #pragma optimize ("", off)
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
36*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
37*b1cdbd2cSJim Jagielski #include <svl/aeitem.hxx>
38*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx>
39*b1cdbd2cSJim Jagielski #include <unotools/moduleoptions.hxx>
40*b1cdbd2cSJim Jagielski #include <svl/languageoptions.hxx>
41*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #include "tabvwsh.hxx"
44*b1cdbd2cSJim Jagielski #include "drawattr.hxx"
45*b1cdbd2cSJim Jagielski #include "drawsh.hxx"
46*b1cdbd2cSJim Jagielski #include "drawview.hxx"
47*b1cdbd2cSJim Jagielski #include "fupoor.hxx"
48*b1cdbd2cSJim Jagielski #include "fuconrec.hxx"
49*b1cdbd2cSJim Jagielski #include "fuconpol.hxx"
50*b1cdbd2cSJim Jagielski #include "fuconarc.hxx"
51*b1cdbd2cSJim Jagielski #include "fuconuno.hxx"
52*b1cdbd2cSJim Jagielski #include "fusel.hxx"
53*b1cdbd2cSJim Jagielski #include "futext.hxx"
54*b1cdbd2cSJim Jagielski #include "fumark.hxx"
55*b1cdbd2cSJim Jagielski #include "fuinsert.hxx"
56*b1cdbd2cSJim Jagielski #include "global.hxx"
57*b1cdbd2cSJim Jagielski #include "sc.hrc"
58*b1cdbd2cSJim Jagielski #include "scmod.hxx"
59*b1cdbd2cSJim Jagielski #include "appoptio.hxx"
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski // #98185# Create default drawing objects via keyboard
62*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
63*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
64*b1cdbd2cSJim Jagielski #include <svx/svdpage.hxx>
65*b1cdbd2cSJim Jagielski #include <fuconcustomshape.hxx>
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
68*b1cdbd2cSJim Jagielski 
GetDrawView() const69*b1cdbd2cSJim Jagielski SdrView* __EXPORT ScTabViewShell::GetDrawView() const
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski 	return ((ScTabViewShell*)this)->GetScDrawView();	// GetScDrawView ist nicht-const
72*b1cdbd2cSJim Jagielski }
73*b1cdbd2cSJim Jagielski 
WindowChanged()74*b1cdbd2cSJim Jagielski void ScTabViewShell::WindowChanged()
75*b1cdbd2cSJim Jagielski {
76*b1cdbd2cSJim Jagielski 	Window* pWin = GetActiveWin();
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 	ScDrawView* pDrView = GetScDrawView();
79*b1cdbd2cSJim Jagielski 	if (pDrView)
80*b1cdbd2cSJim Jagielski 		pDrView->SetActualWin(pWin);
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 	FuPoor*	pFunc = GetDrawFuncPtr();
83*b1cdbd2cSJim Jagielski 	if (pFunc)
84*b1cdbd2cSJim Jagielski 		pFunc->SetWindow(pWin);
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski 	//	when font from InputContext is used,
87*b1cdbd2cSJim Jagielski 	//	this must be moved to change of cursor position:
88*b1cdbd2cSJim Jagielski 	UpdateInputContext();
89*b1cdbd2cSJim Jagielski }
90*b1cdbd2cSJim Jagielski 
ExecDraw(SfxRequest & rReq)91*b1cdbd2cSJim Jagielski void ScTabViewShell::ExecDraw(SfxRequest& rReq)
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski 	SC_MOD()->InputEnterHandler();
94*b1cdbd2cSJim Jagielski 	UpdateInputHandler();
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski 	MakeDrawLayer();
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 	ScTabView* pTabView = GetViewData()->GetView();
99*b1cdbd2cSJim Jagielski 	SfxBindings& rBindings = GetViewFrame()->GetBindings();
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski 	Window* 	pWin	= pTabView->GetActiveWin();
102*b1cdbd2cSJim Jagielski 	ScDrawView*	pView	= pTabView->GetScDrawView();
103*b1cdbd2cSJim Jagielski 	SdrModel*	pDoc	= pView->GetModel();
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski 	const SfxItemSet *pArgs = rReq.GetArgs();
106*b1cdbd2cSJim Jagielski 	sal_uInt16 nNewId = rReq.GetSlot();
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski     if ( nNewId == SID_DRAW_CHART )
109*b1cdbd2cSJim Jagielski     {
110*b1cdbd2cSJim Jagielski         // #i71254# directly insert a chart instead of drawing its output rectangle
111*b1cdbd2cSJim Jagielski         FuInsertChart(this, pWin, pView, pDoc, rReq);
112*b1cdbd2cSJim Jagielski         return;
113*b1cdbd2cSJim Jagielski     }
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 	//
116*b1cdbd2cSJim Jagielski 	//	Pseudo-Slots von Draw-Toolbox auswerten
117*b1cdbd2cSJim Jagielski 	//!	wird das ueberhaupt noch gebraucht ?????
118*b1cdbd2cSJim Jagielski 	//
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski     if (nNewId == SID_INSERT_DRAW && pArgs)
121*b1cdbd2cSJim Jagielski 	{
122*b1cdbd2cSJim Jagielski 		const SfxPoolItem* pItem;
123*b1cdbd2cSJim Jagielski 		if ( pArgs->GetItemState( SID_INSERT_DRAW, sal_True, &pItem ) == SFX_ITEM_SET &&
124*b1cdbd2cSJim Jagielski 			 pItem->ISA( SvxDrawToolItem ) )
125*b1cdbd2cSJim Jagielski 		{
126*b1cdbd2cSJim Jagielski 			SvxDrawToolEnum eSel = (SvxDrawToolEnum)((const SvxDrawToolItem*)pItem)->GetValue();
127*b1cdbd2cSJim Jagielski 			switch (eSel)
128*b1cdbd2cSJim Jagielski 			{
129*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_SELECT:			nNewId = SID_OBJECT_SELECT; 		break;
130*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_LINE:			nNewId = SID_DRAW_LINE; 			break;
131*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_RECT:			nNewId = SID_DRAW_RECT; 			break;
132*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_ELLIPSE: 		nNewId = SID_DRAW_ELLIPSE;			break;
133*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_POLYGON_NOFILL:	nNewId = SID_DRAW_POLYGON_NOFILL;	break;
134*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_BEZIER_NOFILL:	nNewId = SID_DRAW_BEZIER_NOFILL;	break;
135*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_FREELINE_NOFILL:	nNewId = SID_DRAW_FREELINE_NOFILL;	break;
136*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_ARC: 			nNewId = SID_DRAW_ARC;				break;
137*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_PIE: 			nNewId = SID_DRAW_PIE;				break;
138*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_CIRCLECUT:		nNewId = SID_DRAW_CIRCLECUT;		break;
139*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_TEXT:			nNewId = SID_DRAW_TEXT; 			break;
140*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_TEXT_VERTICAL:	nNewId = SID_DRAW_TEXT_VERTICAL;	break;
141*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_TEXT_MARQUEE:	nNewId = SID_DRAW_TEXT_MARQUEE;		break;
142*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_CAPTION: 		nNewId = SID_DRAW_CAPTION;			break;
143*b1cdbd2cSJim Jagielski 				case SVX_SNAP_DRAW_CAPTION_VERTICAL: nNewId = SID_DRAW_CAPTION_VERTICAL; break;
144*b1cdbd2cSJim Jagielski 			}
145*b1cdbd2cSJim Jagielski 		}
146*b1cdbd2cSJim Jagielski         else                    // sal_uInt16-Item vom Controller
147*b1cdbd2cSJim Jagielski         {
148*b1cdbd2cSJim Jagielski             rReq.Done();
149*b1cdbd2cSJim Jagielski             return;
150*b1cdbd2cSJim Jagielski         }
151*b1cdbd2cSJim Jagielski 	}
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski     if ( nNewId == SID_DRAW_SELECT )
154*b1cdbd2cSJim Jagielski 		nNewId = SID_OBJECT_SELECT;
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski 	sal_uInt16 nNewFormId = 0;
157*b1cdbd2cSJim Jagielski 	if ( nNewId == SID_FM_CREATE_CONTROL && pArgs )
158*b1cdbd2cSJim Jagielski 	{
159*b1cdbd2cSJim Jagielski 		const SfxPoolItem* pItem;
160*b1cdbd2cSJim Jagielski 		if ( pArgs->GetItemState( SID_FM_CONTROL_IDENTIFIER, sal_True, &pItem ) == SFX_ITEM_SET &&
161*b1cdbd2cSJim Jagielski 			 pItem->ISA( SfxUInt16Item ) )
162*b1cdbd2cSJim Jagielski 			nNewFormId = ((const SfxUInt16Item*)pItem)->GetValue();
163*b1cdbd2cSJim Jagielski 	}
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski     String sStringItemValue;
166*b1cdbd2cSJim Jagielski     if ( pArgs )
167*b1cdbd2cSJim Jagielski     {
168*b1cdbd2cSJim Jagielski         const SfxPoolItem* pItem;
169*b1cdbd2cSJim Jagielski         if ( pArgs->GetItemState( nNewId, sal_True, &pItem ) == SFX_ITEM_SET && pItem->ISA( SfxStringItem ) )
170*b1cdbd2cSJim Jagielski             sStringItemValue = static_cast<const SfxStringItem*>(pItem)->GetValue();
171*b1cdbd2cSJim Jagielski     }
172*b1cdbd2cSJim Jagielski     bool bSwitchCustom = ( sStringItemValue.Len() && sDrawCustom.Len() && sStringItemValue != sDrawCustom );
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 	if (nNewId == SID_INSERT_FRAME)						// vom Tbx-Button
175*b1cdbd2cSJim Jagielski 		nNewId = SID_DRAW_TEXT;
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 	//	#97016# CTRL-SID_OBJECT_SELECT is used to select the first object,
178*b1cdbd2cSJim Jagielski 	//	but not if SID_OBJECT_SELECT is the result of clicking a create function again,
179*b1cdbd2cSJim Jagielski 	//	so this must be tested before changing nNewId below.
180*b1cdbd2cSJim Jagielski 	sal_Bool bSelectFirst = ( nNewId == SID_OBJECT_SELECT && (rReq.GetModifier() & KEY_MOD1) );
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 	sal_Bool bEx = IsDrawSelMode();
183*b1cdbd2cSJim Jagielski 	if ( rReq.GetModifier() & KEY_MOD1 )
184*b1cdbd2cSJim Jagielski 	{
185*b1cdbd2cSJim Jagielski 		//	#97016# always allow keyboard selection also on background layer
186*b1cdbd2cSJim Jagielski 		//	#98185# also allow creation of default objects if the same object type
187*b1cdbd2cSJim Jagielski 		//	was already active
188*b1cdbd2cSJim Jagielski 		bEx = sal_True;
189*b1cdbd2cSJim Jagielski 	}
190*b1cdbd2cSJim Jagielski 	else if ( nNewId == nDrawSfxId && ( nNewId != SID_FM_CREATE_CONTROL ||
191*b1cdbd2cSJim Jagielski                                     nNewFormId == nFormSfxId || nNewFormId == 0 ) && !bSwitchCustom )
192*b1cdbd2cSJim Jagielski 	{
193*b1cdbd2cSJim Jagielski         //  #i52871# if a different custom shape is selected, the slot id can be the same,
194*b1cdbd2cSJim Jagielski         //  so the custom shape type string has to be compared, too.
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 		//	SID_FM_CREATE_CONTROL mit nNewFormId==0 (ohne Parameter) kommt beim Deaktivieren
197*b1cdbd2cSJim Jagielski 		//	aus FuConstruct::SimpleMouseButtonUp
198*b1cdbd2cSJim Jagielski 		//	#59280# Execute fuer die Form-Shell, um im Controller zu deselektieren
199*b1cdbd2cSJim Jagielski 		if ( nNewId == SID_FM_CREATE_CONTROL )
200*b1cdbd2cSJim Jagielski 		{
201*b1cdbd2cSJim Jagielski 			GetViewData()->GetDispatcher().Execute(SID_FM_LEAVE_CREATE);
202*b1cdbd2cSJim Jagielski 			GetViewFrame()->GetBindings().InvalidateAll(sal_False);
203*b1cdbd2cSJim Jagielski 			//!	was fuer einen Slot braucht der komische Controller wirklich, um das anzuzeigen????
204*b1cdbd2cSJim Jagielski 		}
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 		bEx = !bEx;
207*b1cdbd2cSJim Jagielski 		nNewId = SID_OBJECT_SELECT;
208*b1cdbd2cSJim Jagielski 	}
209*b1cdbd2cSJim Jagielski 	else
210*b1cdbd2cSJim Jagielski 		bEx = sal_True;
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 	if ( nDrawSfxId == SID_FM_CREATE_CONTROL && nNewId != nDrawSfxId )
213*b1cdbd2cSJim Jagielski 	{
214*b1cdbd2cSJim Jagielski 		//	Wechsel von Control- zu Zeichenfunktion -> im Control-Controller deselektieren
215*b1cdbd2cSJim Jagielski 		GetViewData()->GetDispatcher().Execute(SID_FM_LEAVE_CREATE);
216*b1cdbd2cSJim Jagielski 		GetViewFrame()->GetBindings().InvalidateAll(sal_False);
217*b1cdbd2cSJim Jagielski 		//!	was fuer einen Slot braucht der komische Controller wirklich, um das anzuzeigen????
218*b1cdbd2cSJim Jagielski 	}
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 	SetDrawSelMode(bEx);
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 	pView->LockBackgroundLayer( !bEx );
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski 	if ( bSelectFirst )
225*b1cdbd2cSJim Jagielski 	{
226*b1cdbd2cSJim Jagielski 		//	#97016# select first draw object if none is selected yet
227*b1cdbd2cSJim Jagielski 		if(!pView->AreObjectsMarked())
228*b1cdbd2cSJim Jagielski 		{
229*b1cdbd2cSJim Jagielski 			// select first object
230*b1cdbd2cSJim Jagielski 			pView->UnmarkAllObj();
231*b1cdbd2cSJim Jagielski 			pView->MarkNextObj(sal_True);
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski 			// ...and make it visible
234*b1cdbd2cSJim Jagielski 			if(pView->AreObjectsMarked())
235*b1cdbd2cSJim Jagielski 				pView->MakeVisible(pView->GetAllMarkedRect(), *pWin);
236*b1cdbd2cSJim Jagielski 		}
237*b1cdbd2cSJim Jagielski 	}
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 	nDrawSfxId = nNewId;
240*b1cdbd2cSJim Jagielski     sDrawCustom.Erase();    // value is set below for custom shapes
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski 	if ( nNewId != SID_DRAW_CHART )				// Chart nicht mit DrawShell
243*b1cdbd2cSJim Jagielski 	{
244*b1cdbd2cSJim Jagielski 		if ( nNewId == SID_DRAW_TEXT || nNewId == SID_DRAW_TEXT_VERTICAL ||
245*b1cdbd2cSJim Jagielski 				nNewId == SID_DRAW_TEXT_MARQUEE || nNewId == SID_DRAW_NOTEEDIT )
246*b1cdbd2cSJim Jagielski 			SetDrawTextShell( sal_True );
247*b1cdbd2cSJim Jagielski 		else
248*b1cdbd2cSJim Jagielski 		{
249*b1cdbd2cSJim Jagielski 			if ( bEx || pView->GetMarkedObjectList().GetMarkCount() != 0 )
250*b1cdbd2cSJim Jagielski 				SetDrawShellOrSub();
251*b1cdbd2cSJim Jagielski 			else
252*b1cdbd2cSJim Jagielski 				SetDrawShell( sal_False );
253*b1cdbd2cSJim Jagielski 		}
254*b1cdbd2cSJim Jagielski 	}
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski 	if (pTabView->GetDrawFuncPtr())
257*b1cdbd2cSJim Jagielski 	{
258*b1cdbd2cSJim Jagielski 		if (pTabView->GetDrawFuncOldPtr() != pTabView->GetDrawFuncPtr())
259*b1cdbd2cSJim Jagielski 			delete pTabView->GetDrawFuncOldPtr();
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski 		pTabView->GetDrawFuncPtr()->Deactivate();
262*b1cdbd2cSJim Jagielski 		pTabView->SetDrawFuncOldPtr(pTabView->GetDrawFuncPtr());
263*b1cdbd2cSJim Jagielski 		pTabView->SetDrawFuncPtr(NULL);
264*b1cdbd2cSJim Jagielski 	}
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski 	SfxRequest aNewReq(rReq);
267*b1cdbd2cSJim Jagielski 	aNewReq.SetSlot(nDrawSfxId);
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski 	switch (nNewId)
270*b1cdbd2cSJim Jagielski 	{
271*b1cdbd2cSJim Jagielski 		case SID_OBJECT_SELECT:
272*b1cdbd2cSJim Jagielski 			//@#70206# Nicht immer zurueckschalten
273*b1cdbd2cSJim Jagielski 			if(pView->GetMarkedObjectList().GetMarkCount() == 0) SetDrawShell(bEx);
274*b1cdbd2cSJim Jagielski 			pTabView->SetDrawFuncPtr(new FuSelection(this, pWin, pView, pDoc, aNewReq));
275*b1cdbd2cSJim Jagielski 			break;
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski 		case SID_DRAW_LINE:
278*b1cdbd2cSJim Jagielski 		case SID_DRAW_RECT:
279*b1cdbd2cSJim Jagielski 		case SID_DRAW_ELLIPSE:
280*b1cdbd2cSJim Jagielski 			pTabView->SetDrawFuncPtr(new FuConstRectangle(this, pWin, pView, pDoc, aNewReq));
281*b1cdbd2cSJim Jagielski 			break;
282*b1cdbd2cSJim Jagielski 
283*b1cdbd2cSJim Jagielski 		case SID_DRAW_CAPTION:
284*b1cdbd2cSJim Jagielski 		case SID_DRAW_CAPTION_VERTICAL:
285*b1cdbd2cSJim Jagielski 			pTabView->SetDrawFuncPtr(new FuConstRectangle(this, pWin, pView, pDoc, aNewReq));
286*b1cdbd2cSJim Jagielski 			pView->SetFrameDragSingles( sal_False );
287*b1cdbd2cSJim Jagielski 			rBindings.Invalidate( SID_BEZIER_EDIT );
288*b1cdbd2cSJim Jagielski 			break;
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 		case SID_DRAW_POLYGON:
291*b1cdbd2cSJim Jagielski 		case SID_DRAW_POLYGON_NOFILL:
292*b1cdbd2cSJim Jagielski 		case SID_DRAW_BEZIER_NOFILL:
293*b1cdbd2cSJim Jagielski 		case SID_DRAW_FREELINE_NOFILL:
294*b1cdbd2cSJim Jagielski 			pTabView->SetDrawFuncPtr(new FuConstPolygon(this, pWin, pView, pDoc, aNewReq));
295*b1cdbd2cSJim Jagielski 			break;
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski 		case SID_DRAW_ARC:
298*b1cdbd2cSJim Jagielski 		case SID_DRAW_PIE:
299*b1cdbd2cSJim Jagielski 		case SID_DRAW_CIRCLECUT:
300*b1cdbd2cSJim Jagielski 			pTabView->SetDrawFuncPtr(new FuConstArc(this, pWin, pView, pDoc, aNewReq));
301*b1cdbd2cSJim Jagielski 			break;
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski 		case SID_DRAW_TEXT:
304*b1cdbd2cSJim Jagielski 		case SID_DRAW_TEXT_VERTICAL:
305*b1cdbd2cSJim Jagielski 		case SID_DRAW_TEXT_MARQUEE:
306*b1cdbd2cSJim Jagielski 		case SID_DRAW_NOTEEDIT:
307*b1cdbd2cSJim Jagielski 			pTabView->SetDrawFuncPtr(new FuText(this, pWin, pView, pDoc, aNewReq));
308*b1cdbd2cSJim Jagielski 			break;
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski 		case SID_FM_CREATE_CONTROL:
311*b1cdbd2cSJim Jagielski 			SetDrawFormShell(sal_True);
312*b1cdbd2cSJim Jagielski 			pTabView->SetDrawFuncPtr(new FuConstUnoControl(this, pWin, pView, pDoc, aNewReq));
313*b1cdbd2cSJim Jagielski 			nFormSfxId = nNewFormId;
314*b1cdbd2cSJim Jagielski 			break;
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski 		case SID_DRAW_CHART:
317*b1cdbd2cSJim Jagielski //UNUSED2008-05  bChartDlgIsEdit = sal_False;
318*b1cdbd2cSJim Jagielski 			pTabView->SetDrawFuncPtr(new FuMarkRect(this, pWin, pView, pDoc, aNewReq));
319*b1cdbd2cSJim Jagielski 			break;
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_BASIC :
322*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_SYMBOL :
323*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_ARROW :
324*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_FLOWCHART :
325*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_CALLOUT :
326*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_STAR :
327*b1cdbd2cSJim Jagielski 		case SID_DRAW_CS_ID :
328*b1cdbd2cSJim Jagielski 		{
329*b1cdbd2cSJim Jagielski 			pTabView->SetDrawFuncPtr( new FuConstCustomShape( this, pWin, pView, pDoc, aNewReq ));
330*b1cdbd2cSJim Jagielski             if ( nNewId != SID_DRAW_CS_ID )
331*b1cdbd2cSJim Jagielski             {
332*b1cdbd2cSJim Jagielski                 SFX_REQUEST_ARG( rReq, pEnumCommand, SfxStringItem, nNewId, sal_False );
333*b1cdbd2cSJim Jagielski                 if ( pEnumCommand )
334*b1cdbd2cSJim Jagielski                 {
335*b1cdbd2cSJim Jagielski                     aCurrShapeEnumCommand[ nNewId - SID_DRAWTBX_CS_BASIC ] = pEnumCommand->GetValue();
336*b1cdbd2cSJim Jagielski 		            SfxBindings& rBind = GetViewFrame()->GetBindings();
337*b1cdbd2cSJim Jagielski 		            rBind.Invalidate( nNewId );
338*b1cdbd2cSJim Jagielski 		            rBind.Update( nNewId );
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski                     sDrawCustom = pEnumCommand->GetValue();  // to detect when a different shape type is selected
341*b1cdbd2cSJim Jagielski                 }
342*b1cdbd2cSJim Jagielski             }
343*b1cdbd2cSJim Jagielski 		}
344*b1cdbd2cSJim Jagielski 		break;
345*b1cdbd2cSJim Jagielski 
346*b1cdbd2cSJim Jagielski         default:
347*b1cdbd2cSJim Jagielski 			break;
348*b1cdbd2cSJim Jagielski 	}
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski 	if (pTabView->GetDrawFuncPtr())
351*b1cdbd2cSJim Jagielski 		pTabView->GetDrawFuncPtr()->Activate();
352*b1cdbd2cSJim Jagielski 
353*b1cdbd2cSJim Jagielski 	rReq.Done();
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_INSERT_DRAW );
356*b1cdbd2cSJim Jagielski 	rBindings.Update( SID_INSERT_DRAW );
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski 	// #98185# Create default drawing objects via keyboard
359*b1cdbd2cSJim Jagielski 	// with qualifier construct directly
360*b1cdbd2cSJim Jagielski 	FuPoor*	pFuActual = GetDrawFuncPtr();
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski 	if(pFuActual && (rReq.GetModifier() & KEY_MOD1))
363*b1cdbd2cSJim Jagielski 	{
364*b1cdbd2cSJim Jagielski 		// #98185# Create default drawing objects via keyboard
365*b1cdbd2cSJim Jagielski 		const ScAppOptions& rAppOpt = SC_MOD()->GetAppOptions();
366*b1cdbd2cSJim Jagielski 		sal_uInt32 nDefaultObjectSizeWidth = rAppOpt.GetDefaultObjectSizeWidth();
367*b1cdbd2cSJim Jagielski 		sal_uInt32 nDefaultObjectSizeHeight = rAppOpt.GetDefaultObjectSizeHeight();
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski 		// calc position and size
370*b1cdbd2cSJim Jagielski 		Rectangle aVisArea = pWin->PixelToLogic(Rectangle(Point(0,0), pWin->GetOutputSizePixel()));
371*b1cdbd2cSJim Jagielski 		Point aPagePos = aVisArea.Center();
372*b1cdbd2cSJim Jagielski 		aPagePos.X() -= nDefaultObjectSizeWidth / 2;
373*b1cdbd2cSJim Jagielski 		aPagePos.Y() -= nDefaultObjectSizeHeight / 2;
374*b1cdbd2cSJim Jagielski 		Rectangle aNewObjectRectangle(aPagePos, Size(nDefaultObjectSizeWidth, nDefaultObjectSizeHeight));
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski 		ScDrawView* pDrView = GetScDrawView();
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 		if(pDrView)
379*b1cdbd2cSJim Jagielski 		{
380*b1cdbd2cSJim Jagielski 			SdrPageView* pPageView = pDrView->GetSdrPageView();
381*b1cdbd2cSJim Jagielski 
382*b1cdbd2cSJim Jagielski 			if(pPageView)
383*b1cdbd2cSJim Jagielski 			{
384*b1cdbd2cSJim Jagielski 				// create the default object
385*b1cdbd2cSJim Jagielski 				SdrObject* pObj = pFuActual->CreateDefaultObject(nNewId, aNewObjectRectangle);
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski 				if(pObj)
388*b1cdbd2cSJim Jagielski 				{
389*b1cdbd2cSJim Jagielski 					// insert into page
390*b1cdbd2cSJim Jagielski 					pView->InsertObjectAtView(pObj, *pPageView);
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski 					if ( nNewId == SID_DRAW_CAPTION || nNewId == SID_DRAW_CAPTION_VERTICAL )
393*b1cdbd2cSJim Jagielski 					{
394*b1cdbd2cSJim Jagielski 						//	#105815# use KeyInput to start edit mode (FuText is created).
395*b1cdbd2cSJim Jagielski 						//	For FuText objects, edit mode is handled within CreateDefaultObject.
396*b1cdbd2cSJim Jagielski 						//	KEY_F2 is handled in FuDraw::KeyInput.
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski 						pFuActual->KeyInput( KeyEvent( 0, KeyCode( KEY_F2 ) ) );
399*b1cdbd2cSJim Jagielski 					}
400*b1cdbd2cSJim Jagielski 				}
401*b1cdbd2cSJim Jagielski 			}
402*b1cdbd2cSJim Jagielski 		}
403*b1cdbd2cSJim Jagielski 	}
404*b1cdbd2cSJim Jagielski }
405*b1cdbd2cSJim Jagielski 
GetDrawState(SfxItemSet & rSet)406*b1cdbd2cSJim Jagielski void ScTabViewShell::GetDrawState(SfxItemSet &rSet)
407*b1cdbd2cSJim Jagielski {
408*b1cdbd2cSJim Jagielski 	SfxWhichIter	aIter(rSet);
409*b1cdbd2cSJim Jagielski 	sal_uInt16			nWhich = aIter.FirstWhich();
410*b1cdbd2cSJim Jagielski 
411*b1cdbd2cSJim Jagielski 	while ( nWhich )
412*b1cdbd2cSJim Jagielski 	{
413*b1cdbd2cSJim Jagielski 		switch ( nWhich )
414*b1cdbd2cSJim Jagielski 		{
415*b1cdbd2cSJim Jagielski 			case SID_INSERT_DRAW:
416*b1cdbd2cSJim Jagielski 				{
417*b1cdbd2cSJim Jagielski 					//	SID_OBJECT_SELECT nur, wenn "harter" Selektionsmodus
418*b1cdbd2cSJim Jagielski 					sal_uInt16 nPutId = nDrawSfxId;
419*b1cdbd2cSJim Jagielski 					if ( nPutId == SID_OBJECT_SELECT && !IsDrawSelMode() )
420*b1cdbd2cSJim Jagielski 						nPutId = USHRT_MAX;
421*b1cdbd2cSJim Jagielski 					// nur die Images, die auch auf dem Controller liegen
422*b1cdbd2cSJim Jagielski 					if ( nPutId != SID_OBJECT_SELECT &&
423*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_LINE &&
424*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_RECT &&
425*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_ELLIPSE &&
426*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_POLYGON_NOFILL &&
427*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_BEZIER_NOFILL &&
428*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_FREELINE_NOFILL &&
429*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_ARC &&
430*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_PIE &&
431*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_CIRCLECUT &&
432*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_TEXT &&
433*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_TEXT_VERTICAL &&
434*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_TEXT_MARQUEE &&
435*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_CAPTION &&
436*b1cdbd2cSJim Jagielski 						 nPutId != SID_DRAW_CAPTION_VERTICAL )
437*b1cdbd2cSJim Jagielski 						nPutId = USHRT_MAX;
438*b1cdbd2cSJim Jagielski 					SfxAllEnumItem aItem( nWhich, nPutId );
439*b1cdbd2cSJim Jagielski 					if ( !SvtLanguageOptions().IsVerticalTextEnabled() )
440*b1cdbd2cSJim Jagielski 					{
441*b1cdbd2cSJim Jagielski 						aItem.DisableValue( SID_DRAW_TEXT_VERTICAL );
442*b1cdbd2cSJim Jagielski 						aItem.DisableValue( SID_DRAW_CAPTION_VERTICAL );
443*b1cdbd2cSJim Jagielski 					}
444*b1cdbd2cSJim Jagielski 					rSet.Put( aItem );
445*b1cdbd2cSJim Jagielski 				}
446*b1cdbd2cSJim Jagielski 				break;
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski 			case SID_DRAW_CHART:
449*b1cdbd2cSJim Jagielski 				{
450*b1cdbd2cSJim Jagielski                     sal_Bool bOle = GetViewFrame()->GetFrame().IsInPlace();
451*b1cdbd2cSJim Jagielski 					if ( bOle || !SvtModuleOptions().IsChart() )
452*b1cdbd2cSJim Jagielski 						rSet.DisableItem( nWhich );
453*b1cdbd2cSJim Jagielski 				}
454*b1cdbd2cSJim Jagielski 				break;
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski 			case SID_OBJECT_SELECT:		// wichtig fuer den ollen Control-Controller
457*b1cdbd2cSJim Jagielski 				rSet.Put( SfxBoolItem( nWhich, nDrawSfxId == SID_OBJECT_SELECT && IsDrawSelMode() ) );
458*b1cdbd2cSJim Jagielski 				break;
459*b1cdbd2cSJim Jagielski 		}
460*b1cdbd2cSJim Jagielski 		nWhich = aIter.NextWhich();
461*b1cdbd2cSJim Jagielski 	}
462*b1cdbd2cSJim Jagielski }
463*b1cdbd2cSJim Jagielski 
SelectObject(const String & rName)464*b1cdbd2cSJim Jagielski sal_Bool ScTabViewShell::SelectObject( const String& rName )
465*b1cdbd2cSJim Jagielski {
466*b1cdbd2cSJim Jagielski 	ScDrawView* pView = GetViewData()->GetScDrawView();
467*b1cdbd2cSJim Jagielski 	if (!pView)
468*b1cdbd2cSJim Jagielski 		return sal_False;
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski 	sal_Bool bFound = pView->SelectObject( rName );
471*b1cdbd2cSJim Jagielski 	// DrawShell etc. is handled in MarkListHasChanged
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski 	return bFound;
474*b1cdbd2cSJim Jagielski }
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski 
478