xref: /aoo4110/main/sd/source/ui/view/drviewse.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_sd.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <com/sun/star/presentation/XPresentation2.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/form/FormButtonType.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/TransliterationModules.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include "undo/undomanager.hxx"
37*b1cdbd2cSJim Jagielski #include <vcl/waitobj.hxx>
38*b1cdbd2cSJim Jagielski #include <svl/aeitem.hxx>
39*b1cdbd2cSJim Jagielski #include <editeng/editstat.hxx>
40*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
41*b1cdbd2cSJim Jagielski #include <svl/urlbmk.hxx>
42*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
43*b1cdbd2cSJim Jagielski #include <svx/fmshell.hxx>
44*b1cdbd2cSJim Jagielski #include <vcl/scrbar.hxx>
45*b1cdbd2cSJim Jagielski #include <svx/svdopath.hxx>
46*b1cdbd2cSJim Jagielski #include <svx/svdundo.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/svdorect.hxx>
48*b1cdbd2cSJim Jagielski #include <svx/svdograf.hxx>
49*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
50*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx>
51*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
52*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
53*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
54*b1cdbd2cSJim Jagielski #include <svx/svxids.hrc>
55*b1cdbd2cSJim Jagielski #include <editeng/flditem.hxx>
56*b1cdbd2cSJim Jagielski #include <svx/ruler.hxx>
57*b1cdbd2cSJim Jagielski #include <svx/obj3d.hxx>
58*b1cdbd2cSJim Jagielski #include <svx/fmglob.hxx>
59*b1cdbd2cSJim Jagielski #include <svx/svdouno.hxx>
60*b1cdbd2cSJim Jagielski #include <svx/dataaccessdescriptor.hxx>
61*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
62*b1cdbd2cSJim Jagielski #include <svl/slstitm.hxx>
63*b1cdbd2cSJim Jagielski #include <sfx2/ipclient.hxx>
64*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
65*b1cdbd2cSJim Jagielski #include <avmedia/mediawindow.hxx>
66*b1cdbd2cSJim Jagielski #include <svl/urihelper.hxx>
67*b1cdbd2cSJim Jagielski #include <sfx2/docfile.hxx>
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski #include "DrawViewShell.hxx"
70*b1cdbd2cSJim Jagielski #include "slideshow.hxx"
71*b1cdbd2cSJim Jagielski #include "ViewShellImplementation.hxx"
72*b1cdbd2cSJim Jagielski #include "ViewShellHint.hxx"
73*b1cdbd2cSJim Jagielski #include "framework/FrameworkHelper.hxx"
74*b1cdbd2cSJim Jagielski #include "app.hrc"
75*b1cdbd2cSJim Jagielski #include "glob.hrc"
76*b1cdbd2cSJim Jagielski #include "strings.hrc"
77*b1cdbd2cSJim Jagielski #include "res_bmp.hrc"
78*b1cdbd2cSJim Jagielski #include "drawdoc.hxx"
79*b1cdbd2cSJim Jagielski #include "fusel.hxx"
80*b1cdbd2cSJim Jagielski #include "futext.hxx"
81*b1cdbd2cSJim Jagielski #include "fuconrec.hxx"
82*b1cdbd2cSJim Jagielski #include "fuconcs.hxx"
83*b1cdbd2cSJim Jagielski #include "fuconuno.hxx"
84*b1cdbd2cSJim Jagielski #include "fuconbez.hxx"
85*b1cdbd2cSJim Jagielski #include "fuediglu.hxx"
86*b1cdbd2cSJim Jagielski #include "fuconarc.hxx"
87*b1cdbd2cSJim Jagielski #include "fucon3d.hxx"
88*b1cdbd2cSJim Jagielski #include "sdresid.hxx"
89*b1cdbd2cSJim Jagielski #include "slideshow.hxx"
90*b1cdbd2cSJim Jagielski #include "Outliner.hxx"
91*b1cdbd2cSJim Jagielski #include "PresentationViewShell.hxx"
92*b1cdbd2cSJim Jagielski #include "sdpage.hxx"
93*b1cdbd2cSJim Jagielski #include "FrameView.hxx"
94*b1cdbd2cSJim Jagielski #include "zoomlist.hxx"
95*b1cdbd2cSJim Jagielski #include "drawview.hxx"
96*b1cdbd2cSJim Jagielski #include "DrawDocShell.hxx"
97*b1cdbd2cSJim Jagielski #include "sdattr.hxx"
98*b1cdbd2cSJim Jagielski #include "ViewShellBase.hxx"
99*b1cdbd2cSJim Jagielski #include "ToolBarManager.hxx"
100*b1cdbd2cSJim Jagielski #include "anminfo.hxx"
101*b1cdbd2cSJim Jagielski #include "optsitem.hxx"
102*b1cdbd2cSJim Jagielski #include "Window.hxx"
103*b1cdbd2cSJim Jagielski #include "fuformatpaintbrush.hxx"
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski using ::rtl::OUString;
106*b1cdbd2cSJim Jagielski using com::sun::star::ui::dialogs::XExecutableDialog;
107*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
108*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
109*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::presentation;
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski namespace sd {
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski #ifdef _MSC_VER
114*b1cdbd2cSJim Jagielski #pragma optimize ( "", off )
115*b1cdbd2cSJim Jagielski #endif
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski /*************************************************************************
118*b1cdbd2cSJim Jagielski |*
119*b1cdbd2cSJim Jagielski |* Permanente Funktionen
120*b1cdbd2cSJim Jagielski |*
121*b1cdbd2cSJim Jagielski \************************************************************************/
122*b1cdbd2cSJim Jagielski 
ImpAddPrintableCharactersToTextEdit(SfxRequest & rReq,::sd::View * pView)123*b1cdbd2cSJim Jagielski void ImpAddPrintableCharactersToTextEdit(SfxRequest& rReq, ::sd::View* pView)
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski 	// #98198# evtl. feed characters to activated textedit
126*b1cdbd2cSJim Jagielski 	const SfxItemSet* pSet = rReq.GetArgs();
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 	if(pSet)
129*b1cdbd2cSJim Jagielski 	{
130*b1cdbd2cSJim Jagielski 		String aInputString;
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 		if(SFX_ITEM_SET == pSet->GetItemState(SID_ATTR_CHAR))
133*b1cdbd2cSJim Jagielski 			aInputString = ((SfxStringItem&)pSet->Get(SID_ATTR_CHAR)).GetValue();
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 		if(aInputString.Len())
136*b1cdbd2cSJim Jagielski 		{
137*b1cdbd2cSJim Jagielski 			OutlinerView* pOLV = pView->GetTextEditOutlinerView();
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 			if(pOLV)
140*b1cdbd2cSJim Jagielski 			{
141*b1cdbd2cSJim Jagielski 				for(sal_uInt16 a(0); a < aInputString.Len(); a++)
142*b1cdbd2cSJim Jagielski 				{
143*b1cdbd2cSJim Jagielski 					sal_Char aChar = (sal_Char)aInputString.GetChar(a);
144*b1cdbd2cSJim Jagielski 					KeyCode aKeyCode;
145*b1cdbd2cSJim Jagielski 					KeyEvent aKeyEvent(aChar, aKeyCode);
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 					// add actual character
148*b1cdbd2cSJim Jagielski 					pOLV->PostKeyEvent(aKeyEvent);
149*b1cdbd2cSJim Jagielski 				}
150*b1cdbd2cSJim Jagielski 			}
151*b1cdbd2cSJim Jagielski 		}
152*b1cdbd2cSJim Jagielski 	}
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski 
FuPermanent(SfxRequest & rReq)155*b1cdbd2cSJim Jagielski void DrawViewShell::FuPermanent(SfxRequest& rReq)
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski 	// Waehrend einer Native-Diashow wird nichts ausgefuehrt!
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 	if (SlideShow::IsRunning(GetViewShellBase()))
160*b1cdbd2cSJim Jagielski 		return;
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 	sal_uInt16 nSId = rReq.GetSlot();
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 	if( HasCurrentFunction() &&
165*b1cdbd2cSJim Jagielski 		( nSId == SID_TEXTEDIT || nSId == SID_ATTR_CHAR || nSId == SID_TEXT_FITTOSIZE ||
166*b1cdbd2cSJim Jagielski 		  nSId == SID_ATTR_CHAR_VERTICAL || nSId == SID_TEXT_FITTOSIZE_VERTICAL ) )
167*b1cdbd2cSJim Jagielski 	{
168*b1cdbd2cSJim Jagielski 		FunctionReference xFunc( GetCurrentFunction() );
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski 		FuText* pFuText = dynamic_cast< FuText* >( xFunc.get() );
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 		if( pFuText )
173*b1cdbd2cSJim Jagielski 		{
174*b1cdbd2cSJim Jagielski 			pFuText->SetPermanent(sal_True);
175*b1cdbd2cSJim Jagielski 			xFunc->ReceiveRequest( rReq );
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 			MapSlot( nSId );
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 			Invalidate();
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski 			Invalidate();
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski 			// #98198# evtl. feed characters to activated textedit
184*b1cdbd2cSJim Jagielski 			if(SID_ATTR_CHAR == nSId && GetView() && GetView()->IsTextEdit())
185*b1cdbd2cSJim Jagielski 				ImpAddPrintableCharactersToTextEdit(rReq, GetView());
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski 			rReq.Done();
188*b1cdbd2cSJim Jagielski 			return;
189*b1cdbd2cSJim Jagielski 		}
190*b1cdbd2cSJim Jagielski 	}
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 	CheckLineTo (rReq);
193*b1cdbd2cSJim Jagielski     sal_uInt16 nOldSId = 0;
194*b1cdbd2cSJim Jagielski     sal_Bool bPermanent = sal_False;
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 	if( !mpDrawView )
197*b1cdbd2cSJim Jagielski 		return;
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 	if(HasCurrentFunction())
200*b1cdbd2cSJim Jagielski 	{
201*b1cdbd2cSJim Jagielski 		if( (nSId == SID_FORMATPAINTBRUSH) && (GetCurrentFunction()->GetSlotID() == SID_TEXTEDIT) )
202*b1cdbd2cSJim Jagielski 		{
203*b1cdbd2cSJim Jagielski 			// save text edit mode for format paintbrush!
204*b1cdbd2cSJim Jagielski 			SetOldFunction( GetCurrentFunction() );
205*b1cdbd2cSJim Jagielski 		}
206*b1cdbd2cSJim Jagielski 		else
207*b1cdbd2cSJim Jagielski 		{
208*b1cdbd2cSJim Jagielski 			if(GetOldFunction() == GetCurrentFunction())
209*b1cdbd2cSJim Jagielski 			{
210*b1cdbd2cSJim Jagielski 				SetOldFunction(0);
211*b1cdbd2cSJim Jagielski 			}
212*b1cdbd2cSJim Jagielski 		}
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski 		if ( nSId != SID_TEXTEDIT && nSId != SID_ATTR_CHAR && nSId != SID_TEXT_FITTOSIZE &&
215*b1cdbd2cSJim Jagielski 			 nSId != SID_ATTR_CHAR_VERTICAL && nSId != SID_TEXT_FITTOSIZE_VERTICAL &&
216*b1cdbd2cSJim Jagielski 			 nSId != SID_FORMATPAINTBRUSH &&
217*b1cdbd2cSJim Jagielski 			 mpDrawView->IsTextEdit() )
218*b1cdbd2cSJim Jagielski 		{
219*b1cdbd2cSJim Jagielski 			mpDrawView->SdrEndTextEdit();
220*b1cdbd2cSJim Jagielski 		}
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 		if( HasCurrentFunction() )
223*b1cdbd2cSJim Jagielski 		{
224*b1cdbd2cSJim Jagielski 			nOldSId = GetCurrentFunction()->GetSlotID();
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski 			if (nOldSId == nSId ||
227*b1cdbd2cSJim Jagielski 				((nOldSId == SID_TEXTEDIT || nOldSId == SID_ATTR_CHAR || nOldSId == SID_TEXT_FITTOSIZE ||
228*b1cdbd2cSJim Jagielski 				nOldSId == SID_ATTR_CHAR_VERTICAL || nOldSId == SID_TEXT_FITTOSIZE_VERTICAL) &&
229*b1cdbd2cSJim Jagielski 				(nSId == SID_TEXTEDIT || nSId == SID_ATTR_CHAR || nSId == SID_TEXT_FITTOSIZE ||
230*b1cdbd2cSJim Jagielski 				nSId == SID_ATTR_CHAR_VERTICAL || nSId == SID_TEXT_FITTOSIZE_VERTICAL )))
231*b1cdbd2cSJim Jagielski 			{
232*b1cdbd2cSJim Jagielski 				bPermanent = sal_True;
233*b1cdbd2cSJim Jagielski 			}
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 			GetCurrentFunction()->Deactivate();
236*b1cdbd2cSJim Jagielski 		}
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski 		SetCurrentFunction(0);
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 		SfxBindings& rBind = GetViewFrame()->GetBindings();
241*b1cdbd2cSJim Jagielski         rBind.Invalidate(nOldSId);
242*b1cdbd2cSJim Jagielski         rBind.Update(nOldSId);
243*b1cdbd2cSJim Jagielski 	}
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski 	// Slot wird gemapped (ToolboxImages/-Slots)
246*b1cdbd2cSJim Jagielski 	MapSlot( nSId );
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski     switch ( nSId )
249*b1cdbd2cSJim Jagielski 	{
250*b1cdbd2cSJim Jagielski 		case SID_TEXTEDIT:	// BASIC ???
251*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR:
252*b1cdbd2cSJim Jagielski 		case SID_ATTR_CHAR_VERTICAL:
253*b1cdbd2cSJim Jagielski 		case SID_TEXT_FITTOSIZE:
254*b1cdbd2cSJim Jagielski 		case SID_TEXT_FITTOSIZE_VERTICAL:
255*b1cdbd2cSJim Jagielski 		{
256*b1cdbd2cSJim Jagielski 			SetCurrentFunction( FuText::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq) );
257*b1cdbd2cSJim Jagielski 			GetCurrentFunction()->DoExecute(rReq);
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski 			SfxBindings& rBindings = GetViewFrame()->GetBindings();
260*b1cdbd2cSJim Jagielski 			rBindings.Invalidate( SID_ATTR_CHAR );
261*b1cdbd2cSJim Jagielski 			rBindings.Invalidate( SID_ATTR_CHAR_VERTICAL );
262*b1cdbd2cSJim Jagielski 			rBindings.Invalidate( SID_TEXT_FITTOSIZE );
263*b1cdbd2cSJim Jagielski 			rBindings.Invalidate( SID_TEXT_FITTOSIZE_VERTICAL );
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 			// #98198# evtl. feed characters to activated textedit
266*b1cdbd2cSJim Jagielski 			if(SID_ATTR_CHAR == nSId && GetView() && GetView()->IsTextEdit())
267*b1cdbd2cSJim Jagielski 				ImpAddPrintableCharactersToTextEdit(rReq, GetView());
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski 			rReq.Done();
270*b1cdbd2cSJim Jagielski 		}
271*b1cdbd2cSJim Jagielski 		break;
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski 		case SID_FM_CREATE_CONTROL:
274*b1cdbd2cSJim Jagielski 		{
275*b1cdbd2cSJim Jagielski 			SetCurrentFunction( FuConstructUnoControl::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
276*b1cdbd2cSJim Jagielski 			rReq.Done();
277*b1cdbd2cSJim Jagielski 		}
278*b1cdbd2cSJim Jagielski 		break;
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski 		// #98721#
281*b1cdbd2cSJim Jagielski 		case SID_FM_CREATE_FIELDCONTROL:
282*b1cdbd2cSJim Jagielski 		{
283*b1cdbd2cSJim Jagielski 			SFX_REQUEST_ARG( rReq, pDescriptorItem, SfxUnoAnyItem, SID_FM_DATACCESS_DESCRIPTOR, sal_False );
284*b1cdbd2cSJim Jagielski 			DBG_ASSERT( pDescriptorItem, "DrawViewShell::FuPermanent(SID_FM_CREATE_FIELDCONTROL): invalid request args!" );
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 			if(pDescriptorItem)
287*b1cdbd2cSJim Jagielski 			{
288*b1cdbd2cSJim Jagielski 				// get the form view
289*b1cdbd2cSJim Jagielski 				FmFormView* pFormView = PTR_CAST(FmFormView, mpDrawView);
290*b1cdbd2cSJim Jagielski 				SdrPageView* pPageView = pFormView ? pFormView->GetSdrPageView() : NULL;
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski 				if(pPageView)
293*b1cdbd2cSJim Jagielski 				{
294*b1cdbd2cSJim Jagielski 					::svx::ODataAccessDescriptor aDescriptor(pDescriptorItem->GetValue());
295*b1cdbd2cSJim Jagielski 					SdrObject* pNewDBField = pFormView->CreateFieldControl(aDescriptor);
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski 					if(pNewDBField)
298*b1cdbd2cSJim Jagielski 					{
299*b1cdbd2cSJim Jagielski 						Rectangle aVisArea = GetActiveWindow()->PixelToLogic(Rectangle(Point(0,0), GetActiveWindow()->GetOutputSizePixel()));
300*b1cdbd2cSJim Jagielski 						Point aObjPos(aVisArea.Center());
301*b1cdbd2cSJim Jagielski 						Size aObjSize(pNewDBField->GetLogicRect().GetSize());
302*b1cdbd2cSJim Jagielski 						aObjPos.X() -= aObjSize.Width() / 2;
303*b1cdbd2cSJim Jagielski 						aObjPos.Y() -= aObjSize.Height() / 2;
304*b1cdbd2cSJim Jagielski 						Rectangle aNewObjectRectangle(aObjPos, aObjSize);
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski 						pNewDBField->SetLogicRect(aNewObjectRectangle);
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski 						GetView()->InsertObjectAtView(pNewDBField, *pPageView);
309*b1cdbd2cSJim Jagielski 					}
310*b1cdbd2cSJim Jagielski 				}
311*b1cdbd2cSJim Jagielski 			}
312*b1cdbd2cSJim Jagielski 			rReq.Done();
313*b1cdbd2cSJim Jagielski 		}
314*b1cdbd2cSJim Jagielski 		break;
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski 		case SID_OBJECT_SELECT:
317*b1cdbd2cSJim Jagielski 		case SID_OBJECT_ROTATE:
318*b1cdbd2cSJim Jagielski 		case SID_OBJECT_MIRROR:
319*b1cdbd2cSJim Jagielski 		case SID_OBJECT_CROP:
320*b1cdbd2cSJim Jagielski 		case SID_OBJECT_TRANSPARENCE:
321*b1cdbd2cSJim Jagielski 		case SID_OBJECT_GRADIENT:
322*b1cdbd2cSJim Jagielski 		case SID_OBJECT_SHEAR:
323*b1cdbd2cSJim Jagielski 		case SID_OBJECT_CROOK_ROTATE:
324*b1cdbd2cSJim Jagielski 		case SID_OBJECT_CROOK_SLANT:
325*b1cdbd2cSJim Jagielski 		case SID_OBJECT_CROOK_STRETCH:
326*b1cdbd2cSJim Jagielski         case SID_CONVERT_TO_3D_LATHE:
327*b1cdbd2cSJim Jagielski 		{
328*b1cdbd2cSJim Jagielski 			short nSlotId = rReq.GetSlot();
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski 			if( nSlotId == SID_OBJECT_ROTATE )
331*b1cdbd2cSJim Jagielski 			{
332*b1cdbd2cSJim Jagielski 				// togle rotation
333*b1cdbd2cSJim Jagielski 				if( nOldSId == nSlotId )
334*b1cdbd2cSJim Jagielski 				{
335*b1cdbd2cSJim Jagielski 					nSlotId = SID_OBJECT_SELECT;
336*b1cdbd2cSJim Jagielski 					rReq.SetSlot( nSlotId );
337*b1cdbd2cSJim Jagielski 				}
338*b1cdbd2cSJim Jagielski 			}
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 			if (nSlotId == SID_OBJECT_CROOK_ROTATE ||
341*b1cdbd2cSJim Jagielski 				nSlotId == SID_OBJECT_CROOK_SLANT ||
342*b1cdbd2cSJim Jagielski 				nSlotId == SID_OBJECT_CROOK_STRETCH)
343*b1cdbd2cSJim Jagielski 			{
344*b1cdbd2cSJim Jagielski 				if ( mpDrawView->GetMarkedObjectList().GetMarkCount() > 0 &&
345*b1cdbd2cSJim Jagielski 				    !mpDrawView->IsCrookAllowed( mpDrawView->IsCrookNoContortion() ) )
346*b1cdbd2cSJim Jagielski 				{
347*b1cdbd2cSJim Jagielski 					if ( mpDrawView->IsPresObjSelected() )
348*b1cdbd2cSJim Jagielski 					{
349*b1cdbd2cSJim Jagielski                         ::sd::Window* pWindow = GetActiveWindow();
350*b1cdbd2cSJim Jagielski                         InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
351*b1cdbd2cSJim Jagielski 					}
352*b1cdbd2cSJim Jagielski 					else if ( QueryBox(GetActiveWindow(), WB_YES_NO,
353*b1cdbd2cSJim Jagielski                                       String(SdResId(STR_ASK_FOR_CONVERT_TO_BEZIER) )
354*b1cdbd2cSJim Jagielski 									  ).Execute() == RET_YES )
355*b1cdbd2cSJim Jagielski 					{
356*b1cdbd2cSJim Jagielski 						// Implizite Wandlung in Bezier
357*b1cdbd2cSJim Jagielski                         WaitObject aWait( (Window*)GetActiveWindow() );
358*b1cdbd2cSJim Jagielski 						mpDrawView->ConvertMarkedToPathObj(sal_False);
359*b1cdbd2cSJim Jagielski 					}
360*b1cdbd2cSJim Jagielski 				}
361*b1cdbd2cSJim Jagielski 			}
362*b1cdbd2cSJim Jagielski 			else if (nSlotId == SID_OBJECT_SHEAR)
363*b1cdbd2cSJim Jagielski 			{
364*b1cdbd2cSJim Jagielski                 sal_uLong i = 0;
365*b1cdbd2cSJim Jagielski                 const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
366*b1cdbd2cSJim Jagielski                 sal_uLong nMarkCnt = rMarkList.GetMarkCount();
367*b1cdbd2cSJim Jagielski                 sal_Bool b3DObjMarked = sal_False;
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski                 while (i < nMarkCnt && !b3DObjMarked)
370*b1cdbd2cSJim Jagielski                 {
371*b1cdbd2cSJim Jagielski                     if (rMarkList.GetMark(i)->GetMarkedSdrObj()->ISA(E3dObject))
372*b1cdbd2cSJim Jagielski                     {
373*b1cdbd2cSJim Jagielski                         b3DObjMarked = sal_True;
374*b1cdbd2cSJim Jagielski                     }
375*b1cdbd2cSJim Jagielski                     else
376*b1cdbd2cSJim Jagielski                     {
377*b1cdbd2cSJim Jagielski                         i++;
378*b1cdbd2cSJim Jagielski                     }
379*b1cdbd2cSJim Jagielski                 }
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski                 if ( nMarkCnt > 0 && !b3DObjMarked &&
382*b1cdbd2cSJim Jagielski                      (!mpDrawView->IsShearAllowed() || !mpDrawView->IsDistortAllowed()) )
383*b1cdbd2cSJim Jagielski 				{
384*b1cdbd2cSJim Jagielski 					if ( mpDrawView->IsPresObjSelected() )
385*b1cdbd2cSJim Jagielski 					{
386*b1cdbd2cSJim Jagielski                         ::sd::Window* pWindow = GetActiveWindow();
387*b1cdbd2cSJim Jagielski                         InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
388*b1cdbd2cSJim Jagielski 					}
389*b1cdbd2cSJim Jagielski 					else if ( QueryBox(GetActiveWindow(), WB_YES_NO,
390*b1cdbd2cSJim Jagielski                                       String(SdResId(STR_ASK_FOR_CONVERT_TO_BEZIER) )
391*b1cdbd2cSJim Jagielski 									  ).Execute() == RET_YES )
392*b1cdbd2cSJim Jagielski 					{
393*b1cdbd2cSJim Jagielski 						// Implizite Wandlung in Bezier
394*b1cdbd2cSJim Jagielski                         WaitObject aWait( (Window*)GetActiveWindow() );
395*b1cdbd2cSJim Jagielski 						mpDrawView->ConvertMarkedToPathObj(sal_False);
396*b1cdbd2cSJim Jagielski 					}
397*b1cdbd2cSJim Jagielski 				}
398*b1cdbd2cSJim Jagielski 			}
399*b1cdbd2cSJim Jagielski 
400*b1cdbd2cSJim Jagielski 			SetCurrentFunction( FuSelection::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq) );
401*b1cdbd2cSJim Jagielski 			rReq.Done();
402*b1cdbd2cSJim Jagielski 			Invalidate( SID_OBJECT_SELECT );
403*b1cdbd2cSJim Jagielski 		}
404*b1cdbd2cSJim Jagielski 		break;
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 		case SID_DRAW_LINE:
407*b1cdbd2cSJim Jagielski 		case SID_DRAW_XLINE:
408*b1cdbd2cSJim Jagielski         case SID_DRAW_MEASURELINE:
409*b1cdbd2cSJim Jagielski 		case SID_LINE_ARROW_START:
410*b1cdbd2cSJim Jagielski 		case SID_LINE_ARROW_END:
411*b1cdbd2cSJim Jagielski 		case SID_LINE_ARROWS:
412*b1cdbd2cSJim Jagielski 		case SID_LINE_ARROW_CIRCLE:
413*b1cdbd2cSJim Jagielski 		case SID_LINE_CIRCLE_ARROW:
414*b1cdbd2cSJim Jagielski 		case SID_LINE_ARROW_SQUARE:
415*b1cdbd2cSJim Jagielski 		case SID_LINE_SQUARE_ARROW:
416*b1cdbd2cSJim Jagielski 
417*b1cdbd2cSJim Jagielski 		case SID_DRAW_RECT:
418*b1cdbd2cSJim Jagielski 		case SID_DRAW_RECT_NOFILL:
419*b1cdbd2cSJim Jagielski 		case SID_DRAW_RECT_ROUND:
420*b1cdbd2cSJim Jagielski 		case SID_DRAW_RECT_ROUND_NOFILL:
421*b1cdbd2cSJim Jagielski 		case SID_DRAW_SQUARE:
422*b1cdbd2cSJim Jagielski 		case SID_DRAW_SQUARE_NOFILL:
423*b1cdbd2cSJim Jagielski 		case SID_DRAW_SQUARE_ROUND:
424*b1cdbd2cSJim Jagielski 		case SID_DRAW_SQUARE_ROUND_NOFILL:
425*b1cdbd2cSJim Jagielski 		case SID_DRAW_ELLIPSE:
426*b1cdbd2cSJim Jagielski 		case SID_DRAW_ELLIPSE_NOFILL:
427*b1cdbd2cSJim Jagielski 		case SID_DRAW_CIRCLE:
428*b1cdbd2cSJim Jagielski 		case SID_DRAW_CIRCLE_NOFILL:
429*b1cdbd2cSJim Jagielski 		case SID_DRAW_CAPTION:
430*b1cdbd2cSJim Jagielski 		case SID_DRAW_CAPTION_VERTICAL:
431*b1cdbd2cSJim Jagielski 		case SID_TOOL_CONNECTOR:
432*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_ARROW_START:
433*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_ARROW_END:
434*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_ARROWS:
435*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CIRCLE_START:
436*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CIRCLE_END:
437*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CIRCLES:
438*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINE:
439*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINE_ARROW_START:
440*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINE_ARROW_END:
441*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINE_ARROWS:
442*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINE_CIRCLE_START:
443*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINE_CIRCLE_END:
444*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINE_CIRCLES:
445*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CURVE:
446*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CURVE_ARROW_START:
447*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CURVE_ARROW_END:
448*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CURVE_ARROWS:
449*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CURVE_CIRCLE_START:
450*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CURVE_CIRCLE_END:
451*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_CURVE_CIRCLES:
452*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINES:
453*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINES_ARROW_START:
454*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINES_ARROW_END:
455*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINES_ARROWS:
456*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINES_CIRCLE_START:
457*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINES_CIRCLE_END:
458*b1cdbd2cSJim Jagielski         case SID_CONNECTOR_LINES_CIRCLES:
459*b1cdbd2cSJim Jagielski         {
460*b1cdbd2cSJim Jagielski 			SetCurrentFunction( FuConstructRectangle::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
461*b1cdbd2cSJim Jagielski             rReq.Done();
462*b1cdbd2cSJim Jagielski 		}
463*b1cdbd2cSJim Jagielski 		break;
464*b1cdbd2cSJim Jagielski 		case SID_DRAW_POLYGON:
465*b1cdbd2cSJim Jagielski 		case SID_DRAW_POLYGON_NOFILL:
466*b1cdbd2cSJim Jagielski 		case SID_DRAW_XPOLYGON:
467*b1cdbd2cSJim Jagielski 		case SID_DRAW_XPOLYGON_NOFILL:
468*b1cdbd2cSJim Jagielski         case SID_DRAW_FREELINE:
469*b1cdbd2cSJim Jagielski         case SID_DRAW_FREELINE_NOFILL:
470*b1cdbd2cSJim Jagielski         case SID_DRAW_BEZIER_FILL:          // BASIC
471*b1cdbd2cSJim Jagielski         case SID_DRAW_BEZIER_NOFILL:        // BASIC
472*b1cdbd2cSJim Jagielski 		{
473*b1cdbd2cSJim Jagielski 			SetCurrentFunction( FuConstructBezierPolygon::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent) );
474*b1cdbd2cSJim Jagielski             rReq.Done();
475*b1cdbd2cSJim Jagielski 		}
476*b1cdbd2cSJim Jagielski 		break;
477*b1cdbd2cSJim Jagielski 
478*b1cdbd2cSJim Jagielski         case SID_GLUE_EDITMODE:
479*b1cdbd2cSJim Jagielski 		{
480*b1cdbd2cSJim Jagielski             if (nOldSId != SID_GLUE_EDITMODE)
481*b1cdbd2cSJim Jagielski             {
482*b1cdbd2cSJim Jagielski 				SetCurrentFunction( FuEditGluePoints::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
483*b1cdbd2cSJim Jagielski             }
484*b1cdbd2cSJim Jagielski             else
485*b1cdbd2cSJim Jagielski             {
486*b1cdbd2cSJim Jagielski 				GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
487*b1cdbd2cSJim Jagielski             }
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski 			rReq.Done();
490*b1cdbd2cSJim Jagielski 		}
491*b1cdbd2cSJim Jagielski 		break;
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski 		case SID_DRAW_ARC:
494*b1cdbd2cSJim Jagielski 		case SID_DRAW_CIRCLEARC:
495*b1cdbd2cSJim Jagielski 		case SID_DRAW_PIE:
496*b1cdbd2cSJim Jagielski 		case SID_DRAW_PIE_NOFILL:
497*b1cdbd2cSJim Jagielski 		case SID_DRAW_CIRCLEPIE:
498*b1cdbd2cSJim Jagielski 		case SID_DRAW_CIRCLEPIE_NOFILL:
499*b1cdbd2cSJim Jagielski 		case SID_DRAW_ELLIPSECUT:
500*b1cdbd2cSJim Jagielski 		case SID_DRAW_ELLIPSECUT_NOFILL:
501*b1cdbd2cSJim Jagielski 		case SID_DRAW_CIRCLECUT:
502*b1cdbd2cSJim Jagielski 		case SID_DRAW_CIRCLECUT_NOFILL:
503*b1cdbd2cSJim Jagielski 		{
504*b1cdbd2cSJim Jagielski 			SetCurrentFunction( FuConstructArc::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent) );
505*b1cdbd2cSJim Jagielski             rReq.Done();
506*b1cdbd2cSJim Jagielski 		}
507*b1cdbd2cSJim Jagielski 		break;
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski 		case SID_3D_CUBE:
510*b1cdbd2cSJim Jagielski 		case SID_3D_SHELL:
511*b1cdbd2cSJim Jagielski 		case SID_3D_SPHERE:
512*b1cdbd2cSJim Jagielski 		case SID_3D_TORUS:
513*b1cdbd2cSJim Jagielski 		case SID_3D_HALF_SPHERE:
514*b1cdbd2cSJim Jagielski 		case SID_3D_CYLINDER:
515*b1cdbd2cSJim Jagielski 		case SID_3D_CONE:
516*b1cdbd2cSJim Jagielski 		case SID_3D_PYRAMID:
517*b1cdbd2cSJim Jagielski 		{
518*b1cdbd2cSJim Jagielski 			SetCurrentFunction( FuConstruct3dObject::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
519*b1cdbd2cSJim Jagielski             rReq.Done();
520*b1cdbd2cSJim Jagielski 		}
521*b1cdbd2cSJim Jagielski 		break;
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_BASIC :
524*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_SYMBOL :
525*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_ARROW :
526*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_FLOWCHART :
527*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_CALLOUT :
528*b1cdbd2cSJim Jagielski 		case SID_DRAWTBX_CS_STAR :
529*b1cdbd2cSJim Jagielski 		case SID_DRAW_CS_ID :
530*b1cdbd2cSJim Jagielski 		{
531*b1cdbd2cSJim Jagielski 			SetCurrentFunction( FuConstructCustomShape::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq, bPermanent ) );
532*b1cdbd2cSJim Jagielski             rReq.Done();
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski             if ( nSId != SID_DRAW_CS_ID )
535*b1cdbd2cSJim Jagielski             {
536*b1cdbd2cSJim Jagielski                 SfxBindings& rBind = GetViewFrame()->GetBindings();
537*b1cdbd2cSJim Jagielski                 rBind.Invalidate( nSId );
538*b1cdbd2cSJim Jagielski                 rBind.Update( nSId );
539*b1cdbd2cSJim Jagielski             }
540*b1cdbd2cSJim Jagielski 		}
541*b1cdbd2cSJim Jagielski 		break;
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski         case SID_FORMATPAINTBRUSH:
544*b1cdbd2cSJim Jagielski         {
545*b1cdbd2cSJim Jagielski     		SetCurrentFunction( FuFormatPaintBrush::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) );
546*b1cdbd2cSJim Jagielski     		rReq.Done();
547*b1cdbd2cSJim Jagielski             SfxBindings& rBind = GetViewFrame()->GetBindings();
548*b1cdbd2cSJim Jagielski             rBind.Invalidate( nSId );
549*b1cdbd2cSJim Jagielski             rBind.Update( nSId );
550*b1cdbd2cSJim Jagielski             break;
551*b1cdbd2cSJim Jagielski         }
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski         default:
554*b1cdbd2cSJim Jagielski    		break;
555*b1cdbd2cSJim Jagielski 	}
556*b1cdbd2cSJim Jagielski 
557*b1cdbd2cSJim Jagielski 	if(HasOldFunction())
558*b1cdbd2cSJim Jagielski 	{
559*b1cdbd2cSJim Jagielski 		sal_uInt16 nSlotId = GetOldFunction()->GetSlotID();
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski 		GetOldFunction()->Deactivate();
562*b1cdbd2cSJim Jagielski 		SetOldFunction(0);
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski 		SfxBindings& rBind = GetViewFrame()->GetBindings();
565*b1cdbd2cSJim Jagielski 		rBind.Invalidate( nSlotId );
566*b1cdbd2cSJim Jagielski 		rBind.Update( nSlotId );
567*b1cdbd2cSJim Jagielski 	}
568*b1cdbd2cSJim Jagielski 
569*b1cdbd2cSJim Jagielski 	if(HasCurrentFunction())
570*b1cdbd2cSJim Jagielski 	{
571*b1cdbd2cSJim Jagielski 		GetCurrentFunction()->Activate();
572*b1cdbd2cSJim Jagielski 		SetOldFunction( GetCurrentFunction() );
573*b1cdbd2cSJim Jagielski 
574*b1cdbd2cSJim Jagielski 		SetHelpId( GetCurrentFunction()->GetSlotID() );
575*b1cdbd2cSJim Jagielski 	}
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski 	// Shell wird invalidiert, schneller als einzeln (laut MI)
578*b1cdbd2cSJim Jagielski 	// Jetzt explizit der letzte Slot incl. Update()
579*b1cdbd2cSJim Jagielski 	Invalidate();
580*b1cdbd2cSJim Jagielski 
581*b1cdbd2cSJim Jagielski 	// #97016# III CTRL-SID_OBJECT_SELECT -> select first draw object if none is selected yet
582*b1cdbd2cSJim Jagielski 	if(SID_OBJECT_SELECT == nSId && HasCurrentFunction() && (rReq.GetModifier() & KEY_MOD1))
583*b1cdbd2cSJim Jagielski 	{
584*b1cdbd2cSJim Jagielski 		if(!GetView()->AreObjectsMarked())
585*b1cdbd2cSJim Jagielski 		{
586*b1cdbd2cSJim Jagielski 			// select first object
587*b1cdbd2cSJim Jagielski 			GetView()->UnmarkAllObj();
588*b1cdbd2cSJim Jagielski 			GetView()->MarkNextObj(sal_True);
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski 			// ...and make it visible
591*b1cdbd2cSJim Jagielski 			if(GetView()->AreObjectsMarked())
592*b1cdbd2cSJim Jagielski 				GetView()->MakeVisible(GetView()->GetAllMarkedRect(), *GetActiveWindow());
593*b1cdbd2cSJim Jagielski 		}
594*b1cdbd2cSJim Jagielski 	}
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski 	// #97016# with qualifier construct directly
597*b1cdbd2cSJim Jagielski 	if(HasCurrentFunction() && (rReq.GetModifier() & KEY_MOD1))
598*b1cdbd2cSJim Jagielski 	{
599*b1cdbd2cSJim Jagielski 		// get SdOptions
600*b1cdbd2cSJim Jagielski 		SdOptions* pOptions = SD_MOD()->GetSdOptions(GetDoc()->GetDocumentType());
601*b1cdbd2cSJim Jagielski 		sal_uInt32 nDefaultObjectSizeWidth(pOptions->GetDefaultObjectSizeWidth());
602*b1cdbd2cSJim Jagielski 		sal_uInt32 nDefaultObjectSizeHeight(pOptions->GetDefaultObjectSizeHeight());
603*b1cdbd2cSJim Jagielski 
604*b1cdbd2cSJim Jagielski 		// calc position and size
605*b1cdbd2cSJim Jagielski 		Rectangle aVisArea = GetActiveWindow()->PixelToLogic(Rectangle(Point(0,0), GetActiveWindow()->GetOutputSizePixel()));
606*b1cdbd2cSJim Jagielski 		Point aPagePos = aVisArea.Center();
607*b1cdbd2cSJim Jagielski 		aPagePos.X() -= nDefaultObjectSizeWidth / 2;
608*b1cdbd2cSJim Jagielski 		aPagePos.Y() -= nDefaultObjectSizeHeight / 2;
609*b1cdbd2cSJim Jagielski 		Rectangle aNewObjectRectangle(aPagePos, Size(nDefaultObjectSizeWidth, nDefaultObjectSizeHeight));
610*b1cdbd2cSJim Jagielski 		SdrPageView* pPageView = mpDrawView->GetSdrPageView();
611*b1cdbd2cSJim Jagielski 
612*b1cdbd2cSJim Jagielski 		if(pPageView)
613*b1cdbd2cSJim Jagielski 		{
614*b1cdbd2cSJim Jagielski 			// create the default object
615*b1cdbd2cSJim Jagielski 			SdrObject* pObj = GetCurrentFunction()->CreateDefaultObject(nSId, aNewObjectRectangle);
616*b1cdbd2cSJim Jagielski 
617*b1cdbd2cSJim Jagielski 			if(pObj)
618*b1cdbd2cSJim Jagielski 			{
619*b1cdbd2cSJim Jagielski 				// insert into page
620*b1cdbd2cSJim Jagielski 				GetView()->InsertObjectAtView(pObj, *pPageView);
621*b1cdbd2cSJim Jagielski 
622*b1cdbd2cSJim Jagielski                 // Now that pFuActual has done what it was created for we
623*b1cdbd2cSJim Jagielski                 // can switch on the edit mode for callout objects.
624*b1cdbd2cSJim Jagielski                 switch (nSId)
625*b1cdbd2cSJim Jagielski                 {
626*b1cdbd2cSJim Jagielski                     case SID_DRAW_CAPTION:
627*b1cdbd2cSJim Jagielski                     case SID_DRAW_CAPTION_VERTICAL:
628*b1cdbd2cSJim Jagielski                     {
629*b1cdbd2cSJim Jagielski                         // Make FuText the current function.
630*b1cdbd2cSJim Jagielski                         SfxUInt16Item aItem (SID_TEXTEDIT, 1);
631*b1cdbd2cSJim Jagielski                         GetViewFrame()->GetDispatcher()->
632*b1cdbd2cSJim Jagielski                             Execute(SID_TEXTEDIT, SFX_CALLMODE_SYNCHRON |
633*b1cdbd2cSJim Jagielski                                 SFX_CALLMODE_RECORD, &aItem, 0L);
634*b1cdbd2cSJim Jagielski                         // Put text object into edit mode.
635*b1cdbd2cSJim Jagielski                         GetView()->SdrBeginTextEdit(static_cast<SdrTextObj*>(pObj), pPageView);
636*b1cdbd2cSJim Jagielski                         break;
637*b1cdbd2cSJim Jagielski                     }
638*b1cdbd2cSJim Jagielski                 }
639*b1cdbd2cSJim Jagielski 			}
640*b1cdbd2cSJim Jagielski 		}
641*b1cdbd2cSJim Jagielski 	}
642*b1cdbd2cSJim Jagielski }
643*b1cdbd2cSJim Jagielski 
644*b1cdbd2cSJim Jagielski /*************************************************************************
645*b1cdbd2cSJim Jagielski |*
646*b1cdbd2cSJim Jagielski |* SfxRequests fuer Support-Funktionen
647*b1cdbd2cSJim Jagielski |*
648*b1cdbd2cSJim Jagielski \************************************************************************/
649*b1cdbd2cSJim Jagielski 
FuSupport(SfxRequest & rReq)650*b1cdbd2cSJim Jagielski void DrawViewShell::FuSupport(SfxRequest& rReq)
651*b1cdbd2cSJim Jagielski {
652*b1cdbd2cSJim Jagielski 	if( rReq.GetSlot() == SID_STYLE_FAMILY && rReq.GetArgs())
653*b1cdbd2cSJim Jagielski 		GetDocSh()->SetStyleFamily(((SfxUInt16Item&)rReq.GetArgs()->Get( SID_STYLE_FAMILY )).GetValue());
654*b1cdbd2cSJim Jagielski 
655*b1cdbd2cSJim Jagielski 	// Waehrend einer Native-Diashow wird nichts ausgefuehrt!
656*b1cdbd2cSJim Jagielski 	if(SlideShow::IsRunning(GetViewShellBase()) &&
657*b1cdbd2cSJim Jagielski 		(rReq.GetSlot() != SID_PRESENTATION_END &&
658*b1cdbd2cSJim Jagielski          rReq.GetSlot() != SID_SIZE_PAGE))
659*b1cdbd2cSJim Jagielski 		return;
660*b1cdbd2cSJim Jagielski 
661*b1cdbd2cSJim Jagielski 	CheckLineTo (rReq);
662*b1cdbd2cSJim Jagielski 
663*b1cdbd2cSJim Jagielski 	if( !mpDrawView )
664*b1cdbd2cSJim Jagielski 		return;
665*b1cdbd2cSJim Jagielski 
666*b1cdbd2cSJim Jagielski 	sal_uInt16 nSId = rReq.GetSlot();
667*b1cdbd2cSJim Jagielski 
668*b1cdbd2cSJim Jagielski 	// Slot wird evtl. gemapped (ToolboxImages/-Slots)
669*b1cdbd2cSJim Jagielski 	MapSlot( nSId );
670*b1cdbd2cSJim Jagielski 
671*b1cdbd2cSJim Jagielski 	switch ( nSId )
672*b1cdbd2cSJim Jagielski 	{
673*b1cdbd2cSJim Jagielski 		case SID_CLEAR_UNDO_STACK:
674*b1cdbd2cSJim Jagielski 		{
675*b1cdbd2cSJim Jagielski 			GetDocSh()->ClearUndoBuffer();
676*b1cdbd2cSJim Jagielski             rReq.Ignore ();
677*b1cdbd2cSJim Jagielski 		}
678*b1cdbd2cSJim Jagielski 		break;
679*b1cdbd2cSJim Jagielski 
680*b1cdbd2cSJim Jagielski         // Slots der ToolboxController gemapped ausfuehren
681*b1cdbd2cSJim Jagielski         case SID_OBJECT_CHOOSE_MODE:
682*b1cdbd2cSJim Jagielski         case SID_POSITION:
683*b1cdbd2cSJim Jagielski         case SID_OBJECT_ALIGN:
684*b1cdbd2cSJim Jagielski         case SID_ZOOM_TOOLBOX:
685*b1cdbd2cSJim Jagielski         case SID_DRAWTBX_TEXT:
686*b1cdbd2cSJim Jagielski         case SID_DRAWTBX_RECTANGLES:
687*b1cdbd2cSJim Jagielski         case SID_DRAWTBX_ELLIPSES:
688*b1cdbd2cSJim Jagielski         case SID_DRAWTBX_LINES:
689*b1cdbd2cSJim Jagielski         case SID_DRAWTBX_ARROWS:
690*b1cdbd2cSJim Jagielski         case SID_DRAWTBX_3D_OBJECTS:
691*b1cdbd2cSJim Jagielski         case SID_DRAWTBX_CONNECTORS:
692*b1cdbd2cSJim Jagielski         case SID_DRAWTBX_INSERT:
693*b1cdbd2cSJim Jagielski         {
694*b1cdbd2cSJim Jagielski             sal_uInt16 nMappedSlot = GetMappedSlot( nSId );
695*b1cdbd2cSJim Jagielski             if( nMappedSlot > 0 )
696*b1cdbd2cSJim Jagielski             {
697*b1cdbd2cSJim Jagielski                 SfxRequest aReq( nMappedSlot, 0, GetDoc()->GetItemPool() );
698*b1cdbd2cSJim Jagielski                 ExecuteSlot( aReq );
699*b1cdbd2cSJim Jagielski             }
700*b1cdbd2cSJim Jagielski         }
701*b1cdbd2cSJim Jagielski         break;
702*b1cdbd2cSJim Jagielski 
703*b1cdbd2cSJim Jagielski 		case SID_PRESENTATION:
704*b1cdbd2cSJim Jagielski 		case SID_REHEARSE_TIMINGS:
705*b1cdbd2cSJim Jagielski 		{
706*b1cdbd2cSJim Jagielski 			Reference< XPresentation2 > xPresentation( GetDoc()->getPresentation() );
707*b1cdbd2cSJim Jagielski 			if( xPresentation.is() )
708*b1cdbd2cSJim Jagielski 			{
709*b1cdbd2cSJim Jagielski 				if( ( SID_REHEARSE_TIMINGS != rReq.GetSlot() ) )
710*b1cdbd2cSJim Jagielski 					xPresentation->start();
711*b1cdbd2cSJim Jagielski 				else
712*b1cdbd2cSJim Jagielski 					xPresentation->rehearseTimings();
713*b1cdbd2cSJim Jagielski 			}
714*b1cdbd2cSJim Jagielski 			rReq.Ignore ();
715*b1cdbd2cSJim Jagielski         }
716*b1cdbd2cSJim Jagielski 		break;
717*b1cdbd2cSJim Jagielski 
718*b1cdbd2cSJim Jagielski 		case SID_PRESENTATION_END:
719*b1cdbd2cSJim Jagielski 		{
720*b1cdbd2cSJim Jagielski             StopSlideShow(true);
721*b1cdbd2cSJim Jagielski 
722*b1cdbd2cSJim Jagielski             rReq.Ignore ();
723*b1cdbd2cSJim Jagielski 		}
724*b1cdbd2cSJim Jagielski 		break;
725*b1cdbd2cSJim Jagielski 
726*b1cdbd2cSJim Jagielski 		case SID_BEZIER_EDIT:
727*b1cdbd2cSJim Jagielski 		{
728*b1cdbd2cSJim Jagielski             mpDrawView->SetFrameDragSingles(!mpDrawView->IsFrameDragSingles());
729*b1cdbd2cSJim Jagielski 
730*b1cdbd2cSJim Jagielski             /******************************************************************
731*b1cdbd2cSJim Jagielski             * ObjectBar einschalten
732*b1cdbd2cSJim Jagielski             ******************************************************************/
733*b1cdbd2cSJim Jagielski             if( dynamic_cast< FuSelection* >( GetCurrentFunction().get() ) || dynamic_cast< FuConstructBezierPolygon* >( GetCurrentFunction().get() ) )
734*b1cdbd2cSJim Jagielski             {
735*b1cdbd2cSJim Jagielski                 // Tell the tool bar manager about the context change.
736*b1cdbd2cSJim Jagielski 				GetViewShellBase().GetToolBarManager()->SelectionHasChanged(*this,*mpDrawView);
737*b1cdbd2cSJim Jagielski             }
738*b1cdbd2cSJim Jagielski 
739*b1cdbd2cSJim Jagielski             Invalidate(SID_BEZIER_EDIT);
740*b1cdbd2cSJim Jagielski             rReq.Ignore();
741*b1cdbd2cSJim Jagielski         }
742*b1cdbd2cSJim Jagielski         break;
743*b1cdbd2cSJim Jagielski 
744*b1cdbd2cSJim Jagielski 		case SID_OBJECT_CLOSE:
745*b1cdbd2cSJim Jagielski 		{
746*b1cdbd2cSJim Jagielski 			const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
747*b1cdbd2cSJim Jagielski 			if ( rMarkList.GetMark(0) && !mpDrawView->IsAction() )
748*b1cdbd2cSJim Jagielski 			{
749*b1cdbd2cSJim Jagielski 				SdrPathObj* pPathObj = (SdrPathObj*) rMarkList.GetMark(0)->GetMarkedSdrObj();
750*b1cdbd2cSJim Jagielski 				const bool bUndo = mpDrawView->IsUndoEnabled();
751*b1cdbd2cSJim Jagielski 				if( bUndo )
752*b1cdbd2cSJim Jagielski 					mpDrawView->BegUndo(String(SdResId(STR_UNDO_BEZCLOSE)));
753*b1cdbd2cSJim Jagielski 
754*b1cdbd2cSJim Jagielski 				mpDrawView->UnmarkAllPoints();
755*b1cdbd2cSJim Jagielski 
756*b1cdbd2cSJim Jagielski 				if( bUndo )
757*b1cdbd2cSJim Jagielski 					mpDrawView->AddUndo(new SdrUndoGeoObj(*pPathObj));
758*b1cdbd2cSJim Jagielski 
759*b1cdbd2cSJim Jagielski 				pPathObj->ToggleClosed();
760*b1cdbd2cSJim Jagielski 
761*b1cdbd2cSJim Jagielski 				if( bUndo )
762*b1cdbd2cSJim Jagielski 					mpDrawView->EndUndo();
763*b1cdbd2cSJim Jagielski 			}
764*b1cdbd2cSJim Jagielski 			rReq.Done();
765*b1cdbd2cSJim Jagielski 		}
766*b1cdbd2cSJim Jagielski 		break;
767*b1cdbd2cSJim Jagielski 
768*b1cdbd2cSJim Jagielski 		case SID_CUT:
769*b1cdbd2cSJim Jagielski 		{
770*b1cdbd2cSJim Jagielski 			if ( mpDrawView->IsPresObjSelected(sal_False, sal_True, sal_False, sal_True) )
771*b1cdbd2cSJim Jagielski 			{
772*b1cdbd2cSJim Jagielski                 ::sd::Window* pWindow = GetActiveWindow();
773*b1cdbd2cSJim Jagielski                 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
774*b1cdbd2cSJim Jagielski 			}
775*b1cdbd2cSJim Jagielski 			else
776*b1cdbd2cSJim Jagielski 			{
777*b1cdbd2cSJim Jagielski 				if(HasCurrentFunction())
778*b1cdbd2cSJim Jagielski 				{
779*b1cdbd2cSJim Jagielski 					GetCurrentFunction()->DoCut();
780*b1cdbd2cSJim Jagielski 				}
781*b1cdbd2cSJim Jagielski 				else if(mpDrawView)
782*b1cdbd2cSJim Jagielski 				{
783*b1cdbd2cSJim Jagielski 					mpDrawView->DoCut();
784*b1cdbd2cSJim Jagielski 				}
785*b1cdbd2cSJim Jagielski 			}
786*b1cdbd2cSJim Jagielski 			rReq.Ignore ();
787*b1cdbd2cSJim Jagielski 		}
788*b1cdbd2cSJim Jagielski 		break;
789*b1cdbd2cSJim Jagielski 
790*b1cdbd2cSJim Jagielski 		case SID_COPY:
791*b1cdbd2cSJim Jagielski 		{
792*b1cdbd2cSJim Jagielski 			if ( mpDrawView->IsPresObjSelected(sal_False, sal_True, sal_False, sal_True) )
793*b1cdbd2cSJim Jagielski 			{
794*b1cdbd2cSJim Jagielski                 ::sd::Window* pWindow = GetActiveWindow();
795*b1cdbd2cSJim Jagielski                 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
796*b1cdbd2cSJim Jagielski 			}
797*b1cdbd2cSJim Jagielski 			else
798*b1cdbd2cSJim Jagielski 			{
799*b1cdbd2cSJim Jagielski 				if(HasCurrentFunction())
800*b1cdbd2cSJim Jagielski 				{
801*b1cdbd2cSJim Jagielski 					GetCurrentFunction()->DoCopy();
802*b1cdbd2cSJim Jagielski 				}
803*b1cdbd2cSJim Jagielski 				else if( mpDrawView )
804*b1cdbd2cSJim Jagielski 				{
805*b1cdbd2cSJim Jagielski 					mpDrawView->DoCopy();
806*b1cdbd2cSJim Jagielski 				}
807*b1cdbd2cSJim Jagielski 			}
808*b1cdbd2cSJim Jagielski 			rReq.Ignore ();
809*b1cdbd2cSJim Jagielski 		}
810*b1cdbd2cSJim Jagielski 		break;
811*b1cdbd2cSJim Jagielski 
812*b1cdbd2cSJim Jagielski 		case SID_PASTE:
813*b1cdbd2cSJim Jagielski 		{
814*b1cdbd2cSJim Jagielski 			WaitObject aWait( (Window*)GetActiveWindow() );
815*b1cdbd2cSJim Jagielski 
816*b1cdbd2cSJim Jagielski 			if(HasCurrentFunction())
817*b1cdbd2cSJim Jagielski 			{
818*b1cdbd2cSJim Jagielski 				GetCurrentFunction()->DoPaste();
819*b1cdbd2cSJim Jagielski 			}
820*b1cdbd2cSJim Jagielski 			else if(mpDrawView)
821*b1cdbd2cSJim Jagielski 			{
822*b1cdbd2cSJim Jagielski 				mpDrawView->DoPaste();
823*b1cdbd2cSJim Jagielski 			}
824*b1cdbd2cSJim Jagielski 
825*b1cdbd2cSJim Jagielski 			rReq.Ignore ();
826*b1cdbd2cSJim Jagielski 		}
827*b1cdbd2cSJim Jagielski 		break;
828*b1cdbd2cSJim Jagielski 
829*b1cdbd2cSJim Jagielski         case SID_CLIPBOARD_FORMAT_ITEMS:
830*b1cdbd2cSJim Jagielski         {
831*b1cdbd2cSJim Jagielski 			WaitObject              aWait( (Window*)GetActiveWindow() );
832*b1cdbd2cSJim Jagielski 	        TransferableDataHelper  aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( GetActiveWindow() ) );
833*b1cdbd2cSJim Jagielski             const SfxItemSet*       pReqArgs = rReq.GetArgs();
834*b1cdbd2cSJim Jagielski             sal_uInt32                  nFormat = 0;
835*b1cdbd2cSJim Jagielski 
836*b1cdbd2cSJim Jagielski             if( pReqArgs )
837*b1cdbd2cSJim Jagielski             {
838*b1cdbd2cSJim Jagielski                 SFX_REQUEST_ARG( rReq, pIsActive, SfxUInt32Item, SID_CLIPBOARD_FORMAT_ITEMS, sal_False );
839*b1cdbd2cSJim Jagielski                 nFormat = pIsActive->GetValue();
840*b1cdbd2cSJim Jagielski             }
841*b1cdbd2cSJim Jagielski 
842*b1cdbd2cSJim Jagielski 
843*b1cdbd2cSJim Jagielski 	        if( nFormat && aDataHelper.GetTransferable().is() )
844*b1cdbd2cSJim Jagielski 	        {
845*b1cdbd2cSJim Jagielski 		        sal_Int8 nAction = DND_ACTION_COPY;
846*b1cdbd2cSJim Jagielski 
847*b1cdbd2cSJim Jagielski                 if( !mpDrawView->InsertData( aDataHelper,
848*b1cdbd2cSJim Jagielski 						                  GetActiveWindow()->PixelToLogic( Rectangle( Point(), GetActiveWindow()->GetOutputSizePixel() ).Center() ),
849*b1cdbd2cSJim Jagielski 						                  nAction, sal_False, nFormat ) )
850*b1cdbd2cSJim Jagielski                 {
851*b1cdbd2cSJim Jagielski 			        INetBookmark    aINetBookmark( aEmptyStr, aEmptyStr );
852*b1cdbd2cSJim Jagielski 
853*b1cdbd2cSJim Jagielski 			        if( ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) &&
854*b1cdbd2cSJim Jagielski 				          aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) ) ||
855*b1cdbd2cSJim Jagielski 				        ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR ) &&
856*b1cdbd2cSJim Jagielski 				          aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR, aINetBookmark ) ) ||
857*b1cdbd2cSJim Jagielski 				        ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR ) &&
858*b1cdbd2cSJim Jagielski 				          aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR, aINetBookmark ) ) )
859*b1cdbd2cSJim Jagielski 			        {
860*b1cdbd2cSJim Jagielski 				        InsertURLField( aINetBookmark.GetURL(), aINetBookmark.GetDescription(), aEmptyStr, NULL );
861*b1cdbd2cSJim Jagielski 			        }
862*b1cdbd2cSJim Jagielski                 }
863*b1cdbd2cSJim Jagielski 	        }
864*b1cdbd2cSJim Jagielski         }
865*b1cdbd2cSJim Jagielski         break;
866*b1cdbd2cSJim Jagielski 
867*b1cdbd2cSJim Jagielski 		case SID_DELETE:
868*b1cdbd2cSJim Jagielski 		{
869*b1cdbd2cSJim Jagielski 			if ( mpDrawView->IsTextEdit() )
870*b1cdbd2cSJim Jagielski 			{
871*b1cdbd2cSJim Jagielski 				OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
872*b1cdbd2cSJim Jagielski 
873*b1cdbd2cSJim Jagielski 				if (pOLV)
874*b1cdbd2cSJim Jagielski 				{
875*b1cdbd2cSJim Jagielski 					KeyCode aKCode(KEY_DELETE);
876*b1cdbd2cSJim Jagielski 					KeyEvent aKEvt( 0, aKCode);
877*b1cdbd2cSJim Jagielski 					pOLV->PostKeyEvent(aKEvt);
878*b1cdbd2cSJim Jagielski 				}
879*b1cdbd2cSJim Jagielski 			}
880*b1cdbd2cSJim Jagielski 			else if ( mpDrawView->IsPresObjSelected(sal_False, sal_True, sal_False, sal_True) )
881*b1cdbd2cSJim Jagielski 			{
882*b1cdbd2cSJim Jagielski                 ::sd::Window* pWindow = GetActiveWindow();
883*b1cdbd2cSJim Jagielski                 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
884*b1cdbd2cSJim Jagielski 			}
885*b1cdbd2cSJim Jagielski 			else
886*b1cdbd2cSJim Jagielski 			{
887*b1cdbd2cSJim Jagielski 				KeyCode aKCode(KEY_DELETE);
888*b1cdbd2cSJim Jagielski 				KeyEvent aKEvt( 0, aKCode);
889*b1cdbd2cSJim Jagielski 
890*b1cdbd2cSJim Jagielski 				bool bConsumed = mpDrawView && mpDrawView->getSmartTags().KeyInput( aKEvt );
891*b1cdbd2cSJim Jagielski 
892*b1cdbd2cSJim Jagielski 				if( !bConsumed && HasCurrentFunction() )
893*b1cdbd2cSJim Jagielski 					bConsumed = GetCurrentFunction()->KeyInput(aKEvt);
894*b1cdbd2cSJim Jagielski 
895*b1cdbd2cSJim Jagielski 				if( !bConsumed && mpDrawView )
896*b1cdbd2cSJim Jagielski 					mpDrawView->DeleteMarked();
897*b1cdbd2cSJim Jagielski 			}
898*b1cdbd2cSJim Jagielski 			rReq.Ignore ();
899*b1cdbd2cSJim Jagielski 		}
900*b1cdbd2cSJim Jagielski 		break;
901*b1cdbd2cSJim Jagielski 
902*b1cdbd2cSJim Jagielski         case SID_NOTESMODE:
903*b1cdbd2cSJim Jagielski 		case SID_HANDOUTMODE:
904*b1cdbd2cSJim Jagielski 			// AutoLayouts have to be ready.
905*b1cdbd2cSJim Jagielski 			GetDoc()->StopWorkStartupDelay();
906*b1cdbd2cSJim Jagielski             // Fall through to following case statements.
907*b1cdbd2cSJim Jagielski 
908*b1cdbd2cSJim Jagielski         case SID_DRAWINGMODE:
909*b1cdbd2cSJim Jagielski 		case SID_DIAMODE:
910*b1cdbd2cSJim Jagielski         case SID_OUTLINEMODE:
911*b1cdbd2cSJim Jagielski             // Let the sub-shell manager handle the slot handling.
912*b1cdbd2cSJim Jagielski             framework::FrameworkHelper::Instance(GetViewShellBase())->HandleModeChangeSlot(
913*b1cdbd2cSJim Jagielski                 nSId,
914*b1cdbd2cSJim Jagielski                 rReq);
915*b1cdbd2cSJim Jagielski 			rReq.Ignore ();
916*b1cdbd2cSJim Jagielski             break;
917*b1cdbd2cSJim Jagielski 
918*b1cdbd2cSJim Jagielski         case SID_MASTERPAGE:          // BASIC
919*b1cdbd2cSJim Jagielski         case SID_SLIDE_MASTERPAGE:    // BASIC
920*b1cdbd2cSJim Jagielski         case SID_TITLE_MASTERPAGE:    // BASIC
921*b1cdbd2cSJim Jagielski         case SID_NOTES_MASTERPAGE:    // BASIC
922*b1cdbd2cSJim Jagielski         case SID_HANDOUT_MASTERPAGE:  // BASIC
923*b1cdbd2cSJim Jagielski 		{
924*b1cdbd2cSJim Jagielski 			// AutoLayouts muessen fertig sein
925*b1cdbd2cSJim Jagielski 			GetDoc()->StopWorkStartupDelay();
926*b1cdbd2cSJim Jagielski 
927*b1cdbd2cSJim Jagielski 			const SfxItemSet* pReqArgs = rReq.GetArgs();
928*b1cdbd2cSJim Jagielski 
929*b1cdbd2cSJim Jagielski 			if ( pReqArgs )
930*b1cdbd2cSJim Jagielski 			{
931*b1cdbd2cSJim Jagielski 				SFX_REQUEST_ARG (rReq, pIsActive, SfxBoolItem, SID_MASTERPAGE, sal_False);
932*b1cdbd2cSJim Jagielski 				mbIsLayerModeActive = pIsActive->GetValue ();
933*b1cdbd2cSJim Jagielski 			}
934*b1cdbd2cSJim Jagielski 
935*b1cdbd2cSJim Jagielski             Broadcast (
936*b1cdbd2cSJim Jagielski                 ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START));
937*b1cdbd2cSJim Jagielski 
938*b1cdbd2cSJim Jagielski             if (nSId == SID_MASTERPAGE                                       ||
939*b1cdbd2cSJim Jagielski                 (nSId == SID_SLIDE_MASTERPAGE   && mePageKind == PK_STANDARD) ||
940*b1cdbd2cSJim Jagielski                 (nSId == SID_TITLE_MASTERPAGE   && mePageKind == PK_STANDARD) ||
941*b1cdbd2cSJim Jagielski                 (nSId == SID_NOTES_MASTERPAGE   && mePageKind == PK_NOTES)    ||
942*b1cdbd2cSJim Jagielski                 (nSId == SID_HANDOUT_MASTERPAGE && mePageKind == PK_HANDOUT))
943*b1cdbd2cSJim Jagielski             {
944*b1cdbd2cSJim Jagielski                 if (nSId == SID_TITLE_MASTERPAGE ||
945*b1cdbd2cSJim Jagielski 					nSId == SID_SLIDE_MASTERPAGE)
946*b1cdbd2cSJim Jagielski                 {
947*b1cdbd2cSJim Jagielski                     // Gibt es eine Seite mit dem AutoLayout "Titel"?
948*b1cdbd2cSJim Jagielski                     sal_Bool bFound = sal_False;
949*b1cdbd2cSJim Jagielski                     sal_uInt16 i = 0;
950*b1cdbd2cSJim Jagielski                     sal_uInt16 nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
951*b1cdbd2cSJim Jagielski 
952*b1cdbd2cSJim Jagielski                     while (i < nCount && !bFound)
953*b1cdbd2cSJim Jagielski                     {
954*b1cdbd2cSJim Jagielski                         SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
955*b1cdbd2cSJim Jagielski 
956*b1cdbd2cSJim Jagielski                         if (nSId == SID_TITLE_MASTERPAGE && pPage->GetAutoLayout() == AUTOLAYOUT_TITLE)
957*b1cdbd2cSJim Jagielski                         {
958*b1cdbd2cSJim Jagielski                             bFound = sal_True;
959*b1cdbd2cSJim Jagielski                             SwitchPage((pPage->GetPageNum() - 1) / 2);
960*b1cdbd2cSJim Jagielski                         }
961*b1cdbd2cSJim Jagielski                         else if (nSId == SID_SLIDE_MASTERPAGE && pPage->GetAutoLayout() != AUTOLAYOUT_TITLE)
962*b1cdbd2cSJim Jagielski                         {
963*b1cdbd2cSJim Jagielski                             bFound = sal_True;
964*b1cdbd2cSJim Jagielski                             SwitchPage((pPage->GetPageNum() - 1) / 2);
965*b1cdbd2cSJim Jagielski                         }
966*b1cdbd2cSJim Jagielski 
967*b1cdbd2cSJim Jagielski                         i++;
968*b1cdbd2cSJim Jagielski                     }
969*b1cdbd2cSJim Jagielski                 }
970*b1cdbd2cSJim Jagielski 
971*b1cdbd2cSJim Jagielski                 // Default-Layer der MasterPage einschalten
972*b1cdbd2cSJim Jagielski                 mpDrawView->SetActiveLayer( String( SdResId(STR_LAYER_BCKGRNDOBJ) ) );
973*b1cdbd2cSJim Jagielski 
974*b1cdbd2cSJim Jagielski                 ChangeEditMode(EM_MASTERPAGE, mbIsLayerModeActive);
975*b1cdbd2cSJim Jagielski 
976*b1cdbd2cSJim Jagielski                 if(HasCurrentFunction(SID_BEZIER_EDIT))
977*b1cdbd2cSJim Jagielski 					GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
978*b1cdbd2cSJim Jagielski             }
979*b1cdbd2cSJim Jagielski             else
980*b1cdbd2cSJim Jagielski             {
981*b1cdbd2cSJim Jagielski                 // Switch to requested ViewShell.
982*b1cdbd2cSJim Jagielski                 ::OUString sRequestedView;
983*b1cdbd2cSJim Jagielski                 PageKind ePageKind;
984*b1cdbd2cSJim Jagielski                 switch (nSId)
985*b1cdbd2cSJim Jagielski                 {
986*b1cdbd2cSJim Jagielski                     case SID_SLIDE_MASTERPAGE:
987*b1cdbd2cSJim Jagielski                     case SID_TITLE_MASTERPAGE:
988*b1cdbd2cSJim Jagielski                     default:
989*b1cdbd2cSJim Jagielski                         sRequestedView = framework::FrameworkHelper::msImpressViewURL;
990*b1cdbd2cSJim Jagielski                         ePageKind = PK_STANDARD;
991*b1cdbd2cSJim Jagielski                         break;
992*b1cdbd2cSJim Jagielski 
993*b1cdbd2cSJim Jagielski                     case SID_NOTES_MASTERPAGE:
994*b1cdbd2cSJim Jagielski                         sRequestedView = framework::FrameworkHelper::msNotesViewURL;
995*b1cdbd2cSJim Jagielski                         ePageKind = PK_NOTES;
996*b1cdbd2cSJim Jagielski                         break;
997*b1cdbd2cSJim Jagielski 
998*b1cdbd2cSJim Jagielski                     case SID_HANDOUT_MASTERPAGE:
999*b1cdbd2cSJim Jagielski                         sRequestedView = framework::FrameworkHelper::msHandoutViewURL;
1000*b1cdbd2cSJim Jagielski                         ePageKind = PK_HANDOUT;
1001*b1cdbd2cSJim Jagielski                         break;
1002*b1cdbd2cSJim Jagielski                 }
1003*b1cdbd2cSJim Jagielski 
1004*b1cdbd2cSJim Jagielski                 mpFrameView->SetViewShEditMode(EM_MASTERPAGE, ePageKind);
1005*b1cdbd2cSJim Jagielski                 mpFrameView->SetLayerMode(mbIsLayerModeActive);
1006*b1cdbd2cSJim Jagielski                 framework::FrameworkHelper::Instance(GetViewShellBase())->RequestView(
1007*b1cdbd2cSJim Jagielski                     sRequestedView,
1008*b1cdbd2cSJim Jagielski                     framework::FrameworkHelper::msCenterPaneURL);
1009*b1cdbd2cSJim Jagielski             }
1010*b1cdbd2cSJim Jagielski             Broadcast (
1011*b1cdbd2cSJim Jagielski                 ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END));
1012*b1cdbd2cSJim Jagielski 
1013*b1cdbd2cSJim Jagielski 			InvalidateWindows();
1014*b1cdbd2cSJim Jagielski 			Invalidate();
1015*b1cdbd2cSJim Jagielski 
1016*b1cdbd2cSJim Jagielski 			rReq.Done();
1017*b1cdbd2cSJim Jagielski 		}
1018*b1cdbd2cSJim Jagielski 		break;
1019*b1cdbd2cSJim Jagielski 
1020*b1cdbd2cSJim Jagielski 
1021*b1cdbd2cSJim Jagielski         case SID_CLOSE_MASTER_VIEW:
1022*b1cdbd2cSJim Jagielski         {
1023*b1cdbd2cSJim Jagielski             Broadcast (
1024*b1cdbd2cSJim Jagielski                 ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_START));
1025*b1cdbd2cSJim Jagielski 
1026*b1cdbd2cSJim Jagielski             // Switch page back to the first one.  Not doing so leads to a
1027*b1cdbd2cSJim Jagielski             // crash.  This seems to be some bug in the edit mode switching
1028*b1cdbd2cSJim Jagielski             // and page switching methods.
1029*b1cdbd2cSJim Jagielski 			SwitchPage (0);
1030*b1cdbd2cSJim Jagielski             ChangeEditMode(EM_PAGE, IsLayerModeActive());
1031*b1cdbd2cSJim Jagielski             Broadcast (
1032*b1cdbd2cSJim Jagielski                 ViewShellHint(ViewShellHint::HINT_CHANGE_EDIT_MODE_END));
1033*b1cdbd2cSJim Jagielski 
1034*b1cdbd2cSJim Jagielski             if(HasCurrentFunction(SID_BEZIER_EDIT))
1035*b1cdbd2cSJim Jagielski             {
1036*b1cdbd2cSJim Jagielski                 GetViewFrame()->GetDispatcher()->Execute(
1037*b1cdbd2cSJim Jagielski                     SID_OBJECT_SELECT,
1038*b1cdbd2cSJim Jagielski                     SFX_CALLMODE_ASYNCHRON);
1039*b1cdbd2cSJim Jagielski             }
1040*b1cdbd2cSJim Jagielski 
1041*b1cdbd2cSJim Jagielski 
1042*b1cdbd2cSJim Jagielski 			rReq.Done();
1043*b1cdbd2cSJim Jagielski         }
1044*b1cdbd2cSJim Jagielski         break;
1045*b1cdbd2cSJim Jagielski 
1046*b1cdbd2cSJim Jagielski 
1047*b1cdbd2cSJim Jagielski 		case SID_RULER:
1048*b1cdbd2cSJim Jagielski         {
1049*b1cdbd2cSJim Jagielski 			const SfxItemSet* pReqArgs = rReq.GetArgs();
1050*b1cdbd2cSJim Jagielski 
1051*b1cdbd2cSJim Jagielski 			// #97516# Remember old ruler state
1052*b1cdbd2cSJim Jagielski 			sal_Bool bOldHasRuler(HasRuler());
1053*b1cdbd2cSJim Jagielski 
1054*b1cdbd2cSJim Jagielski 			if ( pReqArgs )
1055*b1cdbd2cSJim Jagielski 			{
1056*b1cdbd2cSJim Jagielski 				SFX_REQUEST_ARG (rReq, pIsActive, SfxBoolItem, SID_RULER, sal_False);
1057*b1cdbd2cSJim Jagielski 				SetRuler (pIsActive->GetValue ());
1058*b1cdbd2cSJim Jagielski 			}
1059*b1cdbd2cSJim Jagielski 			else SetRuler (!HasRuler());
1060*b1cdbd2cSJim Jagielski 
1061*b1cdbd2cSJim Jagielski 			// #97516# Did ruler state change? Tell that to SdOptions, too.
1062*b1cdbd2cSJim Jagielski 			sal_Bool bHasRuler(HasRuler());
1063*b1cdbd2cSJim Jagielski 
1064*b1cdbd2cSJim Jagielski 			if(bOldHasRuler != bHasRuler)
1065*b1cdbd2cSJim Jagielski 			{
1066*b1cdbd2cSJim Jagielski 				SdOptions* pOptions = SD_MOD()->GetSdOptions(GetDoc()->GetDocumentType());
1067*b1cdbd2cSJim Jagielski 
1068*b1cdbd2cSJim Jagielski 				if(pOptions && pOptions->IsRulerVisible() != bHasRuler)
1069*b1cdbd2cSJim Jagielski 				{
1070*b1cdbd2cSJim Jagielski 					pOptions->SetRulerVisible(bHasRuler);
1071*b1cdbd2cSJim Jagielski 				}
1072*b1cdbd2cSJim Jagielski 			}
1073*b1cdbd2cSJim Jagielski 
1074*b1cdbd2cSJim Jagielski             Invalidate (SID_RULER);
1075*b1cdbd2cSJim Jagielski             Resize();
1076*b1cdbd2cSJim Jagielski             rReq.Done ();
1077*b1cdbd2cSJim Jagielski         }
1078*b1cdbd2cSJim Jagielski         break;
1079*b1cdbd2cSJim Jagielski 
1080*b1cdbd2cSJim Jagielski 		case SID_SIZE_PAGE:
1081*b1cdbd2cSJim Jagielski 		case SID_SIZE_PAGE_WIDTH:  // BASIC
1082*b1cdbd2cSJim Jagielski 		{
1083*b1cdbd2cSJim Jagielski 			mbZoomOnPage = ( rReq.GetSlot() == SID_SIZE_PAGE );
1084*b1cdbd2cSJim Jagielski 
1085*b1cdbd2cSJim Jagielski 			SdrPageView* pPageView = mpDrawView->GetSdrPageView();
1086*b1cdbd2cSJim Jagielski 
1087*b1cdbd2cSJim Jagielski 			if ( pPageView )
1088*b1cdbd2cSJim Jagielski 			{
1089*b1cdbd2cSJim Jagielski 				Point aPagePos(0, 0); // = pPageView->GetOffset();
1090*b1cdbd2cSJim Jagielski 				Size aPageSize = pPageView->GetPage()->GetSize();
1091*b1cdbd2cSJim Jagielski 
1092*b1cdbd2cSJim Jagielski 				aPagePos.X() += aPageSize.Width()  / 2;
1093*b1cdbd2cSJim Jagielski                 aPageSize.Width() = (long) (aPageSize.Width() * 1.03);
1094*b1cdbd2cSJim Jagielski 
1095*b1cdbd2cSJim Jagielski                 if( rReq.GetSlot() == SID_SIZE_PAGE )
1096*b1cdbd2cSJim Jagielski 				{
1097*b1cdbd2cSJim Jagielski 					aPagePos.Y() += aPageSize.Height() / 2;
1098*b1cdbd2cSJim Jagielski                     aPageSize.Height() = (long) (aPageSize.Height() * 1.03);
1099*b1cdbd2cSJim Jagielski 					aPagePos.Y() -= aPageSize.Height() / 2;
1100*b1cdbd2cSJim Jagielski 				}
1101*b1cdbd2cSJim Jagielski 				else
1102*b1cdbd2cSJim Jagielski 				{
1103*b1cdbd2cSJim Jagielski 					Point aPt = GetActiveWindow()->PixelToLogic( Point( 0, GetActiveWindow()->GetSizePixel().Height() / 2 ) );
1104*b1cdbd2cSJim Jagielski 					aPagePos.Y() += aPt.Y();
1105*b1cdbd2cSJim Jagielski 					aPageSize.Height() = 2;
1106*b1cdbd2cSJim Jagielski 				}
1107*b1cdbd2cSJim Jagielski 
1108*b1cdbd2cSJim Jagielski 				aPagePos.X() -= aPageSize.Width()  / 2;
1109*b1cdbd2cSJim Jagielski 
1110*b1cdbd2cSJim Jagielski 				SetZoomRect( Rectangle( aPagePos, aPageSize ) );
1111*b1cdbd2cSJim Jagielski 
1112*b1cdbd2cSJim Jagielski 				Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
1113*b1cdbd2cSJim Jagielski 											  GetActiveWindow()->GetOutputSizePixel()) );
1114*b1cdbd2cSJim Jagielski 				mpZoomList->InsertZoomRect(aVisAreaWin);
1115*b1cdbd2cSJim Jagielski 			}
1116*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_IN );
1117*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_OUT );
1118*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_PANNING );
1119*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_TOOLBOX );
1120*b1cdbd2cSJim Jagielski 			rReq.Done ();
1121*b1cdbd2cSJim Jagielski 		}
1122*b1cdbd2cSJim Jagielski 		break;
1123*b1cdbd2cSJim Jagielski 
1124*b1cdbd2cSJim Jagielski 		case SID_SIZE_REAL:  // BASIC
1125*b1cdbd2cSJim Jagielski 		{
1126*b1cdbd2cSJim Jagielski 			mbZoomOnPage = sal_False;
1127*b1cdbd2cSJim Jagielski 			SetZoom( 100 );
1128*b1cdbd2cSJim Jagielski 			Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
1129*b1cdbd2cSJim Jagielski 											  GetActiveWindow()->GetOutputSizePixel()) );
1130*b1cdbd2cSJim Jagielski 			mpZoomList->InsertZoomRect(aVisAreaWin);
1131*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_IN );
1132*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_OUT );
1133*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_PANNING );
1134*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_TOOLBOX );
1135*b1cdbd2cSJim Jagielski 			rReq.Done ();
1136*b1cdbd2cSJim Jagielski 		}
1137*b1cdbd2cSJim Jagielski 		break;
1138*b1cdbd2cSJim Jagielski 
1139*b1cdbd2cSJim Jagielski 		case SID_ZOOM_IN:  // BASIC
1140*b1cdbd2cSJim Jagielski 		{
1141*b1cdbd2cSJim Jagielski 			mbZoomOnPage = sal_False;
1142*b1cdbd2cSJim Jagielski 			SetZoom( Max( (long) ( GetActiveWindow()->GetZoom() / 2 ), (long) GetActiveWindow()->GetMinZoom() ) );
1143*b1cdbd2cSJim Jagielski 			Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
1144*b1cdbd2cSJim Jagielski 											  GetActiveWindow()->GetOutputSizePixel()) );
1145*b1cdbd2cSJim Jagielski 			mpZoomList->InsertZoomRect(aVisAreaWin);
1146*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_IN );
1147*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_OUT );
1148*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_PANNING );
1149*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_TOOLBOX );
1150*b1cdbd2cSJim Jagielski 			rReq.Done ();
1151*b1cdbd2cSJim Jagielski 		}
1152*b1cdbd2cSJim Jagielski 		break;
1153*b1cdbd2cSJim Jagielski 
1154*b1cdbd2cSJim Jagielski 		case SID_SIZE_VISAREA:
1155*b1cdbd2cSJim Jagielski 		{
1156*b1cdbd2cSJim Jagielski 			Rectangle aVisArea = mpFrameView->GetVisArea();
1157*b1cdbd2cSJim Jagielski 			Size aVisAreaSize = aVisArea.GetSize();
1158*b1cdbd2cSJim Jagielski 
1159*b1cdbd2cSJim Jagielski 			if (aVisAreaSize.Height()!=0 && aVisAreaSize.Width()!=0)
1160*b1cdbd2cSJim Jagielski 			{
1161*b1cdbd2cSJim Jagielski 				mbZoomOnPage = sal_False;
1162*b1cdbd2cSJim Jagielski 				SetZoomRect(aVisArea);
1163*b1cdbd2cSJim Jagielski 				Invalidate( SID_ZOOM_IN );
1164*b1cdbd2cSJim Jagielski 				Invalidate( SID_ZOOM_OUT );
1165*b1cdbd2cSJim Jagielski 				Invalidate( SID_ZOOM_PANNING );
1166*b1cdbd2cSJim Jagielski 				Invalidate( SID_ZOOM_TOOLBOX );
1167*b1cdbd2cSJim Jagielski 			}
1168*b1cdbd2cSJim Jagielski 			rReq.Done ();
1169*b1cdbd2cSJim Jagielski 		}
1170*b1cdbd2cSJim Jagielski 		break;
1171*b1cdbd2cSJim Jagielski 
1172*b1cdbd2cSJim Jagielski 		// Namensverwirrung: SID_SIZE_OPTIMAL -> Zoom auf selektierte Objekte
1173*b1cdbd2cSJim Jagielski 		// --> Wird als Objektzoom im Programm angeboten
1174*b1cdbd2cSJim Jagielski 		case SID_SIZE_OPTIMAL:	// BASIC
1175*b1cdbd2cSJim Jagielski 		{
1176*b1cdbd2cSJim Jagielski 			mbZoomOnPage = sal_False;
1177*b1cdbd2cSJim Jagielski 			if ( mpDrawView->AreObjectsMarked() )
1178*b1cdbd2cSJim Jagielski 			{
1179*b1cdbd2cSJim Jagielski                 maMarkRect = mpDrawView->GetAllMarkedRect();
1180*b1cdbd2cSJim Jagielski                 long nW = (long) (maMarkRect.GetWidth()  * 1.03);
1181*b1cdbd2cSJim Jagielski                 long nH = (long) (maMarkRect.GetHeight() * 1.03);
1182*b1cdbd2cSJim Jagielski 				Point aPos = maMarkRect.Center();
1183*b1cdbd2cSJim Jagielski 				aPos.X() -= nW / 2;
1184*b1cdbd2cSJim Jagielski 				aPos.Y() -= nH / 2;
1185*b1cdbd2cSJim Jagielski 				if ( nW && nH )
1186*b1cdbd2cSJim Jagielski 				{
1187*b1cdbd2cSJim Jagielski 					SetZoomRect(Rectangle(aPos, Size(nW, nH)));
1188*b1cdbd2cSJim Jagielski 
1189*b1cdbd2cSJim Jagielski 					Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
1190*b1cdbd2cSJim Jagielski 											  GetActiveWindow()->GetOutputSizePixel()) );
1191*b1cdbd2cSJim Jagielski 					mpZoomList->InsertZoomRect(aVisAreaWin);
1192*b1cdbd2cSJim Jagielski 				}
1193*b1cdbd2cSJim Jagielski 			}
1194*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_IN );
1195*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_OUT );
1196*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_PANNING );
1197*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_TOOLBOX );
1198*b1cdbd2cSJim Jagielski 			rReq.Done ();
1199*b1cdbd2cSJim Jagielski 		}
1200*b1cdbd2cSJim Jagielski 		break;
1201*b1cdbd2cSJim Jagielski 
1202*b1cdbd2cSJim Jagielski 		// Namensverwirrung: SID_SIZE_ALL -> Zoom auf alle Objekte
1203*b1cdbd2cSJim Jagielski 		// --> Wird als Optimal im Programm angeboten
1204*b1cdbd2cSJim Jagielski 		case SID_SIZE_ALL:	// BASIC
1205*b1cdbd2cSJim Jagielski 		{
1206*b1cdbd2cSJim Jagielski 			mbZoomOnPage = sal_False;
1207*b1cdbd2cSJim Jagielski 			SdrPageView* pPageView = mpDrawView->GetSdrPageView();
1208*b1cdbd2cSJim Jagielski 
1209*b1cdbd2cSJim Jagielski 			if( pPageView )
1210*b1cdbd2cSJim Jagielski 			{
1211*b1cdbd2cSJim Jagielski 				Rectangle aBoundRect( pPageView->GetObjList()->GetAllObjBoundRect() );
1212*b1cdbd2cSJim Jagielski 
1213*b1cdbd2cSJim Jagielski                 long nW = (long) (aBoundRect.GetWidth() * 1.03);
1214*b1cdbd2cSJim Jagielski                 long nH = (long) (aBoundRect.GetHeight() * 1.03);
1215*b1cdbd2cSJim Jagielski 				Point aPos = aBoundRect.Center();
1216*b1cdbd2cSJim Jagielski 				aPos.X() -= nW / 2;
1217*b1cdbd2cSJim Jagielski 				aPos.Y() -= nH / 2;
1218*b1cdbd2cSJim Jagielski 				if ( nW && nH )
1219*b1cdbd2cSJim Jagielski 				{
1220*b1cdbd2cSJim Jagielski 					SetZoomRect( Rectangle( aPos, Size( nW, nH ) ) );
1221*b1cdbd2cSJim Jagielski 
1222*b1cdbd2cSJim Jagielski 					Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0),
1223*b1cdbd2cSJim Jagielski 											  GetActiveWindow()->GetOutputSizePixel()) );
1224*b1cdbd2cSJim Jagielski 					mpZoomList->InsertZoomRect(aVisAreaWin);
1225*b1cdbd2cSJim Jagielski 				}
1226*b1cdbd2cSJim Jagielski 
1227*b1cdbd2cSJim Jagielski 				Invalidate( SID_ZOOM_IN );
1228*b1cdbd2cSJim Jagielski 				Invalidate( SID_ZOOM_OUT );
1229*b1cdbd2cSJim Jagielski 				Invalidate( SID_ZOOM_PANNING );
1230*b1cdbd2cSJim Jagielski 				Invalidate( SID_ZOOM_TOOLBOX );
1231*b1cdbd2cSJim Jagielski 			}
1232*b1cdbd2cSJim Jagielski 			rReq.Done ();
1233*b1cdbd2cSJim Jagielski 		}
1234*b1cdbd2cSJim Jagielski 		break;
1235*b1cdbd2cSJim Jagielski 
1236*b1cdbd2cSJim Jagielski 		case SID_ZOOM_PREV:
1237*b1cdbd2cSJim Jagielski 		{
1238*b1cdbd2cSJim Jagielski 			if (mpDrawView->IsTextEdit())
1239*b1cdbd2cSJim Jagielski 			{
1240*b1cdbd2cSJim Jagielski 				mpDrawView->SdrEndTextEdit();
1241*b1cdbd2cSJim Jagielski 			}
1242*b1cdbd2cSJim Jagielski 
1243*b1cdbd2cSJim Jagielski 			if (mpZoomList->IsPreviousPossible())
1244*b1cdbd2cSJim Jagielski 			{
1245*b1cdbd2cSJim Jagielski 				// Vorheriges ZoomRect einstellen
1246*b1cdbd2cSJim Jagielski 				SetZoomRect(mpZoomList->GetPreviousZoomRect());
1247*b1cdbd2cSJim Jagielski 			}
1248*b1cdbd2cSJim Jagielski 			rReq.Done ();
1249*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_TOOLBOX );
1250*b1cdbd2cSJim Jagielski 		}
1251*b1cdbd2cSJim Jagielski 		break;
1252*b1cdbd2cSJim Jagielski 
1253*b1cdbd2cSJim Jagielski 		case SID_ZOOM_NEXT:
1254*b1cdbd2cSJim Jagielski 		{
1255*b1cdbd2cSJim Jagielski 			if (mpDrawView->IsTextEdit())
1256*b1cdbd2cSJim Jagielski 			{
1257*b1cdbd2cSJim Jagielski 				mpDrawView->SdrEndTextEdit();
1258*b1cdbd2cSJim Jagielski 			}
1259*b1cdbd2cSJim Jagielski 
1260*b1cdbd2cSJim Jagielski 			if (mpZoomList->IsNextPossible())
1261*b1cdbd2cSJim Jagielski 			{
1262*b1cdbd2cSJim Jagielski 				// Naechstes ZoomRect einstellen
1263*b1cdbd2cSJim Jagielski 				SetZoomRect(mpZoomList->GetNextZoomRect());
1264*b1cdbd2cSJim Jagielski 			}
1265*b1cdbd2cSJim Jagielski 			rReq.Done ();
1266*b1cdbd2cSJim Jagielski 			Invalidate( SID_ZOOM_TOOLBOX );
1267*b1cdbd2cSJim Jagielski 		}
1268*b1cdbd2cSJim Jagielski 		break;
1269*b1cdbd2cSJim Jagielski 
1270*b1cdbd2cSJim Jagielski 		case SID_GLUE_INSERT_POINT:
1271*b1cdbd2cSJim Jagielski 		case SID_GLUE_PERCENT:
1272*b1cdbd2cSJim Jagielski 		case SID_GLUE_ESCDIR:
1273*b1cdbd2cSJim Jagielski 		case SID_GLUE_ESCDIR_LEFT:
1274*b1cdbd2cSJim Jagielski 		case SID_GLUE_ESCDIR_RIGHT:
1275*b1cdbd2cSJim Jagielski 		case SID_GLUE_ESCDIR_TOP:
1276*b1cdbd2cSJim Jagielski 		case SID_GLUE_ESCDIR_BOTTOM:
1277*b1cdbd2cSJim Jagielski 		case SID_GLUE_HORZALIGN_CENTER:
1278*b1cdbd2cSJim Jagielski 		case SID_GLUE_HORZALIGN_LEFT:
1279*b1cdbd2cSJim Jagielski 		case SID_GLUE_HORZALIGN_RIGHT:
1280*b1cdbd2cSJim Jagielski 		case SID_GLUE_VERTALIGN_CENTER:
1281*b1cdbd2cSJim Jagielski 		case SID_GLUE_VERTALIGN_TOP:
1282*b1cdbd2cSJim Jagielski 		case SID_GLUE_VERTALIGN_BOTTOM:
1283*b1cdbd2cSJim Jagielski 		{
1284*b1cdbd2cSJim Jagielski 			FunctionReference xFunc( GetCurrentFunction() );
1285*b1cdbd2cSJim Jagielski 			FuEditGluePoints* pFunc = dynamic_cast< FuEditGluePoints* >( xFunc.get() );
1286*b1cdbd2cSJim Jagielski 
1287*b1cdbd2cSJim Jagielski 			if(pFunc)
1288*b1cdbd2cSJim Jagielski 				pFunc->ReceiveRequest(rReq);
1289*b1cdbd2cSJim Jagielski 
1290*b1cdbd2cSJim Jagielski 			rReq.Done();
1291*b1cdbd2cSJim Jagielski 		}
1292*b1cdbd2cSJim Jagielski 		break;
1293*b1cdbd2cSJim Jagielski 
1294*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
1295*b1cdbd2cSJim Jagielski 		case SID_SHOW_ITEMBROWSER:
1296*b1cdbd2cSJim Jagielski 		{
1297*b1cdbd2cSJim Jagielski 			mpDrawView->ShowItemBrowser( !mpDrawView->IsItemBrowserVisible() );
1298*b1cdbd2cSJim Jagielski 			rReq.Done ();
1299*b1cdbd2cSJim Jagielski 		}
1300*b1cdbd2cSJim Jagielski 		break;
1301*b1cdbd2cSJim Jagielski #endif
1302*b1cdbd2cSJim Jagielski 
1303*b1cdbd2cSJim Jagielski         case SID_AUTOSPELL_CHECK:
1304*b1cdbd2cSJim Jagielski 		{
1305*b1cdbd2cSJim Jagielski             sal_Bool bOnlineSpell = !GetDoc()->GetOnlineSpell();
1306*b1cdbd2cSJim Jagielski             GetDoc()->SetOnlineSpell(bOnlineSpell);
1307*b1cdbd2cSJim Jagielski 
1308*b1cdbd2cSJim Jagielski             ::Outliner* pOL = mpDrawView->GetTextEditOutliner();
1309*b1cdbd2cSJim Jagielski 
1310*b1cdbd2cSJim Jagielski             if (pOL)
1311*b1cdbd2cSJim Jagielski             {
1312*b1cdbd2cSJim Jagielski                 sal_uLong nCntrl = pOL->GetControlWord();
1313*b1cdbd2cSJim Jagielski 
1314*b1cdbd2cSJim Jagielski                 if (bOnlineSpell)
1315*b1cdbd2cSJim Jagielski                     nCntrl |= EE_CNTRL_ONLINESPELLING;
1316*b1cdbd2cSJim Jagielski                 else
1317*b1cdbd2cSJim Jagielski                     nCntrl &= ~EE_CNTRL_ONLINESPELLING;
1318*b1cdbd2cSJim Jagielski 
1319*b1cdbd2cSJim Jagielski                 pOL->SetControlWord(nCntrl);
1320*b1cdbd2cSJim Jagielski             }
1321*b1cdbd2cSJim Jagielski 
1322*b1cdbd2cSJim Jagielski             GetActiveWindow()->Invalidate();
1323*b1cdbd2cSJim Jagielski 			rReq.Done ();
1324*b1cdbd2cSJim Jagielski 		}
1325*b1cdbd2cSJim Jagielski 		break;
1326*b1cdbd2cSJim Jagielski 
1327*b1cdbd2cSJim Jagielski         case SID_CONVERT_TO_1BIT_THRESHOLD:
1328*b1cdbd2cSJim Jagielski         case SID_CONVERT_TO_1BIT_MATRIX:
1329*b1cdbd2cSJim Jagielski         case SID_CONVERT_TO_4BIT_GRAYS:
1330*b1cdbd2cSJim Jagielski         case SID_CONVERT_TO_4BIT_COLORS:
1331*b1cdbd2cSJim Jagielski         case SID_CONVERT_TO_8BIT_GRAYS:
1332*b1cdbd2cSJim Jagielski         case SID_CONVERT_TO_8BIT_COLORS:
1333*b1cdbd2cSJim Jagielski         case SID_CONVERT_TO_24BIT:
1334*b1cdbd2cSJim Jagielski         {
1335*b1cdbd2cSJim Jagielski             BmpConversion eBmpConvert = BMP_CONVERSION_NONE;
1336*b1cdbd2cSJim Jagielski 
1337*b1cdbd2cSJim Jagielski             switch( nSId )
1338*b1cdbd2cSJim Jagielski             {
1339*b1cdbd2cSJim Jagielski                 case SID_CONVERT_TO_1BIT_THRESHOLD:
1340*b1cdbd2cSJim Jagielski                     eBmpConvert = BMP_CONVERSION_1BIT_THRESHOLD;
1341*b1cdbd2cSJim Jagielski                     break;
1342*b1cdbd2cSJim Jagielski 
1343*b1cdbd2cSJim Jagielski                 case SID_CONVERT_TO_1BIT_MATRIX:
1344*b1cdbd2cSJim Jagielski                     eBmpConvert = BMP_CONVERSION_1BIT_MATRIX;
1345*b1cdbd2cSJim Jagielski                     break;
1346*b1cdbd2cSJim Jagielski 
1347*b1cdbd2cSJim Jagielski                 case SID_CONVERT_TO_4BIT_GRAYS:
1348*b1cdbd2cSJim Jagielski                     eBmpConvert = BMP_CONVERSION_4BIT_GREYS;
1349*b1cdbd2cSJim Jagielski                     break;
1350*b1cdbd2cSJim Jagielski 
1351*b1cdbd2cSJim Jagielski                 case SID_CONVERT_TO_4BIT_COLORS:
1352*b1cdbd2cSJim Jagielski                     eBmpConvert = BMP_CONVERSION_4BIT_COLORS;
1353*b1cdbd2cSJim Jagielski                     break;
1354*b1cdbd2cSJim Jagielski 
1355*b1cdbd2cSJim Jagielski                 case SID_CONVERT_TO_8BIT_GRAYS:
1356*b1cdbd2cSJim Jagielski                     eBmpConvert = BMP_CONVERSION_8BIT_GREYS;
1357*b1cdbd2cSJim Jagielski                     break;
1358*b1cdbd2cSJim Jagielski 
1359*b1cdbd2cSJim Jagielski                 case SID_CONVERT_TO_8BIT_COLORS:
1360*b1cdbd2cSJim Jagielski                     eBmpConvert = BMP_CONVERSION_8BIT_COLORS;
1361*b1cdbd2cSJim Jagielski                     break;
1362*b1cdbd2cSJim Jagielski 
1363*b1cdbd2cSJim Jagielski                 case SID_CONVERT_TO_24BIT:
1364*b1cdbd2cSJim Jagielski                     eBmpConvert = BMP_CONVERSION_24BIT;
1365*b1cdbd2cSJim Jagielski                     break;
1366*b1cdbd2cSJim Jagielski             }
1367*b1cdbd2cSJim Jagielski 
1368*b1cdbd2cSJim Jagielski             mpDrawView->BegUndo(String(SdResId(STR_UNDO_COLORRESOLUTION)));
1369*b1cdbd2cSJim Jagielski             const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
1370*b1cdbd2cSJim Jagielski 
1371*b1cdbd2cSJim Jagielski             for (sal_uLong i=0; i<rMarkList.GetMarkCount(); i++)
1372*b1cdbd2cSJim Jagielski             {
1373*b1cdbd2cSJim Jagielski                 SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
1374*b1cdbd2cSJim Jagielski 
1375*b1cdbd2cSJim Jagielski                 if (pObj->GetObjInventor() == SdrInventor)
1376*b1cdbd2cSJim Jagielski                 {
1377*b1cdbd2cSJim Jagielski                     if (pObj->GetObjIdentifier() == OBJ_GRAF && !((SdrGrafObj*) pObj)->IsLinkedGraphic())
1378*b1cdbd2cSJim Jagielski                     {
1379*b1cdbd2cSJim Jagielski                         const Graphic& rGraphic = ((SdrGrafObj*) pObj)->GetGraphic();
1380*b1cdbd2cSJim Jagielski 
1381*b1cdbd2cSJim Jagielski                         if( rGraphic.GetType() == GRAPHIC_BITMAP )
1382*b1cdbd2cSJim Jagielski                         {
1383*b1cdbd2cSJim Jagielski                             SdrGrafObj*	pNewObj = (SdrGrafObj*) pObj->Clone();
1384*b1cdbd2cSJim Jagielski 
1385*b1cdbd2cSJim Jagielski 							if( rGraphic.IsAnimated() )
1386*b1cdbd2cSJim Jagielski 							{
1387*b1cdbd2cSJim Jagielski 								Animation aAnim( rGraphic.GetAnimation() );
1388*b1cdbd2cSJim Jagielski 								aAnim.Convert( eBmpConvert );
1389*b1cdbd2cSJim Jagielski 	                            pNewObj->SetGraphic( aAnim );
1390*b1cdbd2cSJim Jagielski 							}
1391*b1cdbd2cSJim Jagielski 							else
1392*b1cdbd2cSJim Jagielski 							{
1393*b1cdbd2cSJim Jagielski 								BitmapEx aBmpEx( rGraphic.GetBitmapEx() );
1394*b1cdbd2cSJim Jagielski 								aBmpEx.Convert( eBmpConvert );
1395*b1cdbd2cSJim Jagielski 	                            pNewObj->SetGraphic( aBmpEx );
1396*b1cdbd2cSJim Jagielski 							}
1397*b1cdbd2cSJim Jagielski 
1398*b1cdbd2cSJim Jagielski                             mpDrawView->ReplaceObjectAtView( pObj, *mpDrawView->GetSdrPageView(), pNewObj );
1399*b1cdbd2cSJim Jagielski                         }
1400*b1cdbd2cSJim Jagielski                     }
1401*b1cdbd2cSJim Jagielski                 }
1402*b1cdbd2cSJim Jagielski             }
1403*b1cdbd2cSJim Jagielski 
1404*b1cdbd2cSJim Jagielski             mpDrawView->EndUndo();
1405*b1cdbd2cSJim Jagielski 			rReq.Done ();
1406*b1cdbd2cSJim Jagielski 		}
1407*b1cdbd2cSJim Jagielski 		break;
1408*b1cdbd2cSJim Jagielski 
1409*b1cdbd2cSJim Jagielski         case SID_TRANSLITERATE_SENTENCE_CASE:
1410*b1cdbd2cSJim Jagielski         case SID_TRANSLITERATE_TITLE_CASE:
1411*b1cdbd2cSJim Jagielski         case SID_TRANSLITERATE_TOGGLE_CASE:
1412*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_UPPER:
1413*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_LOWER:
1414*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_HALFWIDTH:
1415*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_FULLWIDTH:
1416*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_HIRAGANA:
1417*b1cdbd2cSJim Jagielski 		case SID_TRANSLITERATE_KATAGANA:
1418*b1cdbd2cSJim Jagielski 		{
1419*b1cdbd2cSJim Jagielski 			OutlinerView* pOLV = GetView()->GetTextEditOutlinerView();
1420*b1cdbd2cSJim Jagielski 			if( pOLV )
1421*b1cdbd2cSJim Jagielski 			{
1422*b1cdbd2cSJim Jagielski 				using namespace ::com::sun::star::i18n;
1423*b1cdbd2cSJim Jagielski 				sal_Int32 nType = 0;
1424*b1cdbd2cSJim Jagielski 
1425*b1cdbd2cSJim Jagielski 				switch( nSId )
1426*b1cdbd2cSJim Jagielski 				{
1427*b1cdbd2cSJim Jagielski                     case SID_TRANSLITERATE_SENTENCE_CASE:
1428*b1cdbd2cSJim Jagielski                         nType = TransliterationModulesExtra::SENTENCE_CASE;
1429*b1cdbd2cSJim Jagielski                         break;
1430*b1cdbd2cSJim Jagielski                     case SID_TRANSLITERATE_TITLE_CASE:
1431*b1cdbd2cSJim Jagielski                         nType = TransliterationModulesExtra::TITLE_CASE;
1432*b1cdbd2cSJim Jagielski                         break;
1433*b1cdbd2cSJim Jagielski                     case SID_TRANSLITERATE_TOGGLE_CASE:
1434*b1cdbd2cSJim Jagielski                         nType = TransliterationModulesExtra::TOGGLE_CASE;
1435*b1cdbd2cSJim Jagielski                         break;
1436*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_UPPER:
1437*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_LOWERCASE_UPPERCASE;
1438*b1cdbd2cSJim Jagielski 						break;
1439*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_LOWER:
1440*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_UPPERCASE_LOWERCASE;
1441*b1cdbd2cSJim Jagielski 						break;
1442*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_HALFWIDTH:
1443*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_FULLWIDTH_HALFWIDTH;
1444*b1cdbd2cSJim Jagielski 						break;
1445*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_FULLWIDTH:
1446*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_HALFWIDTH_FULLWIDTH;
1447*b1cdbd2cSJim Jagielski 						break;
1448*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_HIRAGANA:
1449*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_KATAKANA_HIRAGANA;
1450*b1cdbd2cSJim Jagielski 						break;
1451*b1cdbd2cSJim Jagielski 					case SID_TRANSLITERATE_KATAGANA:
1452*b1cdbd2cSJim Jagielski 						nType = TransliterationModules_HIRAGANA_KATAKANA;
1453*b1cdbd2cSJim Jagielski 						break;
1454*b1cdbd2cSJim Jagielski 				}
1455*b1cdbd2cSJim Jagielski 
1456*b1cdbd2cSJim Jagielski 				pOLV->TransliterateText( nType );
1457*b1cdbd2cSJim Jagielski 			}
1458*b1cdbd2cSJim Jagielski 
1459*b1cdbd2cSJim Jagielski 			rReq.Done();
1460*b1cdbd2cSJim Jagielski 		}
1461*b1cdbd2cSJim Jagielski 		break;
1462*b1cdbd2cSJim Jagielski 
1463*b1cdbd2cSJim Jagielski 		// #UndoRedo#
1464*b1cdbd2cSJim Jagielski 		case SID_UNDO :
1465*b1cdbd2cSJim Jagielski 		{
1466*b1cdbd2cSJim Jagielski 			// #96090# moved implementation to BaseClass
1467*b1cdbd2cSJim Jagielski 			ImpSidUndo(sal_True, rReq);
1468*b1cdbd2cSJim Jagielski 		}
1469*b1cdbd2cSJim Jagielski 		break;
1470*b1cdbd2cSJim Jagielski 		case SID_REDO :
1471*b1cdbd2cSJim Jagielski 		{
1472*b1cdbd2cSJim Jagielski 			// #96090# moved implementation to BaseClass
1473*b1cdbd2cSJim Jagielski 			ImpSidRedo(sal_True, rReq);
1474*b1cdbd2cSJim Jagielski 		}
1475*b1cdbd2cSJim Jagielski 		break;
1476*b1cdbd2cSJim Jagielski 
1477*b1cdbd2cSJim Jagielski         case SID_PRESENTATION_MINIMIZER:
1478*b1cdbd2cSJim Jagielski         {
1479*b1cdbd2cSJim Jagielski             if ( GetDoc()->GetDocumentType() == DOCUMENT_TYPE_IMPRESS &&
1480*b1cdbd2cSJim Jagielski                  GetViewShellBase().GetController() != NULL )
1481*b1cdbd2cSJim Jagielski             {
1482*b1cdbd2cSJim Jagielski                 try
1483*b1cdbd2cSJim Jagielski                 {
1484*b1cdbd2cSJim Jagielski                     uno::Reference< uno::XComponentContext > xContext(
1485*b1cdbd2cSJim Jagielski                         ::comphelper::getProcessComponentContext() );
1486*b1cdbd2cSJim Jagielski                     uno::Sequence< uno::Any > aArgs(1);
1487*b1cdbd2cSJim Jagielski                     aArgs[0] <<= GetViewShellBase().GetController();
1488*b1cdbd2cSJim Jagielski 
1489*b1cdbd2cSJim Jagielski                     uno::Reference< XExecutableDialog > xDialog(
1490*b1cdbd2cSJim Jagielski                         xContext->getServiceManager()->
1491*b1cdbd2cSJim Jagielski                             createInstanceWithArgumentsAndContext(
1492*b1cdbd2cSJim Jagielski                                 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
1493*b1cdbd2cSJim Jagielski                                     "com.sun.star.ui.dialogs.PresentationMinimizerDialog")),
1494*b1cdbd2cSJim Jagielski                                         aArgs, xContext), uno::UNO_QUERY_THROW );
1495*b1cdbd2cSJim Jagielski                     xDialog->execute();
1496*b1cdbd2cSJim Jagielski                 }
1497*b1cdbd2cSJim Jagielski                 catch (...)
1498*b1cdbd2cSJim Jagielski                 {}
1499*b1cdbd2cSJim Jagielski             }
1500*b1cdbd2cSJim Jagielski 
1501*b1cdbd2cSJim Jagielski             rReq.Done();
1502*b1cdbd2cSJim Jagielski         }
1503*b1cdbd2cSJim Jagielski         break;
1504*b1cdbd2cSJim Jagielski 
1505*b1cdbd2cSJim Jagielski         default:
1506*b1cdbd2cSJim Jagielski 		break;
1507*b1cdbd2cSJim Jagielski 	}
1508*b1cdbd2cSJim Jagielski }
1509*b1cdbd2cSJim Jagielski 
1510*b1cdbd2cSJim Jagielski /*************************************************************************
1511*b1cdbd2cSJim Jagielski |*
1512*b1cdbd2cSJim Jagielski |* URL-Feld einfuegen
1513*b1cdbd2cSJim Jagielski |*
1514*b1cdbd2cSJim Jagielski \************************************************************************/
1515*b1cdbd2cSJim Jagielski 
InsertURLField(const String & rURL,const String & rText,const String & rTarget,const Point * pPos)1516*b1cdbd2cSJim Jagielski void DrawViewShell::InsertURLField(const String& rURL, const String& rText,
1517*b1cdbd2cSJim Jagielski 									 const String& rTarget, const Point* pPos)
1518*b1cdbd2cSJim Jagielski {
1519*b1cdbd2cSJim Jagielski     OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView();
1520*b1cdbd2cSJim Jagielski 
1521*b1cdbd2cSJim Jagielski     if (pOLV)
1522*b1cdbd2cSJim Jagielski 	{
1523*b1cdbd2cSJim Jagielski         ESelection aSel( pOLV->GetSelection() );
1524*b1cdbd2cSJim Jagielski         SvxFieldItem aURLItem( SvxURLField( rURL, rText, SVXURLFORMAT_REPR ), EE_FEATURE_FIELD );
1525*b1cdbd2cSJim Jagielski         pOLV->InsertField( aURLItem );
1526*b1cdbd2cSJim Jagielski         if ( aSel.nStartPos <= aSel.nEndPos )
1527*b1cdbd2cSJim Jagielski 		    aSel.nEndPos = aSel.nStartPos + 1;
1528*b1cdbd2cSJim Jagielski         else
1529*b1cdbd2cSJim Jagielski             aSel.nStartPos = aSel.nEndPos + 1;
1530*b1cdbd2cSJim Jagielski         pOLV->SetSelection( aSel );
1531*b1cdbd2cSJim Jagielski 	}
1532*b1cdbd2cSJim Jagielski 	else
1533*b1cdbd2cSJim Jagielski 	{
1534*b1cdbd2cSJim Jagielski 		Outliner* pOutl = GetDoc()->GetInternalOutliner();
1535*b1cdbd2cSJim Jagielski 		pOutl->Init( OUTLINERMODE_TEXTOBJECT );
1536*b1cdbd2cSJim Jagielski 		sal_uInt16 nOutlMode = pOutl->GetMode();
1537*b1cdbd2cSJim Jagielski 
1538*b1cdbd2cSJim Jagielski 		SvxURLField aURLField(rURL, rText, SVXURLFORMAT_REPR);
1539*b1cdbd2cSJim Jagielski 		aURLField.SetTargetFrame(rTarget);
1540*b1cdbd2cSJim Jagielski         SvxFieldItem aURLItem(aURLField, EE_FEATURE_FIELD);
1541*b1cdbd2cSJim Jagielski 		pOutl->QuickInsertField( aURLItem, ESelection() );
1542*b1cdbd2cSJim Jagielski 		OutlinerParaObject* pOutlParaObject = pOutl->CreateParaObject();
1543*b1cdbd2cSJim Jagielski 
1544*b1cdbd2cSJim Jagielski 		SdrRectObj* pRectObj = new SdrRectObj(OBJ_TEXT);
1545*b1cdbd2cSJim Jagielski 
1546*b1cdbd2cSJim Jagielski 		pOutl->UpdateFields();
1547*b1cdbd2cSJim Jagielski 		pOutl->SetUpdateMode( sal_True );
1548*b1cdbd2cSJim Jagielski 		Size aSize(pOutl->CalcTextSize());
1549*b1cdbd2cSJim Jagielski 		pOutl->SetUpdateMode( sal_False );
1550*b1cdbd2cSJim Jagielski 
1551*b1cdbd2cSJim Jagielski 		Point aPos;
1552*b1cdbd2cSJim Jagielski 
1553*b1cdbd2cSJim Jagielski 		if (pPos)
1554*b1cdbd2cSJim Jagielski 		{
1555*b1cdbd2cSJim Jagielski 			aPos = *pPos;
1556*b1cdbd2cSJim Jagielski 		}
1557*b1cdbd2cSJim Jagielski 		else
1558*b1cdbd2cSJim Jagielski 		{
1559*b1cdbd2cSJim Jagielski 			Rectangle aRect(aPos, GetActiveWindow()->GetOutputSizePixel() );
1560*b1cdbd2cSJim Jagielski 			aPos = aRect.Center();
1561*b1cdbd2cSJim Jagielski 			aPos = GetActiveWindow()->PixelToLogic(aPos);
1562*b1cdbd2cSJim Jagielski 			aPos.X() -= aSize.Width() / 2;
1563*b1cdbd2cSJim Jagielski 			aPos.Y() -= aSize.Height() / 2;
1564*b1cdbd2cSJim Jagielski 		}
1565*b1cdbd2cSJim Jagielski 
1566*b1cdbd2cSJim Jagielski 		Rectangle aLogicRect(aPos, aSize);
1567*b1cdbd2cSJim Jagielski 		pRectObj->SetLogicRect(aLogicRect);
1568*b1cdbd2cSJim Jagielski 		pRectObj->SetOutlinerParaObject( pOutlParaObject );
1569*b1cdbd2cSJim Jagielski 		mpDrawView->InsertObjectAtView(pRectObj, *mpDrawView->GetSdrPageView());
1570*b1cdbd2cSJim Jagielski 		pOutl->Init( nOutlMode );
1571*b1cdbd2cSJim Jagielski 	}
1572*b1cdbd2cSJim Jagielski }
1573*b1cdbd2cSJim Jagielski 
1574*b1cdbd2cSJim Jagielski /*************************************************************************
1575*b1cdbd2cSJim Jagielski |*
1576*b1cdbd2cSJim Jagielski |* URL-Button einfuegen
1577*b1cdbd2cSJim Jagielski |*
1578*b1cdbd2cSJim Jagielski \************************************************************************/
1579*b1cdbd2cSJim Jagielski 
InsertURLButton(const String & rURL,const String & rText,const String & rTarget,const Point * pPos)1580*b1cdbd2cSJim Jagielski void DrawViewShell::InsertURLButton(const String& rURL, const String& rText,
1581*b1cdbd2cSJim Jagielski 									  const String& rTarget, const Point* pPos)
1582*b1cdbd2cSJim Jagielski {
1583*b1cdbd2cSJim Jagielski     sal_Bool bNewObj = sal_True;
1584*b1cdbd2cSJim Jagielski 
1585*b1cdbd2cSJim Jagielski     const OUString sTargetURL( ::URIHelper::SmartRel2Abs( INetURLObject( GetDocSh()->GetMedium()->GetBaseURL() ), rURL, URIHelper::GetMaybeFileHdl(), true, false,
1586*b1cdbd2cSJim Jagielski 																INetURLObject::WAS_ENCODED,
1587*b1cdbd2cSJim Jagielski 																INetURLObject::DECODE_UNAMBIGUOUS ) );
1588*b1cdbd2cSJim Jagielski     if (mpDrawView->GetMarkedObjectList().GetMarkCount() > 0)
1589*b1cdbd2cSJim Jagielski     {
1590*b1cdbd2cSJim Jagielski         SdrObject* pMarkedObj = mpDrawView->GetMarkedObjectList().GetMark(0)->GetMarkedSdrObj();
1591*b1cdbd2cSJim Jagielski         if( pMarkedObj ) try
1592*b1cdbd2cSJim Jagielski         {
1593*b1cdbd2cSJim Jagielski             // change first marked object
1594*b1cdbd2cSJim Jagielski             if( (FmFormInventor == pMarkedObj->GetObjInventor() && pMarkedObj->GetObjIdentifier() == OBJ_FM_BUTTON) )
1595*b1cdbd2cSJim Jagielski             {
1596*b1cdbd2cSJim Jagielski                 bNewObj = sal_False;
1597*b1cdbd2cSJim Jagielski 
1598*b1cdbd2cSJim Jagielski 	            SdrUnoObj* pUnoCtrl = static_cast< SdrUnoObj* >( pMarkedObj );
1599*b1cdbd2cSJim Jagielski 
1600*b1cdbd2cSJim Jagielski                 Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel(), UNO_QUERY_THROW );
1601*b1cdbd2cSJim Jagielski 			    Reference< beans::XPropertySet > xPropSet( xControlModel, UNO_QUERY_THROW );
1602*b1cdbd2cSJim Jagielski 
1603*b1cdbd2cSJim Jagielski                 xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Label" )), Any( OUString( rText ) ) );
1604*b1cdbd2cSJim Jagielski                 xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetURL" )), Any( sTargetURL ) );
1605*b1cdbd2cSJim Jagielski 
1606*b1cdbd2cSJim Jagielski 			    if( rTarget.Len() )
1607*b1cdbd2cSJim Jagielski                     xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetFrame" )), Any( OUString( rTarget ) ) );
1608*b1cdbd2cSJim Jagielski 
1609*b1cdbd2cSJim Jagielski                 xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "ButtonType" )), Any( form::FormButtonType_URL ) );
1610*b1cdbd2cSJim Jagielski 			    if ( ::avmedia::MediaWindow::isMediaURL( rURL ) )
1611*b1cdbd2cSJim Jagielski 			    {
1612*b1cdbd2cSJim Jagielski 				    // #105638# OJ
1613*b1cdbd2cSJim Jagielski                     xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DispatchURLInternal" )), Any( sal_True ) );
1614*b1cdbd2cSJim Jagielski 			    }
1615*b1cdbd2cSJim Jagielski             }
1616*b1cdbd2cSJim Jagielski             else
1617*b1cdbd2cSJim Jagielski             {
1618*b1cdbd2cSJim Jagielski                 // add url as interaction for first selected shape
1619*b1cdbd2cSJim Jagielski                 bNewObj = sal_False;
1620*b1cdbd2cSJim Jagielski 
1621*b1cdbd2cSJim Jagielski                 SdAnimationInfo* pInfo = SdDrawDocument::GetShapeUserData(*pMarkedObj, true);
1622*b1cdbd2cSJim Jagielski                 pInfo->meClickAction = presentation::ClickAction_DOCUMENT;
1623*b1cdbd2cSJim Jagielski                 pInfo->SetBookmark( sTargetURL );
1624*b1cdbd2cSJim Jagielski             }
1625*b1cdbd2cSJim Jagielski         }
1626*b1cdbd2cSJim Jagielski         catch( uno::Exception& )
1627*b1cdbd2cSJim Jagielski         {
1628*b1cdbd2cSJim Jagielski         }
1629*b1cdbd2cSJim Jagielski     }
1630*b1cdbd2cSJim Jagielski 
1631*b1cdbd2cSJim Jagielski     if (bNewObj) try
1632*b1cdbd2cSJim Jagielski     {
1633*b1cdbd2cSJim Jagielski         SdrUnoObj* pUnoCtrl = static_cast< SdrUnoObj* >( SdrObjFactory::MakeNewObject(FmFormInventor, OBJ_FM_BUTTON,
1634*b1cdbd2cSJim Jagielski                                 mpDrawView->GetSdrPageView()->GetPage(), GetDoc()) );
1635*b1cdbd2cSJim Jagielski 
1636*b1cdbd2cSJim Jagielski         Reference< awt::XControlModel > xControlModel( pUnoCtrl->GetUnoControlModel(), uno::UNO_QUERY_THROW );
1637*b1cdbd2cSJim Jagielski 		Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY_THROW );
1638*b1cdbd2cSJim Jagielski 
1639*b1cdbd2cSJim Jagielski         xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Label" )), Any( OUString( rText ) ) );
1640*b1cdbd2cSJim Jagielski 		xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetURL" )), Any( sTargetURL ) );
1641*b1cdbd2cSJim Jagielski 
1642*b1cdbd2cSJim Jagielski 		if( rTarget.Len() )
1643*b1cdbd2cSJim Jagielski 			xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "TargetFrame" )), Any( OUString( rTarget ) ) );
1644*b1cdbd2cSJim Jagielski 
1645*b1cdbd2cSJim Jagielski 		xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "ButtonType" )), Any(  form::FormButtonType_URL ) );
1646*b1cdbd2cSJim Jagielski 		// #105638# OJ
1647*b1cdbd2cSJim Jagielski 		if ( ::avmedia::MediaWindow::isMediaURL( rURL ) )
1648*b1cdbd2cSJim Jagielski 			xPropSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DispatchURLInternal" )), Any( sal_True ) );
1649*b1cdbd2cSJim Jagielski 
1650*b1cdbd2cSJim Jagielski         Point aPos;
1651*b1cdbd2cSJim Jagielski 
1652*b1cdbd2cSJim Jagielski         if (pPos)
1653*b1cdbd2cSJim Jagielski         {
1654*b1cdbd2cSJim Jagielski             aPos = *pPos;
1655*b1cdbd2cSJim Jagielski         }
1656*b1cdbd2cSJim Jagielski         else
1657*b1cdbd2cSJim Jagielski         {
1658*b1cdbd2cSJim Jagielski             aPos = Rectangle(aPos, GetActiveWindow()->GetOutputSizePixel()).Center();
1659*b1cdbd2cSJim Jagielski             aPos = GetActiveWindow()->PixelToLogic(aPos);
1660*b1cdbd2cSJim Jagielski         }
1661*b1cdbd2cSJim Jagielski 
1662*b1cdbd2cSJim Jagielski         Size aSize(4000, 1000);
1663*b1cdbd2cSJim Jagielski         aPos.X() -= aSize.Width() / 2;
1664*b1cdbd2cSJim Jagielski         aPos.Y() -= aSize.Height() / 2;
1665*b1cdbd2cSJim Jagielski         pUnoCtrl->SetLogicRect(Rectangle(aPos, aSize));
1666*b1cdbd2cSJim Jagielski 
1667*b1cdbd2cSJim Jagielski         sal_uLong nOptions = SDRINSERT_SETDEFLAYER;
1668*b1cdbd2cSJim Jagielski 
1669*b1cdbd2cSJim Jagielski         OSL_ASSERT (GetViewShell()!=NULL);
1670*b1cdbd2cSJim Jagielski         SfxInPlaceClient* pIpClient = GetViewShell()->GetIPClient();
1671*b1cdbd2cSJim Jagielski         if (pIpClient!=NULL && pIpClient->IsObjectInPlaceActive())
1672*b1cdbd2cSJim Jagielski         {
1673*b1cdbd2cSJim Jagielski             nOptions |= SDRINSERT_DONTMARK;
1674*b1cdbd2cSJim Jagielski         }
1675*b1cdbd2cSJim Jagielski 
1676*b1cdbd2cSJim Jagielski         mpDrawView->InsertObjectAtView(pUnoCtrl, *mpDrawView->GetSdrPageView(), nOptions);
1677*b1cdbd2cSJim Jagielski     }
1678*b1cdbd2cSJim Jagielski     catch( Exception& )
1679*b1cdbd2cSJim Jagielski     {
1680*b1cdbd2cSJim Jagielski     }
1681*b1cdbd2cSJim Jagielski }
1682*b1cdbd2cSJim Jagielski 
1683*b1cdbd2cSJim Jagielski /*************************************************************************
1684*b1cdbd2cSJim Jagielski |*
1685*b1cdbd2cSJim Jagielski |*
1686*b1cdbd2cSJim Jagielski |*
1687*b1cdbd2cSJim Jagielski \************************************************************************/
1688*b1cdbd2cSJim Jagielski 
ShowUIControls(bool bVisible)1689*b1cdbd2cSJim Jagielski void DrawViewShell::ShowUIControls (bool bVisible)
1690*b1cdbd2cSJim Jagielski {
1691*b1cdbd2cSJim Jagielski     ViewShell::ShowUIControls (bVisible);
1692*b1cdbd2cSJim Jagielski 
1693*b1cdbd2cSJim Jagielski     //AF: The LayerDialogChildWindow is not used anymore (I hope).
1694*b1cdbd2cSJim Jagielski     //    GetViewFrame()->SetChildWindow(
1695*b1cdbd2cSJim Jagielski     //        LayerDialogChildWindow::GetChildWindowId(),
1696*b1cdbd2cSJim Jagielski     //        IsLayerModeActive() && bVisible);
1697*b1cdbd2cSJim Jagielski     maTabControl.Show (bVisible);
1698*b1cdbd2cSJim Jagielski }
1699*b1cdbd2cSJim Jagielski 
StopSlideShow(bool)1700*b1cdbd2cSJim Jagielski void DrawViewShell::StopSlideShow (bool /*bCloseFrame*/)
1701*b1cdbd2cSJim Jagielski {
1702*b1cdbd2cSJim Jagielski 	Reference< XPresentation2 > xPresentation( GetDoc()->getPresentation() );
1703*b1cdbd2cSJim Jagielski     if(xPresentation.is() && xPresentation->isRunning())
1704*b1cdbd2cSJim Jagielski     {
1705*b1cdbd2cSJim Jagielski         if( mpDrawView->IsTextEdit() )
1706*b1cdbd2cSJim Jagielski             mpDrawView->SdrEndTextEdit();
1707*b1cdbd2cSJim Jagielski 
1708*b1cdbd2cSJim Jagielski 		xPresentation->end();
1709*b1cdbd2cSJim Jagielski     }
1710*b1cdbd2cSJim Jagielski }
1711*b1cdbd2cSJim Jagielski 
1712*b1cdbd2cSJim Jagielski #ifdef _MSC_VER
1713*b1cdbd2cSJim Jagielski #pragma optimize ( "", on )
1714*b1cdbd2cSJim Jagielski #endif
1715*b1cdbd2cSJim Jagielski 
1716*b1cdbd2cSJim Jagielski } // end of namespace sd
1717