Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "scitems.hxx"
30 : : #include <sfx2/viewfrm.hxx>
31 : : #include <sfx2/bindings.hxx>
32 : : #include <sfx2/dispatch.hxx>
33 : : #include <sfx2/request.hxx>
34 : : #include <svl/stritem.hxx>
35 : : #include <vcl/msgbox.hxx>
36 : : #include <sfx2/app.hxx>
37 : : #include "globstr.hrc"
38 : : #include "scmod.hxx"
39 : : #include "appoptio.hxx"
40 : : #include "tabvwsh.hxx"
41 : : #include "document.hxx"
42 : : #include "sc.hrc"
43 : : #include "docsh.hxx"
44 : : #include "reffact.hxx"
45 : : #include "uiitems.hxx"
46 : : #include "autoform.hxx"
47 : : #include "autofmt.hxx"
48 : : #include "cellsh.hxx"
49 : : #include "attrdlg.hrc" // TP_ALIGNMENT
50 : : #include "inputhdl.hxx"
51 : : #include "editable.hxx"
52 : : #include "markdata.hxx"
53 : : #include "scabstdlg.hxx"
54 : :
55 : : #ifdef ENABLE_TELEPATHY
56 : : #include "sccollaboration.hxx"
57 : : #endif
58 : :
59 : : #define IS_EDITMODE() GetViewData()->HasEditView( GetViewData()->GetActivePart() )
60 : :
61 : : using sc::HMMToTwips;
62 : : using sc::TwipsToHMM;
63 : : using sc::TwipsToEvenHMM;
64 : :
65 : : //------------------------------------------------------------------
66 : :
67 : 0 : void ScCellShell::Execute( SfxRequest& rReq )
68 : : {
69 : 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
70 : 0 : SfxBindings& rBindings = pTabViewShell->GetViewFrame()->GetBindings();
71 : 0 : ScModule* pScMod = SC_MOD();
72 : 0 : const SfxItemSet* pReqArgs = rReq.GetArgs();
73 : 0 : sal_uInt16 nSlot = rReq.GetSlot();
74 : :
75 [ # # ]: 0 : if (nSlot != SID_CURRENTCELL) // this comes with MouseButtonUp
76 : 0 : pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
77 : :
78 [ # # ]: 0 : if ( IS_EDITMODE() )
79 : : {
80 [ # # # ]: 0 : switch ( nSlot )
81 : : {
82 : : // when opening a reference-dialog the subshell may not be switched
83 : : // (on closing the dialog StopEditShell is called)
84 : : case SID_OPENDLG_FUNCTION:
85 : : // inplace leads to trouble with EditShell ...
86 : : //! cannot always be switched werden ????
87 [ # # ]: 0 : if (!pTabViewShell->GetViewFrame()->GetFrame().IsInPlace())
88 : 0 : pTabViewShell->SetDontSwitch(sal_True); // do not switch off EditShell
89 : : // no break
90 : :
91 : : case FID_CELL_FORMAT:
92 : : case SID_ENABLE_HYPHENATION:
93 : : case SID_DATA_SELECT:
94 : : case SID_OPENDLG_CONSOLIDATE:
95 : : case SID_OPENDLG_SOLVE:
96 : : case SID_OPENDLG_OPTSOLVER:
97 : :
98 : 0 : pScMod->InputEnterHandler();
99 : 0 : pTabViewShell->UpdateInputHandler();
100 : :
101 : 0 : pTabViewShell->SetDontSwitch(false);
102 : :
103 : 0 : break;
104 : :
105 : : default:
106 : 0 : break;
107 : : }
108 : : }
109 : :
110 [ # # # # : 0 : switch ( nSlot )
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # ]
111 : : {
112 : :
113 : :
114 : :
115 : : case SID_ATTR_SIZE://XXX ???
116 : 0 : break;
117 : :
118 : : case SID_COLLABORATION:
119 : : #ifdef ENABLE_TELEPATHY
120 : : GetViewData()->GetDocShell()->GetCollaboration()->DisplayContacts();
121 : : #endif
122 : 0 : break;
123 : :
124 : : case SID_STATUS_SELMODE:
125 [ # # ]: 0 : if ( pReqArgs )
126 : : {
127 : : /* 0: STD Click cancels selection
128 : : * 1: ER Click extends selection
129 : : * 2: ERG Click defines further selection
130 : : */
131 : 0 : sal_uInt16 nMode = ((const SfxUInt16Item&)pReqArgs->Get( nSlot )).GetValue();
132 : :
133 [ # # # ]: 0 : switch ( nMode )
134 : : {
135 : 0 : case 1: nMode = KEY_SHIFT; break;
136 : 0 : case 2: nMode = KEY_MOD1; break; // control-key
137 : : case 0:
138 : : default:
139 : 0 : nMode = 0;
140 : : }
141 : :
142 : 0 : pTabViewShell->LockModifiers( nMode );
143 : : }
144 : : else
145 : : {
146 : : // no arguments (also executed by double click on the status bar controller):
147 : : // advance to next selection mode
148 : :
149 : 0 : sal_uInt16 nModifiers = pTabViewShell->GetLockedModifiers();
150 [ # # # ]: 0 : switch ( nModifiers )
151 : : {
152 : 0 : case KEY_SHIFT: nModifiers = KEY_MOD1; break; // EXT -> ADD
153 : 0 : case KEY_MOD1: nModifiers = 0; break; // ADD -> STD
154 : 0 : default: nModifiers = KEY_SHIFT; break; // STD -> EXT
155 : : }
156 : 0 : pTabViewShell->LockModifiers( nModifiers );
157 : : }
158 : :
159 : 0 : rBindings.Invalidate( SID_STATUS_SELMODE );
160 : 0 : rReq.Done();
161 : 0 : break;
162 : :
163 : : // SID_STATUS_SELMODE_NORM is not used ???
164 : :
165 : : case SID_STATUS_SELMODE_NORM:
166 : 0 : pTabViewShell->LockModifiers( 0 );
167 : 0 : rBindings.Invalidate( SID_STATUS_SELMODE );
168 : 0 : break;
169 : :
170 : : // SID_STATUS_SELMODE_ERG / SID_STATUS_SELMODE_ERW as toggles:
171 : :
172 : : case SID_STATUS_SELMODE_ERG:
173 [ # # ]: 0 : if ( pTabViewShell->GetLockedModifiers() & KEY_MOD1 )
174 : 0 : pTabViewShell->LockModifiers( 0 );
175 : : else
176 : 0 : pTabViewShell->LockModifiers( KEY_MOD1 );
177 : 0 : rBindings.Invalidate( SID_STATUS_SELMODE );
178 : 0 : break;
179 : :
180 : : case SID_STATUS_SELMODE_ERW:
181 [ # # ]: 0 : if ( pTabViewShell->GetLockedModifiers() & KEY_SHIFT )
182 : 0 : pTabViewShell->LockModifiers( 0 );
183 : : else
184 : 0 : pTabViewShell->LockModifiers( KEY_SHIFT );
185 : 0 : rBindings.Invalidate( SID_STATUS_SELMODE );
186 : 0 : break;
187 : :
188 : : case SID_ENTER_STRING:
189 : : {
190 [ # # ]: 0 : if ( pReqArgs )
191 : : {
192 : : String aStr( ((const SfxStringItem&)pReqArgs->
193 [ # # ][ # # ]: 0 : Get( SID_ENTER_STRING )).GetValue() );
194 : :
195 : 0 : pTabViewShell->EnterData( GetViewData()->GetCurX(),
196 : : GetViewData()->GetCurY(),
197 : 0 : GetViewData()->GetTabNo(),
198 [ # # ]: 0 : aStr );
199 : :
200 [ # # ][ # # ]: 0 : ScInputHandler* pHdl = SC_MOD()->GetInputHdl( pTabViewShell );
201 [ # # ][ # # ]: 0 : if ( !pHdl || !pHdl->IsInEnterHandler() )
[ # # ]
202 : : {
203 : : // UpdateInputHandler is needed after the cell content
204 : : // has changed, but if called from EnterHandler, UpdateInputHandler
205 : : // will be called later when moving the cursor.
206 : :
207 [ # # ]: 0 : pTabViewShell->UpdateInputHandler();
208 : : }
209 : :
210 [ # # ][ # # ]: 0 : rReq.Done();
211 : :
212 : : // no GrabFocus here, as otherwise on a Mac the tab jumps before the
213 : : // sideview, when the input was not finished
214 : : // (GrabFocus is called in KillEditView)
215 : : }
216 : : }
217 : 0 : break;
218 : :
219 : : case SID_INSERT_MATRIX:
220 : : {
221 [ # # ]: 0 : if ( pReqArgs )
222 : : {
223 : : String aStr = ((const SfxStringItem&)pReqArgs->
224 [ # # ][ # # ]: 0 : Get( SID_INSERT_MATRIX )).GetValue();
225 [ # # ]: 0 : ScDocument* pDoc = GetViewData()->GetDocument();
226 [ # # ][ # # ]: 0 : pTabViewShell->EnterMatrix( aStr, pDoc->GetGrammar() );
227 [ # # ][ # # ]: 0 : rReq.Done();
228 : : }
229 : : }
230 : 0 : break;
231 : :
232 : : case FID_INPUTLINE_ENTER:
233 : : case FID_INPUTLINE_BLOCK:
234 : : case FID_INPUTLINE_MATRIX:
235 : : {
236 [ # # ]: 0 : if( pReqArgs == 0 ) //XXX temporary HACK to avoid GPF
237 : : break;
238 : :
239 : : const ScInputStatusItem* pStatusItem
240 : : = (const ScInputStatusItem*)&pReqArgs->
241 [ # # ]: 0 : Get( FID_INPUTLINE_STATUS );
242 : :
243 : 0 : ScAddress aCursorPos = pStatusItem->GetPos();
244 [ # # ]: 0 : String aString = pStatusItem->GetString();
245 : 0 : const EditTextObject* pData = pStatusItem->GetEditData();
246 [ # # ]: 0 : if (pData)
247 : : {
248 [ # # ]: 0 : if (nSlot == FID_INPUTLINE_BLOCK)
249 : : {
250 [ # # ]: 0 : pTabViewShell->EnterBlock( aString, pData );
251 : : }
252 [ # # ][ # # ]: 0 : else if ( aString.Len() > 0 && ( aString.GetChar(0) == '=' || aString.GetChar(0) == '+' || aString.GetChar(0) == '-' ) )
[ # # ][ # # ]
[ # # ]
253 : : {
254 [ # # ]: 0 : pTabViewShell->EnterData( aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(), aString, pData );
255 : : }
256 : : else
257 : : {
258 [ # # ]: 0 : pTabViewShell->EnterData( aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(), pData );
259 : : }
260 : : }
261 : : else
262 : : {
263 [ # # ]: 0 : if (nSlot == FID_INPUTLINE_ENTER)
264 : : {
265 [ # # ][ # # : 0 : if (
# # # # ]
266 : 0 : aCursorPos.Col() == GetViewData()->GetCurX() &&
267 : 0 : aCursorPos.Row() == GetViewData()->GetCurY() &&
268 : 0 : aCursorPos.Tab() == GetViewData()->GetTabNo()
269 : : )
270 : : {
271 [ # # ]: 0 : SfxStringItem aItem( SID_ENTER_STRING, aString );
272 : :
273 : : // SfxBindings& rBindings = pTabViewShell->GetViewFrame()->GetBindings();
274 : : const SfxPoolItem* aArgs[2];
275 : 0 : aArgs[0] = &aItem;
276 : 0 : aArgs[1] = NULL;
277 [ # # ][ # # ]: 0 : rBindings.Execute( SID_ENTER_STRING, aArgs );
278 : : }
279 : : else
280 : : {
281 : 0 : pTabViewShell->EnterData( aCursorPos.Col(),
282 : : aCursorPos.Row(),
283 : 0 : aCursorPos.Tab(),
284 [ # # ]: 0 : aString );
285 [ # # ]: 0 : rReq.Done();
286 : : }
287 : : }
288 [ # # ]: 0 : else if (nSlot == FID_INPUTLINE_BLOCK)
289 : : {
290 [ # # ]: 0 : pTabViewShell->EnterBlock( aString, NULL );
291 [ # # ]: 0 : rReq.Done();
292 : : }
293 : : else
294 : : {
295 [ # # ]: 0 : ScDocument* pDoc = GetViewData()->GetDocument();
296 [ # # ][ # # ]: 0 : pTabViewShell->EnterMatrix( aString, pDoc->GetGrammar() );
297 [ # # ]: 0 : rReq.Done();
298 : : }
299 : :
300 [ # # ]: 0 : }
301 : :
302 : : // no GrabFocus here, as otherwise on a Mac the tab jumps before the
303 : : // sideview, when the input was not finished
304 : : // (GrabFocus is called in KillEditView)
305 : : }
306 : 0 : break;
307 : :
308 : : case SID_OPENDLG_FUNCTION:
309 : : {
310 : 0 : sal_uInt16 nId = SID_OPENDLG_FUNCTION;
311 : 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
312 : 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
313 : :
314 : 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
315 : 0 : rReq.Ignore();
316 : : }
317 : 0 : break;
318 : :
319 : : case SID_OPENDLG_CONSOLIDATE:
320 : : {
321 : 0 : sal_uInt16 nId = ScConsolidateDlgWrapper::GetChildWindowId();
322 : 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
323 : 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
324 : :
325 : 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
326 : : }
327 : 0 : break;
328 : :
329 : : case FID_CELL_FORMAT:
330 : : {
331 [ # # ]: 0 : if ( pReqArgs != NULL )
332 : : {
333 : : //----------------------------------
334 : : // set cell attribute without dialog:
335 : : //----------------------------------
336 : : SfxItemSet* pEmptySet =
337 : : new SfxItemSet( *pReqArgs->GetPool(),
338 : : ATTR_PATTERN_START,
339 [ # # ][ # # ]: 0 : ATTR_PATTERN_END );
340 : :
341 : : SfxItemSet* pNewSet =
342 : : new SfxItemSet( *pReqArgs->GetPool(),
343 : : ATTR_PATTERN_START,
344 [ # # ][ # # ]: 0 : ATTR_PATTERN_END );
345 : :
346 : 0 : const SfxPoolItem* pAttr = NULL;
347 : 0 : sal_uInt16 nWhich = 0;
348 : :
349 [ # # ]: 0 : for ( nWhich=ATTR_PATTERN_START; nWhich<=ATTR_PATTERN_END; nWhich++ )
350 [ # # ][ # # ]: 0 : if ( pReqArgs->GetItemState( nWhich, sal_True, &pAttr ) == SFX_ITEM_SET )
351 [ # # ]: 0 : pNewSet->Put( *pAttr );
352 : :
353 [ # # ]: 0 : pTabViewShell->ApplyAttributes( pNewSet, pEmptySet );
354 : :
355 [ # # ][ # # ]: 0 : delete pNewSet;
356 [ # # ][ # # ]: 0 : delete pEmptySet;
357 : :
358 [ # # ]: 0 : rReq.Done();
359 : : }
360 [ # # ]: 0 : else if ( pReqArgs == NULL )
361 : : {
362 : 0 : pTabViewShell->ExecuteCellFormatDlg( rReq );
363 : : }
364 : : }
365 : 0 : break;
366 : :
367 : : case SID_ENABLE_HYPHENATION:
368 : 0 : pTabViewShell->ExecuteCellFormatDlg( rReq, TP_ALIGNMENT );
369 : 0 : break;
370 : :
371 : : case SID_OPENDLG_SOLVE:
372 : : {
373 : 0 : sal_uInt16 nId = ScSolverDlgWrapper::GetChildWindowId();
374 : 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
375 : 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
376 : :
377 : 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
378 : : }
379 : 0 : break;
380 : :
381 : : case SID_OPENDLG_OPTSOLVER:
382 : : {
383 : 0 : sal_uInt16 nId = ScOptSolverDlgWrapper::GetChildWindowId();
384 : 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
385 : 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
386 : :
387 : 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
388 : : }
389 : 0 : break;
390 : :
391 : : case SID_OPENDLG_TABOP:
392 : : {
393 : 0 : sal_uInt16 nId = ScTabOpDlgWrapper::GetChildWindowId();
394 : 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
395 : 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
396 : :
397 : 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
398 : : }
399 : 0 : break;
400 : :
401 : : case SID_SCENARIOS:
402 : : {
403 : 0 : ScDocument* pDoc = GetViewData()->GetDocument();
404 : 0 : ScMarkData& rMark = GetViewData()->GetMarkData();
405 : 0 : SCTAB nTab = GetViewData()->GetTabNo();
406 : :
407 [ # # ]: 0 : if ( pDoc->IsScenario(nTab) )
408 : : {
409 : 0 : rMark.MarkToMulti();
410 [ # # ]: 0 : if ( rMark.IsMultiMarked() )
411 : : {
412 [ # # ][ # # ]: 0 : if ( rReq.IsAPI()
[ # # ][ # # ]
413 : : || RET_YES ==
414 : : QueryBox( pTabViewShell->GetDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES),
415 [ # # ]: 0 : ScGlobal::GetRscString(STR_UPDATE_SCENARIO) ).
416 [ # # ][ # # ]: 0 : Execute() )
[ # # ][ # # ]
[ # # ]
417 : : {
418 : 0 : pTabViewShell->ExtendScenario();
419 : 0 : rReq.Done();
420 : : }
421 : : }
422 [ # # ]: 0 : else if( ! rReq.IsAPI() )
423 : : {
424 : : ErrorBox aErrorBox( pTabViewShell->GetDialogParent(), WinBits(WB_OK | WB_DEF_OK),
425 [ # # ][ # # ]: 0 : ScGlobal::GetRscString(STR_NOAREASELECTED) );
[ # # ]
426 [ # # ][ # # ]: 0 : aErrorBox.Execute();
427 : : }
428 : : }
429 : : else
430 : : {
431 : 0 : rMark.MarkToMulti();
432 [ # # ]: 0 : if ( rMark.IsMultiMarked() )
433 : : {
434 : 0 : SCTAB i=1;
435 [ # # ]: 0 : String aBaseName;
436 : 0 : rtl::OUString aName;
437 : 0 : rtl::OUString aComment;
438 : 0 : Color aColor;
439 : : sal_uInt16 nFlags;
440 : :
441 : 0 : rtl::OUString aTmp;
442 [ # # ]: 0 : pDoc->GetName(nTab, aTmp);
443 [ # # ]: 0 : aBaseName = aTmp;
444 [ # # ]: 0 : aBaseName += '_';
445 [ # # ][ # # ]: 0 : aBaseName += ScGlobal::GetRscString(STR_SCENARIO);
446 [ # # ]: 0 : aBaseName += '_';
447 : :
448 : : // first test, if the prefix is recognised as valid,
449 : : // else avoid only doubles
450 [ # # ][ # # ]: 0 : sal_Bool bPrefix = pDoc->ValidTabName( aBaseName );
451 : : OSL_ENSURE(bPrefix, "ungueltiger Tabellenname");
452 : :
453 [ # # ][ # # ]: 0 : while ( pDoc->IsScenario(nTab+i) )
454 : 0 : i++;
455 : :
456 : : sal_Bool bValid;
457 : : SCTAB nDummy;
458 [ # # ][ # # ]: 0 : do
[ # # ]
459 : : {
460 [ # # ]: 0 : aName = aBaseName;
461 [ # # ][ # # ]: 0 : aName += String::CreateFromInt32( i );
[ # # ]
462 [ # # ]: 0 : if (bPrefix)
463 [ # # ]: 0 : bValid = pDoc->ValidNewTabName( aName );
464 : : else
465 [ # # ]: 0 : bValid = !pDoc->GetTable( aName, nDummy );
466 : 0 : ++i;
467 : : }
468 : : while ( !bValid && i <= MAXTAB + 2 );
469 : :
470 [ # # ]: 0 : if ( pReqArgs != NULL )
471 : : {
472 [ # # ]: 0 : String aArgName;
473 [ # # ]: 0 : String aArgComment;
474 : : const SfxPoolItem* pItem;
475 [ # # ][ # # ]: 0 : if ( pReqArgs->GetItemState( SID_SCENARIOS, sal_True, &pItem ) == SFX_ITEM_SET )
476 [ # # ]: 0 : aArgName = ((const SfxStringItem*)pItem)->GetValue();
477 [ # # ][ # # ]: 0 : if ( pReqArgs->GetItemState( SID_NEW_TABLENAME, sal_True, &pItem ) == SFX_ITEM_SET )
478 [ # # ]: 0 : aArgComment = ((const SfxStringItem*)pItem)->GetValue();
479 : :
480 : 0 : aColor = Color( COL_LIGHTGRAY ); // Default
481 : 0 : nFlags = 0; // not-TwoWay
482 : :
483 [ # # ]: 0 : pTabViewShell->MakeScenario( aArgName, aArgComment, aColor, nFlags );
484 [ # # ][ # # ]: 0 : if( ! rReq.IsAPI() )
485 [ # # ][ # # ]: 0 : rReq.Done();
[ # # ]
486 : : }
487 : : else
488 : : {
489 [ # # ]: 0 : sal_Bool bSheetProtected = pDoc->IsTabProtected(nTab);
490 [ # # ]: 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
491 : : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
492 : :
493 [ # # ][ # # ]: 0 : AbstractScNewScenarioDlg* pNewDlg = pFact->CreateScNewScenarioDlg( pTabViewShell->GetDialogParent(), aName, RID_SCDLG_NEWSCENARIO, false,bSheetProtected);
[ # # ][ # # ]
494 : : OSL_ENSURE(pNewDlg, "Dialog create fail!");
495 [ # # ][ # # ]: 0 : if ( pNewDlg->Execute() == RET_OK )
496 : : {
497 [ # # ]: 0 : pNewDlg->GetScenarioData( aName, aComment, aColor, nFlags );
498 [ # # ][ # # ]: 0 : pTabViewShell->MakeScenario( aName, aComment, aColor, nFlags );
[ # # ][ # # ]
[ # # ]
499 : :
500 [ # # ][ # # ]: 0 : rReq.AppendItem( SfxStringItem( SID_SCENARIOS, aName ) );
[ # # ][ # # ]
[ # # ]
501 [ # # ][ # # ]: 0 : rReq.AppendItem( SfxStringItem( SID_NEW_TABLENAME, aComment ) );
[ # # ][ # # ]
[ # # ]
502 [ # # ]: 0 : rReq.Done();
503 : : }
504 [ # # ][ # # ]: 0 : delete pNewDlg;
505 [ # # ]: 0 : }
506 : : }
507 [ # # ]: 0 : else if( ! rReq.IsAPI() )
508 : : {
509 : 0 : pTabViewShell->ErrorMessage(STR_ERR_NEWSCENARIO);
510 : : }
511 : : }
512 : : }
513 : 0 : break;
514 : :
515 : :
516 : : case SID_SELECTALL:
517 : : {
518 : 0 : pTabViewShell->SelectAll();
519 : 0 : rReq.Done();
520 : : }
521 : 0 : break;
522 : :
523 : : //----------------------------------------------------------------
524 : :
525 : : case FID_ROW_HEIGHT:
526 : : {
527 [ # # ]: 0 : if ( pReqArgs )
528 : : {
529 : 0 : const SfxUInt16Item& rUInt16Item = (const SfxUInt16Item&)pReqArgs->Get( FID_ROW_HEIGHT );
530 : :
531 : : // #101390#; the value of the macro is in HMM so use HMMToTwips to convert
532 : : pTabViewShell->SetMarkedWidthOrHeight( false, SC_SIZE_DIRECT,
533 : 0 : sal::static_int_cast<sal_uInt16>( HMMToTwips(rUInt16Item.GetValue()) ) );
534 [ # # ]: 0 : if( ! rReq.IsAPI() )
535 : 0 : rReq.Done();
536 : : }
537 : : else
538 : : {
539 : 0 : ScViewData* pData = GetViewData();
540 : 0 : FieldUnit eMetric = SC_MOD()->GetAppOptions().GetAppMetric();
541 : : sal_uInt16 nCurHeight = pData->GetDocument()->
542 : : GetRowHeight( pData->GetCurY(),
543 : 0 : pData->GetTabNo() );
544 : 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
545 : : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
546 : :
547 : : AbstractScMetricInputDlg* pDlg = pFact->CreateScMetricInputDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_ROW_MAN,
548 : : nCurHeight,
549 : : ScGlobal::nStdRowHeight,
550 : : RID_SCDLG_ROW_MAN,
551 : : eMetric,
552 : : 2,
553 : 0 : MAX_ROW_HEIGHT);
554 : : OSL_ENSURE(pDlg, "Dialog create fail!");
555 : :
556 [ # # ]: 0 : if ( pDlg->Execute() == RET_OK )
557 : : {
558 : 0 : long nVal = pDlg->GetInputValue();
559 : 0 : pTabViewShell->SetMarkedWidthOrHeight( false, SC_SIZE_DIRECT, (sal_uInt16)nVal );
560 : :
561 : : // #101390#; the value of the macro should be in HMM so use TwipsToEvenHMM to convert
562 [ # # ]: 0 : rReq.AppendItem( SfxUInt16Item( FID_ROW_HEIGHT, (sal_uInt16)TwipsToEvenHMM(nVal) ) );
563 : 0 : rReq.Done();
564 : :
565 : : }
566 [ # # ]: 0 : delete pDlg;
567 : : }
568 : : }
569 : 0 : break;
570 : :
571 : : case FID_ROW_OPT_HEIGHT:
572 : : {
573 [ # # ]: 0 : if ( pReqArgs )
574 : : {
575 : 0 : const SfxUInt16Item& rUInt16Item = (const SfxUInt16Item&)pReqArgs->Get( FID_ROW_OPT_HEIGHT );
576 : :
577 : : // #101390#; the value of the macro is in HMM so use HMMToTwips to convert
578 : : pTabViewShell->SetMarkedWidthOrHeight( false, SC_SIZE_OPTIMAL,
579 : 0 : sal::static_int_cast<sal_uInt16>( HMMToTwips(rUInt16Item.GetValue()) ) );
580 : 0 : ScGlobal::nLastRowHeightExtra = rUInt16Item.GetValue();
581 : :
582 [ # # ]: 0 : if( ! rReq.IsAPI() )
583 : 0 : rReq.Done();
584 : : }
585 : : else
586 : : {
587 : 0 : FieldUnit eMetric = SC_MOD()->GetAppOptions().GetAppMetric();
588 : :
589 : 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
590 : : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
591 : :
592 : : AbstractScMetricInputDlg* pDlg = pFact->CreateScMetricInputDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_ROW_OPT,
593 : : ScGlobal::nLastRowHeightExtra,
594 : : 0,
595 : : RID_SCDLG_ROW_OPT,
596 : : eMetric,
597 : : 1,
598 : 0 : MAX_EXTRA_HEIGHT);
599 : : OSL_ENSURE(pDlg, "Dialog create fail!");
600 : :
601 [ # # ]: 0 : if ( pDlg->Execute() == RET_OK )
602 : : {
603 : 0 : long nVal = pDlg->GetInputValue();
604 : 0 : pTabViewShell->SetMarkedWidthOrHeight( false, SC_SIZE_OPTIMAL, (sal_uInt16)nVal );
605 : 0 : ScGlobal::nLastRowHeightExtra = nVal;
606 : :
607 : : // #101390#; the value of the macro should be in HMM so use TwipsToEvenHMM to convert
608 [ # # ]: 0 : rReq.AppendItem( SfxUInt16Item( FID_ROW_OPT_HEIGHT, (sal_uInt16)TwipsToEvenHMM(nVal) ) );
609 : 0 : rReq.Done();
610 : :
611 : : }
612 [ # # ]: 0 : delete pDlg;
613 : : }
614 : : }
615 : 0 : break;
616 : :
617 : : case FID_COL_WIDTH:
618 : : {
619 [ # # ]: 0 : if ( pReqArgs )
620 : : {
621 : 0 : const SfxUInt16Item& rUInt16Item = (const SfxUInt16Item&)pReqArgs->Get( FID_COL_WIDTH );
622 : :
623 : : // #101390#; the value of the macro is in HMM so use HMMToTwips to convert
624 : : pTabViewShell->SetMarkedWidthOrHeight( sal_True, SC_SIZE_DIRECT,
625 : 0 : sal::static_int_cast<sal_uInt16>( HMMToTwips(rUInt16Item.GetValue()) ) );
626 [ # # ]: 0 : if( ! rReq.IsAPI() )
627 : 0 : rReq.Done();
628 : : }
629 : : else
630 : : {
631 : 0 : FieldUnit eMetric = SC_MOD()->GetAppOptions().GetAppMetric();
632 : 0 : ScViewData* pData = GetViewData();
633 : : sal_uInt16 nCurHeight = pData->GetDocument()->
634 : 0 : GetColWidth( pData->GetCurX(),
635 : 0 : pData->GetTabNo() );
636 : 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
637 : : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
638 : :
639 : : AbstractScMetricInputDlg* pDlg = pFact->CreateScMetricInputDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_COL_MAN,
640 : : nCurHeight,
641 : : STD_COL_WIDTH,
642 : : RID_SCDLG_COL_MAN,
643 : : eMetric,
644 : : 2,
645 : 0 : MAX_COL_WIDTH);
646 : : OSL_ENSURE(pDlg, "Dialog create fail!");
647 : :
648 [ # # ]: 0 : if ( pDlg->Execute() == RET_OK )
649 : : {
650 : 0 : long nVal = pDlg->GetInputValue();
651 : 0 : pTabViewShell->SetMarkedWidthOrHeight( sal_True, SC_SIZE_DIRECT, (sal_uInt16)nVal );
652 : :
653 : : // #101390#; the value of the macro should be in HMM so use TwipsToEvenHMM to convert
654 [ # # ]: 0 : rReq.AppendItem( SfxUInt16Item( FID_COL_WIDTH, (sal_uInt16)TwipsToEvenHMM(nVal)) );
655 : 0 : rReq.Done();
656 : :
657 : : }
658 [ # # ]: 0 : delete pDlg;
659 : : }
660 : : }
661 : 0 : break;
662 : :
663 : : case FID_COL_OPT_WIDTH:
664 : : {
665 [ # # ]: 0 : if ( pReqArgs )
666 : : {
667 : 0 : const SfxUInt16Item& rUInt16Item = (const SfxUInt16Item&)pReqArgs->Get( FID_COL_OPT_WIDTH );
668 : :
669 : : // #101390#; the value of the macro is in HMM so use HMMToTwips to convert
670 : : pTabViewShell->SetMarkedWidthOrHeight( sal_True, SC_SIZE_OPTIMAL,
671 : 0 : sal::static_int_cast<sal_uInt16>( HMMToTwips(rUInt16Item.GetValue()) ) );
672 : 0 : ScGlobal::nLastColWidthExtra = rUInt16Item.GetValue();
673 : :
674 [ # # ]: 0 : if( ! rReq.IsAPI() )
675 : 0 : rReq.Done();
676 : : }
677 : : else
678 : : {
679 : 0 : FieldUnit eMetric = SC_MOD()->GetAppOptions().GetAppMetric();
680 : :
681 : 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
682 : : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
683 : :
684 : : AbstractScMetricInputDlg* pDlg = pFact->CreateScMetricInputDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_COL_OPT,
685 : : ScGlobal::nLastColWidthExtra,
686 : : STD_EXTRA_WIDTH,
687 : : RID_SCDLG_COL_OPT,
688 : : eMetric,
689 : : 1,
690 : 0 : MAX_EXTRA_WIDTH);
691 : : OSL_ENSURE(pDlg, "Dialog create fail!");
692 [ # # ]: 0 : if ( pDlg->Execute() == RET_OK )
693 : : {
694 : 0 : long nVal = pDlg->GetInputValue();
695 : 0 : pTabViewShell->SetMarkedWidthOrHeight( sal_True, SC_SIZE_OPTIMAL, (sal_uInt16)nVal );
696 : 0 : ScGlobal::nLastColWidthExtra = nVal;
697 : :
698 : : // #101390#; the value of the macro should be in HMM so use TwipsToEvenHMM to convert
699 [ # # ]: 0 : rReq.AppendItem( SfxUInt16Item( FID_COL_OPT_WIDTH, (sal_uInt16)TwipsToEvenHMM(nVal) ) );
700 : 0 : rReq.Done();
701 : : }
702 [ # # ]: 0 : delete pDlg;
703 : : }
704 : : }
705 : 0 : break;
706 : :
707 : : case FID_COL_OPT_DIRECT:
708 : 0 : pTabViewShell->SetMarkedWidthOrHeight( sal_True, SC_SIZE_OPTIMAL, STD_EXTRA_WIDTH );
709 : 0 : rReq.Done();
710 : 0 : break;
711 : :
712 : : case FID_ROW_HIDE:
713 : 0 : pTabViewShell->SetMarkedWidthOrHeight( false, SC_SIZE_DIRECT, 0 );
714 : 0 : rReq.Done();
715 : 0 : break;
716 : : case FID_ROW_SHOW:
717 : 0 : pTabViewShell->SetMarkedWidthOrHeight( false, SC_SIZE_SHOW, 0 );
718 : 0 : rReq.Done();
719 : 0 : break;
720 : : case FID_COL_HIDE:
721 : 0 : pTabViewShell->SetMarkedWidthOrHeight( sal_True, SC_SIZE_DIRECT, 0 );
722 : 0 : rReq.Done();
723 : 0 : break;
724 : : case FID_COL_SHOW:
725 : 0 : pTabViewShell->SetMarkedWidthOrHeight( sal_True, SC_SIZE_SHOW, 0 );
726 : 0 : rReq.Done();
727 : 0 : break;
728 : :
729 : : //----------------------------------------------------------------
730 : :
731 : :
732 : : case SID_CELL_FORMAT_RESET:
733 : : {
734 : 0 : pTabViewShell->DeleteContents( IDF_HARDATTR | IDF_EDITATTR );
735 : 0 : rReq.Done();
736 : : }
737 : 0 : break;
738 : :
739 : : case FID_MERGE_ON:
740 : : case FID_MERGE_OFF:
741 : : case FID_MERGE_TOGGLE:
742 : : {
743 [ # # ]: 0 : if ( !GetViewData()->GetDocument()->GetChangeTrack() )
744 : : {
745 : : // test whether to merge or to split
746 : 0 : bool bMerge = false;
747 : 0 : sal_Bool bCenter = false;
748 [ # # # # ]: 0 : switch( nSlot )
749 : : {
750 : : case FID_MERGE_ON:
751 : 0 : bMerge = true;
752 : 0 : break;
753 : : case FID_MERGE_OFF:
754 : 0 : bMerge = false;
755 : 0 : break;
756 : : case FID_MERGE_TOGGLE:
757 : : {
758 : 0 : bCenter = true;
759 : 0 : SfxPoolItem* pItem = 0;
760 [ # # ][ # # ]: 0 : if( rBindings.QueryState( nSlot, pItem ) >= SFX_ITEM_DEFAULT )
761 : 0 : bMerge = !static_cast< SfxBoolItem* >( pItem )->GetValue();
762 : : }
763 : 0 : break;
764 : : }
765 : :
766 [ # # ]: 0 : if( bMerge )
767 : : {
768 : : // merge - check if to move contents of covered cells
769 : 0 : sal_Bool bMoveContents = false;
770 [ # # ]: 0 : sal_Bool bApi = rReq.IsAPI();
771 : : const SfxPoolItem* pItem;
772 [ # # ][ # # ]: 0 : if ( pReqArgs &&
[ # # ]
773 [ # # ]: 0 : pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET )
774 : : {
775 : : OSL_ENSURE(pItem && pItem->ISA(SfxBoolItem), "falsches Item");
776 : 0 : bMoveContents = ((const SfxBoolItem*)pItem)->GetValue();
777 : : }
778 : :
779 [ # # ][ # # ]: 0 : if (pTabViewShell->MergeCells( bApi, bMoveContents, true, bCenter ))
780 : : {
781 [ # # ][ # # ]: 0 : if (!bApi && bMoveContents) // "yes" clicked in dialog
782 [ # # ][ # # ]: 0 : rReq.AppendItem( SfxBoolItem( nSlot, bMoveContents ) );
[ # # ]
783 [ # # ]: 0 : rBindings.Invalidate( nSlot );
784 [ # # ]: 0 : rReq.Done();
785 : : }
786 : : }
787 : : else
788 : : {
789 : : // split cells
790 [ # # ]: 0 : if (pTabViewShell->RemoveMerge())
791 : : {
792 : 0 : rBindings.Invalidate( nSlot );
793 : 0 : rReq.Done();
794 : : }
795 : : }
796 : 0 : break;
797 : : }
798 : : }
799 : 0 : break;
800 : :
801 : : case SID_AUTOFORMAT:
802 : : {
803 [ # # ]: 0 : Window* pDlgParent = pTabViewShell->GetDialogParent();
804 : : SCCOL nStartCol;
805 : : SCROW nStartRow;
806 : : SCTAB nStartTab;
807 : : SCCOL nEndCol;
808 : : SCROW nEndRow;
809 : : SCTAB nEndTab;
810 : :
811 [ # # ]: 0 : const ScMarkData& rMark = GetViewData()->GetMarkData();
812 [ # # ][ # # ]: 0 : if ( !rMark.IsMarked() && !rMark.IsMultiMarked() )
[ # # ]
813 [ # # ]: 0 : pTabViewShell->MarkDataArea( sal_True );
814 : :
815 : : GetViewData()->GetSimpleArea( nStartCol,nStartRow,nStartTab,
816 [ # # ]: 0 : nEndCol,nEndRow,nEndTab );
817 : :
818 [ # # # # ]: 0 : if ( ( Abs((SCsCOL)nEndCol-(SCsCOL)nStartCol) > 1 )
[ # # ]
819 : 0 : && ( Abs((SCsROW)nEndRow-(SCsROW)nStartRow) > 1 ) )
820 : : {
821 [ # # ]: 0 : if ( pReqArgs )
822 : : {
823 [ # # ]: 0 : const SfxStringItem& rNameItem = (const SfxStringItem&)pReqArgs->Get( SID_AUTOFORMAT );
824 [ # # ]: 0 : ScAutoFormat* pFormat = ScGlobal::GetOrCreateAutoFormat();
825 [ # # ][ # # ]: 0 : ScAutoFormat::const_iterator it = pFormat->find(rNameItem.GetValue());
[ # # ]
826 [ # # ][ # # ]: 0 : ScAutoFormat::const_iterator itBeg = pFormat->begin();
827 [ # # ]: 0 : size_t nIndex = std::distance(itBeg, it);
828 : :
829 [ # # ]: 0 : pTabViewShell->AutoFormat( nIndex );
830 : :
831 [ # # ][ # # ]: 0 : if( ! rReq.IsAPI() )
832 [ # # ]: 0 : rReq.Done();
833 : : }
834 : : else
835 : : {
836 [ # # ]: 0 : ScGlobal::ClearAutoFormat();
837 [ # # ]: 0 : ScAutoFormatData* pNewEntry = pTabViewShell->CreateAutoFormatData();
838 [ # # ]: 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
839 : : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
840 : :
841 [ # # ][ # # ]: 0 : AbstractScAutoFormatDlg* pDlg = pFact->CreateScAutoFormatDlg( pDlgParent, ScGlobal::GetOrCreateAutoFormat(), pNewEntry,GetViewData()->GetDocument(), RID_SCDLG_AUTOFORMAT );
[ # # ]
842 : : OSL_ENSURE(pDlg, "Dialog create fail!");
843 : :
844 [ # # ][ # # ]: 0 : if ( pDlg->Execute() == RET_OK )
845 : : {
846 [ # # ][ # # ]: 0 : ScEditableTester aTester( pTabViewShell );
847 [ # # ]: 0 : if ( !aTester.IsEditable() )
848 : : {
849 [ # # ][ # # ]: 0 : pTabViewShell->ErrorMessage(aTester.GetMessageId());
850 : : }
851 : : else
852 : : {
853 [ # # ][ # # ]: 0 : pTabViewShell->AutoFormat( pDlg->GetIndex() );
854 : :
855 [ # # ][ # # ]: 0 : rReq.AppendItem( SfxStringItem( SID_AUTOFORMAT, pDlg->GetCurrFormatName() ) );
[ # # ][ # # ]
[ # # ]
856 [ # # ]: 0 : rReq.Done();
857 : 0 : }
858 : : }
859 [ # # ][ # # ]: 0 : delete pDlg;
860 [ # # ][ # # ]: 0 : delete pNewEntry;
861 : : }
862 : : }
863 : : else
864 : : ErrorBox( pDlgParent, WinBits( WB_OK | WB_DEF_OK ),
865 [ # # ][ # # ]: 0 : ScGlobal::GetRscString(STR_INVALID_AFAREA) ).Execute();
[ # # ][ # # ]
866 : : }
867 : 0 : break;
868 : :
869 : : case SID_CANCEL:
870 : : {
871 [ # # ]: 0 : if (GetViewData()->HasEditView(GetViewData()->GetActivePart()))
872 : 0 : pScMod->InputCancelHandler();
873 [ # # ]: 0 : else if (pTabViewShell->HasPaintBrush())
874 : 0 : pTabViewShell->ResetBrushDocument(); // abort format paint brush
875 [ # # ]: 0 : else if (pTabViewShell->HasHintWindow())
876 : 0 : pTabViewShell->RemoveHintWindow();
877 [ # # ]: 0 : else if( ScViewUtil::IsFullScreen( *pTabViewShell ) )
878 : 0 : ScViewUtil::SetFullScreen( *pTabViewShell, false );
879 : : else
880 : : {
881 : : // TODO/LATER: when is this code executed?
882 : 0 : pTabViewShell->Escape();
883 : : }
884 : : }
885 : 0 : break;
886 : :
887 : : case SID_DATA_SELECT:
888 : 0 : pTabViewShell->StartDataSelect();
889 : 0 : break;
890 : :
891 : : case SID_DETECTIVE_FILLMODE:
892 : : {
893 : 0 : sal_Bool bOldMode = pTabViewShell->IsAuditShell();
894 : 0 : pTabViewShell->SetAuditShell( !bOldMode );
895 : 0 : pTabViewShell->Invalidate( nSlot );
896 : : }
897 : 0 : break;
898 : :
899 : : // ----------------------------------------------------------------
900 : :
901 : : case FID_INPUTLINE_STATUS:
902 : : OSL_FAIL("Execute von InputLine-Status");
903 : 0 : break;
904 : :
905 : : case SID_STATUS_DOCPOS:
906 : : // Launch navigator.
907 : 0 : GetViewData()->GetDispatcher().Execute(
908 : 0 : SID_NAVIGATOR, SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_RECORD );
909 : 0 : break;
910 : :
911 : : case SID_MARKAREA:
912 : : // called from Basic at the hidden view to select a range in the visible view
913 : : OSL_FAIL("old slot SID_MARKAREA");
914 : 0 : break;
915 : :
916 : : default:
917 : : OSL_FAIL("Unbekannter Slot bei ScCellShell::Execute");
918 : 0 : break;
919 : : }
920 : 0 : }
921 : :
922 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|