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