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 "scitems.hxx"
21 : #include <editeng/eeitem.hxx>
22 :
23 : #include <sfx2/app.hxx>
24 : #include <sfx2/bindings.hxx>
25 : #include <sfx2/dispatch.hxx>
26 : #include <sfx2/passwd.hxx>
27 : #include <sfx2/request.hxx>
28 : #include <svl/ptitem.hxx>
29 : #include <svl/stritem.hxx>
30 : #include <tools/urlobj.hxx>
31 : #include <sfx2/objface.hxx>
32 : #include <vcl/msgbox.hxx>
33 : #include <vcl/vclenum.hxx>
34 :
35 : #include "globstr.hrc"
36 : #include "scmod.hxx"
37 : #include "appoptio.hxx"
38 : #include "tabvwsh.hxx"
39 : #include "document.hxx"
40 : #include "sc.hrc"
41 : #include "inputwin.hxx"
42 : #include "scresid.hxx"
43 : #include "printfun.hxx"
44 : #include "docsh.hxx"
45 : #include "rangelst.hxx"
46 : #include "prevwsh.hxx"
47 : #include "rangeutl.hxx"
48 : #include "reffact.hxx"
49 : #include "uiitems.hxx"
50 : #include "formulacell.hxx"
51 : #include "inputhdl.hxx"
52 : #include "autoform.hxx"
53 : #include "autofmt.hxx"
54 : #include "dwfunctr.hxx"
55 : #include "shtabdlg.hxx"
56 : #include "tabprotection.hxx"
57 : #include "protectiondlg.hxx"
58 : #include "markdata.hxx"
59 :
60 : #include <svl/ilstitem.hxx>
61 : #include <vector>
62 :
63 : #include <svx/zoomslideritem.hxx>
64 : #include <svx/svxdlg.hxx>
65 : #include <svx/dialogs.hrc>
66 : #include <comphelper/string.hxx>
67 : #include "scabstdlg.hxx"
68 :
69 : #include <boost/scoped_ptr.hpp>
70 :
71 : /** Try to parse the given range using Calc-style syntax first, then
72 : Excel-style if that fails. */
73 0 : static sal_uInt16 lcl_ParseRange(ScRange& rScRange, const OUString& aAddress, ScDocument* pDoc, sal_uInt16 /* nSlot */)
74 : {
75 0 : sal_uInt16 nResult = rScRange.Parse(aAddress, pDoc);
76 0 : if ( (nResult & SCA_VALID) )
77 0 : return nResult;
78 :
79 0 : return rScRange.Parse(aAddress, pDoc, ScAddress::Details(formula::FormulaGrammar::CONV_XL_A1, 0, 0));
80 : }
81 :
82 : /** Try to parse the given address using Calc-style syntax first, then
83 : Excel-style if that fails. */
84 0 : static sal_uInt16 lcl_ParseAddress(ScAddress& rScAddress, const OUString& aAddress, ScDocument* pDoc, sal_uInt16 /* nSlot */)
85 : {
86 0 : sal_uInt16 nResult = rScAddress.Parse(aAddress, pDoc);
87 0 : if ( (nResult & SCA_VALID) )
88 0 : return nResult;
89 :
90 0 : return rScAddress.Parse(aAddress, pDoc, ScAddress::Details(formula::FormulaGrammar::CONV_XL_A1, 0, 0));
91 : }
92 :
93 0 : void ScTabViewShell::Execute( SfxRequest& rReq )
94 : {
95 0 : SfxViewFrame* pThisFrame = GetViewFrame();
96 0 : SfxBindings& rBindings = pThisFrame->GetBindings();
97 0 : ScModule* pScMod = SC_MOD();
98 0 : const SfxItemSet* pReqArgs = rReq.GetArgs();
99 0 : sal_uInt16 nSlot = rReq.GetSlot();
100 :
101 0 : if (nSlot != SID_CURRENTCELL) // der kommt beim MouseButtonUp
102 0 : HideListBox(); // Autofilter-DropDown-Listbox
103 :
104 0 : switch ( nSlot )
105 : {
106 : case FID_INSERT_FILE:
107 : {
108 : const SfxPoolItem* pItem;
109 0 : if ( pReqArgs &&
110 0 : pReqArgs->GetItemState(FID_INSERT_FILE,true,&pItem) == SFX_ITEM_SET )
111 : {
112 0 : OUString aFileName = ((const SfxStringItem*)pItem)->GetValue();
113 :
114 : // Einfuege-Position
115 :
116 0 : Point aInsertPos;
117 0 : if ( pReqArgs->GetItemState(FN_PARAM_1,true,&pItem) == SFX_ITEM_SET )
118 0 : aInsertPos = ((const SfxPointItem*)pItem)->GetValue();
119 : else
120 0 : aInsertPos = GetInsertPos();
121 :
122 : // als Link?
123 :
124 0 : bool bAsLink = false;
125 0 : if ( pReqArgs->GetItemState(FN_PARAM_2,true,&pItem) == SFX_ITEM_SET )
126 0 : bAsLink = ((const SfxBoolItem*)pItem)->GetValue();
127 :
128 : // ausfuehren
129 :
130 0 : PasteFile( aInsertPos, aFileName, bAsLink );
131 : }
132 : }
133 0 : break;
134 :
135 : case SID_OPENDLG_EDIT_PRINTAREA:
136 : {
137 0 : sal_uInt16 nId = ScPrintAreasDlgWrapper::GetChildWindowId();
138 0 : SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
139 :
140 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
141 : }
142 0 : break;
143 :
144 : case SID_CHANGE_PRINTAREA:
145 : {
146 0 : if ( pReqArgs ) // OK aus Dialog
147 : {
148 0 : OUString aPrintStr;
149 0 : OUString aRowStr;
150 0 : OUString aColStr;
151 0 : bool bEntire = false;
152 : const SfxPoolItem* pItem;
153 0 : if ( pReqArgs->GetItemState( SID_CHANGE_PRINTAREA, true, &pItem ) == SFX_ITEM_SET )
154 0 : aPrintStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
155 0 : if ( pReqArgs->GetItemState( FN_PARAM_2, true, &pItem ) == SFX_ITEM_SET )
156 0 : aRowStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
157 0 : if ( pReqArgs->GetItemState( FN_PARAM_3, true, &pItem ) == SFX_ITEM_SET )
158 0 : aColStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
159 0 : if ( pReqArgs->GetItemState( FN_PARAM_4, true, &pItem ) == SFX_ITEM_SET )
160 0 : bEntire = static_cast<const SfxBoolItem*>(pItem)->GetValue();
161 :
162 0 : SetPrintRanges( bEntire, &aPrintStr, &aColStr, &aRowStr, false );
163 :
164 0 : rReq.Done();
165 : }
166 : }
167 0 : break;
168 :
169 : case SID_ADD_PRINTAREA:
170 : case SID_DEFINE_PRINTAREA: // Menue oder Basic
171 : {
172 0 : bool bAdd = ( nSlot == SID_ADD_PRINTAREA );
173 0 : if ( pReqArgs )
174 : {
175 0 : OUString aPrintStr;
176 : const SfxPoolItem* pItem;
177 0 : if ( pReqArgs->GetItemState( SID_DEFINE_PRINTAREA, true, &pItem ) == SFX_ITEM_SET )
178 0 : aPrintStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
179 0 : SetPrintRanges( false, &aPrintStr, NULL, NULL, bAdd );
180 : }
181 : else
182 : {
183 0 : SetPrintRanges( false, NULL, NULL, NULL, bAdd ); // aus Selektion
184 0 : rReq.Done();
185 : }
186 : }
187 0 : break;
188 :
189 : case SID_DELETE_PRINTAREA:
190 : {
191 : // Clear currently defined print range if any, and reset it to
192 : // print entire sheet which is the default.
193 0 : OUString aEmpty;
194 0 : SetPrintRanges(true, &aEmpty, NULL, NULL, false);
195 0 : rReq.Done();
196 : }
197 0 : break;
198 :
199 : case FID_DEL_MANUALBREAKS:
200 0 : RemoveManualBreaks();
201 0 : rReq.Done();
202 0 : break;
203 :
204 : case FID_ADJUST_PRINTZOOM:
205 0 : AdjustPrintZoom();
206 0 : rReq.Done();
207 0 : break;
208 :
209 : case FID_RESET_PRINTZOOM:
210 0 : SetPrintZoom( 100, 0 ); // 100%, nicht auf Seiten
211 0 : rReq.Done();
212 0 : break;
213 :
214 : case SID_FORMATPAGE:
215 : case SID_STATUS_PAGESTYLE:
216 : case SID_HFEDIT:
217 : GetViewData()->GetDocShell()->
218 0 : ExecutePageStyle( *this, rReq, GetViewData()->GetTabNo() );
219 0 : break;
220 :
221 : case SID_JUMPTOMARK:
222 : case SID_CURRENTCELL:
223 0 : if ( pReqArgs )
224 : {
225 0 : OUString aAddress;
226 : const SfxPoolItem* pItem;
227 0 : if ( pReqArgs->GetItemState( nSlot, true, &pItem ) == SFX_ITEM_SET )
228 0 : aAddress = ((const SfxStringItem*)pItem)->GetValue();
229 0 : else if ( nSlot == SID_JUMPTOMARK && pReqArgs->GetItemState(
230 0 : SID_JUMPTOMARK, true, &pItem ) == SFX_ITEM_SET )
231 0 : aAddress = ((const SfxStringItem*)pItem)->GetValue();
232 :
233 : // #i14927# SID_CURRENTCELL with a single cell must unmark if FN_PARAM_1
234 : // isn't set (for recorded macros, because IsAPI is no longer available).
235 : // ScGridWindow::MouseButtonUp no longer executes the slot for a single
236 : // cell if there is a multi selection.
237 0 : bool bUnmark = ( nSlot == SID_CURRENTCELL );
238 0 : if ( pReqArgs->GetItemState( FN_PARAM_1, true, &pItem ) == SFX_ITEM_SET )
239 0 : bUnmark = ((const SfxBoolItem*)pItem)->GetValue();
240 :
241 0 : bool bAlignToCursor = true;
242 0 : if (pReqArgs->GetItemState(FN_PARAM_2, true, &pItem) == SFX_ITEM_SET)
243 0 : bAlignToCursor = static_cast<const SfxBoolItem*>(pItem)->GetValue();
244 :
245 0 : if ( nSlot == SID_JUMPTOMARK )
246 : {
247 : // URL has to be decoded for escaped characters (%20)
248 0 : aAddress = INetURLObject::decode( aAddress, '%',
249 : INetURLObject::DECODE_WITH_CHARSET,
250 0 : RTL_TEXTENCODING_UTF8 );
251 : }
252 :
253 0 : bool bFound = false;
254 0 : ScViewData* pViewData = GetViewData();
255 0 : ScDocument* pDoc = pViewData->GetDocument();
256 0 : ScMarkData& rMark = pViewData->GetMarkData();
257 0 : ScRange aScRange;
258 0 : ScAddress aScAddress;
259 0 : sal_uInt16 nResult = lcl_ParseRange(aScRange, aAddress, pDoc, nSlot);
260 0 : SCTAB nTab = pViewData->GetTabNo();
261 0 : bool bMark = true;
262 :
263 : // Is this a range ?
264 0 : if( nResult & SCA_VALID )
265 : {
266 0 : if ( nResult & SCA_TAB_3D )
267 : {
268 0 : if( aScRange.aStart.Tab() != nTab )
269 0 : SetTabNo( nTab = aScRange.aStart.Tab() );
270 : }
271 : else
272 : {
273 0 : aScRange.aStart.SetTab( nTab );
274 0 : aScRange.aEnd.SetTab( nTab );
275 : }
276 : }
277 : // Is this a cell ?
278 0 : else if ( (nResult = lcl_ParseAddress(aScAddress, aAddress, pDoc, nSlot)) & SCA_VALID )
279 : {
280 0 : if ( nResult & SCA_TAB_3D )
281 : {
282 0 : if( aScAddress.Tab() != nTab )
283 0 : SetTabNo( nTab = aScAddress.Tab() );
284 : }
285 : else
286 0 : aScAddress.SetTab( nTab );
287 :
288 0 : aScRange = ScRange( aScAddress, aScAddress );
289 : // Zellen sollen nicht markiert werden
290 0 : bMark = false;
291 : }
292 : // Ist es benahmster Bereich (erst Namen dann DBBereiche) ?
293 : else
294 : {
295 0 : ScRangeUtil aRangeUtil;
296 0 : formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention();
297 0 : if( aRangeUtil.MakeRangeFromName( aAddress, pDoc, nTab, aScRange, RUTL_NAMES, eConv ) ||
298 0 : aRangeUtil.MakeRangeFromName( aAddress, pDoc, nTab, aScRange, RUTL_DBASE, eConv ) )
299 : {
300 0 : nResult |= SCA_VALID;
301 0 : if( aScRange.aStart.Tab() != nTab )
302 0 : SetTabNo( nTab = aScRange.aStart.Tab() );
303 0 : }
304 : }
305 :
306 0 : if ( !(nResult & SCA_VALID) && comphelper::string::isdigitAsciiString(aAddress) )
307 : {
308 0 : sal_Int32 nNumeric = aAddress.toInt32();
309 0 : if ( nNumeric > 0 && nNumeric <= MAXROW+1 )
310 : {
311 : // 1-basierte Zeilennummer
312 :
313 0 : aScAddress.SetRow( (SCROW)(nNumeric - 1) );
314 0 : aScAddress.SetCol( pViewData->GetCurX() );
315 0 : aScAddress.SetTab( nTab );
316 0 : aScRange = ScRange( aScAddress, aScAddress );
317 0 : bMark = false;
318 0 : nResult = SCA_VALID;
319 : }
320 : }
321 :
322 0 : if ( !ValidRow(aScRange.aStart.Row()) || !ValidRow(aScRange.aEnd.Row()) )
323 0 : nResult = 0;
324 :
325 : // wir haben was gefunden
326 0 : if( nResult & SCA_VALID )
327 : {
328 0 : bFound = true;
329 0 : SCCOL nCol = aScRange.aStart.Col();
330 0 : SCROW nRow = aScRange.aStart.Row();
331 0 : bool bNothing = ( pViewData->GetCurX()==nCol && pViewData->GetCurY()==nRow );
332 :
333 : // markieren
334 0 : if( bMark )
335 : {
336 0 : if (rMark.IsMarked()) // ist derselbe Bereich schon markiert?
337 : {
338 0 : ScRange aOldMark;
339 0 : rMark.GetMarkArea( aOldMark );
340 0 : aOldMark.Justify();
341 0 : ScRange aCurrent = aScRange;
342 0 : aCurrent.Justify();
343 0 : bNothing = ( aCurrent == aOldMark );
344 : }
345 : else
346 0 : bNothing = false;
347 :
348 0 : if (!bNothing)
349 0 : MarkRange( aScRange, false ); // Cursor kommt hinterher...
350 : }
351 : else
352 : {
353 : // remove old selection, unless bUnmark argument is sal_False (from navigator)
354 0 : if( bUnmark )
355 : {
356 : MoveCursorAbs( nCol, nRow,
357 0 : SC_FOLLOW_NONE, false, false );
358 : }
359 : }
360 :
361 : // und Cursor setzen
362 :
363 : // zusammengefasste Zellen beruecksichtigen:
364 0 : pDoc->SkipOverlapped(nCol, nRow, nTab);
365 :
366 : // Navigator-Aufrufe sind nicht API!!!
367 :
368 0 : if( bNothing )
369 : {
370 0 : if (rReq.IsAPI())
371 0 : rReq.Ignore(); // wenn Makro, dann gar nix
372 : else
373 0 : rReq.Done(); // sonst wenigstens aufzeichnen
374 : }
375 : else
376 : {
377 0 : pViewData->ResetOldCursor();
378 0 : SetCursor( nCol, nRow );
379 0 : rBindings.Invalidate( SID_CURRENTCELL );
380 0 : rBindings.Update( nSlot );
381 :
382 0 : if (!rReq.IsAPI())
383 0 : rReq.Done();
384 : }
385 :
386 0 : if (bAlignToCursor)
387 : {
388 : // align to cursor even if the cursor position hasn't changed,
389 : // because the cursor may be set outside the visible area.
390 0 : AlignToCursor( nCol, nRow, SC_FOLLOW_JUMP );
391 : }
392 :
393 0 : rReq.SetReturnValue( SfxStringItem( SID_CURRENTCELL, aAddress ) );
394 : }
395 :
396 0 : if (!bFound) // kein gueltiger Bereich
397 : {
398 : // wenn es ein Tabellenname ist, umschalten (fuer Navigator/URL's)
399 :
400 : SCTAB nNameTab;
401 0 : if ( pDoc->GetTable( aAddress, nNameTab ) )
402 : {
403 0 : bFound = true;
404 0 : if ( nNameTab != nTab )
405 0 : SetTabNo( nNameTab );
406 : }
407 : }
408 :
409 0 : if ( !bFound && nSlot == SID_JUMPTOMARK )
410 : {
411 : // Grafik-Objekte probieren (nur bei URL's)
412 :
413 0 : bFound = SelectObject( aAddress );
414 : }
415 :
416 0 : if (!bFound && !rReq.IsAPI())
417 0 : ErrorMessage( STR_ERR_INVALID_AREA );
418 : }
419 0 : break;
420 :
421 : case SID_CURRENTOBJECT:
422 0 : if ( pReqArgs )
423 : {
424 0 : OUString aName = ((const SfxStringItem&)pReqArgs->Get(nSlot)).GetValue();
425 0 : SelectObject( aName );
426 : }
427 0 : break;
428 :
429 : case SID_CURRENTTAB:
430 0 : if ( pReqArgs )
431 : {
432 : // Tabelle fuer Basic ist 1-basiert
433 0 : SCTAB nTab = ((const SfxUInt16Item&)pReqArgs->Get(nSlot)).GetValue() - 1;
434 0 : ScDocument* pDoc = GetViewData()->GetDocument();
435 0 : if ( nTab < pDoc->GetTableCount() )
436 : {
437 0 : SetTabNo( nTab );
438 0 : rBindings.Update( nSlot );
439 :
440 0 : if( ! rReq.IsAPI() )
441 0 : rReq.Done();
442 : }
443 : //! sonst Fehler ?
444 : }
445 0 : break;
446 :
447 : case SID_CURRENTDOC:
448 0 : if ( pReqArgs )
449 : {
450 : OUString aStrDocName( ((const SfxStringItem&)pReqArgs->
451 0 : Get(nSlot)).GetValue() );
452 :
453 0 : SfxViewFrame* pViewFrame = NULL;
454 0 : ScDocShell* pDocSh = (ScDocShell*)SfxObjectShell::GetFirst();
455 0 : bool bFound = false;
456 :
457 : // zu aktivierenden ViewFrame suchen
458 :
459 0 : while ( pDocSh && !bFound )
460 : {
461 0 : if ( pDocSh->GetTitle() == aStrDocName )
462 : {
463 0 : pViewFrame = SfxViewFrame::GetFirst( pDocSh );
464 0 : bFound = ( NULL != pViewFrame );
465 : }
466 :
467 0 : pDocSh = (ScDocShell*)SfxObjectShell::GetNext( *pDocSh );
468 : }
469 :
470 0 : if ( bFound )
471 0 : pViewFrame->GetFrame().Appear();
472 :
473 0 : rReq.Ignore();//XXX wird von SFX erledigt
474 : }
475 :
476 : case SID_ATTR_SIZE://XXX ???
477 0 : break;
478 :
479 :
480 : case SID_PRINTPREVIEW:
481 : {
482 0 : if ( !pThisFrame->GetFrame().IsInPlace() ) // nicht bei OLE
483 : {
484 : // print preview is now always in the same frame as the tab view
485 : // -> always switch this frame back to normal view
486 : // (ScPreviewShell ctor reads view data)
487 :
488 : // #102785#; finish input
489 0 : pScMod->InputEnterHandler();
490 :
491 0 : pThisFrame->GetDispatcher()->Execute( SID_VIEWSHELL1, SFX_CALLMODE_ASYNCHRON );
492 : }
493 : // else Fehler (z.B. Ole)
494 : }
495 0 : break;
496 :
497 : case SID_DETECTIVE_DEL_ALL:
498 0 : DetectiveDelAll();
499 0 : rReq.Done();
500 0 : break;
501 :
502 : // SID_TABLE_ACTIVATE und SID_MARKAREA werden von Basic aus an der versteckten
503 : // View aufgerufen, um auf der sichtbaren View zu markieren/umzuschalten:
504 :
505 : case SID_TABLE_ACTIVATE:
506 : OSL_FAIL("old slot SID_TABLE_ACTIVATE");
507 0 : break;
508 :
509 : case SID_REPAINT:
510 0 : PaintGrid();
511 0 : PaintTop();
512 0 : PaintLeft();
513 0 : PaintExtras();
514 0 : rReq.Done();
515 0 : break;
516 :
517 : case FID_NORMALVIEWMODE:
518 : case FID_PAGEBREAKMODE:
519 : {
520 0 : bool bWantPageBreak = nSlot == FID_PAGEBREAKMODE;
521 :
522 : // check whether there is an explicit argument, use it
523 : const SfxPoolItem* pItem;
524 0 : if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
525 : {
526 0 : bool bItemValue = ((const SfxBoolItem*)pItem)->GetValue();
527 0 : bWantPageBreak = (nSlot == FID_PAGEBREAKMODE) == bItemValue;
528 : }
529 :
530 0 : if( GetViewData()->IsPagebreakMode() != bWantPageBreak )
531 : {
532 0 : SetPagebreakMode( bWantPageBreak );
533 0 : UpdatePageBreakData();
534 0 : SetCurSubShell( GetCurObjectSelectionType(), true );
535 0 : PaintGrid();
536 0 : PaintTop();
537 0 : PaintLeft();
538 0 : rBindings.Invalidate( nSlot );
539 0 : rReq.AppendItem( SfxBoolItem( nSlot, true ) );
540 0 : rReq.Done();
541 : }
542 : }
543 0 : break;
544 :
545 : case FID_FUNCTION_BOX:
546 : {
547 0 : sal_uInt16 nChildId = ScFunctionChildWindow::GetChildWindowId();
548 0 : if ( rReq.GetArgs() )
549 0 : pThisFrame->SetChildWindow( nChildId, ((const SfxBoolItem&) (rReq.GetArgs()->Get(FID_FUNCTION_BOX))).GetValue());
550 : else
551 : {
552 0 : pThisFrame->ToggleChildWindow( nChildId );
553 0 : rReq.AppendItem( SfxBoolItem( FID_FUNCTION_BOX , pThisFrame->HasChildWindow( nChildId ) ) );
554 : }
555 :
556 0 : GetViewFrame()->GetBindings().Invalidate(FID_FUNCTION_BOX);
557 0 : rReq.Done ();
558 : }
559 0 : break;
560 :
561 :
562 : case FID_TOGGLESYNTAX:
563 : {
564 0 : bool bSet = !GetViewData()->IsSyntaxMode();
565 : const SfxPoolItem* pItem;
566 0 : if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
567 0 : bSet = ((const SfxBoolItem*)pItem)->GetValue();
568 0 : GetViewData()->SetSyntaxMode( bSet );
569 0 : PaintGrid();
570 0 : rBindings.Invalidate( FID_TOGGLESYNTAX );
571 0 : rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
572 0 : rReq.Done();
573 : }
574 0 : break;
575 : case FID_TOGGLEHEADERS:
576 : {
577 0 : bool bSet = !GetViewData()->IsHeaderMode();
578 : const SfxPoolItem* pItem;
579 0 : if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
580 0 : bSet = ((const SfxBoolItem*)pItem)->GetValue();
581 0 : GetViewData()->SetHeaderMode( bSet );
582 0 : RepeatResize();
583 0 : rBindings.Invalidate( FID_TOGGLEHEADERS );
584 0 : rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
585 0 : rReq.Done();
586 : }
587 0 : break;
588 :
589 : case FID_TOGGLEFORMULA:
590 : {
591 0 : ScViewData* pViewData = GetViewData();
592 0 : const ScViewOptions& rOpts = pViewData->GetOptions();
593 0 : bool bFormulaMode = !rOpts.GetOption( VOPT_FORMULAS );
594 : const SfxPoolItem *pItem;
595 0 : if( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
596 0 : bFormulaMode = ((const SfxBoolItem *)pItem)->GetValue();
597 :
598 0 : ScViewOptions rSetOpts = ScViewOptions( rOpts );
599 0 : rSetOpts.SetOption( VOPT_FORMULAS, bFormulaMode );
600 0 : pViewData->SetOptions( rSetOpts );
601 :
602 0 : pViewData->GetDocShell()->PostPaintGridAll();
603 :
604 0 : rBindings.Invalidate( FID_TOGGLEFORMULA );
605 0 : rReq.AppendItem( SfxBoolItem( nSlot, bFormulaMode ) );
606 0 : rReq.Done();
607 : }
608 0 : break;
609 :
610 : case FID_TOGGLEINPUTLINE:
611 : {
612 0 : sal_uInt16 nId = ScInputWindowWrapper::GetChildWindowId();
613 0 : SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
614 0 : bool bSet = ( pWnd == NULL );
615 : const SfxPoolItem* pItem;
616 0 : if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET )
617 0 : bSet = ((const SfxBoolItem*)pItem)->GetValue();
618 :
619 0 : pThisFrame->SetChildWindow( nId, bSet );
620 0 : rBindings.Invalidate( FID_TOGGLEINPUTLINE );
621 0 : rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
622 0 : rReq.Done();
623 : }
624 0 : break;
625 :
626 : case SID_ATTR_ZOOM: // Statuszeile
627 : case FID_SCALE:
628 : {
629 0 : bool bSyncZoom = SC_MOD()->GetAppOptions().GetSynchronizeZoom();
630 0 : SvxZoomType eOldZoomType = GetZoomType();
631 0 : SvxZoomType eNewZoomType = eOldZoomType;
632 0 : const Fraction& rOldY = GetViewData()->GetZoomY(); // Y wird angezeigt
633 0 : sal_uInt16 nOldZoom = (sal_uInt16)(( rOldY.GetNumerator() * 100 )
634 0 : / rOldY.GetDenominator());
635 0 : sal_uInt16 nZoom = nOldZoom;
636 0 : bool bCancel = false;
637 :
638 0 : if ( pReqArgs )
639 : {
640 : const SvxZoomItem& rZoomItem = (const SvxZoomItem&)
641 0 : pReqArgs->Get(SID_ATTR_ZOOM);
642 :
643 0 : eNewZoomType = rZoomItem.GetType();
644 0 : nZoom = rZoomItem.GetValue();
645 : }
646 : else
647 : {
648 0 : SfxItemSet aSet ( GetPool(), SID_ATTR_ZOOM, SID_ATTR_ZOOM );
649 0 : SvxZoomItem aZoomItem( eOldZoomType, nOldZoom, SID_ATTR_ZOOM );
650 0 : AbstractSvxZoomDialog* pDlg = NULL;
651 0 : ScMarkData& rMark = GetViewData()->GetMarkData();
652 : sal_uInt16 nBtnFlags = SVX_ZOOM_ENABLE_50
653 : | SVX_ZOOM_ENABLE_75
654 : | SVX_ZOOM_ENABLE_100
655 : | SVX_ZOOM_ENABLE_150
656 : | SVX_ZOOM_ENABLE_200
657 : | SVX_ZOOM_ENABLE_WHOLEPAGE
658 0 : | SVX_ZOOM_ENABLE_PAGEWIDTH;
659 :
660 0 : if ( rMark.IsMarked() || rMark.IsMultiMarked() )
661 0 : nBtnFlags = nBtnFlags | SVX_ZOOM_ENABLE_OPTIMAL;
662 :
663 0 : aZoomItem.SetValueSet( nBtnFlags );
664 0 : aSet.Put( aZoomItem );
665 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
666 0 : if(pFact)
667 : {
668 0 : pDlg = pFact->CreateSvxZoomDialog(GetDialogParent(), aSet );
669 : OSL_ENSURE(pDlg, "Dialogdiet fail!");
670 : }
671 0 : if (pDlg)
672 : {
673 0 : pDlg->SetLimits( MINZOOM, MAXZOOM );
674 :
675 0 : bCancel = ( RET_CANCEL == pDlg->Execute() );
676 :
677 : // bCancel is True only if we were in the previous if block,
678 : // so no need to check again pDlg
679 0 : if ( !bCancel )
680 : {
681 : const SvxZoomItem& rZoomItem = (const SvxZoomItem&)
682 0 : pDlg->GetOutputItemSet()->
683 0 : Get( SID_ATTR_ZOOM );
684 :
685 0 : eNewZoomType = rZoomItem.GetType();
686 0 : nZoom = rZoomItem.GetValue();
687 : }
688 :
689 0 : delete pDlg;
690 0 : }
691 : }
692 :
693 0 : if ( !bCancel )
694 : {
695 0 : if ( eNewZoomType == SVX_ZOOM_PERCENT )
696 : {
697 0 : if ( nZoom < MINZOOM ) nZoom = MINZOOM;
698 0 : if ( nZoom > MAXZOOM ) nZoom = MAXZOOM;
699 : }
700 : else
701 : {
702 0 : nZoom = CalcZoom( eNewZoomType, nOldZoom );
703 0 : bCancel = nZoom == 0;
704 : }
705 :
706 0 : switch ( eNewZoomType )
707 : {
708 : case SVX_ZOOM_WHOLEPAGE:
709 : case SVX_ZOOM_PAGEWIDTH:
710 0 : SetZoomType( eNewZoomType, bSyncZoom );
711 0 : break;
712 :
713 : default:
714 0 : SetZoomType( SVX_ZOOM_PERCENT, bSyncZoom );
715 : }
716 : }
717 :
718 0 : if ( nZoom != nOldZoom && !bCancel )
719 : {
720 0 : if (!GetViewData()->IsPagebreakMode())
721 : {
722 0 : ScAppOptions aNewOpt = pScMod->GetAppOptions();
723 0 : aNewOpt.SetZoom( nZoom );
724 0 : aNewOpt.SetZoomType( GetZoomType() );
725 0 : pScMod->SetAppOptions( aNewOpt );
726 : }
727 0 : Fraction aFract( nZoom, 100 );
728 0 : SetZoom( aFract, aFract, bSyncZoom );
729 0 : PaintGrid();
730 0 : PaintTop();
731 0 : PaintLeft();
732 0 : rBindings.Invalidate( SID_ATTR_ZOOM );
733 0 : rReq.AppendItem( SvxZoomItem( GetZoomType(), nZoom, nSlot ) );
734 0 : rReq.Done();
735 : }
736 : }
737 0 : break;
738 :
739 : case SID_ATTR_ZOOMSLIDER:
740 : {
741 0 : const SfxPoolItem* pItem = NULL;
742 0 : bool bSyncZoom = SC_MOD()->GetAppOptions().GetSynchronizeZoom();
743 0 : if ( pReqArgs && pReqArgs->GetItemState(SID_ATTR_ZOOMSLIDER, true, &pItem) == SFX_ITEM_SET )
744 : {
745 0 : const sal_uInt16 nCurrentZoom = ((const SvxZoomSliderItem *)pItem)->GetValue();
746 0 : if( nCurrentZoom )
747 : {
748 0 : SetZoomType( SVX_ZOOM_PERCENT, bSyncZoom );
749 0 : if (!GetViewData()->IsPagebreakMode())
750 : {
751 0 : ScAppOptions aNewOpt = pScMod->GetAppOptions();
752 0 : aNewOpt.SetZoom( nCurrentZoom );
753 0 : aNewOpt.SetZoomType( GetZoomType() );
754 0 : pScMod->SetAppOptions( aNewOpt );
755 : }
756 0 : Fraction aFract( nCurrentZoom,100 );
757 0 : SetZoom( aFract, aFract, bSyncZoom );
758 0 : PaintGrid();
759 0 : PaintTop();
760 0 : PaintLeft();
761 0 : rBindings.Invalidate( SID_ATTR_ZOOMSLIDER );
762 0 : rReq.Done();
763 : }
764 : }
765 : }
766 0 : break;
767 :
768 : case FID_TAB_SELECTALL:
769 0 : SelectAllTables();
770 0 : rReq.Done();
771 0 : break;
772 :
773 : case FID_TAB_DESELECTALL:
774 0 : DeselectAllTables();
775 0 : rReq.Done();
776 0 : break;
777 :
778 : case SID_SELECT_TABLES:
779 : {
780 0 : ScViewData& rViewData = *GetViewData();
781 0 : ScDocument& rDoc = *rViewData.GetDocument();
782 0 : ScMarkData& rMark = rViewData.GetMarkData();
783 0 : SCTAB nTabCount = rDoc.GetTableCount();
784 : SCTAB nTab;
785 :
786 0 : ::std::vector < sal_Int32 > aIndexList;
787 0 : SFX_REQUEST_ARG( rReq, pItem, SfxIntegerListItem, SID_SELECT_TABLES, false );
788 0 : if ( pItem )
789 0 : pItem->GetList( aIndexList );
790 : else
791 : {
792 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
793 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
794 :
795 0 : AbstractScShowTabDlg* pDlg = pFact->CreateScShowTabDlg(GetDialogParent());
796 : OSL_ENSURE(pDlg, "Dialog create fail!");
797 : pDlg->SetDescription(
798 : OUString( ScResId( STR_DLG_SELECTTABLES_TITLE ) ),
799 : OUString( ScResId( STR_DLG_SELECTTABLES_LBNAME ) ),
800 0 : GetStaticInterface()->GetSlot(SID_SELECT_TABLES)->GetCommand(), HID_SELECTTABLES );
801 :
802 : // fill all table names with selection state
803 0 : OUString aTabName;
804 0 : for( nTab = 0; nTab < nTabCount; ++nTab )
805 : {
806 0 : rDoc.GetName( nTab, aTabName );
807 0 : pDlg->Insert( aTabName, rMark.GetTableSelect( nTab ) );
808 : }
809 :
810 0 : if( pDlg->Execute() == RET_OK )
811 : {
812 0 : sal_uInt16 nSelCount = pDlg->GetSelectEntryCount();
813 : sal_uInt16 nSelIx;
814 0 : for( nSelIx = 0; nSelIx < nSelCount; ++nSelIx )
815 0 : aIndexList.insert( aIndexList.begin()+nSelIx, pDlg->GetSelectEntryPos( nSelIx ) );
816 0 : delete pDlg;
817 0 : rReq.AppendItem( SfxIntegerListItem( SID_SELECT_TABLES, aIndexList ) );
818 : }
819 : else
820 0 : rReq.Ignore();
821 : }
822 :
823 0 : if ( !aIndexList.empty() )
824 : {
825 0 : sal_uInt16 nSelCount = aIndexList.size();
826 : sal_uInt16 nSelIx;
827 0 : SCTAB nFirstVisTab = 0;
828 :
829 : // special case: only hidden tables selected -> do nothing
830 0 : bool bVisSelected = false;
831 0 : for( nSelIx = 0; !bVisSelected && (nSelIx < nSelCount); ++nSelIx )
832 0 : bVisSelected = rDoc.IsVisible( nFirstVisTab = static_cast<SCTAB>(aIndexList[nSelIx]) );
833 0 : if( !bVisSelected )
834 0 : nSelCount = 0;
835 :
836 : // select the tables
837 0 : if( nSelCount )
838 : {
839 0 : for( nTab = 0; nTab < nTabCount; ++nTab )
840 0 : rMark.SelectTable( nTab, false );
841 :
842 0 : for( nSelIx = 0; nSelIx < nSelCount; ++nSelIx )
843 0 : rMark.SelectTable( static_cast<SCTAB>(aIndexList[nSelIx]), true );
844 :
845 : // activate another table, if current is deselected
846 0 : if( !rMark.GetTableSelect( rViewData.GetTabNo() ) )
847 : {
848 0 : rMark.SelectTable( nFirstVisTab, true );
849 0 : SetTabNo( nFirstVisTab );
850 : }
851 :
852 0 : rViewData.GetDocShell()->PostPaintExtras();
853 0 : SfxBindings& rBind = rViewData.GetBindings();
854 0 : rBind.Invalidate( FID_FILL_TAB );
855 0 : rBind.Invalidate( FID_TAB_DESELECTALL );
856 : }
857 :
858 0 : rReq.Done();
859 0 : }
860 : }
861 0 : break;
862 :
863 :
864 : case SID_OUTLINE_DELETEALL:
865 0 : RemoveAllOutlines();
866 0 : rReq.Done();
867 0 : break;
868 :
869 : case SID_AUTO_OUTLINE:
870 0 : AutoOutline();
871 0 : rReq.Done();
872 0 : break;
873 :
874 :
875 : case SID_WINDOW_SPLIT:
876 : {
877 0 : ScSplitMode eHSplit = GetViewData()->GetHSplitMode();
878 0 : ScSplitMode eVSplit = GetViewData()->GetVSplitMode();
879 0 : if ( eHSplit == SC_SPLIT_NORMAL || eVSplit == SC_SPLIT_NORMAL ) // aufheben
880 0 : RemoveSplit();
881 0 : else if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX ) // normal
882 0 : FreezeSplitters( false );
883 : else // erzeugen
884 0 : SplitAtCursor();
885 0 : rReq.Done();
886 :
887 0 : InvalidateSplit();
888 : }
889 0 : break;
890 :
891 : case SID_WINDOW_FIX:
892 : {
893 0 : ScSplitMode eHSplit = GetViewData()->GetHSplitMode();
894 0 : ScSplitMode eVSplit = GetViewData()->GetVSplitMode();
895 0 : if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX ) // aufheben
896 0 : RemoveSplit();
897 : else
898 0 : FreezeSplitters( true ); // erzeugen oder fixieren
899 0 : rReq.Done();
900 :
901 0 : InvalidateSplit();
902 : }
903 0 : break;
904 :
905 : case FID_CHG_SHOW:
906 : {
907 0 : sal_uInt16 nId = ScHighlightChgDlgWrapper::GetChildWindowId();
908 0 : SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
909 :
910 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
911 : }
912 0 : break;
913 :
914 : case FID_CHG_ACCEPT:
915 : {
916 0 : pThisFrame->ToggleChildWindow(ScAcceptChgDlgWrapper::GetChildWindowId());
917 0 : GetViewFrame()->GetBindings().Invalidate(FID_CHG_ACCEPT);
918 0 : rReq.Done ();
919 :
920 : /*
921 : sal_uInt16 nId = ScAcceptChgDlgWrapper::GetChildWindowId();
922 : SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
923 :
924 : pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True );
925 : */
926 : }
927 0 : break;
928 :
929 : case FID_CHG_COMMENT:
930 : {
931 0 : ScViewData* pData = GetViewData();
932 0 : ScAddress aCursorPos( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
933 0 : ScDocShell* pDocSh = pData->GetDocShell();
934 :
935 0 : ScChangeAction* pAction = pDocSh->GetChangeAction( aCursorPos );
936 0 : if ( pAction )
937 : {
938 : const SfxPoolItem* pItem;
939 0 : if ( pReqArgs &&
940 0 : pReqArgs->GetItemState( nSlot, true, &pItem ) == SFX_ITEM_SET &&
941 0 : pItem->ISA( SfxStringItem ) )
942 : {
943 0 : OUString aComment = ((const SfxStringItem*)pItem)->GetValue();
944 0 : pDocSh->SetChangeComment( pAction, aComment );
945 0 : rReq.Done();
946 : }
947 : else
948 : {
949 0 : pDocSh->ExecuteChangeCommentDialog( pAction, GetDialogParent() );
950 0 : rReq.Done();
951 : }
952 : }
953 : }
954 0 : break;
955 :
956 : case SID_CREATE_SW_DRAWVIEW:
957 : // wird von den Forms gerufen, wenn die DrawView mit allem Zubehoer
958 : // angelegt werden muss
959 0 : if (!GetScDrawView())
960 : {
961 0 : GetViewData()->GetDocShell()->MakeDrawLayer();
962 0 : rBindings.InvalidateAll(false);
963 : }
964 0 : break;
965 :
966 : case FID_PROTECT_DOC:
967 : {
968 0 : ScDocument* pDoc = GetViewData()->GetDocument();
969 : SfxPasswordDialog* pDlg;
970 :
971 0 : if( pReqArgs )
972 : {
973 : const SfxPoolItem* pItem;
974 0 : if( pReqArgs->HasItem( FID_PROTECT_DOC, &pItem ) &&
975 0 : ((const SfxBoolItem*)pItem)->GetValue() == pDoc->IsDocProtected() )
976 : {
977 0 : rReq.Ignore();
978 0 : break;
979 : }
980 : }
981 :
982 0 : ScDocProtection* pProtect = pDoc->GetDocProtection();
983 0 : if (pProtect && pProtect->isProtected())
984 : {
985 0 : bool bCancel = false;
986 0 : OUString aPassword;
987 :
988 0 : if (pProtect->isProtectedWithPass())
989 : {
990 0 : OUString aText(ScResId(SCSTR_PASSWORD));
991 :
992 0 : pDlg = new SfxPasswordDialog(GetDialogParent(), &aText);
993 0 : pDlg->SetText( ScResId(SCSTR_UNPROTECTDOC) );
994 0 : pDlg->SetMinLen( 0 );
995 0 : pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_DOC)->GetCommand() );
996 0 : pDlg->SetEditHelpId( HID_PASSWD_DOC );
997 :
998 0 : if (pDlg->Execute() == RET_OK)
999 0 : aPassword = pDlg->GetPassword();
1000 : else
1001 0 : bCancel = true;
1002 0 : delete pDlg;
1003 : }
1004 0 : if (!bCancel)
1005 : {
1006 0 : Unprotect( TABLEID_DOC, aPassword );
1007 0 : rReq.AppendItem( SfxBoolItem( FID_PROTECT_DOC, false ) );
1008 0 : rReq.Done();
1009 0 : }
1010 : }
1011 : else
1012 : {
1013 0 : OUString aText(ScResId(SCSTR_PASSWORDOPT));
1014 :
1015 0 : pDlg = new SfxPasswordDialog( GetDialogParent(), &aText );
1016 0 : pDlg->SetText( ScResId(SCSTR_PROTECTDOC) );
1017 0 : pDlg->SetMinLen( 0 );
1018 0 : pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_DOC)->GetCommand() );
1019 0 : pDlg->SetEditHelpId( HID_PASSWD_DOC );
1020 0 : pDlg->ShowExtras( SHOWEXTRAS_CONFIRM );
1021 :
1022 0 : if (pDlg->Execute() == RET_OK)
1023 : {
1024 0 : OUString aPassword = pDlg->GetPassword();
1025 0 : Protect( TABLEID_DOC, aPassword );
1026 0 : rReq.AppendItem( SfxBoolItem( FID_PROTECT_DOC, true ) );
1027 0 : rReq.Done();
1028 : }
1029 :
1030 0 : delete pDlg;
1031 : }
1032 0 : rBindings.Invalidate( FID_PROTECT_DOC );
1033 : }
1034 0 : break;
1035 :
1036 :
1037 : case FID_PROTECT_TABLE:
1038 : {
1039 0 : ScDocument* pDoc = GetViewData()->GetDocument();
1040 0 : SCTAB nTab = GetViewData()->GetTabNo();
1041 0 : bool bOldProtection = pDoc->IsTabProtected(nTab);
1042 :
1043 0 : if( pReqArgs )
1044 : {
1045 : const SfxPoolItem* pItem;
1046 0 : bool bNewProtection = !bOldProtection;
1047 0 : if( pReqArgs->HasItem( FID_PROTECT_TABLE, &pItem ) )
1048 0 : bNewProtection = ((const SfxBoolItem*)pItem)->GetValue();
1049 0 : if( bNewProtection == bOldProtection )
1050 : {
1051 0 : rReq.Ignore();
1052 0 : break;
1053 : }
1054 : }
1055 :
1056 0 : if (bOldProtection)
1057 : {
1058 : // Unprotect a protected sheet.
1059 :
1060 0 : ScTableProtection* pProtect = pDoc->GetTabProtection(nTab);
1061 0 : if (pProtect && pProtect->isProtectedWithPass())
1062 : {
1063 0 : OUString aText( ScResId(SCSTR_PASSWORDOPT) );
1064 0 : boost::scoped_ptr<SfxPasswordDialog> pDlg(new SfxPasswordDialog(GetDialogParent(), &aText));
1065 0 : pDlg->SetText( ScResId(SCSTR_UNPROTECTTAB) );
1066 0 : pDlg->SetMinLen( 0 );
1067 0 : pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_TABLE)->GetCommand() );
1068 0 : pDlg->SetEditHelpId( HID_PASSWD_TABLE );
1069 :
1070 0 : if (pDlg->Execute() == RET_OK)
1071 : {
1072 0 : OUString aPassword = pDlg->GetPassword();
1073 0 : Unprotect(nTab, aPassword);
1074 0 : }
1075 : }
1076 : else
1077 : // this sheet is not password-protected.
1078 0 : Unprotect(nTab, OUString());
1079 :
1080 0 : if (!pReqArgs)
1081 : {
1082 0 : rReq.AppendItem( SfxBoolItem(FID_PROTECT_TABLE, false) );
1083 0 : rReq.Done();
1084 : }
1085 : }
1086 : else
1087 : {
1088 : // Protect a current sheet.
1089 :
1090 0 : boost::scoped_ptr<ScTableProtectionDlg> pDlg(new ScTableProtectionDlg(GetDialogParent()));
1091 :
1092 0 : ScTableProtection* pProtect = pDoc->GetTabProtection(nTab);
1093 0 : if (pProtect)
1094 0 : pDlg->SetDialogData(*pProtect);
1095 :
1096 0 : if (pDlg->Execute() == RET_OK)
1097 : {
1098 0 : pScMod->InputEnterHandler();
1099 :
1100 0 : ScTableProtection aNewProtect;
1101 0 : pDlg->WriteData(aNewProtect);
1102 0 : ProtectSheet(nTab, aNewProtect);
1103 0 : if (!pReqArgs)
1104 : {
1105 0 : rReq.AppendItem( SfxBoolItem(FID_PROTECT_TABLE, true) );
1106 0 : rReq.Done();
1107 0 : }
1108 0 : }
1109 : }
1110 0 : TabChanged();
1111 0 : UpdateInputHandler(true); // damit sofort wieder eingegeben werden kann
1112 0 : SelectionChanged();
1113 : }
1114 0 : break;
1115 :
1116 : case SID_OPT_LOCALE_CHANGED :
1117 : { // locale changed, SYSTEM number formats changed => repaint cell contents
1118 0 : PaintGrid();
1119 0 : rReq.Done();
1120 : }
1121 0 : break;
1122 :
1123 : default:
1124 : OSL_FAIL("Unbekannter Slot bei ScTabViewShell::Execute");
1125 0 : break;
1126 : }
1127 0 : }
1128 :
1129 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|