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 2 : static sal_uInt16 lcl_ParseRange(ScRange& rScRange, const OUString& aAddress, ScDocument* pDoc, sal_uInt16 /* nSlot */)
74 : {
75 2 : sal_uInt16 nResult = rScRange.Parse(aAddress, pDoc);
76 2 : if ( (nResult & SCA_VALID) )
77 0 : return nResult;
78 :
79 2 : 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 2 : static sal_uInt16 lcl_ParseAddress(ScAddress& rScAddress, const OUString& aAddress, ScDocument* pDoc, sal_uInt16 /* nSlot */)
85 : {
86 2 : sal_uInt16 nResult = rScAddress.Parse(aAddress, pDoc);
87 2 : if ( (nResult & SCA_VALID) )
88 2 : return nResult;
89 :
90 0 : return rScAddress.Parse(aAddress, pDoc, ScAddress::Details(formula::FormulaGrammar::CONV_XL_A1, 0, 0));
91 : }
92 :
93 30 : void ScTabViewShell::Execute( SfxRequest& rReq )
94 : {
95 30 : SfxViewFrame* pThisFrame = GetViewFrame();
96 30 : SfxBindings& rBindings = pThisFrame->GetBindings();
97 30 : ScModule* pScMod = SC_MOD();
98 30 : const SfxItemSet* pReqArgs = rReq.GetArgs();
99 30 : sal_uInt16 nSlot = rReq.GetSlot();
100 :
101 30 : if (nSlot != SID_CURRENTCELL) // der kommt beim MouseButtonUp
102 28 : HideListBox(); // Autofilter-DropDown-Listbox
103 :
104 30 : 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) == SfxItemState::SET )
111 : {
112 0 : OUString aFileName = static_cast<const SfxStringItem*>(pItem)->GetValue();
113 :
114 : // Einfuege-Position
115 :
116 0 : Point aInsertPos;
117 0 : if ( pReqArgs->GetItemState(FN_PARAM_1,true,&pItem) == SfxItemState::SET )
118 0 : aInsertPos = static_cast<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) == SfxItemState::SET )
126 0 : bAsLink = static_cast<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 ) == SfxItemState::SET )
154 0 : aPrintStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
155 0 : if ( pReqArgs->GetItemState( FN_PARAM_2, true, &pItem ) == SfxItemState::SET )
156 0 : aRowStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
157 0 : if ( pReqArgs->GetItemState( FN_PARAM_3, true, &pItem ) == SfxItemState::SET )
158 0 : aColStr = static_cast<const SfxStringItem*>(pItem)->GetValue();
159 0 : if ( pReqArgs->GetItemState( FN_PARAM_4, true, &pItem ) == SfxItemState::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 ) == SfxItemState::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 0 : GetViewData().GetDocShell()->
218 0 : ExecutePageStyle( *this, rReq, GetViewData().GetTabNo() );
219 0 : break;
220 :
221 : case SID_JUMPTOMARK:
222 : case SID_CURRENTCELL:
223 2 : if ( pReqArgs )
224 : {
225 2 : OUString aAddress;
226 : const SfxPoolItem* pItem;
227 2 : if ( pReqArgs->GetItemState( nSlot, true, &pItem ) == SfxItemState::SET )
228 2 : aAddress = static_cast<const SfxStringItem*>(pItem)->GetValue();
229 0 : else if ( nSlot == SID_JUMPTOMARK && pReqArgs->GetItemState(
230 0 : SID_JUMPTOMARK, true, &pItem ) == SfxItemState::SET )
231 0 : aAddress = static_cast<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 2 : bool bUnmark = ( nSlot == SID_CURRENTCELL );
238 2 : if ( pReqArgs->GetItemState( FN_PARAM_1, true, &pItem ) == SfxItemState::SET )
239 0 : bUnmark = static_cast<const SfxBoolItem*>(pItem)->GetValue();
240 :
241 2 : bool bAlignToCursor = true;
242 2 : if (pReqArgs->GetItemState(FN_PARAM_2, true, &pItem) == SfxItemState::SET)
243 0 : bAlignToCursor = static_cast<const SfxBoolItem*>(pItem)->GetValue();
244 :
245 2 : 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 2 : bool bFound = false;
254 2 : ScViewData& rViewData = GetViewData();
255 2 : ScDocument* pDoc = rViewData.GetDocument();
256 2 : ScMarkData& rMark = rViewData.GetMarkData();
257 2 : ScRange aScRange;
258 2 : ScAddress aScAddress;
259 2 : sal_uInt16 nResult = lcl_ParseRange(aScRange, aAddress, pDoc, nSlot);
260 2 : SCTAB nTab = rViewData.GetTabNo();
261 2 : bool bMark = true;
262 :
263 : // Is this a range ?
264 2 : 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 2 : else if ( (nResult = lcl_ParseAddress(aScAddress, aAddress, pDoc, nSlot)) & SCA_VALID )
279 : {
280 2 : if ( nResult & SCA_TAB_3D )
281 : {
282 0 : if( aScAddress.Tab() != nTab )
283 0 : SetTabNo( nTab = aScAddress.Tab() );
284 : }
285 : else
286 2 : aScAddress.SetTab( nTab );
287 :
288 2 : aScRange = ScRange( aScAddress, aScAddress );
289 : // Zellen sollen nicht markiert werden
290 2 : 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 2 : 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( rViewData.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 2 : if ( !ValidRow(aScRange.aStart.Row()) || !ValidRow(aScRange.aEnd.Row()) )
323 0 : nResult = 0;
324 :
325 : // wir haben was gefunden
326 2 : if( nResult & SCA_VALID )
327 : {
328 2 : bFound = true;
329 2 : SCCOL nCol = aScRange.aStart.Col();
330 2 : SCROW nRow = aScRange.aStart.Row();
331 2 : bool bNothing = ( rViewData.GetCurX()==nCol && rViewData.GetCurY()==nRow );
332 :
333 : // markieren
334 2 : 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 2 : if( bUnmark )
355 : {
356 : MoveCursorAbs( nCol, nRow,
357 2 : SC_FOLLOW_NONE, false, false );
358 : }
359 : }
360 :
361 : // und Cursor setzen
362 :
363 : // zusammengefasste Zellen beruecksichtigen:
364 2 : pDoc->SkipOverlapped(nCol, nRow, nTab);
365 :
366 : // Navigator-Aufrufe sind nicht API!!!
367 :
368 2 : if( bNothing )
369 : {
370 2 : if (rReq.IsAPI())
371 0 : rReq.Ignore(); // wenn Makro, dann gar nix
372 : else
373 2 : rReq.Done(); // sonst wenigstens aufzeichnen
374 : }
375 : else
376 : {
377 0 : rViewData.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 2 : 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 2 : AlignToCursor( nCol, nRow, SC_FOLLOW_JUMP );
391 : }
392 :
393 2 : rReq.SetReturnValue( SfxStringItem( SID_CURRENTCELL, aAddress ) );
394 : }
395 :
396 2 : 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 2 : if ( !bFound && nSlot == SID_JUMPTOMARK )
410 : {
411 : // Grafik-Objekte probieren (nur bei URL's)
412 :
413 0 : bFound = SelectObject( aAddress );
414 : }
415 :
416 2 : if (!bFound && !rReq.IsAPI())
417 0 : ErrorMessage( STR_ERR_INVALID_AREA );
418 : }
419 2 : break;
420 :
421 : case SID_CURRENTOBJECT:
422 0 : if ( pReqArgs )
423 : {
424 0 : OUString aName = static_cast<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 = static_cast<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( static_cast<const SfxStringItem&>(pReqArgs->
451 0 : Get(nSlot)).GetValue() );
452 :
453 0 : SfxViewFrame* pViewFrame = NULL;
454 0 : ScDocShell* pDocSh = static_cast<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 = static_cast<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 : case SID_PRINTPREVIEW:
480 : {
481 16 : if ( !pThisFrame->GetFrame().IsInPlace() ) // nicht bei OLE
482 : {
483 : // print preview is now always in the same frame as the tab view
484 : // -> always switch this frame back to normal view
485 : // (ScPreviewShell ctor reads view data)
486 :
487 : // #102785#; finish input
488 16 : pScMod->InputEnterHandler();
489 :
490 16 : pThisFrame->GetDispatcher()->Execute( SID_VIEWSHELL1, SfxCallMode::ASYNCHRON );
491 : }
492 : // else Fehler (z.B. Ole)
493 : }
494 16 : break;
495 :
496 : case SID_DETECTIVE_DEL_ALL:
497 0 : DetectiveDelAll();
498 0 : rReq.Done();
499 0 : break;
500 :
501 : // SID_TABLE_ACTIVATE und SID_MARKAREA werden von Basic aus an der versteckten
502 : // View aufgerufen, um auf der sichtbaren View zu markieren/umzuschalten:
503 :
504 : case SID_TABLE_ACTIVATE:
505 : OSL_FAIL("old slot SID_TABLE_ACTIVATE");
506 0 : break;
507 :
508 : case SID_REPAINT:
509 0 : PaintGrid();
510 0 : PaintTop();
511 0 : PaintLeft();
512 0 : PaintExtras();
513 0 : rReq.Done();
514 0 : break;
515 :
516 : case FID_NORMALVIEWMODE:
517 : case FID_PAGEBREAKMODE:
518 : {
519 4 : bool bWantPageBreak = nSlot == FID_PAGEBREAKMODE;
520 :
521 : // check whether there is an explicit argument, use it
522 : const SfxPoolItem* pItem;
523 4 : if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SfxItemState::SET )
524 : {
525 0 : bool bItemValue = static_cast<const SfxBoolItem*>(pItem)->GetValue();
526 0 : bWantPageBreak = (nSlot == FID_PAGEBREAKMODE) == bItemValue;
527 : }
528 :
529 4 : if( GetViewData().IsPagebreakMode() != bWantPageBreak )
530 : {
531 4 : SetPagebreakMode( bWantPageBreak );
532 4 : UpdatePageBreakData();
533 4 : SetCurSubShell( GetCurObjectSelectionType(), true );
534 4 : PaintGrid();
535 4 : PaintTop();
536 4 : PaintLeft();
537 4 : rBindings.Invalidate( nSlot );
538 4 : rReq.AppendItem( SfxBoolItem( nSlot, true ) );
539 4 : rReq.Done();
540 : }
541 : }
542 4 : break;
543 :
544 : case FID_FUNCTION_BOX:
545 : {
546 0 : sal_uInt16 nChildId = ScFunctionChildWindow::GetChildWindowId();
547 0 : if ( rReq.GetArgs() )
548 0 : pThisFrame->SetChildWindow( nChildId, static_cast<const SfxBoolItem&>(rReq.GetArgs()->Get(FID_FUNCTION_BOX)).GetValue());
549 : else
550 : {
551 0 : pThisFrame->ToggleChildWindow( nChildId );
552 0 : rReq.AppendItem( SfxBoolItem( FID_FUNCTION_BOX , pThisFrame->HasChildWindow( nChildId ) ) );
553 : }
554 :
555 0 : GetViewFrame()->GetBindings().Invalidate(FID_FUNCTION_BOX);
556 0 : rReq.Done ();
557 : }
558 0 : break;
559 :
560 : case FID_TOGGLESYNTAX:
561 : {
562 0 : bool bSet = !GetViewData().IsSyntaxMode();
563 : const SfxPoolItem* pItem;
564 0 : if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SfxItemState::SET )
565 0 : bSet = static_cast<const SfxBoolItem*>(pItem)->GetValue();
566 0 : GetViewData().SetSyntaxMode( bSet );
567 0 : PaintGrid();
568 0 : rBindings.Invalidate( FID_TOGGLESYNTAX );
569 0 : rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
570 0 : rReq.Done();
571 : }
572 0 : break;
573 : case FID_TOGGLEHEADERS:
574 : {
575 0 : bool bSet = !GetViewData().IsHeaderMode();
576 : const SfxPoolItem* pItem;
577 0 : if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SfxItemState::SET )
578 0 : bSet = static_cast<const SfxBoolItem*>(pItem)->GetValue();
579 0 : GetViewData().SetHeaderMode( bSet );
580 0 : RepeatResize();
581 0 : rBindings.Invalidate( FID_TOGGLEHEADERS );
582 0 : rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
583 0 : rReq.Done();
584 : }
585 0 : break;
586 :
587 : case FID_TOGGLEFORMULA:
588 : {
589 0 : ScViewData& rViewData = GetViewData();
590 0 : const ScViewOptions& rOpts = rViewData.GetOptions();
591 0 : bool bFormulaMode = !rOpts.GetOption( VOPT_FORMULAS );
592 : const SfxPoolItem *pItem;
593 0 : if( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SfxItemState::SET )
594 0 : bFormulaMode = static_cast<const SfxBoolItem *>(pItem)->GetValue();
595 :
596 0 : ScViewOptions rSetOpts = ScViewOptions( rOpts );
597 0 : rSetOpts.SetOption( VOPT_FORMULAS, bFormulaMode );
598 0 : rViewData.SetOptions( rSetOpts );
599 :
600 0 : rViewData.GetDocShell()->PostPaintGridAll();
601 :
602 0 : rBindings.Invalidate( FID_TOGGLEFORMULA );
603 0 : rReq.AppendItem( SfxBoolItem( nSlot, bFormulaMode ) );
604 0 : rReq.Done();
605 : }
606 0 : break;
607 :
608 : case FID_TOGGLEINPUTLINE:
609 : {
610 0 : sal_uInt16 nId = ScInputWindowWrapper::GetChildWindowId();
611 0 : SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
612 0 : bool bSet = ( pWnd == NULL );
613 : const SfxPoolItem* pItem;
614 0 : if ( pReqArgs && pReqArgs->GetItemState(nSlot, true, &pItem) == SfxItemState::SET )
615 0 : bSet = static_cast<const SfxBoolItem*>(pItem)->GetValue();
616 :
617 0 : pThisFrame->SetChildWindow( nId, bSet );
618 0 : rBindings.Invalidate( FID_TOGGLEINPUTLINE );
619 0 : rReq.AppendItem( SfxBoolItem( nSlot, bSet ) );
620 0 : rReq.Done();
621 : }
622 0 : break;
623 :
624 : case SID_ATTR_ZOOM: // Statuszeile
625 : case FID_SCALE:
626 : {
627 0 : bool bSyncZoom = SC_MOD()->GetAppOptions().GetSynchronizeZoom();
628 0 : SvxZoomType eOldZoomType = GetZoomType();
629 0 : SvxZoomType eNewZoomType = eOldZoomType;
630 0 : const Fraction& rOldY = GetViewData().GetZoomY(); // Y wird angezeigt
631 0 : sal_uInt16 nOldZoom = (sal_uInt16)(( rOldY.GetNumerator() * 100 )
632 0 : / rOldY.GetDenominator());
633 0 : sal_uInt16 nZoom = nOldZoom;
634 0 : bool bCancel = false;
635 :
636 0 : if ( pReqArgs )
637 : {
638 : const SvxZoomItem& rZoomItem = static_cast<const SvxZoomItem&>(
639 0 : pReqArgs->Get(SID_ATTR_ZOOM));
640 :
641 0 : eNewZoomType = rZoomItem.GetType();
642 0 : nZoom = rZoomItem.GetValue();
643 : }
644 : else
645 : {
646 0 : SfxItemSet aSet ( GetPool(), SID_ATTR_ZOOM, SID_ATTR_ZOOM );
647 0 : SvxZoomItem aZoomItem( eOldZoomType, nOldZoom, SID_ATTR_ZOOM );
648 0 : boost::scoped_ptr<AbstractSvxZoomDialog> pDlg;
649 0 : ScMarkData& rMark = GetViewData().GetMarkData();
650 : sal_uInt16 nBtnFlags = SVX_ZOOM_ENABLE_50
651 : | SVX_ZOOM_ENABLE_75
652 : | SVX_ZOOM_ENABLE_100
653 : | SVX_ZOOM_ENABLE_150
654 : | SVX_ZOOM_ENABLE_200
655 : | SVX_ZOOM_ENABLE_WHOLEPAGE
656 0 : | SVX_ZOOM_ENABLE_PAGEWIDTH;
657 :
658 0 : if ( rMark.IsMarked() || rMark.IsMultiMarked() )
659 0 : nBtnFlags = nBtnFlags | SVX_ZOOM_ENABLE_OPTIMAL;
660 :
661 0 : aZoomItem.SetValueSet( nBtnFlags );
662 0 : aSet.Put( aZoomItem );
663 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
664 0 : if(pFact)
665 : {
666 0 : pDlg.reset(pFact->CreateSvxZoomDialog(GetDialogParent(), aSet ));
667 : OSL_ENSURE(pDlg, "Dialog creation failed!");
668 : }
669 0 : if (pDlg)
670 : {
671 0 : pDlg->SetLimits( MINZOOM, MAXZOOM );
672 :
673 0 : bCancel = ( RET_CANCEL == pDlg->Execute() );
674 :
675 : // bCancel is True only if we were in the previous if block,
676 : // so no need to check again pDlg
677 0 : if ( !bCancel )
678 : {
679 : const SvxZoomItem& rZoomItem = static_cast<const SvxZoomItem&>(
680 0 : pDlg->GetOutputItemSet()->
681 0 : Get( SID_ATTR_ZOOM ));
682 :
683 0 : eNewZoomType = rZoomItem.GetType();
684 0 : nZoom = rZoomItem.GetValue();
685 : }
686 0 : }
687 : }
688 :
689 0 : if ( !bCancel )
690 : {
691 0 : if ( eNewZoomType == SVX_ZOOM_PERCENT )
692 : {
693 0 : if ( nZoom < MINZOOM ) nZoom = MINZOOM;
694 0 : if ( nZoom > MAXZOOM ) nZoom = MAXZOOM;
695 : }
696 : else
697 : {
698 0 : nZoom = CalcZoom( eNewZoomType, nOldZoom );
699 0 : bCancel = nZoom == 0;
700 : }
701 :
702 0 : switch ( eNewZoomType )
703 : {
704 : case SVX_ZOOM_WHOLEPAGE:
705 : case SVX_ZOOM_PAGEWIDTH:
706 0 : SetZoomType( eNewZoomType, bSyncZoom );
707 0 : break;
708 :
709 : default:
710 0 : SetZoomType( SVX_ZOOM_PERCENT, bSyncZoom );
711 : }
712 : }
713 :
714 0 : if ( nZoom != nOldZoom && !bCancel )
715 : {
716 0 : if (!GetViewData().IsPagebreakMode())
717 : {
718 0 : ScAppOptions aNewOpt = pScMod->GetAppOptions();
719 0 : aNewOpt.SetZoom( nZoom );
720 0 : aNewOpt.SetZoomType( GetZoomType() );
721 0 : pScMod->SetAppOptions( aNewOpt );
722 : }
723 0 : Fraction aFract( nZoom, 100 );
724 0 : SetZoom( aFract, aFract, bSyncZoom );
725 0 : PaintGrid();
726 0 : PaintTop();
727 0 : PaintLeft();
728 0 : rBindings.Invalidate( SID_ATTR_ZOOM );
729 0 : rReq.AppendItem( SvxZoomItem( GetZoomType(), nZoom, nSlot ) );
730 0 : rReq.Done();
731 : }
732 : }
733 0 : break;
734 :
735 : case SID_ATTR_ZOOMSLIDER:
736 : {
737 0 : const SfxPoolItem* pItem = NULL;
738 0 : bool bSyncZoom = SC_MOD()->GetAppOptions().GetSynchronizeZoom();
739 0 : if ( pReqArgs && pReqArgs->GetItemState(SID_ATTR_ZOOMSLIDER, true, &pItem) == SfxItemState::SET )
740 : {
741 0 : const sal_uInt16 nCurrentZoom = static_cast<const SvxZoomSliderItem *>(pItem)->GetValue();
742 0 : if( nCurrentZoom )
743 : {
744 0 : SetZoomType( SVX_ZOOM_PERCENT, bSyncZoom );
745 0 : if (!GetViewData().IsPagebreakMode())
746 : {
747 0 : ScAppOptions aNewOpt = pScMod->GetAppOptions();
748 0 : aNewOpt.SetZoom( nCurrentZoom );
749 0 : aNewOpt.SetZoomType( GetZoomType() );
750 0 : pScMod->SetAppOptions( aNewOpt );
751 : }
752 0 : Fraction aFract( nCurrentZoom,100 );
753 0 : SetZoom( aFract, aFract, bSyncZoom );
754 0 : PaintGrid();
755 0 : PaintTop();
756 0 : PaintLeft();
757 0 : rBindings.Invalidate( SID_ATTR_ZOOMSLIDER );
758 0 : rReq.Done();
759 : }
760 : }
761 : }
762 0 : break;
763 :
764 : case FID_TAB_SELECTALL:
765 0 : SelectAllTables();
766 0 : rReq.Done();
767 0 : break;
768 :
769 : case FID_TAB_DESELECTALL:
770 0 : DeselectAllTables();
771 0 : rReq.Done();
772 0 : break;
773 :
774 : case SID_SELECT_TABLES:
775 : {
776 0 : ScViewData& rViewData = GetViewData();
777 0 : ScDocument& rDoc = *rViewData.GetDocument();
778 0 : ScMarkData& rMark = rViewData.GetMarkData();
779 0 : SCTAB nTabCount = rDoc.GetTableCount();
780 : SCTAB nTab;
781 :
782 0 : ::std::vector < sal_Int32 > aIndexList;
783 0 : SFX_REQUEST_ARG( rReq, pItem, SfxIntegerListItem, SID_SELECT_TABLES, false );
784 0 : if ( pItem )
785 0 : pItem->GetList( aIndexList );
786 : else
787 : {
788 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
789 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
790 :
791 0 : boost::scoped_ptr<AbstractScShowTabDlg> pDlg(pFact->CreateScShowTabDlg(GetDialogParent()));
792 : OSL_ENSURE(pDlg, "Dialog create fail!");
793 0 : pDlg->SetDescription(
794 : OUString( ScResId( STR_DLG_SELECTTABLES_TITLE ) ),
795 : OUString( ScResId( STR_DLG_SELECTTABLES_LBNAME ) ),
796 0 : GetStaticInterface()->GetSlot(SID_SELECT_TABLES)->GetCommand(), HID_SELECTTABLES );
797 :
798 : // fill all table names with selection state
799 0 : OUString aTabName;
800 0 : for( nTab = 0; nTab < nTabCount; ++nTab )
801 : {
802 0 : rDoc.GetName( nTab, aTabName );
803 0 : pDlg->Insert( aTabName, rMark.GetTableSelect( nTab ) );
804 : }
805 :
806 0 : if( pDlg->Execute() == RET_OK )
807 : {
808 0 : sal_uInt16 nSelCount = pDlg->GetSelectEntryCount();
809 : sal_uInt16 nSelIx;
810 0 : for( nSelIx = 0; nSelIx < nSelCount; ++nSelIx )
811 0 : aIndexList.insert( aIndexList.begin()+nSelIx, pDlg->GetSelectEntryPos( nSelIx ) );
812 0 : pDlg.reset();
813 0 : rReq.AppendItem( SfxIntegerListItem( SID_SELECT_TABLES, aIndexList ) );
814 : }
815 : else
816 0 : rReq.Ignore();
817 : }
818 :
819 0 : if ( !aIndexList.empty() )
820 : {
821 0 : sal_uInt16 nSelCount = aIndexList.size();
822 : sal_uInt16 nSelIx;
823 0 : SCTAB nFirstVisTab = 0;
824 :
825 : // special case: only hidden tables selected -> do nothing
826 0 : bool bVisSelected = false;
827 0 : for( nSelIx = 0; !bVisSelected && (nSelIx < nSelCount); ++nSelIx )
828 0 : bVisSelected = rDoc.IsVisible( nFirstVisTab = static_cast<SCTAB>(aIndexList[nSelIx]) );
829 0 : if( !bVisSelected )
830 0 : nSelCount = 0;
831 :
832 : // select the tables
833 0 : if( nSelCount )
834 : {
835 0 : for( nTab = 0; nTab < nTabCount; ++nTab )
836 0 : rMark.SelectTable( nTab, false );
837 :
838 0 : for( nSelIx = 0; nSelIx < nSelCount; ++nSelIx )
839 0 : rMark.SelectTable( static_cast<SCTAB>(aIndexList[nSelIx]), true );
840 :
841 : // activate another table, if current is deselected
842 0 : if( !rMark.GetTableSelect( rViewData.GetTabNo() ) )
843 : {
844 0 : rMark.SelectTable( nFirstVisTab, true );
845 0 : SetTabNo( nFirstVisTab );
846 : }
847 :
848 0 : rViewData.GetDocShell()->PostPaintExtras();
849 0 : SfxBindings& rBind = rViewData.GetBindings();
850 0 : rBind.Invalidate( FID_FILL_TAB );
851 0 : rBind.Invalidate( FID_TAB_DESELECTALL );
852 : }
853 :
854 0 : rReq.Done();
855 0 : }
856 : }
857 0 : break;
858 :
859 : case SID_OUTLINE_DELETEALL:
860 0 : RemoveAllOutlines();
861 0 : rReq.Done();
862 0 : break;
863 :
864 : case SID_AUTO_OUTLINE:
865 0 : AutoOutline();
866 0 : rReq.Done();
867 0 : break;
868 :
869 : case SID_WINDOW_SPLIT:
870 : {
871 8 : ScSplitMode eHSplit = GetViewData().GetHSplitMode();
872 8 : ScSplitMode eVSplit = GetViewData().GetVSplitMode();
873 8 : if ( eHSplit == SC_SPLIT_NORMAL || eVSplit == SC_SPLIT_NORMAL ) // aufheben
874 0 : RemoveSplit();
875 8 : else if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX ) // normal
876 0 : FreezeSplitters( false );
877 : else // erzeugen
878 8 : SplitAtCursor();
879 8 : rReq.Done();
880 :
881 8 : InvalidateSplit();
882 : }
883 8 : break;
884 :
885 : case SID_WINDOW_FIX:
886 : {
887 0 : ScSplitMode eHSplit = GetViewData().GetHSplitMode();
888 0 : ScSplitMode eVSplit = GetViewData().GetVSplitMode();
889 0 : if ( eHSplit == SC_SPLIT_FIX || eVSplit == SC_SPLIT_FIX ) // aufheben
890 0 : RemoveSplit();
891 : else
892 0 : FreezeSplitters( true ); // erzeugen oder fixieren
893 0 : rReq.Done();
894 :
895 0 : InvalidateSplit();
896 : }
897 0 : break;
898 :
899 : case FID_CHG_SHOW:
900 : {
901 0 : sal_uInt16 nId = ScHighlightChgDlgWrapper::GetChildWindowId();
902 0 : SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
903 :
904 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
905 : }
906 0 : break;
907 :
908 : case FID_CHG_ACCEPT:
909 : {
910 0 : pThisFrame->ToggleChildWindow(ScAcceptChgDlgWrapper::GetChildWindowId());
911 0 : GetViewFrame()->GetBindings().Invalidate(FID_CHG_ACCEPT);
912 0 : rReq.Done ();
913 :
914 : /*
915 : sal_uInt16 nId = ScAcceptChgDlgWrapper::GetChildWindowId();
916 : SfxChildWindow* pWnd = pThisFrame->GetChildWindow( nId );
917 :
918 : pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True );
919 : */
920 : }
921 0 : break;
922 :
923 : case FID_CHG_COMMENT:
924 : {
925 0 : ScViewData& rData = GetViewData();
926 0 : ScAddress aCursorPos( rData.GetCurX(), rData.GetCurY(), rData.GetTabNo() );
927 0 : ScDocShell* pDocSh = rData.GetDocShell();
928 :
929 0 : ScChangeAction* pAction = pDocSh->GetChangeAction( aCursorPos );
930 0 : if ( pAction )
931 : {
932 : const SfxPoolItem* pItem;
933 0 : if ( pReqArgs &&
934 0 : pReqArgs->GetItemState( nSlot, true, &pItem ) == SfxItemState::SET &&
935 0 : pItem->ISA( SfxStringItem ) )
936 : {
937 0 : OUString aComment = static_cast<const SfxStringItem*>(pItem)->GetValue();
938 0 : pDocSh->SetChangeComment( pAction, aComment );
939 0 : rReq.Done();
940 : }
941 : else
942 : {
943 0 : pDocSh->ExecuteChangeCommentDialog( pAction, GetDialogParent() );
944 0 : rReq.Done();
945 : }
946 : }
947 : }
948 0 : break;
949 :
950 : case SID_CREATE_SW_DRAWVIEW:
951 : // wird von den Forms gerufen, wenn die DrawView mit allem Zubehoer
952 : // angelegt werden muss
953 0 : if (!GetScDrawView())
954 : {
955 0 : GetViewData().GetDocShell()->MakeDrawLayer();
956 0 : rBindings.InvalidateAll(false);
957 : }
958 0 : break;
959 :
960 : case FID_PROTECT_DOC:
961 : {
962 0 : ScDocument* pDoc = GetViewData().GetDocument();
963 :
964 0 : if( pReqArgs )
965 : {
966 : const SfxPoolItem* pItem;
967 0 : if( pReqArgs->HasItem( FID_PROTECT_DOC, &pItem ) &&
968 0 : static_cast<const SfxBoolItem*>(pItem)->GetValue() == pDoc->IsDocProtected() )
969 : {
970 0 : rReq.Ignore();
971 0 : break;
972 : }
973 : }
974 :
975 0 : ScDocProtection* pProtect = pDoc->GetDocProtection();
976 0 : if (pProtect && pProtect->isProtected())
977 : {
978 0 : bool bCancel = false;
979 0 : OUString aPassword;
980 :
981 0 : if (pProtect->isProtectedWithPass())
982 : {
983 0 : OUString aText(ScResId(SCSTR_PASSWORD));
984 :
985 0 : boost::scoped_ptr<SfxPasswordDialog> pDlg(new SfxPasswordDialog(GetDialogParent(), &aText));
986 0 : pDlg->SetText( ScResId(SCSTR_UNPROTECTDOC) );
987 0 : pDlg->SetMinLen( 0 );
988 0 : pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_DOC)->GetCommand() );
989 0 : pDlg->SetEditHelpId( HID_PASSWD_DOC );
990 :
991 0 : if (pDlg->Execute() == RET_OK)
992 0 : aPassword = pDlg->GetPassword();
993 : else
994 0 : bCancel = true;
995 : }
996 0 : if (!bCancel)
997 : {
998 0 : Unprotect( TABLEID_DOC, aPassword );
999 0 : rReq.AppendItem( SfxBoolItem( FID_PROTECT_DOC, false ) );
1000 0 : rReq.Done();
1001 0 : }
1002 : }
1003 : else
1004 : {
1005 0 : OUString aText(ScResId(SCSTR_PASSWORDOPT));
1006 :
1007 0 : boost::scoped_ptr<SfxPasswordDialog> pDlg(new SfxPasswordDialog(GetDialogParent(), &aText));
1008 0 : pDlg->SetText( ScResId(SCSTR_PROTECTDOC) );
1009 0 : pDlg->SetMinLen( 0 );
1010 0 : pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_DOC)->GetCommand() );
1011 0 : pDlg->SetEditHelpId( HID_PASSWD_DOC );
1012 0 : pDlg->ShowExtras( SHOWEXTRAS_CONFIRM );
1013 :
1014 0 : if (pDlg->Execute() == RET_OK)
1015 : {
1016 0 : OUString aPassword = pDlg->GetPassword();
1017 0 : Protect( TABLEID_DOC, aPassword );
1018 0 : rReq.AppendItem( SfxBoolItem( FID_PROTECT_DOC, true ) );
1019 0 : rReq.Done();
1020 0 : }
1021 : }
1022 0 : rBindings.Invalidate( FID_PROTECT_DOC );
1023 : }
1024 0 : break;
1025 :
1026 : case FID_PROTECT_TABLE:
1027 : {
1028 0 : ScDocument* pDoc = GetViewData().GetDocument();
1029 0 : SCTAB nTab = GetViewData().GetTabNo();
1030 0 : bool bOldProtection = pDoc->IsTabProtected(nTab);
1031 :
1032 0 : if( pReqArgs )
1033 : {
1034 : const SfxPoolItem* pItem;
1035 0 : bool bNewProtection = !bOldProtection;
1036 0 : if( pReqArgs->HasItem( FID_PROTECT_TABLE, &pItem ) )
1037 0 : bNewProtection = static_cast<const SfxBoolItem*>(pItem)->GetValue();
1038 0 : if( bNewProtection == bOldProtection )
1039 : {
1040 0 : rReq.Ignore();
1041 0 : break;
1042 : }
1043 : }
1044 :
1045 0 : if (bOldProtection)
1046 : {
1047 : // Unprotect a protected sheet.
1048 :
1049 0 : ScTableProtection* pProtect = pDoc->GetTabProtection(nTab);
1050 0 : if (pProtect && pProtect->isProtectedWithPass())
1051 : {
1052 0 : OUString aText( ScResId(SCSTR_PASSWORDOPT) );
1053 0 : boost::scoped_ptr<SfxPasswordDialog> pDlg(new SfxPasswordDialog(GetDialogParent(), &aText));
1054 0 : pDlg->SetText( ScResId(SCSTR_UNPROTECTTAB) );
1055 0 : pDlg->SetMinLen( 0 );
1056 0 : pDlg->SetHelpId( GetStaticInterface()->GetSlot(FID_PROTECT_TABLE)->GetCommand() );
1057 0 : pDlg->SetEditHelpId( HID_PASSWD_TABLE );
1058 :
1059 0 : if (pDlg->Execute() == RET_OK)
1060 : {
1061 0 : OUString aPassword = pDlg->GetPassword();
1062 0 : Unprotect(nTab, aPassword);
1063 0 : }
1064 : }
1065 : else
1066 : // this sheet is not password-protected.
1067 0 : Unprotect(nTab, OUString());
1068 :
1069 0 : if (!pReqArgs)
1070 : {
1071 0 : rReq.AppendItem( SfxBoolItem(FID_PROTECT_TABLE, false) );
1072 0 : rReq.Done();
1073 : }
1074 : }
1075 : else
1076 : {
1077 : // Protect a current sheet.
1078 :
1079 0 : boost::scoped_ptr<ScTableProtectionDlg> pDlg(new ScTableProtectionDlg(GetDialogParent()));
1080 :
1081 0 : ScTableProtection* pProtect = pDoc->GetTabProtection(nTab);
1082 0 : if (pProtect)
1083 0 : pDlg->SetDialogData(*pProtect);
1084 :
1085 0 : if (pDlg->Execute() == RET_OK)
1086 : {
1087 0 : pScMod->InputEnterHandler();
1088 :
1089 0 : ScTableProtection aNewProtect;
1090 0 : pDlg->WriteData(aNewProtect);
1091 0 : ProtectSheet(nTab, aNewProtect);
1092 0 : if (!pReqArgs)
1093 : {
1094 0 : rReq.AppendItem( SfxBoolItem(FID_PROTECT_TABLE, true) );
1095 0 : rReq.Done();
1096 0 : }
1097 0 : }
1098 : }
1099 0 : TabChanged();
1100 0 : UpdateInputHandler(true); // damit sofort wieder eingegeben werden kann
1101 0 : SelectionChanged();
1102 : }
1103 0 : break;
1104 :
1105 : case SID_OPT_LOCALE_CHANGED :
1106 : { // locale changed, SYSTEM number formats changed => repaint cell contents
1107 0 : PaintGrid();
1108 0 : rReq.Done();
1109 : }
1110 0 : break;
1111 :
1112 : default:
1113 : OSL_FAIL("Unbekannter Slot bei ScTabViewShell::Execute");
1114 0 : break;
1115 : }
1116 258 : }
1117 :
1118 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|