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