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