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