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