xref: /aoo4110/main/sc/source/ui/view/tabvwsh4.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski // INCLUDE ---------------------------------------------------------------
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include "scitems.hxx"
32*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
35*b1cdbd2cSJim Jagielski #include <svx/extrusionbar.hxx>
36*b1cdbd2cSJim Jagielski #include <svx/fontworkbar.hxx>
37*b1cdbd2cSJim Jagielski #include <editeng/boxitem.hxx>
38*b1cdbd2cSJim Jagielski #include <svx/fmshell.hxx>
39*b1cdbd2cSJim Jagielski #include <editeng/sizeitem.hxx>
40*b1cdbd2cSJim Jagielski #include <editeng/boxitem.hxx>
41*b1cdbd2cSJim Jagielski #include <svx/prtqry.hxx>
42*b1cdbd2cSJim Jagielski #include <svx/sidebar/ContextChangeEventMultiplexer.hxx>
43*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
44*b1cdbd2cSJim Jagielski #include <sfx2/printer.hxx>
45*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
46*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx>
47*b1cdbd2cSJim Jagielski #include <unotools/moduleoptions.hxx>
48*b1cdbd2cSJim Jagielski #include <rtl/logfile.hxx>
49*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
50*b1cdbd2cSJim Jagielski #include <sfx2/docfile.hxx>
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski #include "tabvwsh.hxx"
53*b1cdbd2cSJim Jagielski #include "sc.hrc"
54*b1cdbd2cSJim Jagielski #include "globstr.hrc"
55*b1cdbd2cSJim Jagielski #include "stlpool.hxx"
56*b1cdbd2cSJim Jagielski #include "stlsheet.hxx"
57*b1cdbd2cSJim Jagielski #include "docsh.hxx"
58*b1cdbd2cSJim Jagielski #include "scmod.hxx"
59*b1cdbd2cSJim Jagielski #include "appoptio.hxx"
60*b1cdbd2cSJim Jagielski #include "rangeutl.hxx"
61*b1cdbd2cSJim Jagielski #include "printfun.hxx"
62*b1cdbd2cSJim Jagielski #include "drawsh.hxx"
63*b1cdbd2cSJim Jagielski #include "drformsh.hxx"
64*b1cdbd2cSJim Jagielski #include "editsh.hxx"
65*b1cdbd2cSJim Jagielski #include "pivotsh.hxx"
66*b1cdbd2cSJim Jagielski #include "auditsh.hxx"
67*b1cdbd2cSJim Jagielski #include "drtxtob.hxx"
68*b1cdbd2cSJim Jagielski #include "inputhdl.hxx"
69*b1cdbd2cSJim Jagielski #include "editutil.hxx"
70*b1cdbd2cSJim Jagielski #include "inputopt.hxx"
71*b1cdbd2cSJim Jagielski #include "inputwin.hxx"
72*b1cdbd2cSJim Jagielski #include "scresid.hxx"
73*b1cdbd2cSJim Jagielski #include "dbcolect.hxx"		// fuer ReImport
74*b1cdbd2cSJim Jagielski #include "reffact.hxx"
75*b1cdbd2cSJim Jagielski #include "viewuno.hxx"
76*b1cdbd2cSJim Jagielski #include "dispuno.hxx"
77*b1cdbd2cSJim Jagielski #include "anyrefdg.hxx"
78*b1cdbd2cSJim Jagielski #include "chgtrack.hxx"
79*b1cdbd2cSJim Jagielski #include "cellsh.hxx"
80*b1cdbd2cSJim Jagielski #include "oleobjsh.hxx"
81*b1cdbd2cSJim Jagielski #include "chartsh.hxx"
82*b1cdbd2cSJim Jagielski #include "graphsh.hxx"
83*b1cdbd2cSJim Jagielski #include "mediash.hxx"
84*b1cdbd2cSJim Jagielski #include "pgbrksh.hxx"
85*b1cdbd2cSJim Jagielski #include "dpobject.hxx"
86*b1cdbd2cSJim Jagielski #include "prevwsh.hxx"
87*b1cdbd2cSJim Jagielski #include "tpprint.hxx"
88*b1cdbd2cSJim Jagielski #include "scextopt.hxx"
89*b1cdbd2cSJim Jagielski #include "printopt.hxx"
90*b1cdbd2cSJim Jagielski #include "drawview.hxx"
91*b1cdbd2cSJim Jagielski #include "fupoor.hxx"
92*b1cdbd2cSJim Jagielski #include "navsett.hxx"
93*b1cdbd2cSJim Jagielski #include "sc.hrc" //CHINA001
94*b1cdbd2cSJim Jagielski #include "scabstdlg.hxx" //CHINA001
95*b1cdbd2cSJim Jagielski #include "externalrefmgr.hxx"
96*b1cdbd2cSJim Jagielski #include <svx/fmpage.hxx>
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski void ActivateOlk( ScViewData* pViewData );
99*b1cdbd2cSJim Jagielski void DeActivateOlk( ScViewData* pViewData );
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski extern SfxViewShell* pScActiveViewShell;			// global.cxx
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski using namespace com::sun::star;
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski // STATIC DATA -----------------------------------------------------------
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski sal_uInt16 ScTabViewShell::nInsertCtrlState = SID_INSERT_GRAPHIC;
108*b1cdbd2cSJim Jagielski sal_uInt16 ScTabViewShell::nInsCellsCtrlState = 0;
109*b1cdbd2cSJim Jagielski sal_uInt16 ScTabViewShell::nInsObjCtrlState = SID_INSERT_DIAGRAM;
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
112*b1cdbd2cSJim Jagielski 
Activate(sal_Bool bMDI)113*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::Activate(sal_Bool bMDI)
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski 	SfxViewShell::Activate(bMDI);
116*b1cdbd2cSJim Jagielski 	bIsActive = sal_True;
117*b1cdbd2cSJim Jagielski 	//	hier kein GrabFocus, sonst gibt's Probleme wenn etwas inplace editiert wird!
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 	if ( bMDI )
120*b1cdbd2cSJim Jagielski 	{
121*b1cdbd2cSJim Jagielski 		//	fuer Eingabezeile (ClearCache)
122*b1cdbd2cSJim Jagielski 		ScModule* pScMod = SC_MOD();
123*b1cdbd2cSJim Jagielski 		pScMod->ViewShellChanged();
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski 		ActivateView( sal_True, bFirstActivate );
126*b1cdbd2cSJim Jagielski 		ActivateOlk( GetViewData() );
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 		//	#56870# AutoCorrect umsetzen, falls der Writer seins neu angelegt hat
129*b1cdbd2cSJim Jagielski 		UpdateDrawTextOutliner();
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 		//	RegisterNewTargetNames gibts nicht mehr
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 		SfxViewFrame* pThisFrame  = GetViewFrame();
134*b1cdbd2cSJim Jagielski 		if ( pInputHandler && pThisFrame->HasChildWindow(FID_INPUTLINE_STATUS) )
135*b1cdbd2cSJim Jagielski 		{
136*b1cdbd2cSJim Jagielski 			//	eigentlich nur beim Reload (letzte Version) noetig:
137*b1cdbd2cSJim Jagielski 			//	Das InputWindow bleibt stehen, aber die View mitsamt InputHandler wird
138*b1cdbd2cSJim Jagielski 			//	neu angelegt, darum muss der InputHandler am InputWindow gesetzt werden.
139*b1cdbd2cSJim Jagielski 			SfxChildWindow* pChild = pThisFrame->GetChildWindow(FID_INPUTLINE_STATUS);
140*b1cdbd2cSJim Jagielski 			if (pChild)
141*b1cdbd2cSJim Jagielski 			{
142*b1cdbd2cSJim Jagielski 				ScInputWindow* pWin = (ScInputWindow*)pChild->GetWindow();
143*b1cdbd2cSJim Jagielski 				if (pWin && pWin->IsVisible())
144*b1cdbd2cSJim Jagielski 				{
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski 					ScInputHandler* pOldHdl=pWin->GetInputHandler();
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 					TypeId aScType = TYPE(ScTabViewShell);
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 					SfxViewShell* pSh = SfxViewShell::GetFirst( &aScType );
151*b1cdbd2cSJim Jagielski 					while ( pSh!=NULL && pOldHdl!=NULL)
152*b1cdbd2cSJim Jagielski 					{
153*b1cdbd2cSJim Jagielski 						if (((ScTabViewShell*)pSh)->GetInputHandler() == pOldHdl)
154*b1cdbd2cSJim Jagielski 						{
155*b1cdbd2cSJim Jagielski 							pOldHdl->ResetDelayTimer();
156*b1cdbd2cSJim Jagielski 							break;
157*b1cdbd2cSJim Jagielski 						}
158*b1cdbd2cSJim Jagielski 						pSh = SfxViewShell::GetNext( *pSh, &aScType );
159*b1cdbd2cSJim Jagielski 					}
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 					pWin->SetInputHandler( pInputHandler );
162*b1cdbd2cSJim Jagielski 				}
163*b1cdbd2cSJim Jagielski 			}
164*b1cdbd2cSJim Jagielski 		}
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 		UpdateInputHandler( sal_True );
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 		if ( bFirstActivate )
169*b1cdbd2cSJim Jagielski 		{
170*b1cdbd2cSJim Jagielski 			SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_NAVIGATOR_UPDATEALL ) );
171*b1cdbd2cSJim Jagielski 			bFirstActivate = sal_False;
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski             // #116278# ReadExtOptions (view settings from Excel import) must also be done
174*b1cdbd2cSJim Jagielski             // after the ctor, because of the potential calls to Window::Show.
175*b1cdbd2cSJim Jagielski             // Even after the fix for #104887# (Window::Show no longer notifies the access
176*b1cdbd2cSJim Jagielski             // bridge, it's done in ImplSetReallyVisible), there are problems if Window::Show
177*b1cdbd2cSJim Jagielski             // is called during the ViewShell ctor and reschedules asynchronous calls
178*b1cdbd2cSJim Jagielski             // (for example from the FmFormShell ctor).
179*b1cdbd2cSJim Jagielski             ScExtDocOptions* pExtOpt = GetViewData()->GetDocument()->GetExtDocOptions();
180*b1cdbd2cSJim Jagielski             if ( pExtOpt && pExtOpt->IsChanged() )
181*b1cdbd2cSJim Jagielski             {
182*b1cdbd2cSJim Jagielski                 GetViewData()->ReadExtOptions(*pExtOpt);        // Excel view settings
183*b1cdbd2cSJim Jagielski                 SetTabNo( GetViewData()->GetTabNo(), sal_True );
184*b1cdbd2cSJim Jagielski                 pExtOpt->SetChanged( false );
185*b1cdbd2cSJim Jagielski             }
186*b1cdbd2cSJim Jagielski 		}
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 		pScActiveViewShell = this;
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski 		ScInputHandler* pHdl = pScMod->GetInputHdl(this);
191*b1cdbd2cSJim Jagielski 		if (pHdl)
192*b1cdbd2cSJim Jagielski 		{
193*b1cdbd2cSJim Jagielski 			pHdl->SetRefScale( GetViewData()->GetZoomX(), GetViewData()->GetZoomY() );
194*b1cdbd2cSJim Jagielski 		}
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 		//	Aenderungs-Dialog aktualisieren
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 		if ( pThisFrame->HasChildWindow(FID_CHG_ACCEPT) )
199*b1cdbd2cSJim Jagielski 		{
200*b1cdbd2cSJim Jagielski 			SfxChildWindow* pChild = pThisFrame->GetChildWindow(FID_CHG_ACCEPT);
201*b1cdbd2cSJim Jagielski 			if (pChild)
202*b1cdbd2cSJim Jagielski 			{
203*b1cdbd2cSJim Jagielski 				((ScAcceptChgDlgWrapper*)pChild)->ReInitDlg();
204*b1cdbd2cSJim Jagielski 			}
205*b1cdbd2cSJim Jagielski 		}
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 		if(pScMod->IsRefDialogOpen())
208*b1cdbd2cSJim Jagielski 		{
209*b1cdbd2cSJim Jagielski 			sal_uInt16 nModRefDlgId=pScMod->GetCurRefDlgId();
210*b1cdbd2cSJim Jagielski 			SfxChildWindow* pChildWnd = pThisFrame->GetChildWindow( nModRefDlgId );
211*b1cdbd2cSJim Jagielski 			if ( pChildWnd )
212*b1cdbd2cSJim Jagielski 			{
213*b1cdbd2cSJim Jagielski 				IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
214*b1cdbd2cSJim Jagielski 				pRefDlg->ViewShellChanged(this);
215*b1cdbd2cSJim Jagielski 			}
216*b1cdbd2cSJim Jagielski 		}
217*b1cdbd2cSJim Jagielski 	}
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski 	//	don't call CheckSelectionTransfer here - activating a view should not change the
220*b1cdbd2cSJim Jagielski 	//	primary selection (may be happening just because the mouse was moved over the window)
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 	//	Wenn Referenzeingabe-Tip-Hilfe hier wieder angezeigt werden soll (ShowRefTip),
223*b1cdbd2cSJim Jagielski 	//	muss sie beim Verschieben der View angepasst werden (gibt sonst Probleme unter OS/2
224*b1cdbd2cSJim Jagielski 	//	beim Umschalten zwischen Dokumenten)
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski     ContextChangeEventMultiplexer::NotifyContextChange(
227*b1cdbd2cSJim Jagielski         GetController(),
228*b1cdbd2cSJim Jagielski         ::sfx2::sidebar::EnumContext::Context_Default);
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski 
Deactivate(sal_Bool bMDI)231*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::Deactivate(sal_Bool bMDI)
232*b1cdbd2cSJim Jagielski {
233*b1cdbd2cSJim Jagielski 	HideTip();
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 	ScDocument*	pDoc=GetViewData()->GetDocument();
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski 	ScChangeTrack* pChanges=pDoc->GetChangeTrack();
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 	if(pChanges!=NULL)
240*b1cdbd2cSJim Jagielski 	{
241*b1cdbd2cSJim Jagielski 		Link aLink;
242*b1cdbd2cSJim Jagielski 		pChanges->SetModifiedLink(aLink);
243*b1cdbd2cSJim Jagielski 	}
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski 	SfxViewShell::Deactivate(bMDI);
246*b1cdbd2cSJim Jagielski 	bIsActive = sal_False;
247*b1cdbd2cSJim Jagielski 	ScInputHandler* pHdl = SC_MOD()->GetInputHdl(this);
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 	if( bMDI )
250*b1cdbd2cSJim Jagielski 	{
251*b1cdbd2cSJim Jagielski 		//	#85421# during shell deactivation, shells must not be switched, or the loop
252*b1cdbd2cSJim Jagielski 		//	through the shell stack (in SfxDispatcher::DoDeactivate_Impl) will not work
253*b1cdbd2cSJim Jagielski 		sal_Bool bOldDontSwitch = bDontSwitch;
254*b1cdbd2cSJim Jagielski 		bDontSwitch = sal_True;
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski 		DeActivateOlk( GetViewData() );
257*b1cdbd2cSJim Jagielski 		ActivateView( sal_False, sal_False );
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski         if ( GetViewFrame()->GetFrame().IsInPlace() ) // inplace
260*b1cdbd2cSJim Jagielski 			GetViewData()->GetDocShell()->UpdateOle(GetViewData(),sal_True);
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski 		if ( pHdl )
263*b1cdbd2cSJim Jagielski 			pHdl->NotifyChange( NULL, sal_True ); // Timer-verzoegert wg. Dokumentwechsel
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 		if (pScActiveViewShell == this)
266*b1cdbd2cSJim Jagielski 			pScActiveViewShell = NULL;
267*b1cdbd2cSJim Jagielski 
268*b1cdbd2cSJim Jagielski 		bDontSwitch = bOldDontSwitch;
269*b1cdbd2cSJim Jagielski 	}
270*b1cdbd2cSJim Jagielski 	else
271*b1cdbd2cSJim Jagielski 	{
272*b1cdbd2cSJim Jagielski 		HideNoteMarker();			// Notiz-Anzeige
273*b1cdbd2cSJim Jagielski 
274*b1cdbd2cSJim Jagielski 		if ( pHdl )
275*b1cdbd2cSJim Jagielski 			pHdl->HideTip();		// Formel-AutoEingabe-Tip abschalten
276*b1cdbd2cSJim Jagielski 	}
277*b1cdbd2cSJim Jagielski }
278*b1cdbd2cSJim Jagielski 
SetActive()279*b1cdbd2cSJim Jagielski void ScTabViewShell::SetActive()
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski 	// Die Sfx-View moechte sich gerne selbst aktivieren, weil dabei noch
282*b1cdbd2cSJim Jagielski 	// magische Dinge geschehen (z.B. stuerzt sonst evtl. der Gestalter ab)
283*b1cdbd2cSJim Jagielski 	ActiveGrabFocus();
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski #if 0
286*b1cdbd2cSJim Jagielski 	SfxViewFrame* pFrame = GetViewFrame();
287*b1cdbd2cSJim Jagielski 	pFrame->GetFrame().Appear();
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski 	SFX_APP()->SetViewFrame( pFrame );			// immer erst Appear, dann SetViewFrame (#29290#)
290*b1cdbd2cSJim Jagielski #endif
291*b1cdbd2cSJim Jagielski }
292*b1cdbd2cSJim Jagielski 
PrepareClose(sal_Bool bUI,sal_Bool bForBrowsing)293*b1cdbd2cSJim Jagielski sal_uInt16 __EXPORT ScTabViewShell::PrepareClose(sal_Bool bUI, sal_Bool bForBrowsing)
294*b1cdbd2cSJim Jagielski {
295*b1cdbd2cSJim Jagielski     // Call EnterHandler even in formula mode here,
296*b1cdbd2cSJim Jagielski     // so a formula change in an embedded object isn't lost
297*b1cdbd2cSJim Jagielski     // (ScDocShell::PrepareClose isn't called then).
298*b1cdbd2cSJim Jagielski     ScInputHandler* pHdl = SC_MOD()->GetInputHdl( this );
299*b1cdbd2cSJim Jagielski     if ( pHdl && pHdl->IsInputMode() )
300*b1cdbd2cSJim Jagielski         pHdl->EnterHandler();
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski     // #110797# draw text edit mode must be closed
303*b1cdbd2cSJim Jagielski     FuPoor* pPoor = GetDrawFuncPtr();
304*b1cdbd2cSJim Jagielski     if ( pPoor && ( IsDrawTextShell() || pPoor->GetSlotID() == SID_DRAW_NOTEEDIT ) )
305*b1cdbd2cSJim Jagielski     {
306*b1cdbd2cSJim Jagielski         // "clean" end of text edit, including note handling, subshells and draw func switching,
307*b1cdbd2cSJim Jagielski         // as in FuDraw and ScTabView::DrawDeselectAll
308*b1cdbd2cSJim Jagielski         GetViewData()->GetDispatcher().Execute( pPoor->GetSlotID(), SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD );
309*b1cdbd2cSJim Jagielski     }
310*b1cdbd2cSJim Jagielski     ScDrawView* pDrView = GetScDrawView();
311*b1cdbd2cSJim Jagielski     if ( pDrView )
312*b1cdbd2cSJim Jagielski     {
313*b1cdbd2cSJim Jagielski         // force end of text edit, to be safe
314*b1cdbd2cSJim Jagielski         // #128314# ScEndTextEdit must always be used, to ensure correct UndoManager
315*b1cdbd2cSJim Jagielski         pDrView->ScEndTextEdit();
316*b1cdbd2cSJim Jagielski     }
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski 	if ( pFormShell )
319*b1cdbd2cSJim Jagielski 	{
320*b1cdbd2cSJim Jagielski 		sal_uInt16 nRet = pFormShell->PrepareClose(bUI, bForBrowsing);
321*b1cdbd2cSJim Jagielski 		if (nRet!=sal_True)
322*b1cdbd2cSJim Jagielski 			return nRet;
323*b1cdbd2cSJim Jagielski 	}
324*b1cdbd2cSJim Jagielski 	return SfxViewShell::PrepareClose(bUI,bForBrowsing);
325*b1cdbd2cSJim Jagielski }
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
328*b1cdbd2cSJim Jagielski 
GetOptimalSizePixel() const329*b1cdbd2cSJim Jagielski Size __EXPORT ScTabViewShell::GetOptimalSizePixel() const
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski 	Size aOptSize;
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski 	SCTAB				nCurTab		= GetViewData()->GetTabNo();
334*b1cdbd2cSJim Jagielski 	ScDocument*			pDoc		= GetViewData()->GetDocument();
335*b1cdbd2cSJim Jagielski 	ScStyleSheetPool*	pStylePool  = pDoc->GetStyleSheetPool();
336*b1cdbd2cSJim Jagielski 	SfxStyleSheetBase*	pStyleSheet = pStylePool->Find(
337*b1cdbd2cSJim Jagielski 										pDoc->GetPageStyle( nCurTab ),
338*b1cdbd2cSJim Jagielski 										SFX_STYLE_FAMILY_PAGE );
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 	DBG_ASSERT( pStyleSheet, "PageStyle not found :-/" );
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski 	if ( pStyleSheet )
343*b1cdbd2cSJim Jagielski 	{
344*b1cdbd2cSJim Jagielski 		const SfxItemSet&  rSet 	 = pStyleSheet->GetItemSet();
345*b1cdbd2cSJim Jagielski 		const SvxSizeItem& rItem	 = (const SvxSizeItem&)rSet.Get( ATTR_PAGE_SIZE );
346*b1cdbd2cSJim Jagielski 		const Size&		   rPageSize = rItem.GetSize();
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski 		aOptSize.Width()  = (long) (rPageSize.Width()  * GetViewData()->GetPPTX());
349*b1cdbd2cSJim Jagielski 		aOptSize.Height() = (long) (rPageSize.Height() * GetViewData()->GetPPTY());
350*b1cdbd2cSJim Jagielski 	}
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski 	return aOptSize;
353*b1cdbd2cSJim Jagielski }
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
356*b1cdbd2cSJim Jagielski 
357*b1cdbd2cSJim Jagielski //	Zoom fuer In-Place berechnen
358*b1cdbd2cSJim Jagielski //	aus Verhaeltnis von VisArea und Fenstergroesse des GridWin
359*b1cdbd2cSJim Jagielski 
UpdateOleZoom()360*b1cdbd2cSJim Jagielski void ScTabViewShell::UpdateOleZoom()
361*b1cdbd2cSJim Jagielski {
362*b1cdbd2cSJim Jagielski 	ScDocShell* pDocSh = GetViewData()->GetDocShell();
363*b1cdbd2cSJim Jagielski 	if ( pDocSh->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
364*b1cdbd2cSJim Jagielski 	{
365*b1cdbd2cSJim Jagielski         //TODO/LATER: is there a difference between the two GetVisArea methods?
366*b1cdbd2cSJim Jagielski         Size aObjSize = ((const SfxObjectShell*)pDocSh)->GetVisArea().GetSize();
367*b1cdbd2cSJim Jagielski 		if ( aObjSize.Width() > 0 && aObjSize.Height() > 0 )
368*b1cdbd2cSJim Jagielski 		{
369*b1cdbd2cSJim Jagielski 			Window* pWin = GetActiveWin();
370*b1cdbd2cSJim Jagielski 			Size aWinHMM = pWin->PixelToLogic( pWin->GetOutputSizePixel(), MAP_100TH_MM );
371*b1cdbd2cSJim Jagielski 			SetZoomFactor( Fraction( aWinHMM.Width(),aObjSize.Width() ),
372*b1cdbd2cSJim Jagielski 							Fraction( aWinHMM.Height(),aObjSize.Height() ) );
373*b1cdbd2cSJim Jagielski 		}
374*b1cdbd2cSJim Jagielski 	}
375*b1cdbd2cSJim Jagielski }
376*b1cdbd2cSJim Jagielski 
AdjustPosSizePixel(const Point & rPos,const Size & rSize)377*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::AdjustPosSizePixel( const Point &rPos, const Size &rSize )
378*b1cdbd2cSJim Jagielski {
379*b1cdbd2cSJim Jagielski 	OuterResizePixel( rPos, rSize );
380*b1cdbd2cSJim Jagielski }
381*b1cdbd2cSJim Jagielski 
InnerResizePixel(const Point & rOfs,const Size & rSize)382*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::InnerResizePixel( const Point &rOfs, const Size &rSize )
383*b1cdbd2cSJim Jagielski {
384*b1cdbd2cSJim Jagielski 	Size aNewSize( rSize );
385*b1cdbd2cSJim Jagielski     if ( GetViewFrame()->GetFrame().IsInPlace() )
386*b1cdbd2cSJim Jagielski 	{
387*b1cdbd2cSJim Jagielski 		SvBorder aBorder;
388*b1cdbd2cSJim Jagielski 	   	GetBorderSize( aBorder, rSize );
389*b1cdbd2cSJim Jagielski 		SetBorderPixel( aBorder );
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski 		Size aObjSize = GetObjectShell()->GetVisArea().GetSize();
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski       	Size aSize( rSize );
394*b1cdbd2cSJim Jagielski         aSize.Width() -= (aBorder.Left() + aBorder.Right());
395*b1cdbd2cSJim Jagielski         aSize.Height() -= (aBorder.Top() + aBorder.Bottom());
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski 		if ( aObjSize.Width() > 0 && aObjSize.Height() > 0 )
398*b1cdbd2cSJim Jagielski     	{
399*b1cdbd2cSJim Jagielski         	Size aLogicSize = GetWindow()->PixelToLogic( aSize, MAP_100TH_MM );
400*b1cdbd2cSJim Jagielski         	SfxViewShell::SetZoomFactor( Fraction( aLogicSize.Width(),aObjSize.Width() ),
401*b1cdbd2cSJim Jagielski                         	Fraction( aLogicSize.Height(),aObjSize.Height() ) );
402*b1cdbd2cSJim Jagielski     	}
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski         Point aPos( rOfs );
405*b1cdbd2cSJim Jagielski         aPos.X() += aBorder.Left();
406*b1cdbd2cSJim Jagielski         aPos.Y() += aBorder.Top();
407*b1cdbd2cSJim Jagielski         GetWindow()->SetPosSizePixel( aPos, aSize );
408*b1cdbd2cSJim Jagielski 	}
409*b1cdbd2cSJim Jagielski 	else
410*b1cdbd2cSJim Jagielski     {
411*b1cdbd2cSJim Jagielski         SvBorder aBorder;
412*b1cdbd2cSJim Jagielski         GetBorderSize( aBorder, rSize );
413*b1cdbd2cSJim Jagielski         SetBorderPixel( aBorder );
414*b1cdbd2cSJim Jagielski         aNewSize.Width()  += aBorder.Left() + aBorder.Right();
415*b1cdbd2cSJim Jagielski         aNewSize.Height() += aBorder.Top() + aBorder.Bottom();
416*b1cdbd2cSJim Jagielski     }
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski 	DoResize( rOfs, aNewSize, sal_True );					// rSize = Groesse von gridwin
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski 	UpdateOleZoom();									//	Zoom fuer In-Place berechnen
421*b1cdbd2cSJim Jagielski 
422*b1cdbd2cSJim Jagielski //	GetViewData()->GetDocShell()->UpdateOle( GetViewData() );
423*b1cdbd2cSJim Jagielski 	GetViewData()->GetDocShell()->SetDocumentModified();
424*b1cdbd2cSJim Jagielski }
425*b1cdbd2cSJim Jagielski 
OuterResizePixel(const Point & rOfs,const Size & rSize)426*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::OuterResizePixel( const Point &rOfs, const Size &rSize )
427*b1cdbd2cSJim Jagielski {
428*b1cdbd2cSJim Jagielski 	SvBorder aBorder;
429*b1cdbd2cSJim Jagielski 	GetBorderSize( aBorder, rSize );
430*b1cdbd2cSJim Jagielski 	SetBorderPixel( aBorder );
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 	DoResize( rOfs, rSize );					// Position und Groesse von tabview wie uebergeben
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski 	// ForceMove als Ersatz fuer den Sfx-Move-Mechanismus
435*b1cdbd2cSJim Jagielski 	// (aWinPos muss aktuell gehalten werden, damit ForceMove beim Ole-Deaktivieren klappt)
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski 	ForceMove();
438*b1cdbd2cSJim Jagielski }
439*b1cdbd2cSJim Jagielski 
SetZoomFactor(const Fraction & rZoomX,const Fraction & rZoomY)440*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::SetZoomFactor( const Fraction &rZoomX, const Fraction &rZoomY )
441*b1cdbd2cSJim Jagielski {
442*b1cdbd2cSJim Jagielski 	//	fuer OLE...
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski 	Fraction aFrac20( 1,5 );
445*b1cdbd2cSJim Jagielski 	Fraction aFrac400( 4,1 );
446*b1cdbd2cSJim Jagielski 
447*b1cdbd2cSJim Jagielski 	Fraction aNewX( rZoomX );
448*b1cdbd2cSJim Jagielski 	if ( aNewX < aFrac20 )
449*b1cdbd2cSJim Jagielski 		aNewX = aFrac20;
450*b1cdbd2cSJim Jagielski 	if ( aNewX > aFrac400 )
451*b1cdbd2cSJim Jagielski 		aNewX = aFrac400;
452*b1cdbd2cSJim Jagielski 	Fraction aNewY( rZoomY );
453*b1cdbd2cSJim Jagielski 	if ( aNewY < aFrac20 )
454*b1cdbd2cSJim Jagielski 		aNewY = aFrac20;
455*b1cdbd2cSJim Jagielski 	if ( aNewY > aFrac400 )
456*b1cdbd2cSJim Jagielski 		aNewY = aFrac400;
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski 	GetViewData()->UpdateScreenZoom( aNewX, aNewY );
459*b1cdbd2cSJim Jagielski     SetZoom( aNewX, aNewY, sal_True );
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski 	PaintGrid();
462*b1cdbd2cSJim Jagielski 	PaintTop();
463*b1cdbd2cSJim Jagielski 	PaintLeft();
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 	SfxViewShell::SetZoomFactor( rZoomX, rZoomY );
466*b1cdbd2cSJim Jagielski }
467*b1cdbd2cSJim Jagielski 
QueryObjAreaPixel(Rectangle & rRect) const468*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::QueryObjAreaPixel( Rectangle& rRect ) const
469*b1cdbd2cSJim Jagielski {
470*b1cdbd2cSJim Jagielski 	//	auf ganze Zellen anpassen (in 1/100 mm)
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski 	Size aPixelSize = rRect.GetSize();
473*b1cdbd2cSJim Jagielski 	Window* pWin = ((ScTabViewShell*)this)->GetActiveWin();
474*b1cdbd2cSJim Jagielski 	Size aLogicSize = pWin->PixelToLogic( aPixelSize );
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski 	const ScViewData* pViewData = GetViewData();
477*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pViewData->GetDocument();
478*b1cdbd2cSJim Jagielski 	ScSplitPos ePos = pViewData->GetActivePart();
479*b1cdbd2cSJim Jagielski 	SCCOL nCol = pViewData->GetPosX(WhichH(ePos));
480*b1cdbd2cSJim Jagielski 	SCROW nRow = pViewData->GetPosY(WhichV(ePos));
481*b1cdbd2cSJim Jagielski 	SCTAB nTab = pViewData->GetTabNo();
482*b1cdbd2cSJim Jagielski     sal_Bool bNegativePage = pDoc->IsNegativePage( nTab );
483*b1cdbd2cSJim Jagielski 
484*b1cdbd2cSJim Jagielski 	Rectangle aLogicRect = pDoc->GetMMRect( nCol, nRow, nCol, nRow, nTab );
485*b1cdbd2cSJim Jagielski 	if ( bNegativePage )
486*b1cdbd2cSJim Jagielski 	{
487*b1cdbd2cSJim Jagielski 	    // use right edge of aLogicRect, and aLogicSize
488*b1cdbd2cSJim Jagielski 	    aLogicRect.Left() = aLogicRect.Right() - aLogicSize.Width() + 1;    // Right() is set below
489*b1cdbd2cSJim Jagielski 	}
490*b1cdbd2cSJim Jagielski 	aLogicRect.SetSize( aLogicSize );
491*b1cdbd2cSJim Jagielski 
492*b1cdbd2cSJim Jagielski 	pDoc->SnapVisArea( aLogicRect );
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski 	rRect.SetSize( pWin->LogicToPixel( aLogicRect.GetSize() ) );
495*b1cdbd2cSJim Jagielski 
496*b1cdbd2cSJim Jagielski #if 0
497*b1cdbd2cSJim Jagielski 	//	auf ganze Zellen anpassen (in Pixeln)
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski 	ScViewData* pViewData = ((ScTabViewShell*)this)->GetViewData();
500*b1cdbd2cSJim Jagielski 	Size aSize = rRect.GetSize();
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski 	ScSplitPos ePos = pViewData->GetActivePart();
503*b1cdbd2cSJim Jagielski 	Window* pWin = ((ScTabViewShell*)this)->GetActiveWin();
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski 	Point aTest( aSize.Width(), aSize.Height() );
506*b1cdbd2cSJim Jagielski 	SCsCOL nPosX;
507*b1cdbd2cSJim Jagielski 	SCsROW nPosY;
508*b1cdbd2cSJim Jagielski 	pViewData->GetPosFromPixel( aTest.X(), aTest.Y(), ePos, nPosX, nPosY );
509*b1cdbd2cSJim Jagielski 	sal_Bool bLeft;
510*b1cdbd2cSJim Jagielski 	sal_Bool bTop;
511*b1cdbd2cSJim Jagielski 	pViewData->GetMouseQuadrant( aTest, ePos, nPosX, nPosY, bLeft, bTop );
512*b1cdbd2cSJim Jagielski 	if (!bLeft)
513*b1cdbd2cSJim Jagielski 		++nPosX;
514*b1cdbd2cSJim Jagielski 	if (!bTop)
515*b1cdbd2cSJim Jagielski 		++nPosY;
516*b1cdbd2cSJim Jagielski 	aTest = pViewData->GetScrPos( (SCCOL)nPosX, (SCROW)nPosY, ePos, sal_True );
517*b1cdbd2cSJim Jagielski 
518*b1cdbd2cSJim Jagielski 	rRect.SetSize(Size(aTest.X(),aTest.Y()));
519*b1cdbd2cSJim Jagielski #endif
520*b1cdbd2cSJim Jagielski }
521*b1cdbd2cSJim Jagielski 
522*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
523*b1cdbd2cSJim Jagielski 
Move()524*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::Move()
525*b1cdbd2cSJim Jagielski {
526*b1cdbd2cSJim Jagielski 	Point aNewPos = GetViewFrame()->GetWindow().OutputToScreenPixel(Point());
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski 	if (aNewPos != aWinPos)
529*b1cdbd2cSJim Jagielski 	{
530*b1cdbd2cSJim Jagielski 		StopMarking();
531*b1cdbd2cSJim Jagielski 		aWinPos = aNewPos;
532*b1cdbd2cSJim Jagielski 	}
533*b1cdbd2cSJim Jagielski }
534*b1cdbd2cSJim Jagielski 
535*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
536*b1cdbd2cSJim Jagielski 
ShowCursor(FASTBOOL)537*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::ShowCursor(FASTBOOL /* bOn */)
538*b1cdbd2cSJim Jagielski {
539*b1cdbd2cSJim Jagielski /*!!!	ShowCursor wird nicht paarweise wie im gridwin gerufen.
540*b1cdbd2cSJim Jagielski 		Der CursorLockCount am Gridwin muss hier direkt auf 0 gesetzt werden
541*b1cdbd2cSJim Jagielski 
542*b1cdbd2cSJim Jagielski 	if (bOn)
543*b1cdbd2cSJim Jagielski 		ShowAllCursors();
544*b1cdbd2cSJim Jagielski 	else
545*b1cdbd2cSJim Jagielski 		HideAllCursors();
546*b1cdbd2cSJim Jagielski */
547*b1cdbd2cSJim Jagielski }
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
550*b1cdbd2cSJim Jagielski 
WriteUserData(String & rData,sal_Bool)551*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::WriteUserData(String& rData, sal_Bool /* bBrowse */)
552*b1cdbd2cSJim Jagielski {
553*b1cdbd2cSJim Jagielski 	GetViewData()->WriteUserData(rData);
554*b1cdbd2cSJim Jagielski }
555*b1cdbd2cSJim Jagielski 
WriteUserDataSequence(uno::Sequence<beans::PropertyValue> & rSettings,sal_Bool)556*b1cdbd2cSJim Jagielski void ScTabViewShell::WriteUserDataSequence (uno::Sequence < beans::PropertyValue >& rSettings, sal_Bool /* bBrowse */ )
557*b1cdbd2cSJim Jagielski {
558*b1cdbd2cSJim Jagielski 	GetViewData()->WriteUserDataSequence (rSettings);
559*b1cdbd2cSJim Jagielski }
560*b1cdbd2cSJim Jagielski 
ReadUserData(const String & rData,sal_Bool)561*b1cdbd2cSJim Jagielski void __EXPORT ScTabViewShell::ReadUserData(const String& rData, sal_Bool /* bBrowse */)
562*b1cdbd2cSJim Jagielski {
563*b1cdbd2cSJim Jagielski 	if ( !GetViewData()->GetDocShell()->IsPreview() )
564*b1cdbd2cSJim Jagielski 		DoReadUserData( rData );
565*b1cdbd2cSJim Jagielski }
566*b1cdbd2cSJim Jagielski 
ReadUserDataSequence(const uno::Sequence<beans::PropertyValue> & rSettings,sal_Bool)567*b1cdbd2cSJim Jagielski void ScTabViewShell::ReadUserDataSequence (const uno::Sequence < beans::PropertyValue >& rSettings, sal_Bool /* bBrowse */ )
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski     if ( !GetViewData()->GetDocShell()->IsPreview() )
570*b1cdbd2cSJim Jagielski         DoReadUserDataSequence( rSettings );
571*b1cdbd2cSJim Jagielski }
572*b1cdbd2cSJim Jagielski 
DoReadUserDataSequence(const uno::Sequence<beans::PropertyValue> & rSettings)573*b1cdbd2cSJim Jagielski void ScTabViewShell::DoReadUserDataSequence( const uno::Sequence < beans::PropertyValue >& rSettings )
574*b1cdbd2cSJim Jagielski {
575*b1cdbd2cSJim Jagielski 	Window* pOldWin = GetActiveWin();
576*b1cdbd2cSJim Jagielski 	sal_Bool bFocus = pOldWin && pOldWin->HasFocus();
577*b1cdbd2cSJim Jagielski 
578*b1cdbd2cSJim Jagielski 	GetViewData()->ReadUserDataSequence(rSettings);
579*b1cdbd2cSJim Jagielski 	SetTabNo( GetViewData()->GetTabNo(), sal_True );
580*b1cdbd2cSJim Jagielski 
581*b1cdbd2cSJim Jagielski 	if ( GetViewData()->IsPagebreakMode() )
582*b1cdbd2cSJim Jagielski 		SetCurSubShell( GetCurObjectSelectionType(), sal_True );
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski 	Window* pNewWin = GetActiveWin();
585*b1cdbd2cSJim Jagielski 	if (pNewWin && pNewWin != pOldWin)
586*b1cdbd2cSJim Jagielski 	{
587*b1cdbd2cSJim Jagielski 		SetWindow( pNewWin );		//! ist diese ViewShell immer aktiv???
588*b1cdbd2cSJim Jagielski 		if (bFocus)
589*b1cdbd2cSJim Jagielski 			pNewWin->GrabFocus();
590*b1cdbd2cSJim Jagielski 		WindowChanged();			// Drawing-Layer (z.B. #56771#)
591*b1cdbd2cSJim Jagielski 	}
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski 	if (GetViewData()->GetHSplitMode() == SC_SPLIT_FIX ||
594*b1cdbd2cSJim Jagielski 		GetViewData()->GetVSplitMode() == SC_SPLIT_FIX)
595*b1cdbd2cSJim Jagielski 	{
596*b1cdbd2cSJim Jagielski 		InvalidateSplit();
597*b1cdbd2cSJim Jagielski 	}
598*b1cdbd2cSJim Jagielski 
599*b1cdbd2cSJim Jagielski 	ZoomChanged();
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski 	TestHintWindow();
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski 	//!	if ViewData has more tables than document, remove tables in ViewData
604*b1cdbd2cSJim Jagielski }
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski // DoReadUserData is also called from ctor when switching from print preview
607*b1cdbd2cSJim Jagielski 
DoReadUserData(const String & rData)608*b1cdbd2cSJim Jagielski void ScTabViewShell::DoReadUserData( const String& rData )
609*b1cdbd2cSJim Jagielski {
610*b1cdbd2cSJim Jagielski 	Window* pOldWin = GetActiveWin();
611*b1cdbd2cSJim Jagielski 	sal_Bool bFocus = pOldWin && pOldWin->HasFocus();
612*b1cdbd2cSJim Jagielski 
613*b1cdbd2cSJim Jagielski 	GetViewData()->ReadUserData(rData);
614*b1cdbd2cSJim Jagielski 	SetTabNo( GetViewData()->GetTabNo(), sal_True );
615*b1cdbd2cSJim Jagielski 
616*b1cdbd2cSJim Jagielski 	if ( GetViewData()->IsPagebreakMode() )
617*b1cdbd2cSJim Jagielski 		SetCurSubShell( GetCurObjectSelectionType(), sal_True );
618*b1cdbd2cSJim Jagielski 
619*b1cdbd2cSJim Jagielski 	Window* pNewWin = GetActiveWin();
620*b1cdbd2cSJim Jagielski 	if (pNewWin && pNewWin != pOldWin)
621*b1cdbd2cSJim Jagielski 	{
622*b1cdbd2cSJim Jagielski 		SetWindow( pNewWin );		//! ist diese ViewShell immer aktiv???
623*b1cdbd2cSJim Jagielski 		if (bFocus)
624*b1cdbd2cSJim Jagielski 			pNewWin->GrabFocus();
625*b1cdbd2cSJim Jagielski 		WindowChanged();			// Drawing-Layer (z.B. #56771#)
626*b1cdbd2cSJim Jagielski 	}
627*b1cdbd2cSJim Jagielski 
628*b1cdbd2cSJim Jagielski 	if (GetViewData()->GetHSplitMode() == SC_SPLIT_FIX ||
629*b1cdbd2cSJim Jagielski 		GetViewData()->GetVSplitMode() == SC_SPLIT_FIX)
630*b1cdbd2cSJim Jagielski 	{
631*b1cdbd2cSJim Jagielski 		InvalidateSplit();
632*b1cdbd2cSJim Jagielski 	}
633*b1cdbd2cSJim Jagielski 
634*b1cdbd2cSJim Jagielski 	ZoomChanged();
635*b1cdbd2cSJim Jagielski 
636*b1cdbd2cSJim Jagielski 	TestHintWindow();
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski 	//!	if ViewData has more tables than document, remove tables in ViewData
639*b1cdbd2cSJim Jagielski }
640*b1cdbd2cSJim Jagielski 
641*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
642*b1cdbd2cSJim Jagielski 
UpdateDrawShell()643*b1cdbd2cSJim Jagielski void ScTabViewShell::UpdateDrawShell()
644*b1cdbd2cSJim Jagielski {
645*b1cdbd2cSJim Jagielski     // Called after user interaction that may delete the selected drawing object.
646*b1cdbd2cSJim Jagielski     // Remove DrawShell if nothing is selected.
647*b1cdbd2cSJim Jagielski 
648*b1cdbd2cSJim Jagielski     SdrView* pDrView = GetSdrView();
649*b1cdbd2cSJim Jagielski     if ( pDrView && !pDrView->AreObjectsMarked() && !IsDrawSelMode() )
650*b1cdbd2cSJim Jagielski         SetDrawShell( sal_False );
651*b1cdbd2cSJim Jagielski }
652*b1cdbd2cSJim Jagielski 
SetDrawShellOrSub()653*b1cdbd2cSJim Jagielski void ScTabViewShell::SetDrawShellOrSub()
654*b1cdbd2cSJim Jagielski {
655*b1cdbd2cSJim Jagielski 	bActiveDrawSh = sal_True;
656*b1cdbd2cSJim Jagielski 
657*b1cdbd2cSJim Jagielski 	if(bActiveDrawFormSh)
658*b1cdbd2cSJim Jagielski 	{
659*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_DrawForm);
660*b1cdbd2cSJim Jagielski 	}
661*b1cdbd2cSJim Jagielski 	else if(bActiveGraphicSh)
662*b1cdbd2cSJim Jagielski 	{
663*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Graphic);
664*b1cdbd2cSJim Jagielski 	}
665*b1cdbd2cSJim Jagielski 	else if(bActiveMediaSh)
666*b1cdbd2cSJim Jagielski 	{
667*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Media);
668*b1cdbd2cSJim Jagielski 	}
669*b1cdbd2cSJim Jagielski 	else if(bActiveChartSh)
670*b1cdbd2cSJim Jagielski 	{
671*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Chart);
672*b1cdbd2cSJim Jagielski 	}
673*b1cdbd2cSJim Jagielski 	else if(bActiveOleObjectSh)
674*b1cdbd2cSJim Jagielski 	{
675*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_OleObject);
676*b1cdbd2cSJim Jagielski 	}
677*b1cdbd2cSJim Jagielski 	else
678*b1cdbd2cSJim Jagielski 	{
679*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Drawing, true /* force: different toolbars are
680*b1cdbd2cSJim Jagielski                                             visible concerning shape type
681*b1cdbd2cSJim Jagielski                                             and shape state */);
682*b1cdbd2cSJim Jagielski 	}
683*b1cdbd2cSJim Jagielski }
684*b1cdbd2cSJim Jagielski 
SetDrawShell(sal_Bool bActive)685*b1cdbd2cSJim Jagielski void ScTabViewShell::SetDrawShell( sal_Bool bActive )
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski 	if(bActive)
688*b1cdbd2cSJim Jagielski 	{
689*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Drawing, true /* force: different toolbars are
690*b1cdbd2cSJim Jagielski                                             visible concerning shape type
691*b1cdbd2cSJim Jagielski                                             and shape state */);
692*b1cdbd2cSJim Jagielski 	}
693*b1cdbd2cSJim Jagielski 	else
694*b1cdbd2cSJim Jagielski 	{
695*b1cdbd2cSJim Jagielski 		if(bActiveDrawFormSh || bActiveDrawSh ||
696*b1cdbd2cSJim Jagielski             bActiveGraphicSh || bActiveMediaSh || bActiveOleObjectSh||
697*b1cdbd2cSJim Jagielski 			bActiveChartSh || bActiveDrawTextSh)
698*b1cdbd2cSJim Jagielski 		{
699*b1cdbd2cSJim Jagielski 			SetCurSubShell(OST_Cell);
700*b1cdbd2cSJim Jagielski 		}
701*b1cdbd2cSJim Jagielski 		bActiveDrawFormSh=sal_False;
702*b1cdbd2cSJim Jagielski 		bActiveGraphicSh=sal_False;
703*b1cdbd2cSJim Jagielski         bActiveMediaSh=sal_False;
704*b1cdbd2cSJim Jagielski 		bActiveOleObjectSh=sal_False;
705*b1cdbd2cSJim Jagielski 		bActiveChartSh=sal_False;
706*b1cdbd2cSJim Jagielski 	}
707*b1cdbd2cSJim Jagielski 
708*b1cdbd2cSJim Jagielski 	sal_Bool bWasDraw = bActiveDrawSh || bActiveDrawTextSh;
709*b1cdbd2cSJim Jagielski 
710*b1cdbd2cSJim Jagielski 	bActiveDrawSh = bActive;
711*b1cdbd2cSJim Jagielski 	bActiveDrawTextSh = sal_False;
712*b1cdbd2cSJim Jagielski 
713*b1cdbd2cSJim Jagielski 	if ( !bActive )
714*b1cdbd2cSJim Jagielski 	{
715*b1cdbd2cSJim Jagielski 		ResetDrawDragMode();		//	Mirror / Rotate aus
716*b1cdbd2cSJim Jagielski 
717*b1cdbd2cSJim Jagielski 		if (bWasDraw && (GetViewData()->GetHSplitMode() == SC_SPLIT_FIX ||
718*b1cdbd2cSJim Jagielski 						 GetViewData()->GetVSplitMode() == SC_SPLIT_FIX))
719*b1cdbd2cSJim Jagielski 		{
720*b1cdbd2cSJim Jagielski 			//	Aktiven Teil an Cursor anpassen, etc.
721*b1cdbd2cSJim Jagielski 			MoveCursorAbs( GetViewData()->GetCurX(), GetViewData()->GetCurY(),
722*b1cdbd2cSJim Jagielski 							SC_FOLLOW_NONE, sal_False, sal_False, sal_True );
723*b1cdbd2cSJim Jagielski 		}
724*b1cdbd2cSJim Jagielski 	}
725*b1cdbd2cSJim Jagielski }
726*b1cdbd2cSJim Jagielski 
SetDrawTextShell(sal_Bool bActive)727*b1cdbd2cSJim Jagielski void ScTabViewShell::SetDrawTextShell( sal_Bool bActive )
728*b1cdbd2cSJim Jagielski {
729*b1cdbd2cSJim Jagielski 	bActiveDrawTextSh = bActive;
730*b1cdbd2cSJim Jagielski 	if ( bActive )
731*b1cdbd2cSJim Jagielski 	{
732*b1cdbd2cSJim Jagielski 		bActiveDrawFormSh=sal_False;
733*b1cdbd2cSJim Jagielski 		bActiveGraphicSh=sal_False;
734*b1cdbd2cSJim Jagielski         bActiveMediaSh=sal_False;
735*b1cdbd2cSJim Jagielski 		bActiveOleObjectSh=sal_False;
736*b1cdbd2cSJim Jagielski 		bActiveChartSh=sal_False;
737*b1cdbd2cSJim Jagielski 		bActiveDrawSh = sal_False;
738*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_DrawText);
739*b1cdbd2cSJim Jagielski 	}
740*b1cdbd2cSJim Jagielski 	else
741*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Cell);
742*b1cdbd2cSJim Jagielski 
743*b1cdbd2cSJim Jagielski }
744*b1cdbd2cSJim Jagielski 
SetPivotShell(sal_Bool bActive)745*b1cdbd2cSJim Jagielski void ScTabViewShell::SetPivotShell( sal_Bool bActive )
746*b1cdbd2cSJim Jagielski {
747*b1cdbd2cSJim Jagielski 	bActivePivotSh = bActive;
748*b1cdbd2cSJim Jagielski 
749*b1cdbd2cSJim Jagielski 	//	#68771# #76198# SetPivotShell is called from CursorPosChanged every time
750*b1cdbd2cSJim Jagielski 	//	-> don't change anything except switching between cell and pivot shell
751*b1cdbd2cSJim Jagielski 
752*b1cdbd2cSJim Jagielski 	if ( eCurOST == OST_Pivot || eCurOST == OST_Cell )
753*b1cdbd2cSJim Jagielski 	{
754*b1cdbd2cSJim Jagielski 		if ( bActive )
755*b1cdbd2cSJim Jagielski 		{
756*b1cdbd2cSJim Jagielski 			bActiveDrawTextSh = bActiveDrawSh = sal_False;
757*b1cdbd2cSJim Jagielski 			bActiveDrawFormSh=sal_False;
758*b1cdbd2cSJim Jagielski 			bActiveGraphicSh=sal_False;
759*b1cdbd2cSJim Jagielski             bActiveMediaSh=sal_False;
760*b1cdbd2cSJim Jagielski 			bActiveOleObjectSh=sal_False;
761*b1cdbd2cSJim Jagielski 			bActiveChartSh=sal_False;
762*b1cdbd2cSJim Jagielski 			SetCurSubShell(OST_Pivot);
763*b1cdbd2cSJim Jagielski 		}
764*b1cdbd2cSJim Jagielski 		else
765*b1cdbd2cSJim Jagielski 			SetCurSubShell(OST_Cell);
766*b1cdbd2cSJim Jagielski 	}
767*b1cdbd2cSJim Jagielski }
768*b1cdbd2cSJim Jagielski 
SetAuditShell(sal_Bool bActive)769*b1cdbd2cSJim Jagielski void ScTabViewShell::SetAuditShell( sal_Bool bActive )
770*b1cdbd2cSJim Jagielski {
771*b1cdbd2cSJim Jagielski 	bActiveAuditingSh = bActive;
772*b1cdbd2cSJim Jagielski 	if ( bActive )
773*b1cdbd2cSJim Jagielski 	{
774*b1cdbd2cSJim Jagielski 		bActiveDrawTextSh = bActiveDrawSh = sal_False;
775*b1cdbd2cSJim Jagielski 		bActiveDrawFormSh=sal_False;
776*b1cdbd2cSJim Jagielski 		bActiveGraphicSh=sal_False;
777*b1cdbd2cSJim Jagielski         bActiveMediaSh=sal_False;
778*b1cdbd2cSJim Jagielski 		bActiveOleObjectSh=sal_False;
779*b1cdbd2cSJim Jagielski 		bActiveChartSh=sal_False;
780*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Auditing);
781*b1cdbd2cSJim Jagielski 	}
782*b1cdbd2cSJim Jagielski 	else
783*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Cell);
784*b1cdbd2cSJim Jagielski }
785*b1cdbd2cSJim Jagielski 
SetDrawFormShell(sal_Bool bActive)786*b1cdbd2cSJim Jagielski void ScTabViewShell::SetDrawFormShell( sal_Bool bActive )
787*b1cdbd2cSJim Jagielski {
788*b1cdbd2cSJim Jagielski 	bActiveDrawFormSh = bActive;
789*b1cdbd2cSJim Jagielski 
790*b1cdbd2cSJim Jagielski 	if(bActiveDrawFormSh)
791*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_DrawForm);
792*b1cdbd2cSJim Jagielski }
SetChartShell(sal_Bool bActive)793*b1cdbd2cSJim Jagielski void ScTabViewShell::SetChartShell( sal_Bool bActive )
794*b1cdbd2cSJim Jagielski {
795*b1cdbd2cSJim Jagielski 	bActiveChartSh = bActive;
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski 	if(bActiveChartSh)
798*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Chart);
799*b1cdbd2cSJim Jagielski }
800*b1cdbd2cSJim Jagielski 
SetGraphicShell(sal_Bool bActive)801*b1cdbd2cSJim Jagielski void ScTabViewShell::SetGraphicShell( sal_Bool bActive )
802*b1cdbd2cSJim Jagielski {
803*b1cdbd2cSJim Jagielski 	bActiveGraphicSh = bActive;
804*b1cdbd2cSJim Jagielski 
805*b1cdbd2cSJim Jagielski 	if(bActiveGraphicSh)
806*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Graphic);
807*b1cdbd2cSJim Jagielski }
808*b1cdbd2cSJim Jagielski 
SetMediaShell(sal_Bool bActive)809*b1cdbd2cSJim Jagielski void ScTabViewShell::SetMediaShell( sal_Bool bActive )
810*b1cdbd2cSJim Jagielski {
811*b1cdbd2cSJim Jagielski 	bActiveMediaSh = bActive;
812*b1cdbd2cSJim Jagielski 
813*b1cdbd2cSJim Jagielski 	if(bActiveMediaSh)
814*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Media);
815*b1cdbd2cSJim Jagielski }
816*b1cdbd2cSJim Jagielski 
SetOleObjectShell(sal_Bool bActive)817*b1cdbd2cSJim Jagielski void ScTabViewShell::SetOleObjectShell( sal_Bool bActive )
818*b1cdbd2cSJim Jagielski {
819*b1cdbd2cSJim Jagielski 	bActiveOleObjectSh = bActive;
820*b1cdbd2cSJim Jagielski 
821*b1cdbd2cSJim Jagielski 	if(bActiveOleObjectSh)
822*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_OleObject);
823*b1cdbd2cSJim Jagielski 	else
824*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Cell);
825*b1cdbd2cSJim Jagielski }
826*b1cdbd2cSJim Jagielski 
SetEditShell(EditView * pView,sal_Bool bActive)827*b1cdbd2cSJim Jagielski void ScTabViewShell::SetEditShell(EditView* pView, sal_Bool bActive )
828*b1cdbd2cSJim Jagielski {
829*b1cdbd2cSJim Jagielski 	if(bActive)
830*b1cdbd2cSJim Jagielski 	{
831*b1cdbd2cSJim Jagielski 		if (pEditShell)
832*b1cdbd2cSJim Jagielski 			pEditShell->SetEditView( pView );
833*b1cdbd2cSJim Jagielski 		else
834*b1cdbd2cSJim Jagielski 			pEditShell = new ScEditShell( pView, GetViewData() );
835*b1cdbd2cSJim Jagielski 
836*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Editing);
837*b1cdbd2cSJim Jagielski 	}
838*b1cdbd2cSJim Jagielski 	else if(bActiveEditSh)
839*b1cdbd2cSJim Jagielski 	{
840*b1cdbd2cSJim Jagielski 		SetCurSubShell(OST_Cell);
841*b1cdbd2cSJim Jagielski 	}
842*b1cdbd2cSJim Jagielski 	bActiveEditSh = bActive;
843*b1cdbd2cSJim Jagielski }
844*b1cdbd2cSJim Jagielski 
SetCurSubShell(ObjectSelectionType eOST,sal_Bool bForce)845*b1cdbd2cSJim Jagielski void ScTabViewShell::SetCurSubShell(ObjectSelectionType	eOST, sal_Bool bForce)
846*b1cdbd2cSJim Jagielski {
847*b1cdbd2cSJim Jagielski 	ScViewData* pViewData	= GetViewData();
848*b1cdbd2cSJim Jagielski 	ScDocShell* pDocSh		= pViewData->GetDocShell();
849*b1cdbd2cSJim Jagielski 
850*b1cdbd2cSJim Jagielski 	if(bDontSwitch) return;
851*b1cdbd2cSJim Jagielski 
852*b1cdbd2cSJim Jagielski 	if(!pCellShell) //Wird eh immer gebraucht.
853*b1cdbd2cSJim Jagielski 	{
854*b1cdbd2cSJim Jagielski 		pCellShell = new ScCellShell( GetViewData() );
855*b1cdbd2cSJim Jagielski 		pCellShell->SetRepeatTarget( &aTarget );
856*b1cdbd2cSJim Jagielski 	}
857*b1cdbd2cSJim Jagielski 
858*b1cdbd2cSJim Jagielski 	sal_Bool bPgBrk=pViewData->IsPagebreakMode();
859*b1cdbd2cSJim Jagielski 
860*b1cdbd2cSJim Jagielski 	if(bPgBrk && !pPageBreakShell)
861*b1cdbd2cSJim Jagielski 	{
862*b1cdbd2cSJim Jagielski 		pPageBreakShell = new ScPageBreakShell( this );
863*b1cdbd2cSJim Jagielski 		pPageBreakShell->SetRepeatTarget( &aTarget );
864*b1cdbd2cSJim Jagielski 	}
865*b1cdbd2cSJim Jagielski 
866*b1cdbd2cSJim Jagielski 
867*b1cdbd2cSJim Jagielski 	if ( eOST!=eCurOST || bForce )
868*b1cdbd2cSJim Jagielski 	{
869*b1cdbd2cSJim Jagielski         sal_Bool bCellBrush = sal_False;    // "format paint brush" allowed for cells
870*b1cdbd2cSJim Jagielski         sal_Bool bDrawBrush = sal_False;    // "format paint brush" allowed for drawing objects
871*b1cdbd2cSJim Jagielski 
872*b1cdbd2cSJim Jagielski 		if(eCurOST!=OST_NONE) RemoveSubShell();
873*b1cdbd2cSJim Jagielski 
874*b1cdbd2cSJim Jagielski 		if (pFormShell && !bFormShellAtTop)
875*b1cdbd2cSJim Jagielski 		    AddSubShell(*pFormShell);               // add below own subshells
876*b1cdbd2cSJim Jagielski 
877*b1cdbd2cSJim Jagielski 		switch(eOST)
878*b1cdbd2cSJim Jagielski 		{
879*b1cdbd2cSJim Jagielski 			case	OST_Cell:
880*b1cdbd2cSJim Jagielski 					{
881*b1cdbd2cSJim Jagielski 						AddSubShell(*pCellShell);
882*b1cdbd2cSJim Jagielski 						if(bPgBrk) AddSubShell(*pPageBreakShell);
883*b1cdbd2cSJim Jagielski                         bCellBrush = sal_True;
884*b1cdbd2cSJim Jagielski 					}
885*b1cdbd2cSJim Jagielski 					break;
886*b1cdbd2cSJim Jagielski 			case	OST_Editing:
887*b1cdbd2cSJim Jagielski 					{
888*b1cdbd2cSJim Jagielski 						AddSubShell(*pCellShell);
889*b1cdbd2cSJim Jagielski 						if(bPgBrk) AddSubShell(*pPageBreakShell);
890*b1cdbd2cSJim Jagielski 
891*b1cdbd2cSJim Jagielski 						if(pEditShell)
892*b1cdbd2cSJim Jagielski 						{
893*b1cdbd2cSJim Jagielski 							AddSubShell(*pEditShell);
894*b1cdbd2cSJim Jagielski 						}
895*b1cdbd2cSJim Jagielski 					}
896*b1cdbd2cSJim Jagielski 					break;
897*b1cdbd2cSJim Jagielski 			case	OST_DrawText:
898*b1cdbd2cSJim Jagielski 					{
899*b1cdbd2cSJim Jagielski 						if ( !pDrawTextShell )
900*b1cdbd2cSJim Jagielski 						{
901*b1cdbd2cSJim Jagielski 							pDocSh->MakeDrawLayer();
902*b1cdbd2cSJim Jagielski 							pDrawTextShell = new ScDrawTextObjectBar( GetViewData() );
903*b1cdbd2cSJim Jagielski 						}
904*b1cdbd2cSJim Jagielski 						AddSubShell(*pDrawTextShell);
905*b1cdbd2cSJim Jagielski 					}
906*b1cdbd2cSJim Jagielski 					break;
907*b1cdbd2cSJim Jagielski 			case	OST_Drawing:
908*b1cdbd2cSJim Jagielski 					{
909*b1cdbd2cSJim Jagielski                         if (svx::checkForSelectedCustomShapes(
910*b1cdbd2cSJim Jagielski                                 GetScDrawView(), true /* bOnlyExtruded */ )) {
911*b1cdbd2cSJim Jagielski                             if (pExtrusionBarShell == 0)
912*b1cdbd2cSJim Jagielski                                 pExtrusionBarShell = new svx::ExtrusionBar(this);
913*b1cdbd2cSJim Jagielski                             AddSubShell( *pExtrusionBarShell );
914*b1cdbd2cSJim Jagielski                         }
915*b1cdbd2cSJim Jagielski                         sal_uInt32 nCheckStatus = 0;
916*b1cdbd2cSJim Jagielski                         if (svx::checkForSelectedFontWork(
917*b1cdbd2cSJim Jagielski                                 GetScDrawView(), nCheckStatus )) {
918*b1cdbd2cSJim Jagielski                             if (pFontworkBarShell == 0)
919*b1cdbd2cSJim Jagielski                                 pFontworkBarShell = new svx::FontworkBar(this);
920*b1cdbd2cSJim Jagielski                             AddSubShell( *pFontworkBarShell );
921*b1cdbd2cSJim Jagielski                         }
922*b1cdbd2cSJim Jagielski 
923*b1cdbd2cSJim Jagielski 						if ( !pDrawShell )
924*b1cdbd2cSJim Jagielski 						{
925*b1cdbd2cSJim Jagielski 							pDocSh->MakeDrawLayer();
926*b1cdbd2cSJim Jagielski 							pDrawShell = new ScDrawShell( GetViewData() );
927*b1cdbd2cSJim Jagielski 							pDrawShell->SetRepeatTarget( &aTarget );
928*b1cdbd2cSJim Jagielski 						}
929*b1cdbd2cSJim Jagielski 						AddSubShell(*pDrawShell);
930*b1cdbd2cSJim Jagielski 						bDrawBrush = sal_True;
931*b1cdbd2cSJim Jagielski 					}
932*b1cdbd2cSJim Jagielski 					break;
933*b1cdbd2cSJim Jagielski 
934*b1cdbd2cSJim Jagielski 			case	OST_DrawForm:
935*b1cdbd2cSJim Jagielski 					{
936*b1cdbd2cSJim Jagielski 						if ( !pDrawFormShell )
937*b1cdbd2cSJim Jagielski 						{
938*b1cdbd2cSJim Jagielski 							pDocSh->MakeDrawLayer();
939*b1cdbd2cSJim Jagielski 							pDrawFormShell = new ScDrawFormShell( GetViewData() );
940*b1cdbd2cSJim Jagielski 							pDrawFormShell->SetRepeatTarget( &aTarget );
941*b1cdbd2cSJim Jagielski 						}
942*b1cdbd2cSJim Jagielski 						AddSubShell(*pDrawFormShell);
943*b1cdbd2cSJim Jagielski 						bDrawBrush = sal_True;
944*b1cdbd2cSJim Jagielski 					}
945*b1cdbd2cSJim Jagielski 					break;
946*b1cdbd2cSJim Jagielski 
947*b1cdbd2cSJim Jagielski 			case	OST_Chart:
948*b1cdbd2cSJim Jagielski 					{
949*b1cdbd2cSJim Jagielski 						if ( !pChartShell )
950*b1cdbd2cSJim Jagielski 						{
951*b1cdbd2cSJim Jagielski 							pDocSh->MakeDrawLayer();
952*b1cdbd2cSJim Jagielski 							pChartShell = new ScChartShell( GetViewData() );
953*b1cdbd2cSJim Jagielski 							pChartShell->SetRepeatTarget( &aTarget );
954*b1cdbd2cSJim Jagielski 						}
955*b1cdbd2cSJim Jagielski 						AddSubShell(*pChartShell);
956*b1cdbd2cSJim Jagielski 						bDrawBrush = sal_True;
957*b1cdbd2cSJim Jagielski 					}
958*b1cdbd2cSJim Jagielski 					break;
959*b1cdbd2cSJim Jagielski 
960*b1cdbd2cSJim Jagielski 			case	OST_OleObject:
961*b1cdbd2cSJim Jagielski 					{
962*b1cdbd2cSJim Jagielski 						if ( !pOleObjectShell )
963*b1cdbd2cSJim Jagielski 						{
964*b1cdbd2cSJim Jagielski 							pDocSh->MakeDrawLayer();
965*b1cdbd2cSJim Jagielski 							pOleObjectShell = new ScOleObjectShell( GetViewData() );
966*b1cdbd2cSJim Jagielski 							pOleObjectShell->SetRepeatTarget( &aTarget );
967*b1cdbd2cSJim Jagielski 						}
968*b1cdbd2cSJim Jagielski 						AddSubShell(*pOleObjectShell);
969*b1cdbd2cSJim Jagielski 						bDrawBrush = sal_True;
970*b1cdbd2cSJim Jagielski 					}
971*b1cdbd2cSJim Jagielski 					break;
972*b1cdbd2cSJim Jagielski 
973*b1cdbd2cSJim Jagielski 			case	OST_Graphic:
974*b1cdbd2cSJim Jagielski 					{
975*b1cdbd2cSJim Jagielski 						if ( !pGraphicShell)
976*b1cdbd2cSJim Jagielski 						{
977*b1cdbd2cSJim Jagielski 							pDocSh->MakeDrawLayer();
978*b1cdbd2cSJim Jagielski 							pGraphicShell = new ScGraphicShell( GetViewData() );
979*b1cdbd2cSJim Jagielski 							pGraphicShell->SetRepeatTarget( &aTarget );
980*b1cdbd2cSJim Jagielski 						}
981*b1cdbd2cSJim Jagielski 						AddSubShell(*pGraphicShell);
982*b1cdbd2cSJim Jagielski 						bDrawBrush = sal_True;
983*b1cdbd2cSJim Jagielski 					}
984*b1cdbd2cSJim Jagielski 					break;
985*b1cdbd2cSJim Jagielski 
986*b1cdbd2cSJim Jagielski 			case	OST_Media:
987*b1cdbd2cSJim Jagielski 					{
988*b1cdbd2cSJim Jagielski 						if ( !pMediaShell)
989*b1cdbd2cSJim Jagielski 						{
990*b1cdbd2cSJim Jagielski 							pDocSh->MakeDrawLayer();
991*b1cdbd2cSJim Jagielski 							pMediaShell = new ScMediaShell( GetViewData() );
992*b1cdbd2cSJim Jagielski 							pMediaShell->SetRepeatTarget( &aTarget );
993*b1cdbd2cSJim Jagielski 						}
994*b1cdbd2cSJim Jagielski 						AddSubShell(*pMediaShell);
995*b1cdbd2cSJim Jagielski 					}
996*b1cdbd2cSJim Jagielski 					break;
997*b1cdbd2cSJim Jagielski 
998*b1cdbd2cSJim Jagielski 			case	OST_Pivot:
999*b1cdbd2cSJim Jagielski 					{
1000*b1cdbd2cSJim Jagielski 						AddSubShell(*pCellShell);
1001*b1cdbd2cSJim Jagielski 						if(bPgBrk) AddSubShell(*pPageBreakShell);
1002*b1cdbd2cSJim Jagielski 
1003*b1cdbd2cSJim Jagielski 						if ( !pPivotShell )
1004*b1cdbd2cSJim Jagielski 						{
1005*b1cdbd2cSJim Jagielski 							pPivotShell = new ScPivotShell( this );
1006*b1cdbd2cSJim Jagielski 							pPivotShell->SetRepeatTarget( &aTarget );
1007*b1cdbd2cSJim Jagielski 						}
1008*b1cdbd2cSJim Jagielski 						AddSubShell(*pPivotShell);
1009*b1cdbd2cSJim Jagielski                         bCellBrush = sal_True;
1010*b1cdbd2cSJim Jagielski 					}
1011*b1cdbd2cSJim Jagielski 					break;
1012*b1cdbd2cSJim Jagielski 			case	OST_Auditing:
1013*b1cdbd2cSJim Jagielski 					{
1014*b1cdbd2cSJim Jagielski 						AddSubShell(*pCellShell);
1015*b1cdbd2cSJim Jagielski 						if(bPgBrk) AddSubShell(*pPageBreakShell);
1016*b1cdbd2cSJim Jagielski 
1017*b1cdbd2cSJim Jagielski 						if ( !pAuditingShell )
1018*b1cdbd2cSJim Jagielski 						{
1019*b1cdbd2cSJim Jagielski 							pDocSh->MakeDrawLayer();	// die Wartezeit lieber jetzt als beim Klick
1020*b1cdbd2cSJim Jagielski 
1021*b1cdbd2cSJim Jagielski 							pAuditingShell = new ScAuditingShell( GetViewData() );
1022*b1cdbd2cSJim Jagielski 							pAuditingShell->SetRepeatTarget( &aTarget );
1023*b1cdbd2cSJim Jagielski 						}
1024*b1cdbd2cSJim Jagielski 						AddSubShell(*pAuditingShell);
1025*b1cdbd2cSJim Jagielski                         bCellBrush = sal_True;
1026*b1cdbd2cSJim Jagielski 					}
1027*b1cdbd2cSJim Jagielski 					break;
1028*b1cdbd2cSJim Jagielski 			default:
1029*b1cdbd2cSJim Jagielski 					DBG_ERROR("Falsche Shell angefordert");
1030*b1cdbd2cSJim Jagielski 					break;
1031*b1cdbd2cSJim Jagielski 		}
1032*b1cdbd2cSJim Jagielski 
1033*b1cdbd2cSJim Jagielski 		if (pFormShell && bFormShellAtTop)
1034*b1cdbd2cSJim Jagielski 		    AddSubShell(*pFormShell);               // add on top of own subshells
1035*b1cdbd2cSJim Jagielski 
1036*b1cdbd2cSJim Jagielski 		eCurOST=eOST;
1037*b1cdbd2cSJim Jagielski 
1038*b1cdbd2cSJim Jagielski         // abort "format paint brush" when switching to an incompatible shell
1039*b1cdbd2cSJim Jagielski         if ( ( GetBrushDocument() && !bCellBrush ) || ( GetDrawBrushSet() && !bDrawBrush ) )
1040*b1cdbd2cSJim Jagielski             ResetBrushDocument();
1041*b1cdbd2cSJim Jagielski 	}
1042*b1cdbd2cSJim Jagielski }
1043*b1cdbd2cSJim Jagielski 
SetFormShellAtTop(sal_Bool bSet)1044*b1cdbd2cSJim Jagielski void ScTabViewShell::SetFormShellAtTop( sal_Bool bSet )
1045*b1cdbd2cSJim Jagielski {
1046*b1cdbd2cSJim Jagielski     if ( pFormShell && !bSet )
1047*b1cdbd2cSJim Jagielski         pFormShell->ForgetActiveControl();      // let the FormShell know it no longer has the focus
1048*b1cdbd2cSJim Jagielski 
1049*b1cdbd2cSJim Jagielski     if ( bFormShellAtTop != bSet )
1050*b1cdbd2cSJim Jagielski     {
1051*b1cdbd2cSJim Jagielski         bFormShellAtTop = bSet;
1052*b1cdbd2cSJim Jagielski         SetCurSubShell( GetCurObjectSelectionType(), sal_True );
1053*b1cdbd2cSJim Jagielski     }
1054*b1cdbd2cSJim Jagielski }
1055*b1cdbd2cSJim Jagielski 
IMPL_LINK(ScTabViewShell,FormControlActivated,FmFormShell *,EMPTYARG)1056*b1cdbd2cSJim Jagielski IMPL_LINK( ScTabViewShell, FormControlActivated, FmFormShell*, EMPTYARG )
1057*b1cdbd2cSJim Jagielski {
1058*b1cdbd2cSJim Jagielski     // a form control got the focus, so the form shell has to be on top
1059*b1cdbd2cSJim Jagielski     SetFormShellAtTop( sal_True );
1060*b1cdbd2cSJim Jagielski     return 0;
1061*b1cdbd2cSJim Jagielski }
1062*b1cdbd2cSJim Jagielski 
GetCurObjectSelectionType()1063*b1cdbd2cSJim Jagielski ObjectSelectionType ScTabViewShell::GetCurObjectSelectionType()
1064*b1cdbd2cSJim Jagielski {
1065*b1cdbd2cSJim Jagielski 	return eCurOST;
1066*b1cdbd2cSJim Jagielski }
1067*b1cdbd2cSJim Jagielski 
1068*b1cdbd2cSJim Jagielski //	GetMySubShell / SetMySubShell: altes Verhalten simulieren,
1069*b1cdbd2cSJim Jagielski //	dass es nur eine SubShell gibt (nur innerhalb der 5 eignenen SubShells)
1070*b1cdbd2cSJim Jagielski 
GetMySubShell() const1071*b1cdbd2cSJim Jagielski SfxShell* ScTabViewShell::GetMySubShell() const
1072*b1cdbd2cSJim Jagielski {
1073*b1cdbd2cSJim Jagielski 	//	GetSubShell() war frueher const, und GetSubShell(sal_uInt16) sollte es auch sein...
1074*b1cdbd2cSJim Jagielski 
1075*b1cdbd2cSJim Jagielski 	sal_uInt16 nPos = 0;
1076*b1cdbd2cSJim Jagielski 	SfxShell* pSub = ((ScTabViewShell*)this)->GetSubShell(nPos);
1077*b1cdbd2cSJim Jagielski 	while (pSub)
1078*b1cdbd2cSJim Jagielski 	{
1079*b1cdbd2cSJim Jagielski 		if ( pSub == pDrawShell  || pSub == pDrawTextShell || pSub == pEditShell ||
1080*b1cdbd2cSJim Jagielski 			 pSub == pPivotShell || pSub == pAuditingShell || pSub == pDrawFormShell ||
1081*b1cdbd2cSJim Jagielski 			 pSub == pCellShell	 || pSub == pOleObjectShell|| pSub == pChartShell ||
1082*b1cdbd2cSJim Jagielski 			 pSub == pGraphicShell || pSub == pMediaShell || pSub == pPageBreakShell)
1083*b1cdbd2cSJim Jagielski 			return pSub;	// gefunden
1084*b1cdbd2cSJim Jagielski 
1085*b1cdbd2cSJim Jagielski 		pSub = ((ScTabViewShell*)this)->GetSubShell(++nPos);
1086*b1cdbd2cSJim Jagielski 	}
1087*b1cdbd2cSJim Jagielski 	return NULL;		// keine von meinen dabei
1088*b1cdbd2cSJim Jagielski }
1089*b1cdbd2cSJim Jagielski 
1090*b1cdbd2cSJim Jagielski //UNUSED2008-05  void ScTabViewShell::SetMySubShell( SfxShell* pShell )
1091*b1cdbd2cSJim Jagielski //UNUSED2008-05  {
1092*b1cdbd2cSJim Jagielski //UNUSED2008-05      SfxShell* pOld = GetMySubShell();
1093*b1cdbd2cSJim Jagielski //UNUSED2008-05      if ( pOld != pShell )
1094*b1cdbd2cSJim Jagielski //UNUSED2008-05      {
1095*b1cdbd2cSJim Jagielski //UNUSED2008-05          if (pOld)
1096*b1cdbd2cSJim Jagielski //UNUSED2008-05              RemoveSubShell(pOld);   // alte SubShell entfernen
1097*b1cdbd2cSJim Jagielski //UNUSED2008-05          if (pShell)
1098*b1cdbd2cSJim Jagielski //UNUSED2008-05              AddSubShell(*pShell);   // neue setzen
1099*b1cdbd2cSJim Jagielski //UNUSED2008-05      }
1100*b1cdbd2cSJim Jagielski //UNUSED2008-05  }
1101*b1cdbd2cSJim Jagielski 
IsDrawTextShell() const1102*b1cdbd2cSJim Jagielski sal_Bool ScTabViewShell::IsDrawTextShell() const
1103*b1cdbd2cSJim Jagielski {
1104*b1cdbd2cSJim Jagielski 	return ( pDrawTextShell && ( GetMySubShell() == pDrawTextShell ) );
1105*b1cdbd2cSJim Jagielski }
1106*b1cdbd2cSJim Jagielski 
IsAuditShell() const1107*b1cdbd2cSJim Jagielski sal_Bool ScTabViewShell::IsAuditShell() const
1108*b1cdbd2cSJim Jagielski {
1109*b1cdbd2cSJim Jagielski 	return ( pAuditingShell && ( GetMySubShell() == pAuditingShell ) );
1110*b1cdbd2cSJim Jagielski }
1111*b1cdbd2cSJim Jagielski 
SetDrawTextUndo(::svl::IUndoManager * pNewUndoMgr)1112*b1cdbd2cSJim Jagielski void ScTabViewShell::SetDrawTextUndo( ::svl::IUndoManager* pNewUndoMgr )
1113*b1cdbd2cSJim Jagielski {
1114*b1cdbd2cSJim Jagielski 	// Default: Undo-Manager der DocShell
1115*b1cdbd2cSJim Jagielski 	if (!pNewUndoMgr)
1116*b1cdbd2cSJim Jagielski 		pNewUndoMgr = GetViewData()->GetDocShell()->GetUndoManager();
1117*b1cdbd2cSJim Jagielski 
1118*b1cdbd2cSJim Jagielski 	if (pDrawTextShell)
1119*b1cdbd2cSJim Jagielski     {
1120*b1cdbd2cSJim Jagielski 		pDrawTextShell->SetUndoManager(pNewUndoMgr);
1121*b1cdbd2cSJim Jagielski         ScDocShell* pDocSh = GetViewData()->GetDocShell();
1122*b1cdbd2cSJim Jagielski         if ( pNewUndoMgr == pDocSh->GetUndoManager() &&
1123*b1cdbd2cSJim Jagielski              !pDocSh->GetDocument()->IsUndoEnabled() )
1124*b1cdbd2cSJim Jagielski         {
1125*b1cdbd2cSJim Jagielski             pNewUndoMgr->SetMaxUndoActionCount( 0 );
1126*b1cdbd2cSJim Jagielski         }
1127*b1cdbd2cSJim Jagielski     }
1128*b1cdbd2cSJim Jagielski 	else
1129*b1cdbd2cSJim Jagielski 	{
1130*b1cdbd2cSJim Jagielski 		DBG_ERROR("SetDrawTextUndo ohne DrawTextShell");
1131*b1cdbd2cSJim Jagielski 	}
1132*b1cdbd2cSJim Jagielski }
1133*b1cdbd2cSJim Jagielski 
1134*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1135*b1cdbd2cSJim Jagielski 
GetActiveViewShell()1136*b1cdbd2cSJim Jagielski ScTabViewShell* ScTabViewShell::GetActiveViewShell()
1137*b1cdbd2cSJim Jagielski {
1138*b1cdbd2cSJim Jagielski 	return PTR_CAST(ScTabViewShell,Current());
1139*b1cdbd2cSJim Jagielski }
1140*b1cdbd2cSJim Jagielski 
1141*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1142*b1cdbd2cSJim Jagielski 
GetPrinter(sal_Bool bCreate)1143*b1cdbd2cSJim Jagielski SfxPrinter* __EXPORT ScTabViewShell::GetPrinter( sal_Bool bCreate )
1144*b1cdbd2cSJim Jagielski {
1145*b1cdbd2cSJim Jagielski 	//	Drucker ist immer da (wird fuer die FontListe schon beim Starten angelegt)
1146*b1cdbd2cSJim Jagielski 	return GetViewData()->GetDocShell()->GetPrinter(bCreate);
1147*b1cdbd2cSJim Jagielski }
1148*b1cdbd2cSJim Jagielski 
SetPrinter(SfxPrinter * pNewPrinter,sal_uInt16 nDiffFlags,bool)1149*b1cdbd2cSJim Jagielski sal_uInt16 __EXPORT ScTabViewShell::SetPrinter( SfxPrinter *pNewPrinter, sal_uInt16 nDiffFlags, bool )
1150*b1cdbd2cSJim Jagielski {
1151*b1cdbd2cSJim Jagielski 	return GetViewData()->GetDocShell()->SetPrinter( pNewPrinter, nDiffFlags );
1152*b1cdbd2cSJim Jagielski }
1153*b1cdbd2cSJim Jagielski 
CreatePrintOptionsPage(Window * pParent,const SfxItemSet & rOptions)1154*b1cdbd2cSJim Jagielski SfxTabPage* ScTabViewShell::CreatePrintOptionsPage( Window *pParent, const SfxItemSet &rOptions )
1155*b1cdbd2cSJim Jagielski {
1156*b1cdbd2cSJim Jagielski 	ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1157*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
1158*b1cdbd2cSJim Jagielski 	//CHINA001 return ScTpPrintOptions::Create( pParent, rOptions );
1159*b1cdbd2cSJim Jagielski 	::CreateTabPage ScTpPrintOptionsCreate = 	pFact->GetTabPageCreatorFunc( RID_SCPAGE_PRINT );
1160*b1cdbd2cSJim Jagielski 	if ( ScTpPrintOptionsCreate )
1161*b1cdbd2cSJim Jagielski 		return  (*ScTpPrintOptionsCreate)( pParent, rOptions);
1162*b1cdbd2cSJim Jagielski 	return 0;
1163*b1cdbd2cSJim Jagielski }
1164*b1cdbd2cSJim Jagielski 
StopEditShell()1165*b1cdbd2cSJim Jagielski void ScTabViewShell::StopEditShell()
1166*b1cdbd2cSJim Jagielski {
1167*b1cdbd2cSJim Jagielski 	if ( pEditShell != NULL && !bDontSwitch )
1168*b1cdbd2cSJim Jagielski 		SetEditShell(NULL, sal_False );
1169*b1cdbd2cSJim Jagielski }
1170*b1cdbd2cSJim Jagielski 
1171*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1172*b1cdbd2cSJim Jagielski 
1173*b1cdbd2cSJim Jagielski // close handler to ensure function of dialog:
1174*b1cdbd2cSJim Jagielski 
IMPL_LINK(ScTabViewShell,SimpleRefClose,String *,EMPTYARG)1175*b1cdbd2cSJim Jagielski IMPL_LINK( ScTabViewShell, SimpleRefClose, String*, EMPTYARG )
1176*b1cdbd2cSJim Jagielski {
1177*b1cdbd2cSJim Jagielski     SfxInPlaceClient* pClient = GetIPClient();
1178*b1cdbd2cSJim Jagielski     if ( pClient && pClient->IsObjectInPlaceActive() )
1179*b1cdbd2cSJim Jagielski     {
1180*b1cdbd2cSJim Jagielski         // If range selection was started with an active embedded object,
1181*b1cdbd2cSJim Jagielski         // switch back to original sheet (while the dialog is still open).
1182*b1cdbd2cSJim Jagielski 
1183*b1cdbd2cSJim Jagielski         SetTabNo( GetViewData()->GetRefTabNo() );
1184*b1cdbd2cSJim Jagielski     }
1185*b1cdbd2cSJim Jagielski 
1186*b1cdbd2cSJim Jagielski 	ScSimpleRefDlgWrapper::SetAutoReOpen( sal_True );
1187*b1cdbd2cSJim Jagielski 	return 0;
1188*b1cdbd2cSJim Jagielski }
1189*b1cdbd2cSJim Jagielski 
1190*b1cdbd2cSJim Jagielski // handlers to call UNO listeners:
1191*b1cdbd2cSJim Jagielski 
lcl_GetViewObj(ScTabViewShell & rShell)1192*b1cdbd2cSJim Jagielski ScTabViewObj* lcl_GetViewObj( ScTabViewShell& rShell )
1193*b1cdbd2cSJim Jagielski {
1194*b1cdbd2cSJim Jagielski 	ScTabViewObj* pRet = NULL;
1195*b1cdbd2cSJim Jagielski 	SfxViewFrame* pViewFrame = rShell.GetViewFrame();
1196*b1cdbd2cSJim Jagielski 	if (pViewFrame)
1197*b1cdbd2cSJim Jagielski 	{
1198*b1cdbd2cSJim Jagielski 		SfxFrame& rFrame = pViewFrame->GetFrame();
1199*b1cdbd2cSJim Jagielski 		uno::Reference<frame::XController> xController = rFrame.GetController();
1200*b1cdbd2cSJim Jagielski 		if (xController.is())
1201*b1cdbd2cSJim Jagielski 			pRet = ScTabViewObj::getImplementation( xController );
1202*b1cdbd2cSJim Jagielski 	}
1203*b1cdbd2cSJim Jagielski 	return pRet;
1204*b1cdbd2cSJim Jagielski }
1205*b1cdbd2cSJim Jagielski 
IMPL_LINK(ScTabViewShell,SimpleRefDone,String *,pResult)1206*b1cdbd2cSJim Jagielski IMPL_LINK( ScTabViewShell, SimpleRefDone, String*, pResult )
1207*b1cdbd2cSJim Jagielski {
1208*b1cdbd2cSJim Jagielski 	ScTabViewObj* pImpObj = lcl_GetViewObj( *this );
1209*b1cdbd2cSJim Jagielski 	if ( pImpObj && pResult )
1210*b1cdbd2cSJim Jagielski 		pImpObj->RangeSelDone( *pResult );
1211*b1cdbd2cSJim Jagielski 	return 0;
1212*b1cdbd2cSJim Jagielski }
1213*b1cdbd2cSJim Jagielski 
IMPL_LINK(ScTabViewShell,SimpleRefAborted,String *,pResult)1214*b1cdbd2cSJim Jagielski IMPL_LINK( ScTabViewShell, SimpleRefAborted, String*, pResult )
1215*b1cdbd2cSJim Jagielski {
1216*b1cdbd2cSJim Jagielski 	ScTabViewObj* pImpObj = lcl_GetViewObj( *this );
1217*b1cdbd2cSJim Jagielski 	if ( pImpObj && pResult )
1218*b1cdbd2cSJim Jagielski 		pImpObj->RangeSelAborted( *pResult );
1219*b1cdbd2cSJim Jagielski 	return 0;
1220*b1cdbd2cSJim Jagielski }
1221*b1cdbd2cSJim Jagielski 
IMPL_LINK(ScTabViewShell,SimpleRefChange,String *,pResult)1222*b1cdbd2cSJim Jagielski IMPL_LINK( ScTabViewShell, SimpleRefChange, String*, pResult )
1223*b1cdbd2cSJim Jagielski {
1224*b1cdbd2cSJim Jagielski 	ScTabViewObj* pImpObj = lcl_GetViewObj( *this );
1225*b1cdbd2cSJim Jagielski 	if ( pImpObj && pResult )
1226*b1cdbd2cSJim Jagielski 		pImpObj->RangeSelChanged( *pResult );
1227*b1cdbd2cSJim Jagielski 	return 0;
1228*b1cdbd2cSJim Jagielski }
1229*b1cdbd2cSJim Jagielski 
StartSimpleRefDialog(const String & rTitle,const String & rInitVal,sal_Bool bCloseOnButtonUp,sal_Bool bSingleCell,sal_Bool bMultiSelection)1230*b1cdbd2cSJim Jagielski void ScTabViewShell::StartSimpleRefDialog(
1231*b1cdbd2cSJim Jagielski             const String& rTitle, const String& rInitVal,
1232*b1cdbd2cSJim Jagielski             sal_Bool bCloseOnButtonUp, sal_Bool bSingleCell, sal_Bool bMultiSelection )
1233*b1cdbd2cSJim Jagielski {
1234*b1cdbd2cSJim Jagielski 	SfxViewFrame* pViewFrm = GetViewFrame();
1235*b1cdbd2cSJim Jagielski 
1236*b1cdbd2cSJim Jagielski     if ( GetActiveViewShell() != this )
1237*b1cdbd2cSJim Jagielski     {
1238*b1cdbd2cSJim Jagielski         // #i18833# / #i34499# The API method can be called for a view that's not active.
1239*b1cdbd2cSJim Jagielski         // Then the view has to be activated first, the same way as in Execute for SID_CURRENTDOC.
1240*b1cdbd2cSJim Jagielski         // Can't use GrabFocus here, because it needs to take effect immediately.
1241*b1cdbd2cSJim Jagielski 
1242*b1cdbd2cSJim Jagielski 		pViewFrm->GetFrame().Appear();
1243*b1cdbd2cSJim Jagielski     }
1244*b1cdbd2cSJim Jagielski 
1245*b1cdbd2cSJim Jagielski 	sal_uInt16 nId = ScSimpleRefDlgWrapper::GetChildWindowId();
1246*b1cdbd2cSJim Jagielski 
1247*b1cdbd2cSJim Jagielski 	SC_MOD()->SetRefDialog( nId, sal_True, pViewFrm );
1248*b1cdbd2cSJim Jagielski 
1249*b1cdbd2cSJim Jagielski 	ScSimpleRefDlgWrapper* pWnd = (ScSimpleRefDlgWrapper*)pViewFrm->GetChildWindow( nId );
1250*b1cdbd2cSJim Jagielski 	if (pWnd)
1251*b1cdbd2cSJim Jagielski 	{
1252*b1cdbd2cSJim Jagielski 		pWnd->SetCloseHdl( LINK( this, ScTabViewShell, SimpleRefClose ) );
1253*b1cdbd2cSJim Jagielski 		pWnd->SetUnoLinks( LINK( this, ScTabViewShell, SimpleRefDone ),
1254*b1cdbd2cSJim Jagielski 						   LINK( this, ScTabViewShell, SimpleRefAborted ),
1255*b1cdbd2cSJim Jagielski 						   LINK( this, ScTabViewShell, SimpleRefChange ) );
1256*b1cdbd2cSJim Jagielski 		pWnd->SetRefString( rInitVal );
1257*b1cdbd2cSJim Jagielski         pWnd->SetFlags( bCloseOnButtonUp, bSingleCell, bMultiSelection );
1258*b1cdbd2cSJim Jagielski 		pWnd->SetAutoReOpen( sal_False );
1259*b1cdbd2cSJim Jagielski 		Window* pWin = pWnd->GetWindow();
1260*b1cdbd2cSJim Jagielski 		pWin->SetText( rTitle );
1261*b1cdbd2cSJim Jagielski 		pWnd->StartRefInput();
1262*b1cdbd2cSJim Jagielski 	}
1263*b1cdbd2cSJim Jagielski }
1264*b1cdbd2cSJim Jagielski 
StopSimpleRefDialog()1265*b1cdbd2cSJim Jagielski void ScTabViewShell::StopSimpleRefDialog()
1266*b1cdbd2cSJim Jagielski {
1267*b1cdbd2cSJim Jagielski 	SfxViewFrame* pViewFrm = GetViewFrame();
1268*b1cdbd2cSJim Jagielski 	sal_uInt16 nId = ScSimpleRefDlgWrapper::GetChildWindowId();
1269*b1cdbd2cSJim Jagielski 
1270*b1cdbd2cSJim Jagielski 	ScSimpleRefDlgWrapper* pWnd = (ScSimpleRefDlgWrapper*)pViewFrm->GetChildWindow( nId );
1271*b1cdbd2cSJim Jagielski 	if (pWnd)
1272*b1cdbd2cSJim Jagielski 	{
1273*b1cdbd2cSJim Jagielski 		Window* pWin = pWnd->GetWindow();
1274*b1cdbd2cSJim Jagielski 		if (pWin && pWin->IsSystemWindow())
1275*b1cdbd2cSJim Jagielski 			((SystemWindow*)pWin)->Close();		// calls abort handler
1276*b1cdbd2cSJim Jagielski 	}
1277*b1cdbd2cSJim Jagielski }
1278*b1cdbd2cSJim Jagielski 
1279*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1280*b1cdbd2cSJim Jagielski 
TabKeyInput(const KeyEvent & rKEvt)1281*b1cdbd2cSJim Jagielski sal_Bool ScTabViewShell::TabKeyInput(const KeyEvent& rKEvt)
1282*b1cdbd2cSJim Jagielski {
1283*b1cdbd2cSJim Jagielski 	ScModule* pScMod = SC_MOD();
1284*b1cdbd2cSJim Jagielski 
1285*b1cdbd2cSJim Jagielski 	SfxViewFrame* pThisFrame = GetViewFrame();
1286*b1cdbd2cSJim Jagielski 	if ( pThisFrame->GetChildWindow( SID_OPENDLG_FUNCTION ) )
1287*b1cdbd2cSJim Jagielski 		return sal_False;
1288*b1cdbd2cSJim Jagielski 
1289*b1cdbd2cSJim Jagielski 	KeyCode aCode   = rKEvt.GetKeyCode();
1290*b1cdbd2cSJim Jagielski 	sal_Bool bShift     = aCode.IsShift();
1291*b1cdbd2cSJim Jagielski 	sal_Bool bControl   = aCode.IsMod1();
1292*b1cdbd2cSJim Jagielski 	sal_Bool bAlt	    = aCode.IsMod2();
1293*b1cdbd2cSJim Jagielski 	sal_uInt16 nCode	= aCode.GetCode();
1294*b1cdbd2cSJim Jagielski 	sal_Bool bUsed	    = sal_False;
1295*b1cdbd2cSJim Jagielski 	sal_Bool bInPlace   = pScMod->IsEditMode(); 	// Editengine bekommt alles
1296*b1cdbd2cSJim Jagielski 	sal_Bool bAnyEdit   = pScMod->IsInputMode();	// nur Zeichen & Backspace
1297*b1cdbd2cSJim Jagielski 	sal_Bool bDraw		= IsDrawTextEdit();
1298*b1cdbd2cSJim Jagielski 
1299*b1cdbd2cSJim Jagielski 	HideNoteMarker();	// Notiz-Anzeige
1300*b1cdbd2cSJim Jagielski 
1301*b1cdbd2cSJim Jagielski     // don't do extra HideCursor/ShowCursor calls if EnterHandler will switch to a different sheet
1302*b1cdbd2cSJim Jagielski     sal_Bool bOnRefSheet = ( GetViewData()->GetRefTabNo() == GetViewData()->GetTabNo() );
1303*b1cdbd2cSJim Jagielski     sal_Bool bHideCursor = ( ( nCode == KEY_RETURN && bInPlace ) || nCode == KEY_TAB ) && bOnRefSheet;
1304*b1cdbd2cSJim Jagielski 
1305*b1cdbd2cSJim Jagielski 	if (bHideCursor)
1306*b1cdbd2cSJim Jagielski 		HideAllCursors();
1307*b1cdbd2cSJim Jagielski 
1308*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = GetViewData()->GetDocument();
1309*b1cdbd2cSJim Jagielski 	if ( pDoc )
1310*b1cdbd2cSJim Jagielski 		pDoc->KeyInput( rKEvt );	// TimerDelays etc.
1311*b1cdbd2cSJim Jagielski 
1312*b1cdbd2cSJim Jagielski 	if( bInPlace )
1313*b1cdbd2cSJim Jagielski 	{
1314*b1cdbd2cSJim Jagielski 		bUsed = pScMod->InputKeyEvent( rKEvt );			// Eingabe
1315*b1cdbd2cSJim Jagielski 		if( !bUsed )
1316*b1cdbd2cSJim Jagielski             bUsed = sal::static_int_cast<sal_Bool>(SfxViewShell::KeyInput( rKEvt ));    // accelerators
1317*b1cdbd2cSJim Jagielski 	}
1318*b1cdbd2cSJim Jagielski 	else if( bAnyEdit )
1319*b1cdbd2cSJim Jagielski 	{
1320*b1cdbd2cSJim Jagielski 		sal_Bool bIsType = sal_False;
1321*b1cdbd2cSJim Jagielski 		sal_uInt16 nModi = aCode.GetModifier();
1322*b1cdbd2cSJim Jagielski 		sal_uInt16 nGroup = aCode.GetGroup();
1323*b1cdbd2cSJim Jagielski 
1324*b1cdbd2cSJim Jagielski 		if ( nGroup == KEYGROUP_NUM || nGroup == KEYGROUP_ALPHA || nGroup == 0 )
1325*b1cdbd2cSJim Jagielski 			if ( !bControl && !bAlt )
1326*b1cdbd2cSJim Jagielski 				bIsType = sal_True;
1327*b1cdbd2cSJim Jagielski 
1328*b1cdbd2cSJim Jagielski 		if ( nGroup == KEYGROUP_MISC )
1329*b1cdbd2cSJim Jagielski 			switch ( nCode )
1330*b1cdbd2cSJim Jagielski 			{
1331*b1cdbd2cSJim Jagielski 				case KEY_RETURN:
1332*b1cdbd2cSJim Jagielski 					bIsType = bControl && !bAlt;		// Control, Shift-Control-Return
1333*b1cdbd2cSJim Jagielski 					if ( !bIsType && nModi == 0 )
1334*b1cdbd2cSJim Jagielski 					{
1335*b1cdbd2cSJim Jagielski 						//	Will der InputHandler auch ein einfaches Return?
1336*b1cdbd2cSJim Jagielski 
1337*b1cdbd2cSJim Jagielski 						ScInputHandler* pHdl = pScMod->GetInputHdl(this);
1338*b1cdbd2cSJim Jagielski 						bIsType = pHdl && pHdl->TakesReturn();
1339*b1cdbd2cSJim Jagielski 					}
1340*b1cdbd2cSJim Jagielski 					break;
1341*b1cdbd2cSJim Jagielski 				case KEY_SPACE:
1342*b1cdbd2cSJim Jagielski 					bIsType = !bControl && !bAlt;		// ohne Modifier oder Shift-Space
1343*b1cdbd2cSJim Jagielski 					break;
1344*b1cdbd2cSJim Jagielski 				case KEY_ESCAPE:
1345*b1cdbd2cSJim Jagielski 				case KEY_BACKSPACE:
1346*b1cdbd2cSJim Jagielski 					bIsType = (nModi == 0);	// nur ohne Modifier
1347*b1cdbd2cSJim Jagielski 					break;
1348*b1cdbd2cSJim Jagielski 				default:
1349*b1cdbd2cSJim Jagielski 					bIsType = sal_True;
1350*b1cdbd2cSJim Jagielski 			}
1351*b1cdbd2cSJim Jagielski 
1352*b1cdbd2cSJim Jagielski 		if( bIsType )
1353*b1cdbd2cSJim Jagielski 			bUsed = pScMod->InputKeyEvent( rKEvt );		// Eingabe
1354*b1cdbd2cSJim Jagielski 
1355*b1cdbd2cSJim Jagielski 		if( !bUsed )
1356*b1cdbd2cSJim Jagielski             bUsed = sal::static_int_cast<sal_Bool>(SfxViewShell::KeyInput( rKEvt ));    // accelerators
1357*b1cdbd2cSJim Jagielski 
1358*b1cdbd2cSJim Jagielski 		if ( !bUsed && !bIsType && nCode != KEY_RETURN )	// Eingabe nochmal hinterher
1359*b1cdbd2cSJim Jagielski 			bUsed = pScMod->InputKeyEvent( rKEvt );
1360*b1cdbd2cSJim Jagielski 	}
1361*b1cdbd2cSJim Jagielski 	else
1362*b1cdbd2cSJim Jagielski 	{
1363*b1cdbd2cSJim Jagielski 		//	#51889# Spezialfall: Copy/Cut bei Mehrfachselektion -> Fehlermeldung
1364*b1cdbd2cSJim Jagielski 		//	(Slot ist disabled, SfxViewShell::KeyInput wuerde also kommentarlos verschluckt)
1365*b1cdbd2cSJim Jagielski 		KeyFuncType eFunc = aCode.GetFunction();
1366*b1cdbd2cSJim Jagielski 		if ( eFunc == KEYFUNC_CUT )
1367*b1cdbd2cSJim Jagielski 		{
1368*b1cdbd2cSJim Jagielski 			ScRange aDummy;
1369*b1cdbd2cSJim Jagielski 			ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy );
1370*b1cdbd2cSJim Jagielski 			if ( eMarkType != SC_MARK_SIMPLE &&
1371*b1cdbd2cSJim Jagielski                     !(eFunc == KEYFUNC_COPY && eMarkType == SC_MARK_SIMPLE_FILTERED) )
1372*b1cdbd2cSJim Jagielski 			{
1373*b1cdbd2cSJim Jagielski 				ErrorMessage(STR_NOMULTISELECT);
1374*b1cdbd2cSJim Jagielski 				bUsed = sal_True;
1375*b1cdbd2cSJim Jagielski 			}
1376*b1cdbd2cSJim Jagielski 		}
1377*b1cdbd2cSJim Jagielski 		if (!bUsed)
1378*b1cdbd2cSJim Jagielski             bUsed = sal::static_int_cast<sal_Bool>(SfxViewShell::KeyInput( rKEvt ));    // accelerators
1379*b1cdbd2cSJim Jagielski 
1380*b1cdbd2cSJim Jagielski 		//	#74696# during inplace editing, some slots are handled by the
1381*b1cdbd2cSJim Jagielski 		//	container app and are executed during Window::KeyInput.
1382*b1cdbd2cSJim Jagielski 		//	-> don't pass keys to input handler that would be used there
1383*b1cdbd2cSJim Jagielski 		//	but should call slots instead.
1384*b1cdbd2cSJim Jagielski         sal_Bool bParent = ( GetViewFrame()->GetFrame().IsInPlace() && eFunc != KEYFUNC_DONTKNOW );
1385*b1cdbd2cSJim Jagielski 
1386*b1cdbd2cSJim Jagielski 		if( !bUsed && !bDraw && nCode != KEY_RETURN && !bParent )
1387*b1cdbd2cSJim Jagielski 			bUsed = pScMod->InputKeyEvent( rKEvt, sal_True );		// Eingabe
1388*b1cdbd2cSJim Jagielski 	}
1389*b1cdbd2cSJim Jagielski 
1390*b1cdbd2cSJim Jagielski 	if (!bInPlace && !bUsed && !bDraw)
1391*b1cdbd2cSJim Jagielski 	{
1392*b1cdbd2cSJim Jagielski 		switch (nCode)
1393*b1cdbd2cSJim Jagielski 		{
1394*b1cdbd2cSJim Jagielski 			case KEY_RETURN:
1395*b1cdbd2cSJim Jagielski 				{
1396*b1cdbd2cSJim Jagielski 					sal_Bool bNormal = !bControl && !bAlt;
1397*b1cdbd2cSJim Jagielski 					if ( !bAnyEdit && bNormal )
1398*b1cdbd2cSJim Jagielski 					{
1399*b1cdbd2cSJim Jagielski 						//	je nach Optionen mit Enter in den Edit-Modus schalten
1400*b1cdbd2cSJim Jagielski 
1401*b1cdbd2cSJim Jagielski 						const ScInputOptions& rOpt = pScMod->GetInputOptions();
1402*b1cdbd2cSJim Jagielski 						if ( rOpt.GetEnterEdit() )
1403*b1cdbd2cSJim Jagielski 						{
1404*b1cdbd2cSJim Jagielski 							pScMod->SetInputMode( SC_INPUT_TABLE );
1405*b1cdbd2cSJim Jagielski 							bUsed = sal_True;
1406*b1cdbd2cSJim Jagielski 						}
1407*b1cdbd2cSJim Jagielski 					}
1408*b1cdbd2cSJim Jagielski 
1409*b1cdbd2cSJim Jagielski 					sal_Bool bEditReturn = bControl && !bShift; 		// An Edit-Engine weiter
1410*b1cdbd2cSJim Jagielski 					if ( !bUsed && !bEditReturn )
1411*b1cdbd2cSJim Jagielski 					{
1412*b1cdbd2cSJim Jagielski 					    if ( bOnRefSheet )
1413*b1cdbd2cSJim Jagielski     						HideAllCursors();
1414*b1cdbd2cSJim Jagielski 
1415*b1cdbd2cSJim Jagielski 						sal_uInt8 nMode = SC_ENTER_NORMAL;
1416*b1cdbd2cSJim Jagielski 						if ( bShift && bControl )
1417*b1cdbd2cSJim Jagielski 							nMode = SC_ENTER_MATRIX;
1418*b1cdbd2cSJim Jagielski 						else if ( bAlt )
1419*b1cdbd2cSJim Jagielski 							nMode = SC_ENTER_BLOCK;
1420*b1cdbd2cSJim Jagielski 						pScMod->InputEnterHandler(nMode);
1421*b1cdbd2cSJim Jagielski 
1422*b1cdbd2cSJim Jagielski 						if (nMode == SC_ENTER_NORMAL)
1423*b1cdbd2cSJim Jagielski 						{
1424*b1cdbd2cSJim Jagielski 							if( bShift )
1425*b1cdbd2cSJim Jagielski 								GetViewData()->GetDispatcher().Execute( SID_CURSORENTERUP,
1426*b1cdbd2cSJim Jagielski 											SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD );
1427*b1cdbd2cSJim Jagielski 							else
1428*b1cdbd2cSJim Jagielski 								GetViewData()->GetDispatcher().Execute( SID_CURSORENTERDOWN,
1429*b1cdbd2cSJim Jagielski 											SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD );
1430*b1cdbd2cSJim Jagielski 						}
1431*b1cdbd2cSJim Jagielski 						else
1432*b1cdbd2cSJim Jagielski 							UpdateInputHandler(sal_True);
1433*b1cdbd2cSJim Jagielski 
1434*b1cdbd2cSJim Jagielski 					    if ( bOnRefSheet )
1435*b1cdbd2cSJim Jagielski     						ShowAllCursors();
1436*b1cdbd2cSJim Jagielski 
1437*b1cdbd2cSJim Jagielski 						//	hier kein UpdateInputHandler, weil bei Referenzeingabe auf ein
1438*b1cdbd2cSJim Jagielski 						//	anderes Dokument diese ViewShell nicht die ist, auf der eingegeben
1439*b1cdbd2cSJim Jagielski 						//	wird!
1440*b1cdbd2cSJim Jagielski 
1441*b1cdbd2cSJim Jagielski 						bUsed = sal_True;
1442*b1cdbd2cSJim Jagielski 					}
1443*b1cdbd2cSJim Jagielski 				}
1444*b1cdbd2cSJim Jagielski 				break;
1445*b1cdbd2cSJim Jagielski 		}
1446*b1cdbd2cSJim Jagielski 	}
1447*b1cdbd2cSJim Jagielski 
1448*b1cdbd2cSJim Jagielski 	//	Alt-Cursortasten hart codiert, weil Alt nicht konfigurierbar ist
1449*b1cdbd2cSJim Jagielski 
1450*b1cdbd2cSJim Jagielski 	if ( !bUsed && bAlt && !bControl )
1451*b1cdbd2cSJim Jagielski 	{
1452*b1cdbd2cSJim Jagielski 		sal_uInt16 nSlotId = 0;
1453*b1cdbd2cSJim Jagielski 		switch (nCode)
1454*b1cdbd2cSJim Jagielski 		{
1455*b1cdbd2cSJim Jagielski 			case KEY_UP:
1456*b1cdbd2cSJim Jagielski 				ModifyCellSize( DIR_TOP, bShift );
1457*b1cdbd2cSJim Jagielski 				bUsed = sal_True;
1458*b1cdbd2cSJim Jagielski 				break;
1459*b1cdbd2cSJim Jagielski 			case KEY_DOWN:
1460*b1cdbd2cSJim Jagielski 				ModifyCellSize( DIR_BOTTOM, bShift );
1461*b1cdbd2cSJim Jagielski 				bUsed = sal_True;
1462*b1cdbd2cSJim Jagielski 				break;
1463*b1cdbd2cSJim Jagielski 			case KEY_LEFT:
1464*b1cdbd2cSJim Jagielski 				ModifyCellSize( DIR_LEFT, bShift );
1465*b1cdbd2cSJim Jagielski 				bUsed = sal_True;
1466*b1cdbd2cSJim Jagielski 				break;
1467*b1cdbd2cSJim Jagielski 			case KEY_RIGHT:
1468*b1cdbd2cSJim Jagielski 				ModifyCellSize( DIR_RIGHT, bShift );
1469*b1cdbd2cSJim Jagielski 				bUsed = sal_True;
1470*b1cdbd2cSJim Jagielski 				break;
1471*b1cdbd2cSJim Jagielski 			case KEY_PAGEUP:
1472*b1cdbd2cSJim Jagielski 				nSlotId = bShift ? SID_CURSORPAGELEFT_SEL : SID_CURSORPAGELEFT_;
1473*b1cdbd2cSJim Jagielski 				break;
1474*b1cdbd2cSJim Jagielski 			case KEY_PAGEDOWN:
1475*b1cdbd2cSJim Jagielski 				nSlotId = bShift ? SID_CURSORPAGERIGHT_SEL : SID_CURSORPAGERIGHT_;
1476*b1cdbd2cSJim Jagielski 				break;
1477*b1cdbd2cSJim Jagielski 		}
1478*b1cdbd2cSJim Jagielski 		if ( nSlotId )
1479*b1cdbd2cSJim Jagielski 		{
1480*b1cdbd2cSJim Jagielski 			GetViewData()->GetDispatcher().Execute( nSlotId, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD );
1481*b1cdbd2cSJim Jagielski 			bUsed = sal_True;
1482*b1cdbd2cSJim Jagielski 		}
1483*b1cdbd2cSJim Jagielski 	}
1484*b1cdbd2cSJim Jagielski 
1485*b1cdbd2cSJim Jagielski 	// use Ctrl+Alt+Shift+arrow keys to move the cursor in cells
1486*b1cdbd2cSJim Jagielski 	// while keeping the last selection
1487*b1cdbd2cSJim Jagielski 	if ( !bUsed && bAlt && bControl && bShift)
1488*b1cdbd2cSJim Jagielski 	{
1489*b1cdbd2cSJim Jagielski 		sal_uInt16 nSlotId = 0;
1490*b1cdbd2cSJim Jagielski 		switch (nCode)
1491*b1cdbd2cSJim Jagielski 		{
1492*b1cdbd2cSJim Jagielski 			case KEY_UP:
1493*b1cdbd2cSJim Jagielski 				nSlotId = SID_CURSORUP;
1494*b1cdbd2cSJim Jagielski 				break;
1495*b1cdbd2cSJim Jagielski 			case KEY_DOWN:
1496*b1cdbd2cSJim Jagielski 				nSlotId = SID_CURSORDOWN;
1497*b1cdbd2cSJim Jagielski 				break;
1498*b1cdbd2cSJim Jagielski 			case KEY_LEFT:
1499*b1cdbd2cSJim Jagielski 				nSlotId = SID_CURSORLEFT;
1500*b1cdbd2cSJim Jagielski 				break;
1501*b1cdbd2cSJim Jagielski 			case KEY_RIGHT:
1502*b1cdbd2cSJim Jagielski 				nSlotId = SID_CURSORRIGHT;
1503*b1cdbd2cSJim Jagielski 				break;
1504*b1cdbd2cSJim Jagielski 			case KEY_PAGEUP:
1505*b1cdbd2cSJim Jagielski 				nSlotId = SID_CURSORPAGEUP;
1506*b1cdbd2cSJim Jagielski 				break;
1507*b1cdbd2cSJim Jagielski 			case KEY_PAGEDOWN:
1508*b1cdbd2cSJim Jagielski 				nSlotId = SID_CURSORPAGEDOWN;
1509*b1cdbd2cSJim Jagielski 				break;
1510*b1cdbd2cSJim Jagielski 			case KEY_HOME:
1511*b1cdbd2cSJim Jagielski 				nSlotId = SID_CURSORHOME;
1512*b1cdbd2cSJim Jagielski 				break;
1513*b1cdbd2cSJim Jagielski 			case KEY_END:
1514*b1cdbd2cSJim Jagielski 				nSlotId = SID_CURSOREND;
1515*b1cdbd2cSJim Jagielski 				break;
1516*b1cdbd2cSJim Jagielski 			default:
1517*b1cdbd2cSJim Jagielski 				nSlotId = 0;
1518*b1cdbd2cSJim Jagielski 				break;
1519*b1cdbd2cSJim Jagielski 		}
1520*b1cdbd2cSJim Jagielski 		if ( nSlotId )
1521*b1cdbd2cSJim Jagielski 		{
1522*b1cdbd2cSJim Jagielski 			sal_uInt16 nMode = GetLockedModifiers();
1523*b1cdbd2cSJim Jagielski 			LockModifiers(KEY_MOD1);
1524*b1cdbd2cSJim Jagielski 			GetViewData()->GetDispatcher().Execute( nSlotId, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD );
1525*b1cdbd2cSJim Jagielski 			LockModifiers(nMode);
1526*b1cdbd2cSJim Jagielski 			bUsed = sal_True;
1527*b1cdbd2cSJim Jagielski 		}
1528*b1cdbd2cSJim Jagielski 	}
1529*b1cdbd2cSJim Jagielski 	if (bHideCursor)
1530*b1cdbd2cSJim Jagielski 		ShowAllCursors();
1531*b1cdbd2cSJim Jagielski 
1532*b1cdbd2cSJim Jagielski 	return bUsed;
1533*b1cdbd2cSJim Jagielski }
1534*b1cdbd2cSJim Jagielski 
SfxKeyInput(const KeyEvent & rKeyEvent)1535*b1cdbd2cSJim Jagielski sal_Bool ScTabViewShell::SfxKeyInput(const KeyEvent& rKeyEvent)
1536*b1cdbd2cSJim Jagielski {
1537*b1cdbd2cSJim Jagielski     return sal::static_int_cast<sal_Bool>(SfxViewShell::KeyInput( rKeyEvent ));
1538*b1cdbd2cSJim Jagielski }
1539*b1cdbd2cSJim Jagielski 
KeyInput(const KeyEvent & rKeyEvent)1540*b1cdbd2cSJim Jagielski FASTBOOL __EXPORT ScTabViewShell::KeyInput( const KeyEvent &rKeyEvent )
1541*b1cdbd2cSJim Jagielski {
1542*b1cdbd2cSJim Jagielski //	return SfxViewShell::KeyInput( rKeyEvent );
1543*b1cdbd2cSJim Jagielski 	return TabKeyInput( rKeyEvent );
1544*b1cdbd2cSJim Jagielski }
1545*b1cdbd2cSJim Jagielski 
1546*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1547*b1cdbd2cSJim Jagielski 
1548*b1cdbd2cSJim Jagielski #define __INIT_ScTabViewShell \
1549*b1cdbd2cSJim Jagielski 	eCurOST(OST_NONE),			\
1550*b1cdbd2cSJim Jagielski 	nDrawSfxId(0),				\
1551*b1cdbd2cSJim Jagielski 	nCtrlSfxId(USHRT_MAX),		\
1552*b1cdbd2cSJim Jagielski 	nFormSfxId(USHRT_MAX),		\
1553*b1cdbd2cSJim Jagielski 	pDrawShell(NULL),			\
1554*b1cdbd2cSJim Jagielski 	pDrawTextShell(NULL),		\
1555*b1cdbd2cSJim Jagielski 	pEditShell(NULL),			\
1556*b1cdbd2cSJim Jagielski 	pPivotShell(NULL),			\
1557*b1cdbd2cSJim Jagielski 	pAuditingShell(NULL),		\
1558*b1cdbd2cSJim Jagielski 	pDrawFormShell(NULL),		\
1559*b1cdbd2cSJim Jagielski 	pCellShell(NULL),			\
1560*b1cdbd2cSJim Jagielski 	pOleObjectShell(NULL),		\
1561*b1cdbd2cSJim Jagielski 	pChartShell(NULL),			\
1562*b1cdbd2cSJim Jagielski 	pGraphicShell(NULL),		\
1563*b1cdbd2cSJim Jagielski 	pMediaShell(NULL),			\
1564*b1cdbd2cSJim Jagielski 	pPageBreakShell(NULL),		\
1565*b1cdbd2cSJim Jagielski 	pExtrusionBarShell(NULL),	\
1566*b1cdbd2cSJim Jagielski 	pFontworkBarShell(NULL),	\
1567*b1cdbd2cSJim Jagielski 	pFormShell(NULL),			\
1568*b1cdbd2cSJim Jagielski 	pInputHandler(NULL),		\
1569*b1cdbd2cSJim Jagielski 	pCurFrameLine(NULL),		\
1570*b1cdbd2cSJim Jagielski 	aTarget( this ),			\
1571*b1cdbd2cSJim Jagielski 	pDialogDPObject(NULL),		\
1572*b1cdbd2cSJim Jagielski     pNavSettings(NULL),         \
1573*b1cdbd2cSJim Jagielski 	bActiveDrawSh(sal_False),		\
1574*b1cdbd2cSJim Jagielski 	bActiveDrawTextSh(sal_False),	\
1575*b1cdbd2cSJim Jagielski 	bActivePivotSh(sal_False),		\
1576*b1cdbd2cSJim Jagielski 	bActiveAuditingSh(sal_False),	\
1577*b1cdbd2cSJim Jagielski 	bActiveDrawFormSh(sal_False),	\
1578*b1cdbd2cSJim Jagielski 	bActiveOleObjectSh(sal_False),	\
1579*b1cdbd2cSJim Jagielski 	bActiveChartSh(sal_False),		\
1580*b1cdbd2cSJim Jagielski 	bActiveGraphicSh(sal_False),	\
1581*b1cdbd2cSJim Jagielski 	bActiveMediaSh(sal_False),		\
1582*b1cdbd2cSJim Jagielski 	bActiveEditSh(sal_False),       \
1583*b1cdbd2cSJim Jagielski 	bFormShellAtTop(sal_False),     \
1584*b1cdbd2cSJim Jagielski 	bDontSwitch(sal_False),			\
1585*b1cdbd2cSJim Jagielski 	bInFormatDialog(sal_False),		\
1586*b1cdbd2cSJim Jagielski 	bPrintSelected(sal_False),		\
1587*b1cdbd2cSJim Jagielski 	bReadOnly(sal_False),			\
1588*b1cdbd2cSJim Jagielski 	pScSbxObject(NULL),			\
1589*b1cdbd2cSJim Jagielski 	/*bChartDlgIsEdit(sal_False),*/		\
1590*b1cdbd2cSJim Jagielski 	bChartAreaValid(sal_False),		\
1591*b1cdbd2cSJim Jagielski     nCurRefDlgId(0),            \
1592*b1cdbd2cSJim Jagielski 	pAccessibilityBroadcaster(NULL),	\
1593*b1cdbd2cSJim Jagielski 	bForceFocusOnCurCell(sal_False)
1594*b1cdbd2cSJim Jagielski 
1595*b1cdbd2cSJim Jagielski 
1596*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1597*b1cdbd2cSJim Jagielski 
Construct(sal_uInt8 nForceDesignMode)1598*b1cdbd2cSJim Jagielski void ScTabViewShell::Construct( sal_uInt8 nForceDesignMode )
1599*b1cdbd2cSJim Jagielski {
1600*b1cdbd2cSJim Jagielski 	SfxApplication* pSfxApp  = SFX_APP();
1601*b1cdbd2cSJim Jagielski 	ScDocShell* pDocSh = GetViewData()->GetDocShell();
1602*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocSh->GetDocument();
1603*b1cdbd2cSJim Jagielski 
1604*b1cdbd2cSJim Jagielski 	bReadOnly = pDocSh->IsReadOnly();
1605*b1cdbd2cSJim Jagielski 	bIsActive = sal_False;
1606*b1cdbd2cSJim Jagielski 
1607*b1cdbd2cSJim Jagielski 	SetName( String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("View")) );	// fuer SBX
1608*b1cdbd2cSJim Jagielski 	Color aColBlack( COL_BLACK );
1609*b1cdbd2cSJim Jagielski //	SetPool( &pSfxApp->GetPool() );
1610*b1cdbd2cSJim Jagielski 	SetPool( &SC_MOD()->GetPool() );
1611*b1cdbd2cSJim Jagielski 	SetWindow( GetActiveWin() );
1612*b1cdbd2cSJim Jagielski 
1613*b1cdbd2cSJim Jagielski 	pCurFrameLine	= new SvxBorderLine( &aColBlack, 20, 0, 0 );
1614*b1cdbd2cSJim Jagielski 	pPivotSource	= new ScArea;
1615*b1cdbd2cSJim Jagielski     StartListening(*GetViewData()->GetDocShell(),sal_True);
1616*b1cdbd2cSJim Jagielski     StartListening(*GetViewFrame(),sal_True);
1617*b1cdbd2cSJim Jagielski     StartListening(*pSfxApp,sal_True);              // #i62045# #i62046# application is needed for Calc's own hints
1618*b1cdbd2cSJim Jagielski 
1619*b1cdbd2cSJim Jagielski 	SfxViewFrame* pFirst = SfxViewFrame::GetFirst(pDocSh);
1620*b1cdbd2cSJim Jagielski 	sal_Bool bFirstView = !pFirst
1621*b1cdbd2cSJim Jagielski 		  || (pFirst == GetViewFrame() && !SfxViewFrame::GetNext(*pFirst,pDocSh));
1622*b1cdbd2cSJim Jagielski 
1623*b1cdbd2cSJim Jagielski 	if ( pDocSh->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
1624*b1cdbd2cSJim Jagielski 	{
1625*b1cdbd2cSJim Jagielski         //TODO/LATER: is there a difference between the two GetVisArea methods?
1626*b1cdbd2cSJim Jagielski         Rectangle aVisArea = ((const SfxObjectShell*)pDocSh)->GetVisArea();
1627*b1cdbd2cSJim Jagielski 
1628*b1cdbd2cSJim Jagielski 		SCTAB nVisTab = pDoc->GetVisibleTab();
1629*b1cdbd2cSJim Jagielski 		if (!pDoc->HasTable(nVisTab))
1630*b1cdbd2cSJim Jagielski 		{
1631*b1cdbd2cSJim Jagielski 			nVisTab = 0;
1632*b1cdbd2cSJim Jagielski 			pDoc->SetVisibleTab(nVisTab);
1633*b1cdbd2cSJim Jagielski 		}
1634*b1cdbd2cSJim Jagielski 		SetTabNo( nVisTab );
1635*b1cdbd2cSJim Jagielski         sal_Bool bNegativePage = pDoc->IsNegativePage( nVisTab );
1636*b1cdbd2cSJim Jagielski         // show the right cells
1637*b1cdbd2cSJim Jagielski         GetViewData()->SetScreenPos( bNegativePage ? aVisArea.TopRight() : aVisArea.TopLeft() );
1638*b1cdbd2cSJim Jagielski 
1639*b1cdbd2cSJim Jagielski         if ( GetViewFrame()->GetFrame().IsInPlace() )                         // inplace
1640*b1cdbd2cSJim Jagielski 		{
1641*b1cdbd2cSJim Jagielski 			pDocSh->SetInplace( sal_True );				// schon so initialisiert
1642*b1cdbd2cSJim Jagielski 			if (pDoc->IsEmbedded())
1643*b1cdbd2cSJim Jagielski 				pDoc->ResetEmbedded();				// keine blaue Markierung
1644*b1cdbd2cSJim Jagielski 		}
1645*b1cdbd2cSJim Jagielski 		else if ( bFirstView )
1646*b1cdbd2cSJim Jagielski 		{
1647*b1cdbd2cSJim Jagielski 			pDocSh->SetInplace( sal_False );
1648*b1cdbd2cSJim Jagielski             GetViewData()->RefreshZoom();           // recalculate PPT
1649*b1cdbd2cSJim Jagielski 			if (!pDoc->IsEmbedded())
1650*b1cdbd2cSJim Jagielski 				pDoc->SetEmbedded( aVisArea );					// VisArea markieren
1651*b1cdbd2cSJim Jagielski 		}
1652*b1cdbd2cSJim Jagielski 	}
1653*b1cdbd2cSJim Jagielski 
1654*b1cdbd2cSJim Jagielski 	// ViewInputHandler
1655*b1cdbd2cSJim Jagielski 	//	#48721# jeder Task hat neuerdings sein eigenes InputWindow,
1656*b1cdbd2cSJim Jagielski 	//	darum muesste eigentlich entweder jeder Task seinen InputHandler bekommen,
1657*b1cdbd2cSJim Jagielski 	//	oder das InputWindow muesste sich beim App-InputHandler anmelden, wenn der
1658*b1cdbd2cSJim Jagielski 	//	Task aktiv wird, oder das InputWindow muesste sich den InputHandler selbst
1659*b1cdbd2cSJim Jagielski 	//	anlegen (dann immer ueber das InputWindow suchen, und nur wenn das nicht da
1660*b1cdbd2cSJim Jagielski 	//	ist, den InputHandler von der App nehmen).
1661*b1cdbd2cSJim Jagielski 	//	Als Sofortloesung bekommt erstmal jede View ihren Inputhandler, das gibt
1662*b1cdbd2cSJim Jagielski 	//	nur noch Probleme, wenn zwei Views in einem Task-Fenster sind.
1663*b1cdbd2cSJim Jagielski 
1664*b1cdbd2cSJim Jagielski 	pInputHandler = new ScInputHandler;
1665*b1cdbd2cSJim Jagielski 
1666*b1cdbd2cSJim Jagielski 	// Alte Version:
1667*b1cdbd2cSJim Jagielski 	//	if ( !GetViewFrame()->ISA(SfxTopViewFrame) )		// OLE oder Plug-In
1668*b1cdbd2cSJim Jagielski 	//		pInputHandler = new ScInputHandler;
1669*b1cdbd2cSJim Jagielski 
1670*b1cdbd2cSJim Jagielski 			//	FormShell vor MakeDrawView anlegen, damit die DrawView auf jeden Fall
1671*b1cdbd2cSJim Jagielski 			//	an der FormShell angemeldet werden kann
1672*b1cdbd2cSJim Jagielski 			//	Gepusht wird die FormShell im ersten Activate
1673*b1cdbd2cSJim Jagielski 	pFormShell = new FmFormShell(this);
1674*b1cdbd2cSJim Jagielski 	pFormShell->SetControlActivationHandler( LINK( this, ScTabViewShell, FormControlActivated ) );
1675*b1cdbd2cSJim Jagielski 
1676*b1cdbd2cSJim Jagielski 			//	DrawView darf nicht im TabView - ctor angelegt werden,
1677*b1cdbd2cSJim Jagielski 			//	wenn die ViewShell noch nicht kostruiert ist...
1678*b1cdbd2cSJim Jagielski 	if (pDoc->GetDrawLayer())
1679*b1cdbd2cSJim Jagielski 		MakeDrawView( nForceDesignMode );
1680*b1cdbd2cSJim Jagielski 	ViewOptionsHasChanged(sal_False);	// legt auch evtl. DrawView an
1681*b1cdbd2cSJim Jagielski 
1682*b1cdbd2cSJim Jagielski     ::svl::IUndoManager* pMgr = pDocSh->GetUndoManager();
1683*b1cdbd2cSJim Jagielski     SetUndoManager( pMgr );
1684*b1cdbd2cSJim Jagielski     pFormShell->SetUndoManager( pMgr );
1685*b1cdbd2cSJim Jagielski     if ( !pDoc->IsUndoEnabled() )
1686*b1cdbd2cSJim Jagielski     {
1687*b1cdbd2cSJim Jagielski         pMgr->SetMaxUndoActionCount( 0 );
1688*b1cdbd2cSJim Jagielski     }
1689*b1cdbd2cSJim Jagielski 	SetRepeatTarget( &aTarget );
1690*b1cdbd2cSJim Jagielski 	pFormShell->SetRepeatTarget( &aTarget );
1691*b1cdbd2cSJim Jagielski 	SetHelpId( HID_SCSHELL_TABVWSH );
1692*b1cdbd2cSJim Jagielski 
1693*b1cdbd2cSJim Jagielski 	if ( bFirstView )	// first view?
1694*b1cdbd2cSJim Jagielski 	{
1695*b1cdbd2cSJim Jagielski 		pDoc->SetDocVisible( sal_True );		// used when creating new sheets
1696*b1cdbd2cSJim Jagielski 		if ( pDocSh->IsEmpty() )
1697*b1cdbd2cSJim Jagielski 		{
1698*b1cdbd2cSJim Jagielski 			// set first sheet's RTL flag (following will already be initialized because of SetDocVisible)
1699*b1cdbd2cSJim Jagielski 			pDoc->SetLayoutRTL( 0, ScGlobal::IsSystemRTL() );
1700*b1cdbd2cSJim Jagielski 
1701*b1cdbd2cSJim Jagielski 			// append additional sheets (not for OLE object)
1702*b1cdbd2cSJim Jagielski 			if ( pDocSh->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED )
1703*b1cdbd2cSJim Jagielski 			{
1704*b1cdbd2cSJim Jagielski 				SCTAB nInitTabCount = 3;							//!	konfigurierbar !!!
1705*b1cdbd2cSJim Jagielski 				for (SCTAB i=1; i<nInitTabCount; i++)
1706*b1cdbd2cSJim Jagielski 					pDoc->MakeTable(i,false);
1707*b1cdbd2cSJim Jagielski 			}
1708*b1cdbd2cSJim Jagielski 
1709*b1cdbd2cSJim Jagielski             pDocSh->SetEmpty( sal_False );          // #i6232# make sure this is done only once
1710*b1cdbd2cSJim Jagielski 		}
1711*b1cdbd2cSJim Jagielski 
1712*b1cdbd2cSJim Jagielski 		// ReadExtOptions is now in Activate
1713*b1cdbd2cSJim Jagielski 
1714*b1cdbd2cSJim Jagielski 		//	Link-Update nicht verschachteln
1715*b1cdbd2cSJim Jagielski 		if ( pDocSh->GetCreateMode() != SFX_CREATE_MODE_INTERNAL &&
1716*b1cdbd2cSJim Jagielski              pDocSh->IsUpdateEnabled() )  // #105575#; update only in the first creation of the ViewShell
1717*b1cdbd2cSJim Jagielski 		{
1718*b1cdbd2cSJim Jagielski             // Check if there are any external data.
1719*b1cdbd2cSJim Jagielski             bool bLink = pDoc->GetExternalRefManager()->hasExternalData();
1720*b1cdbd2cSJim Jagielski             if (!bLink)
1721*b1cdbd2cSJim Jagielski             {
1722*b1cdbd2cSJim Jagielski                 // #i100042# sheet links can still exist independently from external formula references
1723*b1cdbd2cSJim Jagielski                 SCTAB nTabCount = pDoc->GetTableCount();
1724*b1cdbd2cSJim Jagielski                 for (SCTAB i=0; i<nTabCount && !bLink; i++)
1725*b1cdbd2cSJim Jagielski                     if (pDoc->IsLinked(i))
1726*b1cdbd2cSJim Jagielski                         bLink = true;
1727*b1cdbd2cSJim Jagielski             }
1728*b1cdbd2cSJim Jagielski 			if (!bLink)
1729*b1cdbd2cSJim Jagielski 				if (pDoc->HasDdeLinks() || pDoc->HasAreaLinks())
1730*b1cdbd2cSJim Jagielski 					bLink = sal_True;
1731*b1cdbd2cSJim Jagielski 			if (bLink)
1732*b1cdbd2cSJim Jagielski 			{
1733*b1cdbd2cSJim Jagielski 				if ( !pFirst )
1734*b1cdbd2cSJim Jagielski 					pFirst = GetViewFrame();
1735*b1cdbd2cSJim Jagielski 
1736*b1cdbd2cSJim Jagielski 				if(SC_MOD()->GetCurRefDlgId()==0)
1737*b1cdbd2cSJim Jagielski 				{
1738*b1cdbd2cSJim Jagielski 						pFirst->GetDispatcher()->Execute( SID_UPDATETABLINKS,
1739*b1cdbd2cSJim Jagielski 											SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
1740*b1cdbd2cSJim Jagielski 				}
1741*b1cdbd2cSJim Jagielski 			}
1742*b1cdbd2cSJim Jagielski 
1743*b1cdbd2cSJim Jagielski 			sal_Bool bReImport = sal_False;								// importierte Daten aktualisieren
1744*b1cdbd2cSJim Jagielski 			ScDBCollection* pDBColl = pDoc->GetDBCollection();
1745*b1cdbd2cSJim Jagielski 			if ( pDBColl )
1746*b1cdbd2cSJim Jagielski 			{
1747*b1cdbd2cSJim Jagielski 				sal_uInt16 nCount = pDBColl->GetCount();
1748*b1cdbd2cSJim Jagielski 				for (sal_uInt16 i=0; i<nCount && !bReImport; i++)
1749*b1cdbd2cSJim Jagielski 				{
1750*b1cdbd2cSJim Jagielski 					ScDBData* pData = (*pDBColl)[i];
1751*b1cdbd2cSJim Jagielski 					if ( pData->IsStripData() &&
1752*b1cdbd2cSJim Jagielski 							pData->HasImportParam() && !pData->HasImportSelection() )
1753*b1cdbd2cSJim Jagielski 						bReImport = sal_True;
1754*b1cdbd2cSJim Jagielski 				}
1755*b1cdbd2cSJim Jagielski 			}
1756*b1cdbd2cSJim Jagielski 			if (bReImport)
1757*b1cdbd2cSJim Jagielski 			{
1758*b1cdbd2cSJim Jagielski 				if ( !pFirst )
1759*b1cdbd2cSJim Jagielski 					pFirst = GetViewFrame();
1760*b1cdbd2cSJim Jagielski 				if(SC_MOD()->GetCurRefDlgId()==0)
1761*b1cdbd2cSJim Jagielski 				{
1762*b1cdbd2cSJim Jagielski 					pFirst->GetDispatcher()->Execute( SID_REIMPORT_AFTER_LOAD,
1763*b1cdbd2cSJim Jagielski 											SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
1764*b1cdbd2cSJim Jagielski 				}
1765*b1cdbd2cSJim Jagielski 			}
1766*b1cdbd2cSJim Jagielski 		}
1767*b1cdbd2cSJim Jagielski 	}
1768*b1cdbd2cSJim Jagielski 
1769*b1cdbd2cSJim Jagielski 	UpdateAutoFillMark();
1770*b1cdbd2cSJim Jagielski 
1771*b1cdbd2cSJim Jagielski 	// ScDispatchProviderInterceptor registers itself in ctor
1772*b1cdbd2cSJim Jagielski 	xDisProvInterceptor = new ScDispatchProviderInterceptor( this );
1773*b1cdbd2cSJim Jagielski 
1774*b1cdbd2cSJim Jagielski 	bFirstActivate = sal_True; // NavigatorUpdate aufschieben bis Activate()
1775*b1cdbd2cSJim Jagielski 
1776*b1cdbd2cSJim Jagielski     // #105575#; update only in the first creation of the ViewShell
1777*b1cdbd2cSJim Jagielski     pDocSh->SetUpdateEnabled(sal_False);
1778*b1cdbd2cSJim Jagielski 
1779*b1cdbd2cSJim Jagielski 	if ( GetViewFrame()->GetFrame().IsInPlace() )
1780*b1cdbd2cSJim Jagielski 		UpdateHeaderWidth(); // The implace activation requires headers to be calculated
1781*b1cdbd2cSJim Jagielski 
1782*b1cdbd2cSJim Jagielski 	SvBorder aBorder;
1783*b1cdbd2cSJim Jagielski     GetBorderSize( aBorder, Size() );
1784*b1cdbd2cSJim Jagielski 	SetBorderPixel( aBorder );
1785*b1cdbd2cSJim Jagielski }
1786*b1cdbd2cSJim Jagielski 
1787*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1788*b1cdbd2cSJim Jagielski 
1789*b1cdbd2cSJim Jagielski //UNUSED2008-05  ScTabViewShell::ScTabViewShell( SfxViewFrame* pViewFrame,
1790*b1cdbd2cSJim Jagielski //UNUSED2008-05                                  const ScTabViewShell& rWin ) :
1791*b1cdbd2cSJim Jagielski //UNUSED2008-05  SfxViewShell( pViewFrame, SFX_VIEW_MAXIMIZE_FIRST | SFX_VIEW_CAN_PRINT | SFX_VIEW_HAS_PRINTOPTIONS ),
1792*b1cdbd2cSJim Jagielski //UNUSED2008-05  ScDBFunc( &pViewFrame->GetWindow(), rWin, this ),
1793*b1cdbd2cSJim Jagielski //UNUSED2008-05  __INIT_ScTabViewShell
1794*b1cdbd2cSJim Jagielski //UNUSED2008-05  {
1795*b1cdbd2cSJim Jagielski //UNUSED2008-05      RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScTabViewShell::ScTabViewShell" );
1796*b1cdbd2cSJim Jagielski //UNUSED2008-05
1797*b1cdbd2cSJim Jagielski //UNUSED2008-05      Construct();
1798*b1cdbd2cSJim Jagielski //UNUSED2008-05
1799*b1cdbd2cSJim Jagielski //UNUSED2008-05      UpdatePageBreakData();
1800*b1cdbd2cSJim Jagielski //UNUSED2008-05
1801*b1cdbd2cSJim Jagielski //UNUSED2008-05      /*uno::Reference<frame::XFrame> xFrame = pViewFrame->GetFrame().GetFrameInterface();
1802*b1cdbd2cSJim Jagielski //UNUSED2008-05      if (xFrame.is())
1803*b1cdbd2cSJim Jagielski //UNUSED2008-05          xFrame->setComponent( uno::Reference<awt::XWindow>(), new ScTabViewObj( this ) );*/
1804*b1cdbd2cSJim Jagielski //UNUSED2008-05      // make Controller known to SFX
1805*b1cdbd2cSJim Jagielski //UNUSED2008-05      new ScTabViewObj( this );
1806*b1cdbd2cSJim Jagielski //UNUSED2008-05
1807*b1cdbd2cSJim Jagielski //UNUSED2008-05      SetCurSubShell(OST_Cell);
1808*b1cdbd2cSJim Jagielski //UNUSED2008-05      SvBorder aBorder;
1809*b1cdbd2cSJim Jagielski //UNUSED2008-05      GetBorderSize( aBorder, Size() );
1810*b1cdbd2cSJim Jagielski //UNUSED2008-05      SetBorderPixel( aBorder );
1811*b1cdbd2cSJim Jagielski //UNUSED2008-05  }
1812*b1cdbd2cSJim Jagielski 
1813*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1814*b1cdbd2cSJim Jagielski 
ScTabViewShell(SfxViewFrame * pViewFrame,SfxViewShell * pOldSh)1815*b1cdbd2cSJim Jagielski ScTabViewShell::ScTabViewShell( SfxViewFrame* pViewFrame,
1816*b1cdbd2cSJim Jagielski 								SfxViewShell* pOldSh ) :
1817*b1cdbd2cSJim Jagielski     SfxViewShell( pViewFrame, SFX_VIEW_CAN_PRINT | SFX_VIEW_HAS_PRINTOPTIONS ),
1818*b1cdbd2cSJim Jagielski     ScDBFunc( &pViewFrame->GetWindow(), (ScDocShell&)*pViewFrame->GetObjectShell(), this ),
1819*b1cdbd2cSJim Jagielski     __INIT_ScTabViewShell
1820*b1cdbd2cSJim Jagielski {
1821*b1cdbd2cSJim Jagielski 	RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScTabViewShell::ScTabViewShell" );
1822*b1cdbd2cSJim Jagielski 
1823*b1cdbd2cSJim Jagielski 	const ScAppOptions&	rAppOpt = SC_MOD()->GetAppOptions();
1824*b1cdbd2cSJim Jagielski 
1825*b1cdbd2cSJim Jagielski 	//	if switching back from print preview,
1826*b1cdbd2cSJim Jagielski 	//	restore the view settings that were active when creating the preview
1827*b1cdbd2cSJim Jagielski 	//	#89897# ReadUserData must not happen from ctor, because the view's edit window
1828*b1cdbd2cSJim Jagielski 	//	has to be shown by the sfx. ReadUserData is deferred until the first Activate call.
1829*b1cdbd2cSJim Jagielski 	//	#106334# old DesignMode state from form layer must be restored, too
1830*b1cdbd2cSJim Jagielski 
1831*b1cdbd2cSJim Jagielski 	sal_uInt8 nForceDesignMode = SC_FORCEMODE_NONE;
1832*b1cdbd2cSJim Jagielski 	if ( pOldSh && pOldSh->ISA( ScPreviewShell ) )
1833*b1cdbd2cSJim Jagielski 	{
1834*b1cdbd2cSJim Jagielski 		ScPreviewShell* pPreviewShell = ((ScPreviewShell*)pOldSh);
1835*b1cdbd2cSJim Jagielski 		nForceDesignMode = pPreviewShell->GetSourceDesignMode();
1836*b1cdbd2cSJim Jagielski 	}
1837*b1cdbd2cSJim Jagielski 
1838*b1cdbd2cSJim Jagielski 	Construct( nForceDesignMode );
1839*b1cdbd2cSJim Jagielski 
1840*b1cdbd2cSJim Jagielski 	if ( GetViewData()->GetDocShell()->IsPreview() )
1841*b1cdbd2cSJim Jagielski 	{
1842*b1cdbd2cSJim Jagielski 		//	preview for template dialog: always show whole page
1843*b1cdbd2cSJim Jagielski         SetZoomType( SVX_ZOOM_WHOLEPAGE, sal_True );    // zoom value is recalculated at next Resize
1844*b1cdbd2cSJim Jagielski 	}
1845*b1cdbd2cSJim Jagielski 	else
1846*b1cdbd2cSJim Jagielski 	{
1847*b1cdbd2cSJim Jagielski 		Fraction aFract( rAppOpt.GetZoom(), 100 );
1848*b1cdbd2cSJim Jagielski         SetZoom( aFract, aFract, sal_True );
1849*b1cdbd2cSJim Jagielski         SetZoomType( rAppOpt.GetZoomType(), sal_True );
1850*b1cdbd2cSJim Jagielski 	}
1851*b1cdbd2cSJim Jagielski 
1852*b1cdbd2cSJim Jagielski     /*uno::Reference<frame::XFrame> xFrame = pViewFrame->GetFrame().GetFrameInterface();
1853*b1cdbd2cSJim Jagielski 	if (xFrame.is())
1854*b1cdbd2cSJim Jagielski         xFrame->setComponent( uno::Reference<awt::XWindow>(), new ScTabViewObj( this ) );*/
1855*b1cdbd2cSJim Jagielski     // make Controller known to SFX
1856*b1cdbd2cSJim Jagielski     new ScTabViewObj( this );
1857*b1cdbd2cSJim Jagielski 
1858*b1cdbd2cSJim Jagielski 	SetCurSubShell(OST_Cell);
1859*b1cdbd2cSJim Jagielski 	SvBorder aBorder;
1860*b1cdbd2cSJim Jagielski     GetBorderSize( aBorder, Size() );
1861*b1cdbd2cSJim Jagielski 	SetBorderPixel( aBorder );
1862*b1cdbd2cSJim Jagielski 
1863*b1cdbd2cSJim Jagielski 	// #114409#
1864*b1cdbd2cSJim Jagielski 	MakeDrawLayer();
1865*b1cdbd2cSJim Jagielski }
1866*b1cdbd2cSJim Jagielski 
1867*b1cdbd2cSJim Jagielski #undef __INIT_ScTabViewShell
1868*b1cdbd2cSJim Jagielski 
1869*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1870*b1cdbd2cSJim Jagielski 
1871*b1cdbd2cSJim Jagielski __EXPORT ScTabViewShell::~ScTabViewShell()
1872*b1cdbd2cSJim Jagielski {
1873*b1cdbd2cSJim Jagielski 	ScDocShell* pDocSh = GetViewData()->GetDocShell();
1874*b1cdbd2cSJim Jagielski 	EndListening(*pDocSh);
1875*b1cdbd2cSJim Jagielski 	EndListening(*GetViewFrame());
1876*b1cdbd2cSJim Jagielski     EndListening(*SFX_APP());           // #i62045# #i62046# needed now - SfxViewShell no longer does it
1877*b1cdbd2cSJim Jagielski 
1878*b1cdbd2cSJim Jagielski 	SC_MOD()->ViewShellGone(this);
1879*b1cdbd2cSJim Jagielski 
1880*b1cdbd2cSJim Jagielski 	RemoveSubShell();			// alle
1881*b1cdbd2cSJim Jagielski 	SetWindow(0);
1882*b1cdbd2cSJim Jagielski 
1883*b1cdbd2cSJim Jagielski 	//	#54104# alles auf NULL, falls aus dem TabView-dtor noch darauf zugegriffen wird
1884*b1cdbd2cSJim Jagielski 	//!	(soll eigentlich nicht !??!?!)
1885*b1cdbd2cSJim Jagielski 
1886*b1cdbd2cSJim Jagielski 	DELETEZ(pFontworkBarShell);
1887*b1cdbd2cSJim Jagielski 	DELETEZ(pExtrusionBarShell);
1888*b1cdbd2cSJim Jagielski 	DELETEZ(pCellShell);
1889*b1cdbd2cSJim Jagielski 	DELETEZ(pPageBreakShell);
1890*b1cdbd2cSJim Jagielski 	DELETEZ(pDrawShell);
1891*b1cdbd2cSJim Jagielski 	DELETEZ(pDrawFormShell);
1892*b1cdbd2cSJim Jagielski 	DELETEZ(pOleObjectShell);
1893*b1cdbd2cSJim Jagielski 	DELETEZ(pChartShell);
1894*b1cdbd2cSJim Jagielski 	DELETEZ(pGraphicShell);
1895*b1cdbd2cSJim Jagielski 	DELETEZ(pMediaShell);
1896*b1cdbd2cSJim Jagielski 	DELETEZ(pDrawTextShell);
1897*b1cdbd2cSJim Jagielski 	DELETEZ(pEditShell);
1898*b1cdbd2cSJim Jagielski 	DELETEZ(pPivotShell);
1899*b1cdbd2cSJim Jagielski 	DELETEZ(pAuditingShell);
1900*b1cdbd2cSJim Jagielski 	DELETEZ(pCurFrameLine);
1901*b1cdbd2cSJim Jagielski 	DELETEZ(pInputHandler);
1902*b1cdbd2cSJim Jagielski 	DELETEZ(pPivotSource);
1903*b1cdbd2cSJim Jagielski 	DELETEZ(pDialogDPObject);
1904*b1cdbd2cSJim Jagielski     DELETEZ(pNavSettings);
1905*b1cdbd2cSJim Jagielski 
1906*b1cdbd2cSJim Jagielski 	DELETEZ(pFormShell);
1907*b1cdbd2cSJim Jagielski 	DELETEZ(pAccessibilityBroadcaster);
1908*b1cdbd2cSJim Jagielski }
1909*b1cdbd2cSJim Jagielski 
1910*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1911*b1cdbd2cSJim Jagielski 
SetDialogDPObject(const ScDPObject * pObj)1912*b1cdbd2cSJim Jagielski void ScTabViewShell::SetDialogDPObject( const ScDPObject* pObj )
1913*b1cdbd2cSJim Jagielski {
1914*b1cdbd2cSJim Jagielski 	delete pDialogDPObject;
1915*b1cdbd2cSJim Jagielski 	if (pObj)
1916*b1cdbd2cSJim Jagielski 		pDialogDPObject = new ScDPObject( *pObj );
1917*b1cdbd2cSJim Jagielski 	else
1918*b1cdbd2cSJim Jagielski 		pDialogDPObject = NULL;
1919*b1cdbd2cSJim Jagielski }
1920*b1cdbd2cSJim Jagielski 
1921*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1922*b1cdbd2cSJim Jagielski 
FillFieldData(ScHeaderFieldData & rData)1923*b1cdbd2cSJim Jagielski void ScTabViewShell::FillFieldData( ScHeaderFieldData& rData )
1924*b1cdbd2cSJim Jagielski {
1925*b1cdbd2cSJim Jagielski 	ScDocShell* pDocShell = GetViewData()->GetDocShell();
1926*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1927*b1cdbd2cSJim Jagielski 	SCTAB nTab = GetViewData()->GetTabNo();
1928*b1cdbd2cSJim Jagielski 	pDoc->GetName( nTab, rData.aTabName );
1929*b1cdbd2cSJim Jagielski 
1930*b1cdbd2cSJim Jagielski 	rData.aTitle		= pDocShell->GetTitle();
1931*b1cdbd2cSJim Jagielski 	const INetURLObject& rURLObj = pDocShell->GetMedium()->GetURLObject();
1932*b1cdbd2cSJim Jagielski 	rData.aLongDocName	= rURLObj.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
1933*b1cdbd2cSJim Jagielski 	if ( rData.aLongDocName.Len() )
1934*b1cdbd2cSJim Jagielski 		rData.aShortDocName = rURLObj.GetName( INetURLObject::DECODE_UNAMBIGUOUS );
1935*b1cdbd2cSJim Jagielski 	else
1936*b1cdbd2cSJim Jagielski 		rData.aShortDocName = rData.aLongDocName = rData.aTitle;
1937*b1cdbd2cSJim Jagielski 	rData.nPageNo		= 1;
1938*b1cdbd2cSJim Jagielski 	rData.nTotalPages	= 99;
1939*b1cdbd2cSJim Jagielski 
1940*b1cdbd2cSJim Jagielski 	//	eNumType kennt der Dialog selber
1941*b1cdbd2cSJim Jagielski }
1942*b1cdbd2cSJim Jagielski 
1943*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1944*b1cdbd2cSJim Jagielski 
SetChartArea(const ScRangeListRef & rSource,const Rectangle & rDest)1945*b1cdbd2cSJim Jagielski void ScTabViewShell::SetChartArea( const ScRangeListRef& rSource, const Rectangle& rDest )
1946*b1cdbd2cSJim Jagielski {
1947*b1cdbd2cSJim Jagielski 	bChartAreaValid	= sal_True;
1948*b1cdbd2cSJim Jagielski 	aChartSource	= rSource;
1949*b1cdbd2cSJim Jagielski 	aChartPos		= rDest;
1950*b1cdbd2cSJim Jagielski 	nChartDestTab	= GetViewData()->GetTabNo();
1951*b1cdbd2cSJim Jagielski }
1952*b1cdbd2cSJim Jagielski 
1953*b1cdbd2cSJim Jagielski //UNUSED2008-05  void ScTabViewShell::ResetChartArea()
1954*b1cdbd2cSJim Jagielski //UNUSED2008-05  {
1955*b1cdbd2cSJim Jagielski //UNUSED2008-05      bChartAreaValid = sal_False;
1956*b1cdbd2cSJim Jagielski //UNUSED2008-05  }
1957*b1cdbd2cSJim Jagielski 
GetChartArea(ScRangeListRef & rSource,Rectangle & rDest,SCTAB & rTab) const1958*b1cdbd2cSJim Jagielski sal_Bool ScTabViewShell::GetChartArea( ScRangeListRef& rSource, Rectangle& rDest, SCTAB& rTab ) const
1959*b1cdbd2cSJim Jagielski {
1960*b1cdbd2cSJim Jagielski 	rSource	= aChartSource;
1961*b1cdbd2cSJim Jagielski 	rDest	= aChartPos;
1962*b1cdbd2cSJim Jagielski 	rTab	= nChartDestTab;
1963*b1cdbd2cSJim Jagielski 	return bChartAreaValid;
1964*b1cdbd2cSJim Jagielski }
1965*b1cdbd2cSJim Jagielski 
1966*b1cdbd2cSJim Jagielski //UNUSED2008-05  sal_Bool ScTabViewShell::IsChartDlgEdit() const
1967*b1cdbd2cSJim Jagielski //UNUSED2008-05  {
1968*b1cdbd2cSJim Jagielski //UNUSED2008-05      return bChartDlgIsEdit;
1969*b1cdbd2cSJim Jagielski //UNUSED2008-05  }
1970*b1cdbd2cSJim Jagielski //UNUSED2008-05
1971*b1cdbd2cSJim Jagielski //UNUSED2008-05  const String& ScTabViewShell::GetEditChartName() const
1972*b1cdbd2cSJim Jagielski //UNUSED2008-05  {
1973*b1cdbd2cSJim Jagielski //UNUSED2008-05      return aEditChartName;
1974*b1cdbd2cSJim Jagielski //UNUSED2008-05  }
1975*b1cdbd2cSJim Jagielski 
GetNavigatorSettings()1976*b1cdbd2cSJim Jagielski ScNavigatorSettings* ScTabViewShell::GetNavigatorSettings()
1977*b1cdbd2cSJim Jagielski {
1978*b1cdbd2cSJim Jagielski     if( !pNavSettings )
1979*b1cdbd2cSJim Jagielski         pNavSettings = new ScNavigatorSettings;
1980*b1cdbd2cSJim Jagielski     return pNavSettings;
1981*b1cdbd2cSJim Jagielski }
1982*b1cdbd2cSJim Jagielski 
1983*b1cdbd2cSJim Jagielski 
1984*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
1985*b1cdbd2cSJim Jagielski 
ExecTbx(SfxRequest & rReq)1986*b1cdbd2cSJim Jagielski void ScTabViewShell::ExecTbx( SfxRequest& rReq )
1987*b1cdbd2cSJim Jagielski {
1988*b1cdbd2cSJim Jagielski 	const SfxItemSet* pReqArgs = rReq.GetArgs();
1989*b1cdbd2cSJim Jagielski 	sal_uInt16 nSlot = rReq.GetSlot();
1990*b1cdbd2cSJim Jagielski 	const SfxPoolItem* pItem = NULL;
1991*b1cdbd2cSJim Jagielski 	if ( pReqArgs )
1992*b1cdbd2cSJim Jagielski 		pReqArgs->GetItemState( nSlot, sal_True, &pItem );
1993*b1cdbd2cSJim Jagielski 
1994*b1cdbd2cSJim Jagielski 	switch ( nSlot )
1995*b1cdbd2cSJim Jagielski 	{
1996*b1cdbd2cSJim Jagielski 		case SID_TBXCTL_INSERT:
1997*b1cdbd2cSJim Jagielski 			if ( pItem )
1998*b1cdbd2cSJim Jagielski 				nInsertCtrlState = ((const SfxUInt16Item*)pItem)->GetValue();
1999*b1cdbd2cSJim Jagielski 			break;
2000*b1cdbd2cSJim Jagielski 		case SID_TBXCTL_INSCELLS:
2001*b1cdbd2cSJim Jagielski 			if ( pItem )
2002*b1cdbd2cSJim Jagielski 				nInsCellsCtrlState = ((const SfxUInt16Item*)pItem)->GetValue();
2003*b1cdbd2cSJim Jagielski 			break;
2004*b1cdbd2cSJim Jagielski 		case SID_TBXCTL_INSOBJ:
2005*b1cdbd2cSJim Jagielski 			if ( pItem )
2006*b1cdbd2cSJim Jagielski 				nInsObjCtrlState = ((const SfxUInt16Item*)pItem)->GetValue();
2007*b1cdbd2cSJim Jagielski 			break;
2008*b1cdbd2cSJim Jagielski 		default:
2009*b1cdbd2cSJim Jagielski 			DBG_ERROR("Slot im Wald");
2010*b1cdbd2cSJim Jagielski 	}
2011*b1cdbd2cSJim Jagielski 	GetViewFrame()->GetBindings().Invalidate( nSlot );
2012*b1cdbd2cSJim Jagielski }
2013*b1cdbd2cSJim Jagielski 
GetTbxState(SfxItemSet & rSet)2014*b1cdbd2cSJim Jagielski void ScTabViewShell::GetTbxState( SfxItemSet& rSet )
2015*b1cdbd2cSJim Jagielski {
2016*b1cdbd2cSJim Jagielski 	rSet.Put( SfxUInt16Item( SID_TBXCTL_INSERT,   nInsertCtrlState ) );
2017*b1cdbd2cSJim Jagielski 	rSet.Put( SfxUInt16Item( SID_TBXCTL_INSCELLS, nInsCellsCtrlState ) );
2018*b1cdbd2cSJim Jagielski 
2019*b1cdbd2cSJim Jagielski 	//	ohne installiertes Chart darf Chart nicht Default sein...
2020*b1cdbd2cSJim Jagielski 	if ( nInsObjCtrlState == SID_DRAW_CHART && !SvtModuleOptions().IsChart() )
2021*b1cdbd2cSJim Jagielski 		nInsObjCtrlState = SID_INSERT_OBJECT;
2022*b1cdbd2cSJim Jagielski 
2023*b1cdbd2cSJim Jagielski 	rSet.Put( SfxUInt16Item( SID_TBXCTL_INSOBJ,   nInsObjCtrlState ) );
2024*b1cdbd2cSJim Jagielski }
2025*b1cdbd2cSJim Jagielski 
2026*b1cdbd2cSJim Jagielski 
2027*b1cdbd2cSJim Jagielski 
2028*b1cdbd2cSJim Jagielski 
2029*b1cdbd2cSJim Jagielski 
GetForms() const2030*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & ScTabViewShell::GetForms() const
2031*b1cdbd2cSJim Jagielski {
2032*b1cdbd2cSJim Jagielski 	if( !pFormShell || !pFormShell->GetCurPage() ){
2033*b1cdbd2cSJim Jagielski 		static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > aRef;
2034*b1cdbd2cSJim Jagielski 		return aRef;
2035*b1cdbd2cSJim Jagielski 	}
2036*b1cdbd2cSJim Jagielski 	return pFormShell->GetCurPage()->GetForms();
2037*b1cdbd2cSJim Jagielski }
2038