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 <com/sun/star/i18n/TextConversionOption.hpp>
21 : #include <com/sun/star/sheet/DataPilotFieldFilter.hpp>
22 :
23 : #include "scitems.hxx"
24 : #include <sfx2/viewfrm.hxx>
25 :
26 : #include <svl/stritem.hxx>
27 : #include <svl/whiter.hxx>
28 : #include <svl/zforlist.hxx>
29 : #include <svl/zformat.hxx>
30 : #include <sfx2/dispatch.hxx>
31 : #include <sfx2/request.hxx>
32 : #include <vcl/msgbox.hxx>
33 : #include <svx/svxdlg.hxx>
34 : #include <sot/formats.hxx>
35 : #include <svx/postattr.hxx>
36 : #include <editeng/fontitem.hxx>
37 : #include <svx/clipfmtitem.hxx>
38 : #include <sfx2/passwd.hxx>
39 : #include <svx/hlnkitem.hxx>
40 : #include <basic/sbxcore.hxx>
41 : #include <unotools/useroptions.hxx>
42 : #include <vcl/waitobj.hxx>
43 : #include <unotools/localedatawrapper.hxx>
44 :
45 : #include "cellsh.hxx"
46 : #include "sc.hrc"
47 : #include "document.hxx"
48 : #include "patattr.hxx"
49 : #include "scmod.hxx"
50 : #include "scresid.hxx"
51 : #include "tabvwsh.hxx"
52 : #include "impex.hxx"
53 : #include "reffind.hxx"
54 : #include "uiitems.hxx"
55 : #include "reffact.hxx"
56 : #include "inputhdl.hxx"
57 : #include "transobj.hxx"
58 : #include "drwtrans.hxx"
59 : #include "docfunc.hxx"
60 : #include "editable.hxx"
61 : #include "dpobject.hxx"
62 : #include "dpsave.hxx"
63 : #include "dpgroup.hxx"
64 : #include "spellparam.hxx"
65 : #include "postit.hxx"
66 : #include "clipparam.hxx"
67 : #include "pivot.hxx"
68 : #include "dpsdbtab.hxx"
69 : #include "dpshttab.hxx"
70 : #include "dbdata.hxx"
71 : #include "docsh.hxx"
72 : #include "cliputil.hxx"
73 : #include "markdata.hxx"
74 : #include "docpool.hxx"
75 : #include "condformatdlg.hxx"
76 : #include "attrib.hxx"
77 :
78 : #include "globstr.hrc"
79 : #include "scui_def.hxx"
80 : #include <svx/dialogs.hrc>
81 : #include "scabstdlg.hxx"
82 :
83 : #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
84 : #include <com/sun/star/lang/XInitialization.hpp>
85 : #include <com/sun/star/beans/PropertyValue.hpp>
86 : #include <com/sun/star/beans/XPropertySet.hpp>
87 : #include <cppuhelper/bootstrap.hxx>
88 : #include <com/sun/star/i18n/TransliterationModules.hpp>
89 : #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
90 :
91 : #include <boost/scoped_ptr.hpp>
92 :
93 : using namespace ::com::sun::star;
94 : using namespace ::com::sun::star::beans;
95 : using namespace ::com::sun::star::uno;
96 :
97 :
98 0 : void ScCellShell::ExecuteEdit( SfxRequest& rReq )
99 : {
100 0 : ScModule* pScMod = SC_MOD();
101 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
102 0 : SfxBindings& rBindings = pTabViewShell->GetViewFrame()->GetBindings();
103 0 : const SfxItemSet* pReqArgs = rReq.GetArgs();
104 0 : sal_uInt16 nSlot = rReq.GetSlot();
105 :
106 0 : pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
107 :
108 : // finish input
109 0 : if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
110 : {
111 0 : switch ( nSlot )
112 : {
113 : case FID_DEFINE_NAME:
114 : case FID_ADD_NAME:
115 : case FID_USE_NAME:
116 : case FID_INSERT_NAME:
117 : case SID_SPELL_DIALOG:
118 : case SID_HANGUL_HANJA_CONVERSION:
119 : case SID_OPENDLG_CONDFRMT:
120 : case SID_OPENDLG_COLORSCALE:
121 : case SID_OPENDLG_DATABAR:
122 :
123 0 : pScMod->InputEnterHandler();
124 0 : pTabViewShell->UpdateInputHandler();
125 0 : break;
126 :
127 : default:
128 0 : break;
129 : }
130 : }
131 :
132 0 : switch ( nSlot )
133 : {
134 :
135 : // insert / delete cells / rows / columns
136 :
137 :
138 : case FID_INS_ROW:
139 0 : pTabViewShell->InsertCells(INS_INSROWS);
140 0 : rReq.Done();
141 0 : break;
142 :
143 : case FID_INS_COLUMN:
144 0 : pTabViewShell->InsertCells(INS_INSCOLS);
145 0 : rReq.Done();
146 0 : break;
147 :
148 : case FID_INS_CELLSDOWN:
149 0 : pTabViewShell->InsertCells(INS_CELLSDOWN);
150 0 : rReq.Done();
151 0 : break;
152 :
153 : case FID_INS_CELLSRIGHT:
154 0 : pTabViewShell->InsertCells(INS_CELLSRIGHT);
155 0 : rReq.Done();
156 0 : break;
157 :
158 : case SID_DEL_ROWS:
159 0 : pTabViewShell->DeleteCells( DEL_DELROWS );
160 0 : rReq.Done();
161 0 : break;
162 :
163 : case SID_DEL_COLS:
164 0 : pTabViewShell->DeleteCells( DEL_DELCOLS );
165 0 : rReq.Done();
166 0 : break;
167 :
168 : case FID_INS_CELL:
169 : {
170 0 : InsCellCmd eCmd=INS_NONE;
171 :
172 0 : if ( pReqArgs )
173 : {
174 : const SfxPoolItem* pItem;
175 0 : OUString aFlags;
176 :
177 0 : if( pReqArgs->HasItem( FID_INS_CELL, &pItem ) )
178 0 : aFlags = ((const SfxStringItem*)pItem)->GetValue();
179 0 : if( !aFlags.isEmpty() )
180 : {
181 0 : switch( aFlags[0] )
182 : {
183 0 : case 'V': eCmd = INS_CELLSDOWN ;break;
184 0 : case '>': eCmd = INS_CELLSRIGHT ;break;
185 0 : case 'R': eCmd = INS_INSROWS ;break;
186 0 : case 'C': eCmd = INS_INSCOLS ;break;
187 : }
188 0 : }
189 : }
190 : else
191 : {
192 0 : if ( GetViewData()->SimpleColMarked() )
193 0 : eCmd = INS_INSCOLS;
194 0 : else if ( GetViewData()->SimpleRowMarked() )
195 0 : eCmd = INS_INSROWS;
196 : else
197 : {
198 0 : ScDocument* pDoc = GetViewData()->GetDocument();
199 0 : sal_Bool bTheFlag=(pDoc->GetChangeTrack()!=NULL);
200 :
201 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
202 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
203 :
204 0 : AbstractScInsertCellDlg* pDlg = pFact->CreateScInsertCellDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_INSCELL, bTheFlag);
205 : OSL_ENSURE(pDlg, "Dialog create fail!");
206 0 : if (pDlg->Execute() == RET_OK)
207 0 : eCmd = pDlg->GetInsCellCmd();
208 0 : delete pDlg;
209 : }
210 : }
211 :
212 0 : if (eCmd!=INS_NONE)
213 : {
214 0 : pTabViewShell->InsertCells( eCmd );
215 :
216 0 : if( ! rReq.IsAPI() )
217 : {
218 0 : OUString aParam;
219 :
220 0 : switch( eCmd )
221 : {
222 0 : case INS_CELLSDOWN: aParam = "V"; break;
223 0 : case INS_CELLSRIGHT: aParam = ">"; break;
224 0 : case INS_INSROWS: aParam = "R"; break;
225 0 : case INS_INSCOLS: aParam = "C"; break;
226 : default:
227 : {
228 : // added to avoid warnings
229 : }
230 : }
231 0 : rReq.AppendItem( SfxStringItem( FID_INS_CELL, aParam ) );
232 0 : rReq.Done();
233 : }
234 : }
235 : }
236 0 : break;
237 :
238 : case FID_DELETE_CELL:
239 : {
240 0 : DelCellCmd eCmd = DEL_NONE;
241 :
242 0 : if ( pReqArgs )
243 : {
244 : const SfxPoolItem* pItem;
245 0 : OUString aFlags;
246 :
247 0 : if( pReqArgs->HasItem( FID_DELETE_CELL, &pItem ) )
248 0 : aFlags = ((const SfxStringItem*)pItem)->GetValue();
249 0 : if( !aFlags.isEmpty() )
250 : {
251 0 : switch( aFlags[0] )
252 : {
253 0 : case 'U': eCmd = DEL_CELLSUP ;break;
254 0 : case 'L': eCmd = DEL_CELLSLEFT ;break;
255 0 : case 'R': eCmd = DEL_DELROWS ;break;
256 0 : case 'C': eCmd = DEL_DELCOLS ;break;
257 : }
258 0 : }
259 : }
260 : else
261 : {
262 0 : if ( GetViewData()->SimpleColMarked() )
263 0 : eCmd = DEL_DELCOLS;
264 0 : else if ( GetViewData()->SimpleRowMarked() )
265 0 : eCmd = DEL_DELROWS;
266 : else
267 : {
268 0 : ScRange aRange;
269 0 : ScDocument* pDoc = GetViewData()->GetDocument();
270 0 : bool bTheFlag=GetViewData()->IsMultiMarked() ||
271 0 : (GetViewData()->GetSimpleArea(aRange) == SC_MARK_SIMPLE_FILTERED) ||
272 0 : (pDoc->GetChangeTrack() != NULL);
273 :
274 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
275 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
276 :
277 0 : AbstractScDeleteCellDlg* pDlg = pFact->CreateScDeleteCellDlg( pTabViewShell->GetDialogParent(), bTheFlag );
278 : OSL_ENSURE(pDlg, "Dialog create fail!");
279 :
280 0 : if (pDlg->Execute() == RET_OK)
281 0 : eCmd = pDlg->GetDelCellCmd();
282 0 : delete pDlg;
283 : }
284 : }
285 :
286 0 : if (eCmd != DEL_NONE )
287 : {
288 0 : pTabViewShell->DeleteCells( eCmd );
289 :
290 0 : if( ! rReq.IsAPI() )
291 : {
292 0 : OUString aParam;
293 :
294 0 : switch( eCmd )
295 : {
296 0 : case DEL_CELLSUP: aParam = "U"; break;
297 0 : case DEL_CELLSLEFT: aParam = "L"; break;
298 0 : case DEL_DELROWS: aParam = "R"; break;
299 0 : case DEL_DELCOLS: aParam = "C"; break;
300 : default:
301 : {
302 : // added to avoid warnings
303 : }
304 : }
305 0 : rReq.AppendItem( SfxStringItem( FID_DELETE_CELL, aParam ) );
306 0 : rReq.Done();
307 : }
308 : }
309 : }
310 0 : break;
311 :
312 :
313 : // delete contents from cells
314 :
315 :
316 : case SID_DELETE_CONTENTS:
317 0 : pTabViewShell->DeleteContents( IDF_CONTENTS );
318 0 : rReq.Done();
319 0 : break;
320 :
321 : case SID_DELETE:
322 : {
323 0 : sal_uInt16 nFlags = IDF_NONE;
324 :
325 0 : if ( pReqArgs!=NULL && pTabViewShell->SelectionEditable() )
326 : {
327 : const SfxPoolItem* pItem;
328 0 : OUString aFlags('A');
329 :
330 0 : if( pReqArgs->HasItem( SID_DELETE, &pItem ) )
331 0 : aFlags = ((const SfxStringItem*)pItem)->GetValue();
332 :
333 0 : aFlags = aFlags.toAsciiUpperCase();
334 0 : sal_Bool bCont = sal_True;
335 :
336 0 : for (sal_Int32 i=0 ; bCont && i<aFlags.getLength(); ++i)
337 : {
338 0 : switch (aFlags[i])
339 : {
340 : case 'A': // all
341 0 : nFlags |= IDF_ALL;
342 0 : bCont = false; // don't continue!
343 0 : break;
344 0 : case 'S': nFlags |= IDF_STRING; break;
345 0 : case 'V': nFlags |= IDF_VALUE; break;
346 0 : case 'D': nFlags |= IDF_DATETIME; break;
347 0 : case 'F': nFlags |= IDF_FORMULA; break;
348 0 : case 'N': nFlags |= IDF_NOTE; break;
349 0 : case 'T': nFlags |= IDF_ATTRIB; break;
350 0 : case 'O': nFlags |= IDF_OBJECTS; break;
351 : }
352 0 : }
353 : }
354 : else
355 : {
356 0 : ScEditableTester aTester( pTabViewShell );
357 0 : if (aTester.IsEditable())
358 : {
359 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
360 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
361 :
362 0 : AbstractScDeleteContentsDlg* pDlg = pFact->CreateScDeleteContentsDlg(pTabViewShell->GetDialogParent());
363 : OSL_ENSURE(pDlg, "Dialog create fail!");
364 0 : ScDocument* pDoc = GetViewData()->GetDocument();
365 0 : SCTAB nTab = GetViewData()->GetTabNo();
366 0 : if ( pDoc->IsTabProtected(nTab) )
367 0 : pDlg->DisableObjects();
368 0 : if (pDlg->Execute() == RET_OK)
369 : {
370 0 : nFlags = pDlg->GetDelContentsCmdBits();
371 : }
372 0 : delete pDlg;
373 : }
374 : else
375 0 : pTabViewShell->ErrorMessage(aTester.GetMessageId());
376 : }
377 :
378 0 : if( nFlags != IDF_NONE )
379 : {
380 0 : pTabViewShell->DeleteContents( nFlags );
381 :
382 0 : if( ! rReq.IsAPI() )
383 : {
384 0 : OUString aFlags;
385 :
386 0 : if( nFlags == IDF_ALL )
387 : {
388 0 : aFlags += "A";
389 : }
390 : else
391 : {
392 0 : if( nFlags & IDF_STRING ) aFlags += "S";
393 0 : if( nFlags & IDF_VALUE ) aFlags += "V";
394 0 : if( nFlags & IDF_DATETIME ) aFlags += "D";
395 0 : if( nFlags & IDF_FORMULA ) aFlags += "F";
396 0 : if( nFlags & IDF_NOTE ) aFlags += "N";
397 0 : if( nFlags & IDF_ATTRIB ) aFlags += "T";
398 0 : if( nFlags & IDF_OBJECTS ) aFlags += "O";
399 : }
400 :
401 0 : rReq.AppendItem( SfxStringItem( SID_DELETE, aFlags ) );
402 0 : rReq.Done();
403 : }
404 : }
405 : }
406 0 : break;
407 :
408 :
409 : // fill...
410 :
411 :
412 : case FID_FILL_TO_BOTTOM:
413 0 : pTabViewShell->FillSimple( FILL_TO_BOTTOM );
414 0 : rReq.Done();
415 0 : break;
416 :
417 : case FID_FILL_TO_RIGHT:
418 0 : pTabViewShell->FillSimple( FILL_TO_RIGHT );
419 0 : rReq.Done();
420 0 : break;
421 :
422 : case FID_FILL_TO_TOP:
423 0 : pTabViewShell->FillSimple( FILL_TO_TOP );
424 0 : rReq.Done();
425 0 : break;
426 :
427 : case FID_FILL_TO_LEFT:
428 0 : pTabViewShell->FillSimple( FILL_TO_LEFT );
429 0 : rReq.Done();
430 0 : break;
431 :
432 : case FID_FILL_TAB:
433 : {
434 0 : sal_uInt16 nFlags = IDF_NONE;
435 0 : sal_uInt16 nFunction = PASTE_NOFUNC;
436 0 : sal_Bool bSkipEmpty = false;
437 0 : sal_Bool bAsLink = false;
438 :
439 0 : if ( pReqArgs!=NULL && pTabViewShell->SelectionEditable() )
440 : {
441 : const SfxPoolItem* pItem;
442 0 : OUString aFlags('A');
443 :
444 0 : if( pReqArgs->HasItem( FID_FILL_TAB, &pItem ) )
445 0 : aFlags = ((const SfxStringItem*)pItem)->GetValue();
446 :
447 0 : aFlags = aFlags.toAsciiUpperCase();
448 0 : sal_Bool bCont = sal_True;
449 :
450 0 : for (sal_Int32 i=0; bCont && i < aFlags.getLength(); ++i)
451 : {
452 0 : switch (aFlags[i])
453 : {
454 : case 'A': // all
455 0 : nFlags |= IDF_ALL;
456 0 : bCont = false; // don't continue!
457 0 : break;
458 0 : case 'S': nFlags |= IDF_STRING; break;
459 0 : case 'V': nFlags |= IDF_VALUE; break;
460 0 : case 'D': nFlags |= IDF_DATETIME; break;
461 0 : case 'F': nFlags |= IDF_FORMULA; break;
462 0 : case 'N': nFlags |= IDF_NOTE; break;
463 0 : case 'T': nFlags |= IDF_ATTRIB; break;
464 : }
465 0 : }
466 : }
467 : else
468 : {
469 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
470 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
471 :
472 : AbstractScInsertContentsDlg* pDlg = pFact->CreateScInsertContentsDlg( pTabViewShell->GetDialogParent(),
473 : 0, /* nCheckDefaults */
474 0 : &ScGlobal::GetRscString(STR_FILL_TAB));
475 : OSL_ENSURE(pDlg, "Dialog create fail!");
476 0 : pDlg->SetFillMode(true);
477 :
478 0 : if (pDlg->Execute() == RET_OK)
479 : {
480 0 : nFlags = pDlg->GetInsContentsCmdBits();
481 0 : nFunction = pDlg->GetFormulaCmdBits();
482 0 : bSkipEmpty = pDlg->IsSkipEmptyCells();
483 0 : bAsLink = pDlg->IsLink();
484 : // there is no MoveMode with fill tabs
485 : }
486 0 : delete pDlg;
487 : }
488 :
489 0 : if( nFlags != IDF_NONE )
490 : {
491 0 : pTabViewShell->FillTab( nFlags, nFunction, bSkipEmpty, bAsLink );
492 :
493 0 : if( ! rReq.IsAPI() )
494 : {
495 0 : OUString aFlags;
496 :
497 0 : if( nFlags == IDF_ALL )
498 : {
499 0 : aFlags += "A";
500 : }
501 : else
502 : {
503 0 : if( nFlags & IDF_STRING ) aFlags += "S";
504 0 : if( nFlags & IDF_VALUE ) aFlags += "V";
505 0 : if( nFlags & IDF_DATETIME ) aFlags += "D";
506 0 : if( nFlags & IDF_FORMULA ) aFlags += "F";
507 0 : if( nFlags & IDF_NOTE ) aFlags += "N";
508 0 : if( nFlags & IDF_ATTRIB ) aFlags += "T";
509 : }
510 :
511 0 : rReq.AppendItem( SfxStringItem( FID_FILL_TAB, aFlags ) );
512 0 : rReq.Done();
513 : }
514 : }
515 : }
516 0 : break;
517 :
518 : case FID_FILL_SERIES:
519 : {
520 : SCCOL nStartCol;
521 : SCROW nStartRow;
522 : SCTAB nStartTab;
523 : SCCOL nEndCol;
524 : SCROW nEndRow;
525 : SCTAB nEndTab;
526 0 : sal_uInt16 nPossDir = FDS_OPT_NONE;
527 0 : FillDir eFillDir = FILL_TO_BOTTOM;
528 0 : FillCmd eFillCmd = FILL_LINEAR;
529 0 : FillDateCmd eFillDateCmd = FILL_DAY;
530 0 : double fStartVal = MAXDOUBLE;
531 0 : double fIncVal = 1;
532 0 : double fMaxVal = MAXDOUBLE;
533 0 : sal_Bool bDoIt = false;
534 :
535 : GetViewData()->GetSimpleArea( nStartCol, nStartRow, nStartTab,
536 0 : nEndCol, nEndRow, nEndTab );
537 :
538 0 : if( nStartCol!=nEndCol )
539 : {
540 0 : nPossDir |= FDS_OPT_HORZ;
541 0 : eFillDir=FILL_TO_RIGHT;
542 : }
543 :
544 0 : if( nStartRow!=nEndRow )
545 : {
546 0 : nPossDir |= FDS_OPT_VERT;
547 0 : eFillDir=FILL_TO_BOTTOM;
548 : }
549 :
550 0 : ScDocument* pDoc = GetViewData()->GetDocument();
551 0 : SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
552 :
553 0 : if( pReqArgs )
554 : {
555 : const SfxPoolItem* pItem;
556 0 : OUString aFillDir, aFillCmd, aFillDateCmd;
557 0 : OUString aFillStep, aFillStart, aFillMax;
558 : sal_uInt32 nKey;
559 : double fTmpVal;
560 :
561 0 : bDoIt=false;
562 :
563 0 : if( pReqArgs->HasItem( FID_FILL_SERIES, &pItem ) )
564 0 : aFillDir = ((const SfxStringItem*)pItem)->GetValue();
565 0 : if( pReqArgs->HasItem( FN_PARAM_1, &pItem ) )
566 0 : aFillCmd = ((const SfxStringItem*)pItem)->GetValue();
567 0 : if( pReqArgs->HasItem( FN_PARAM_2, &pItem ) )
568 0 : aFillDateCmd = ((const SfxStringItem*)pItem)->GetValue();
569 0 : if( pReqArgs->HasItem( FN_PARAM_3, &pItem ) )
570 0 : aFillStep = ((const SfxStringItem*)pItem)->GetValue();
571 0 : if( pReqArgs->HasItem( FN_PARAM_4, &pItem ) )
572 0 : aFillStart = ((const SfxStringItem*)pItem)->GetValue();
573 0 : if( pReqArgs->HasItem( FN_PARAM_5, &pItem ) )
574 0 : aFillMax = ((const SfxStringItem*)pItem)->GetValue();
575 :
576 0 : if( !aFillDir.isEmpty() )
577 0 : switch( aFillDir[0] )
578 : {
579 0 : case 'B': case 'b': eFillDir=FILL_TO_BOTTOM; break;
580 0 : case 'R': case 'r': eFillDir=FILL_TO_RIGHT; break;
581 0 : case 'T': case 't': eFillDir=FILL_TO_TOP; break;
582 0 : case 'L': case 'l': eFillDir=FILL_TO_LEFT; break;
583 : }
584 :
585 0 : if( !aFillCmd.isEmpty() )
586 0 : switch( aFillCmd[0] )
587 : {
588 0 : case 'S': case 's': eFillCmd=FILL_SIMPLE; break;
589 0 : case 'L': case 'l': eFillCmd=FILL_LINEAR; break;
590 0 : case 'G': case 'g': eFillCmd=FILL_GROWTH; break;
591 0 : case 'D': case 'd': eFillCmd=FILL_DATE; break;
592 0 : case 'A': case 'a': eFillCmd=FILL_AUTO; break;
593 : }
594 :
595 0 : if( !aFillDateCmd.isEmpty() )
596 0 : switch( aFillDateCmd[0] )
597 : {
598 0 : case 'D': case 'd': eFillDateCmd=FILL_DAY; break;
599 0 : case 'W': case 'w': eFillDateCmd=FILL_WEEKDAY; break;
600 0 : case 'M': case 'm': eFillDateCmd=FILL_MONTH; break;
601 0 : case 'Y': case 'y': eFillDateCmd=FILL_YEAR; break;
602 : }
603 :
604 0 : nKey = 0;
605 0 : if( pFormatter->IsNumberFormat( aFillStart, nKey, fTmpVal ))
606 0 : fStartVal = fTmpVal;
607 :
608 0 : nKey = 0;
609 0 : if( pFormatter->IsNumberFormat( aFillStep, nKey, fTmpVal ))
610 0 : fIncVal = fTmpVal;
611 :
612 0 : nKey = 0;
613 0 : if( pFormatter->IsNumberFormat( aFillMax, nKey, fTmpVal ))
614 0 : fMaxVal = fTmpVal;
615 :
616 0 : bDoIt = sal_True;
617 :
618 : }
619 : else // (pReqArgs == NULL) => raise Dialog
620 : {
621 : sal_uInt32 nPrivFormat;
622 : CellType eCellType;
623 0 : pDoc->GetNumberFormat( nStartCol, nStartRow, nStartTab, nPrivFormat );
624 0 : pDoc->GetCellType( nStartCol, nStartRow, nStartTab,eCellType );
625 0 : const SvNumberformat* pPrivEntry = pFormatter->GetEntry( nPrivFormat );
626 0 : if (!pPrivEntry)
627 : {
628 : OSL_FAIL("Numberformat not found !!!");
629 : }
630 : else
631 : {
632 0 : short nPrivType = pPrivEntry->GetType();
633 0 : if ( ( nPrivType & NUMBERFORMAT_DATE)>0)
634 : {
635 0 : eFillCmd=FILL_DATE;
636 : }
637 0 : else if(eCellType==CELLTYPE_STRING)
638 : {
639 0 : eFillCmd=FILL_AUTO;
640 : }
641 : }
642 :
643 :
644 0 : OUString aStartStr;
645 :
646 : // suggest default Startvalue only, when just 1 row or column
647 0 : if ( nStartCol == nEndCol || nStartRow == nEndRow )
648 : {
649 0 : double fInputEndVal = 0.0;
650 0 : OUString aEndStr;
651 :
652 0 : pDoc->GetInputString( nStartCol, nStartRow, nStartTab, aStartStr);
653 0 : pDoc->GetValue( nStartCol, nStartRow, nStartTab, fStartVal );
654 :
655 :
656 0 : if(eFillDir==FILL_TO_BOTTOM && nStartRow < nEndRow )
657 : {
658 0 : pDoc->GetInputString( nStartCol, nStartRow+1, nStartTab, aEndStr);
659 0 : if(!aEndStr.isEmpty())
660 : {
661 0 : pDoc->GetValue( nStartCol, nStartRow+1, nStartTab, fInputEndVal);
662 0 : fIncVal=fInputEndVal-fStartVal;
663 : }
664 : }
665 : else
666 : {
667 0 : if(nStartCol < nEndCol)
668 : {
669 0 : pDoc->GetInputString( nStartCol+1, nStartRow, nStartTab, aEndStr);
670 0 : if(!aEndStr.isEmpty())
671 : {
672 0 : pDoc->GetValue( nStartCol+1, nStartRow, nStartTab, fInputEndVal);
673 0 : fIncVal=fInputEndVal-fStartVal;
674 : }
675 : }
676 : }
677 0 : if(eFillCmd==FILL_DATE)
678 : {
679 0 : Date aNullDate = *pDoc->GetFormatTable()->GetNullDate();
680 0 : Date aStartDate = aNullDate;
681 0 : aStartDate+= (long)fStartVal;
682 0 : Date aEndDate = aNullDate;
683 0 : aEndDate+= (long)fInputEndVal;
684 0 : double fTempDate=0;
685 :
686 0 : if(aStartDate.GetYear()!=aEndDate.GetYear())
687 : {
688 0 : eFillDateCmd = FILL_YEAR;
689 0 : fTempDate=aEndDate.GetYear()-aStartDate.GetYear();
690 : }
691 0 : if(aStartDate.GetMonth()!=aEndDate.GetMonth())
692 : {
693 0 : eFillDateCmd = FILL_MONTH;
694 0 : fTempDate=fTempDate*12+aEndDate.GetMonth()-aStartDate.GetMonth();
695 : }
696 0 : if(aStartDate.GetDay()==aEndDate.GetDay())
697 : {
698 0 : fIncVal=fTempDate;
699 : }
700 0 : }
701 : }
702 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
703 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
704 :
705 : AbstractScFillSeriesDlg* pDlg = pFact->CreateScFillSeriesDlg( pTabViewShell->GetDialogParent(),
706 : *pDoc,
707 : eFillDir, eFillCmd, eFillDateCmd,
708 : aStartStr, fIncVal, fMaxVal,
709 0 : nPossDir);
710 : OSL_ENSURE(pDlg, "Dialog create fail!");
711 :
712 0 : if ( nStartCol != nEndCol && nStartRow != nEndRow )
713 : {
714 0 : pDlg->SetEdStartValEnabled(false);
715 : }
716 :
717 0 : if ( pDlg->Execute() == RET_OK )
718 : {
719 0 : eFillDir = pDlg->GetFillDir();
720 0 : eFillCmd = pDlg->GetFillCmd();
721 0 : eFillDateCmd = pDlg->GetFillDateCmd();
722 :
723 0 : if(eFillCmd==FILL_AUTO)
724 : {
725 0 : OUString aStr = pDlg->GetStartStr();
726 0 : if(!aStr.isEmpty())
727 0 : pTabViewShell->EnterData( nStartCol, nStartRow, nStartTab, aStr );
728 : }
729 0 : fStartVal = pDlg->GetStart();
730 0 : fIncVal = pDlg->GetStep();
731 0 : fMaxVal = pDlg->GetMax();
732 0 : bDoIt = sal_True;
733 : }
734 0 : delete pDlg;
735 : }
736 :
737 0 : if( bDoIt )
738 : {
739 : //nScFillModeMouseModifier = 0; // no Ctrl/Copy
740 0 : pTabViewShell->FillSeries( eFillDir, eFillCmd, eFillDateCmd, fStartVal, fIncVal, fMaxVal );
741 :
742 0 : if( ! rReq.IsAPI() )
743 : {
744 0 : OUString aPara;
745 0 : Color* pColor=0;
746 :
747 0 : switch( eFillDir )
748 : {
749 0 : case FILL_TO_BOTTOM: aPara = "B"; break;
750 0 : case FILL_TO_RIGHT: aPara = "R"; break;
751 0 : case FILL_TO_TOP: aPara = "T"; break;
752 0 : case FILL_TO_LEFT: aPara = "L"; break;
753 0 : default: break;
754 : }
755 0 : rReq.AppendItem( SfxStringItem( FID_FILL_SERIES, aPara ) );
756 :
757 0 : switch( eFillCmd )
758 : {
759 0 : case FILL_SIMPLE: aPara = "S"; break;
760 0 : case FILL_LINEAR: aPara = "L"; break;
761 0 : case FILL_GROWTH: aPara = "G"; break;
762 0 : case FILL_DATE: aPara = "D"; break;
763 0 : case FILL_AUTO: aPara = "A"; break;
764 0 : default: break;
765 : }
766 0 : rReq.AppendItem( SfxStringItem( FN_PARAM_1, aPara ) );
767 :
768 0 : switch( eFillDateCmd )
769 : {
770 0 : case FILL_DAY: aPara = "D"; break;
771 0 : case FILL_WEEKDAY: aPara = "W"; break;
772 0 : case FILL_MONTH: aPara = "M"; break;
773 0 : case FILL_YEAR: aPara = "Y"; break;
774 0 : default: break;
775 : }
776 0 : rReq.AppendItem( SfxStringItem( FN_PARAM_2, aPara ) );
777 :
778 : sal_uLong nFormatKey = pFormatter->GetStandardFormat(NUMBERFORMAT_NUMBER,
779 0 : ScGlobal::eLnge );
780 :
781 0 : pFormatter->GetOutputString( fIncVal, nFormatKey, aPara, &pColor );
782 0 : rReq.AppendItem( SfxStringItem( FN_PARAM_3, aPara ) );
783 :
784 0 : pFormatter->GetOutputString( fStartVal, nFormatKey, aPara, &pColor );
785 0 : rReq.AppendItem( SfxStringItem( FN_PARAM_4, aPara ) );
786 :
787 0 : pFormatter->GetOutputString( fMaxVal, nFormatKey, aPara, &pColor );
788 0 : rReq.AppendItem( SfxStringItem( FN_PARAM_5, aPara ) );
789 :
790 0 : rReq.Done();
791 : }
792 : }
793 : }
794 0 : break;
795 :
796 : case FID_FILL_AUTO:
797 : {
798 : SCCOL nStartCol;
799 : SCROW nStartRow;
800 : SCCOL nEndCol;
801 : SCROW nEndRow;
802 : SCTAB nStartTab, nEndTab;
803 :
804 0 : GetViewData()->GetFillData( nStartCol, nStartRow, nEndCol, nEndRow );
805 0 : SCCOL nFillCol = GetViewData()->GetRefEndX();
806 0 : SCROW nFillRow = GetViewData()->GetRefEndY();
807 0 : ScDocument* pDoc = GetViewData()->GetDocument();
808 :
809 0 : if( pReqArgs != NULL )
810 : {
811 : const SfxPoolItem* pItem;
812 :
813 0 : if( pReqArgs->HasItem( FID_FILL_AUTO, &pItem ) )
814 : {
815 0 : ScAddress aScAddress;
816 0 : OUString aArg = ((const SfxStringItem*)pItem)->GetValue();
817 :
818 0 : if( aScAddress.Parse( aArg, pDoc, pDoc->GetAddressConvention() ) & SCA_VALID )
819 : {
820 0 : nFillRow = aScAddress.Row();
821 0 : nFillCol = aScAddress.Col();
822 0 : }
823 : }
824 :
825 : GetViewData()->GetSimpleArea( nStartCol,nStartRow,nStartTab,
826 0 : nEndCol,nEndRow,nEndTab );
827 : }
828 : else // call via mouse
829 : {
830 : // not in a merged cell
831 :
832 0 : if ( nStartCol == nEndCol && nStartRow == nEndRow )
833 : {
834 0 : SCCOL nMergeCol = nStartCol;
835 0 : SCROW nMergeRow = nStartRow;
836 0 : if ( GetViewData()->GetDocument()->ExtendMerge(
837 : nStartCol, nStartRow, nMergeCol, nMergeRow,
838 0 : GetViewData()->GetTabNo() ) )
839 : {
840 0 : if ( nFillCol >= nStartCol && nFillCol <= nMergeCol && nFillRow == nStartRow )
841 0 : nFillCol = nStartCol;
842 0 : if ( nFillRow >= nStartRow && nFillRow <= nMergeRow && nFillCol == nStartCol )
843 0 : nFillRow = nStartRow;
844 : }
845 : }
846 : }
847 :
848 0 : if ( nFillCol != nEndCol || nFillRow != nEndRow )
849 : {
850 0 : if ( nFillCol==nEndCol || nFillRow==nEndRow )
851 : {
852 0 : FillDir eDir = FILL_TO_BOTTOM;
853 0 : SCCOLROW nCount = 0;
854 :
855 0 : if ( nFillCol==nEndCol )
856 : {
857 0 : if ( nFillRow > nEndRow )
858 : {
859 0 : eDir = FILL_TO_BOTTOM;
860 0 : nCount = nFillRow - nEndRow;
861 : }
862 0 : else if ( nFillRow < nStartRow )
863 : {
864 0 : eDir = FILL_TO_TOP;
865 0 : nCount = nStartRow - nFillRow;
866 : }
867 : }
868 : else
869 : {
870 0 : if ( nFillCol > nEndCol )
871 : {
872 0 : eDir = FILL_TO_RIGHT;
873 0 : nCount = nFillCol - nEndCol;
874 : }
875 0 : else if ( nFillCol < nStartCol )
876 : {
877 0 : eDir = FILL_TO_LEFT;
878 0 : nCount = nStartCol - nFillCol;
879 : }
880 : }
881 :
882 0 : if ( nCount != 0)
883 : {
884 0 : pTabViewShell->FillAuto( eDir, nStartCol, nStartRow, nEndCol, nEndRow, nCount );
885 :
886 0 : if( ! rReq.IsAPI() )
887 : {
888 0 : ScAddress aAdr( nFillCol, nFillRow, 0 );
889 0 : OUString aAdrStr(aAdr.Format(SCR_ABS, pDoc, pDoc->GetAddressConvention()));
890 :
891 0 : rReq.AppendItem( SfxStringItem( FID_FILL_AUTO, aAdrStr ) );
892 0 : rReq.Done();
893 : }
894 : }
895 :
896 : }
897 : else
898 : {
899 : OSL_FAIL( "Direction not unique for autofill" );
900 : }
901 : }
902 : }
903 0 : break;
904 : case SID_RANDOM_NUMBER_GENERATOR_DIALOG:
905 : {
906 0 : sal_uInt16 nId = ScRandomNumberGeneratorDialogWrapper::GetChildWindowId();
907 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
908 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
909 :
910 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
911 :
912 : }
913 0 : break;
914 : case SID_SAMPLING_DIALOG:
915 : {
916 0 : sal_uInt16 nId = ScSamplingDialogWrapper::GetChildWindowId();
917 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
918 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
919 :
920 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
921 : }
922 0 : break;
923 : case SID_DESCRIPTIVE_STATISTICS_DIALOG:
924 : {
925 0 : sal_uInt16 nId = ScDescriptiveStatisticsDialogWrapper::GetChildWindowId();
926 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
927 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
928 :
929 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
930 : }
931 0 : break;
932 : case SID_ANALYSIS_OF_VARIANCE_DIALOG:
933 : {
934 0 : sal_uInt16 nId = ScAnalysisOfVarianceDialogWrapper::GetChildWindowId();
935 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
936 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
937 :
938 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
939 : }
940 0 : break;
941 : case SID_CORRELATION_DIALOG:
942 : {
943 0 : sal_uInt16 nId = ScCorrelationDialogWrapper::GetChildWindowId();
944 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
945 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
946 :
947 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
948 : }
949 0 : break;
950 : case SID_COVARIANCE_DIALOG:
951 : {
952 0 : sal_uInt16 nId = ScCovarianceDialogWrapper::GetChildWindowId();
953 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
954 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
955 :
956 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
957 : }
958 0 : break;
959 : case SID_EXPONENTIAL_SMOOTHING_DIALOG:
960 : {
961 0 : sal_uInt16 nId = ScExponentialSmoothingDialogWrapper::GetChildWindowId();
962 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
963 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
964 :
965 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
966 : }
967 0 : break;
968 : case SID_MOVING_AVERAGE_DIALOG:
969 : {
970 0 : sal_uInt16 nId = ScMovingAverageDialogWrapper::GetChildWindowId();
971 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
972 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
973 :
974 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
975 : }
976 0 : break;
977 : case SID_TTEST_DIALOG:
978 : {
979 0 : sal_uInt16 nId = ScTTestDialogWrapper::GetChildWindowId();
980 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
981 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
982 :
983 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
984 :
985 : }
986 0 : break;
987 :
988 :
989 : // disposal (Outlines)
990 : // SID_AUTO_OUTLINE, SID_OUTLINE_DELETEALL in Execute (in docsh.idl)
991 :
992 :
993 : case SID_OUTLINE_HIDE:
994 0 : if ( GetViewData()->GetDocument()->GetDPAtCursor( GetViewData()->GetCurX(),
995 0 : GetViewData()->GetCurY(), GetViewData()->GetTabNo() ) )
996 0 : pTabViewShell->SetDataPilotDetails( false );
997 : else
998 0 : pTabViewShell->HideMarkedOutlines();
999 0 : rReq.Done();
1000 0 : break;
1001 :
1002 : case SID_OUTLINE_SHOW:
1003 : {
1004 0 : ScDPObject* pDPObj = GetViewData()->GetDocument()->GetDPAtCursor( GetViewData()->GetCurX(),
1005 0 : GetViewData()->GetCurY(), GetViewData()->GetTabNo() );
1006 0 : if ( pDPObj )
1007 : {
1008 0 : Sequence<sheet::DataPilotFieldFilter> aFilters;
1009 : sal_uInt16 nOrientation;
1010 0 : if ( pTabViewShell->HasSelectionForDrillDown( nOrientation ) )
1011 : {
1012 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1013 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
1014 :
1015 : AbstractScDPShowDetailDlg* pDlg = pFact->CreateScDPShowDetailDlg(
1016 0 : pTabViewShell->GetDialogParent(), RID_SCDLG_DPSHOWDETAIL, *pDPObj, nOrientation );
1017 : OSL_ENSURE(pDlg, "Dialog create fail!");
1018 0 : if ( pDlg->Execute() == RET_OK )
1019 : {
1020 0 : OUString aNewDimName( pDlg->GetDimensionName() );
1021 0 : pTabViewShell->SetDataPilotDetails( true, &aNewDimName );
1022 : }
1023 : }
1024 0 : else if ( !pDPObj->IsServiceData() &&
1025 : pDPObj->GetDataFieldPositionData(
1026 0 : ScAddress( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ),
1027 0 : aFilters ) )
1028 0 : pTabViewShell->ShowDataPilotSourceData( *pDPObj, aFilters );
1029 : else
1030 0 : pTabViewShell->SetDataPilotDetails(true);
1031 : }
1032 : else
1033 0 : pTabViewShell->ShowMarkedOutlines();
1034 0 : rReq.Done();
1035 : }
1036 0 : break;
1037 :
1038 : case SID_OUTLINE_MAKE:
1039 : {
1040 0 : sal_Bool bColumns = false;
1041 0 : sal_Bool bOk = sal_True;
1042 :
1043 0 : if ( GetViewData()->GetDocument()->GetDPAtCursor( GetViewData()->GetCurX(),
1044 0 : GetViewData()->GetCurY(), GetViewData()->GetTabNo() ) )
1045 : {
1046 0 : ScDPNumGroupInfo aNumInfo;
1047 0 : aNumInfo.mbEnable = true;
1048 0 : aNumInfo.mbAutoStart = true;
1049 0 : aNumInfo.mbAutoEnd = true;
1050 0 : sal_Int32 nParts = 0;
1051 0 : if ( pTabViewShell->HasSelectionForDateGroup( aNumInfo, nParts ) )
1052 : {
1053 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1054 : OSL_ENSURE( pFact, "ScAbstractFactory create fail!" );
1055 0 : Date aNullDate( *GetViewData()->GetDocument()->GetFormatTable()->GetNullDate() );
1056 : AbstractScDPDateGroupDlg* pDlg = pFact->CreateScDPDateGroupDlg(
1057 : pTabViewShell->GetDialogParent(), RID_SCDLG_DPDATEGROUP,
1058 0 : aNumInfo, nParts, aNullDate );
1059 : OSL_ENSURE( pDlg, "Dialog create fail!" );
1060 0 : if( pDlg->Execute() == RET_OK )
1061 : {
1062 0 : aNumInfo = pDlg->GetGroupInfo();
1063 0 : pTabViewShell->DateGroupDataPilot( aNumInfo, pDlg->GetDatePart() );
1064 : }
1065 : }
1066 0 : else if ( pTabViewShell->HasSelectionForNumGroup( aNumInfo ) )
1067 : {
1068 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1069 : OSL_ENSURE( pFact, "ScAbstractFactory create fail!" );
1070 : AbstractScDPNumGroupDlg* pDlg = pFact->CreateScDPNumGroupDlg(
1071 0 : pTabViewShell->GetDialogParent(), RID_SCDLG_DPNUMGROUP, aNumInfo );
1072 : OSL_ENSURE( pDlg, "Dialog create fail!" );
1073 0 : if( pDlg->Execute() == RET_OK )
1074 0 : pTabViewShell->NumGroupDataPilot( pDlg->GetGroupInfo() );
1075 : }
1076 : else
1077 0 : pTabViewShell->GroupDataPilot();
1078 :
1079 0 : bOk = false;
1080 : }
1081 0 : else if( pReqArgs != NULL )
1082 : {
1083 : const SfxPoolItem* pItem;
1084 0 : bOk = false;
1085 :
1086 0 : if( pReqArgs->HasItem( SID_OUTLINE_MAKE, &pItem ) )
1087 : {
1088 0 : OUString aCol = ((const SfxStringItem*)pItem)->GetValue();
1089 0 : aCol = aCol.toAsciiUpperCase();
1090 :
1091 0 : switch( aCol[0] )
1092 : {
1093 0 : case 'R': bColumns=false; bOk = true;break;
1094 0 : case 'C': bColumns=true; bOk = true;break;
1095 0 : }
1096 : }
1097 : }
1098 : else // Dialog, when not whole rows/columns are marked
1099 : {
1100 0 : if ( GetViewData()->SimpleColMarked() && !GetViewData()->SimpleRowMarked() )
1101 0 : bColumns = sal_True;
1102 0 : else if ( !GetViewData()->SimpleColMarked() && GetViewData()->SimpleRowMarked() )
1103 0 : bColumns = false;
1104 : else
1105 : {
1106 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1107 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
1108 :
1109 0 : AbstractScGroupDlg* pDlg = pFact->CreateAbstractScGroupDlg(pTabViewShell->GetDialogParent(), false);
1110 : OSL_ENSURE(pDlg, "Dialog create fail!");
1111 0 : if ( pDlg->Execute() == RET_OK )
1112 0 : bColumns = pDlg->GetColsChecked();
1113 : else
1114 0 : bOk = false;
1115 0 : delete pDlg;
1116 : }
1117 : }
1118 0 : if (bOk)
1119 : {
1120 0 : pTabViewShell->MakeOutline( bColumns );
1121 :
1122 0 : if( ! rReq.IsAPI() )
1123 : {
1124 0 : OUString aCol = bColumns ? OUString('C') : OUString('R');
1125 0 : rReq.AppendItem( SfxStringItem( SID_OUTLINE_MAKE, aCol ) );
1126 0 : rReq.Done();
1127 : }
1128 : }
1129 : }
1130 0 : break;
1131 :
1132 : case SID_OUTLINE_REMOVE:
1133 : {
1134 0 : sal_Bool bColumns = false;
1135 0 : sal_Bool bOk = sal_True;
1136 :
1137 0 : if ( GetViewData()->GetDocument()->GetDPAtCursor( GetViewData()->GetCurX(),
1138 0 : GetViewData()->GetCurY(), GetViewData()->GetTabNo() ) )
1139 : {
1140 0 : pTabViewShell->UngroupDataPilot();
1141 0 : bOk = false;
1142 : }
1143 0 : else if( pReqArgs != NULL )
1144 : {
1145 : const SfxPoolItem* pItem;
1146 0 : bOk = false;
1147 :
1148 0 : if( pReqArgs->HasItem( SID_OUTLINE_REMOVE, &pItem ) )
1149 : {
1150 0 : OUString aCol = ((const SfxStringItem*)pItem)->GetValue();
1151 0 : aCol = aCol.toAsciiUpperCase();
1152 :
1153 0 : switch (aCol[0])
1154 : {
1155 0 : case 'R': bColumns=false; bOk = true;break;
1156 0 : case 'C': bColumns=true; bOk = true;break;
1157 0 : }
1158 : }
1159 : }
1160 : else // Dialog only when removal for rows and columns is possible
1161 : {
1162 : bool bColPoss, bRowPoss;
1163 0 : pTabViewShell->TestRemoveOutline( bColPoss, bRowPoss );
1164 0 : if ( bColPoss && bRowPoss )
1165 : {
1166 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1167 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
1168 :
1169 0 : AbstractScGroupDlg* pDlg = pFact->CreateAbstractScGroupDlg(pTabViewShell->GetDialogParent(), true);
1170 : OSL_ENSURE(pDlg, "Dialog create fail!");
1171 0 : if ( pDlg->Execute() == RET_OK )
1172 0 : bColumns = pDlg->GetColsChecked();
1173 : else
1174 0 : bOk = false;
1175 0 : delete pDlg;
1176 : }
1177 0 : else if ( bColPoss )
1178 0 : bColumns = sal_True;
1179 0 : else if ( bRowPoss )
1180 0 : bColumns = false;
1181 : else
1182 0 : bOk = false;
1183 : }
1184 0 : if (bOk)
1185 : {
1186 0 : pTabViewShell->RemoveOutline( bColumns );
1187 :
1188 0 : if( ! rReq.IsAPI() )
1189 : {
1190 0 : OUString aCol = bColumns ? OUString('C') : OUString('R');
1191 0 : rReq.AppendItem( SfxStringItem( SID_OUTLINE_REMOVE, aCol ) );
1192 0 : rReq.Done();
1193 : }
1194 : }
1195 : }
1196 0 : break;
1197 :
1198 :
1199 : // Clipboard
1200 :
1201 : case SID_COPY: // for graphs in DrawShell
1202 : {
1203 0 : WaitObject aWait( GetViewData()->GetDialogParent() );
1204 0 : pTabViewShell->CopyToClip( NULL, false, false, true );
1205 0 : rReq.Done();
1206 0 : GetViewData()->SetPasteMode( (ScPasteFlags) (SC_PASTE_MODE | SC_PASTE_BORDER) );
1207 0 : pTabViewShell->ShowCursor();
1208 0 : pTabViewShell->UpdateCopySourceOverlay();
1209 : }
1210 0 : break;
1211 :
1212 : case SID_CUT: // for graphs in DrawShell
1213 : {
1214 0 : WaitObject aWait( GetViewData()->GetDialogParent() );
1215 0 : pTabViewShell->CutToClip( NULL, true );
1216 0 : rReq.Done();
1217 0 : GetViewData()->SetPasteMode( (ScPasteFlags)(SC_PASTE_MODE | SC_PASTE_BORDER));
1218 0 : pTabViewShell->ShowCursor();
1219 0 : pTabViewShell->UpdateCopySourceOverlay();
1220 : }
1221 0 : break;
1222 :
1223 : case SID_PASTE:
1224 : {
1225 0 : ScClipUtil::PasteFromClipboard ( GetViewData(), pTabViewShell, true );
1226 0 : rReq.Done();
1227 : }
1228 0 : break;
1229 :
1230 : case SID_CLIPBOARD_FORMAT_ITEMS:
1231 : {
1232 0 : WaitObject aWait( GetViewData()->GetDialogParent() );
1233 :
1234 0 : sal_uLong nFormat = 0;
1235 : const SfxPoolItem* pItem;
1236 0 : if ( pReqArgs &&
1237 0 : pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET &&
1238 0 : pItem->ISA(SfxUInt32Item) )
1239 : {
1240 0 : nFormat = ((const SfxUInt32Item*)pItem)->GetValue();
1241 : }
1242 :
1243 0 : if ( nFormat )
1244 : {
1245 0 : Window* pWin = GetViewData()->GetActiveWin();
1246 0 : sal_Bool bCells = ( ScTransferObj::GetOwnClipboard( pWin ) != NULL );
1247 0 : sal_Bool bDraw = ( ScDrawTransferObj::GetOwnClipboard( pWin ) != NULL );
1248 0 : sal_Bool bOle = ( nFormat == SOT_FORMATSTR_ID_EMBED_SOURCE );
1249 :
1250 0 : if ( bCells && bOle )
1251 0 : pTabViewShell->PasteFromSystem();
1252 0 : else if ( bDraw && bOle )
1253 0 : pTabViewShell->PasteDraw();
1254 : else
1255 0 : pTabViewShell->PasteFromSystem(nFormat);
1256 : }
1257 : //?else
1258 : //? pTabViewShell->PasteFromSystem();
1259 :
1260 0 : rReq.Done();
1261 : }
1262 0 : pTabViewShell->CellContentChanged();
1263 0 : break;
1264 :
1265 : case FID_INS_CELL_CONTENTS:
1266 : {
1267 0 : sal_uInt16 nFlags = IDF_NONE;
1268 0 : sal_uInt16 nFunction = PASTE_NOFUNC;
1269 0 : sal_Bool bSkipEmpty = false;
1270 0 : sal_Bool bTranspose = false;
1271 0 : sal_Bool bAsLink = false;
1272 0 : InsCellCmd eMoveMode = INS_NONE;
1273 :
1274 0 : Window* pWin = GetViewData()->GetActiveWin();
1275 0 : ScDocument* pDoc = GetViewData()->GetDocument();
1276 0 : sal_Bool bOtherDoc = !pDoc->IsClipboardSource();
1277 0 : ScTransferObj* pOwnClip = ScTransferObj::GetOwnClipboard( pWin );
1278 0 : if ( pOwnClip )
1279 : {
1280 : // keep a reference in case the clipboard is changed during dialog or PasteFromClip
1281 0 : uno::Reference<datatransfer::XTransferable> aOwnClipRef( pOwnClip );
1282 0 : if ( pReqArgs!=NULL && pTabViewShell->SelectionEditable() )
1283 : {
1284 : const SfxPoolItem* pItem;
1285 0 : OUString aFlags('A');
1286 :
1287 0 : if( pReqArgs->HasItem( FID_INS_CELL_CONTENTS, &pItem ) )
1288 0 : aFlags = ((const SfxStringItem*)pItem)->GetValue();
1289 :
1290 0 : aFlags = aFlags.toAsciiUpperCase();
1291 0 : sal_Bool bCont = sal_True;
1292 :
1293 0 : for (sal_Int32 i=0 ; bCont && i<aFlags.getLength(); ++i)
1294 : {
1295 0 : switch (aFlags[i])
1296 : {
1297 : case 'A': // all
1298 0 : nFlags |= IDF_ALL;
1299 0 : bCont = false; // don't continue!
1300 0 : break;
1301 0 : case 'S': nFlags |= IDF_STRING; break;
1302 0 : case 'V': nFlags |= IDF_VALUE; break;
1303 0 : case 'D': nFlags |= IDF_DATETIME; break;
1304 0 : case 'F': nFlags |= IDF_FORMULA; break;
1305 0 : case 'N': nFlags |= IDF_NOTE; break;
1306 0 : case 'T': nFlags |= IDF_ATTRIB; break;
1307 : }
1308 : }
1309 :
1310 0 : SFX_REQUEST_ARG( rReq, pFuncItem, SfxUInt16Item, FN_PARAM_1, false );
1311 0 : SFX_REQUEST_ARG( rReq, pSkipItem, SfxBoolItem, FN_PARAM_2, false );
1312 0 : SFX_REQUEST_ARG( rReq, pTransposeItem, SfxBoolItem, FN_PARAM_3, false );
1313 0 : SFX_REQUEST_ARG( rReq, pLinkItem, SfxBoolItem, FN_PARAM_4, false );
1314 0 : SFX_REQUEST_ARG( rReq, pMoveItem, SfxInt16Item, FN_PARAM_5, false );
1315 0 : if ( pFuncItem )
1316 0 : nFunction = pFuncItem->GetValue();
1317 0 : if ( pSkipItem )
1318 0 : bSkipEmpty = pSkipItem->GetValue();
1319 0 : if ( pTransposeItem )
1320 0 : bTranspose = pTransposeItem->GetValue();
1321 0 : if ( pLinkItem )
1322 0 : bAsLink = pLinkItem->GetValue();
1323 0 : if ( pMoveItem )
1324 0 : eMoveMode = (InsCellCmd) pMoveItem->GetValue();
1325 : }
1326 : else
1327 : {
1328 0 : ScEditableTester aTester( pTabViewShell );
1329 0 : if (aTester.IsEditable())
1330 : {
1331 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1332 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
1333 :
1334 0 : AbstractScInsertContentsDlg* pDlg = pFact->CreateScInsertContentsDlg(pTabViewShell->GetDialogParent());
1335 : OSL_ENSURE(pDlg, "Dialog create fail!");
1336 0 : pDlg->SetOtherDoc( bOtherDoc );
1337 : // if ChangeTrack MoveMode disable
1338 0 : pDlg->SetChangeTrack( pDoc->GetChangeTrack() != NULL );
1339 : // fdo#56098 disable shift if necessary
1340 0 : if ( !bOtherDoc && pOwnClip )
1341 : {
1342 0 : ScViewData* pData = GetViewData();
1343 0 : if ( pData->GetMarkData().GetTableSelect( pData->GetTabNo() ) )
1344 : {
1345 : SCCOL nStartX, nEndX, nClipStartX, nClipSizeX, nRangeSizeX;
1346 : SCROW nStartY, nEndY, nClipStartY, nClipSizeY, nRangeSizeY;
1347 : SCTAB nStartTab, nEndTab;
1348 0 : pOwnClip->GetDocument()->GetClipStart( nClipStartX, nClipStartY );
1349 0 : pOwnClip->GetDocument()->GetClipArea( nClipSizeX, nClipSizeY, true );
1350 :
1351 0 : if ( !( pData->GetSimpleArea( nStartX, nStartY, nStartTab,
1352 0 : nEndX, nEndY, nEndTab ) == SC_MARK_SIMPLE &&
1353 0 : nStartTab == nEndTab ) )
1354 : {
1355 : // the destination is not a simple range,
1356 : // assume the destination as the current cell
1357 0 : nStartX = nEndX = pData->GetCurX();
1358 0 : nStartY = nEndY = pData->GetCurY();
1359 0 : nStartTab = pData->GetTabNo();
1360 : }
1361 : // we now have clip- and range dimensions
1362 : // the size of the destination area is the larger of the two
1363 0 : nRangeSizeX = nClipSizeX >= nEndX - nStartX ? nClipSizeX : nEndX - nStartX;
1364 0 : nRangeSizeY = nClipSizeY >= nEndY - nStartY ? nClipSizeY : nEndY - nStartY;
1365 : // When the source and destination areas intersect things may go wrong,
1366 : // especially if the area contains references. This may produce data loss
1367 : // (e.g. formulas that get wrong references), this scenario _must_ be avoided.
1368 : ScRange aSource( nClipStartX, nClipStartY, nStartTab,
1369 0 : nClipStartX + nClipSizeX, nClipStartY + nClipSizeY, nStartTab );
1370 : ScRange aDest( nStartX, nStartY, nStartTab,
1371 0 : nStartX + nRangeSizeX, nStartY + nRangeSizeY, nStartTab );
1372 0 : if ( pOwnClip->GetDocument()->IsCutMode() && aSource.Intersects( aDest ) )
1373 0 : pDlg->SetCellShiftDisabled( SC_CELL_SHIFT_DISABLE_DOWN | SC_CELL_SHIFT_DISABLE_RIGHT );
1374 : else
1375 : {
1376 : //no conflict with intersecting ranges,
1377 : //check if paste plus shift will fit on sheet
1378 : //and disable shift-option if no fit
1379 0 : int nDisableShiftX = 0;
1380 0 : int nDisableShiftY = 0;
1381 :
1382 : //check if horizontal shift will fit
1383 0 : if ( !pData->GetDocument()->IsBlockEmpty( nStartTab,
1384 : MAXCOL - nRangeSizeX, nStartY,
1385 0 : MAXCOL, nStartY + nRangeSizeY, false ) )
1386 0 : nDisableShiftX = SC_CELL_SHIFT_DISABLE_RIGHT;
1387 :
1388 : //check if vertical shift will fit
1389 0 : if ( !pData->GetDocument()->IsBlockEmpty( nStartTab,
1390 : nStartX, MAXROW - nRangeSizeY,
1391 0 : nStartX + nRangeSizeX, MAXROW, false ) )
1392 0 : nDisableShiftY = SC_CELL_SHIFT_DISABLE_DOWN;
1393 :
1394 0 : if ( nDisableShiftX || nDisableShiftY )
1395 0 : pDlg->SetCellShiftDisabled( nDisableShiftX | nDisableShiftY );
1396 : }
1397 : }
1398 : }
1399 0 : if (pDlg->Execute() == RET_OK)
1400 : {
1401 0 : nFlags = pDlg->GetInsContentsCmdBits();
1402 0 : nFunction = pDlg->GetFormulaCmdBits();
1403 0 : bSkipEmpty = pDlg->IsSkipEmptyCells();
1404 0 : bTranspose = pDlg->IsTranspose();
1405 0 : bAsLink = pDlg->IsLink();
1406 0 : eMoveMode = pDlg->GetMoveMode();
1407 : }
1408 0 : delete pDlg;
1409 : }
1410 : else
1411 0 : pTabViewShell->ErrorMessage(aTester.GetMessageId());
1412 : }
1413 :
1414 0 : if( nFlags != IDF_NONE )
1415 : {
1416 : {
1417 0 : WaitObject aWait( GetViewData()->GetDialogParent() );
1418 0 : if ( bAsLink && bOtherDoc )
1419 0 : pTabViewShell->PasteFromSystem(SOT_FORMATSTR_ID_LINK); // DDE insert
1420 : else
1421 : {
1422 : pTabViewShell->PasteFromClip( nFlags, pOwnClip->GetDocument(),
1423 : nFunction, bSkipEmpty, bTranspose, bAsLink,
1424 0 : eMoveMode, IDF_NONE, true ); // allow warning dialog
1425 0 : }
1426 : }
1427 :
1428 0 : if( !pReqArgs )
1429 : {
1430 0 : OUString aFlags;
1431 :
1432 0 : if( nFlags == IDF_ALL )
1433 : {
1434 0 : aFlags += "A";
1435 : }
1436 : else
1437 : {
1438 0 : if( nFlags & IDF_STRING ) aFlags += "S";
1439 0 : if( nFlags & IDF_VALUE ) aFlags += "V";
1440 0 : if( nFlags & IDF_DATETIME ) aFlags += "D";
1441 0 : if( nFlags & IDF_FORMULA ) aFlags += "F";
1442 0 : if( nFlags & IDF_NOTE ) aFlags += "N";
1443 0 : if( nFlags & IDF_ATTRIB ) aFlags += "T";
1444 : }
1445 :
1446 0 : rReq.AppendItem( SfxStringItem( FID_INS_CELL_CONTENTS, aFlags ) );
1447 0 : rReq.AppendItem( SfxBoolItem( FN_PARAM_2, bSkipEmpty ) );
1448 0 : rReq.AppendItem( SfxBoolItem( FN_PARAM_3, bTranspose ) );
1449 0 : rReq.AppendItem( SfxBoolItem( FN_PARAM_4, bAsLink ) );
1450 0 : rReq.AppendItem( SfxUInt16Item( FN_PARAM_1, nFunction ) );
1451 0 : rReq.AppendItem( SfxInt16Item( FN_PARAM_5, (sal_Int16) eMoveMode ) );
1452 0 : rReq.Done();
1453 : }
1454 0 : }
1455 : }
1456 : }
1457 0 : pTabViewShell->CellContentChanged(); // => PasteFromXXX ???
1458 0 : break;
1459 : case SID_PASTE_ONLY_VALUE:
1460 : case SID_PASTE_ONLY_TEXT:
1461 : case SID_PASTE_ONLY_FORMULA:
1462 : {
1463 0 : Window* pWin = GetViewData()->GetActiveWin();
1464 0 : if ( ScTransferObj::GetOwnClipboard( pWin ) ) // own cell data
1465 : {
1466 0 : rReq.SetSlot( FID_INS_CELL_CONTENTS );
1467 0 : OUString aFlags;
1468 0 : if ( nSlot == SID_PASTE_ONLY_VALUE )
1469 0 : aFlags = "V";
1470 0 : else if ( nSlot == SID_PASTE_ONLY_TEXT )
1471 0 : aFlags = "S";
1472 : else
1473 0 : aFlags = "F";
1474 0 : rReq.AppendItem( SfxStringItem( FID_INS_CELL_CONTENTS, aFlags ) );
1475 0 : ExecuteSlot( rReq, GetInterface() );
1476 0 : rReq.SetReturnValue(SfxInt16Item(nSlot, 1)); // 1 = success
1477 0 : pTabViewShell->CellContentChanged();
1478 : }
1479 : else
1480 0 : rReq.SetReturnValue(SfxInt16Item(nSlot, 0)); // 0 = fail
1481 0 : break;
1482 : }
1483 : case SID_PASTE_SPECIAL:
1484 : // differentiate between own cell data and draw objects/external data
1485 : // this makes FID_INS_CELL_CONTENTS superfluous
1486 : {
1487 0 : Window* pWin = GetViewData()->GetActiveWin();
1488 :
1489 : // Clipboard-ID given as parameter? Basic "PasteSpecial(Format)"
1490 0 : const SfxPoolItem* pItem=NULL;
1491 0 : if ( pReqArgs &&
1492 0 : pReqArgs->GetItemState(nSlot, true, &pItem) == SFX_ITEM_SET &&
1493 0 : pItem->ISA(SfxUInt32Item) )
1494 : {
1495 0 : sal_uLong nFormat = ((const SfxUInt32Item*)pItem)->GetValue();
1496 0 : sal_Bool bRet=sal_True;
1497 : {
1498 0 : WaitObject aWait( GetViewData()->GetDialogParent() );
1499 0 : sal_Bool bDraw = ( ScDrawTransferObj::GetOwnClipboard( pWin ) != NULL );
1500 0 : if ( bDraw && nFormat == SOT_FORMATSTR_ID_EMBED_SOURCE )
1501 0 : pTabViewShell->PasteDraw();
1502 : else
1503 0 : bRet = pTabViewShell->PasteFromSystem(nFormat, true); // TRUE: no error messages
1504 : }
1505 :
1506 0 : if ( bRet )
1507 : {
1508 0 : rReq.SetReturnValue(SfxInt16Item(nSlot, bRet)); // 1 = success, 0 = fail
1509 0 : rReq.Done();
1510 : }
1511 : else
1512 : // if format is not available -> fallback to request without parameters
1513 0 : pItem = NULL;
1514 : }
1515 :
1516 0 : if ( !pItem )
1517 : {
1518 0 : if ( ScTransferObj::GetOwnClipboard( pWin ) ) // own cell data
1519 : {
1520 0 : rReq.SetSlot( FID_INS_CELL_CONTENTS );
1521 0 : ExecuteSlot( rReq, GetInterface() );
1522 0 : rReq.SetReturnValue(SfxInt16Item(nSlot, 1)); // 1 = success
1523 : }
1524 : else // draw objects or external data
1525 : {
1526 0 : sal_Bool bDraw = ( ScDrawTransferObj::GetOwnClipboard( pWin ) != NULL );
1527 :
1528 0 : SvxClipboardFmtItem aFormats( SID_CLIPBOARD_FORMAT_ITEMS );
1529 0 : GetPossibleClipboardFormats( aFormats );
1530 :
1531 0 : sal_uInt16 nFormatCount = aFormats.Count();
1532 0 : if ( nFormatCount )
1533 : {
1534 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1535 0 : SfxAbstractPasteDialog* pDlg = pFact->CreatePasteDialog( pTabViewShell->GetDialogParent() );
1536 0 : if ( pDlg )
1537 : {
1538 0 : for (sal_uInt16 i=0; i<nFormatCount; i++)
1539 : {
1540 0 : sal_uLong nFormatId = aFormats.GetClipbrdFormatId( i );
1541 0 : OUString aName = aFormats.GetClipbrdFormatName( i );
1542 : // special case for paste dialog: '*' is replaced by object type
1543 0 : if ( nFormatId == SOT_FORMATSTR_ID_EMBED_SOURCE )
1544 0 : aName = "*";
1545 0 : pDlg->Insert( nFormatId, aName );
1546 0 : }
1547 :
1548 : TransferableDataHelper aDataHelper(
1549 0 : TransferableDataHelper::CreateFromSystemClipboard( pWin ) );
1550 0 : sal_uLong nFormat = pDlg->GetFormat( aDataHelper.GetTransferable() );
1551 0 : if (nFormat > 0)
1552 : {
1553 : {
1554 0 : WaitObject aWait( GetViewData()->GetDialogParent() );
1555 0 : if ( bDraw && nFormat == SOT_FORMATSTR_ID_EMBED_SOURCE )
1556 0 : pTabViewShell->PasteDraw();
1557 : else
1558 0 : pTabViewShell->PasteFromSystem(nFormat);
1559 : }
1560 0 : rReq.SetReturnValue(SfxInt16Item(nSlot, 1)); // 1 = success
1561 0 : rReq.AppendItem( SfxUInt32Item( nSlot, nFormat ) );
1562 0 : rReq.Done();
1563 : }
1564 : else
1565 : {
1566 0 : rReq.SetReturnValue(SfxInt16Item(nSlot, 0)); // 0 = fail
1567 0 : rReq.Ignore();
1568 : }
1569 :
1570 0 : delete pDlg;
1571 : }
1572 : }
1573 : else
1574 0 : rReq.SetReturnValue(SfxInt16Item(nSlot, 0)); // 0 = fail
1575 : }
1576 : }
1577 : }
1578 0 : pTabViewShell->CellContentChanged(); // => PasteFromSystem() ???
1579 0 : break;
1580 :
1581 :
1582 : // other
1583 :
1584 :
1585 : case FID_INS_ROWBRK:
1586 0 : pTabViewShell->InsertPageBreak( false );
1587 0 : rReq.Done();
1588 0 : break;
1589 :
1590 : case FID_INS_COLBRK:
1591 0 : pTabViewShell->InsertPageBreak( true );
1592 0 : rReq.Done();
1593 0 : break;
1594 :
1595 : case FID_DEL_ROWBRK:
1596 0 : pTabViewShell->DeletePageBreak( false );
1597 0 : rReq.Done();
1598 0 : break;
1599 :
1600 : case FID_DEL_COLBRK:
1601 0 : pTabViewShell->DeletePageBreak( true );
1602 0 : rReq.Done();
1603 0 : break;
1604 :
1605 : case SID_DETECTIVE_ADD_PRED:
1606 0 : pTabViewShell->DetectiveAddPred();
1607 0 : rReq.Done();
1608 0 : break;
1609 :
1610 : case SID_DETECTIVE_DEL_PRED:
1611 0 : pTabViewShell->DetectiveDelPred();
1612 0 : rReq.Done();
1613 0 : break;
1614 :
1615 : case SID_DETECTIVE_ADD_SUCC:
1616 0 : pTabViewShell->DetectiveAddSucc();
1617 0 : rReq.Done();
1618 0 : break;
1619 :
1620 : case SID_DETECTIVE_DEL_SUCC:
1621 0 : pTabViewShell->DetectiveDelSucc();
1622 0 : rReq.Done();
1623 0 : break;
1624 :
1625 : case SID_DETECTIVE_ADD_ERR:
1626 0 : pTabViewShell->DetectiveAddError();
1627 0 : rReq.Done();
1628 0 : break;
1629 :
1630 : case SID_DETECTIVE_INVALID:
1631 0 : pTabViewShell->DetectiveMarkInvalid();
1632 0 : rReq.Done();
1633 0 : break;
1634 :
1635 : case SID_DETECTIVE_REFRESH:
1636 0 : pTabViewShell->DetectiveRefresh();
1637 0 : rReq.Done();
1638 0 : break;
1639 :
1640 : case SID_DETECTIVE_MARK_PRED:
1641 0 : pTabViewShell->DetectiveMarkPred();
1642 0 : break;
1643 : case SID_DETECTIVE_MARK_SUCC:
1644 0 : pTabViewShell->DetectiveMarkSucc();
1645 0 : break;
1646 : case SID_INSERT_CURRENT_DATE:
1647 : pTabViewShell->InsertCurrentTime(
1648 0 : NUMBERFORMAT_DATE, ScGlobal::GetRscString(STR_UNDO_INSERT_CURRENT_DATE));
1649 0 : break;
1650 : case SID_INSERT_CURRENT_TIME:
1651 : pTabViewShell->InsertCurrentTime(
1652 0 : NUMBERFORMAT_TIME, ScGlobal::GetRscString(STR_UNDO_INSERT_CURRENT_TIME));
1653 0 : break;
1654 :
1655 : case SID_SPELL_DIALOG:
1656 : {
1657 0 : SfxViewFrame* pViewFrame = pTabViewShell->GetViewFrame();
1658 0 : if( rReq.GetArgs() )
1659 : pViewFrame->SetChildWindow( SID_SPELL_DIALOG,
1660 0 : static_cast< const SfxBoolItem& >( rReq.GetArgs()->
1661 0 : Get( SID_SPELL_DIALOG ) ).GetValue() );
1662 : else
1663 0 : pViewFrame->ToggleChildWindow( SID_SPELL_DIALOG );
1664 :
1665 0 : pViewFrame->GetBindings().Invalidate( SID_SPELL_DIALOG );
1666 0 : rReq.Ignore();
1667 : }
1668 0 : break;
1669 :
1670 : case SID_HANGUL_HANJA_CONVERSION:
1671 0 : pTabViewShell->DoHangulHanjaConversion();
1672 0 : break;
1673 :
1674 : case SID_CHINESE_CONVERSION:
1675 : {
1676 : //open ChineseTranslationDialog
1677 : Reference< XComponentContext > xContext(
1678 0 : ::cppu::defaultBootstrap_InitialComponentContext() ); //@todo get context from calc if that has one
1679 0 : if(xContext.is())
1680 : {
1681 0 : Reference< lang::XMultiComponentFactory > xMCF( xContext->getServiceManager() );
1682 0 : if(xMCF.is())
1683 : {
1684 : Reference< ui::dialogs::XExecutableDialog > xDialog(
1685 0 : xMCF->createInstanceWithContext(
1686 : OUString("com.sun.star.linguistic2.ChineseTranslationDialog")
1687 0 : , xContext), UNO_QUERY);
1688 0 : Reference< lang::XInitialization > xInit( xDialog, UNO_QUERY );
1689 0 : if( xInit.is() )
1690 : {
1691 : // initialize dialog
1692 0 : Reference< awt::XWindow > xDialogParentWindow(0);
1693 0 : Sequence<Any> aSeq(1);
1694 0 : Any* pArray = aSeq.getArray();
1695 0 : PropertyValue aParam;
1696 0 : aParam.Name = "ParentWindow";
1697 0 : aParam.Value <<= makeAny(xDialogParentWindow);
1698 0 : pArray[0] <<= makeAny(aParam);
1699 0 : xInit->initialize( aSeq );
1700 :
1701 : //execute dialog
1702 0 : sal_Int16 nDialogRet = xDialog->execute();
1703 0 : if( RET_OK == nDialogRet )
1704 : {
1705 : //get some parameters from the dialog
1706 0 : sal_Bool bToSimplified = sal_True;
1707 0 : sal_Bool bUseVariants = sal_True;
1708 0 : sal_Bool bCommonTerms = sal_True;
1709 0 : Reference< beans::XPropertySet > xProp( xDialog, UNO_QUERY );
1710 0 : if( xProp.is() )
1711 : {
1712 : try
1713 : {
1714 0 : xProp->getPropertyValue("IsDirectionToSimplified") >>= bToSimplified;
1715 0 : xProp->getPropertyValue("IsUseCharacterVariants") >>= bUseVariants;
1716 0 : xProp->getPropertyValue("IsTranslateCommonTerms") >>= bCommonTerms;
1717 : }
1718 0 : catch( Exception& )
1719 : {
1720 : }
1721 : }
1722 :
1723 : //execute translation
1724 0 : LanguageType eSourceLang = bToSimplified ? LANGUAGE_CHINESE_TRADITIONAL : LANGUAGE_CHINESE_SIMPLIFIED;
1725 0 : LanguageType eTargetLang = bToSimplified ? LANGUAGE_CHINESE_SIMPLIFIED : LANGUAGE_CHINESE_TRADITIONAL;
1726 0 : sal_Int32 nOptions = bUseVariants ? i18n::TextConversionOption::USE_CHARACTER_VARIANTS : 0;
1727 0 : if( !bCommonTerms )
1728 0 : nOptions |= i18n::TextConversionOption::CHARACTER_BY_CHARACTER;
1729 :
1730 0 : Font aTargetFont = GetViewData()->GetActiveWin()->GetDefaultFont(
1731 : DEFAULTFONT_CJK_SPREADSHEET,
1732 0 : eTargetLang, DEFAULTFONT_FLAGS_ONLYONE );
1733 : ScConversionParam aConvParam( SC_CONVERSION_CHINESE_TRANSL,
1734 0 : eSourceLang, eTargetLang, aTargetFont, nOptions, false );
1735 0 : pTabViewShell->DoSheetConversion( aConvParam );
1736 0 : }
1737 : }
1738 0 : Reference< lang::XComponent > xComponent( xDialog, UNO_QUERY );
1739 0 : if( xComponent.is() )
1740 0 : xComponent->dispose();
1741 0 : }
1742 0 : }
1743 : }
1744 0 : break;
1745 :
1746 : case SID_THESAURUS:
1747 0 : pTabViewShell->DoThesaurus();
1748 0 : break;
1749 :
1750 : case SID_TOGGLE_REL:
1751 0 : pTabViewShell->DoRefConversion();
1752 0 : break;
1753 :
1754 : case SID_DEC_INDENT:
1755 0 : pTabViewShell->ChangeIndent( false );
1756 0 : break;
1757 : case SID_INC_INDENT:
1758 0 : pTabViewShell->ChangeIndent( true );
1759 0 : break;
1760 :
1761 : case FID_USE_NAME:
1762 : {
1763 0 : sal_uInt16 nFlags = pTabViewShell->GetCreateNameFlags();
1764 :
1765 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1766 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
1767 :
1768 0 : AbstractScNameCreateDlg* pDlg = pFact->CreateScNameCreateDlg(pTabViewShell->GetDialogParent(), nFlags);
1769 : OSL_ENSURE(pDlg, "Dialog create fail!");
1770 :
1771 0 : if( pDlg->Execute() )
1772 : {
1773 0 : nFlags = pDlg->GetFlags();
1774 0 : pTabViewShell->CreateNames(nFlags);
1775 0 : rReq.Done();
1776 : }
1777 0 : delete pDlg;
1778 : }
1779 0 : break;
1780 :
1781 : case SID_CONSOLIDATE:
1782 : {
1783 : const SfxPoolItem* pItem;
1784 0 : if ( pReqArgs && SFX_ITEM_SET ==
1785 0 : pReqArgs->GetItemState( SCITEM_CONSOLIDATEDATA, true, &pItem ) )
1786 : {
1787 : const ScConsolidateParam& rParam =
1788 0 : ((const ScConsolidateItem*)pItem)->GetData();
1789 :
1790 0 : pTabViewShell->Consolidate( rParam );
1791 0 : GetViewData()->GetDocument()->SetConsolidateDlgData( &rParam );
1792 :
1793 0 : rReq.Done();
1794 : }
1795 : #ifndef DISABLE_SCRIPTING
1796 0 : else if (rReq.IsAPI())
1797 0 : SbxBase::SetError(SbxERR_BAD_PARAMETER);
1798 : #endif
1799 : }
1800 0 : break;
1801 :
1802 : case SID_INS_FUNCTION:
1803 : {
1804 0 : const SfxBoolItem* pOkItem = (const SfxBoolItem*)&pReqArgs->Get( SID_DLG_RETOK );
1805 :
1806 0 : if ( pOkItem->GetValue() ) // OK
1807 : {
1808 0 : OUString aFormula;
1809 0 : const SfxStringItem* pSItem = (const SfxStringItem*)&pReqArgs->Get( SCITEM_STRING );
1810 0 : const SfxBoolItem* pMatrixItem = (const SfxBoolItem*) &pReqArgs->Get( SID_DLG_MATRIX );
1811 :
1812 0 : aFormula += pSItem->GetValue();
1813 0 : pScMod->ActivateInputWindow( &aFormula, pMatrixItem->GetValue() );
1814 : }
1815 : else // CANCEL
1816 : {
1817 0 : pScMod->ActivateInputWindow( NULL );
1818 : }
1819 0 : rReq.Ignore(); // only SID_ENTER_STRING is recorded
1820 : }
1821 0 : break;
1822 :
1823 : case FID_DEFINE_NAME:
1824 0 : if ( pReqArgs )
1825 : {
1826 : const SfxPoolItem* pItem;
1827 0 : OUString aName, aSymbol, aAttrib;
1828 :
1829 0 : if( pReqArgs->HasItem( FID_DEFINE_NAME, &pItem ) )
1830 0 : aName = ((const SfxStringItem*)pItem)->GetValue();
1831 :
1832 0 : if( pReqArgs->HasItem( FN_PARAM_1, &pItem ) )
1833 0 : aSymbol = ((const SfxStringItem*)pItem)->GetValue();
1834 :
1835 0 : if( pReqArgs->HasItem( FN_PARAM_2, &pItem ) )
1836 0 : aAttrib = ((const SfxStringItem*)pItem)->GetValue();
1837 :
1838 0 : if ( !aName.isEmpty() && !aSymbol.isEmpty() )
1839 : {
1840 0 : if (pTabViewShell->InsertName( aName, aSymbol, aAttrib ))
1841 0 : rReq.Done();
1842 : #ifndef DISABLE_SCRIPTING
1843 : else
1844 0 : SbxBase::SetError( SbxERR_BAD_PARAMETER ); // Basic-error
1845 : #endif
1846 0 : }
1847 : }
1848 : else
1849 : {
1850 0 : sal_uInt16 nId = ScNameDlgWrapper::GetChildWindowId();
1851 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
1852 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
1853 :
1854 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
1855 : }
1856 0 : break;
1857 : case FID_ADD_NAME:
1858 : {
1859 0 : sal_uInt16 nId = ScNameDefDlgWrapper::GetChildWindowId();
1860 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
1861 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
1862 :
1863 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
1864 : }
1865 0 : break;
1866 :
1867 : case SID_OPENDLG_CONDFRMT:
1868 : case SID_OPENDLG_COLORSCALE:
1869 : case SID_OPENDLG_DATABAR:
1870 : case SID_OPENDLG_ICONSET:
1871 : case SID_OPENDLG_CONDDATE:
1872 : {
1873 :
1874 0 : ScRangeList aRangeList;
1875 0 : ScViewData* pData = GetViewData();
1876 0 : pData->GetMarkData().FillRangeListWithMarks(&aRangeList, false);
1877 :
1878 0 : ScDocument* pDoc = GetViewData()->GetDocument();
1879 0 : if(pDoc->IsTabProtected(pData->GetTabNo()))
1880 : {
1881 : //ErrorMessage( STR_ERR_CONDFORMAT_PROTECTED );
1882 0 : break;
1883 : }
1884 :
1885 0 : ScAddress aPos(pData->GetCurX(), pData->GetCurY(), pData->GetTabNo());
1886 0 : if(aRangeList.empty())
1887 : {
1888 0 : ScRange* pRange = new ScRange(aPos);
1889 0 : aRangeList.push_back(pRange);
1890 : }
1891 :
1892 0 : sal_Int32 nKey = 0;
1893 0 : const ScPatternAttr* pPattern = pDoc->GetPattern(aPos.Col(), aPos.Row(), aPos.Tab());
1894 0 : const std::vector<sal_uInt32>& rCondFormats = static_cast<const ScCondFormatItem&>(pPattern->GetItem(ATTR_CONDITIONAL)).GetCondFormatData();
1895 0 : bool bContainsCondFormat = !rCondFormats.empty();
1896 0 : boost::scoped_ptr<ScCondFormatDlg> pCondFormatDlg;
1897 0 : if(bContainsCondFormat)
1898 : {
1899 0 : bool bContainsExistingCondFormat = false;
1900 0 : ScConditionalFormatList* pList = pDoc->GetCondFormList(aPos.Tab());
1901 0 : for (std::vector<sal_uInt32>::const_iterator itr = rCondFormats.begin(), itrEnd = rCondFormats.end();
1902 : itr != itrEnd; ++itr)
1903 : {
1904 : // check if at least one existing conditional format has the same range
1905 0 : const ScConditionalFormat* pCondFormat = pList->GetFormat(*itr);
1906 0 : if(!pCondFormat)
1907 0 : continue;
1908 :
1909 0 : bContainsExistingCondFormat = true;
1910 0 : const ScRangeList& rCondFormatRange = pCondFormat->GetRange();
1911 0 : if(rCondFormatRange == aRangeList)
1912 : {
1913 : // found a matching range, edit this conditional format
1914 0 : nKey = pCondFormat->GetKey();
1915 0 : pCondFormatDlg.reset( new ScCondFormatDlg( pTabViewShell->GetDialogParent(), pDoc, pCondFormat, rCondFormatRange, aPos, condformat::dialog::NONE ) );
1916 0 : break;
1917 : }
1918 : }
1919 :
1920 : // if not found a conditional format ask whether we should edit one of the existing
1921 : // or should create a new overlapping conditional format
1922 :
1923 0 : if(!pCondFormatDlg && bContainsExistingCondFormat)
1924 : {
1925 : QueryBox aBox( pTabViewShell->GetDialogParent(), WinBits( WB_YES_NO | WB_DEF_YES ),
1926 0 : ScGlobal::GetRscString(STR_EDIT_EXISTING_COND_FORMATS) );
1927 0 : bool bEditExisting = aBox.Execute() == RET_YES;
1928 0 : if(bEditExisting)
1929 : {
1930 : // differentiate between ranges where one conditional format is defined
1931 : // and several formats are defined
1932 : // if we have only one => open the cond format dlg to edit it
1933 : // otherwise open the manage cond format dlg
1934 0 : if(rCondFormats.size() == 1)
1935 : {
1936 0 : const ScConditionalFormat* pCondFormat = pList->GetFormat(rCondFormats[0]);
1937 : assert(pCondFormat);
1938 0 : const ScRangeList& rCondFormatRange = pCondFormat->GetRange();
1939 0 : nKey = pCondFormat->GetKey();
1940 0 : pCondFormatDlg.reset( new ScCondFormatDlg( pTabViewShell->GetDialogParent(), pDoc, pCondFormat, rCondFormatRange, aPos, condformat::dialog::NONE ) );
1941 : }
1942 : else
1943 : {
1944 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1945 0 : boost::scoped_ptr<AbstractScCondFormatManagerDlg> pDlg(pFact->CreateScCondFormatMgrDlg( pTabViewShell->GetDialogParent(), pDoc, pList, aPos, RID_SCDLG_COND_FORMAT_MANAGER));
1946 0 : if(pDlg->Execute() == RET_OK && pDlg->CondFormatsChanged())
1947 : {
1948 0 : ScConditionalFormatList* pCondFormatList = pDlg->GetConditionalFormatList();
1949 0 : pData->GetDocShell()->GetDocFunc().SetConditionalFormatList(pCondFormatList, aPos.Tab());
1950 : }
1951 : // we need step out here because we don't want to open the normal dialog
1952 0 : break;
1953 : }
1954 : }
1955 : else
1956 : {
1957 : // define an overlapping conditional format
1958 : // does not need to be handled here
1959 0 : }
1960 :
1961 : }
1962 : }
1963 :
1964 0 : if(!pCondFormatDlg)
1965 : {
1966 0 : condformat::dialog::ScCondFormatDialogType eType = condformat::dialog::NONE;
1967 0 : switch(nSlot)
1968 : {
1969 : case SID_OPENDLG_CONDFRMT:
1970 0 : eType = condformat::dialog::CONDITION;
1971 0 : break;
1972 : case SID_OPENDLG_COLORSCALE:
1973 0 : eType = condformat::dialog::COLORSCALE;
1974 0 : break;
1975 : case SID_OPENDLG_DATABAR:
1976 0 : eType = condformat::dialog::DATABAR;
1977 0 : break;
1978 : case SID_OPENDLG_ICONSET:
1979 0 : eType = condformat::dialog::ICONSET;
1980 0 : break;
1981 : case SID_OPENDLG_CONDDATE:
1982 0 : eType = condformat::dialog::DATE;
1983 0 : break;
1984 : default:
1985 : assert(false);
1986 0 : break;
1987 : }
1988 0 : pCondFormatDlg.reset( new ScCondFormatDlg( pTabViewShell->GetDialogParent(), pDoc, NULL, aRangeList, aRangeList.GetTopLeftCorner(), eType ) );
1989 : }
1990 :
1991 0 : sal_uInt16 nId = 1;
1992 0 : pScMod->SetRefDialog( nId, true );
1993 :
1994 0 : if( pCondFormatDlg->Execute() == RET_OK )
1995 : {
1996 0 : ScConditionalFormat* pFormat = pCondFormatDlg->GetConditionalFormat();
1997 0 : if(pFormat)
1998 0 : pData->GetDocShell()->GetDocFunc().ReplaceConditionalFormat(nKey, pFormat, aPos.Tab(), pFormat->GetRange());
1999 : else
2000 0 : pData->GetDocShell()->GetDocFunc().ReplaceConditionalFormat(nKey, NULL, aPos.Tab(), ScRangeList());
2001 : }
2002 :
2003 0 : pScMod->SetRefDialog( nId, false );
2004 :
2005 :
2006 : }
2007 0 : break;
2008 :
2009 : case SID_DEFINE_COLROWNAMERANGES:
2010 : {
2011 :
2012 0 : sal_uInt16 nId = ScColRowNameRangesDlgWrapper::GetChildWindowId();
2013 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
2014 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
2015 :
2016 0 : pScMod->SetRefDialog( nId, pWnd ? false : sal_True );
2017 :
2018 : }
2019 0 : break;
2020 :
2021 : case SID_UPDATECHART:
2022 : {
2023 0 : sal_Bool bAll = false;
2024 :
2025 0 : if( pReqArgs )
2026 : {
2027 : const SfxPoolItem* pItem;
2028 :
2029 0 : if( pReqArgs->HasItem( SID_UPDATECHART, &pItem ) )
2030 0 : bAll = ((const SfxBoolItem*)pItem)->GetValue();
2031 : }
2032 :
2033 0 : pTabViewShell->UpdateCharts( bAll );
2034 :
2035 0 : if( ! rReq.IsAPI() )
2036 : {
2037 0 : rReq.AppendItem( SfxBoolItem( SID_UPDATECHART, bAll ) );
2038 0 : rReq.Done();
2039 : }
2040 : }
2041 0 : break;
2042 :
2043 :
2044 : case SID_TABOP:
2045 0 : if (pReqArgs)
2046 : {
2047 : const ScTabOpItem& rItem =
2048 : (const ScTabOpItem&)
2049 0 : pReqArgs->Get( SID_TABOP );
2050 :
2051 0 : pTabViewShell->TabOp( rItem.GetData() );
2052 :
2053 0 : rReq.Done( *pReqArgs );
2054 : }
2055 0 : break;
2056 :
2057 : case SID_SOLVE:
2058 0 : if (pReqArgs)
2059 : {
2060 : const ScSolveItem& rItem =
2061 : (const ScSolveItem&)
2062 0 : pReqArgs->Get( SCITEM_SOLVEDATA );
2063 :
2064 0 : pTabViewShell->Solve( rItem.GetData() );
2065 :
2066 0 : rReq.Done( *pReqArgs );
2067 : }
2068 0 : break;
2069 :
2070 : case FID_INSERT_NAME:
2071 : {
2072 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
2073 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
2074 :
2075 0 : AbstractScNamePasteDlg* pDlg = pFact->CreateScNamePasteDlg( pTabViewShell->GetDialogParent(), GetViewData()->GetDocShell() );
2076 : OSL_ENSURE(pDlg, "Dialog create fail!");
2077 0 : switch( pDlg->Execute() )
2078 : {
2079 : case BTN_PASTE_LIST:
2080 0 : pTabViewShell->InsertNameList();
2081 0 : break;
2082 : case BTN_PASTE_NAME:
2083 : {
2084 0 : ScInputHandler* pHdl = pScMod->GetInputHdl( pTabViewShell );
2085 0 : if (pHdl)
2086 : {
2087 : // "=" in KeyEvent, switches to input-mode
2088 0 : pScMod->InputKeyEvent( KeyEvent('=',KeyCode()) );
2089 :
2090 0 : std::vector<OUString> aNames = pDlg->GetSelectedNames();
2091 0 : if (!aNames.empty())
2092 : {
2093 0 : OUStringBuffer aBuffer;
2094 0 : for (std::vector<OUString>::const_iterator itr = aNames.begin();
2095 0 : itr != aNames.end(); ++itr)
2096 : {
2097 0 : aBuffer.append(*itr).append(' ');
2098 : }
2099 0 : pHdl->InsertFunction( aBuffer.makeStringAndClear(), false ); // without "()"
2100 0 : }
2101 : }
2102 : }
2103 0 : break;
2104 : }
2105 0 : delete pDlg;
2106 : }
2107 0 : break;
2108 :
2109 : case SID_RANGE_NOTETEXT:
2110 0 : if (pReqArgs)
2111 : {
2112 0 : const SfxStringItem& rTextItem = (const SfxStringItem&)pReqArgs->Get( SID_RANGE_NOTETEXT );
2113 :
2114 : // always cursor position
2115 0 : ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() );
2116 0 : pTabViewShell->SetNoteText( aPos, rTextItem.GetValue() );
2117 0 : rReq.Done();
2118 : }
2119 0 : break;
2120 :
2121 : case SID_INSERT_POSTIT:
2122 0 : if ( pReqArgs )
2123 : {
2124 0 : const SvxPostItAuthorItem& rAuthorItem = (const SvxPostItAuthorItem&)pReqArgs->Get( SID_ATTR_POSTIT_AUTHOR );
2125 0 : const SvxPostItDateItem& rDateItem = (const SvxPostItDateItem&) pReqArgs->Get( SID_ATTR_POSTIT_DATE );
2126 0 : const SvxPostItTextItem& rTextItem = (const SvxPostItTextItem&) pReqArgs->Get( SID_ATTR_POSTIT_TEXT );
2127 :
2128 0 : ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() );
2129 0 : pTabViewShell->ReplaceNote( aPos, rTextItem.GetValue(), &rAuthorItem.GetValue(), &rDateItem.GetValue() );
2130 0 : rReq.Done();
2131 : }
2132 : else
2133 : {
2134 0 : pTabViewShell->EditNote(); // note object to edit
2135 : }
2136 0 : break;
2137 :
2138 : case FID_NOTE_VISIBLE:
2139 : {
2140 0 : ScDocument* pDoc = GetViewData()->GetDocument();
2141 0 : ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() );
2142 0 : if( ScPostIt* pNote = pDoc->GetNote(aPos) )
2143 : {
2144 : bool bShow;
2145 : const SfxPoolItem* pItem;
2146 0 : if ( pReqArgs && (pReqArgs->GetItemState( FID_NOTE_VISIBLE, true, &pItem ) == SFX_ITEM_SET) )
2147 0 : bShow = ((const SfxBoolItem*) pItem)->GetValue();
2148 : else
2149 0 : bShow = !pNote->IsCaptionShown();
2150 :
2151 0 : pTabViewShell->ShowNote( bShow );
2152 :
2153 0 : if (!pReqArgs)
2154 0 : rReq.AppendItem( SfxBoolItem( FID_NOTE_VISIBLE, bShow ) );
2155 :
2156 0 : rReq.Done();
2157 0 : rBindings.Invalidate( FID_NOTE_VISIBLE );
2158 : }
2159 : else
2160 0 : rReq.Ignore();
2161 : }
2162 0 : break;
2163 :
2164 : case FID_HIDE_NOTE:
2165 : case FID_SHOW_NOTE:
2166 : {
2167 0 : bool bShowNote = nSlot == FID_SHOW_NOTE;
2168 0 : ScViewData* pData = GetViewData();
2169 0 : ScDocument* pDoc = pData->GetDocument();
2170 0 : ScMarkData& rMark = pData->GetMarkData();
2171 0 : bool bDone = false;
2172 :
2173 0 : if (!rMark.IsMarked() && !rMark.IsMultiMarked())
2174 : {
2175 : // Check current cell
2176 0 : ScAddress aPos( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
2177 0 : if( pDoc->GetNote(aPos) )
2178 : {
2179 0 : pData->GetDocShell()->GetDocFunc().ShowNote( aPos, bShowNote );
2180 0 : bDone = true;
2181 : }
2182 : }
2183 : else
2184 : {
2185 : // Check selection range
2186 0 : ScRangeListRef aRangesRef;
2187 0 : pData->GetMultiArea(aRangesRef);
2188 0 : ScRangeList aRanges = *aRangesRef;
2189 0 : size_t nRangeSize = aRanges.size();
2190 :
2191 0 : OUString aUndo = ScGlobal::GetRscString( bShowNote ? STR_UNDO_SHOWNOTE : STR_UNDO_HIDENOTE );
2192 0 : pData->GetDocShell()->GetUndoManager()->EnterListAction( aUndo, aUndo );
2193 :
2194 0 : for ( size_t i = 0; i < nRangeSize; ++i )
2195 : {
2196 0 : const ScRange * pRange = aRanges[i];
2197 0 : const SCROW nRow0 = pRange->aStart.Row();
2198 0 : const SCROW nRow1 = pRange->aEnd.Row();
2199 0 : const SCCOL nCol0 = pRange->aStart.Col();
2200 0 : const SCCOL nCol1 = pRange->aEnd.Col();
2201 0 : const SCTAB nRangeTab = pRange->aStart.Tab();
2202 : // Check by each cell
2203 0 : for ( SCROW nRow = nRow0; nRow <= nRow1; ++nRow )
2204 : {
2205 0 : for ( SCCOL nCol = nCol0; nCol <= nCol1; ++nCol )
2206 : {
2207 0 : if ( pDoc->HasNote(nCol, nRow, nRangeTab) && pDoc->IsBlockEditable( nRangeTab, nCol,nRow, nCol,nRow ) )
2208 : {
2209 0 : ScAddress aPos( nCol, nRow, nRangeTab );
2210 0 : pData->GetDocShell()->GetDocFunc().ShowNote( aPos, bShowNote );
2211 0 : bDone = true;
2212 : }
2213 : }
2214 : }
2215 : }
2216 :
2217 0 : pData->GetDocShell()->GetUndoManager()->LeaveListAction();
2218 :
2219 0 : if ( bDone )
2220 : {
2221 0 : rReq.Done();
2222 0 : rBindings.Invalidate( nSlot );
2223 : }
2224 : else
2225 0 : rReq.Ignore();
2226 : }
2227 : }
2228 0 : break;
2229 :
2230 : case SID_DELETE_NOTE:
2231 0 : pTabViewShell->DeleteContents( IDF_NOTE ); // delete all notes in selection
2232 0 : rReq.Done();
2233 0 : break;
2234 :
2235 : case SID_CHARMAP:
2236 0 : if( pReqArgs != NULL )
2237 : {
2238 0 : OUString aChars, aFontName;
2239 0 : const SfxItemSet *pArgs = rReq.GetArgs();
2240 0 : const SfxPoolItem* pItem = 0;
2241 0 : if ( pArgs )
2242 0 : pArgs->GetItemState(GetPool().GetWhich(SID_CHARMAP), false, &pItem);
2243 0 : if ( pItem )
2244 : {
2245 0 : const SfxStringItem* pStringItem = PTR_CAST( SfxStringItem, pItem );
2246 0 : if ( pStringItem )
2247 0 : aChars = pStringItem->GetValue();
2248 0 : const SfxPoolItem* pFtItem = NULL;
2249 0 : pArgs->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR), false, &pFtItem);
2250 0 : const SfxStringItem* pFontItem = PTR_CAST( SfxStringItem, pFtItem );
2251 0 : if ( pFontItem )
2252 0 : aFontName = pFontItem->GetValue();
2253 : }
2254 :
2255 0 : if ( !aChars.isEmpty() )
2256 : {
2257 0 : Font aFont;
2258 : pTabViewShell->GetSelectionPattern()->GetFont( aFont, SC_AUTOCOL_BLACK, NULL, NULL, NULL,
2259 0 : pTabViewShell->GetSelectionScriptType() );
2260 0 : if ( !aFontName.isEmpty() )
2261 0 : aFont = Font( aFontName, Size(1,1) );
2262 0 : pTabViewShell->InsertSpecialChar( aChars, aFont );
2263 0 : if( ! rReq.IsAPI() )
2264 0 : rReq.Done();
2265 0 : }
2266 : }
2267 : else
2268 : {
2269 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
2270 :
2271 : // font color doesn't matter here
2272 0 : Font aCurFont;
2273 : pTabViewShell->GetSelectionPattern()->GetFont( aCurFont, SC_AUTOCOL_BLACK, NULL, NULL, NULL,
2274 0 : pTabViewShell->GetSelectionScriptType() );
2275 :
2276 0 : SfxAllItemSet aSet( GetPool() );
2277 0 : aSet.Put( SfxBoolItem( FN_PARAM_1, false ) );
2278 0 : aSet.Put( SvxFontItem( aCurFont.GetFamily(), aCurFont.GetName(), aCurFont.GetStyleName(), aCurFont.GetPitch(), aCurFont.GetCharSet(), GetPool().GetWhich(SID_ATTR_CHAR_FONT) ) );
2279 :
2280 : SfxAbstractDialog* pDlg = pFact->CreateSfxDialog( pTabViewShell->GetDialogParent(), aSet,
2281 0 : pTabViewShell->GetViewFrame()->GetFrame().GetFrameInterface(), RID_SVXDLG_CHARMAP );
2282 :
2283 0 : if ( pDlg->Execute() == RET_OK )
2284 : {
2285 0 : SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pItem, SfxStringItem, SID_CHARMAP, false );
2286 0 : SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pFontItem, SvxFontItem, SID_ATTR_CHAR_FONT, false );
2287 :
2288 0 : if ( pItem && pFontItem )
2289 : {
2290 0 : Font aNewFont( pFontItem->GetFamilyName(), pFontItem->GetStyleName(), Size(1,1) );
2291 0 : aNewFont.SetCharSet( pFontItem->GetCharSet() );
2292 0 : aNewFont.SetPitch( pFontItem->GetPitch() );
2293 0 : pTabViewShell->InsertSpecialChar( pItem->GetValue(), aNewFont );
2294 0 : rReq.AppendItem( *pFontItem );
2295 0 : rReq.AppendItem( *pItem );
2296 0 : rReq.Done();
2297 : }
2298 : }
2299 0 : delete pDlg;
2300 : }
2301 0 : break;
2302 :
2303 : case SID_SELECT_SCENARIO:
2304 : {
2305 : // Testing
2306 :
2307 0 : if ( pReqArgs )
2308 : {
2309 : const SfxStringItem* pItem =
2310 0 : (const SfxStringItem*)&pReqArgs->Get( SID_SELECT_SCENARIO );
2311 :
2312 0 : if( pItem )
2313 : {
2314 0 : pTabViewShell->UseScenario( pItem->GetValue() );
2315 : //! why should the return value be valid?!?!
2316 0 : rReq.SetReturnValue( SfxStringItem( SID_SELECT_SCENARIO, pItem->GetValue() ) );
2317 0 : rReq.Done();
2318 : }
2319 : else
2320 : {
2321 : OSL_FAIL("NULL");
2322 : }
2323 : }
2324 : }
2325 0 : break;
2326 :
2327 : case SID_HYPERLINK_SETLINK:
2328 0 : if( pReqArgs )
2329 : {
2330 : const SfxPoolItem* pItem;
2331 0 : if( pReqArgs->HasItem( SID_HYPERLINK_SETLINK, &pItem ) )
2332 : {
2333 0 : const SvxHyperlinkItem* pHyper = (const SvxHyperlinkItem*) pItem;
2334 0 : const OUString& rName = pHyper->GetName();
2335 0 : const OUString& rURL = pHyper->GetURL();
2336 0 : const OUString& rTarget = pHyper->GetTargetFrame();
2337 0 : sal_uInt16 nType = (sal_uInt16) pHyper->GetInsertMode();
2338 :
2339 0 : pTabViewShell->InsertURL( rName, rURL, rTarget, nType );
2340 0 : rReq.Done();
2341 : }
2342 : else
2343 0 : rReq.Ignore();
2344 : }
2345 0 : break;
2346 :
2347 : case SID_OPENDLG_CONDFRMT_MANAGER:
2348 : {
2349 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
2350 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
2351 :
2352 0 : ScViewData* pData = GetViewData();
2353 0 : ScDocument* pDoc = pData->GetDocument();
2354 :
2355 0 : if(pDoc->IsTabProtected(pData->GetTabNo()))
2356 : {
2357 0 : pTabViewShell->ErrorMessage( STR_ERR_CONDFORMAT_PROTECTED );
2358 0 : break;
2359 : }
2360 :
2361 0 : ScAddress aPos(pData->GetCurX(), pData->GetCurY(), pData->GetTabNo());
2362 :
2363 0 : ScConditionalFormatList* pList = pDoc->GetCondFormList( aPos.Tab() );
2364 0 : boost::scoped_ptr<AbstractScCondFormatManagerDlg> pDlg(pFact->CreateScCondFormatMgrDlg( pTabViewShell->GetDialogParent(), pDoc, pList, aPos, RID_SCDLG_COND_FORMAT_MANAGER));
2365 0 : if(pDlg->Execute() == RET_OK && pDlg->CondFormatsChanged())
2366 : {
2367 0 : ScConditionalFormatList* pCondFormatList = pDlg->GetConditionalFormatList();
2368 0 : pData->GetDocShell()->GetDocFunc().SetConditionalFormatList(pCondFormatList, aPos.Tab());
2369 0 : }
2370 : }
2371 0 : break;
2372 :
2373 : case SID_EXTERNAL_SOURCE:
2374 : {
2375 0 : OUString aFile;
2376 0 : OUString aFilter;
2377 0 : OUString aOptions;
2378 0 : OUString aSource;
2379 0 : sal_uLong nRefresh=0;
2380 :
2381 0 : SFX_REQUEST_ARG( rReq, pFile, SfxStringItem, SID_FILE_NAME, false );
2382 0 : SFX_REQUEST_ARG( rReq, pSource, SfxStringItem, FN_PARAM_1, false );
2383 0 : if ( pFile && pSource )
2384 : {
2385 0 : aFile = pFile->GetValue();
2386 0 : aSource = pSource->GetValue();
2387 0 : SFX_REQUEST_ARG( rReq, pFilter, SfxStringItem, SID_FILTER_NAME, false );
2388 0 : if ( pFilter )
2389 0 : aFilter = pFilter->GetValue();
2390 0 : SFX_REQUEST_ARG( rReq, pOptions, SfxStringItem, SID_FILE_FILTEROPTIONS, false );
2391 0 : if ( pOptions )
2392 0 : aOptions = pOptions->GetValue();
2393 0 : SFX_REQUEST_ARG( rReq, pRefresh, SfxUInt32Item, FN_PARAM_2, false );
2394 0 : if ( pRefresh )
2395 0 : nRefresh = pRefresh->GetValue();
2396 : }
2397 : else
2398 : {
2399 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
2400 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
2401 :
2402 0 : delete pImpl->m_pLinkedDlg;
2403 : pImpl->m_pLinkedDlg =
2404 0 : pFact->CreateScLinkedAreaDlg(pTabViewShell->GetDialogParent());
2405 : OSL_ENSURE(pImpl->m_pLinkedDlg, "Dialog create fail!");
2406 0 : delete pImpl->m_pRequest;
2407 0 : pImpl->m_pRequest = new SfxRequest( rReq );
2408 0 : pImpl->m_pLinkedDlg->StartExecuteModal( LINK( this, ScCellShell, DialogClosed ) );
2409 0 : return;
2410 : }
2411 :
2412 0 : ExecuteExternalSource( aFile, aFilter, aOptions, aSource, nRefresh, rReq );
2413 : }
2414 0 : break;
2415 :
2416 :
2417 :
2418 : default:
2419 : OSL_FAIL("incorrect slot in ExecuteEdit");
2420 0 : break;
2421 : }
2422 : }
2423 :
2424 0 : void ScCellShell::ExecuteTrans( SfxRequest& rReq )
2425 : {
2426 0 : sal_Int32 nType = ScViewUtil::GetTransliterationType( rReq.GetSlot() );
2427 0 : if ( nType )
2428 : {
2429 0 : GetViewData()->GetView()->TransliterateText( nType );
2430 0 : rReq.Done();
2431 : }
2432 0 : }
2433 :
2434 0 : void ScCellShell::ExecuteRotateTrans( SfxRequest& rReq )
2435 : {
2436 0 : if( rReq.GetSlot() == SID_TRANSLITERATE_ROTATE_CASE )
2437 0 : GetViewData()->GetView()->TransliterateText( m_aRotateCase.getNextMode() );
2438 0 : }
2439 :
2440 0 : void ScCellShell::ExecuteExternalSource(
2441 : const OUString& _rFile, const OUString& _rFilter, const OUString& _rOptions,
2442 : const OUString& _rSource, sal_uLong _nRefresh, SfxRequest& _rRequest )
2443 : {
2444 0 : if ( !_rFile.isEmpty() && !_rSource.isEmpty() ) // filter may be empty
2445 : {
2446 0 : ScRange aLinkRange;
2447 0 : sal_Bool bMove = false;
2448 :
2449 0 : ScViewData* pData = GetViewData();
2450 0 : ScMarkData& rMark = pData->GetMarkData();
2451 0 : rMark.MarkToSimple();
2452 0 : if ( rMark.IsMarked() )
2453 : {
2454 0 : rMark.GetMarkArea( aLinkRange );
2455 0 : bMove = sal_True; // insert/delete cells to fit range
2456 : }
2457 : else
2458 0 : aLinkRange = ScRange( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
2459 :
2460 0 : pData->GetDocFunc().InsertAreaLink( _rFile, _rFilter, _rOptions, _rSource,
2461 0 : aLinkRange, _nRefresh, bMove, false );
2462 0 : _rRequest.Done();
2463 : }
2464 : else
2465 0 : _rRequest.Ignore();
2466 0 : }
2467 :
2468 : namespace {
2469 :
2470 0 : bool isDPSourceValid(const ScDPObject& rDPObj)
2471 : {
2472 0 : if (rDPObj.IsImportData())
2473 : {
2474 : // If the data type is database, check if the database is still valid.
2475 0 : const ScImportSourceDesc* pDesc = rDPObj.GetImportSourceDesc();
2476 0 : if (!pDesc)
2477 0 : return false;
2478 :
2479 0 : const ScDPSaveData* pSaveData = rDPObj.GetSaveData();
2480 0 : const ScDPDimensionSaveData* pDimData = NULL;
2481 0 : if (pSaveData)
2482 0 : pDimData = pSaveData->GetExistingDimensionData();
2483 :
2484 0 : const ScDPCache* pCache = pDesc->CreateCache(pDimData);
2485 0 : if (!pCache)
2486 : // cashe creation failed, probably due to invalid connection.
2487 0 : return false;
2488 : }
2489 0 : return true;
2490 : }
2491 :
2492 : }
2493 :
2494 0 : void ScCellShell::ExecuteDataPilotDialog()
2495 : {
2496 0 : ScModule* pScMod = SC_MOD();
2497 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2498 0 : ScViewData* pData = GetViewData();
2499 0 : ScDocument* pDoc = pData->GetDocument();
2500 :
2501 0 : ::boost::scoped_ptr<ScDPObject> pNewDPObject(NULL);
2502 :
2503 : // ScPivot is no longer used...
2504 : ScDPObject* pDPObj = pDoc->GetDPAtCursor(
2505 0 : pData->GetCurX(), pData->GetCurY(),
2506 0 : pData->GetTabNo() );
2507 0 : if ( pDPObj ) // on an existing table?
2508 : {
2509 0 : if (isDPSourceValid(*pDPObj))
2510 0 : pNewDPObject.reset(new ScDPObject(*pDPObj));
2511 : }
2512 : else // create new table
2513 : {
2514 0 : sal_uLong nSrcErrorId = 0;
2515 :
2516 : // select database range or data
2517 0 : pTabViewShell->GetDBData( true, SC_DB_OLD );
2518 0 : ScMarkData& rMark = GetViewData()->GetMarkData();
2519 0 : if ( !rMark.IsMarked() && !rMark.IsMultiMarked() )
2520 0 : pTabViewShell->MarkDataArea( false );
2521 :
2522 : // output to cursor position for non-sheet data
2523 0 : ScAddress aDestPos( pData->GetCurX(), pData->GetCurY(),
2524 0 : pData->GetTabNo() );
2525 :
2526 : // first select type of source data
2527 :
2528 0 : bool bEnableExt = ScDPObject::HasRegisteredSources();
2529 :
2530 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
2531 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
2532 :
2533 : ::boost::scoped_ptr<AbstractScDataPilotSourceTypeDlg> pTypeDlg(
2534 : pFact->CreateScDataPilotSourceTypeDlg(
2535 0 : pTabViewShell->GetDialogParent(), bEnableExt));
2536 :
2537 : // Populate named ranges (if any).
2538 0 : ScRangeName* pRangeName = pDoc->GetRangeName();
2539 0 : if (pRangeName)
2540 : {
2541 0 : ScRangeName::const_iterator itr = pRangeName->begin(), itrEnd = pRangeName->end();
2542 0 : for (; itr != itrEnd; ++itr)
2543 0 : pTypeDlg->AppendNamedRange(itr->second->GetName());
2544 : }
2545 :
2546 : OSL_ENSURE(pTypeDlg, "Dialog create fail!");
2547 0 : if ( pTypeDlg->Execute() == RET_OK )
2548 : {
2549 0 : if ( pTypeDlg->IsExternal() )
2550 : {
2551 0 : uno::Sequence<OUString> aSources = ScDPObject::GetRegisteredSources();
2552 : ::boost::scoped_ptr<AbstractScDataPilotServiceDlg> pServDlg(
2553 : pFact->CreateScDataPilotServiceDlg(
2554 0 : pTabViewShell->GetDialogParent(), aSources, RID_SCDLG_DAPISERVICE));
2555 :
2556 : OSL_ENSURE(pServDlg, "Dialog create fail!");
2557 0 : if ( pServDlg->Execute() == RET_OK )
2558 : {
2559 : ScDPServiceDesc aServDesc(
2560 0 : pServDlg->GetServiceName(),
2561 0 : pServDlg->GetParSource(),
2562 0 : pServDlg->GetParName(),
2563 0 : pServDlg->GetParUser(),
2564 0 : pServDlg->GetParPass() );
2565 0 : pNewDPObject.reset(new ScDPObject(pDoc));
2566 0 : pNewDPObject->SetServiceData( aServDesc );
2567 0 : }
2568 : }
2569 0 : else if ( pTypeDlg->IsDatabase() )
2570 : {
2571 : OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
2572 :
2573 : ::boost::scoped_ptr<AbstractScDataPilotDatabaseDlg> pDataDlg(
2574 : pFact->CreateScDataPilotDatabaseDlg(
2575 0 : pTabViewShell->GetDialogParent()));
2576 :
2577 : OSL_ENSURE(pDataDlg, "Dialog create fail!");
2578 0 : if ( pDataDlg->Execute() == RET_OK )
2579 : {
2580 0 : ScImportSourceDesc aImpDesc(pDoc);
2581 0 : pDataDlg->GetValues( aImpDesc );
2582 0 : pNewDPObject.reset(new ScDPObject(pDoc));
2583 0 : pNewDPObject->SetImportDesc( aImpDesc );
2584 0 : }
2585 : }
2586 0 : else if (pTypeDlg->IsNamedRange())
2587 : {
2588 0 : OUString aName = pTypeDlg->GetSelectedNamedRange();
2589 0 : ScSheetSourceDesc aShtDesc(pDoc);
2590 0 : aShtDesc.SetRangeName(aName);
2591 0 : nSrcErrorId = aShtDesc.CheckSourceRange();
2592 0 : if (!nSrcErrorId)
2593 : {
2594 0 : pNewDPObject.reset(new ScDPObject(pDoc));
2595 0 : pNewDPObject->SetSheetDesc(aShtDesc);
2596 0 : }
2597 : }
2598 : else // selection
2599 : {
2600 : //! use database ranges (select before type dialog?)
2601 0 : ScRange aRange;
2602 0 : ScMarkType eType = GetViewData()->GetSimpleArea(aRange);
2603 0 : if ( (eType & SC_MARK_SIMPLE) == SC_MARK_SIMPLE )
2604 : {
2605 : // Shrink the range to the data area.
2606 0 : SCCOL nStartCol = aRange.aStart.Col(), nEndCol = aRange.aEnd.Col();
2607 0 : SCROW nStartRow = aRange.aStart.Row(), nEndRow = aRange.aEnd.Row();
2608 0 : if (pDoc->ShrinkToDataArea(aRange.aStart.Tab(), nStartCol, nStartRow, nEndCol, nEndRow))
2609 : {
2610 0 : aRange.aStart.SetCol(nStartCol);
2611 0 : aRange.aStart.SetRow(nStartRow);
2612 0 : aRange.aEnd.SetCol(nEndCol);
2613 0 : aRange.aEnd.SetRow(nEndRow);
2614 0 : rMark.SetMarkArea(aRange);
2615 0 : pTabViewShell->MarkRange(aRange);
2616 : }
2617 :
2618 0 : bool bOK = true;
2619 0 : if ( pDoc->HasSubTotalCells( aRange ) )
2620 : {
2621 : // confirm selection if it contains SubTotal cells
2622 :
2623 : QueryBox aBox( pTabViewShell->GetDialogParent(),
2624 : WinBits(WB_YES_NO | WB_DEF_YES),
2625 0 : ScGlobal::GetRscString(STR_DATAPILOT_SUBTOTAL) );
2626 0 : if (aBox.Execute() == RET_NO)
2627 0 : bOK = false;
2628 : }
2629 0 : if (bOK)
2630 : {
2631 0 : ScSheetSourceDesc aShtDesc(pDoc);
2632 0 : aShtDesc.SetSourceRange(aRange);
2633 0 : nSrcErrorId = aShtDesc.CheckSourceRange();
2634 0 : if (!nSrcErrorId)
2635 : {
2636 0 : pNewDPObject.reset(new ScDPObject(pDoc));
2637 0 : pNewDPObject->SetSheetDesc( aShtDesc );
2638 : }
2639 :
2640 : // output below source data
2641 0 : if ( aRange.aEnd.Row()+2 <= MAXROW - 4 )
2642 0 : aDestPos = ScAddress( aRange.aStart.Col(),
2643 0 : aRange.aEnd.Row()+2,
2644 0 : aRange.aStart.Tab() );
2645 : }
2646 : }
2647 : }
2648 : }
2649 :
2650 0 : if (nSrcErrorId)
2651 : {
2652 : // Error occurred during data creation. Launch an error and bail out.
2653 0 : InfoBox aBox(pTabViewShell->GetDialogParent(), ScGlobal::GetRscString(nSrcErrorId));
2654 0 : aBox.Execute();
2655 0 : return;
2656 : }
2657 :
2658 0 : if ( pNewDPObject )
2659 0 : pNewDPObject->SetOutRange( aDestPos );
2660 : }
2661 :
2662 0 : pTabViewShell->SetDialogDPObject( pNewDPObject.get() ); // is copied
2663 0 : if ( pNewDPObject )
2664 : {
2665 : // start layout dialog
2666 :
2667 0 : sal_uInt16 nId = ScPivotLayoutWrapper::GetChildWindowId();
2668 0 : SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
2669 0 : SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
2670 0 : pScMod->SetRefDialog( nId, pWnd ? false : true );
2671 0 : }
2672 : }
2673 :
2674 0 : void ScCellShell::ExecuteXMLSourceDialog()
2675 : {
2676 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
2677 0 : if (!pFact)
2678 0 : return;
2679 :
2680 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2681 0 : if (!pTabViewShell)
2682 0 : return;
2683 :
2684 0 : ScModule* pScMod = SC_MOD();
2685 :
2686 0 : sal_uInt16 nId = ScXMLSourceDlgWrapper::GetChildWindowId();
2687 0 : SfxViewFrame* pViewFrame = pTabViewShell->GetViewFrame();
2688 0 : SfxChildWindow* pWnd = pViewFrame->GetChildWindow(nId);
2689 0 : pScMod->SetRefDialog(nId, pWnd ? false : true);
2690 : }
2691 :
2692 0 : void ScCellShell::ExecuteSubtotals(SfxRequest& rReq)
2693 : {
2694 0 : ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
2695 0 : const SfxItemSet* pArgs = rReq.GetArgs();
2696 0 : if ( pArgs )
2697 : {
2698 0 : pTabViewShell->DoSubTotals( ((const ScSubTotalItem&) pArgs->Get( SCITEM_SUBTDATA )).
2699 0 : GetSubTotalData() );
2700 0 : rReq.Done();
2701 0 : return;
2702 : }
2703 :
2704 0 : SfxAbstractTabDialog * pDlg = NULL;
2705 0 : ScSubTotalParam aSubTotalParam;
2706 0 : SfxItemSet aArgSet( GetPool(), SCITEM_SUBTDATA, SCITEM_SUBTDATA );
2707 :
2708 : // Only get existing named database range.
2709 0 : ScDBData* pDBData = pTabViewShell->GetDBData(true, SC_DB_OLD);
2710 0 : if (!pDBData)
2711 : {
2712 : // No existing DB data at this position. Create an
2713 : // anonymous DB.
2714 0 : pDBData = pTabViewShell->GetAnonymousDBData();
2715 0 : ScRange aDataRange;
2716 0 : pDBData->GetArea(aDataRange);
2717 0 : pTabViewShell->MarkRange(aDataRange, false);
2718 : }
2719 :
2720 0 : pDBData->GetSubTotalParam( aSubTotalParam );
2721 0 : aSubTotalParam.bRemoveOnly = false;
2722 :
2723 0 : aArgSet.Put( ScSubTotalItem( SCITEM_SUBTDATA, GetViewData(), &aSubTotalParam ) );
2724 0 : ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
2725 : assert(pFact); //"ScAbstractFactory create fail
2726 :
2727 0 : pDlg = pFact->CreateScSubTotalDlg(pTabViewShell->GetDialogParent(), &aArgSet);
2728 : assert(pDlg); // "Dialog create fail
2729 0 : pDlg->SetCurPageId(1);
2730 :
2731 0 : short bResult = pDlg->Execute();
2732 :
2733 0 : if ( (bResult == RET_OK) || (bResult == SCRET_REMOVE) )
2734 : {
2735 0 : const SfxItemSet* pOutSet = NULL;
2736 :
2737 0 : if ( bResult == RET_OK )
2738 : {
2739 0 : pOutSet = pDlg->GetOutputItemSet();
2740 : aSubTotalParam =
2741 : ((const ScSubTotalItem&)
2742 0 : pOutSet->Get( SCITEM_SUBTDATA )).
2743 0 : GetSubTotalData();
2744 : }
2745 : else // if (bResult == SCRET_REMOVE)
2746 : {
2747 0 : pOutSet = &aArgSet;
2748 0 : aSubTotalParam.bRemoveOnly = true;
2749 0 : aSubTotalParam.bReplace = true;
2750 : aArgSet.Put( ScSubTotalItem( SCITEM_SUBTDATA,
2751 : GetViewData(),
2752 0 : &aSubTotalParam ) );
2753 : }
2754 :
2755 0 : pTabViewShell->DoSubTotals( aSubTotalParam );
2756 0 : rReq.Done( *pOutSet );
2757 : }
2758 : else
2759 0 : GetViewData()->GetDocShell()->CancelAutoDBRange();
2760 :
2761 0 : delete pDlg;
2762 : }
2763 :
2764 0 : IMPL_LINK_NOARG(ScCellShell, DialogClosed)
2765 : {
2766 : OSL_ENSURE( pImpl->m_pLinkedDlg, "ScCellShell::DialogClosed(): invalid request" );
2767 : OSL_ENSURE( pImpl->m_pRequest, "ScCellShell::DialogClosed(): invalid request" );
2768 0 : OUString sFile, sFilter, sOptions, sSource;
2769 0 : sal_uLong nRefresh = 0;
2770 :
2771 0 : if ( pImpl->m_pLinkedDlg->GetResult() == RET_OK )
2772 : {
2773 0 : sFile = pImpl->m_pLinkedDlg->GetURL();
2774 0 : sFilter = pImpl->m_pLinkedDlg->GetFilter();
2775 0 : sOptions = pImpl->m_pLinkedDlg->GetOptions();
2776 0 : sSource = pImpl->m_pLinkedDlg->GetSource();
2777 0 : nRefresh = pImpl->m_pLinkedDlg->GetRefresh();
2778 0 : if ( !sFile.isEmpty() )
2779 0 : pImpl->m_pRequest->AppendItem( SfxStringItem( SID_FILE_NAME, sFile ) );
2780 0 : if ( !sFilter.isEmpty() )
2781 0 : pImpl->m_pRequest->AppendItem( SfxStringItem( SID_FILTER_NAME, sFilter ) );
2782 0 : if ( !sOptions.isEmpty() )
2783 0 : pImpl->m_pRequest->AppendItem( SfxStringItem( SID_FILE_FILTEROPTIONS, sOptions ) );
2784 0 : if ( !sSource.isEmpty() )
2785 0 : pImpl->m_pRequest->AppendItem( SfxStringItem( FN_PARAM_1, sSource ) );
2786 0 : if ( nRefresh )
2787 0 : pImpl->m_pRequest->AppendItem( SfxUInt32Item( FN_PARAM_2, nRefresh ) );
2788 : }
2789 :
2790 0 : ExecuteExternalSource( sFile, sFilter, sOptions, sSource, nRefresh, *(pImpl->m_pRequest) );
2791 0 : return 0;
2792 0 : }
2793 :
2794 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|