xref: /trunk/main/sc/source/ui/app/scmod.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3b3f79822SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4b3f79822SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5b3f79822SAndrew Rist  * distributed with this work for additional information
6b3f79822SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7b3f79822SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8b3f79822SAndrew Rist  * "License"); you may not use this file except in compliance
9b3f79822SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11b3f79822SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13b3f79822SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14b3f79822SAndrew Rist  * software distributed under the License is distributed on an
15b3f79822SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b3f79822SAndrew Rist  * KIND, either express or implied.  See the License for the
17b3f79822SAndrew Rist  * specific language governing permissions and limitations
18b3f79822SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20b3f79822SAndrew Rist  *************************************************************/
21b3f79822SAndrew Rist 
22b3f79822SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
27cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir 
32cdf0e10cSrcweir 
33cdf0e10cSrcweir // INCLUDE ---------------------------------------------------------------
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #include "scitems.hxx"
36cdf0e10cSrcweir #include <sfx2/app.hxx>
37cdf0e10cSrcweir #include <editeng/eeitem.hxx>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #include <editeng/flditem.hxx>
40cdf0e10cSrcweir #include <editeng/outliner.hxx>
41cdf0e10cSrcweir #include <basic/sbstar.hxx>
42cdf0e10cSrcweir 
43cdf0e10cSrcweir #include <sfx2/sfxdlg.hxx>
44cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
45cdf0e10cSrcweir #include <sfx2/objface.hxx>
46cdf0e10cSrcweir 
47cdf0e10cSrcweir #include <svx/hyprlink.hxx>
48cdf0e10cSrcweir #include "IAnyRefDialog.hxx"
49cdf0e10cSrcweir 
50cdf0e10cSrcweir #include <svtools/ehdl.hxx>
51cdf0e10cSrcweir #include <svtools/accessibilityoptions.hxx>
52cdf0e10cSrcweir #include <svl/ctloptions.hxx>
53cdf0e10cSrcweir #include <unotools/useroptions.hxx>
54cdf0e10cSrcweir #include <vcl/status.hxx>
55cdf0e10cSrcweir #include <sfx2/bindings.hxx>
56cdf0e10cSrcweir #include <sfx2/request.hxx>
57cdf0e10cSrcweir #include <sfx2/printer.hxx>
58cdf0e10cSrcweir #include <editeng/langitem.hxx>
59cdf0e10cSrcweir #include <svtools/colorcfg.hxx>
60cdf0e10cSrcweir 
61cdf0e10cSrcweir #include <svl/whiter.hxx>
62cdf0e10cSrcweir #include <svx/selctrl.hxx>
63cdf0e10cSrcweir #include <svx/insctrl.hxx>
64cdf0e10cSrcweir #include <svx/zoomctrl.hxx>
65cdf0e10cSrcweir #include <svx/modctrl.hxx>
66cdf0e10cSrcweir #include <svx/pszctrl.hxx>
67cdf0e10cSrcweir #include <svx/zoomsliderctrl.hxx>
68cdf0e10cSrcweir #include <vcl/msgbox.hxx>
69cdf0e10cSrcweir #include <svl/inethist.hxx>
70cdf0e10cSrcweir #include <vcl/waitobj.hxx>
71cdf0e10cSrcweir #include <svx/svxerr.hxx>
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 
75cdf0e10cSrcweir #include "scmod.hxx"
76cdf0e10cSrcweir #include "global.hxx"
77cdf0e10cSrcweir #include "viewopti.hxx"
78cdf0e10cSrcweir #include "docoptio.hxx"
79cdf0e10cSrcweir #include "appoptio.hxx"
80cdf0e10cSrcweir #include "inputopt.hxx"
81cdf0e10cSrcweir #include "printopt.hxx"
82cdf0e10cSrcweir #include "navicfg.hxx"
83cdf0e10cSrcweir #include "addincfg.hxx"
84cdf0e10cSrcweir #include "tabvwsh.hxx"
85cdf0e10cSrcweir #include "prevwsh.hxx"
86cdf0e10cSrcweir #include "docsh.hxx"
87cdf0e10cSrcweir #include "drwlayer.hxx"
88cdf0e10cSrcweir #include "uiitems.hxx"
89cdf0e10cSrcweir #include "sc.hrc"
90cdf0e10cSrcweir #include "cfgids.hxx"
91cdf0e10cSrcweir #include "inputhdl.hxx"
92cdf0e10cSrcweir #include "inputwin.hxx"
93cdf0e10cSrcweir #include "msgpool.hxx"
94cdf0e10cSrcweir #include "scresid.hxx"
95cdf0e10cSrcweir #include "anyrefdg.hxx"
96cdf0e10cSrcweir #include "dwfunctr.hxx"
97cdf0e10cSrcweir #include "formdata.hxx"
98cdf0e10cSrcweir //CHINA001 #include "tpview.hxx"
99cdf0e10cSrcweir //CHINA001 #include "tpusrlst.hxx"
100cdf0e10cSrcweir //CHINA001 #include "tpcalc.hxx"
101cdf0e10cSrcweir #include "tpprint.hxx"
102cdf0e10cSrcweir //CHINA001 #include "opredlin.hxx"
103cdf0e10cSrcweir #include "transobj.hxx"
104cdf0e10cSrcweir #include "detfunc.hxx"
105cdf0e10cSrcweir #include "preview.hxx"
106cdf0e10cSrcweir 
107cdf0e10cSrcweir #include <svx/xmlsecctrl.hxx>
108cdf0e10cSrcweir 
109cdf0e10cSrcweir 
110cdf0e10cSrcweir #define ScModule
111cdf0e10cSrcweir #include "scslots.hxx"
112cdf0e10cSrcweir 
113cdf0e10cSrcweir #include "scabstdlg.hxx" //CHINA001
114cdf0e10cSrcweir 
115cdf0e10cSrcweir #define SC_IDLE_MIN     150
116cdf0e10cSrcweir #define SC_IDLE_MAX     3000
117cdf0e10cSrcweir #define SC_IDLE_STEP    75
118cdf0e10cSrcweir #define SC_IDLE_COUNT   50
119cdf0e10cSrcweir 
120cdf0e10cSrcweir static sal_uInt16 nIdleCount = 0;
121cdf0e10cSrcweir 
122cdf0e10cSrcweir //------------------------------------------------------------------
123cdf0e10cSrcweir 
SFX_IMPL_INTERFACE(ScModule,SfxShell,ScResId (RID_APPTITLE))124cdf0e10cSrcweir SFX_IMPL_INTERFACE( ScModule, SfxShell, ScResId(RID_APPTITLE) )
125cdf0e10cSrcweir {
126cdf0e10cSrcweir     SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_APPLICATION | SFX_VISIBILITY_DESKTOP | SFX_VISIBILITY_STANDARD | SFX_VISIBILITY_CLIENT | SFX_VISIBILITY_VIEWER,
127cdf0e10cSrcweir                                 ScResId(RID_OBJECTBAR_APP) );
128cdf0e10cSrcweir     SFX_STATUSBAR_REGISTRATION( ScResId(SCCFG_STATUSBAR) );     // nur ID wichtig
129cdf0e10cSrcweir     SFX_CHILDWINDOW_REGISTRATION( SvxHyperlinkDlgWrapper::GetChildWindowId() );
130cdf0e10cSrcweir }
131cdf0e10cSrcweir 
132cdf0e10cSrcweir //------------------------------------------------------------------
133cdf0e10cSrcweir 
ScModule(SfxObjectFactory * pFact)134cdf0e10cSrcweir ScModule::ScModule( SfxObjectFactory* pFact ) :
135cdf0e10cSrcweir     SfxModule( SfxApplication::CreateResManager( "sc" ), sal_False, pFact, NULL ),
136cdf0e10cSrcweir     pSelTransfer( NULL ),
137cdf0e10cSrcweir     pMessagePool( NULL ),
138cdf0e10cSrcweir     pRefInputHandler( NULL ),
139cdf0e10cSrcweir     pViewCfg( NULL ),
140cdf0e10cSrcweir     pDocCfg( NULL ),
141cdf0e10cSrcweir     pAppCfg( NULL ),
142cdf0e10cSrcweir     pInputCfg( NULL ),
143cdf0e10cSrcweir     pPrintCfg( NULL ),
144cdf0e10cSrcweir     pNavipiCfg( NULL ),
145cdf0e10cSrcweir     pAddInCfg( NULL ),
146cdf0e10cSrcweir     pColorConfig( NULL ),
147cdf0e10cSrcweir     pAccessOptions( NULL ),
148cdf0e10cSrcweir     pCTLOptions( NULL ),
149cdf0e10cSrcweir     pUserOptions( NULL ),
150cdf0e10cSrcweir     pErrorHdl( NULL ),
151cdf0e10cSrcweir     pSvxErrorHdl( NULL ),
152cdf0e10cSrcweir     pFormEditData( NULL ),
153cdf0e10cSrcweir     nCurRefDlgId( 0 ),
154cdf0e10cSrcweir     bIsWaterCan( sal_False ),
155cdf0e10cSrcweir     bIsInEditCommand( sal_False ),
156cdf0e10cSrcweir     bIsInExecuteDrop( sal_False ),
157cdf0e10cSrcweir     mbIsInSharedDocLoading( false ),
158cdf0e10cSrcweir     mbIsInSharedDocSaving( false )
159cdf0e10cSrcweir {
160cdf0e10cSrcweir     //  im ctor ist der ResManager (DLL-Daten) noch nicht initialisiert!
161cdf0e10cSrcweir 
162cdf0e10cSrcweir     SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("StarCalc")));       // fuer Basic
163cdf0e10cSrcweir 
164cdf0e10cSrcweir     ResetDragObject();
165cdf0e10cSrcweir     SetClipObject( NULL, NULL );
166cdf0e10cSrcweir 
167cdf0e10cSrcweir     //  InputHandler braucht nicht mehr angelegt zu werden
168cdf0e10cSrcweir 
169cdf0e10cSrcweir     //  ErrorHandler anlegen - war in Init()
170cdf0e10cSrcweir     //  zwischen OfficeApplication::Init und ScGlobal::Init
171cdf0e10cSrcweir     SvxErrorHandler::Get();
172cdf0e10cSrcweir     pErrorHdl    = new SfxErrorHandler( RID_ERRHDLSC,
173cdf0e10cSrcweir                                         ERRCODE_AREA_SC,
174cdf0e10cSrcweir                                         ERRCODE_AREA_APP2-1,
175cdf0e10cSrcweir                                         GetResMgr() );
176cdf0e10cSrcweir 
177cdf0e10cSrcweir     aSpellTimer.SetTimeout(10);
178cdf0e10cSrcweir     aSpellTimer.SetTimeoutHdl( LINK( this, ScModule, SpellTimerHdl ) );
179cdf0e10cSrcweir     aIdleTimer.SetTimeout(SC_IDLE_MIN);
180cdf0e10cSrcweir     aIdleTimer.SetTimeoutHdl( LINK( this, ScModule, IdleHandler ) );
181cdf0e10cSrcweir     aIdleTimer.Start();
182cdf0e10cSrcweir 
183cdf0e10cSrcweir     pMessagePool = new ScMessagePool;
184cdf0e10cSrcweir     pMessagePool->FreezeIdRanges();
185cdf0e10cSrcweir     SetPool( pMessagePool );
186cdf0e10cSrcweir     ScGlobal::InitTextHeight( pMessagePool );
187cdf0e10cSrcweir 
188cdf0e10cSrcweir     StartListening( *SFX_APP() );       // for SFX_HINT_DEINITIALIZING
189cdf0e10cSrcweir }
190cdf0e10cSrcweir 
~ScModule()191cdf0e10cSrcweir ScModule::~ScModule()
192cdf0e10cSrcweir {
193cdf0e10cSrcweir     DBG_ASSERT( !pSelTransfer, "Selection Transfer object not deleted" );
194cdf0e10cSrcweir 
195cdf0e10cSrcweir     //  InputHandler braucht nicht mehr geloescht zu werden (gibt keinen an der App mehr)
196cdf0e10cSrcweir 
197cdf0e10cSrcweir     SfxItemPool::Free(pMessagePool);
198cdf0e10cSrcweir 
199cdf0e10cSrcweir     DELETEZ( pFormEditData );
200cdf0e10cSrcweir 
201cdf0e10cSrcweir     delete pErrorHdl;
202cdf0e10cSrcweir //  delete pSvxErrorHdl;
203cdf0e10cSrcweir 
204cdf0e10cSrcweir     ScGlobal::Clear();      // ruft auch ScDocumentPool::DeleteVersionMaps();
205cdf0e10cSrcweir 
206cdf0e10cSrcweir     DeleteCfg();            // wurde mal aus Exit() gerufen
207cdf0e10cSrcweir }
208cdf0e10cSrcweir 
209cdf0e10cSrcweir //------------------------------------------------------------------
ConfigurationChanged(utl::ConfigurationBroadcaster * p,sal_uInt32)210cdf0e10cSrcweir void ScModule::ConfigurationChanged( utl::ConfigurationBroadcaster* p, sal_uInt32 )
211cdf0e10cSrcweir {
212cdf0e10cSrcweir     if ( p == pColorConfig || p == pAccessOptions )
213cdf0e10cSrcweir     {
214cdf0e10cSrcweir         //  Test if detective objects have to be updated with new colors
215cdf0e10cSrcweir         //  (if the detective colors haven't been used yet, there's nothing to update)
216cdf0e10cSrcweir         if ( ScDetectiveFunc::IsColorsInitialized() )
217cdf0e10cSrcweir         {
218cdf0e10cSrcweir             const svtools::ColorConfig& rColors = GetColorConfig();
219cdf0e10cSrcweir             sal_Bool bArrows =
220cdf0e10cSrcweir                 ( ScDetectiveFunc::GetArrowColor() != (ColorData)rColors.GetColorValue(svtools::CALCDETECTIVE).nColor ||
221cdf0e10cSrcweir                   ScDetectiveFunc::GetErrorColor() != (ColorData)rColors.GetColorValue(svtools::CALCDETECTIVEERROR).nColor );
222cdf0e10cSrcweir             sal_Bool bComments =
223cdf0e10cSrcweir                 ( ScDetectiveFunc::GetCommentColor() != (ColorData)rColors.GetColorValue(svtools::CALCNOTESBACKGROUND).nColor );
224cdf0e10cSrcweir             if ( bArrows || bComments )
225cdf0e10cSrcweir             {
226cdf0e10cSrcweir                 ScDetectiveFunc::InitializeColors();        // get the new colors
227cdf0e10cSrcweir 
228cdf0e10cSrcweir                 //  update detective objects in all open documents
229cdf0e10cSrcweir                 SfxObjectShell* pObjSh = SfxObjectShell::GetFirst();
230cdf0e10cSrcweir                 while ( pObjSh )
231cdf0e10cSrcweir                 {
232cdf0e10cSrcweir                     if ( pObjSh->Type() == TYPE(ScDocShell) )
233cdf0e10cSrcweir                     {
234cdf0e10cSrcweir                         ScDocShell* pDocSh = ((ScDocShell*)pObjSh);
235cdf0e10cSrcweir                         if ( bArrows )
236cdf0e10cSrcweir                             ScDetectiveFunc( pDocSh->GetDocument(), 0 ).UpdateAllArrowColors();
237cdf0e10cSrcweir                         if ( bComments )
238cdf0e10cSrcweir                             ScDetectiveFunc::UpdateAllComments( *pDocSh->GetDocument() );
239cdf0e10cSrcweir                     }
240cdf0e10cSrcweir                     pObjSh = SfxObjectShell::GetNext( *pObjSh );
241cdf0e10cSrcweir                 }
242cdf0e10cSrcweir             }
243cdf0e10cSrcweir         }
244cdf0e10cSrcweir 
245cdf0e10cSrcweir         //  force all views to repaint, using the new options
246cdf0e10cSrcweir 
247cdf0e10cSrcweir         SfxViewShell* pViewShell = SfxViewShell::GetFirst();
248cdf0e10cSrcweir         while(pViewShell)
249cdf0e10cSrcweir         {
250cdf0e10cSrcweir             if ( pViewShell->ISA(ScTabViewShell) )
251cdf0e10cSrcweir             {
252cdf0e10cSrcweir                 ScTabViewShell* pViewSh = (ScTabViewShell*)pViewShell;
253cdf0e10cSrcweir                 pViewSh->PaintGrid();
254cdf0e10cSrcweir                 pViewSh->PaintTop();
255cdf0e10cSrcweir                 pViewSh->PaintLeft();
256cdf0e10cSrcweir                 pViewSh->PaintExtras();
257cdf0e10cSrcweir 
258cdf0e10cSrcweir                 ScInputHandler* pHdl = pViewSh->GetInputHandler();
259cdf0e10cSrcweir                 if ( pHdl )
260cdf0e10cSrcweir                     pHdl->ForgetLastPattern();  // EditEngine BackgroundColor may change
261cdf0e10cSrcweir             }
262cdf0e10cSrcweir             else if ( pViewShell->ISA(ScPreviewShell) )
263cdf0e10cSrcweir             {
264cdf0e10cSrcweir                 Window* pWin = pViewShell->GetWindow();
265cdf0e10cSrcweir                 if (pWin)
266cdf0e10cSrcweir                     pWin->Invalidate();
267cdf0e10cSrcweir             }
268cdf0e10cSrcweir             pViewShell = SfxViewShell::GetNext( *pViewShell );
269cdf0e10cSrcweir         }
270cdf0e10cSrcweir     }
271cdf0e10cSrcweir     else if ( p == pCTLOptions )
272cdf0e10cSrcweir     {
273cdf0e10cSrcweir         //  for all documents: set digit language for printer, recalc output factor, update row heights
274cdf0e10cSrcweir         SfxObjectShell* pObjSh = SfxObjectShell::GetFirst();
275cdf0e10cSrcweir         while ( pObjSh )
276cdf0e10cSrcweir         {
277cdf0e10cSrcweir             if ( pObjSh->Type() == TYPE(ScDocShell) )
278cdf0e10cSrcweir             {
279cdf0e10cSrcweir                 ScDocShell* pDocSh = ((ScDocShell*)pObjSh);
280cdf0e10cSrcweir                 OutputDevice* pPrinter = pDocSh->GetPrinter();
281cdf0e10cSrcweir                 if ( pPrinter )
282cdf0e10cSrcweir                     pPrinter->SetDigitLanguage( GetOptDigitLanguage() );
283cdf0e10cSrcweir 
284cdf0e10cSrcweir                 pDocSh->CalcOutputFactor();
285cdf0e10cSrcweir 
286cdf0e10cSrcweir                 SCTAB nTabCount = pDocSh->GetDocument()->GetTableCount();
287cdf0e10cSrcweir                 for (SCTAB nTab=0; nTab<nTabCount; nTab++)
288cdf0e10cSrcweir                     pDocSh->AdjustRowHeight( 0, MAXROW, nTab );
289cdf0e10cSrcweir             }
290cdf0e10cSrcweir             pObjSh = SfxObjectShell::GetNext( *pObjSh );
291cdf0e10cSrcweir         }
292cdf0e10cSrcweir 
293cdf0e10cSrcweir         //  for all views (table and preview): update digit language
294cdf0e10cSrcweir         SfxViewShell* pSh = SfxViewShell::GetFirst();
295cdf0e10cSrcweir         while ( pSh )
296cdf0e10cSrcweir         {
297cdf0e10cSrcweir             if ( pSh->ISA( ScTabViewShell ) )
298cdf0e10cSrcweir             {
299cdf0e10cSrcweir                 ScTabViewShell* pViewSh = (ScTabViewShell*)pSh;
300cdf0e10cSrcweir 
301cdf0e10cSrcweir                 //  set ref-device for EditEngine (re-evaluates digit settings)
302cdf0e10cSrcweir                 ScInputHandler* pHdl = GetInputHdl(pViewSh);
303cdf0e10cSrcweir                 if (pHdl)
304cdf0e10cSrcweir                     pHdl->UpdateRefDevice();
305cdf0e10cSrcweir 
306cdf0e10cSrcweir                 pViewSh->DigitLanguageChanged();
307cdf0e10cSrcweir                 pViewSh->PaintGrid();
308cdf0e10cSrcweir             }
309cdf0e10cSrcweir             else if ( pSh->ISA( ScPreviewShell ) )
310cdf0e10cSrcweir             {
311cdf0e10cSrcweir                 ScPreviewShell* pPreviewSh = (ScPreviewShell*)pSh;
312cdf0e10cSrcweir                 ScPreview* pPreview = pPreviewSh->GetPreview();
313cdf0e10cSrcweir 
314cdf0e10cSrcweir                 pPreview->SetDigitLanguage( GetOptDigitLanguage() );
315cdf0e10cSrcweir                 pPreview->Invalidate();
316cdf0e10cSrcweir             }
317cdf0e10cSrcweir 
318cdf0e10cSrcweir             pSh = SfxViewShell::GetNext( *pSh );
319cdf0e10cSrcweir         }
320cdf0e10cSrcweir     }
321cdf0e10cSrcweir }
322cdf0e10cSrcweir 
Notify(SfxBroadcaster &,const SfxHint & rHint)323cdf0e10cSrcweir void ScModule::Notify( SfxBroadcaster&, const SfxHint& rHint )
324cdf0e10cSrcweir {
325cdf0e10cSrcweir     if ( rHint.ISA(SfxSimpleHint) )
326cdf0e10cSrcweir     {
327cdf0e10cSrcweir         sal_uLong nHintId = ((SfxSimpleHint&)rHint).GetId();
328cdf0e10cSrcweir         if ( nHintId == SFX_HINT_DEINITIALIZING )
329cdf0e10cSrcweir         {
330cdf0e10cSrcweir             //  ConfigItems must be removed before ConfigManager
331cdf0e10cSrcweir             DeleteCfg();
332cdf0e10cSrcweir         }
333cdf0e10cSrcweir     }
334cdf0e10cSrcweir }
335cdf0e10cSrcweir 
336cdf0e10cSrcweir //------------------------------------------------------------------
337cdf0e10cSrcweir 
DeleteCfg()338cdf0e10cSrcweir void ScModule::DeleteCfg()
339cdf0e10cSrcweir {
340cdf0e10cSrcweir     DELETEZ( pViewCfg ); // Speichern passiert vor Exit() automatisch
341cdf0e10cSrcweir     DELETEZ( pDocCfg );
342cdf0e10cSrcweir     DELETEZ( pAppCfg );
343cdf0e10cSrcweir     DELETEZ( pInputCfg );
344cdf0e10cSrcweir     DELETEZ( pPrintCfg );
345cdf0e10cSrcweir     DELETEZ( pNavipiCfg );
346cdf0e10cSrcweir     DELETEZ( pAddInCfg );
347cdf0e10cSrcweir 
348cdf0e10cSrcweir     if ( pColorConfig )
349cdf0e10cSrcweir     {
350cdf0e10cSrcweir         pColorConfig->RemoveListener(this);
351cdf0e10cSrcweir         DELETEZ( pColorConfig );
352cdf0e10cSrcweir     }
353cdf0e10cSrcweir     if ( pAccessOptions )
354cdf0e10cSrcweir     {
355cdf0e10cSrcweir         pAccessOptions->RemoveListener(this);
356cdf0e10cSrcweir         DELETEZ( pAccessOptions );
357cdf0e10cSrcweir     }
358cdf0e10cSrcweir     if ( pCTLOptions )
359cdf0e10cSrcweir     {
360cdf0e10cSrcweir         pCTLOptions->RemoveListener(this);
361cdf0e10cSrcweir         DELETEZ( pCTLOptions );
362cdf0e10cSrcweir     }
363cdf0e10cSrcweir     if( pUserOptions )
364cdf0e10cSrcweir     {
365cdf0e10cSrcweir         DELETEZ( pUserOptions );
366cdf0e10cSrcweir     }
367cdf0e10cSrcweir }
368cdf0e10cSrcweir 
369cdf0e10cSrcweir //------------------------------------------------------------------
370cdf0e10cSrcweir //
371cdf0e10cSrcweir //      von der Applikation verschoben:
372cdf0e10cSrcweir //
373cdf0e10cSrcweir //------------------------------------------------------------------
374cdf0e10cSrcweir 
Execute(SfxRequest & rReq)375cdf0e10cSrcweir void ScModule::Execute( SfxRequest& rReq )
376cdf0e10cSrcweir {
377cdf0e10cSrcweir     SfxViewFrame* pViewFrm = SfxViewFrame::Current();
378cdf0e10cSrcweir     SfxBindings* pBindings = pViewFrm ? &pViewFrm->GetBindings() : NULL;
379cdf0e10cSrcweir 
380cdf0e10cSrcweir     const SfxItemSet*   pReqArgs    = rReq.GetArgs();
381cdf0e10cSrcweir     sal_uInt16              nSlot       = rReq.GetSlot();
382cdf0e10cSrcweir 
383cdf0e10cSrcweir     switch ( nSlot )
384cdf0e10cSrcweir     {
385cdf0e10cSrcweir         case SID_CHOOSE_DESIGN:
386cdf0e10cSrcweir             {
387cdf0e10cSrcweir                 String aMacroName =
388cdf0e10cSrcweir                     String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Template.Samples.ShowStyles"));
389cdf0e10cSrcweir                 SfxApplication::CallAppBasic( aMacroName );
390cdf0e10cSrcweir             }
391cdf0e10cSrcweir             break;
392cdf0e10cSrcweir         case SID_EURO_CONVERTER:
393cdf0e10cSrcweir             {
394cdf0e10cSrcweir                 String aMacroName =
395cdf0e10cSrcweir                     String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Euro.ConvertRun.Main"));
396cdf0e10cSrcweir                 SfxApplication::CallAppBasic( aMacroName );
397cdf0e10cSrcweir             }
398cdf0e10cSrcweir             break;
399cdf0e10cSrcweir         case SID_AUTOSPELL_CHECK:
400cdf0e10cSrcweir             {
401cdf0e10cSrcweir                 sal_Bool bSet;
402cdf0e10cSrcweir                 const SfxPoolItem* pItem;
403cdf0e10cSrcweir                 if ( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( nSlot, sal_True, &pItem ) )
404cdf0e10cSrcweir                     bSet = ((const SfxBoolItem*)pItem)->GetValue();
405cdf0e10cSrcweir                 else
406cdf0e10cSrcweir                 {                       //  Toggle
407cdf0e10cSrcweir                     ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current());
408cdf0e10cSrcweir                     if ( pDocSh )
409cdf0e10cSrcweir                         bSet = !pDocSh->GetDocument()->GetDocOptions().IsAutoSpell();
410cdf0e10cSrcweir                     else
411cdf0e10cSrcweir                         bSet = !GetDocOptions().IsAutoSpell();
412cdf0e10cSrcweir                 }
413cdf0e10cSrcweir 
414cdf0e10cSrcweir                 SfxItemSet aSet( GetPool(), SID_AUTOSPELL_CHECK, SID_AUTOSPELL_CHECK );
415cdf0e10cSrcweir                 aSet.Put( SfxBoolItem( SID_AUTOSPELL_CHECK, bSet ) );
416cdf0e10cSrcweir                 ModifyOptions( aSet );
417cdf0e10cSrcweir                 rReq.Done();
418cdf0e10cSrcweir             }
419cdf0e10cSrcweir             break;
420cdf0e10cSrcweir 
421cdf0e10cSrcweir         case SID_ATTR_METRIC:
422cdf0e10cSrcweir             {
423cdf0e10cSrcweir                 const SfxPoolItem* pItem;
424cdf0e10cSrcweir                 if ( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( nSlot, sal_True, &pItem ) )
425cdf0e10cSrcweir                 {
426cdf0e10cSrcweir                     FieldUnit eUnit = (FieldUnit)((const SfxUInt16Item*)pItem)->GetValue();
427cdf0e10cSrcweir                     switch( eUnit )
428cdf0e10cSrcweir                     {
429cdf0e10cSrcweir                         case FUNIT_MM:      // nur die Einheiten, die auch im Dialog stehen
430cdf0e10cSrcweir                         case FUNIT_CM:
431cdf0e10cSrcweir                         case FUNIT_INCH:
432cdf0e10cSrcweir                         case FUNIT_PICA:
433cdf0e10cSrcweir                         case FUNIT_POINT:
434cdf0e10cSrcweir                             {
435cdf0e10cSrcweir                                 PutItem( *pItem );
436cdf0e10cSrcweir                                 ScAppOptions aNewOpts( GetAppOptions() );
437cdf0e10cSrcweir                                 aNewOpts.SetAppMetric( eUnit );
438cdf0e10cSrcweir                                 SetAppOptions( aNewOpts );
439cdf0e10cSrcweir                                 rReq.Done();
440cdf0e10cSrcweir                             }
441cdf0e10cSrcweir                             break;
442cdf0e10cSrcweir                         default:
443cdf0e10cSrcweir                         {
444cdf0e10cSrcweir                             // added to avoid warnings
445cdf0e10cSrcweir                         }
446cdf0e10cSrcweir                     }
447cdf0e10cSrcweir                 }
448cdf0e10cSrcweir             }
449cdf0e10cSrcweir             break;
450cdf0e10cSrcweir 
451cdf0e10cSrcweir         case FID_AUTOCOMPLETE:
452cdf0e10cSrcweir             {
453cdf0e10cSrcweir                 ScAppOptions aNewOpts( GetAppOptions() );
454cdf0e10cSrcweir                 sal_Bool bNew = !aNewOpts.GetAutoComplete();
455cdf0e10cSrcweir                 aNewOpts.SetAutoComplete( bNew );
456cdf0e10cSrcweir                 SetAppOptions( aNewOpts );
457cdf0e10cSrcweir                 ScInputHandler::SetAutoComplete( bNew );
458cdf0e10cSrcweir                 if (pBindings)
459cdf0e10cSrcweir                     pBindings->Invalidate( FID_AUTOCOMPLETE );
460cdf0e10cSrcweir                 rReq.Done();
461cdf0e10cSrcweir             }
462cdf0e10cSrcweir             break;
463cdf0e10cSrcweir 
464cdf0e10cSrcweir         case SID_DETECTIVE_AUTO:
465cdf0e10cSrcweir             {
466cdf0e10cSrcweir                 ScAppOptions aNewOpts( GetAppOptions() );
467cdf0e10cSrcweir                 sal_Bool bNew = !aNewOpts.GetDetectiveAuto();
468cdf0e10cSrcweir                 SFX_REQUEST_ARG( rReq, pAuto, SfxBoolItem, SID_DETECTIVE_AUTO, sal_False );
469cdf0e10cSrcweir                 if ( pAuto )
470cdf0e10cSrcweir                     bNew = pAuto->GetValue();
471cdf0e10cSrcweir 
472cdf0e10cSrcweir                 aNewOpts.SetDetectiveAuto( bNew );
473cdf0e10cSrcweir                 SetAppOptions( aNewOpts );
474cdf0e10cSrcweir                 if (pBindings)
475cdf0e10cSrcweir                     pBindings->Invalidate( SID_DETECTIVE_AUTO );
476cdf0e10cSrcweir                 rReq.AppendItem( SfxBoolItem( SID_DETECTIVE_AUTO, bNew ) );
477cdf0e10cSrcweir                 rReq.Done();
478cdf0e10cSrcweir             }
479cdf0e10cSrcweir             break;
480cdf0e10cSrcweir 
481cdf0e10cSrcweir         case SID_PSZ_FUNCTION:
482cdf0e10cSrcweir             if (pReqArgs)
483cdf0e10cSrcweir             {
484cdf0e10cSrcweir                 const SfxUInt16Item& rItem = (const SfxUInt16Item&)pReqArgs->Get(SID_PSZ_FUNCTION);
485cdf0e10cSrcweir                 DBG_ASSERT(rItem.ISA(SfxUInt16Item),"falscher Parameter");
486cdf0e10cSrcweir 
487cdf0e10cSrcweir                 ScAppOptions aNewOpts( GetAppOptions() );
488cdf0e10cSrcweir                 aNewOpts.SetStatusFunc( rItem.GetValue() );
489cdf0e10cSrcweir                 SetAppOptions( aNewOpts );
490cdf0e10cSrcweir 
491cdf0e10cSrcweir                 if (pBindings)
492cdf0e10cSrcweir                 {
493cdf0e10cSrcweir                     pBindings->Invalidate( SID_TABLE_CELL );
494cdf0e10cSrcweir                     pBindings->Update( SID_TABLE_CELL );            // sofort
495cdf0e10cSrcweir 
496cdf0e10cSrcweir                     pBindings->Invalidate( SID_PSZ_FUNCTION );
497cdf0e10cSrcweir                     pBindings->Update( SID_PSZ_FUNCTION );
498cdf0e10cSrcweir                     // falls Menue gleich wieder aufgeklappt wird
499cdf0e10cSrcweir                 }
500cdf0e10cSrcweir             }
501cdf0e10cSrcweir             break;
502cdf0e10cSrcweir 
503cdf0e10cSrcweir         case SID_ATTR_LANGUAGE:
504cdf0e10cSrcweir         case SID_ATTR_CHAR_CJK_LANGUAGE:
505cdf0e10cSrcweir         case SID_ATTR_CHAR_CTL_LANGUAGE:
506cdf0e10cSrcweir             {
507cdf0e10cSrcweir                 const SfxPoolItem* pItem;
508cdf0e10cSrcweir                 if ( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( GetPool().GetWhich(nSlot), sal_True, &pItem ) )
509cdf0e10cSrcweir                 {
510cdf0e10cSrcweir                     ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current());
511cdf0e10cSrcweir                     ScDocument* pDoc = pDocSh ? pDocSh->GetDocument() : NULL;
512cdf0e10cSrcweir                     if ( pDoc )
513cdf0e10cSrcweir                     {
514cdf0e10cSrcweir                         LanguageType eNewLang = ((SvxLanguageItem*)pItem)->GetLanguage();
515cdf0e10cSrcweir                         LanguageType eLatin, eCjk, eCtl;
516cdf0e10cSrcweir                         pDoc->GetLanguage( eLatin, eCjk, eCtl );
517cdf0e10cSrcweir                         LanguageType eOld = ( nSlot == SID_ATTR_CHAR_CJK_LANGUAGE ) ? eCjk :
518cdf0e10cSrcweir                                             ( ( nSlot == SID_ATTR_CHAR_CTL_LANGUAGE ) ? eCtl : eLatin );
519cdf0e10cSrcweir                         if ( eNewLang != eOld )
520cdf0e10cSrcweir                         {
521cdf0e10cSrcweir                             if ( nSlot == SID_ATTR_CHAR_CJK_LANGUAGE )
522cdf0e10cSrcweir                                 eCjk = eNewLang;
523cdf0e10cSrcweir                             else if ( nSlot == SID_ATTR_CHAR_CTL_LANGUAGE )
524cdf0e10cSrcweir                                 eCtl = eNewLang;
525cdf0e10cSrcweir                             else
526cdf0e10cSrcweir                                 eLatin = eNewLang;
527cdf0e10cSrcweir 
528cdf0e10cSrcweir                             pDoc->SetLanguage( eLatin, eCjk, eCtl );
529cdf0e10cSrcweir 
530cdf0e10cSrcweir                             ScInputHandler* pInputHandler = GetInputHdl();
531cdf0e10cSrcweir                             if ( pInputHandler )
532cdf0e10cSrcweir                                 pInputHandler->UpdateSpellSettings();   // EditEngine-Flags
533cdf0e10cSrcweir                             ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell, SfxViewShell::Current());
534cdf0e10cSrcweir                             if ( pViewSh )
535cdf0e10cSrcweir                                 pViewSh->UpdateDrawTextOutliner();      // EditEngine-Flags
536cdf0e10cSrcweir 
537cdf0e10cSrcweir                             pDocSh->SetDocumentModified();
538cdf0e10cSrcweir                         }
539cdf0e10cSrcweir                     }
540cdf0e10cSrcweir                 }
541cdf0e10cSrcweir             }
542cdf0e10cSrcweir             break;
543cdf0e10cSrcweir 
544cdf0e10cSrcweir         case FID_FOCUS_POSWND:
545cdf0e10cSrcweir             {
546cdf0e10cSrcweir                 ScInputHandler* pHdl = GetInputHdl();
547cdf0e10cSrcweir                 if (pHdl)
548cdf0e10cSrcweir                 {
549cdf0e10cSrcweir                     ScInputWindow* pWin = pHdl->GetInputWindow();
550cdf0e10cSrcweir                     if (pWin)
551cdf0e10cSrcweir                         pWin->PosGrabFocus();
552cdf0e10cSrcweir                 }
553cdf0e10cSrcweir                 rReq.Done();
554cdf0e10cSrcweir             }
555cdf0e10cSrcweir             break;
556cdf0e10cSrcweir 
557cdf0e10cSrcweir         case SID_OPEN_XML_FILTERSETTINGS:
558cdf0e10cSrcweir         {
559cdf0e10cSrcweir             try
560cdf0e10cSrcweir             {
561cdf0e10cSrcweir                 com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XExecutableDialog > xDialog(::comphelper::getProcessServiceFactory()->createInstance(rtl::OUString::createFromAscii("com.sun.star.comp.ui.XSLTFilterDialog")), com::sun::star::uno::UNO_QUERY);
562cdf0e10cSrcweir                 if( xDialog.is() )
563cdf0e10cSrcweir                 {
564cdf0e10cSrcweir                     xDialog->execute();
565cdf0e10cSrcweir                 }
566cdf0e10cSrcweir             }
567cdf0e10cSrcweir             catch( ::com::sun::star::uno::RuntimeException& )
568cdf0e10cSrcweir             {
569cdf0e10cSrcweir             }
570cdf0e10cSrcweir         }
571cdf0e10cSrcweir         break;
572cdf0e10cSrcweir 
573cdf0e10cSrcweir         default:
574cdf0e10cSrcweir             DBG_ERROR( "ScApplication: Unknown Message." );
575cdf0e10cSrcweir             break;
576cdf0e10cSrcweir     }
577cdf0e10cSrcweir }
578cdf0e10cSrcweir 
GetState(SfxItemSet & rSet)579cdf0e10cSrcweir void ScModule::GetState( SfxItemSet& rSet )
580cdf0e10cSrcweir {
581cdf0e10cSrcweir     SfxWhichIter aIter(rSet);
582cdf0e10cSrcweir     sal_uInt16 nWhich = aIter.FirstWhich();
583cdf0e10cSrcweir     while ( nWhich )
584cdf0e10cSrcweir     {
585cdf0e10cSrcweir         switch ( nWhich )
586cdf0e10cSrcweir         {
587cdf0e10cSrcweir             case FID_AUTOCOMPLETE:
588cdf0e10cSrcweir                 rSet.Put( SfxBoolItem( nWhich, GetAppOptions().GetAutoComplete() ) );
589cdf0e10cSrcweir                 break;
590cdf0e10cSrcweir             case SID_DETECTIVE_AUTO:
591cdf0e10cSrcweir                 rSet.Put( SfxBoolItem( nWhich, GetAppOptions().GetDetectiveAuto() ) );
592cdf0e10cSrcweir                 break;
593cdf0e10cSrcweir             case SID_PSZ_FUNCTION:
594cdf0e10cSrcweir                 rSet.Put( SfxUInt16Item( nWhich, GetAppOptions().GetStatusFunc() ) );
595cdf0e10cSrcweir                 break;
596cdf0e10cSrcweir             case SID_ATTR_METRIC:
597cdf0e10cSrcweir                 rSet.Put( SfxUInt16Item( nWhich, sal::static_int_cast<sal_uInt16>(GetAppOptions().GetAppMetric()) ) );
598cdf0e10cSrcweir                 break;
599cdf0e10cSrcweir             case SID_AUTOSPELL_CHECK:
600cdf0e10cSrcweir                 {
601cdf0e10cSrcweir                     sal_Bool bAuto;
602cdf0e10cSrcweir                     ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current());
603cdf0e10cSrcweir                     if ( pDocSh )
604cdf0e10cSrcweir                         bAuto = pDocSh->GetDocument()->GetDocOptions().IsAutoSpell();
605cdf0e10cSrcweir                     else
606cdf0e10cSrcweir                     {
607cdf0e10cSrcweir                         sal_uInt16 nDummyLang, nDummyCjk, nDummyCtl;
608cdf0e10cSrcweir                         GetSpellSettings( nDummyLang, nDummyCjk, nDummyCtl, bAuto );
609cdf0e10cSrcweir                     }
610cdf0e10cSrcweir                     rSet.Put( SfxBoolItem( nWhich, bAuto ) );
611cdf0e10cSrcweir                 }
612cdf0e10cSrcweir                 break;
613cdf0e10cSrcweir             case SID_ATTR_LANGUAGE:
614cdf0e10cSrcweir             case ATTR_CJK_FONT_LANGUAGE:        // WID for SID_ATTR_CHAR_CJK_LANGUAGE
615cdf0e10cSrcweir             case ATTR_CTL_FONT_LANGUAGE:        // WID for SID_ATTR_CHAR_CTL_LANGUAGE
616cdf0e10cSrcweir                 {
617cdf0e10cSrcweir                     ScDocShell* pDocSh = PTR_CAST(ScDocShell, SfxObjectShell::Current());
618cdf0e10cSrcweir                     ScDocument* pDoc = pDocSh ? pDocSh->GetDocument() : NULL;
619cdf0e10cSrcweir                     if ( pDoc )
620cdf0e10cSrcweir                     {
621cdf0e10cSrcweir                         LanguageType eLatin, eCjk, eCtl;
622cdf0e10cSrcweir                         pDoc->GetLanguage( eLatin, eCjk, eCtl );
623cdf0e10cSrcweir                         LanguageType eLang = ( nWhich == ATTR_CJK_FONT_LANGUAGE ) ? eCjk :
624cdf0e10cSrcweir                                             ( ( nWhich == ATTR_CTL_FONT_LANGUAGE ) ? eCtl : eLatin );
625cdf0e10cSrcweir                         rSet.Put( SvxLanguageItem( eLang, nWhich ) );
626cdf0e10cSrcweir                     }
627cdf0e10cSrcweir                 }
628cdf0e10cSrcweir                 break;
629cdf0e10cSrcweir 
630cdf0e10cSrcweir         }
631cdf0e10cSrcweir         nWhich = aIter.NextWhich();
632cdf0e10cSrcweir     }
633cdf0e10cSrcweir }
634cdf0e10cSrcweir 
635cdf0e10cSrcweir 
HideDisabledSlots(SfxItemSet & rSet)636cdf0e10cSrcweir void ScModule::HideDisabledSlots( SfxItemSet& rSet )
637cdf0e10cSrcweir {
638cdf0e10cSrcweir     if( SfxViewFrame* pViewFrm = SfxViewFrame::Current() )
639cdf0e10cSrcweir     {
640cdf0e10cSrcweir         SfxBindings& rBindings = pViewFrm->GetBindings();
641cdf0e10cSrcweir         SfxWhichIter aIter( rSet );
642cdf0e10cSrcweir         for( sal_uInt16 nWhich = aIter.FirstWhich(); nWhich != 0; nWhich = aIter.NextWhich() )
643cdf0e10cSrcweir         {
644cdf0e10cSrcweir             ScViewUtil::HideDisabledSlot( rSet, rBindings, nWhich );
645cdf0e10cSrcweir             // always disable the slots
646cdf0e10cSrcweir             rSet.DisableItem( nWhich );
647cdf0e10cSrcweir         }
648cdf0e10cSrcweir     }
649cdf0e10cSrcweir }
650cdf0e10cSrcweir 
651cdf0e10cSrcweir 
652cdf0e10cSrcweir //------------------------------------------------------------------
653cdf0e10cSrcweir 
ResetDragObject()654cdf0e10cSrcweir void ScModule::ResetDragObject()
655cdf0e10cSrcweir {
656cdf0e10cSrcweir     aDragData.pCellTransfer = NULL;
657cdf0e10cSrcweir     aDragData.pDrawTransfer = NULL;
658cdf0e10cSrcweir 
659cdf0e10cSrcweir     aDragData.aLinkDoc.Erase();
660cdf0e10cSrcweir     aDragData.aLinkTable.Erase();
661cdf0e10cSrcweir     aDragData.aLinkArea.Erase();
662cdf0e10cSrcweir     aDragData.pJumpLocalDoc = NULL;
663cdf0e10cSrcweir     aDragData.aJumpTarget.Erase();
664cdf0e10cSrcweir     aDragData.aJumpText.Erase();
665cdf0e10cSrcweir }
666cdf0e10cSrcweir 
SetDragObject(ScTransferObj * pCellObj,ScDrawTransferObj * pDrawObj)667cdf0e10cSrcweir void ScModule::SetDragObject( ScTransferObj* pCellObj, ScDrawTransferObj* pDrawObj )
668cdf0e10cSrcweir {
669cdf0e10cSrcweir     ResetDragObject();
670cdf0e10cSrcweir     aDragData.pCellTransfer = pCellObj;
671cdf0e10cSrcweir     aDragData.pDrawTransfer = pDrawObj;
672cdf0e10cSrcweir }
673cdf0e10cSrcweir 
SetDragLink(const String & rDoc,const String & rTab,const String & rArea)674cdf0e10cSrcweir void ScModule::SetDragLink( const String& rDoc, const String& rTab, const String& rArea )
675cdf0e10cSrcweir {
676cdf0e10cSrcweir     ResetDragObject();
677cdf0e10cSrcweir 
678cdf0e10cSrcweir     aDragData.aLinkDoc   = rDoc;
679cdf0e10cSrcweir     aDragData.aLinkTable = rTab;
680cdf0e10cSrcweir     aDragData.aLinkArea  = rArea;
681cdf0e10cSrcweir }
682cdf0e10cSrcweir 
SetDragJump(ScDocument * pLocalDoc,const String & rTarget,const String & rText)683cdf0e10cSrcweir void ScModule::SetDragJump( ScDocument* pLocalDoc, const String& rTarget, const String& rText )
684cdf0e10cSrcweir {
685cdf0e10cSrcweir     ResetDragObject();
686cdf0e10cSrcweir 
687cdf0e10cSrcweir     aDragData.pJumpLocalDoc = pLocalDoc;
688cdf0e10cSrcweir     aDragData.aJumpTarget = rTarget;
689cdf0e10cSrcweir     aDragData.aJumpText = rText;
690cdf0e10cSrcweir }
691cdf0e10cSrcweir 
692cdf0e10cSrcweir //------------------------------------------------------------------
693cdf0e10cSrcweir 
SetClipObject(ScTransferObj * pCellObj,ScDrawTransferObj * pDrawObj)694cdf0e10cSrcweir void ScModule::SetClipObject( ScTransferObj* pCellObj, ScDrawTransferObj* pDrawObj )
695cdf0e10cSrcweir {
696cdf0e10cSrcweir     DBG_ASSERT( !pCellObj || !pDrawObj, "SetClipObject: not allowed to set both objects" );
697cdf0e10cSrcweir 
698cdf0e10cSrcweir     aClipData.pCellClipboard = pCellObj;
699cdf0e10cSrcweir     aClipData.pDrawClipboard = pDrawObj;
700cdf0e10cSrcweir }
701cdf0e10cSrcweir 
GetClipDoc()702cdf0e10cSrcweir ScDocument* ScModule::GetClipDoc()
703cdf0e10cSrcweir {
704cdf0e10cSrcweir     //  called from document
705cdf0e10cSrcweir 
706cdf0e10cSrcweir     ScTransferObj* pObj = ScTransferObj::GetOwnClipboard( NULL );
707cdf0e10cSrcweir     if (pObj)
708cdf0e10cSrcweir         return pObj->GetDocument();
709cdf0e10cSrcweir 
710cdf0e10cSrcweir     return NULL;
711cdf0e10cSrcweir }
712cdf0e10cSrcweir 
713cdf0e10cSrcweir //------------------------------------------------------------------
714cdf0e10cSrcweir 
SetSelectionTransfer(ScSelectionTransferObj * pNew)715cdf0e10cSrcweir void ScModule::SetSelectionTransfer( ScSelectionTransferObj* pNew )
716cdf0e10cSrcweir {
717cdf0e10cSrcweir     pSelTransfer = pNew;
718cdf0e10cSrcweir }
719cdf0e10cSrcweir 
720cdf0e10cSrcweir //------------------------------------------------------------------
721cdf0e10cSrcweir 
InitFormEditData()722cdf0e10cSrcweir void ScModule::InitFormEditData()
723cdf0e10cSrcweir {
724cdf0e10cSrcweir     pFormEditData = new ScFormEditData;
725cdf0e10cSrcweir }
726cdf0e10cSrcweir 
ClearFormEditData()727cdf0e10cSrcweir void ScModule::ClearFormEditData()
728cdf0e10cSrcweir {
729cdf0e10cSrcweir     DELETEZ( pFormEditData );
730cdf0e10cSrcweir }
731cdf0e10cSrcweir 
732cdf0e10cSrcweir //------------------------------------------------------------------
733cdf0e10cSrcweir 
SetViewOptions(const ScViewOptions & rOpt)734cdf0e10cSrcweir void ScModule::SetViewOptions( const ScViewOptions& rOpt )
735cdf0e10cSrcweir {
736cdf0e10cSrcweir     if ( !pViewCfg )
737cdf0e10cSrcweir         pViewCfg = new ScViewCfg;
738cdf0e10cSrcweir 
739cdf0e10cSrcweir     pViewCfg->SetOptions( rOpt );
740cdf0e10cSrcweir }
741cdf0e10cSrcweir 
GetViewOptions()742cdf0e10cSrcweir const ScViewOptions& ScModule::GetViewOptions()
743cdf0e10cSrcweir {
744cdf0e10cSrcweir     if ( !pViewCfg )
745cdf0e10cSrcweir         pViewCfg = new ScViewCfg;
746cdf0e10cSrcweir 
747cdf0e10cSrcweir     return *pViewCfg;
748cdf0e10cSrcweir }
749cdf0e10cSrcweir 
SetDocOptions(const ScDocOptions & rOpt)750cdf0e10cSrcweir void ScModule::SetDocOptions( const ScDocOptions& rOpt )
751cdf0e10cSrcweir {
752cdf0e10cSrcweir     if ( !pDocCfg )
753cdf0e10cSrcweir         pDocCfg = new ScDocCfg;
754cdf0e10cSrcweir 
755cdf0e10cSrcweir     pDocCfg->SetOptions( rOpt );
756cdf0e10cSrcweir }
757cdf0e10cSrcweir 
GetDocOptions()758cdf0e10cSrcweir const ScDocOptions& ScModule::GetDocOptions()
759cdf0e10cSrcweir {
760cdf0e10cSrcweir     if ( !pDocCfg )
761cdf0e10cSrcweir         pDocCfg = new ScDocCfg;
762cdf0e10cSrcweir 
763cdf0e10cSrcweir     return *pDocCfg;
764cdf0e10cSrcweir }
765cdf0e10cSrcweir 
766cdf0e10cSrcweir #ifndef LRU_MAX
767cdf0e10cSrcweir #define LRU_MAX 10
768cdf0e10cSrcweir #endif
769cdf0e10cSrcweir 
InsertEntryToLRUList(sal_uInt16 nFIndex)770cdf0e10cSrcweir void ScModule::InsertEntryToLRUList(sal_uInt16 nFIndex)
771cdf0e10cSrcweir {
772cdf0e10cSrcweir     if(nFIndex != 0)
773cdf0e10cSrcweir     {
774cdf0e10cSrcweir         const ScAppOptions& rAppOpt = GetAppOptions();
775cdf0e10cSrcweir         sal_uInt16 nLRUFuncCount = Min( rAppOpt.GetLRUFuncListCount(), (sal_uInt16)LRU_MAX );
776cdf0e10cSrcweir         sal_uInt16* pLRUListIds = rAppOpt.GetLRUFuncList();
777cdf0e10cSrcweir 
778cdf0e10cSrcweir         sal_uInt16  aIdxList[LRU_MAX];
779cdf0e10cSrcweir         sal_uInt16  n = 0;
780cdf0e10cSrcweir         sal_Bool    bFound = sal_False;
781cdf0e10cSrcweir 
782cdf0e10cSrcweir         while ((n < LRU_MAX) && n<nLRUFuncCount)                        // alte Liste abklappern
783cdf0e10cSrcweir         {
784cdf0e10cSrcweir             if (!bFound && (pLRUListIds[n]== nFIndex))
785cdf0e10cSrcweir                 bFound = sal_True;                                          // erster! Treffer
786cdf0e10cSrcweir             else if (bFound)
787cdf0e10cSrcweir                 aIdxList[n  ] = pLRUListIds[n];                         // hinter Treffer kopieren
788cdf0e10cSrcweir             else if ((n+1) < LRU_MAX)
789cdf0e10cSrcweir                 aIdxList[n+1] = pLRUListIds[n];                         // vor Treffer verschieben
790cdf0e10cSrcweir             n++;
791cdf0e10cSrcweir         }
792cdf0e10cSrcweir         if (!bFound && (n < LRU_MAX))                                   // Eintrag nicht gefunden?
793cdf0e10cSrcweir             n++;                                                        //  einen mehr
794cdf0e10cSrcweir         aIdxList[0] = nFIndex;                                          // Current on Top
795cdf0e10cSrcweir 
796cdf0e10cSrcweir         ScAppOptions aNewOpts(rAppOpt);                                 // an App melden
797cdf0e10cSrcweir         aNewOpts.SetLRUFuncList(aIdxList, n);
798cdf0e10cSrcweir         SetAppOptions(aNewOpts);
799cdf0e10cSrcweir 
800cdf0e10cSrcweir         RecentFunctionsChanged();
801cdf0e10cSrcweir     }
802cdf0e10cSrcweir }
803cdf0e10cSrcweir 
RecentFunctionsChanged()804cdf0e10cSrcweir void ScModule::RecentFunctionsChanged()
805cdf0e10cSrcweir {
806cdf0e10cSrcweir     //  update function list window
807cdf0e10cSrcweir     sal_uInt16 nFuncListID = ScFunctionChildWindow::GetChildWindowId();
808cdf0e10cSrcweir 
809cdf0e10cSrcweir     //! notify all views
810cdf0e10cSrcweir     SfxViewFrame* pViewFrm = SfxViewFrame::Current();
811cdf0e10cSrcweir     if ( pViewFrm && pViewFrm->HasChildWindow(nFuncListID) )
812cdf0e10cSrcweir     {
813cdf0e10cSrcweir         ScFunctionChildWindow* pWnd =(ScFunctionChildWindow*)pViewFrm->GetChildWindow( nFuncListID );
814cdf0e10cSrcweir 
815cdf0e10cSrcweir         ScFunctionDockWin* pFuncList=(ScFunctionDockWin*)pWnd->GetWindow();
816cdf0e10cSrcweir 
817cdf0e10cSrcweir         pFuncList->InitLRUList();
818cdf0e10cSrcweir     }
819cdf0e10cSrcweir }
820cdf0e10cSrcweir 
SetAppOptions(const ScAppOptions & rOpt)821cdf0e10cSrcweir void ScModule::SetAppOptions( const ScAppOptions& rOpt )
822cdf0e10cSrcweir {
823cdf0e10cSrcweir     if ( !pAppCfg )
824cdf0e10cSrcweir         pAppCfg = new ScAppCfg;
825cdf0e10cSrcweir 
826cdf0e10cSrcweir     pAppCfg->SetOptions( rOpt );
827cdf0e10cSrcweir }
828cdf0e10cSrcweir 
global_InitAppOptions()829cdf0e10cSrcweir void global_InitAppOptions()
830cdf0e10cSrcweir {
831cdf0e10cSrcweir     SC_MOD()->GetAppOptions();
832cdf0e10cSrcweir }
833cdf0e10cSrcweir 
GetAppOptions()834cdf0e10cSrcweir const ScAppOptions& ScModule::GetAppOptions()
835cdf0e10cSrcweir {
836cdf0e10cSrcweir     if ( !pAppCfg )
837cdf0e10cSrcweir         pAppCfg = new ScAppCfg;
838cdf0e10cSrcweir 
839cdf0e10cSrcweir     return *pAppCfg;
840cdf0e10cSrcweir }
841cdf0e10cSrcweir 
SetInputOptions(const ScInputOptions & rOpt)842cdf0e10cSrcweir void ScModule::SetInputOptions( const ScInputOptions& rOpt )
843cdf0e10cSrcweir {
844cdf0e10cSrcweir     if ( !pInputCfg )
845cdf0e10cSrcweir         pInputCfg = new ScInputCfg;
846cdf0e10cSrcweir 
847cdf0e10cSrcweir     pInputCfg->SetOptions( rOpt );
848cdf0e10cSrcweir }
849cdf0e10cSrcweir 
GetInputOptions()850cdf0e10cSrcweir const ScInputOptions& ScModule::GetInputOptions()
851cdf0e10cSrcweir {
852cdf0e10cSrcweir     if ( !pInputCfg )
853cdf0e10cSrcweir         pInputCfg = new ScInputCfg;
854cdf0e10cSrcweir 
855cdf0e10cSrcweir     return *pInputCfg;
856cdf0e10cSrcweir }
857cdf0e10cSrcweir 
SetPrintOptions(const ScPrintOptions & rOpt)858cdf0e10cSrcweir void ScModule::SetPrintOptions( const ScPrintOptions& rOpt )
859cdf0e10cSrcweir {
860cdf0e10cSrcweir     if ( !pPrintCfg )
861cdf0e10cSrcweir         pPrintCfg = new ScPrintCfg;
862cdf0e10cSrcweir 
863cdf0e10cSrcweir     pPrintCfg->SetOptions( rOpt );
864cdf0e10cSrcweir }
865cdf0e10cSrcweir 
GetPrintOptions()866cdf0e10cSrcweir const ScPrintOptions& ScModule::GetPrintOptions()
867cdf0e10cSrcweir {
868cdf0e10cSrcweir     if ( !pPrintCfg )
869cdf0e10cSrcweir         pPrintCfg = new ScPrintCfg;
870cdf0e10cSrcweir 
871cdf0e10cSrcweir     return *pPrintCfg;
872cdf0e10cSrcweir }
873cdf0e10cSrcweir 
GetNavipiCfg()874cdf0e10cSrcweir ScNavipiCfg& ScModule::GetNavipiCfg()
875cdf0e10cSrcweir {
876cdf0e10cSrcweir     if ( !pNavipiCfg )
877cdf0e10cSrcweir         pNavipiCfg = new ScNavipiCfg;
878cdf0e10cSrcweir 
879cdf0e10cSrcweir     return *pNavipiCfg;
880cdf0e10cSrcweir }
881cdf0e10cSrcweir 
GetAddInCfg()882cdf0e10cSrcweir ScAddInCfg& ScModule::GetAddInCfg()
883cdf0e10cSrcweir {
884cdf0e10cSrcweir     if ( !pAddInCfg )
885cdf0e10cSrcweir         pAddInCfg = new ScAddInCfg;
886cdf0e10cSrcweir 
887cdf0e10cSrcweir     return *pAddInCfg;
888cdf0e10cSrcweir }
889cdf0e10cSrcweir 
GetColorConfig()890cdf0e10cSrcweir svtools::ColorConfig& ScModule::GetColorConfig()
891cdf0e10cSrcweir {
892cdf0e10cSrcweir     if ( !pColorConfig )
893cdf0e10cSrcweir     {
894cdf0e10cSrcweir         pColorConfig = new svtools::ColorConfig;
895cdf0e10cSrcweir         pColorConfig->AddListener(this);
896cdf0e10cSrcweir     }
897cdf0e10cSrcweir 
898cdf0e10cSrcweir     return *pColorConfig;
899cdf0e10cSrcweir }
900cdf0e10cSrcweir 
GetAccessOptions()901cdf0e10cSrcweir SvtAccessibilityOptions& ScModule::GetAccessOptions()
902cdf0e10cSrcweir {
903cdf0e10cSrcweir     if ( !pAccessOptions )
904cdf0e10cSrcweir     {
905cdf0e10cSrcweir         pAccessOptions = new SvtAccessibilityOptions;
906cdf0e10cSrcweir         pAccessOptions->AddListener(this);
907cdf0e10cSrcweir     }
908cdf0e10cSrcweir 
909cdf0e10cSrcweir     return *pAccessOptions;
910cdf0e10cSrcweir }
911cdf0e10cSrcweir 
GetCTLOptions()912cdf0e10cSrcweir SvtCTLOptions& ScModule::GetCTLOptions()
913cdf0e10cSrcweir {
914cdf0e10cSrcweir     if ( !pCTLOptions )
915cdf0e10cSrcweir     {
916cdf0e10cSrcweir         pCTLOptions = new SvtCTLOptions;
917cdf0e10cSrcweir         pCTLOptions->AddListener(this);
918cdf0e10cSrcweir     }
919cdf0e10cSrcweir 
920cdf0e10cSrcweir     return *pCTLOptions;
921cdf0e10cSrcweir }
922cdf0e10cSrcweir 
GetUserOptions()923cdf0e10cSrcweir SvtUserOptions&  ScModule::GetUserOptions()
924cdf0e10cSrcweir {
925cdf0e10cSrcweir     if( !pUserOptions )
926cdf0e10cSrcweir     {
927cdf0e10cSrcweir         pUserOptions = new SvtUserOptions;
928cdf0e10cSrcweir     }
929cdf0e10cSrcweir     return *pUserOptions;
930cdf0e10cSrcweir }
931cdf0e10cSrcweir 
GetOptDigitLanguage()932cdf0e10cSrcweir sal_uInt16 ScModule::GetOptDigitLanguage()
933cdf0e10cSrcweir {
934cdf0e10cSrcweir     SvtCTLOptions::TextNumerals eNumerals = GetCTLOptions().GetCTLTextNumerals();
935cdf0e10cSrcweir     return ( eNumerals == SvtCTLOptions::NUMERALS_ARABIC ) ? LANGUAGE_ENGLISH_US :
936cdf0e10cSrcweir            ( eNumerals == SvtCTLOptions::NUMERALS_HINDI)   ? LANGUAGE_ARABIC_SAUDI_ARABIA :
937cdf0e10cSrcweir                                                              LANGUAGE_SYSTEM;
938cdf0e10cSrcweir }
939cdf0e10cSrcweir 
940cdf0e10cSrcweir //------------------------------------------------------------------
941cdf0e10cSrcweir //
942cdf0e10cSrcweir //                          Optionen
943cdf0e10cSrcweir //
944cdf0e10cSrcweir //------------------------------------------------------------------
945cdf0e10cSrcweir 
946cdf0e10cSrcweir //
947cdf0e10cSrcweir //      ModifyOptions - Items aus Calc-Options-Dialog
948cdf0e10cSrcweir //                      und SID_AUTOSPELL_CHECK
949cdf0e10cSrcweir //
950cdf0e10cSrcweir 
951cdf0e10cSrcweir #define IS_AVAILABLE(w,item) (SFX_ITEM_SET==rOptSet.GetItemState((w),sal_True,&item))
952cdf0e10cSrcweir 
ModifyOptions(const SfxItemSet & rOptSet)953cdf0e10cSrcweir void ScModule::ModifyOptions( const SfxItemSet& rOptSet )
954cdf0e10cSrcweir {
955cdf0e10cSrcweir     sal_uInt16 nOldSpellLang, nOldCjkLang, nOldCtlLang;
956cdf0e10cSrcweir     sal_Bool bOldAutoSpell;
957cdf0e10cSrcweir     GetSpellSettings( nOldSpellLang, nOldCjkLang, nOldCtlLang, bOldAutoSpell );
958cdf0e10cSrcweir 
959cdf0e10cSrcweir     if (!pAppCfg)
960cdf0e10cSrcweir         GetAppOptions();
961cdf0e10cSrcweir     DBG_ASSERT( pAppCfg, "AppOptions not initialised :-(" );
962cdf0e10cSrcweir 
963cdf0e10cSrcweir     if (!pInputCfg)
964cdf0e10cSrcweir         GetInputOptions();
965cdf0e10cSrcweir     DBG_ASSERT( pInputCfg, "InputOptions not initialised :-(" );
966cdf0e10cSrcweir 
967cdf0e10cSrcweir     //--------------------------------------------------------------
968cdf0e10cSrcweir 
969cdf0e10cSrcweir     SfxViewFrame* pViewFrm = SfxViewFrame::Current();
970cdf0e10cSrcweir     SfxBindings* pBindings = pViewFrm ? &pViewFrm->GetBindings() : NULL;
971cdf0e10cSrcweir 
972cdf0e10cSrcweir     ScTabViewShell*         pViewSh = PTR_CAST(ScTabViewShell, SfxViewShell::Current());
973cdf0e10cSrcweir     ScDocShell*             pDocSh  = PTR_CAST(ScDocShell, SfxObjectShell::Current());
974cdf0e10cSrcweir     ScDocument*             pDoc    = pDocSh ? pDocSh->GetDocument() : NULL;
975cdf0e10cSrcweir     const SfxPoolItem*      pItem   = NULL;
976cdf0e10cSrcweir     sal_Bool                    bRepaint            = sal_False;
977cdf0e10cSrcweir     sal_Bool                    bUpdateMarks        = sal_False;
978cdf0e10cSrcweir     sal_Bool                    bUpdateRefDev       = sal_False;
979cdf0e10cSrcweir     sal_Bool                    bCalcAll            = sal_False;
980cdf0e10cSrcweir     sal_Bool                    bSaveSpellCheck     = sal_False;
981cdf0e10cSrcweir     sal_Bool                    bSaveAppOptions     = sal_False;
982cdf0e10cSrcweir     sal_Bool                    bSaveInputOptions   = sal_False;
983cdf0e10cSrcweir 
984cdf0e10cSrcweir     //--------------------------------------------------------------------------
985cdf0e10cSrcweir 
986cdf0e10cSrcweir     //  SFX_APP()->SetOptions( rOptSet );
987cdf0e10cSrcweir 
988cdf0e10cSrcweir     //  Linguistik nicht mehr
989cdf0e10cSrcweir 
990cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_ATTR_METRIC,pItem) )
991cdf0e10cSrcweir     {
992cdf0e10cSrcweir         PutItem( *pItem );
993cdf0e10cSrcweir         pAppCfg->SetAppMetric( (FieldUnit)((const SfxUInt16Item*)pItem)->GetValue() );
994cdf0e10cSrcweir         bSaveAppOptions = sal_True;
995cdf0e10cSrcweir     }
996cdf0e10cSrcweir 
997cdf0e10cSrcweir     if ( IS_AVAILABLE(SCITEM_USERLIST,pItem) )
998cdf0e10cSrcweir     {
999cdf0e10cSrcweir         ScGlobal::SetUserList( ((const ScUserListItem*)pItem)->GetUserList() );
1000cdf0e10cSrcweir         bSaveAppOptions = sal_True;
1001cdf0e10cSrcweir     }
1002cdf0e10cSrcweir 
1003cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SC_OPT_SYNCZOOM,pItem) )
1004cdf0e10cSrcweir     {
1005cdf0e10cSrcweir         pAppCfg->SetSynchronizeZoom( static_cast<const SfxBoolItem*>(pItem)->GetValue() );
1006cdf0e10cSrcweir         bSaveAppOptions = sal_True;
1007cdf0e10cSrcweir     }
1008cdf0e10cSrcweir 
1009cdf0e10cSrcweir     //============================================
1010cdf0e10cSrcweir     // ViewOptions
1011cdf0e10cSrcweir     //============================================
1012cdf0e10cSrcweir 
1013cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SCVIEWOPTIONS,pItem) )
1014cdf0e10cSrcweir     {
1015cdf0e10cSrcweir         const ScViewOptions& rNewOpt = ((const ScTpViewItem*)pItem)->GetViewOptions();
1016cdf0e10cSrcweir 
1017cdf0e10cSrcweir         if ( pViewSh )
1018cdf0e10cSrcweir         {
1019cdf0e10cSrcweir             ScViewData*             pViewData = pViewSh->GetViewData();
1020cdf0e10cSrcweir             const ScViewOptions&    rOldOpt   = pViewData->GetOptions();
1021cdf0e10cSrcweir 
1022cdf0e10cSrcweir             sal_Bool bAnchorList = ( rOldOpt.GetOption( VOPT_ANCHOR ) !=
1023cdf0e10cSrcweir                                  rNewOpt.GetOption( VOPT_ANCHOR ) );
1024cdf0e10cSrcweir 
1025cdf0e10cSrcweir             if ( rOldOpt != rNewOpt )
1026cdf0e10cSrcweir             {
1027cdf0e10cSrcweir                 pViewData->SetOptions( rNewOpt );   // veraendert rOldOpt
1028cdf0e10cSrcweir                 pViewData->GetDocument()->SetViewOptions( rNewOpt );
1029cdf0e10cSrcweir                 pDocSh->SetDocumentModified();
1030cdf0e10cSrcweir                 bRepaint = sal_True;
1031cdf0e10cSrcweir             }
1032cdf0e10cSrcweir             if ( bAnchorList )
1033cdf0e10cSrcweir                 pViewSh->UpdateAnchorHandles();
1034cdf0e10cSrcweir         }
1035cdf0e10cSrcweir         SetViewOptions( rNewOpt );
1036cdf0e10cSrcweir         if (pBindings)
1037facb16e7SArmin Le Grand         {
1038cdf0e10cSrcweir             pBindings->Invalidate(SID_HELPLINES_MOVE);
1039facb16e7SArmin Le Grand             pBindings->Invalidate(SID_SCGRIDSHOW);
1040facb16e7SArmin Le Grand         }
1041cdf0e10cSrcweir     }
1042cdf0e10cSrcweir 
1043cdf0e10cSrcweir     //============================================
1044cdf0e10cSrcweir     // GridOptions, Auswertung nach ViewOptions,
1045cdf0e10cSrcweir     // da GridOptions Member der ViewOptions ist!
1046cdf0e10cSrcweir     //============================================
1047cdf0e10cSrcweir 
1048cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_ATTR_GRID_OPTIONS,pItem) )
1049cdf0e10cSrcweir     {
1050cdf0e10cSrcweir         ScGridOptions aNewGridOpt( (const SvxOptionsGrid&)((const SvxGridItem&)*pItem) );
1051cdf0e10cSrcweir 
1052cdf0e10cSrcweir         if ( pViewSh )
1053cdf0e10cSrcweir         {
1054cdf0e10cSrcweir             ScViewData*          pViewData = pViewSh->GetViewData();
1055cdf0e10cSrcweir             ScViewOptions        aNewViewOpt( pViewData->GetOptions() );
1056cdf0e10cSrcweir             const ScGridOptions& rOldGridOpt = aNewViewOpt.GetGridOptions();
1057cdf0e10cSrcweir 
1058cdf0e10cSrcweir             if ( rOldGridOpt != aNewGridOpt )
1059cdf0e10cSrcweir             {
1060cdf0e10cSrcweir                 aNewViewOpt.SetGridOptions( aNewGridOpt );
1061cdf0e10cSrcweir                 pViewData->SetOptions( aNewViewOpt );
1062cdf0e10cSrcweir                 pViewData->GetDocument()->SetViewOptions( aNewViewOpt );
1063cdf0e10cSrcweir                 pDocSh->SetDocumentModified();
1064cdf0e10cSrcweir                 bRepaint = sal_True;
1065cdf0e10cSrcweir             }
1066cdf0e10cSrcweir         }
1067cdf0e10cSrcweir         ScViewOptions aNewViewOpt ( GetViewOptions() );
1068cdf0e10cSrcweir         aNewViewOpt.SetGridOptions( aNewGridOpt );
1069cdf0e10cSrcweir         SetViewOptions( aNewViewOpt );
1070cdf0e10cSrcweir         if (pBindings)
1071cdf0e10cSrcweir         {
1072cdf0e10cSrcweir             pBindings->Invalidate(SID_GRID_VISIBLE);
1073cdf0e10cSrcweir             pBindings->Invalidate(SID_GRID_USE);
1074cdf0e10cSrcweir         }
1075cdf0e10cSrcweir     }
1076cdf0e10cSrcweir 
1077cdf0e10cSrcweir 
1078cdf0e10cSrcweir     //============================================
1079cdf0e10cSrcweir     // DocOptions
1080cdf0e10cSrcweir     //============================================
1081cdf0e10cSrcweir 
1082cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SCDOCOPTIONS,pItem) )
1083cdf0e10cSrcweir     {
1084cdf0e10cSrcweir         const ScDocOptions& rNewOpt = ((const ScTpCalcItem*)pItem)->GetDocOptions();
1085cdf0e10cSrcweir 
1086cdf0e10cSrcweir         if ( pDoc )
1087cdf0e10cSrcweir         {
1088cdf0e10cSrcweir             const ScDocOptions& rOldOpt = pDoc->GetDocOptions();
1089cdf0e10cSrcweir 
1090cdf0e10cSrcweir             bRepaint = ( bRepaint || ( rOldOpt != rNewOpt )   );
1091cdf0e10cSrcweir             bCalcAll =   bRepaint &&
1092cdf0e10cSrcweir                          (  rOldOpt.IsIter()       != rNewOpt.IsIter()
1093cdf0e10cSrcweir                          || rOldOpt.GetIterCount() != rNewOpt.GetIterCount()
1094cdf0e10cSrcweir                          || rOldOpt.GetIterEps()   != rNewOpt.GetIterEps()
1095cdf0e10cSrcweir                          || rOldOpt.IsIgnoreCase() != rNewOpt.IsIgnoreCase()
1096cdf0e10cSrcweir                          || rOldOpt.IsCalcAsShown() != rNewOpt.IsCalcAsShown()
1097cdf0e10cSrcweir                          || (rNewOpt.IsCalcAsShown() &&
1098cdf0e10cSrcweir                             rOldOpt.GetStdPrecision() != rNewOpt.GetStdPrecision())
1099cdf0e10cSrcweir                          || rOldOpt.IsMatchWholeCell() != rNewOpt.IsMatchWholeCell()
1100cdf0e10cSrcweir                          || rOldOpt.GetYear2000()   != rNewOpt.GetYear2000()
1101cdf0e10cSrcweir                          || rOldOpt.IsFormulaRegexEnabled() != rNewOpt.IsFormulaRegexEnabled()
1102cdf0e10cSrcweir                          );
1103cdf0e10cSrcweir             pDoc->SetDocOptions( rNewOpt );
1104cdf0e10cSrcweir             pDocSh->SetDocumentModified();
1105cdf0e10cSrcweir         }
1106cdf0e10cSrcweir         SetDocOptions( rNewOpt );
1107cdf0e10cSrcweir     }
1108cdf0e10cSrcweir 
1109cdf0e10cSrcweir     // nach den eigentlichen DocOptions auch noch die TabDistance setzen
1110cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_ATTR_DEFTABSTOP,pItem) )
1111cdf0e10cSrcweir     {
1112cdf0e10cSrcweir         sal_uInt16 nTabDist = ((SfxUInt16Item*)pItem)->GetValue();
1113cdf0e10cSrcweir         ScDocOptions aOpt(GetDocOptions());
1114cdf0e10cSrcweir         aOpt.SetTabDistance(nTabDist);
1115cdf0e10cSrcweir         SetDocOptions( aOpt );
1116cdf0e10cSrcweir 
1117cdf0e10cSrcweir         if ( pDoc )
1118cdf0e10cSrcweir         {
1119cdf0e10cSrcweir             ScDocOptions aDocOpt(pDoc->GetDocOptions());
1120cdf0e10cSrcweir             aDocOpt.SetTabDistance(nTabDist);
1121cdf0e10cSrcweir             pDoc->SetDocOptions( aDocOpt );
1122cdf0e10cSrcweir             pDocSh->SetDocumentModified();
1123cdf0e10cSrcweir             if(pDoc->GetDrawLayer())
1124cdf0e10cSrcweir                 pDoc->GetDrawLayer()->SetDefaultTabulator(nTabDist);
1125cdf0e10cSrcweir         }
1126cdf0e10cSrcweir     }
1127cdf0e10cSrcweir 
1128cdf0e10cSrcweir     //  AutoSpell nach den Doc-Options (weil Member)
1129cdf0e10cSrcweir 
1130cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_AUTOSPELL_CHECK,pItem) )              // an Doc-Options
1131cdf0e10cSrcweir     {
1132cdf0e10cSrcweir         sal_Bool bDoAutoSpell = ((const SfxBoolItem*)pItem)->GetValue();
1133cdf0e10cSrcweir 
1134cdf0e10cSrcweir         if (pDoc)
1135cdf0e10cSrcweir         {
1136cdf0e10cSrcweir             ScDocOptions aNewOpt = pDoc->GetDocOptions();
1137cdf0e10cSrcweir             if ( aNewOpt.IsAutoSpell() != bDoAutoSpell )
1138cdf0e10cSrcweir             {
1139cdf0e10cSrcweir                 aNewOpt.SetAutoSpell( bDoAutoSpell );
1140cdf0e10cSrcweir                 pDoc->SetDocOptions( aNewOpt );
1141cdf0e10cSrcweir 
1142cdf0e10cSrcweir                 if (bDoAutoSpell)
1143cdf0e10cSrcweir                     pDoc->SetOnlineSpellPos( ScAddress(0,0,0) );    // vorne anfangen
1144cdf0e10cSrcweir                 else
1145cdf0e10cSrcweir                 {
1146cdf0e10cSrcweir                     WaitObject aWait( pDocSh->GetActiveDialogParent() );
1147cdf0e10cSrcweir                     pDoc->RemoveAutoSpellObj();     //  Edit-Text-Objekte wieder zurueckwandeln
1148cdf0e10cSrcweir                 }
1149cdf0e10cSrcweir 
1150cdf0e10cSrcweir                 //#92038#; don't set document modified, because this flag is no longer saved
1151cdf0e10cSrcweir //              pDocSh->SetDocumentModified();
1152cdf0e10cSrcweir 
1153cdf0e10cSrcweir                 bRepaint = sal_True;            //  weil HideAutoSpell evtl. ungueltig
1154cdf0e10cSrcweir                                             //! alle Views painten ???
1155cdf0e10cSrcweir             }
1156cdf0e10cSrcweir         }
1157cdf0e10cSrcweir 
1158cdf0e10cSrcweir         if ( bOldAutoSpell != bDoAutoSpell )
1159cdf0e10cSrcweir         {
1160cdf0e10cSrcweir             SetAutoSpellProperty( bDoAutoSpell );
1161cdf0e10cSrcweir             bSaveSpellCheck = sal_True;
1162cdf0e10cSrcweir         }
1163cdf0e10cSrcweir         if ( pDocSh )
1164cdf0e10cSrcweir             pDocSh->PostPaintGridAll();                     // wegen Markierungen
1165cdf0e10cSrcweir         ScInputHandler* pInputHandler = GetInputHdl();
1166cdf0e10cSrcweir         if ( pInputHandler )
1167cdf0e10cSrcweir             pInputHandler->UpdateSpellSettings();           // EditEngine-Flags
1168cdf0e10cSrcweir         if ( pViewSh )
1169cdf0e10cSrcweir             pViewSh->UpdateDrawTextOutliner();              // EditEngine-Flags
1170cdf0e10cSrcweir 
1171cdf0e10cSrcweir         if (pBindings)
1172cdf0e10cSrcweir             pBindings->Invalidate( SID_AUTOSPELL_CHECK );
1173cdf0e10cSrcweir     }
1174cdf0e10cSrcweir 
1175cdf0e10cSrcweir     //============================================
1176cdf0e10cSrcweir     // InputOptions
1177cdf0e10cSrcweir     //============================================
1178cdf0e10cSrcweir 
1179cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SC_INPUT_SELECTIONPOS,pItem) )
1180cdf0e10cSrcweir     {
1181cdf0e10cSrcweir         pInputCfg->SetMoveDir( ((const SfxUInt16Item*)pItem)->GetValue() );
1182cdf0e10cSrcweir         bSaveInputOptions = sal_True;
1183cdf0e10cSrcweir     }
1184cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SC_INPUT_SELECTION,pItem) )
1185cdf0e10cSrcweir     {
1186cdf0e10cSrcweir         pInputCfg->SetMoveSelection( ((const SfxBoolItem*)pItem)->GetValue() );
1187cdf0e10cSrcweir         bSaveInputOptions = sal_True;
1188cdf0e10cSrcweir     }
1189cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SC_INPUT_EDITMODE,pItem) )
1190cdf0e10cSrcweir     {
1191cdf0e10cSrcweir         pInputCfg->SetEnterEdit( ((const SfxBoolItem*)pItem)->GetValue() );
1192cdf0e10cSrcweir         bSaveInputOptions = sal_True;
1193cdf0e10cSrcweir     }
1194cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SC_INPUT_FMT_EXPAND,pItem) )
1195cdf0e10cSrcweir     {
1196cdf0e10cSrcweir         pInputCfg->SetExtendFormat( ((const SfxBoolItem*)pItem)->GetValue() );
1197cdf0e10cSrcweir         bSaveInputOptions = sal_True;
1198cdf0e10cSrcweir     }
1199cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SC_INPUT_RANGEFINDER,pItem) )
1200cdf0e10cSrcweir     {
1201cdf0e10cSrcweir         pInputCfg->SetRangeFinder( ((const SfxBoolItem*)pItem)->GetValue() );
1202cdf0e10cSrcweir         bSaveInputOptions = sal_True;
1203cdf0e10cSrcweir     }
1204cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SC_INPUT_REF_EXPAND,pItem) )
1205cdf0e10cSrcweir     {
1206cdf0e10cSrcweir         pInputCfg->SetExpandRefs( ((const SfxBoolItem*)pItem)->GetValue() );
1207cdf0e10cSrcweir         bSaveInputOptions = sal_True;
1208cdf0e10cSrcweir     }
1209cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SC_INPUT_MARK_HEADER,pItem) )
1210cdf0e10cSrcweir     {
1211cdf0e10cSrcweir         pInputCfg->SetMarkHeader( ((const SfxBoolItem*)pItem)->GetValue() );
1212cdf0e10cSrcweir         bSaveInputOptions = sal_True;
1213cdf0e10cSrcweir         bUpdateMarks = sal_True;
1214cdf0e10cSrcweir     }
1215cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SC_INPUT_TEXTWYSIWYG,pItem) )
1216cdf0e10cSrcweir     {
1217cdf0e10cSrcweir         sal_Bool bNew = ((const SfxBoolItem*)pItem)->GetValue();
1218cdf0e10cSrcweir         if ( bNew != pInputCfg->GetTextWysiwyg() )
1219cdf0e10cSrcweir         {
1220cdf0e10cSrcweir             pInputCfg->SetTextWysiwyg( bNew );
1221cdf0e10cSrcweir             bSaveInputOptions = sal_True;
1222cdf0e10cSrcweir             bUpdateRefDev = sal_True;
1223cdf0e10cSrcweir         }
1224cdf0e10cSrcweir     }
1225cdf0e10cSrcweir     if( IS_AVAILABLE( SID_SC_INPUT_REPLCELLSWARN, pItem ) )
1226cdf0e10cSrcweir     {
1227cdf0e10cSrcweir         pInputCfg->SetReplaceCellsWarn( ((const SfxBoolItem*)pItem)->GetValue() );
1228cdf0e10cSrcweir         bSaveInputOptions = sal_True;
1229cdf0e10cSrcweir     }
1230cdf0e10cSrcweir 
1231cdf0e10cSrcweir     //============================================
1232cdf0e10cSrcweir     // PrintOptions
1233cdf0e10cSrcweir     //============================================
1234cdf0e10cSrcweir 
1235cdf0e10cSrcweir     if ( IS_AVAILABLE(SID_SCPRINTOPTIONS,pItem) )
1236cdf0e10cSrcweir     {
1237cdf0e10cSrcweir         const ScPrintOptions& rNewOpt = ((const ScTpPrintItem*)pItem)->GetPrintOptions();
1238cdf0e10cSrcweir         SetPrintOptions( rNewOpt );
1239cdf0e10cSrcweir 
1240cdf0e10cSrcweir         //  broadcast causes all previews to recalc page numbers
1241cdf0e10cSrcweir         SFX_APP()->Broadcast( SfxSimpleHint( SID_SCPRINTOPTIONS ) );
1242cdf0e10cSrcweir     }
1243cdf0e10cSrcweir 
1244cdf0e10cSrcweir     //----------------------------------------------------------
1245cdf0e10cSrcweir 
1246cdf0e10cSrcweir //  if ( bSaveSpellCheck )
1247cdf0e10cSrcweir //  {
1248cdf0e10cSrcweir         //  currently LinguProperties are saved only at program exit.
1249cdf0e10cSrcweir         //  if a save method becomes available, it should be called here.
1250cdf0e10cSrcweir //  }
1251cdf0e10cSrcweir 
1252cdf0e10cSrcweir     if ( bSaveAppOptions )
1253cdf0e10cSrcweir         pAppCfg->OptionsChanged();
1254cdf0e10cSrcweir 
1255cdf0e10cSrcweir     if ( bSaveInputOptions )
1256cdf0e10cSrcweir         pInputCfg->OptionsChanged();
1257cdf0e10cSrcweir 
1258cdf0e10cSrcweir     // Neuberechnung anstossen?
1259cdf0e10cSrcweir 
1260cdf0e10cSrcweir     if ( pDoc && bCalcAll )
1261cdf0e10cSrcweir     {
1262cdf0e10cSrcweir         WaitObject aWait( pDocSh->GetActiveDialogParent() );
1263cdf0e10cSrcweir         pDoc->CalcAll();
1264cdf0e10cSrcweir         if ( pViewSh )
1265cdf0e10cSrcweir             pViewSh->UpdateCharts( sal_True );
1266cdf0e10cSrcweir         else
1267cdf0e10cSrcweir             ScDBFunc::DoUpdateCharts( ScAddress(), pDoc, sal_True );
1268cdf0e10cSrcweir         if (pBindings)
1269cdf0e10cSrcweir             pBindings->Invalidate( SID_ATTR_SIZE ); //SvxPosSize-StatusControl-Update
1270cdf0e10cSrcweir     }
1271cdf0e10cSrcweir 
1272cdf0e10cSrcweir     if ( pViewSh && bUpdateMarks )
1273cdf0e10cSrcweir         pViewSh->UpdateAutoFillMark();
1274cdf0e10cSrcweir 
1275cdf0e10cSrcweir     // View neuzeichnen?
1276cdf0e10cSrcweir 
1277cdf0e10cSrcweir     if ( pViewSh && bRepaint )
1278cdf0e10cSrcweir     {
1279cdf0e10cSrcweir         pViewSh->UpdateFixPos();
1280cdf0e10cSrcweir         pViewSh->PaintGrid();
1281cdf0e10cSrcweir         pViewSh->PaintTop();
1282cdf0e10cSrcweir         pViewSh->PaintLeft();
1283cdf0e10cSrcweir         pViewSh->PaintExtras();
1284cdf0e10cSrcweir         pViewSh->InvalidateBorder();
1285cdf0e10cSrcweir         if (pBindings)
1286cdf0e10cSrcweir         {
1287cdf0e10cSrcweir             pBindings->Invalidate( FID_TOGGLEHEADERS ); // -> Checks im Menue
1288cdf0e10cSrcweir             pBindings->Invalidate( FID_TOGGLESYNTAX );
1289cdf0e10cSrcweir         }
1290cdf0e10cSrcweir     }
1291cdf0e10cSrcweir 
1292cdf0e10cSrcweir     // update ref device (for all documents)
1293cdf0e10cSrcweir 
1294cdf0e10cSrcweir     if ( bUpdateRefDev )
1295cdf0e10cSrcweir     {
1296cdf0e10cSrcweir         //  for all documents: recalc output factor, update row heights
1297cdf0e10cSrcweir         SfxObjectShell* pObjSh = SfxObjectShell::GetFirst();
1298cdf0e10cSrcweir         while ( pObjSh )
1299cdf0e10cSrcweir         {
1300cdf0e10cSrcweir             if ( pObjSh->Type() == TYPE(ScDocShell) )
1301cdf0e10cSrcweir             {
1302cdf0e10cSrcweir                 ScDocShell* pOneDocSh = ((ScDocShell*)pObjSh);
1303cdf0e10cSrcweir                 pOneDocSh->CalcOutputFactor();
1304cdf0e10cSrcweir                 SCTAB nTabCount = pOneDocSh->GetDocument()->GetTableCount();
1305cdf0e10cSrcweir                 for (SCTAB nTab=0; nTab<nTabCount; nTab++)
1306cdf0e10cSrcweir                     pOneDocSh->AdjustRowHeight( 0, MAXROW, nTab );
1307cdf0e10cSrcweir             }
1308cdf0e10cSrcweir             pObjSh = SfxObjectShell::GetNext( *pObjSh );
1309cdf0e10cSrcweir         }
1310cdf0e10cSrcweir 
1311cdf0e10cSrcweir         //  for all (tab-) views:
1312cdf0e10cSrcweir         TypeId aScType = TYPE(ScTabViewShell);
1313cdf0e10cSrcweir         SfxViewShell* pSh = SfxViewShell::GetFirst( &aScType );
1314cdf0e10cSrcweir         while ( pSh )
1315cdf0e10cSrcweir         {
1316cdf0e10cSrcweir             ScTabViewShell* pOneViewSh = (ScTabViewShell*)pSh;
1317cdf0e10cSrcweir 
1318cdf0e10cSrcweir             //  set ref-device for EditEngine
1319cdf0e10cSrcweir             ScInputHandler* pHdl = GetInputHdl(pOneViewSh);
1320cdf0e10cSrcweir             if (pHdl)
1321cdf0e10cSrcweir                 pHdl->UpdateRefDevice();
1322cdf0e10cSrcweir 
1323cdf0e10cSrcweir             //  update view scale
1324cdf0e10cSrcweir             ScViewData* pViewData = pOneViewSh->GetViewData();
1325cdf0e10cSrcweir             pOneViewSh->SetZoom( pViewData->GetZoomX(), pViewData->GetZoomY(), sal_False );
1326cdf0e10cSrcweir 
1327cdf0e10cSrcweir             //  repaint
1328cdf0e10cSrcweir             pOneViewSh->PaintGrid();
1329cdf0e10cSrcweir             pOneViewSh->PaintTop();
1330cdf0e10cSrcweir             pOneViewSh->PaintLeft();
1331cdf0e10cSrcweir 
1332cdf0e10cSrcweir             pSh = SfxViewShell::GetNext( *pSh, &aScType );
1333cdf0e10cSrcweir         }
1334cdf0e10cSrcweir     }
1335cdf0e10cSrcweir }
1336cdf0e10cSrcweir 
1337cdf0e10cSrcweir #undef IS_AVAILABLE
1338cdf0e10cSrcweir 
1339cdf0e10cSrcweir //------------------------------------------------------------------
1340cdf0e10cSrcweir //
1341cdf0e10cSrcweir //                      Input-Handler
1342cdf0e10cSrcweir //
1343cdf0e10cSrcweir //------------------------------------------------------------------
1344cdf0e10cSrcweir 
GetInputHdl(ScTabViewShell * pViewSh,sal_Bool bUseRef)1345cdf0e10cSrcweir ScInputHandler* ScModule::GetInputHdl( ScTabViewShell* pViewSh, sal_Bool bUseRef )
1346cdf0e10cSrcweir {
1347cdf0e10cSrcweir     if ( pRefInputHandler && bUseRef )
1348cdf0e10cSrcweir         return pRefInputHandler;
1349cdf0e10cSrcweir 
1350cdf0e10cSrcweir     ScInputHandler* pHdl = NULL;
1351cdf0e10cSrcweir     if ( !pViewSh )
1352cdf0e10cSrcweir     {
1353cdf0e10cSrcweir         // in case a UIActive embedded object has no ViewShell ( UNO component )
1354cdf0e10cSrcweir         // the own calc view shell will be set as current, but no handling should happen
1355cdf0e10cSrcweir 
1356cdf0e10cSrcweir         ScTabViewShell* pCurViewSh = PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
1357cdf0e10cSrcweir         if ( pCurViewSh && !pCurViewSh->GetUIActiveClient() )
1358cdf0e10cSrcweir             pViewSh = pCurViewSh;
1359cdf0e10cSrcweir     }
1360cdf0e10cSrcweir 
1361cdf0e10cSrcweir     if ( pViewSh )
1362cdf0e10cSrcweir         pHdl = pViewSh->GetInputHandler();      // Viewshell hat jetzt immer einen
1363cdf0e10cSrcweir 
1364cdf0e10cSrcweir     //  #57989# wenn keine ViewShell uebergeben oder aktiv, kann NULL herauskommen
1365cdf0e10cSrcweir     DBG_ASSERT( pHdl || !pViewSh, "GetInputHdl: kein InputHandler gefunden" );
1366cdf0e10cSrcweir     return pHdl;
1367cdf0e10cSrcweir }
1368cdf0e10cSrcweir 
ViewShellChanged()1369cdf0e10cSrcweir void ScModule::ViewShellChanged()
1370cdf0e10cSrcweir {
1371cdf0e10cSrcweir     ScInputHandler* pHdl   = GetInputHdl();
1372cdf0e10cSrcweir     ScTabViewShell* pShell = ScTabViewShell::GetActiveViewShell();
1373cdf0e10cSrcweir     if ( pShell && pHdl )
1374cdf0e10cSrcweir         pShell->UpdateInputHandler();
1375cdf0e10cSrcweir }
1376cdf0e10cSrcweir 
SetInputMode(ScInputMode eMode)1377cdf0e10cSrcweir void ScModule::SetInputMode( ScInputMode eMode )
1378cdf0e10cSrcweir {
1379cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1380cdf0e10cSrcweir     if (pHdl)
1381cdf0e10cSrcweir         pHdl->SetMode( eMode );
1382cdf0e10cSrcweir }
1383cdf0e10cSrcweir 
IsEditMode()1384cdf0e10cSrcweir sal_Bool ScModule::IsEditMode()
1385cdf0e10cSrcweir {
1386cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1387cdf0e10cSrcweir     return pHdl && pHdl->IsEditMode();
1388cdf0e10cSrcweir }
1389cdf0e10cSrcweir 
IsInputMode()1390cdf0e10cSrcweir sal_Bool ScModule::IsInputMode()
1391cdf0e10cSrcweir {
1392cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1393cdf0e10cSrcweir     return pHdl && pHdl->IsInputMode();
1394cdf0e10cSrcweir }
1395cdf0e10cSrcweir 
InputKeyEvent(const KeyEvent & rKEvt,sal_Bool bStartEdit)1396cdf0e10cSrcweir sal_Bool ScModule::InputKeyEvent( const KeyEvent& rKEvt, sal_Bool bStartEdit )
1397cdf0e10cSrcweir {
1398cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1399cdf0e10cSrcweir     return ( pHdl ? pHdl->KeyInput( rKEvt, bStartEdit ) : sal_False );
1400cdf0e10cSrcweir }
1401cdf0e10cSrcweir 
InputEnterHandler(sal_uInt8 nBlockMode)1402cdf0e10cSrcweir void ScModule::InputEnterHandler( sal_uInt8 nBlockMode )
1403cdf0e10cSrcweir {
1404cdf0e10cSrcweir     if ( !SFX_APP()->IsDowning() )                                  // nicht beim Programmende
1405cdf0e10cSrcweir     {
1406cdf0e10cSrcweir         ScInputHandler* pHdl = GetInputHdl();
1407cdf0e10cSrcweir         if (pHdl)
1408cdf0e10cSrcweir             pHdl->EnterHandler( nBlockMode );
1409cdf0e10cSrcweir     }
1410cdf0e10cSrcweir }
1411cdf0e10cSrcweir 
InputCancelHandler()1412cdf0e10cSrcweir void ScModule::InputCancelHandler()
1413cdf0e10cSrcweir {
1414cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1415cdf0e10cSrcweir     if (pHdl)
1416cdf0e10cSrcweir         pHdl->CancelHandler();
1417cdf0e10cSrcweir }
1418cdf0e10cSrcweir 
InputSelection(EditView * pView)1419cdf0e10cSrcweir void ScModule::InputSelection( EditView* pView )
1420cdf0e10cSrcweir {
1421cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1422cdf0e10cSrcweir     if (pHdl)
1423cdf0e10cSrcweir         pHdl->InputSelection( pView );
1424cdf0e10cSrcweir }
1425cdf0e10cSrcweir 
InputChanged(EditView * pView)1426cdf0e10cSrcweir void ScModule::InputChanged( EditView* pView )
1427cdf0e10cSrcweir {
1428cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1429cdf0e10cSrcweir     if (pHdl)
1430cdf0e10cSrcweir         pHdl->InputChanged( pView );
1431cdf0e10cSrcweir }
1432cdf0e10cSrcweir 
ViewShellGone(ScTabViewShell * pViewSh)1433cdf0e10cSrcweir void ScModule::ViewShellGone( ScTabViewShell* pViewSh )
1434cdf0e10cSrcweir {
1435cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1436cdf0e10cSrcweir     if (pHdl)
1437cdf0e10cSrcweir         pHdl->ViewShellGone( pViewSh );
1438cdf0e10cSrcweir }
1439cdf0e10cSrcweir 
SetRefInputHdl(ScInputHandler * pNew)1440cdf0e10cSrcweir void ScModule::SetRefInputHdl( ScInputHandler* pNew )
1441cdf0e10cSrcweir {
1442cdf0e10cSrcweir     pRefInputHandler = pNew;
1443cdf0e10cSrcweir }
1444cdf0e10cSrcweir 
GetRefInputHdl()1445cdf0e10cSrcweir ScInputHandler* ScModule::GetRefInputHdl()
1446cdf0e10cSrcweir {
1447cdf0e10cSrcweir     return pRefInputHandler;
1448cdf0e10cSrcweir }
1449cdf0e10cSrcweir 
1450cdf0e10cSrcweir //------------------------------------------------------------------------
1451cdf0e10cSrcweir //  Olk's Krempel:
1452cdf0e10cSrcweir 
InputGetSelection(xub_StrLen & rStart,xub_StrLen & rEnd)1453cdf0e10cSrcweir void ScModule::InputGetSelection( xub_StrLen& rStart, xub_StrLen& rEnd )
1454cdf0e10cSrcweir {
1455cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1456cdf0e10cSrcweir     if (pHdl)
1457cdf0e10cSrcweir         pHdl->InputGetSelection( rStart, rEnd );
1458cdf0e10cSrcweir }
1459cdf0e10cSrcweir 
InputSetSelection(xub_StrLen nStart,xub_StrLen nEnd)1460cdf0e10cSrcweir void ScModule::InputSetSelection( xub_StrLen nStart, xub_StrLen nEnd )
1461cdf0e10cSrcweir {
1462cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1463cdf0e10cSrcweir     if (pHdl)
1464cdf0e10cSrcweir         pHdl->InputSetSelection( nStart, nEnd );
1465cdf0e10cSrcweir }
1466cdf0e10cSrcweir 
InputReplaceSelection(const String & rStr)1467cdf0e10cSrcweir void ScModule::InputReplaceSelection( const String& rStr )
1468cdf0e10cSrcweir {
1469cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1470cdf0e10cSrcweir     if (pHdl)
1471cdf0e10cSrcweir         pHdl->InputReplaceSelection( rStr );
1472cdf0e10cSrcweir }
1473cdf0e10cSrcweir 
InputGetFormulaStr()1474cdf0e10cSrcweir String ScModule::InputGetFormulaStr()
1475cdf0e10cSrcweir {
1476cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1477cdf0e10cSrcweir     String aStr;
1478cdf0e10cSrcweir     if ( pHdl )
1479cdf0e10cSrcweir         aStr = pHdl->InputGetFormulaStr();
1480cdf0e10cSrcweir     return aStr;
1481cdf0e10cSrcweir }
1482cdf0e10cSrcweir 
ActivateInputWindow(const String * pStrFormula,sal_Bool bMatrix)1483cdf0e10cSrcweir void ScModule::ActivateInputWindow( const String* pStrFormula, sal_Bool bMatrix )
1484cdf0e10cSrcweir {
1485cdf0e10cSrcweir     ScInputHandler* pHdl = GetInputHdl();
1486cdf0e10cSrcweir     if ( pHdl )
1487cdf0e10cSrcweir     {
1488cdf0e10cSrcweir         ScInputWindow* pWin = pHdl->GetInputWindow();
1489cdf0e10cSrcweir         if ( pStrFormula )
1490cdf0e10cSrcweir         {
1491cdf0e10cSrcweir             // Formel uebernehmen
1492cdf0e10cSrcweir             if ( pWin )
1493cdf0e10cSrcweir             {
1494cdf0e10cSrcweir                 pWin->SetFuncString( *pStrFormula, sal_False );
1495cdf0e10cSrcweir                 // SetSumAssignMode wegen sal_False nicht noetig
1496cdf0e10cSrcweir             }
1497cdf0e10cSrcweir             sal_uInt8 nMode = bMatrix ? SC_ENTER_MATRIX : SC_ENTER_NORMAL;
1498cdf0e10cSrcweir             pHdl->EnterHandler( nMode );
1499cdf0e10cSrcweir 
1500cdf0e10cSrcweir             //  ohne Invalidate bleibt die Selektion stehen, wenn die Formel unveraendert ist
1501cdf0e10cSrcweir             if (pWin)
1502cdf0e10cSrcweir                 pWin->TextInvalidate();
1503cdf0e10cSrcweir         }
1504cdf0e10cSrcweir         else
1505cdf0e10cSrcweir         {
1506cdf0e10cSrcweir             // Abbrechen
1507cdf0e10cSrcweir             if ( pWin )
1508cdf0e10cSrcweir             {
1509cdf0e10cSrcweir                 pWin->SetFuncString( EMPTY_STRING, sal_False );
1510cdf0e10cSrcweir                 // SetSumAssignMode wegen sal_False nicht noetig
1511cdf0e10cSrcweir             }
1512cdf0e10cSrcweir             pHdl->CancelHandler();
1513cdf0e10cSrcweir         }
1514cdf0e10cSrcweir     }
1515cdf0e10cSrcweir }
1516cdf0e10cSrcweir 
1517cdf0e10cSrcweir //------------------------------------------------------------------
1518cdf0e10cSrcweir //
1519cdf0e10cSrcweir //                  Referenz - Dialoge
1520cdf0e10cSrcweir //
1521cdf0e10cSrcweir //------------------------------------------------------------------
1522cdf0e10cSrcweir 
SetRefDialog(sal_uInt16 nId,sal_Bool bVis,SfxViewFrame * pViewFrm)1523cdf0e10cSrcweir void ScModule::SetRefDialog( sal_uInt16 nId, sal_Bool bVis, SfxViewFrame* pViewFrm )
1524cdf0e10cSrcweir {
1525cdf0e10cSrcweir     //! move reference dialog handling to view
1526cdf0e10cSrcweir     //! (only keep function autopilot here for references to other documents)
1527cdf0e10cSrcweir 
1528cdf0e10cSrcweir     if(nCurRefDlgId==0 || (nId==nCurRefDlgId && !bVis))
1529cdf0e10cSrcweir     {
1530cdf0e10cSrcweir         if ( !pViewFrm )
1531cdf0e10cSrcweir             pViewFrm = SfxViewFrame::Current();
1532cdf0e10cSrcweir 
1533cdf0e10cSrcweir         // #79379# bindings update causes problems with update of stylist if
1534cdf0e10cSrcweir         // current style family has changed
1535cdf0e10cSrcweir         //if ( pViewFrm )
1536cdf0e10cSrcweir         //  pViewFrm->GetBindings().Update();       // to avoid trouble in LockDispatcher
1537cdf0e10cSrcweir 
1538cdf0e10cSrcweir         nCurRefDlgId = bVis ? nId : 0 ;             // before SetChildWindow
1539cdf0e10cSrcweir 
1540cdf0e10cSrcweir         if ( pViewFrm )
1541cdf0e10cSrcweir         {
1542cdf0e10cSrcweir             //  store the dialog id also in the view shell
1543cdf0e10cSrcweir             SfxViewShell* pViewSh = pViewFrm->GetViewShell();
1544cdf0e10cSrcweir             if ( pViewSh && pViewSh->ISA( ScTabViewShell ) )
1545cdf0e10cSrcweir                 ((ScTabViewShell*)pViewSh)->SetCurRefDlgId( nCurRefDlgId );
1546cdf0e10cSrcweir             else
1547cdf0e10cSrcweir             {
1548cdf0e10cSrcweir                 // no ScTabViewShell - possible for example from a Basic macro
1549cdf0e10cSrcweir                 bVis = sal_False;
1550cdf0e10cSrcweir                 nCurRefDlgId = 0;   // don't set nCurRefDlgId if no dialog is created
1551cdf0e10cSrcweir             }
1552cdf0e10cSrcweir 
1553cdf0e10cSrcweir             pViewFrm->SetChildWindow( nId, bVis );
1554cdf0e10cSrcweir         }
1555cdf0e10cSrcweir 
1556cdf0e10cSrcweir         SfxApplication* pSfxApp = SFX_APP();
1557cdf0e10cSrcweir         pSfxApp->Broadcast( SfxSimpleHint( FID_REFMODECHANGED ) );
1558cdf0e10cSrcweir     }
1559cdf0e10cSrcweir }
1560cdf0e10cSrcweir 
lcl_GetChildWinFromAnyView(sal_uInt16 nId)1561cdf0e10cSrcweir SfxChildWindow* lcl_GetChildWinFromAnyView( sal_uInt16 nId )
1562cdf0e10cSrcweir {
1563cdf0e10cSrcweir     //  first try the current view
1564cdf0e10cSrcweir 
1565cdf0e10cSrcweir     SfxViewFrame* pViewFrm = SfxViewFrame::Current();
1566cdf0e10cSrcweir     // #i46999# current view frame can be null (for example, when closing help)
1567cdf0e10cSrcweir     SfxChildWindow* pChildWnd = pViewFrm ? pViewFrm->GetChildWindow( nId ) : NULL;
1568cdf0e10cSrcweir     if ( pChildWnd )
1569cdf0e10cSrcweir         return pChildWnd;           // found in the current view
1570cdf0e10cSrcweir 
1571cdf0e10cSrcweir     //  if not found there, get the child window from any open view
1572cdf0e10cSrcweir     //  it can be open only in one view because nCurRefDlgId is global
1573cdf0e10cSrcweir 
1574cdf0e10cSrcweir     pViewFrm = SfxViewFrame::GetFirst();
1575cdf0e10cSrcweir     while ( pViewFrm )
1576cdf0e10cSrcweir     {
1577cdf0e10cSrcweir         pChildWnd = pViewFrm->GetChildWindow( nId );
1578cdf0e10cSrcweir         if ( pChildWnd )
1579cdf0e10cSrcweir             return pChildWnd;       // found in any view
1580cdf0e10cSrcweir 
1581cdf0e10cSrcweir         pViewFrm = SfxViewFrame::GetNext( *pViewFrm );
1582cdf0e10cSrcweir     }
1583cdf0e10cSrcweir 
1584cdf0e10cSrcweir     return NULL;                    // none found
1585cdf0e10cSrcweir }
1586cdf0e10cSrcweir 
IsModalMode(SfxObjectShell * pDocSh)1587cdf0e10cSrcweir sal_Bool ScModule::IsModalMode(SfxObjectShell* pDocSh)
1588cdf0e10cSrcweir {
1589cdf0e10cSrcweir     //! move reference dialog handling to view
1590cdf0e10cSrcweir     //! (only keep function autopilot here for references to other documents)
1591cdf0e10cSrcweir 
1592cdf0e10cSrcweir     sal_Bool bIsModal = sal_False;
1593cdf0e10cSrcweir 
1594cdf0e10cSrcweir     if ( nCurRefDlgId )
1595cdf0e10cSrcweir     {
1596cdf0e10cSrcweir         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
1597cdf0e10cSrcweir         if ( pChildWnd )
1598cdf0e10cSrcweir         {
1599cdf0e10cSrcweir             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
1600cdf0e10cSrcweir             bIsModal = pChildWnd->IsVisible() &&
1601cdf0e10cSrcweir                 !( pRefDlg->IsRefInputMode() && pRefDlg->IsDocAllowed(pDocSh) );
1602cdf0e10cSrcweir         }
1603cdf0e10cSrcweir         else
1604cdf0e10cSrcweir         {
1605cdf0e10cSrcweir             // in 592 and above, the dialog isn't visible in other views
1606cdf0e10cSrcweir             //  if the dialog is open but can't be accessed, disable input
1607cdf0e10cSrcweir 
1608cdf0e10cSrcweir             bIsModal = sal_True;
1609cdf0e10cSrcweir         }
1610cdf0e10cSrcweir 
1611cdf0e10cSrcweir         //  pChildWnd kann 0 sein, wenn der Dialog nach dem Umschalten
1612cdf0e10cSrcweir         //  von einer anderen Shell noch nicht erzeugt wurde (z.B. in GetFocus)
1613cdf0e10cSrcweir     }
1614cdf0e10cSrcweir     else if (pDocSh)
1615cdf0e10cSrcweir     {
1616cdf0e10cSrcweir         ScInputHandler* pHdl = GetInputHdl();
1617cdf0e10cSrcweir         if ( pHdl )
1618cdf0e10cSrcweir             bIsModal = pHdl->IsModalMode(pDocSh);
1619cdf0e10cSrcweir     }
1620cdf0e10cSrcweir 
1621cdf0e10cSrcweir     return bIsModal;
1622cdf0e10cSrcweir }
1623cdf0e10cSrcweir 
IsTableLocked()1624cdf0e10cSrcweir sal_Bool ScModule::IsTableLocked()
1625cdf0e10cSrcweir {
1626cdf0e10cSrcweir     //! move reference dialog handling to view
1627cdf0e10cSrcweir     //! (only keep function autopilot here for references to other documents)
1628cdf0e10cSrcweir 
1629cdf0e10cSrcweir     sal_Bool bLocked = sal_False;
1630cdf0e10cSrcweir 
1631cdf0e10cSrcweir     //  bisher nur bei ScAnyRefDlg
1632cdf0e10cSrcweir 
1633cdf0e10cSrcweir     if ( nCurRefDlgId )
1634cdf0e10cSrcweir     {
1635cdf0e10cSrcweir         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
1636cdf0e10cSrcweir         if ( pChildWnd )
1637cdf0e10cSrcweir             bLocked = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow())->IsTableLocked();
1638cdf0e10cSrcweir         else
1639cdf0e10cSrcweir             bLocked = sal_True;     // for other views, see IsModalMode
1640cdf0e10cSrcweir     }
1641cdf0e10cSrcweir 
1642cdf0e10cSrcweir     return bLocked;
1643cdf0e10cSrcweir }
1644cdf0e10cSrcweir 
IsRefDialogOpen()1645cdf0e10cSrcweir sal_Bool ScModule::IsRefDialogOpen()
1646cdf0e10cSrcweir {
1647cdf0e10cSrcweir     //! move reference dialog handling to view
1648cdf0e10cSrcweir     //! (only keep function autopilot here for references to other documents)
1649cdf0e10cSrcweir 
1650cdf0e10cSrcweir     sal_Bool bIsOpen = sal_False;
1651cdf0e10cSrcweir 
1652cdf0e10cSrcweir     if ( nCurRefDlgId )
1653cdf0e10cSrcweir     {
1654cdf0e10cSrcweir         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
1655cdf0e10cSrcweir         if ( pChildWnd )
1656cdf0e10cSrcweir             bIsOpen = pChildWnd->IsVisible();
1657cdf0e10cSrcweir         else
1658cdf0e10cSrcweir             bIsOpen = sal_True;     // for other views, see IsModalMode
1659cdf0e10cSrcweir     }
1660cdf0e10cSrcweir 
1661cdf0e10cSrcweir     return bIsOpen;
1662cdf0e10cSrcweir }
1663cdf0e10cSrcweir 
IsFormulaMode()1664cdf0e10cSrcweir sal_Bool ScModule::IsFormulaMode()
1665cdf0e10cSrcweir {
1666cdf0e10cSrcweir     //! move reference dialog handling to view
1667cdf0e10cSrcweir     //! (only keep function autopilot here for references to other documents)
1668cdf0e10cSrcweir 
1669cdf0e10cSrcweir     sal_Bool bIsFormula = sal_False;
1670cdf0e10cSrcweir 
1671cdf0e10cSrcweir     if ( nCurRefDlgId )
1672cdf0e10cSrcweir     {
1673cdf0e10cSrcweir         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
1674cdf0e10cSrcweir         if ( pChildWnd )
1675cdf0e10cSrcweir         {
1676cdf0e10cSrcweir             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
1677cdf0e10cSrcweir             bIsFormula = pChildWnd->IsVisible() && pRefDlg->IsRefInputMode();
1678cdf0e10cSrcweir         }
1679cdf0e10cSrcweir     }
1680cdf0e10cSrcweir     else
1681cdf0e10cSrcweir     {
1682cdf0e10cSrcweir         ScInputHandler* pHdl = GetInputHdl();
1683cdf0e10cSrcweir         if ( pHdl )
1684cdf0e10cSrcweir             bIsFormula = pHdl->IsFormulaMode();
1685cdf0e10cSrcweir     }
1686cdf0e10cSrcweir 
1687cdf0e10cSrcweir     if (bIsInEditCommand)
1688cdf0e10cSrcweir         bIsFormula = sal_True;
1689cdf0e10cSrcweir 
1690cdf0e10cSrcweir     return bIsFormula;
1691cdf0e10cSrcweir }
1692cdf0e10cSrcweir 
lcl_MarkedTabs(const ScMarkData & rMark,SCTAB & rStartTab,SCTAB & rEndTab)1693cdf0e10cSrcweir void lcl_MarkedTabs( const ScMarkData& rMark, SCTAB& rStartTab, SCTAB& rEndTab )
1694cdf0e10cSrcweir {
1695cdf0e10cSrcweir     if (rMark.GetSelectCount() > 1)
1696cdf0e10cSrcweir     {
1697cdf0e10cSrcweir         sal_Bool bFirst = sal_True;
1698cdf0e10cSrcweir         for (SCTAB i=0; i<=MAXTAB; i++)
1699cdf0e10cSrcweir             if (rMark.GetTableSelect(i))
1700cdf0e10cSrcweir             {
1701cdf0e10cSrcweir                 if (bFirst)
1702cdf0e10cSrcweir                     rStartTab = i;
1703cdf0e10cSrcweir                 rEndTab = i;
1704cdf0e10cSrcweir                 bFirst = sal_False;
1705cdf0e10cSrcweir             }
1706cdf0e10cSrcweir     }
1707cdf0e10cSrcweir }
1708cdf0e10cSrcweir 
SetReference(const ScRange & rRef,ScDocument * pDoc,const ScMarkData * pMarkData)1709cdf0e10cSrcweir void ScModule::SetReference( const ScRange& rRef, ScDocument* pDoc,
1710cdf0e10cSrcweir                                     const ScMarkData* pMarkData )
1711cdf0e10cSrcweir {
1712cdf0e10cSrcweir     //! move reference dialog handling to view
1713cdf0e10cSrcweir     //! (only keep function autopilot here for references to other documents)
1714cdf0e10cSrcweir 
1715cdf0e10cSrcweir     //  in Ref-Dialogen wird hiermit auch das Zoom-In ausgeloest,
1716cdf0e10cSrcweir     //  wenn Start und Ende der Ref unterschiedlich sind
1717cdf0e10cSrcweir 
1718cdf0e10cSrcweir     ScRange aNew = rRef;
1719cdf0e10cSrcweir     aNew.Justify();                 // immer "richtig herum"
1720cdf0e10cSrcweir 
1721cdf0e10cSrcweir     if( nCurRefDlgId )
1722cdf0e10cSrcweir     {
1723cdf0e10cSrcweir         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
1724cdf0e10cSrcweir         DBG_ASSERT( pChildWnd, "NoChildWin" );
1725cdf0e10cSrcweir         if ( pChildWnd )
1726cdf0e10cSrcweir         {
1727cdf0e10cSrcweir             if ( nCurRefDlgId == SID_OPENDLG_CONSOLIDATE && pMarkData )
1728cdf0e10cSrcweir             {
1729cdf0e10cSrcweir                 SCTAB nStartTab = aNew.aStart.Tab();
1730cdf0e10cSrcweir                 SCTAB nEndTab   = aNew.aEnd.Tab();
1731cdf0e10cSrcweir                 lcl_MarkedTabs( *pMarkData, nStartTab, nEndTab );
1732cdf0e10cSrcweir                 aNew.aStart.SetTab(nStartTab);
1733cdf0e10cSrcweir                 aNew.aEnd.SetTab(nEndTab);
1734cdf0e10cSrcweir             }
1735cdf0e10cSrcweir 
1736cdf0e10cSrcweir             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
1737cdf0e10cSrcweir 
1738cdf0e10cSrcweir             //  hide the (color) selection now instead of later from LoseFocus,
1739cdf0e10cSrcweir             //  don't abort the ref input that causes this call (bDoneRefMode = sal_False)
1740cdf0e10cSrcweir             pRefDlg->HideReference( sal_False );
1741cdf0e10cSrcweir             pRefDlg->SetReference( aNew, pDoc );
1742cdf0e10cSrcweir         }
1743cdf0e10cSrcweir     }
1744cdf0e10cSrcweir     else
1745cdf0e10cSrcweir     {
1746cdf0e10cSrcweir         ScInputHandler* pHdl = GetInputHdl();
1747cdf0e10cSrcweir         if (pHdl)
1748cdf0e10cSrcweir             pHdl->SetReference( aNew, pDoc );
1749cdf0e10cSrcweir         else
1750cdf0e10cSrcweir         {
1751cdf0e10cSrcweir             DBG_ERROR("SetReference ohne Empfaenger");
1752cdf0e10cSrcweir         }
1753cdf0e10cSrcweir     }
1754cdf0e10cSrcweir }
1755cdf0e10cSrcweir 
AddRefEntry()1756cdf0e10cSrcweir void ScModule::AddRefEntry()                        // "Mehrfachselektion"
1757cdf0e10cSrcweir {
1758cdf0e10cSrcweir     //! move reference dialog handling to view
1759cdf0e10cSrcweir     //! (only keep function autopilot here for references to other documents)
1760cdf0e10cSrcweir 
1761cdf0e10cSrcweir     if ( nCurRefDlgId )
1762cdf0e10cSrcweir     {
1763cdf0e10cSrcweir         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
1764cdf0e10cSrcweir         DBG_ASSERT( pChildWnd, "NoChildWin" );
1765cdf0e10cSrcweir         if ( pChildWnd )
1766cdf0e10cSrcweir         {
1767cdf0e10cSrcweir             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
1768cdf0e10cSrcweir             pRefDlg->AddRefEntry();
1769cdf0e10cSrcweir         }
1770cdf0e10cSrcweir     }
1771cdf0e10cSrcweir     else
1772cdf0e10cSrcweir     {
1773cdf0e10cSrcweir         ScInputHandler* pHdl = GetInputHdl();
1774cdf0e10cSrcweir         if (pHdl)
1775cdf0e10cSrcweir             pHdl->AddRefEntry();
1776cdf0e10cSrcweir     }
1777cdf0e10cSrcweir }
1778cdf0e10cSrcweir 
EndReference()1779cdf0e10cSrcweir void ScModule::EndReference()
1780cdf0e10cSrcweir {
1781cdf0e10cSrcweir     //! move reference dialog handling to view
1782cdf0e10cSrcweir     //! (only keep function autopilot here for references to other documents)
1783cdf0e10cSrcweir 
1784cdf0e10cSrcweir     //  in Ref-Dialogen wird hiermit auch das Zoom-In wieder aufgehoben
1785cdf0e10cSrcweir 
1786cdf0e10cSrcweir     //! ShowRefFrame am InputHdl, wenn der Funktions-AP offen ist ???
1787cdf0e10cSrcweir 
1788cdf0e10cSrcweir     if ( nCurRefDlgId )
1789cdf0e10cSrcweir     {
1790cdf0e10cSrcweir         SfxChildWindow* pChildWnd = lcl_GetChildWinFromAnyView( nCurRefDlgId );
1791cdf0e10cSrcweir         DBG_ASSERT( pChildWnd, "NoChildWin" );
1792cdf0e10cSrcweir         if ( pChildWnd )
1793cdf0e10cSrcweir         {
1794cdf0e10cSrcweir             IAnyRefDialog* pRefDlg = dynamic_cast<IAnyRefDialog*>(pChildWnd->GetWindow());
1795cdf0e10cSrcweir             pRefDlg->SetActive();
1796cdf0e10cSrcweir         }
1797cdf0e10cSrcweir     }
1798cdf0e10cSrcweir }
1799cdf0e10cSrcweir 
1800cdf0e10cSrcweir //------------------------------------------------------------------
1801cdf0e10cSrcweir //
1802cdf0e10cSrcweir //                  Idle / Online-Spelling
1803cdf0e10cSrcweir //
1804cdf0e10cSrcweir //------------------------------------------------------------------
1805cdf0e10cSrcweir 
AnythingChanged()1806cdf0e10cSrcweir void ScModule::AnythingChanged()
1807cdf0e10cSrcweir {
1808cdf0e10cSrcweir     sal_uLong nOldTime = aIdleTimer.GetTimeout();
1809cdf0e10cSrcweir     if ( nOldTime != SC_IDLE_MIN )
1810cdf0e10cSrcweir         aIdleTimer.SetTimeout( SC_IDLE_MIN );
1811cdf0e10cSrcweir 
1812cdf0e10cSrcweir     nIdleCount = 0;
1813cdf0e10cSrcweir }
1814cdf0e10cSrcweir 
lcl_CheckNeedsRepaint(ScDocShell * pDocShell)1815cdf0e10cSrcweir void lcl_CheckNeedsRepaint( ScDocShell* pDocShell )
1816cdf0e10cSrcweir {
1817cdf0e10cSrcweir     SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pDocShell );
1818cdf0e10cSrcweir     while ( pFrame )
1819cdf0e10cSrcweir     {
1820cdf0e10cSrcweir         SfxViewShell* p = pFrame->GetViewShell();
1821cdf0e10cSrcweir         ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell,p);
1822cdf0e10cSrcweir         if ( pViewSh )
1823cdf0e10cSrcweir             pViewSh->CheckNeedsRepaint();
1824cdf0e10cSrcweir         pFrame = SfxViewFrame::GetNext( *pFrame, pDocShell );
1825cdf0e10cSrcweir     }
1826cdf0e10cSrcweir }
1827cdf0e10cSrcweir 
IMPL_LINK(ScModule,IdleHandler,Timer *,EMPTYARG)1828cdf0e10cSrcweir IMPL_LINK( ScModule, IdleHandler, Timer*, EMPTYARG )
1829cdf0e10cSrcweir {
1830cdf0e10cSrcweir     if ( Application::AnyInput( INPUT_MOUSEANDKEYBOARD ) )
1831cdf0e10cSrcweir     {
1832cdf0e10cSrcweir         aIdleTimer.Start();         // Timeout unveraendert
1833cdf0e10cSrcweir         return 0;
1834cdf0e10cSrcweir     }
1835cdf0e10cSrcweir 
1836cdf0e10cSrcweir     sal_Bool bMore = sal_False;
1837cdf0e10cSrcweir     ScDocShell* pDocSh = PTR_CAST( ScDocShell, SfxObjectShell::Current() );
1838cdf0e10cSrcweir     if ( pDocSh )
1839cdf0e10cSrcweir     {
1840cdf0e10cSrcweir         ScDocument* pDoc = pDocSh->GetDocument();
1841cdf0e10cSrcweir 
1842cdf0e10cSrcweir         sal_Bool bLinks = pDoc->IdleCheckLinks();
1843cdf0e10cSrcweir         sal_Bool bWidth = pDoc->IdleCalcTextWidth();
1844cdf0e10cSrcweir         sal_Bool bSpell = pDoc->ContinueOnlineSpelling();
1845cdf0e10cSrcweir         if ( bSpell )
1846cdf0e10cSrcweir             aSpellTimer.Start();                    // da ist noch was
1847cdf0e10cSrcweir 
1848cdf0e10cSrcweir         bMore = bLinks || bWidth || bSpell;         // ueberhaupt noch was?
1849cdf0e10cSrcweir 
1850*86e1cf34SPedro Giffuni         //  While calculating a Basic formula, a paint event may have occurred,
1851cdf0e10cSrcweir         //  so check the bNeedsRepaint flags for this document's views
1852cdf0e10cSrcweir         if (bWidth)
1853cdf0e10cSrcweir             lcl_CheckNeedsRepaint( pDocSh );
1854cdf0e10cSrcweir     }
1855cdf0e10cSrcweir 
1856cdf0e10cSrcweir     sal_uLong nOldTime = aIdleTimer.GetTimeout();
1857cdf0e10cSrcweir     sal_uLong nNewTime = nOldTime;
1858cdf0e10cSrcweir     if ( bMore )
1859cdf0e10cSrcweir     {
1860cdf0e10cSrcweir         nNewTime = SC_IDLE_MIN;
1861cdf0e10cSrcweir         nIdleCount = 0;
1862cdf0e10cSrcweir     }
1863cdf0e10cSrcweir     else
1864cdf0e10cSrcweir     {
1865cdf0e10cSrcweir         //  SC_IDLE_COUNT mal mit initialem Timeout, dann hochzaehlen
1866cdf0e10cSrcweir 
1867cdf0e10cSrcweir         if ( nIdleCount < SC_IDLE_COUNT )
1868cdf0e10cSrcweir             ++nIdleCount;
1869cdf0e10cSrcweir         else
1870cdf0e10cSrcweir         {
1871cdf0e10cSrcweir             nNewTime += SC_IDLE_STEP;
1872cdf0e10cSrcweir             if ( nNewTime > SC_IDLE_MAX )
1873cdf0e10cSrcweir                 nNewTime = SC_IDLE_MAX;
1874cdf0e10cSrcweir         }
1875cdf0e10cSrcweir     }
1876cdf0e10cSrcweir     if ( nNewTime != nOldTime )
1877cdf0e10cSrcweir         aIdleTimer.SetTimeout( nNewTime );
1878cdf0e10cSrcweir 
1879cdf0e10cSrcweir     aIdleTimer.Start();
1880cdf0e10cSrcweir     return 0;
1881cdf0e10cSrcweir }
1882cdf0e10cSrcweir 
IMPL_LINK(ScModule,SpellTimerHdl,Timer *,EMPTYARG)1883cdf0e10cSrcweir IMPL_LINK( ScModule, SpellTimerHdl, Timer*, EMPTYARG )
1884cdf0e10cSrcweir {
1885cdf0e10cSrcweir     if ( Application::AnyInput( INPUT_KEYBOARD ) )
1886cdf0e10cSrcweir     {
1887cdf0e10cSrcweir         aSpellTimer.Start();
1888cdf0e10cSrcweir         return 0;                   // dann spaeter wieder...
1889cdf0e10cSrcweir     }
1890cdf0e10cSrcweir 
1891cdf0e10cSrcweir     ScDocShell* pDocSh = PTR_CAST( ScDocShell, SfxObjectShell::Current() );
1892cdf0e10cSrcweir     if ( pDocSh )
1893cdf0e10cSrcweir     {
1894cdf0e10cSrcweir         ScDocument* pDoc = pDocSh->GetDocument();
1895cdf0e10cSrcweir         if ( pDoc->ContinueOnlineSpelling() )
1896cdf0e10cSrcweir             aSpellTimer.Start();
1897cdf0e10cSrcweir     }
1898cdf0e10cSrcweir     return 0;
1899cdf0e10cSrcweir }
1900cdf0e10cSrcweir 
1901cdf0e10cSrcweir     //virtuelle Methoden fuer den Optionendialog
CreateItemSet(sal_uInt16 nId)1902cdf0e10cSrcweir SfxItemSet*  ScModule::CreateItemSet( sal_uInt16 nId )
1903cdf0e10cSrcweir {
1904cdf0e10cSrcweir     SfxItemSet*  pRet = 0;
1905cdf0e10cSrcweir     if(SID_SC_EDITOPTIONS == nId)
1906cdf0e10cSrcweir     {
1907cdf0e10cSrcweir         pRet = new SfxItemSet( GetPool(),
1908cdf0e10cSrcweir                             // TP_CALC:
1909cdf0e10cSrcweir                             SID_SCDOCOPTIONS,       SID_SCDOCOPTIONS,
1910cdf0e10cSrcweir                             // TP_VIEW:
1911cdf0e10cSrcweir                             SID_SCVIEWOPTIONS,      SID_SCVIEWOPTIONS,
1912cdf0e10cSrcweir                             SID_SC_OPT_SYNCZOOM,    SID_SC_OPT_SYNCZOOM,
1913cdf0e10cSrcweir                             // TP_INPUT:
1914cdf0e10cSrcweir                             SID_SC_INPUT_SELECTION,SID_SC_INPUT_MARK_HEADER,
1915cdf0e10cSrcweir                             SID_SC_INPUT_TEXTWYSIWYG,SID_SC_INPUT_TEXTWYSIWYG,
1916cdf0e10cSrcweir                             SID_SC_INPUT_REPLCELLSWARN,SID_SC_INPUT_REPLCELLSWARN,
1917cdf0e10cSrcweir                             // TP_USERLISTS:
1918cdf0e10cSrcweir                             SCITEM_USERLIST,        SCITEM_USERLIST,
1919cdf0e10cSrcweir                             // TP_PRINT:
1920cdf0e10cSrcweir                             SID_SCPRINTOPTIONS, SID_SCPRINTOPTIONS,
1921cdf0e10cSrcweir                             // TP_GRID:
1922cdf0e10cSrcweir                             SID_ATTR_GRID_OPTIONS, SID_ATTR_GRID_OPTIONS,
1923cdf0e10cSrcweir                             //
1924cdf0e10cSrcweir                             SID_ATTR_METRIC,        SID_ATTR_METRIC,
1925cdf0e10cSrcweir                             SID_ATTR_DEFTABSTOP,    SID_ATTR_DEFTABSTOP,
1926cdf0e10cSrcweir                             0 );
1927cdf0e10cSrcweir 
1928cdf0e10cSrcweir         ScDocShell*     pDocSh = PTR_CAST(ScDocShell,
1929cdf0e10cSrcweir                                             SfxObjectShell::Current());
1930cdf0e10cSrcweir         ScDocOptions    aCalcOpt = pDocSh
1931cdf0e10cSrcweir                             ? pDocSh->GetDocument()->GetDocOptions()
1932cdf0e10cSrcweir                             : GetDocOptions();
1933cdf0e10cSrcweir 
1934cdf0e10cSrcweir         ScTabViewShell* pViewSh = PTR_CAST(ScTabViewShell,
1935cdf0e10cSrcweir                                             SfxViewShell::Current());
1936cdf0e10cSrcweir         ScViewOptions   aViewOpt = pViewSh
1937cdf0e10cSrcweir                             ? pViewSh->GetViewData()->GetOptions()
1938cdf0e10cSrcweir                             : GetViewOptions();
1939cdf0e10cSrcweir 
1940cdf0e10cSrcweir         ScUserListItem  aULItem( SCITEM_USERLIST );
1941cdf0e10cSrcweir         ScUserList*     pUL = ScGlobal::GetUserList();
1942cdf0e10cSrcweir 
1943cdf0e10cSrcweir         //  SFX_APP()->GetOptions( aSet );
1944cdf0e10cSrcweir 
1945cdf0e10cSrcweir         pRet->Put( SfxUInt16Item( SID_ATTR_METRIC,
1946cdf0e10cSrcweir                         sal::static_int_cast<sal_uInt16>(GetAppOptions().GetAppMetric()) ) );
1947cdf0e10cSrcweir 
1948cdf0e10cSrcweir         // TP_CALC
1949cdf0e10cSrcweir         pRet->Put( SfxUInt16Item( SID_ATTR_DEFTABSTOP,
1950cdf0e10cSrcweir                         aCalcOpt.GetTabDistance()));
1951cdf0e10cSrcweir         pRet->Put( ScTpCalcItem( SID_SCDOCOPTIONS, aCalcOpt ) );
1952cdf0e10cSrcweir 
1953cdf0e10cSrcweir         // TP_VIEW
1954cdf0e10cSrcweir         pRet->Put( ScTpViewItem( SID_SCVIEWOPTIONS, aViewOpt ) );
1955cdf0e10cSrcweir         pRet->Put( SfxBoolItem( SID_SC_OPT_SYNCZOOM, GetAppOptions().GetSynchronizeZoom() ) );
1956cdf0e10cSrcweir 
1957cdf0e10cSrcweir         // TP_INPUT
1958cdf0e10cSrcweir         const ScInputOptions& rInpOpt = GetInputOptions();
1959cdf0e10cSrcweir         pRet->Put( SfxUInt16Item( SID_SC_INPUT_SELECTIONPOS,
1960cdf0e10cSrcweir                     rInpOpt.GetMoveDir() ) );
1961cdf0e10cSrcweir         pRet->Put( SfxBoolItem( SID_SC_INPUT_SELECTION,
1962cdf0e10cSrcweir                     rInpOpt.GetMoveSelection() ) );
1963cdf0e10cSrcweir         pRet->Put( SfxBoolItem( SID_SC_INPUT_EDITMODE,
1964cdf0e10cSrcweir                     rInpOpt.GetEnterEdit() ) );
1965cdf0e10cSrcweir         pRet->Put( SfxBoolItem( SID_SC_INPUT_FMT_EXPAND,
1966cdf0e10cSrcweir                     rInpOpt.GetExtendFormat() ) );
1967cdf0e10cSrcweir         pRet->Put( SfxBoolItem( SID_SC_INPUT_RANGEFINDER,
1968cdf0e10cSrcweir                     rInpOpt.GetRangeFinder() ) );
1969cdf0e10cSrcweir         pRet->Put( SfxBoolItem( SID_SC_INPUT_REF_EXPAND,
1970cdf0e10cSrcweir                     rInpOpt.GetExpandRefs() ) );
1971cdf0e10cSrcweir         pRet->Put( SfxBoolItem( SID_SC_INPUT_MARK_HEADER,
1972cdf0e10cSrcweir                     rInpOpt.GetMarkHeader() ) );
1973cdf0e10cSrcweir         pRet->Put( SfxBoolItem( SID_SC_INPUT_TEXTWYSIWYG,
1974cdf0e10cSrcweir                     rInpOpt.GetTextWysiwyg() ) );
1975cdf0e10cSrcweir         pRet->Put( SfxBoolItem( SID_SC_INPUT_REPLCELLSWARN,
1976cdf0e10cSrcweir                     rInpOpt.GetReplaceCellsWarn() ) );
1977cdf0e10cSrcweir 
1978cdf0e10cSrcweir         // RID_SC_TP_PRINT
1979cdf0e10cSrcweir         pRet->Put( ScTpPrintItem( SID_SCPRINTOPTIONS, GetPrintOptions() ) );
1980cdf0e10cSrcweir 
1981cdf0e10cSrcweir         // TP_GRID
1982cdf0e10cSrcweir         SvxGridItem* pSvxGridItem = aViewOpt.CreateGridItem();
1983cdf0e10cSrcweir         pRet->Put( *pSvxGridItem );
1984cdf0e10cSrcweir         delete pSvxGridItem;
1985cdf0e10cSrcweir 
1986cdf0e10cSrcweir         // TP_USERLISTS
1987cdf0e10cSrcweir         if ( pUL )
1988cdf0e10cSrcweir             aULItem.SetUserList( *pUL );
1989cdf0e10cSrcweir         pRet->Put( aULItem );
1990cdf0e10cSrcweir 
1991cdf0e10cSrcweir     }
1992cdf0e10cSrcweir     return pRet;
1993cdf0e10cSrcweir }
1994cdf0e10cSrcweir 
ApplyItemSet(sal_uInt16 nId,const SfxItemSet & rSet)1995cdf0e10cSrcweir void ScModule::ApplyItemSet( sal_uInt16 nId, const SfxItemSet& rSet )
1996cdf0e10cSrcweir {
1997cdf0e10cSrcweir     if(SID_SC_EDITOPTIONS == nId)
1998cdf0e10cSrcweir     {
1999cdf0e10cSrcweir         ModifyOptions( rSet );
2000cdf0e10cSrcweir     }
2001cdf0e10cSrcweir }
2002cdf0e10cSrcweir 
CreateTabPage(sal_uInt16 nId,Window * pParent,const SfxItemSet & rSet)2003cdf0e10cSrcweir SfxTabPage*  ScModule::CreateTabPage( sal_uInt16 nId, Window* pParent, const SfxItemSet& rSet )
2004cdf0e10cSrcweir {
2005cdf0e10cSrcweir     SfxTabPage* pRet = NULL;
2006cdf0e10cSrcweir     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
2007cdf0e10cSrcweir     DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
2008cdf0e10cSrcweir     switch(nId)
2009cdf0e10cSrcweir     {
2010cdf0e10cSrcweir         case SID_SC_TP_LAYOUT:
2011cdf0e10cSrcweir                                 {
2012cdf0e10cSrcweir                                     //CHINA001 pRet = ScTpLayoutOptions::Create(pParent, rSet);
2013cdf0e10cSrcweir                                     ::CreateTabPage ScTpLayoutOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_LAYOUT );
2014cdf0e10cSrcweir                                     if ( ScTpLayoutOptionsCreate )
2015cdf0e10cSrcweir                                         pRet =  (*ScTpLayoutOptionsCreate) (pParent, rSet);
2016cdf0e10cSrcweir                                 }
2017cdf0e10cSrcweir                                 break;
2018cdf0e10cSrcweir         case SID_SC_TP_CONTENT:
2019cdf0e10cSrcweir                                 {
2020cdf0e10cSrcweir                                     //CHINA001 pRet = ScTpContentOptions::Create(pParent, rSet);
2021cdf0e10cSrcweir                                     ::CreateTabPage ScTpContentOptionsCreate = pFact->GetTabPageCreatorFunc(RID_SCPAGE_CONTENT);
2022cdf0e10cSrcweir                                     if ( ScTpContentOptionsCreate )
2023cdf0e10cSrcweir                                         pRet = (*ScTpContentOptionsCreate)(pParent, rSet);
2024cdf0e10cSrcweir                                 }
2025cdf0e10cSrcweir                                 break;
2026cdf0e10cSrcweir         case SID_SC_TP_GRID:            pRet = SvxGridTabPage::Create(pParent, rSet); break;
2027cdf0e10cSrcweir         case SID_SC_TP_USERLISTS:
2028cdf0e10cSrcweir                                 {
2029cdf0e10cSrcweir                                     //CHINA001 pRet = ScTpUserLists::Create(pParent, rSet);
2030cdf0e10cSrcweir                                     ::CreateTabPage ScTpUserListsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_USERLISTS );
2031cdf0e10cSrcweir                                     if ( ScTpUserListsCreate )
2032cdf0e10cSrcweir                                             pRet = (*ScTpUserListsCreate)( pParent, rSet);
2033cdf0e10cSrcweir                                 }
2034cdf0e10cSrcweir                                 break;
2035cdf0e10cSrcweir         case SID_SC_TP_CALC:
2036cdf0e10cSrcweir                                 {   //CHINA001 pRet = ScTpCalcOptions::Create(pParent, rSet);
2037cdf0e10cSrcweir                                                     ::CreateTabPage ScTpCalcOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_CALC );
2038cdf0e10cSrcweir                                                     if ( ScTpCalcOptionsCreate )
2039cdf0e10cSrcweir                                                         pRet = (*ScTpCalcOptionsCreate)(pParent, rSet);
2040cdf0e10cSrcweir                                 }
2041cdf0e10cSrcweir                                 break;
2042cdf0e10cSrcweir         case SID_SC_TP_CHANGES:
2043cdf0e10cSrcweir                                 {           //CHINA001 pRet = ScRedlineOptionsTabPage::Create(pParent, rSet);
2044cdf0e10cSrcweir                                             ::CreateTabPage ScRedlineOptionsTabPageCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_OPREDLINE );
2045cdf0e10cSrcweir                                             if ( ScRedlineOptionsTabPageCreate )
2046cdf0e10cSrcweir                                                     pRet =(*ScRedlineOptionsTabPageCreate)(pParent, rSet);
2047cdf0e10cSrcweir                                 }
2048cdf0e10cSrcweir                         break;
2049cdf0e10cSrcweir         case RID_SC_TP_PRINT:
2050cdf0e10cSrcweir                                 {//CHINA001 pRet = ScTpPrintOptions::Create(pParent, rSet);
2051cdf0e10cSrcweir                                     ::CreateTabPage ScTpPrintOptionsCreate =    pFact->GetTabPageCreatorFunc( RID_SCPAGE_PRINT );
2052cdf0e10cSrcweir                                     if ( ScTpPrintOptionsCreate )
2053cdf0e10cSrcweir                                         pRet = (*ScTpPrintOptionsCreate)( pParent, rSet);
2054cdf0e10cSrcweir                                 }
2055cdf0e10cSrcweir             break;
2056cdf0e10cSrcweir         case RID_OFA_TP_INTERNATIONAL:
2057cdf0e10cSrcweir         {
2058cdf0e10cSrcweir             SfxAbstractDialogFactory* pSfxFact = SfxAbstractDialogFactory::Create();
2059cdf0e10cSrcweir             if ( pSfxFact )
2060cdf0e10cSrcweir             {
2061cdf0e10cSrcweir                 ::CreateTabPage fnCreatePage = pSfxFact->GetTabPageCreatorFunc( nId );
2062cdf0e10cSrcweir                 if ( fnCreatePage )
2063cdf0e10cSrcweir                     pRet = (*fnCreatePage)( pParent, rSet );
2064cdf0e10cSrcweir             }
2065cdf0e10cSrcweir         }
2066cdf0e10cSrcweir     }
2067cdf0e10cSrcweir 
2068cdf0e10cSrcweir     DBG_ASSERT( pRet, "ScModule::CreateTabPage(): no valid ID for TabPage!" );
2069cdf0e10cSrcweir 
2070cdf0e10cSrcweir     return pRet;
2071cdf0e10cSrcweir }
2072cdf0e10cSrcweir 
2073cdf0e10cSrcweir //------------------------------------------------------------------
2074cdf0e10cSrcweir 
IMPL_LINK(ScModule,CalcFieldValueHdl,EditFieldInfo *,pInfo)2075cdf0e10cSrcweir IMPL_LINK( ScModule, CalcFieldValueHdl, EditFieldInfo*, pInfo )
2076cdf0e10cSrcweir {
2077cdf0e10cSrcweir     //! mit ScFieldEditEngine zusammenfassen !!!
2078cdf0e10cSrcweir 
2079cdf0e10cSrcweir     if (pInfo)
2080cdf0e10cSrcweir     {
2081cdf0e10cSrcweir         const SvxFieldItem& rField = pInfo->GetField();
2082cdf0e10cSrcweir         const SvxFieldData* pField = rField.GetField();
2083cdf0e10cSrcweir 
2084cdf0e10cSrcweir         if (pField && pField->ISA(SvxURLField))
2085cdf0e10cSrcweir         {
2086cdf0e10cSrcweir             /******************************************************************
2087cdf0e10cSrcweir             * URL-Field
2088cdf0e10cSrcweir             ******************************************************************/
2089cdf0e10cSrcweir 
2090cdf0e10cSrcweir             const SvxURLField* pURLField = (const SvxURLField*) pField;
2091cdf0e10cSrcweir             String aURL = pURLField->GetURL();
2092cdf0e10cSrcweir 
2093cdf0e10cSrcweir             switch ( pURLField->GetFormat() )
2094cdf0e10cSrcweir             {
2095cdf0e10cSrcweir                 case SVXURLFORMAT_APPDEFAULT: //!!! einstellbar an App???
2096cdf0e10cSrcweir                 case SVXURLFORMAT_REPR:
2097cdf0e10cSrcweir                 {
2098cdf0e10cSrcweir                     pInfo->SetRepresentation( pURLField->GetRepresentation() );
2099cdf0e10cSrcweir                 }
2100cdf0e10cSrcweir                 break;
2101cdf0e10cSrcweir 
2102cdf0e10cSrcweir                 case SVXURLFORMAT_URL:
2103cdf0e10cSrcweir                 {
2104cdf0e10cSrcweir                     pInfo->SetRepresentation( aURL );
2105cdf0e10cSrcweir                 }
2106cdf0e10cSrcweir                 break;
2107cdf0e10cSrcweir             }
2108cdf0e10cSrcweir 
2109cdf0e10cSrcweir             svtools::ColorConfigEntry eEntry =
2110cdf0e10cSrcweir                 INetURLHistory::GetOrCreate()->QueryUrl( aURL ) ? svtools::LINKSVISITED : svtools::LINKS;
2111cdf0e10cSrcweir             pInfo->SetTxtColor( GetColorConfig().GetColorValue(eEntry).nColor );
2112cdf0e10cSrcweir         }
2113cdf0e10cSrcweir         else
2114cdf0e10cSrcweir         {
2115cdf0e10cSrcweir             DBG_ERROR("unbekannter Feldbefehl");
2116cdf0e10cSrcweir             pInfo->SetRepresentation(String('?'));
2117cdf0e10cSrcweir         }
2118cdf0e10cSrcweir     }
2119cdf0e10cSrcweir 
2120cdf0e10cSrcweir     return 0;
2121cdf0e10cSrcweir }
2122cdf0e10cSrcweir 
RegisterRefWindow(sal_uInt16 nSlotId,Window * pWnd)2123cdf0e10cSrcweir sal_Bool ScModule::RegisterRefWindow( sal_uInt16 nSlotId, Window *pWnd )
2124cdf0e10cSrcweir {
2125cdf0e10cSrcweir     std::list<Window*> & rlRefWindow = m_mapRefWindow[nSlotId];
2126cdf0e10cSrcweir 
2127cdf0e10cSrcweir     if( std::find( rlRefWindow.begin(), rlRefWindow.end(), pWnd ) == rlRefWindow.end() )
2128cdf0e10cSrcweir     {
2129cdf0e10cSrcweir         rlRefWindow.push_back( pWnd );
2130cdf0e10cSrcweir         return sal_True;
2131cdf0e10cSrcweir     }
2132cdf0e10cSrcweir 
2133cdf0e10cSrcweir     return sal_False;
2134cdf0e10cSrcweir }
2135cdf0e10cSrcweir 
UnregisterRefWindow(sal_uInt16 nSlotId,Window * pWnd)2136cdf0e10cSrcweir sal_Bool  ScModule::UnregisterRefWindow( sal_uInt16 nSlotId, Window *pWnd )
2137cdf0e10cSrcweir {
2138cdf0e10cSrcweir     std::map<sal_uInt16, std::list<Window*> >::iterator iSlot = m_mapRefWindow.find( nSlotId );
2139cdf0e10cSrcweir 
2140cdf0e10cSrcweir     if( iSlot == m_mapRefWindow.end() )
2141cdf0e10cSrcweir         return sal_False;
2142cdf0e10cSrcweir 
2143cdf0e10cSrcweir     std::list<Window*> & rlRefWindow = iSlot->second;
2144cdf0e10cSrcweir 
2145cdf0e10cSrcweir     std::list<Window*>::iterator i = std::find( rlRefWindow.begin(), rlRefWindow.end(), pWnd );
2146cdf0e10cSrcweir 
2147cdf0e10cSrcweir     if( i == rlRefWindow.end() )
2148cdf0e10cSrcweir         return sal_False;
2149cdf0e10cSrcweir 
2150cdf0e10cSrcweir     rlRefWindow.erase( i );
2151cdf0e10cSrcweir 
2152cdf0e10cSrcweir     if( !rlRefWindow.size() )
2153cdf0e10cSrcweir         m_mapRefWindow.erase( nSlotId );
2154cdf0e10cSrcweir 
2155cdf0e10cSrcweir     return sal_True;
2156cdf0e10cSrcweir }
2157cdf0e10cSrcweir 
IsAliveRefDlg(sal_uInt16 nSlotId,Window * pWnd)2158cdf0e10cSrcweir sal_Bool  ScModule::IsAliveRefDlg( sal_uInt16 nSlotId, Window *pWnd )
2159cdf0e10cSrcweir {
2160cdf0e10cSrcweir     std::map<sal_uInt16, std::list<Window*> >::iterator iSlot = m_mapRefWindow.find( nSlotId );
2161cdf0e10cSrcweir 
2162cdf0e10cSrcweir     if( iSlot == m_mapRefWindow.end() )
2163cdf0e10cSrcweir         return sal_False;
2164cdf0e10cSrcweir 
2165cdf0e10cSrcweir     std::list<Window*> & rlRefWindow = iSlot->second;
2166cdf0e10cSrcweir 
2167cdf0e10cSrcweir     return rlRefWindow.end() != std::find( rlRefWindow.begin(), rlRefWindow.end(), pWnd );
2168cdf0e10cSrcweir }
2169cdf0e10cSrcweir 
Find1RefWindow(sal_uInt16 nSlotId,Window * pWndAncestor)2170cdf0e10cSrcweir Window *  ScModule::Find1RefWindow( sal_uInt16 nSlotId, Window *pWndAncestor )
2171cdf0e10cSrcweir {
2172cdf0e10cSrcweir     if (!pWndAncestor)
2173cdf0e10cSrcweir         return NULL;
2174cdf0e10cSrcweir 
2175cdf0e10cSrcweir     std::map<sal_uInt16, std::list<Window*> >::iterator iSlot = m_mapRefWindow.find( nSlotId );
2176cdf0e10cSrcweir 
2177cdf0e10cSrcweir     if( iSlot == m_mapRefWindow.end() )
2178cdf0e10cSrcweir         return NULL;
2179cdf0e10cSrcweir 
2180cdf0e10cSrcweir     std::list<Window*> & rlRefWindow = iSlot->second;
2181cdf0e10cSrcweir 
2182cdf0e10cSrcweir     while( Window *pParent = pWndAncestor->GetParent() ) pWndAncestor = pParent;
2183cdf0e10cSrcweir 
2184cdf0e10cSrcweir     for( std::list<Window*>::iterator i = rlRefWindow.begin(); i!=rlRefWindow.end(); i++ )
2185cdf0e10cSrcweir         if ( pWndAncestor->IsWindowOrChild( *i, (*i)->IsSystemWindow() ) )
2186cdf0e10cSrcweir             return *i;
2187cdf0e10cSrcweir 
2188cdf0e10cSrcweir     return NULL;
2189cdf0e10cSrcweir }
2190cdf0e10cSrcweir 
Find1RefWindow(Window * pWndAncestor)2191cdf0e10cSrcweir Window *  ScModule::Find1RefWindow( Window *pWndAncestor )
2192cdf0e10cSrcweir {
2193cdf0e10cSrcweir     if (!pWndAncestor)
2194cdf0e10cSrcweir         return NULL;
2195cdf0e10cSrcweir 
2196cdf0e10cSrcweir     while( Window *pParent = pWndAncestor->GetParent() ) pWndAncestor = pParent;
2197cdf0e10cSrcweir 
2198cdf0e10cSrcweir     for( std::map<sal_uInt16, std::list<Window*> >::iterator i = m_mapRefWindow.begin();
2199cdf0e10cSrcweir         i!=m_mapRefWindow.end(); i++ )
2200cdf0e10cSrcweir         for( std::list<Window*>::iterator j = i->second.begin(); j!=i->second.end(); j++ )
2201cdf0e10cSrcweir             if ( pWndAncestor->IsWindowOrChild( *j, (*j)->IsSystemWindow() ) )
2202cdf0e10cSrcweir                 return *j;
2203cdf0e10cSrcweir 
2204cdf0e10cSrcweir     return NULL;
2205cdf0e10cSrcweir }
2206