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