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