xref: /aoo4110/main/sc/source/ui/view/cellsh1.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski //svdraw.hxx
31*b1cdbd2cSJim Jagielski #define _SDR_NOITEMS
32*b1cdbd2cSJim Jagielski #define _SDR_NOTOUCH
33*b1cdbd2cSJim Jagielski #define _SDR_NOTRANSFORM
34*b1cdbd2cSJim Jagielski #define _SI_NOSBXCONTROLS
35*b1cdbd2cSJim Jagielski #define _VCONT_HXX
36*b1cdbd2cSJim Jagielski #define _SI_NOOTHERFORMS
37*b1cdbd2cSJim Jagielski #define _VCTRLS_HXX
38*b1cdbd2cSJim Jagielski #define _SI_NOCONTROL
39*b1cdbd2cSJim Jagielski #define _SETBRW_HXX
40*b1cdbd2cSJim Jagielski #define _VCBRW_HXX
41*b1cdbd2cSJim Jagielski #define _SI_NOSBXCONTROLS
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
44*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/TextConversionOption.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/sheet/DataPilotFieldFilter.hpp>
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski #include "scitems.hxx"
48*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski #define _ZFORLIST_DECLARE_TABLE
51*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
52*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx>
53*b1cdbd2cSJim Jagielski #include <svl/zforlist.hxx>
54*b1cdbd2cSJim Jagielski #include <svl/zformat.hxx>
55*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
56*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
57*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
58*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx>
59*b1cdbd2cSJim Jagielski #include <sot/formats.hxx>
60*b1cdbd2cSJim Jagielski #include <svx/postattr.hxx>
61*b1cdbd2cSJim Jagielski #include <editeng/fontitem.hxx>
62*b1cdbd2cSJim Jagielski #include <svx/clipfmtitem.hxx>
63*b1cdbd2cSJim Jagielski #include <sfx2/passwd.hxx>
64*b1cdbd2cSJim Jagielski #include <svx/hlnkitem.hxx>
65*b1cdbd2cSJim Jagielski #include <basic/sbxcore.hxx>
66*b1cdbd2cSJim Jagielski #include <unotools/useroptions.hxx>
67*b1cdbd2cSJim Jagielski #include <vcl/waitobj.hxx>
68*b1cdbd2cSJim Jagielski #include <unotools/localedatawrapper.hxx>
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski #include "cellsh.hxx"
71*b1cdbd2cSJim Jagielski #include "sc.hrc"
72*b1cdbd2cSJim Jagielski #include "document.hxx"
73*b1cdbd2cSJim Jagielski #include "patattr.hxx"
74*b1cdbd2cSJim Jagielski #include "scmod.hxx"
75*b1cdbd2cSJim Jagielski #include "scresid.hxx"
76*b1cdbd2cSJim Jagielski #include "tabvwsh.hxx"
77*b1cdbd2cSJim Jagielski //CHINA001 #include "inscldlg.hxx"
78*b1cdbd2cSJim Jagielski //CHINA001 #include "inscodlg.hxx"
79*b1cdbd2cSJim Jagielski //CHINA001 #include "delcldlg.hxx"
80*b1cdbd2cSJim Jagielski //CHINA001 #include "delcodlg.hxx"
81*b1cdbd2cSJim Jagielski //CHINA001 #include "filldlg.hxx"
82*b1cdbd2cSJim Jagielski //CHINA001 #include "groupdlg.hxx"
83*b1cdbd2cSJim Jagielski #include "impex.hxx"
84*b1cdbd2cSJim Jagielski #include "reffind.hxx"
85*b1cdbd2cSJim Jagielski //CHINA001 #include "namecrea.hxx"
86*b1cdbd2cSJim Jagielski #include "uiitems.hxx"
87*b1cdbd2cSJim Jagielski #include "reffact.hxx"
88*b1cdbd2cSJim Jagielski //CHINA001 #include "namepast.hxx"
89*b1cdbd2cSJim Jagielski #include "inputhdl.hxx"
90*b1cdbd2cSJim Jagielski #include "transobj.hxx"
91*b1cdbd2cSJim Jagielski #include "drwtrans.hxx"
92*b1cdbd2cSJim Jagielski //CHINA001 #include "linkarea.hxx"
93*b1cdbd2cSJim Jagielski #include "docfunc.hxx"
94*b1cdbd2cSJim Jagielski #include "editable.hxx"
95*b1cdbd2cSJim Jagielski #include "dpobject.hxx"
96*b1cdbd2cSJim Jagielski #include "dpsave.hxx"
97*b1cdbd2cSJim Jagielski #include "dpgroup.hxx"      // for ScDPNumGroupInfo
98*b1cdbd2cSJim Jagielski #include "spellparam.hxx"
99*b1cdbd2cSJim Jagielski #include "postit.hxx"
100*b1cdbd2cSJim Jagielski #include "clipparam.hxx"
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski #include "globstr.hrc"
103*b1cdbd2cSJim Jagielski #include "scui_def.hxx" //CHINA001
104*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx> //CHINA001
105*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc> //CHINA001
106*b1cdbd2cSJim Jagielski #include "scabstdlg.hxx" //CHINA001
107*b1cdbd2cSJim Jagielski #define IS_AVAILABLE(WhichId,ppItem) \
108*b1cdbd2cSJim Jagielski     (pReqArgs->GetItemState((WhichId), sal_True, ppItem ) == SFX_ITEM_SET)
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski #define C2U(cChar)  rtl::OUString::createFromAscii(cChar)
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
113*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp>
114*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
115*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
116*b1cdbd2cSJim Jagielski #include <cppuhelper/bootstrap.hxx>
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
119*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
120*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
ExecuteEdit(SfxRequest & rReq)123*b1cdbd2cSJim Jagielski void ScCellShell::ExecuteEdit( SfxRequest& rReq )
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski 	ScModule*			pScMod		= SC_MOD();
126*b1cdbd2cSJim Jagielski 	ScTabViewShell*	pTabViewShell  	= GetViewData()->GetViewShell();
127*b1cdbd2cSJim Jagielski 	SfxBindings&		rBindings	= pTabViewShell->GetViewFrame()->GetBindings();
128*b1cdbd2cSJim Jagielski 	const SfxItemSet*	pReqArgs	= rReq.GetArgs();
129*b1cdbd2cSJim Jagielski 	sal_uInt16				nSlot		= rReq.GetSlot();
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 	pTabViewShell->HideListBox();					// Autofilter-DropDown-Listbox
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 									// Eingabe beenden
134*b1cdbd2cSJim Jagielski 	if ( GetViewData()->HasEditView( GetViewData()->GetActivePart() ) )
135*b1cdbd2cSJim Jagielski 	{
136*b1cdbd2cSJim Jagielski 		switch ( nSlot )
137*b1cdbd2cSJim Jagielski 		{
138*b1cdbd2cSJim Jagielski 			case FID_DEFINE_NAME:
139*b1cdbd2cSJim Jagielski 			case FID_USE_NAME:
140*b1cdbd2cSJim Jagielski 			case FID_INSERT_NAME:
141*b1cdbd2cSJim Jagielski             case SID_SPELL_DIALOG:
142*b1cdbd2cSJim Jagielski             case SID_HANGUL_HANJA_CONVERSION:
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 			pScMod->InputEnterHandler();
145*b1cdbd2cSJim Jagielski 			pTabViewShell->UpdateInputHandler();
146*b1cdbd2cSJim Jagielski 			break;
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 			default:
149*b1cdbd2cSJim Jagielski 			break;
150*b1cdbd2cSJim Jagielski 		}
151*b1cdbd2cSJim Jagielski 	}
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 	switch ( nSlot )
154*b1cdbd2cSJim Jagielski 	{
155*b1cdbd2cSJim Jagielski 		//
156*b1cdbd2cSJim Jagielski 		//	Einfuegen / Loeschen von Zellen / Zeilen / Spalten
157*b1cdbd2cSJim Jagielski 		//
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 		case FID_INS_ROW:
160*b1cdbd2cSJim Jagielski 			pTabViewShell->InsertCells(INS_INSROWS);
161*b1cdbd2cSJim Jagielski 			rReq.Done();
162*b1cdbd2cSJim Jagielski 			break;
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 		case FID_INS_COLUMN:
165*b1cdbd2cSJim Jagielski 			pTabViewShell->InsertCells(INS_INSCOLS);
166*b1cdbd2cSJim Jagielski 			rReq.Done();
167*b1cdbd2cSJim Jagielski 			break;
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski 		case FID_INS_CELLSDOWN:
170*b1cdbd2cSJim Jagielski 			pTabViewShell->InsertCells(INS_CELLSDOWN);
171*b1cdbd2cSJim Jagielski 			rReq.Done();
172*b1cdbd2cSJim Jagielski 			break;
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 		case FID_INS_CELLSRIGHT:
175*b1cdbd2cSJim Jagielski 			pTabViewShell->InsertCells(INS_CELLSRIGHT);
176*b1cdbd2cSJim Jagielski 			rReq.Done();
177*b1cdbd2cSJim Jagielski 			break;
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 		case SID_DEL_ROWS:
180*b1cdbd2cSJim Jagielski 			pTabViewShell->DeleteCells( DEL_DELROWS );
181*b1cdbd2cSJim Jagielski 			rReq.Done();
182*b1cdbd2cSJim Jagielski 			break;
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski 		case SID_DEL_COLS:
185*b1cdbd2cSJim Jagielski 			pTabViewShell->DeleteCells( DEL_DELCOLS );
186*b1cdbd2cSJim Jagielski 			rReq.Done();
187*b1cdbd2cSJim Jagielski 			break;
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski 		case FID_INS_CELL:
190*b1cdbd2cSJim Jagielski 			{
191*b1cdbd2cSJim Jagielski 				InsCellCmd eCmd=INS_NONE;
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski 				if ( pReqArgs )
194*b1cdbd2cSJim Jagielski 				{
195*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pItem;
196*b1cdbd2cSJim Jagielski 					String aFlags;
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FID_INS_CELL, &pItem ) )
199*b1cdbd2cSJim Jagielski 						aFlags = ((const SfxStringItem*)pItem)->GetValue();
200*b1cdbd2cSJim Jagielski 					if( aFlags.Len() )
201*b1cdbd2cSJim Jagielski 					{
202*b1cdbd2cSJim Jagielski 						switch( aFlags.GetChar(0) )
203*b1cdbd2cSJim Jagielski 						{
204*b1cdbd2cSJim Jagielski 							case 'V': eCmd = INS_CELLSDOWN ;break;
205*b1cdbd2cSJim Jagielski 							case '>': eCmd = INS_CELLSRIGHT ;break;
206*b1cdbd2cSJim Jagielski 							case 'R': eCmd = INS_INSROWS ;break;
207*b1cdbd2cSJim Jagielski 							case 'C': eCmd = INS_INSCOLS ;break;
208*b1cdbd2cSJim Jagielski 						}
209*b1cdbd2cSJim Jagielski 					}
210*b1cdbd2cSJim Jagielski 				}
211*b1cdbd2cSJim Jagielski 				else
212*b1cdbd2cSJim Jagielski 				{
213*b1cdbd2cSJim Jagielski 					if ( GetViewData()->SimpleColMarked() )
214*b1cdbd2cSJim Jagielski 						eCmd = INS_INSCOLS;
215*b1cdbd2cSJim Jagielski 					else if ( GetViewData()->SimpleRowMarked() )
216*b1cdbd2cSJim Jagielski 						eCmd = INS_INSROWS;
217*b1cdbd2cSJim Jagielski 					else
218*b1cdbd2cSJim Jagielski 					{
219*b1cdbd2cSJim Jagielski 						ScDocument* pDoc = GetViewData()->GetDocument();
220*b1cdbd2cSJim Jagielski 						sal_Bool bTheFlag=(pDoc->GetChangeTrack()!=NULL);
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski //CHINA001						ScInsertCellDlg* pDlg = new ScInsertCellDlg( pTabViewShell->GetDialogParent(),
223*b1cdbd2cSJim Jagielski //CHINA001						bTheFlag);
224*b1cdbd2cSJim Jagielski 						ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
225*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 						AbstractScInsertCellDlg* pDlg = pFact->CreateScInsertCellDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_INSCELL, bTheFlag);
228*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
229*b1cdbd2cSJim Jagielski 						if (pDlg->Execute() == RET_OK)
230*b1cdbd2cSJim Jagielski 							eCmd = pDlg->GetInsCellCmd();
231*b1cdbd2cSJim Jagielski 						delete pDlg;
232*b1cdbd2cSJim Jagielski 					}
233*b1cdbd2cSJim Jagielski 				}
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 				if (eCmd!=INS_NONE)
236*b1cdbd2cSJim Jagielski 				{
237*b1cdbd2cSJim Jagielski 					pTabViewShell->InsertCells( eCmd );
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 					if( ! rReq.IsAPI() )
240*b1cdbd2cSJim Jagielski 					{
241*b1cdbd2cSJim Jagielski 						String aParam;
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski 						switch( eCmd )
244*b1cdbd2cSJim Jagielski 						{
245*b1cdbd2cSJim Jagielski 							case INS_CELLSDOWN: aParam='V'; break;
246*b1cdbd2cSJim Jagielski 							case INS_CELLSRIGHT: aParam='>'; break;
247*b1cdbd2cSJim Jagielski 							case INS_INSROWS: aParam='R'; break;
248*b1cdbd2cSJim Jagielski 							case INS_INSCOLS: aParam='C'; break;
249*b1cdbd2cSJim Jagielski                             default:
250*b1cdbd2cSJim Jagielski                             {
251*b1cdbd2cSJim Jagielski                                 // added to avoid warnings
252*b1cdbd2cSJim Jagielski                             }
253*b1cdbd2cSJim Jagielski 						}
254*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( FID_INS_CELL, aParam ) );
255*b1cdbd2cSJim Jagielski 						rReq.Done();
256*b1cdbd2cSJim Jagielski 					}
257*b1cdbd2cSJim Jagielski 				}
258*b1cdbd2cSJim Jagielski 			}
259*b1cdbd2cSJim Jagielski 			break;
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski 		case FID_DELETE_CELL:
262*b1cdbd2cSJim Jagielski 			{
263*b1cdbd2cSJim Jagielski 				DelCellCmd eCmd = DEL_NONE;
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 				if ( pReqArgs )
266*b1cdbd2cSJim Jagielski 				{
267*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pItem;
268*b1cdbd2cSJim Jagielski 					String aFlags;
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FID_DELETE_CELL, &pItem ) )
271*b1cdbd2cSJim Jagielski 						aFlags = ((const SfxStringItem*)pItem)->GetValue();
272*b1cdbd2cSJim Jagielski 					if( aFlags.Len() )
273*b1cdbd2cSJim Jagielski 					{
274*b1cdbd2cSJim Jagielski 						switch( aFlags.GetChar(0) )
275*b1cdbd2cSJim Jagielski 						{
276*b1cdbd2cSJim Jagielski 							case 'U': eCmd = DEL_CELLSUP ;break;
277*b1cdbd2cSJim Jagielski 							case 'L': eCmd = DEL_CELLSLEFT ;break;
278*b1cdbd2cSJim Jagielski 							case 'R': eCmd = DEL_DELROWS ;break;
279*b1cdbd2cSJim Jagielski 							case 'C': eCmd = DEL_DELCOLS ;break;
280*b1cdbd2cSJim Jagielski 						}
281*b1cdbd2cSJim Jagielski 					}
282*b1cdbd2cSJim Jagielski 				}
283*b1cdbd2cSJim Jagielski 				else
284*b1cdbd2cSJim Jagielski 				{
285*b1cdbd2cSJim Jagielski 					if ( GetViewData()->SimpleColMarked() )
286*b1cdbd2cSJim Jagielski 						eCmd = DEL_DELCOLS;
287*b1cdbd2cSJim Jagielski 					else if ( GetViewData()->SimpleRowMarked() )
288*b1cdbd2cSJim Jagielski 						eCmd = DEL_DELROWS;
289*b1cdbd2cSJim Jagielski 					else
290*b1cdbd2cSJim Jagielski 					{
291*b1cdbd2cSJim Jagielski                         ScRange aRange;
292*b1cdbd2cSJim Jagielski 						ScDocument* pDoc = GetViewData()->GetDocument();
293*b1cdbd2cSJim Jagielski 						sal_Bool bTheFlag=GetViewData()->IsMultiMarked() ||
294*b1cdbd2cSJim Jagielski                             (GetViewData()->GetSimpleArea(aRange) == SC_MARK_SIMPLE_FILTERED) ||
295*b1cdbd2cSJim Jagielski                             (pDoc->GetChangeTrack() != NULL);
296*b1cdbd2cSJim Jagielski 
297*b1cdbd2cSJim Jagielski 						//CHINA001 ScDeleteCellDlg* pDlg = new ScDeleteCellDlg(
298*b1cdbd2cSJim Jagielski 						//CHINA001 		pTabViewShell->GetDialogParent(),bTheFlag);
299*b1cdbd2cSJim Jagielski 						ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
300*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski 						AbstractScDeleteCellDlg* pDlg = pFact->CreateScDeleteCellDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_DELCELL, bTheFlag );
303*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
304*b1cdbd2cSJim Jagielski 
305*b1cdbd2cSJim Jagielski 						if (pDlg->Execute() == RET_OK)
306*b1cdbd2cSJim Jagielski 							eCmd = pDlg->GetDelCellCmd();
307*b1cdbd2cSJim Jagielski 						delete pDlg;
308*b1cdbd2cSJim Jagielski 					}
309*b1cdbd2cSJim Jagielski 				}
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski 				if (eCmd != DEL_NONE )
312*b1cdbd2cSJim Jagielski 				{
313*b1cdbd2cSJim Jagielski 					pTabViewShell->DeleteCells( eCmd );
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski 					if( ! rReq.IsAPI() )
316*b1cdbd2cSJim Jagielski 					{
317*b1cdbd2cSJim Jagielski 						String aParam;
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski 						switch( eCmd )
320*b1cdbd2cSJim Jagielski 						{
321*b1cdbd2cSJim Jagielski 							case DEL_CELLSUP: aParam='U'; break;
322*b1cdbd2cSJim Jagielski 							case DEL_CELLSLEFT: aParam='L'; break;
323*b1cdbd2cSJim Jagielski 							case DEL_DELROWS: aParam='R'; break;
324*b1cdbd2cSJim Jagielski 							case DEL_DELCOLS: aParam='C'; break;
325*b1cdbd2cSJim Jagielski                             default:
326*b1cdbd2cSJim Jagielski                             {
327*b1cdbd2cSJim Jagielski                                 // added to avoid warnings
328*b1cdbd2cSJim Jagielski                             }
329*b1cdbd2cSJim Jagielski 						}
330*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( FID_DELETE_CELL, aParam ) );
331*b1cdbd2cSJim Jagielski 						rReq.Done();
332*b1cdbd2cSJim Jagielski 					}
333*b1cdbd2cSJim Jagielski 				}
334*b1cdbd2cSJim Jagielski 			}
335*b1cdbd2cSJim Jagielski 			break;
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski 		//
338*b1cdbd2cSJim Jagielski 		//	Inhalte von Zellen loeschen
339*b1cdbd2cSJim Jagielski 		//
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 		case SID_DELETE_CONTENTS:
342*b1cdbd2cSJim Jagielski 			pTabViewShell->DeleteContents( IDF_CONTENTS );
343*b1cdbd2cSJim Jagielski 			rReq.Done();
344*b1cdbd2cSJim Jagielski 			break;
345*b1cdbd2cSJim Jagielski 
346*b1cdbd2cSJim Jagielski 		case SID_DELETE:
347*b1cdbd2cSJim Jagielski 			{
348*b1cdbd2cSJim Jagielski 				sal_uInt16	nFlags = IDF_NONE;
349*b1cdbd2cSJim Jagielski 
350*b1cdbd2cSJim Jagielski 				if ( pReqArgs!=NULL && pTabViewShell->SelectionEditable() )
351*b1cdbd2cSJim Jagielski 				{
352*b1cdbd2cSJim Jagielski 					const	SfxPoolItem* pItem;
353*b1cdbd2cSJim Jagielski 					String	aFlags = 'A';
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( SID_DELETE, &pItem ) )
356*b1cdbd2cSJim Jagielski 						aFlags = ((const SfxStringItem*)pItem)->GetValue();
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski 					aFlags.ToUpperAscii();
359*b1cdbd2cSJim Jagielski 					sal_Bool	bCont = sal_True;
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski 					for( xub_StrLen i=0 ; bCont && i<aFlags.Len() ; i++ )
362*b1cdbd2cSJim Jagielski 					{
363*b1cdbd2cSJim Jagielski 						switch( aFlags.GetChar(i) )
364*b1cdbd2cSJim Jagielski 						{
365*b1cdbd2cSJim Jagielski 							case 'A': // Alle
366*b1cdbd2cSJim Jagielski 							nFlags |= IDF_ALL;
367*b1cdbd2cSJim Jagielski 							bCont = sal_False; // nicht mehr weitermachen!
368*b1cdbd2cSJim Jagielski 							break;
369*b1cdbd2cSJim Jagielski 							case 'S': nFlags |= IDF_STRING;	break;
370*b1cdbd2cSJim Jagielski 							case 'V': nFlags |= IDF_VALUE; break;
371*b1cdbd2cSJim Jagielski 							case 'D': nFlags |= IDF_DATETIME; break;
372*b1cdbd2cSJim Jagielski 							case 'F': nFlags |= IDF_FORMULA; break;
373*b1cdbd2cSJim Jagielski 							case 'N': nFlags |= IDF_NOTE; break;
374*b1cdbd2cSJim Jagielski 							case 'T': nFlags |= IDF_ATTRIB; break;
375*b1cdbd2cSJim Jagielski 							case 'O': nFlags |= IDF_OBJECTS; break;
376*b1cdbd2cSJim Jagielski 						}
377*b1cdbd2cSJim Jagielski 					}
378*b1cdbd2cSJim Jagielski 				}
379*b1cdbd2cSJim Jagielski 				else
380*b1cdbd2cSJim Jagielski 				{
381*b1cdbd2cSJim Jagielski 					ScEditableTester aTester( pTabViewShell );
382*b1cdbd2cSJim Jagielski 					if (aTester.IsEditable())
383*b1cdbd2cSJim Jagielski 					{
384*b1cdbd2cSJim Jagielski 						//CHINA001 ScDeleteContentsDlg* pDlg = new ScDeleteContentsDlg( 	pTabViewShell->GetDialogParent() );
385*b1cdbd2cSJim Jagielski 						ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
386*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski 						AbstractScDeleteContentsDlg* pDlg = pFact->CreateScDeleteContentsDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_DELCONT );
389*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
390*b1cdbd2cSJim Jagielski 						ScDocument* pDoc = GetViewData()->GetDocument();
391*b1cdbd2cSJim Jagielski 						SCTAB nTab = GetViewData()->GetTabNo();
392*b1cdbd2cSJim Jagielski 						if ( pDoc->IsTabProtected(nTab) )
393*b1cdbd2cSJim Jagielski 							pDlg->DisableObjects();
394*b1cdbd2cSJim Jagielski 						if (pDlg->Execute() == RET_OK)
395*b1cdbd2cSJim Jagielski 						{
396*b1cdbd2cSJim Jagielski 							nFlags = pDlg->GetDelContentsCmdBits();
397*b1cdbd2cSJim Jagielski 						}
398*b1cdbd2cSJim Jagielski 						delete pDlg;
399*b1cdbd2cSJim Jagielski 					}
400*b1cdbd2cSJim Jagielski 					else
401*b1cdbd2cSJim Jagielski 						pTabViewShell->ErrorMessage(aTester.GetMessageId());
402*b1cdbd2cSJim Jagielski 				}
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski 				if( nFlags != IDF_NONE )
405*b1cdbd2cSJim Jagielski 				{
406*b1cdbd2cSJim Jagielski 					pTabViewShell->DeleteContents( nFlags );
407*b1cdbd2cSJim Jagielski 
408*b1cdbd2cSJim Jagielski 					if( ! rReq.IsAPI() )
409*b1cdbd2cSJim Jagielski 					{
410*b1cdbd2cSJim Jagielski 						String	aFlags;
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski 						if( nFlags == IDF_ALL )
413*b1cdbd2cSJim Jagielski 						{
414*b1cdbd2cSJim Jagielski 							aFlags += 'A';
415*b1cdbd2cSJim Jagielski 						}
416*b1cdbd2cSJim Jagielski 						else
417*b1cdbd2cSJim Jagielski 						{
418*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_STRING ) aFlags += 'S';
419*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_VALUE ) aFlags += 'V';
420*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_DATETIME ) aFlags += 'D';
421*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_FORMULA ) aFlags += 'F';
422*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_NOTE ) aFlags += 'N';
423*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_ATTRIB ) aFlags += 'T';
424*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_OBJECTS ) aFlags += 'O';
425*b1cdbd2cSJim Jagielski 						}
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( SID_DELETE, aFlags ) );
428*b1cdbd2cSJim Jagielski 						rReq.Done();
429*b1cdbd2cSJim Jagielski 					}
430*b1cdbd2cSJim Jagielski 				}
431*b1cdbd2cSJim Jagielski 			}
432*b1cdbd2cSJim Jagielski 			break;
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski 		//
435*b1cdbd2cSJim Jagielski 		//	Ausfuellen...
436*b1cdbd2cSJim Jagielski 		//
437*b1cdbd2cSJim Jagielski 
438*b1cdbd2cSJim Jagielski 		case FID_FILL_TO_BOTTOM:
439*b1cdbd2cSJim Jagielski 			pTabViewShell->FillSimple( FILL_TO_BOTTOM );
440*b1cdbd2cSJim Jagielski 			rReq.Done();
441*b1cdbd2cSJim Jagielski 			break;
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski 		case FID_FILL_TO_RIGHT:
444*b1cdbd2cSJim Jagielski 			pTabViewShell->FillSimple( FILL_TO_RIGHT );
445*b1cdbd2cSJim Jagielski 			rReq.Done();
446*b1cdbd2cSJim Jagielski 			break;
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski 		case FID_FILL_TO_TOP:
449*b1cdbd2cSJim Jagielski 			pTabViewShell->FillSimple( FILL_TO_TOP );
450*b1cdbd2cSJim Jagielski 			rReq.Done();
451*b1cdbd2cSJim Jagielski 			break;
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski 		case FID_FILL_TO_LEFT:
454*b1cdbd2cSJim Jagielski 			pTabViewShell->FillSimple( FILL_TO_LEFT );
455*b1cdbd2cSJim Jagielski 			rReq.Done();
456*b1cdbd2cSJim Jagielski 			break;
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski 		case FID_FILL_TAB:
459*b1cdbd2cSJim Jagielski 			{
460*b1cdbd2cSJim Jagielski 				sal_uInt16 nFlags = IDF_NONE;
461*b1cdbd2cSJim Jagielski 				sal_uInt16 nFunction = PASTE_NOFUNC;
462*b1cdbd2cSJim Jagielski 				sal_Bool bSkipEmpty = sal_False;
463*b1cdbd2cSJim Jagielski 				sal_Bool bAsLink	= sal_False;
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 				if ( pReqArgs!=NULL && pTabViewShell->SelectionEditable() )
466*b1cdbd2cSJim Jagielski 				{
467*b1cdbd2cSJim Jagielski 					const	SfxPoolItem* pItem;
468*b1cdbd2cSJim Jagielski 					String	aFlags = 'A';
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FID_FILL_TAB, &pItem ) )
471*b1cdbd2cSJim Jagielski 						aFlags = ((const SfxStringItem*)pItem)->GetValue();
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski 					aFlags.ToUpperAscii();
474*b1cdbd2cSJim Jagielski 					sal_Bool	bCont = sal_True;
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski 					for( xub_StrLen i=0 ; bCont && i<aFlags.Len() ; i++ )
477*b1cdbd2cSJim Jagielski 					{
478*b1cdbd2cSJim Jagielski 						switch( aFlags.GetChar(i) )
479*b1cdbd2cSJim Jagielski 						{
480*b1cdbd2cSJim Jagielski 							case 'A': // Alle
481*b1cdbd2cSJim Jagielski 							nFlags |= IDF_ALL;
482*b1cdbd2cSJim Jagielski 							bCont = sal_False; // nicht mehr weitermachen!
483*b1cdbd2cSJim Jagielski 							break;
484*b1cdbd2cSJim Jagielski 							case 'S': nFlags |= IDF_STRING;	break;
485*b1cdbd2cSJim Jagielski 							case 'V': nFlags |= IDF_VALUE; break;
486*b1cdbd2cSJim Jagielski 							case 'D': nFlags |= IDF_DATETIME; break;
487*b1cdbd2cSJim Jagielski 							case 'F': nFlags |= IDF_FORMULA; break;
488*b1cdbd2cSJim Jagielski 							case 'N': nFlags |= IDF_NOTE; break;
489*b1cdbd2cSJim Jagielski 							case 'T': nFlags |= IDF_ATTRIB; break;
490*b1cdbd2cSJim Jagielski 						}
491*b1cdbd2cSJim Jagielski 					}
492*b1cdbd2cSJim Jagielski 				}
493*b1cdbd2cSJim Jagielski 				else
494*b1cdbd2cSJim Jagielski 				{
495*b1cdbd2cSJim Jagielski //CHINA001					ScInsertContentsDlg* pDlg =
496*b1cdbd2cSJim Jagielski //CHINA001					new ScInsertContentsDlg(pTabViewShell->GetDialogParent(),
497*b1cdbd2cSJim Jagielski //CHINA001					0, /* nCheckDefaults */
498*b1cdbd2cSJim Jagielski //CHINA001					&ScGlobal::GetRscString(STR_FILL_TAB) );
499*b1cdbd2cSJim Jagielski 					ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
500*b1cdbd2cSJim Jagielski 					DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski 					AbstractScInsertContentsDlg* pDlg = pFact->CreateScInsertContentsDlg( pTabViewShell->GetDialogParent(),
503*b1cdbd2cSJim Jagielski 																							RID_SCDLG_INSCONT, 0, /* nCheckDefaults */
504*b1cdbd2cSJim Jagielski 																							&ScGlobal::GetRscString(STR_FILL_TAB));
505*b1cdbd2cSJim Jagielski 					DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
506*b1cdbd2cSJim Jagielski 					pDlg->SetFillMode(sal_True);
507*b1cdbd2cSJim Jagielski 
508*b1cdbd2cSJim Jagielski 					if (pDlg->Execute() == RET_OK)
509*b1cdbd2cSJim Jagielski 					{
510*b1cdbd2cSJim Jagielski 						nFlags	   = pDlg->GetInsContentsCmdBits();
511*b1cdbd2cSJim Jagielski 						nFunction  = pDlg->GetFormulaCmdBits();
512*b1cdbd2cSJim Jagielski 						bSkipEmpty = pDlg->IsSkipEmptyCells();
513*b1cdbd2cSJim Jagielski 						bAsLink	   = pDlg->IsLink();
514*b1cdbd2cSJim Jagielski 						//	MoveMode gibt's bei Tabelle fuellen nicht
515*b1cdbd2cSJim Jagielski 					}
516*b1cdbd2cSJim Jagielski 					delete pDlg;
517*b1cdbd2cSJim Jagielski 				}
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski 				if( nFlags != IDF_NONE )
520*b1cdbd2cSJim Jagielski 				{
521*b1cdbd2cSJim Jagielski 					pTabViewShell->FillTab( nFlags, nFunction, bSkipEmpty, bAsLink );
522*b1cdbd2cSJim Jagielski 
523*b1cdbd2cSJim Jagielski 					if( ! rReq.IsAPI() )
524*b1cdbd2cSJim Jagielski 					{
525*b1cdbd2cSJim Jagielski 						String	aFlags;
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski 						if( nFlags == IDF_ALL )
528*b1cdbd2cSJim Jagielski 						{
529*b1cdbd2cSJim Jagielski 							aFlags += 'A';
530*b1cdbd2cSJim Jagielski 						}
531*b1cdbd2cSJim Jagielski 						else
532*b1cdbd2cSJim Jagielski 						{
533*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_STRING ) aFlags += 'S';
534*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_VALUE ) aFlags += 'V';
535*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_DATETIME ) aFlags += 'D';
536*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_FORMULA ) aFlags += 'F';
537*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_NOTE ) aFlags += 'N';
538*b1cdbd2cSJim Jagielski 							if( nFlags & IDF_ATTRIB ) aFlags += 'T';
539*b1cdbd2cSJim Jagielski 						}
540*b1cdbd2cSJim Jagielski 
541*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( FID_FILL_TAB, aFlags ) );
542*b1cdbd2cSJim Jagielski 						rReq.Done();
543*b1cdbd2cSJim Jagielski 					}
544*b1cdbd2cSJim Jagielski 				}
545*b1cdbd2cSJim Jagielski 			}
546*b1cdbd2cSJim Jagielski 			break;
547*b1cdbd2cSJim Jagielski 
548*b1cdbd2cSJim Jagielski 		case FID_FILL_SERIES:
549*b1cdbd2cSJim Jagielski 			{
550*b1cdbd2cSJim Jagielski 				SCCOL nStartCol;
551*b1cdbd2cSJim Jagielski 				SCROW nStartRow;
552*b1cdbd2cSJim Jagielski 				SCTAB nStartTab;
553*b1cdbd2cSJim Jagielski 				SCCOL nEndCol;
554*b1cdbd2cSJim Jagielski 				SCROW nEndRow;
555*b1cdbd2cSJim Jagielski 				SCTAB nEndTab;
556*b1cdbd2cSJim Jagielski 				sal_uInt16 nPossDir = FDS_OPT_NONE;
557*b1cdbd2cSJim Jagielski 				FillDir		eFillDir	 = FILL_TO_BOTTOM;
558*b1cdbd2cSJim Jagielski 				FillCmd		eFillCmd	 = FILL_LINEAR;
559*b1cdbd2cSJim Jagielski 				FillDateCmd	eFillDateCmd = FILL_DAY;
560*b1cdbd2cSJim Jagielski 				double fStartVal = MAXDOUBLE;
561*b1cdbd2cSJim Jagielski 				double fIncVal	 = 1;
562*b1cdbd2cSJim Jagielski 				double fMaxVal	 = MAXDOUBLE;
563*b1cdbd2cSJim Jagielski 				sal_Bool   bDoIt	 = sal_False;
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski 				GetViewData()->GetSimpleArea( nStartCol, nStartRow, nStartTab,
566*b1cdbd2cSJim Jagielski 											  nEndCol, nEndRow, nEndTab );
567*b1cdbd2cSJim Jagielski 
568*b1cdbd2cSJim Jagielski 				if( nStartCol!=nEndCol )
569*b1cdbd2cSJim Jagielski 				{
570*b1cdbd2cSJim Jagielski 					nPossDir |= FDS_OPT_HORZ;
571*b1cdbd2cSJim Jagielski 					eFillDir=FILL_TO_RIGHT;
572*b1cdbd2cSJim Jagielski 				}
573*b1cdbd2cSJim Jagielski 
574*b1cdbd2cSJim Jagielski 				if( nStartRow!=nEndRow )
575*b1cdbd2cSJim Jagielski 				{
576*b1cdbd2cSJim Jagielski 					nPossDir |= FDS_OPT_VERT;
577*b1cdbd2cSJim Jagielski 					eFillDir=FILL_TO_BOTTOM;
578*b1cdbd2cSJim Jagielski 				}
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski 				ScDocument* 	 pDoc = GetViewData()->GetDocument();
581*b1cdbd2cSJim Jagielski 				SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski 				if( pReqArgs )
584*b1cdbd2cSJim Jagielski 				{
585*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pItem;
586*b1cdbd2cSJim Jagielski 					String	aFillDir, aFillCmd, aFillDateCmd;
587*b1cdbd2cSJim Jagielski 					String	aFillStep, aFillStart, aFillMax;
588*b1cdbd2cSJim Jagielski 					sal_uInt32 nKey;
589*b1cdbd2cSJim Jagielski 					double	fTmpVal;
590*b1cdbd2cSJim Jagielski 
591*b1cdbd2cSJim Jagielski 					bDoIt=sal_False;
592*b1cdbd2cSJim Jagielski 
593*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FID_FILL_SERIES, &pItem ) )
594*b1cdbd2cSJim Jagielski 						aFillDir = ((const SfxStringItem*)pItem)->GetValue();
595*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FN_PARAM_1, &pItem ) )
596*b1cdbd2cSJim Jagielski 						aFillCmd = ((const SfxStringItem*)pItem)->GetValue();
597*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FN_PARAM_2, &pItem ) )
598*b1cdbd2cSJim Jagielski 						aFillDateCmd = ((const SfxStringItem*)pItem)->GetValue();
599*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FN_PARAM_3, &pItem ) )
600*b1cdbd2cSJim Jagielski 						aFillStep = ((const SfxStringItem*)pItem)->GetValue();
601*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FN_PARAM_4, &pItem ) )
602*b1cdbd2cSJim Jagielski 						aFillStart = ((const SfxStringItem*)pItem)->GetValue();
603*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FN_PARAM_5, &pItem ) )
604*b1cdbd2cSJim Jagielski 						aFillMax = ((const SfxStringItem*)pItem)->GetValue();
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski 					if( aFillDir.Len() )
607*b1cdbd2cSJim Jagielski 						switch( aFillDir.GetChar(0) )
608*b1cdbd2cSJim Jagielski 						{
609*b1cdbd2cSJim Jagielski 							case 'B': case 'b': eFillDir=FILL_TO_BOTTOM; break;
610*b1cdbd2cSJim Jagielski 							case 'R': case 'r': eFillDir=FILL_TO_RIGHT; break;
611*b1cdbd2cSJim Jagielski 							case 'T': case 't': eFillDir=FILL_TO_TOP; break;
612*b1cdbd2cSJim Jagielski 							case 'L': case 'l': eFillDir=FILL_TO_LEFT; break;
613*b1cdbd2cSJim Jagielski 						}
614*b1cdbd2cSJim Jagielski 
615*b1cdbd2cSJim Jagielski 					if( aFillCmd.Len() )
616*b1cdbd2cSJim Jagielski 						switch( aFillCmd.GetChar(0) )
617*b1cdbd2cSJim Jagielski 						{
618*b1cdbd2cSJim Jagielski 							case 'S': case 's': eFillCmd=FILL_SIMPLE; break;
619*b1cdbd2cSJim Jagielski 							case 'L': case 'l': eFillCmd=FILL_LINEAR; break;
620*b1cdbd2cSJim Jagielski 							case 'G': case 'g': eFillCmd=FILL_GROWTH; break;
621*b1cdbd2cSJim Jagielski 							case 'D': case 'd': eFillCmd=FILL_DATE; break;
622*b1cdbd2cSJim Jagielski 							case 'A': case 'a': eFillCmd=FILL_AUTO; break;
623*b1cdbd2cSJim Jagielski 						}
624*b1cdbd2cSJim Jagielski 
625*b1cdbd2cSJim Jagielski 					if( aFillDateCmd.Len() )
626*b1cdbd2cSJim Jagielski 						switch( aFillDateCmd.GetChar(0) )
627*b1cdbd2cSJim Jagielski 						{
628*b1cdbd2cSJim Jagielski 							case 'D': case 'd': eFillDateCmd=FILL_DAY; break;
629*b1cdbd2cSJim Jagielski 							case 'W': case 'w': eFillDateCmd=FILL_WEEKDAY; break;
630*b1cdbd2cSJim Jagielski 							case 'M': case 'm': eFillDateCmd=FILL_MONTH; break;
631*b1cdbd2cSJim Jagielski 							case 'Y': case 'y': eFillDateCmd=FILL_YEAR; break;
632*b1cdbd2cSJim Jagielski 						}
633*b1cdbd2cSJim Jagielski 
634*b1cdbd2cSJim Jagielski 					nKey = 0;
635*b1cdbd2cSJim Jagielski 					if( pFormatter->IsNumberFormat( aFillStart, nKey, fTmpVal ))
636*b1cdbd2cSJim Jagielski 						fStartVal = fTmpVal;
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski 					nKey = 0;
639*b1cdbd2cSJim Jagielski 					if( pFormatter->IsNumberFormat( aFillStep, nKey, fTmpVal ))
640*b1cdbd2cSJim Jagielski 						fIncVal = fTmpVal;
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski 					nKey = 0;
643*b1cdbd2cSJim Jagielski 					if( pFormatter->IsNumberFormat( aFillMax, nKey, fTmpVal ))
644*b1cdbd2cSJim Jagielski 						fMaxVal = fTmpVal;
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski 					bDoIt	= sal_True;
647*b1cdbd2cSJim Jagielski 
648*b1cdbd2cSJim Jagielski 				}
649*b1cdbd2cSJim Jagielski 				else // (pReqArgs == NULL) => Dialog hochziehen
650*b1cdbd2cSJim Jagielski 				{
651*b1cdbd2cSJim Jagielski 					//
652*b1cdbd2cSJim Jagielski 					sal_uInt32 nPrivFormat;
653*b1cdbd2cSJim Jagielski 					CellType eCellType;
654*b1cdbd2cSJim Jagielski 					pDoc->GetNumberFormat( nStartCol, nStartRow, nStartTab, nPrivFormat );
655*b1cdbd2cSJim Jagielski 					pDoc->GetCellType( nStartCol, nStartRow, nStartTab,eCellType );
656*b1cdbd2cSJim Jagielski 					const SvNumberformat* pPrivEntry = pFormatter->GetEntry( nPrivFormat );
657*b1cdbd2cSJim Jagielski 					if (!pPrivEntry)
658*b1cdbd2cSJim Jagielski 					{
659*b1cdbd2cSJim Jagielski 						DBG_ERROR("Zahlformat nicht gefunden !!!");
660*b1cdbd2cSJim Jagielski 					}
661*b1cdbd2cSJim Jagielski 					else
662*b1cdbd2cSJim Jagielski 					{
663*b1cdbd2cSJim Jagielski 						short nPrivType = pPrivEntry->GetType();
664*b1cdbd2cSJim Jagielski 						if ( ( nPrivType & NUMBERFORMAT_DATE)>0)
665*b1cdbd2cSJim Jagielski 						{
666*b1cdbd2cSJim Jagielski 						   eFillCmd=FILL_DATE;
667*b1cdbd2cSJim Jagielski 						}
668*b1cdbd2cSJim Jagielski 						else if(eCellType==CELLTYPE_STRING)
669*b1cdbd2cSJim Jagielski 						{
670*b1cdbd2cSJim Jagielski 						   eFillCmd=FILL_AUTO;
671*b1cdbd2cSJim Jagielski 						}
672*b1cdbd2cSJim Jagielski 					}
673*b1cdbd2cSJim Jagielski 
674*b1cdbd2cSJim Jagielski 					//
675*b1cdbd2cSJim Jagielski 					String aStartStr;
676*b1cdbd2cSJim Jagielski 
677*b1cdbd2cSJim Jagielski 					//	Startwert nur vorbelegen, wenn nur 1 Zeile oder Spalte:
678*b1cdbd2cSJim Jagielski 					if ( nStartCol == nEndCol || nStartRow == nEndRow )
679*b1cdbd2cSJim Jagielski 					{
680*b1cdbd2cSJim Jagielski                         double fInputEndVal = 0.0;
681*b1cdbd2cSJim Jagielski 						String aEndStr;
682*b1cdbd2cSJim Jagielski 
683*b1cdbd2cSJim Jagielski 						pDoc->GetInputString( nStartCol, nStartRow, nStartTab, aStartStr);
684*b1cdbd2cSJim Jagielski 						pDoc->GetValue( nStartCol, nStartRow, nStartTab, fStartVal );
685*b1cdbd2cSJim Jagielski 
686*b1cdbd2cSJim Jagielski 
687*b1cdbd2cSJim Jagielski 						if(eFillDir==FILL_TO_BOTTOM && nStartRow < nEndRow )
688*b1cdbd2cSJim Jagielski 						{
689*b1cdbd2cSJim Jagielski 							pDoc->GetInputString( nStartCol, nStartRow+1, nStartTab, aEndStr);
690*b1cdbd2cSJim Jagielski 							if(aEndStr.Len()>0)
691*b1cdbd2cSJim Jagielski 							{
692*b1cdbd2cSJim Jagielski 								pDoc->GetValue( nStartCol, nStartRow+1, nStartTab, fInputEndVal);
693*b1cdbd2cSJim Jagielski 								fIncVal=fInputEndVal-fStartVal;
694*b1cdbd2cSJim Jagielski 							}
695*b1cdbd2cSJim Jagielski 						}
696*b1cdbd2cSJim Jagielski 						else
697*b1cdbd2cSJim Jagielski 						{
698*b1cdbd2cSJim Jagielski 							if(nStartCol < nEndCol)
699*b1cdbd2cSJim Jagielski 							{
700*b1cdbd2cSJim Jagielski 								pDoc->GetInputString( nStartCol+1, nStartRow, nStartTab, aEndStr);
701*b1cdbd2cSJim Jagielski 								if(aEndStr.Len()>0)
702*b1cdbd2cSJim Jagielski 								{
703*b1cdbd2cSJim Jagielski 									pDoc->GetValue( nStartCol+1, nStartRow, nStartTab, fInputEndVal);
704*b1cdbd2cSJim Jagielski 									fIncVal=fInputEndVal-fStartVal;
705*b1cdbd2cSJim Jagielski 								}
706*b1cdbd2cSJim Jagielski 							}
707*b1cdbd2cSJim Jagielski 						}
708*b1cdbd2cSJim Jagielski 						if(eFillCmd==FILL_DATE)
709*b1cdbd2cSJim Jagielski 						{
710*b1cdbd2cSJim Jagielski 							Date aNullDate = *pDoc->GetFormatTable()->GetNullDate();
711*b1cdbd2cSJim Jagielski 							Date aStartDate = aNullDate;
712*b1cdbd2cSJim Jagielski 							aStartDate+= (long)fStartVal;
713*b1cdbd2cSJim Jagielski 							Date aEndDate = aNullDate;
714*b1cdbd2cSJim Jagielski 							aEndDate+= (long)fInputEndVal;
715*b1cdbd2cSJim Jagielski 							double fTempDate=0;
716*b1cdbd2cSJim Jagielski 
717*b1cdbd2cSJim Jagielski 							if(aStartDate.GetYear()!=aEndDate.GetYear())
718*b1cdbd2cSJim Jagielski 							{
719*b1cdbd2cSJim Jagielski 								eFillDateCmd = FILL_YEAR;
720*b1cdbd2cSJim Jagielski 								fTempDate=aEndDate.GetYear()-aStartDate.GetYear();
721*b1cdbd2cSJim Jagielski 							}
722*b1cdbd2cSJim Jagielski 							if(aStartDate.GetMonth()!=aEndDate.GetMonth())
723*b1cdbd2cSJim Jagielski 							{
724*b1cdbd2cSJim Jagielski 								eFillDateCmd = FILL_MONTH;
725*b1cdbd2cSJim Jagielski 								fTempDate=fTempDate*12+aEndDate.GetMonth()-aStartDate.GetMonth();
726*b1cdbd2cSJim Jagielski 							}
727*b1cdbd2cSJim Jagielski 							if(aStartDate.GetDay()==aEndDate.GetDay())
728*b1cdbd2cSJim Jagielski 							{
729*b1cdbd2cSJim Jagielski 								fIncVal=fTempDate;
730*b1cdbd2cSJim Jagielski 							}
731*b1cdbd2cSJim Jagielski 						}
732*b1cdbd2cSJim Jagielski 					}
733*b1cdbd2cSJim Jagielski //CHINA001					ScFillSeriesDlg* pDlg = new ScFillSeriesDlg(
734*b1cdbd2cSJim Jagielski //CHINA001					pTabViewShell->GetDialogParent(), *pDoc,
735*b1cdbd2cSJim Jagielski //CHINA001					eFillDir, eFillCmd, eFillDateCmd,
736*b1cdbd2cSJim Jagielski //CHINA001					aStartStr, fIncVal, fMaxVal,
737*b1cdbd2cSJim Jagielski //CHINA001					nPossDir);
738*b1cdbd2cSJim Jagielski 					ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
739*b1cdbd2cSJim Jagielski 					DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
740*b1cdbd2cSJim Jagielski 
741*b1cdbd2cSJim Jagielski 					AbstractScFillSeriesDlg* pDlg = pFact->CreateScFillSeriesDlg( pTabViewShell->GetDialogParent(),
742*b1cdbd2cSJim Jagielski 															*pDoc,
743*b1cdbd2cSJim Jagielski 															eFillDir, eFillCmd, eFillDateCmd,
744*b1cdbd2cSJim Jagielski 															aStartStr, fIncVal, fMaxVal,
745*b1cdbd2cSJim Jagielski 															nPossDir,
746*b1cdbd2cSJim Jagielski 															RID_SCDLG_FILLSERIES);
747*b1cdbd2cSJim Jagielski 					DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
748*b1cdbd2cSJim Jagielski 
749*b1cdbd2cSJim Jagielski 					if ( nStartCol != nEndCol && nStartRow != nEndRow )
750*b1cdbd2cSJim Jagielski 					{
751*b1cdbd2cSJim Jagielski 						pDlg->SetEdStartValEnabled(sal_False);
752*b1cdbd2cSJim Jagielski 					}
753*b1cdbd2cSJim Jagielski 
754*b1cdbd2cSJim Jagielski 					if ( pDlg->Execute() == RET_OK )
755*b1cdbd2cSJim Jagielski 					{
756*b1cdbd2cSJim Jagielski 						eFillDir		= pDlg->GetFillDir();
757*b1cdbd2cSJim Jagielski 						eFillCmd		= pDlg->GetFillCmd();
758*b1cdbd2cSJim Jagielski 						eFillDateCmd	= pDlg->GetFillDateCmd();
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski 						if(eFillCmd==FILL_AUTO)
761*b1cdbd2cSJim Jagielski 						{
762*b1cdbd2cSJim Jagielski 							String aStr=pDlg->GetStartStr();
763*b1cdbd2cSJim Jagielski 							if(aStr.Len()>0)
764*b1cdbd2cSJim Jagielski 								pTabViewShell->EnterData( nStartCol, nStartRow, nStartTab, aStr );
765*b1cdbd2cSJim Jagielski 						}
766*b1cdbd2cSJim Jagielski 						fStartVal		= pDlg->GetStart();
767*b1cdbd2cSJim Jagielski 						fIncVal			= pDlg->GetStep();
768*b1cdbd2cSJim Jagielski 						fMaxVal			= pDlg->GetMax();
769*b1cdbd2cSJim Jagielski 						bDoIt			= sal_True;
770*b1cdbd2cSJim Jagielski 					}
771*b1cdbd2cSJim Jagielski 					delete pDlg;
772*b1cdbd2cSJim Jagielski 				}
773*b1cdbd2cSJim Jagielski 
774*b1cdbd2cSJim Jagielski 				if( bDoIt )
775*b1cdbd2cSJim Jagielski 				{
776*b1cdbd2cSJim Jagielski 					//nScFillModeMouseModifier = 0;	// kein Ctrl/Copy
777*b1cdbd2cSJim Jagielski 					pTabViewShell->FillSeries( eFillDir, eFillCmd, eFillDateCmd, fStartVal, fIncVal, fMaxVal );
778*b1cdbd2cSJim Jagielski 
779*b1cdbd2cSJim Jagielski 					if( ! rReq.IsAPI() )
780*b1cdbd2cSJim Jagielski 					{
781*b1cdbd2cSJim Jagielski 						String	aPara;
782*b1cdbd2cSJim Jagielski 						Color*	pColor=0;
783*b1cdbd2cSJim Jagielski 
784*b1cdbd2cSJim Jagielski 						switch( eFillDir )
785*b1cdbd2cSJim Jagielski 						{
786*b1cdbd2cSJim Jagielski 							case FILL_TO_BOTTOM:	aPara = 'B'; break;
787*b1cdbd2cSJim Jagielski 							case FILL_TO_RIGHT:		aPara = 'R'; break;
788*b1cdbd2cSJim Jagielski 							case FILL_TO_TOP:		aPara = 'T'; break;
789*b1cdbd2cSJim Jagielski 							case FILL_TO_LEFT:		aPara = 'L'; break;
790*b1cdbd2cSJim Jagielski 							default: aPara.Erase(); break;
791*b1cdbd2cSJim Jagielski 						}
792*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( FID_FILL_SERIES, aPara ) );
793*b1cdbd2cSJim Jagielski 
794*b1cdbd2cSJim Jagielski 						switch( eFillCmd )
795*b1cdbd2cSJim Jagielski 						{
796*b1cdbd2cSJim Jagielski 							case FILL_SIMPLE:		aPara = 'S'; break;
797*b1cdbd2cSJim Jagielski 							case FILL_LINEAR:		aPara = 'L'; break;
798*b1cdbd2cSJim Jagielski 							case FILL_GROWTH:		aPara = 'G'; break;
799*b1cdbd2cSJim Jagielski 							case FILL_DATE:			aPara = 'D'; break;
800*b1cdbd2cSJim Jagielski 							case FILL_AUTO:			aPara = 'A'; break;
801*b1cdbd2cSJim Jagielski 							default: aPara.Erase(); break;
802*b1cdbd2cSJim Jagielski 						}
803*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( FN_PARAM_1, aPara ) );
804*b1cdbd2cSJim Jagielski 
805*b1cdbd2cSJim Jagielski 						switch( eFillDateCmd )
806*b1cdbd2cSJim Jagielski 						{
807*b1cdbd2cSJim Jagielski 							case FILL_DAY:			aPara = 'D'; break;
808*b1cdbd2cSJim Jagielski 							case FILL_WEEKDAY:		aPara = 'W'; break;
809*b1cdbd2cSJim Jagielski 							case FILL_MONTH:		aPara = 'M'; break;
810*b1cdbd2cSJim Jagielski 							case FILL_YEAR:			aPara = 'Y'; break;
811*b1cdbd2cSJim Jagielski 							default: aPara.Erase(); break;
812*b1cdbd2cSJim Jagielski 						}
813*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( FN_PARAM_2, aPara ) );
814*b1cdbd2cSJim Jagielski 
815*b1cdbd2cSJim Jagielski 						sal_uLong nFormatKey = pFormatter->GetStandardFormat(NUMBERFORMAT_NUMBER,
816*b1cdbd2cSJim Jagielski 									ScGlobal::eLnge );
817*b1cdbd2cSJim Jagielski 
818*b1cdbd2cSJim Jagielski 						pFormatter->GetOutputString( fIncVal, nFormatKey, aPara, &pColor );
819*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( FN_PARAM_3, aPara ) );
820*b1cdbd2cSJim Jagielski 
821*b1cdbd2cSJim Jagielski 						pFormatter->GetOutputString( fStartVal, nFormatKey, aPara, &pColor );
822*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( FN_PARAM_4, aPara ) );
823*b1cdbd2cSJim Jagielski 
824*b1cdbd2cSJim Jagielski 						pFormatter->GetOutputString( fMaxVal, nFormatKey, aPara, &pColor );
825*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( FN_PARAM_5, aPara ) );
826*b1cdbd2cSJim Jagielski 
827*b1cdbd2cSJim Jagielski 						rReq.Done();
828*b1cdbd2cSJim Jagielski 					}
829*b1cdbd2cSJim Jagielski 				}
830*b1cdbd2cSJim Jagielski 			}
831*b1cdbd2cSJim Jagielski 			break;
832*b1cdbd2cSJim Jagielski 
833*b1cdbd2cSJim Jagielski 		case FID_FILL_AUTO:
834*b1cdbd2cSJim Jagielski 			{
835*b1cdbd2cSJim Jagielski 				SCCOL nStartCol;
836*b1cdbd2cSJim Jagielski 				SCROW nStartRow;
837*b1cdbd2cSJim Jagielski 				SCCOL nEndCol;
838*b1cdbd2cSJim Jagielski 				SCROW nEndRow;
839*b1cdbd2cSJim Jagielski 				SCTAB nStartTab, nEndTab;
840*b1cdbd2cSJim Jagielski 
841*b1cdbd2cSJim Jagielski 				GetViewData()->GetFillData( nStartCol, nStartRow, nEndCol, nEndRow );
842*b1cdbd2cSJim Jagielski 				SCCOL nFillCol = GetViewData()->GetRefEndX();
843*b1cdbd2cSJim Jagielski 				SCROW nFillRow = GetViewData()->GetRefEndY();
844*b1cdbd2cSJim Jagielski                 ScDocument* pDoc = GetViewData()->GetDocument();
845*b1cdbd2cSJim Jagielski 
846*b1cdbd2cSJim Jagielski 				if( pReqArgs != NULL )
847*b1cdbd2cSJim Jagielski 				{
848*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pItem;
849*b1cdbd2cSJim Jagielski 
850*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( FID_FILL_AUTO, &pItem ) )
851*b1cdbd2cSJim Jagielski 					{
852*b1cdbd2cSJim Jagielski 						ScAddress aScAddress;
853*b1cdbd2cSJim Jagielski 						String aArg = ((const SfxStringItem*)pItem)->GetValue();
854*b1cdbd2cSJim Jagielski 
855*b1cdbd2cSJim Jagielski 						if( aScAddress.Parse( aArg, pDoc, pDoc->GetAddressConvention() ) & SCA_VALID )
856*b1cdbd2cSJim Jagielski 						{
857*b1cdbd2cSJim Jagielski 							nFillRow = aScAddress.Row();
858*b1cdbd2cSJim Jagielski 							nFillCol = aScAddress.Col();
859*b1cdbd2cSJim Jagielski 						}
860*b1cdbd2cSJim Jagielski 					}
861*b1cdbd2cSJim Jagielski 
862*b1cdbd2cSJim Jagielski 					GetViewData()->GetSimpleArea( nStartCol,nStartRow,nStartTab,
863*b1cdbd2cSJim Jagielski 											  nEndCol,nEndRow,nEndTab );
864*b1cdbd2cSJim Jagielski 				}
865*b1cdbd2cSJim Jagielski 				else	// Aufruf per Maus
866*b1cdbd2cSJim Jagielski 				{
867*b1cdbd2cSJim Jagielski 					//	#55284# nicht innerhalb einer zusammengefassten Zelle
868*b1cdbd2cSJim Jagielski 
869*b1cdbd2cSJim Jagielski 					if ( nStartCol == nEndCol && nStartRow == nEndRow )
870*b1cdbd2cSJim Jagielski 					{
871*b1cdbd2cSJim Jagielski 						SCCOL nMergeCol = nStartCol;
872*b1cdbd2cSJim Jagielski 						SCROW nMergeRow = nStartRow;
873*b1cdbd2cSJim Jagielski 						if ( GetViewData()->GetDocument()->ExtendMerge(
874*b1cdbd2cSJim Jagielski 								nStartCol, nStartRow, nMergeCol, nMergeRow,
875*b1cdbd2cSJim Jagielski 								GetViewData()->GetTabNo() ) )
876*b1cdbd2cSJim Jagielski 						{
877*b1cdbd2cSJim Jagielski 							if ( nFillCol >= nStartCol && nFillCol <= nMergeCol && nFillRow == nStartRow )
878*b1cdbd2cSJim Jagielski 								nFillCol = nStartCol;
879*b1cdbd2cSJim Jagielski 							if ( nFillRow >= nStartRow && nFillRow <= nMergeRow && nFillCol == nStartCol )
880*b1cdbd2cSJim Jagielski 								nFillRow = nStartRow;
881*b1cdbd2cSJim Jagielski 						}
882*b1cdbd2cSJim Jagielski 					}
883*b1cdbd2cSJim Jagielski 				}
884*b1cdbd2cSJim Jagielski 
885*b1cdbd2cSJim Jagielski 				if ( nFillCol != nEndCol || nFillRow != nEndRow )
886*b1cdbd2cSJim Jagielski 				{
887*b1cdbd2cSJim Jagielski 					if ( nFillCol==nEndCol || nFillRow==nEndRow )
888*b1cdbd2cSJim Jagielski 					{
889*b1cdbd2cSJim Jagielski                         FillDir eDir = FILL_TO_BOTTOM;
890*b1cdbd2cSJim Jagielski 						SCCOLROW nCount = 0;
891*b1cdbd2cSJim Jagielski 
892*b1cdbd2cSJim Jagielski 						if ( nFillCol==nEndCol )
893*b1cdbd2cSJim Jagielski 						{
894*b1cdbd2cSJim Jagielski 							if ( nFillRow > nEndRow )
895*b1cdbd2cSJim Jagielski 							{
896*b1cdbd2cSJim Jagielski 								eDir = FILL_TO_BOTTOM;
897*b1cdbd2cSJim Jagielski 								nCount = nFillRow - nEndRow;
898*b1cdbd2cSJim Jagielski 							}
899*b1cdbd2cSJim Jagielski 							else if ( nFillRow < nStartRow )
900*b1cdbd2cSJim Jagielski 							{
901*b1cdbd2cSJim Jagielski 								eDir = FILL_TO_TOP;
902*b1cdbd2cSJim Jagielski 								nCount = nStartRow - nFillRow;
903*b1cdbd2cSJim Jagielski 							}
904*b1cdbd2cSJim Jagielski 						}
905*b1cdbd2cSJim Jagielski 						else
906*b1cdbd2cSJim Jagielski 						{
907*b1cdbd2cSJim Jagielski 							if ( nFillCol > nEndCol )
908*b1cdbd2cSJim Jagielski 							{
909*b1cdbd2cSJim Jagielski 								eDir = FILL_TO_RIGHT;
910*b1cdbd2cSJim Jagielski 								nCount = nFillCol - nEndCol;
911*b1cdbd2cSJim Jagielski 							}
912*b1cdbd2cSJim Jagielski 							else if ( nFillCol < nStartCol )
913*b1cdbd2cSJim Jagielski 							{
914*b1cdbd2cSJim Jagielski 								eDir = FILL_TO_LEFT;
915*b1cdbd2cSJim Jagielski 								nCount = nStartCol - nFillCol;
916*b1cdbd2cSJim Jagielski 							}
917*b1cdbd2cSJim Jagielski 						}
918*b1cdbd2cSJim Jagielski 
919*b1cdbd2cSJim Jagielski 						if ( nCount != 0)
920*b1cdbd2cSJim Jagielski 						{
921*b1cdbd2cSJim Jagielski 							pTabViewShell->FillAuto( eDir, nStartCol, nStartRow, nEndCol, nEndRow, nCount );
922*b1cdbd2cSJim Jagielski 
923*b1cdbd2cSJim Jagielski 							if( ! rReq.IsAPI() )
924*b1cdbd2cSJim Jagielski 							{
925*b1cdbd2cSJim Jagielski 								String	aAdrStr;
926*b1cdbd2cSJim Jagielski 								ScAddress aAdr( nFillCol, nFillRow, 0 );
927*b1cdbd2cSJim Jagielski 								aAdr.Format( aAdrStr, SCR_ABS, pDoc, pDoc->GetAddressConvention() );
928*b1cdbd2cSJim Jagielski 
929*b1cdbd2cSJim Jagielski 								rReq.AppendItem( SfxStringItem( FID_FILL_AUTO, aAdrStr ) );
930*b1cdbd2cSJim Jagielski 								rReq.Done();
931*b1cdbd2cSJim Jagielski 							}
932*b1cdbd2cSJim Jagielski 						}
933*b1cdbd2cSJim Jagielski 
934*b1cdbd2cSJim Jagielski 					}
935*b1cdbd2cSJim Jagielski 					else
936*b1cdbd2cSJim Jagielski 					{
937*b1cdbd2cSJim Jagielski 						DBG_ERROR( "Richtung nicht eindeutig fuer AutoFill" );
938*b1cdbd2cSJim Jagielski 					}
939*b1cdbd2cSJim Jagielski 				}
940*b1cdbd2cSJim Jagielski 			}
941*b1cdbd2cSJim Jagielski 			break;
942*b1cdbd2cSJim Jagielski 
943*b1cdbd2cSJim Jagielski 		//
944*b1cdbd2cSJim Jagielski 		//	Gliederung (Outlines)
945*b1cdbd2cSJim Jagielski 		//	SID_AUTO_OUTLINE, SID_OUTLINE_DELETEALL in Execute (in docsh.idl)
946*b1cdbd2cSJim Jagielski 		//
947*b1cdbd2cSJim Jagielski 
948*b1cdbd2cSJim Jagielski 		case SID_OUTLINE_HIDE:
949*b1cdbd2cSJim Jagielski             if ( GetViewData()->GetDocument()->GetDPAtCursor( GetViewData()->GetCurX(),
950*b1cdbd2cSJim Jagielski                                     GetViewData()->GetCurY(), GetViewData()->GetTabNo() ) )
951*b1cdbd2cSJim Jagielski                 pTabViewShell->SetDataPilotDetails( sal_False );
952*b1cdbd2cSJim Jagielski             else
953*b1cdbd2cSJim Jagielski                 pTabViewShell->HideMarkedOutlines();
954*b1cdbd2cSJim Jagielski 			rReq.Done();
955*b1cdbd2cSJim Jagielski 			break;
956*b1cdbd2cSJim Jagielski 
957*b1cdbd2cSJim Jagielski 		case SID_OUTLINE_SHOW:
958*b1cdbd2cSJim Jagielski             {
959*b1cdbd2cSJim Jagielski                 ScDPObject* pDPObj = GetViewData()->GetDocument()->GetDPAtCursor( GetViewData()->GetCurX(),
960*b1cdbd2cSJim Jagielski                                     GetViewData()->GetCurY(), GetViewData()->GetTabNo() );
961*b1cdbd2cSJim Jagielski                 if ( pDPObj )
962*b1cdbd2cSJim Jagielski                 {
963*b1cdbd2cSJim Jagielski                     Sequence<sheet::DataPilotFieldFilter> aFilters;
964*b1cdbd2cSJim Jagielski                     sal_uInt16 nOrientation;
965*b1cdbd2cSJim Jagielski                     if ( pTabViewShell->HasSelectionForDrillDown( nOrientation ) )
966*b1cdbd2cSJim Jagielski                     {
967*b1cdbd2cSJim Jagielski                         ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
968*b1cdbd2cSJim Jagielski                         DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
969*b1cdbd2cSJim Jagielski 
970*b1cdbd2cSJim Jagielski                         AbstractScDPShowDetailDlg* pDlg = pFact->CreateScDPShowDetailDlg(
971*b1cdbd2cSJim Jagielski                             pTabViewShell->GetDialogParent(), RID_SCDLG_DPSHOWDETAIL, *pDPObj, nOrientation );
972*b1cdbd2cSJim Jagielski                         DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
973*b1cdbd2cSJim Jagielski                         if ( pDlg->Execute() == RET_OK )
974*b1cdbd2cSJim Jagielski                         {
975*b1cdbd2cSJim Jagielski                             String aNewDimName( pDlg->GetDimensionName() );
976*b1cdbd2cSJim Jagielski                             pTabViewShell->SetDataPilotDetails( sal_True, &aNewDimName );
977*b1cdbd2cSJim Jagielski                         }
978*b1cdbd2cSJim Jagielski                     }
979*b1cdbd2cSJim Jagielski                     else if ( !pDPObj->IsServiceData() &&
980*b1cdbd2cSJim Jagielski                                pDPObj->GetDataFieldPositionData(
981*b1cdbd2cSJim Jagielski                                    ScAddress( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() ),
982*b1cdbd2cSJim Jagielski                                    aFilters ) )
983*b1cdbd2cSJim Jagielski                         pTabViewShell->ShowDataPilotSourceData( *pDPObj, aFilters );
984*b1cdbd2cSJim Jagielski                     else
985*b1cdbd2cSJim Jagielski                         pTabViewShell->SetDataPilotDetails( sal_True );
986*b1cdbd2cSJim Jagielski                 }
987*b1cdbd2cSJim Jagielski                 else
988*b1cdbd2cSJim Jagielski                     pTabViewShell->ShowMarkedOutlines();
989*b1cdbd2cSJim Jagielski     			rReq.Done();
990*b1cdbd2cSJim Jagielski             }
991*b1cdbd2cSJim Jagielski 			break;
992*b1cdbd2cSJim Jagielski 
993*b1cdbd2cSJim Jagielski 		case SID_OUTLINE_MAKE:
994*b1cdbd2cSJim Jagielski 			{
995*b1cdbd2cSJim Jagielski                 sal_Bool bColumns = sal_False;
996*b1cdbd2cSJim Jagielski 				sal_Bool bOk = sal_True;
997*b1cdbd2cSJim Jagielski 
998*b1cdbd2cSJim Jagielski 				if ( GetViewData()->GetDocument()->GetDPAtCursor( GetViewData()->GetCurX(),
999*b1cdbd2cSJim Jagielski             							GetViewData()->GetCurY(), GetViewData()->GetTabNo() ) )
1000*b1cdbd2cSJim Jagielski             	{
1001*b1cdbd2cSJim Jagielski                     ScDPNumGroupInfo aNumInfo;
1002*b1cdbd2cSJim Jagielski                     aNumInfo.Enable    = sal_True;
1003*b1cdbd2cSJim Jagielski                     aNumInfo.AutoStart = sal_True;
1004*b1cdbd2cSJim Jagielski                     aNumInfo.AutoEnd   = sal_True;
1005*b1cdbd2cSJim Jagielski                     sal_Int32 nParts = 0;
1006*b1cdbd2cSJim Jagielski                     if ( pTabViewShell->HasSelectionForDateGroup( aNumInfo, nParts ) )
1007*b1cdbd2cSJim Jagielski                     {
1008*b1cdbd2cSJim Jagielski                         ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1009*b1cdbd2cSJim Jagielski                         DBG_ASSERT( pFact, "ScAbstractFactory create fail!" );
1010*b1cdbd2cSJim Jagielski                         Date aNullDate( *GetViewData()->GetDocument()->GetFormatTable()->GetNullDate() );
1011*b1cdbd2cSJim Jagielski                         AbstractScDPDateGroupDlg* pDlg = pFact->CreateScDPDateGroupDlg(
1012*b1cdbd2cSJim Jagielski                             pTabViewShell->GetDialogParent(), RID_SCDLG_DPDATEGROUP,
1013*b1cdbd2cSJim Jagielski                             aNumInfo, nParts, aNullDate );
1014*b1cdbd2cSJim Jagielski                         DBG_ASSERT( pDlg, "Dialog create fail!" );
1015*b1cdbd2cSJim Jagielski                         if( pDlg->Execute() == RET_OK )
1016*b1cdbd2cSJim Jagielski                         {
1017*b1cdbd2cSJim Jagielski                             aNumInfo = pDlg->GetGroupInfo();
1018*b1cdbd2cSJim Jagielski                             pTabViewShell->DateGroupDataPilot( aNumInfo, pDlg->GetDatePart() );
1019*b1cdbd2cSJim Jagielski                         }
1020*b1cdbd2cSJim Jagielski                     }
1021*b1cdbd2cSJim Jagielski                     else if ( pTabViewShell->HasSelectionForNumGroup( aNumInfo ) )
1022*b1cdbd2cSJim Jagielski                     {
1023*b1cdbd2cSJim Jagielski                         ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1024*b1cdbd2cSJim Jagielski                         DBG_ASSERT( pFact, "ScAbstractFactory create fail!" );
1025*b1cdbd2cSJim Jagielski                         AbstractScDPNumGroupDlg* pDlg = pFact->CreateScDPNumGroupDlg(
1026*b1cdbd2cSJim Jagielski                             pTabViewShell->GetDialogParent(), RID_SCDLG_DPNUMGROUP, aNumInfo );
1027*b1cdbd2cSJim Jagielski                         DBG_ASSERT( pDlg, "Dialog create fail!" );
1028*b1cdbd2cSJim Jagielski                         if( pDlg->Execute() == RET_OK )
1029*b1cdbd2cSJim Jagielski                             pTabViewShell->NumGroupDataPilot( pDlg->GetGroupInfo() );
1030*b1cdbd2cSJim Jagielski                     }
1031*b1cdbd2cSJim Jagielski                     else
1032*b1cdbd2cSJim Jagielski                         pTabViewShell->GroupDataPilot();
1033*b1cdbd2cSJim Jagielski 
1034*b1cdbd2cSJim Jagielski             	    bOk = sal_False;
1035*b1cdbd2cSJim Jagielski             	}
1036*b1cdbd2cSJim Jagielski 				else if( pReqArgs != NULL )
1037*b1cdbd2cSJim Jagielski 				{
1038*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pItem;
1039*b1cdbd2cSJim Jagielski 					bOk = sal_False;
1040*b1cdbd2cSJim Jagielski 
1041*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( SID_OUTLINE_MAKE, &pItem ) )
1042*b1cdbd2cSJim Jagielski 					{
1043*b1cdbd2cSJim Jagielski 						String aCol = ((const SfxStringItem*)pItem)->GetValue();
1044*b1cdbd2cSJim Jagielski 						aCol.ToUpperAscii();
1045*b1cdbd2cSJim Jagielski 
1046*b1cdbd2cSJim Jagielski 						switch( aCol.GetChar(0) )
1047*b1cdbd2cSJim Jagielski 						{
1048*b1cdbd2cSJim Jagielski 							case 'R': bColumns=sal_False; bOk = sal_True;break;
1049*b1cdbd2cSJim Jagielski 							case 'C': bColumns=sal_True; bOk = sal_True;break;
1050*b1cdbd2cSJim Jagielski 						}
1051*b1cdbd2cSJim Jagielski 					}
1052*b1cdbd2cSJim Jagielski 				}
1053*b1cdbd2cSJim Jagielski 				else			// Dialog, wenn nicht ganze Zeilen/Spalten markiert
1054*b1cdbd2cSJim Jagielski 				{
1055*b1cdbd2cSJim Jagielski 					if ( GetViewData()->SimpleColMarked() && !GetViewData()->SimpleRowMarked() )
1056*b1cdbd2cSJim Jagielski 						bColumns = sal_True;
1057*b1cdbd2cSJim Jagielski 					else if ( !GetViewData()->SimpleColMarked() && GetViewData()->SimpleRowMarked() )
1058*b1cdbd2cSJim Jagielski 						bColumns = sal_False;
1059*b1cdbd2cSJim Jagielski 					else
1060*b1cdbd2cSJim Jagielski 					{
1061*b1cdbd2cSJim Jagielski //CHINA001						ScGroupDlg* pDlg = new ScGroupDlg(pTabViewShell->GetDialogParent(),
1062*b1cdbd2cSJim Jagielski //CHINA001						RID_SCDLG_GRP_MAKE, sal_False );
1063*b1cdbd2cSJim Jagielski 						ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1064*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
1065*b1cdbd2cSJim Jagielski 
1066*b1cdbd2cSJim Jagielski 						AbstractScGroupDlg* pDlg = pFact->CreateAbstractScGroupDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_GRP_MAKE, RID_SCDLG_GRP_MAKE,sal_False);
1067*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
1068*b1cdbd2cSJim Jagielski 						if ( pDlg->Execute() == RET_OK )
1069*b1cdbd2cSJim Jagielski 							bColumns = pDlg->GetColsChecked();
1070*b1cdbd2cSJim Jagielski 						else
1071*b1cdbd2cSJim Jagielski 							bOk = sal_False;
1072*b1cdbd2cSJim Jagielski 						delete pDlg;
1073*b1cdbd2cSJim Jagielski 					}
1074*b1cdbd2cSJim Jagielski 				}
1075*b1cdbd2cSJim Jagielski 				if (bOk)
1076*b1cdbd2cSJim Jagielski 				{
1077*b1cdbd2cSJim Jagielski 					pTabViewShell->MakeOutline( bColumns );
1078*b1cdbd2cSJim Jagielski 
1079*b1cdbd2cSJim Jagielski 					if( ! rReq.IsAPI() )
1080*b1cdbd2cSJim Jagielski 					{
1081*b1cdbd2cSJim Jagielski 						String aCol = bColumns ? 'C' : 'R';
1082*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( SID_OUTLINE_MAKE, aCol ) );
1083*b1cdbd2cSJim Jagielski 						rReq.Done();
1084*b1cdbd2cSJim Jagielski 					}
1085*b1cdbd2cSJim Jagielski 				}
1086*b1cdbd2cSJim Jagielski 			}
1087*b1cdbd2cSJim Jagielski 			break;
1088*b1cdbd2cSJim Jagielski 
1089*b1cdbd2cSJim Jagielski 		case SID_OUTLINE_REMOVE:
1090*b1cdbd2cSJim Jagielski 			{
1091*b1cdbd2cSJim Jagielski                 sal_Bool bColumns = sal_False;
1092*b1cdbd2cSJim Jagielski 				sal_Bool bOk = sal_True;
1093*b1cdbd2cSJim Jagielski 
1094*b1cdbd2cSJim Jagielski 				if ( GetViewData()->GetDocument()->GetDPAtCursor( GetViewData()->GetCurX(),
1095*b1cdbd2cSJim Jagielski             							GetViewData()->GetCurY(), GetViewData()->GetTabNo() ) )
1096*b1cdbd2cSJim Jagielski             	{
1097*b1cdbd2cSJim Jagielski             	    pTabViewShell->UngroupDataPilot();
1098*b1cdbd2cSJim Jagielski             	    bOk = sal_False;
1099*b1cdbd2cSJim Jagielski             	}
1100*b1cdbd2cSJim Jagielski 				else if( pReqArgs != NULL )
1101*b1cdbd2cSJim Jagielski 				{
1102*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pItem;
1103*b1cdbd2cSJim Jagielski 					bOk = sal_False;
1104*b1cdbd2cSJim Jagielski 
1105*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( SID_OUTLINE_REMOVE, &pItem ) )
1106*b1cdbd2cSJim Jagielski 					{
1107*b1cdbd2cSJim Jagielski 						String aCol = ((const SfxStringItem*)pItem)->GetValue();
1108*b1cdbd2cSJim Jagielski 						aCol.ToUpperAscii();
1109*b1cdbd2cSJim Jagielski 
1110*b1cdbd2cSJim Jagielski 						switch( aCol.GetChar(0) )
1111*b1cdbd2cSJim Jagielski 						{
1112*b1cdbd2cSJim Jagielski 							case 'R': bColumns=sal_False; bOk = sal_True;break;
1113*b1cdbd2cSJim Jagielski 							case 'C': bColumns=sal_True; bOk = sal_True;break;
1114*b1cdbd2cSJim Jagielski 						}
1115*b1cdbd2cSJim Jagielski 					}
1116*b1cdbd2cSJim Jagielski 				}
1117*b1cdbd2cSJim Jagielski 				else			// Dialog nur, wenn Aufheben fuer Zeilen und Spalten moeglich
1118*b1cdbd2cSJim Jagielski 				{
1119*b1cdbd2cSJim Jagielski 					sal_Bool bColPoss, bRowPoss;
1120*b1cdbd2cSJim Jagielski 					pTabViewShell->TestRemoveOutline( bColPoss, bRowPoss );
1121*b1cdbd2cSJim Jagielski 					if ( bColPoss && bRowPoss )
1122*b1cdbd2cSJim Jagielski 					{
1123*b1cdbd2cSJim Jagielski 						//CHINA001 ScGroupDlg* pDlg = new ScGroupDlg( 	pTabViewShell->GetDialogParent(),
1124*b1cdbd2cSJim Jagielski 						//CHINA001 									RID_SCDLG_GRP_KILL, sal_True );
1125*b1cdbd2cSJim Jagielski 						ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1126*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
1127*b1cdbd2cSJim Jagielski 
1128*b1cdbd2cSJim Jagielski 						AbstractScGroupDlg* pDlg = pFact->CreateAbstractScGroupDlg( pTabViewShell->GetDialogParent(), RID_SCDLG_GRP_KILL, RID_SCDLG_GRP_KILL,sal_True);
1129*b1cdbd2cSJim Jagielski 						DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
1130*b1cdbd2cSJim Jagielski 						if ( pDlg->Execute() == RET_OK )
1131*b1cdbd2cSJim Jagielski 							bColumns = pDlg->GetColsChecked();
1132*b1cdbd2cSJim Jagielski 						else
1133*b1cdbd2cSJim Jagielski 							bOk = sal_False;
1134*b1cdbd2cSJim Jagielski 						delete pDlg;
1135*b1cdbd2cSJim Jagielski 					}
1136*b1cdbd2cSJim Jagielski 					else if ( bColPoss )
1137*b1cdbd2cSJim Jagielski 						bColumns = sal_True;
1138*b1cdbd2cSJim Jagielski 					else if ( bRowPoss )
1139*b1cdbd2cSJim Jagielski 						bColumns = sal_False;
1140*b1cdbd2cSJim Jagielski 					else
1141*b1cdbd2cSJim Jagielski 						bOk = sal_False;
1142*b1cdbd2cSJim Jagielski 				}
1143*b1cdbd2cSJim Jagielski 				if (bOk)
1144*b1cdbd2cSJim Jagielski 				{
1145*b1cdbd2cSJim Jagielski 					pTabViewShell->RemoveOutline( bColumns );
1146*b1cdbd2cSJim Jagielski 
1147*b1cdbd2cSJim Jagielski 					if( ! rReq.IsAPI() )
1148*b1cdbd2cSJim Jagielski 					{
1149*b1cdbd2cSJim Jagielski 						String aCol = bColumns ? 'C' : 'R';
1150*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxStringItem( SID_OUTLINE_REMOVE, aCol ) );
1151*b1cdbd2cSJim Jagielski 						rReq.Done();
1152*b1cdbd2cSJim Jagielski 					}
1153*b1cdbd2cSJim Jagielski 				}
1154*b1cdbd2cSJim Jagielski 			}
1155*b1cdbd2cSJim Jagielski 			break;
1156*b1cdbd2cSJim Jagielski 
1157*b1cdbd2cSJim Jagielski 		//
1158*b1cdbd2cSJim Jagielski 		//	Clipboard
1159*b1cdbd2cSJim Jagielski 		//
1160*b1cdbd2cSJim Jagielski 
1161*b1cdbd2cSJim Jagielski 		case SID_COPY:				// fuer Grafiken in DrawShell
1162*b1cdbd2cSJim Jagielski 			{
1163*b1cdbd2cSJim Jagielski 				WaitObject aWait( GetViewData()->GetDialogParent() );
1164*b1cdbd2cSJim Jagielski 				pTabViewShell->CopyToClip( NULL, sal_False, sal_False, sal_True );
1165*b1cdbd2cSJim Jagielski 				rReq.Done();
1166*b1cdbd2cSJim Jagielski 			}
1167*b1cdbd2cSJim Jagielski 			break;
1168*b1cdbd2cSJim Jagielski 
1169*b1cdbd2cSJim Jagielski 		case SID_CUT:				// fuer Grafiken in DrawShell
1170*b1cdbd2cSJim Jagielski 			{
1171*b1cdbd2cSJim Jagielski 				WaitObject aWait( GetViewData()->GetDialogParent() );
1172*b1cdbd2cSJim Jagielski 				pTabViewShell->CutToClip( NULL, sal_True );
1173*b1cdbd2cSJim Jagielski 				rReq.Done();
1174*b1cdbd2cSJim Jagielski 			}
1175*b1cdbd2cSJim Jagielski 			break;
1176*b1cdbd2cSJim Jagielski 
1177*b1cdbd2cSJim Jagielski 		case SID_PASTE:
1178*b1cdbd2cSJim Jagielski             {
1179*b1cdbd2cSJim Jagielski 				PasteFromClipboard ( GetViewData(), pTabViewShell, true );
1180*b1cdbd2cSJim Jagielski                 rReq.Done();
1181*b1cdbd2cSJim Jagielski             }
1182*b1cdbd2cSJim Jagielski 			break;
1183*b1cdbd2cSJim Jagielski 
1184*b1cdbd2cSJim Jagielski 		case SID_CLIPBOARD_FORMAT_ITEMS:
1185*b1cdbd2cSJim Jagielski 			{
1186*b1cdbd2cSJim Jagielski 				WaitObject aWait( GetViewData()->GetDialogParent() );
1187*b1cdbd2cSJim Jagielski 
1188*b1cdbd2cSJim Jagielski 				sal_uLong nFormat = 0;
1189*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem;
1190*b1cdbd2cSJim Jagielski 				if ( pReqArgs &&
1191*b1cdbd2cSJim Jagielski 					 pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET &&
1192*b1cdbd2cSJim Jagielski 					 pItem->ISA(SfxUInt32Item) )
1193*b1cdbd2cSJim Jagielski 				{
1194*b1cdbd2cSJim Jagielski 					nFormat = ((const SfxUInt32Item*)pItem)->GetValue();
1195*b1cdbd2cSJim Jagielski 				}
1196*b1cdbd2cSJim Jagielski 
1197*b1cdbd2cSJim Jagielski 				if ( nFormat )
1198*b1cdbd2cSJim Jagielski 				{
1199*b1cdbd2cSJim Jagielski 					Window* pWin = GetViewData()->GetActiveWin();
1200*b1cdbd2cSJim Jagielski 					sal_Bool bCells = ( ScTransferObj::GetOwnClipboard( pWin ) != NULL );
1201*b1cdbd2cSJim Jagielski 					sal_Bool bDraw = ( ScDrawTransferObj::GetOwnClipboard( pWin ) != NULL );
1202*b1cdbd2cSJim Jagielski 					sal_Bool bOle = ( nFormat == SOT_FORMATSTR_ID_EMBED_SOURCE );
1203*b1cdbd2cSJim Jagielski 
1204*b1cdbd2cSJim Jagielski 					if ( bCells && bOle )
1205*b1cdbd2cSJim Jagielski 						pTabViewShell->PasteFromSystem();
1206*b1cdbd2cSJim Jagielski 					else if ( bDraw && bOle )
1207*b1cdbd2cSJim Jagielski 						pTabViewShell->PasteDraw();
1208*b1cdbd2cSJim Jagielski 					else
1209*b1cdbd2cSJim Jagielski 						pTabViewShell->PasteFromSystem(nFormat);
1210*b1cdbd2cSJim Jagielski 				}
1211*b1cdbd2cSJim Jagielski 				//?else
1212*b1cdbd2cSJim Jagielski 				//?	pTabViewShell->PasteFromSystem();
1213*b1cdbd2cSJim Jagielski 
1214*b1cdbd2cSJim Jagielski 				rReq.Done();
1215*b1cdbd2cSJim Jagielski 			}
1216*b1cdbd2cSJim Jagielski 			pTabViewShell->CellContentChanged();
1217*b1cdbd2cSJim Jagielski 			break;
1218*b1cdbd2cSJim Jagielski 
1219*b1cdbd2cSJim Jagielski 		case FID_INS_CELL_CONTENTS:
1220*b1cdbd2cSJim Jagielski 			{
1221*b1cdbd2cSJim Jagielski 				sal_uInt16 nFlags = IDF_NONE;
1222*b1cdbd2cSJim Jagielski 				sal_uInt16 nFunction = PASTE_NOFUNC;
1223*b1cdbd2cSJim Jagielski 				sal_Bool bSkipEmpty = sal_False;
1224*b1cdbd2cSJim Jagielski 				sal_Bool bTranspose = sal_False;
1225*b1cdbd2cSJim Jagielski 				sal_Bool bAsLink	= sal_False;
1226*b1cdbd2cSJim Jagielski 				InsCellCmd eMoveMode = INS_NONE;
1227*b1cdbd2cSJim Jagielski 
1228*b1cdbd2cSJim Jagielski 				Window* pWin = GetViewData()->GetActiveWin();
1229*b1cdbd2cSJim Jagielski 				ScDocument* pDoc = GetViewData()->GetDocument();
1230*b1cdbd2cSJim Jagielski 				sal_Bool bOtherDoc = !pDoc->IsClipboardSource();
1231*b1cdbd2cSJim Jagielski 				ScTransferObj* pOwnClip = ScTransferObj::GetOwnClipboard( pWin );
1232*b1cdbd2cSJim Jagielski 				if ( pOwnClip )
1233*b1cdbd2cSJim Jagielski 				{
1234*b1cdbd2cSJim Jagielski                     // #129384# keep a reference in case the clipboard is changed during dialog or PasteFromClip
1235*b1cdbd2cSJim Jagielski                     uno::Reference<datatransfer::XTransferable> aOwnClipRef( pOwnClip );
1236*b1cdbd2cSJim Jagielski 					if ( pReqArgs!=NULL && pTabViewShell->SelectionEditable() )
1237*b1cdbd2cSJim Jagielski 					{
1238*b1cdbd2cSJim Jagielski 						const	SfxPoolItem* pItem;
1239*b1cdbd2cSJim Jagielski 						String	aFlags = 'A';
1240*b1cdbd2cSJim Jagielski 
1241*b1cdbd2cSJim Jagielski 						if( IS_AVAILABLE( FID_INS_CELL_CONTENTS, &pItem ) )
1242*b1cdbd2cSJim Jagielski 							aFlags = ((const SfxStringItem*)pItem)->GetValue();
1243*b1cdbd2cSJim Jagielski 
1244*b1cdbd2cSJim Jagielski 						aFlags.ToUpperAscii();
1245*b1cdbd2cSJim Jagielski 						sal_Bool	bCont = sal_True;
1246*b1cdbd2cSJim Jagielski 
1247*b1cdbd2cSJim Jagielski 						for( xub_StrLen i=0 ; bCont && i<aFlags.Len() ; i++ )
1248*b1cdbd2cSJim Jagielski 						{
1249*b1cdbd2cSJim Jagielski 							switch( aFlags.GetChar(i) )
1250*b1cdbd2cSJim Jagielski 							{
1251*b1cdbd2cSJim Jagielski 								case 'A': // Alle
1252*b1cdbd2cSJim Jagielski 								nFlags |= IDF_ALL;
1253*b1cdbd2cSJim Jagielski 								bCont = sal_False; // nicht mehr weitermachen!
1254*b1cdbd2cSJim Jagielski 								break;
1255*b1cdbd2cSJim Jagielski 								case 'S': nFlags |= IDF_STRING;	break;
1256*b1cdbd2cSJim Jagielski 								case 'V': nFlags |= IDF_VALUE; break;
1257*b1cdbd2cSJim Jagielski 								case 'D': nFlags |= IDF_DATETIME; break;
1258*b1cdbd2cSJim Jagielski 								case 'F': nFlags |= IDF_FORMULA; break;
1259*b1cdbd2cSJim Jagielski 								case 'N': nFlags |= IDF_NOTE; break;
1260*b1cdbd2cSJim Jagielski 								case 'T': nFlags |= IDF_ATTRIB; break;
1261*b1cdbd2cSJim Jagielski 							}
1262*b1cdbd2cSJim Jagielski 						}
1263*b1cdbd2cSJim Jagielski 
1264*b1cdbd2cSJim Jagielski                         SFX_REQUEST_ARG( rReq, pFuncItem, SfxUInt16Item, FN_PARAM_1, sal_False );
1265*b1cdbd2cSJim Jagielski                         SFX_REQUEST_ARG( rReq, pSkipItem, SfxBoolItem, FN_PARAM_2, sal_False );
1266*b1cdbd2cSJim Jagielski                         SFX_REQUEST_ARG( rReq, pTransposeItem, SfxBoolItem, FN_PARAM_3, sal_False );
1267*b1cdbd2cSJim Jagielski                         SFX_REQUEST_ARG( rReq, pLinkItem, SfxBoolItem, FN_PARAM_4, sal_False );
1268*b1cdbd2cSJim Jagielski                         SFX_REQUEST_ARG( rReq, pMoveItem, SfxInt16Item, FN_PARAM_5, sal_False );
1269*b1cdbd2cSJim Jagielski                         if ( pFuncItem )
1270*b1cdbd2cSJim Jagielski                             nFunction = pFuncItem->GetValue();
1271*b1cdbd2cSJim Jagielski                         if ( pSkipItem )
1272*b1cdbd2cSJim Jagielski                             bSkipEmpty = pSkipItem->GetValue();
1273*b1cdbd2cSJim Jagielski                         if ( pTransposeItem )
1274*b1cdbd2cSJim Jagielski                             bTranspose = pTransposeItem->GetValue();
1275*b1cdbd2cSJim Jagielski                         if ( pLinkItem )
1276*b1cdbd2cSJim Jagielski                             bAsLink = pLinkItem->GetValue();
1277*b1cdbd2cSJim Jagielski                         if ( pMoveItem )
1278*b1cdbd2cSJim Jagielski                             eMoveMode = (InsCellCmd) pMoveItem->GetValue();
1279*b1cdbd2cSJim Jagielski 					}
1280*b1cdbd2cSJim Jagielski 					else
1281*b1cdbd2cSJim Jagielski 					{
1282*b1cdbd2cSJim Jagielski 						ScEditableTester aTester( pTabViewShell );
1283*b1cdbd2cSJim Jagielski 						if (aTester.IsEditable())
1284*b1cdbd2cSJim Jagielski 						{
1285*b1cdbd2cSJim Jagielski 							//CHINA001 ScInsertContentsDlg* pDlg = new ScInsertContentsDlg( pTabViewShell->GetDialogParent() );
1286*b1cdbd2cSJim Jagielski 							ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1287*b1cdbd2cSJim Jagielski 							DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
1288*b1cdbd2cSJim Jagielski 
1289*b1cdbd2cSJim Jagielski 							AbstractScInsertContentsDlg* pDlg = pFact->CreateScInsertContentsDlg( pTabViewShell->GetDialogParent(),
1290*b1cdbd2cSJim Jagielski 																									RID_SCDLG_INSCONT);
1291*b1cdbd2cSJim Jagielski 							DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
1292*b1cdbd2cSJim Jagielski 							pDlg->SetOtherDoc( bOtherDoc );
1293*b1cdbd2cSJim Jagielski 							// #53661# bei ChangeTrack MoveMode disablen
1294*b1cdbd2cSJim Jagielski 							pDlg->SetChangeTrack( pDoc->GetChangeTrack() != NULL );
1295*b1cdbd2cSJim Jagielski 							// #72930# cut/move references may disable shift
1296*b1cdbd2cSJim Jagielski 							// directions if source and destination ranges intersect
1297*b1cdbd2cSJim Jagielski 							if ( !bOtherDoc )
1298*b1cdbd2cSJim Jagielski 							{
1299*b1cdbd2cSJim Jagielski 								if ( pOwnClip )
1300*b1cdbd2cSJim Jagielski 								{
1301*b1cdbd2cSJim Jagielski 									ScViewData* pData = GetViewData();
1302*b1cdbd2cSJim Jagielski 									if ( pData->GetMarkData().GetTableSelect(
1303*b1cdbd2cSJim Jagielski 											pData->GetTabNo() ) )
1304*b1cdbd2cSJim Jagielski 									{
1305*b1cdbd2cSJim Jagielski 										SCCOL nPosX = pData->GetCurX();
1306*b1cdbd2cSJim Jagielski 										SCROW nPosY = pData->GetCurY();
1307*b1cdbd2cSJim Jagielski                                         SCCOL nClipStartX, nClipSizeX;
1308*b1cdbd2cSJim Jagielski                                         SCROW  nClipStartY, nClipSizeY;
1309*b1cdbd2cSJim Jagielski                                         pOwnClip->GetDocument()->GetClipStart( nClipStartX, nClipStartY );
1310*b1cdbd2cSJim Jagielski 										pOwnClip->GetDocument()->GetClipArea( nClipSizeX, nClipSizeY, sal_True );
1311*b1cdbd2cSJim Jagielski 										int nDisableShift = 0;
1312*b1cdbd2cSJim Jagielski 										if ( MAXCOL <= nPosX + nClipSizeX )
1313*b1cdbd2cSJim Jagielski 											nDisableShift |= SC_CELL_SHIFT_DISABLE_RIGHT;
1314*b1cdbd2cSJim Jagielski 										if ( MAXROW <= nPosY + nClipSizeY )
1315*b1cdbd2cSJim Jagielski 											nDisableShift |= SC_CELL_SHIFT_DISABLE_DOWN;
1316*b1cdbd2cSJim Jagielski 										if ( nDisableShift )
1317*b1cdbd2cSJim Jagielski 											pDlg->SetCellShiftDisabled( nDisableShift );
1318*b1cdbd2cSJim Jagielski 									}
1319*b1cdbd2cSJim Jagielski 								}
1320*b1cdbd2cSJim Jagielski 							}
1321*b1cdbd2cSJim Jagielski 							if (pDlg->Execute() == RET_OK)
1322*b1cdbd2cSJim Jagielski 							{
1323*b1cdbd2cSJim Jagielski 								nFlags	   = pDlg->GetInsContentsCmdBits();
1324*b1cdbd2cSJim Jagielski 								nFunction  = pDlg->GetFormulaCmdBits();
1325*b1cdbd2cSJim Jagielski 								bSkipEmpty = pDlg->IsSkipEmptyCells();
1326*b1cdbd2cSJim Jagielski 								bTranspose = pDlg->IsTranspose();
1327*b1cdbd2cSJim Jagielski 								bAsLink	   = pDlg->IsLink();
1328*b1cdbd2cSJim Jagielski 								eMoveMode  = pDlg->GetMoveMode();
1329*b1cdbd2cSJim Jagielski 							}
1330*b1cdbd2cSJim Jagielski 							delete pDlg;
1331*b1cdbd2cSJim Jagielski 						}
1332*b1cdbd2cSJim Jagielski 						else
1333*b1cdbd2cSJim Jagielski 							pTabViewShell->ErrorMessage(aTester.GetMessageId());
1334*b1cdbd2cSJim Jagielski 					}
1335*b1cdbd2cSJim Jagielski 
1336*b1cdbd2cSJim Jagielski 					if( nFlags != IDF_NONE )
1337*b1cdbd2cSJim Jagielski 					{
1338*b1cdbd2cSJim Jagielski 						{
1339*b1cdbd2cSJim Jagielski 							WaitObject aWait( GetViewData()->GetDialogParent() );
1340*b1cdbd2cSJim Jagielski 							if ( bAsLink && bOtherDoc )
1341*b1cdbd2cSJim Jagielski 								pTabViewShell->PasteFromSystem(SOT_FORMATSTR_ID_LINK);	// DDE einfuegen
1342*b1cdbd2cSJim Jagielski 							else
1343*b1cdbd2cSJim Jagielski 								pTabViewShell->PasteFromClip( nFlags, pOwnClip->GetDocument(),
1344*b1cdbd2cSJim Jagielski 									nFunction, bSkipEmpty, bTranspose, bAsLink,
1345*b1cdbd2cSJim Jagielski 									eMoveMode, IDF_NONE, sal_True );	// allow warning dialog
1346*b1cdbd2cSJim Jagielski 						}
1347*b1cdbd2cSJim Jagielski 
1348*b1cdbd2cSJim Jagielski                         if( !pReqArgs )
1349*b1cdbd2cSJim Jagielski 						{
1350*b1cdbd2cSJim Jagielski 							String	aFlags;
1351*b1cdbd2cSJim Jagielski 
1352*b1cdbd2cSJim Jagielski 							if( nFlags == IDF_ALL )
1353*b1cdbd2cSJim Jagielski 							{
1354*b1cdbd2cSJim Jagielski 								aFlags += 'A';
1355*b1cdbd2cSJim Jagielski 							}
1356*b1cdbd2cSJim Jagielski 							else
1357*b1cdbd2cSJim Jagielski 							{
1358*b1cdbd2cSJim Jagielski 								if( nFlags & IDF_STRING ) aFlags += 'S';
1359*b1cdbd2cSJim Jagielski 								if( nFlags & IDF_VALUE ) aFlags += 'V';
1360*b1cdbd2cSJim Jagielski 								if( nFlags & IDF_DATETIME ) aFlags += 'D';
1361*b1cdbd2cSJim Jagielski 								if( nFlags & IDF_FORMULA ) aFlags += 'F';
1362*b1cdbd2cSJim Jagielski 								if( nFlags & IDF_NOTE ) aFlags += 'N';
1363*b1cdbd2cSJim Jagielski 								if( nFlags & IDF_ATTRIB ) aFlags += 'T';
1364*b1cdbd2cSJim Jagielski 							}
1365*b1cdbd2cSJim Jagielski 
1366*b1cdbd2cSJim Jagielski 							rReq.AppendItem( SfxStringItem( FID_INS_CELL_CONTENTS, aFlags ) );
1367*b1cdbd2cSJim Jagielski                             rReq.AppendItem( SfxBoolItem( FN_PARAM_2, bSkipEmpty ) );
1368*b1cdbd2cSJim Jagielski                             rReq.AppendItem( SfxBoolItem( FN_PARAM_3, bTranspose ) );
1369*b1cdbd2cSJim Jagielski                             rReq.AppendItem( SfxBoolItem( FN_PARAM_4, bAsLink ) );
1370*b1cdbd2cSJim Jagielski                             rReq.AppendItem( SfxUInt16Item( FN_PARAM_1, nFunction ) );
1371*b1cdbd2cSJim Jagielski                             rReq.AppendItem( SfxInt16Item( FN_PARAM_5, (sal_Int16) eMoveMode ) );
1372*b1cdbd2cSJim Jagielski 							rReq.Done();
1373*b1cdbd2cSJim Jagielski 						}
1374*b1cdbd2cSJim Jagielski 					}
1375*b1cdbd2cSJim Jagielski 				}
1376*b1cdbd2cSJim Jagielski 			}
1377*b1cdbd2cSJim Jagielski 			pTabViewShell->CellContentChanged();		// => PasteFromXXX ???
1378*b1cdbd2cSJim Jagielski 			break;
1379*b1cdbd2cSJim Jagielski 
1380*b1cdbd2cSJim Jagielski         case SID_PASTE_SPECIAL:
1381*b1cdbd2cSJim Jagielski 			// Unterscheidung, ob eigene oder fremde Daten,
1382*b1cdbd2cSJim Jagielski 			// dadurch FID_INS_CELL_CONTENTS ueberfluessig
1383*b1cdbd2cSJim Jagielski 			{
1384*b1cdbd2cSJim Jagielski 				Window* pWin = GetViewData()->GetActiveWin();
1385*b1cdbd2cSJim Jagielski 
1386*b1cdbd2cSJim Jagielski 				//	Clipboard-ID als Parameter angegeben? Basic "PasteSpecial(Format)"
1387*b1cdbd2cSJim Jagielski                 const SfxPoolItem* pItem=NULL;
1388*b1cdbd2cSJim Jagielski 				if ( pReqArgs &&
1389*b1cdbd2cSJim Jagielski 					 pReqArgs->GetItemState(nSlot, sal_True, &pItem) == SFX_ITEM_SET &&
1390*b1cdbd2cSJim Jagielski 					 pItem->ISA(SfxUInt32Item) )
1391*b1cdbd2cSJim Jagielski 				{
1392*b1cdbd2cSJim Jagielski 					sal_uLong nFormat = ((const SfxUInt32Item*)pItem)->GetValue();
1393*b1cdbd2cSJim Jagielski                     sal_Bool bRet=sal_True;
1394*b1cdbd2cSJim Jagielski 					{
1395*b1cdbd2cSJim Jagielski 						WaitObject aWait( GetViewData()->GetDialogParent() );
1396*b1cdbd2cSJim Jagielski                         sal_Bool bDraw = ( ScDrawTransferObj::GetOwnClipboard( pWin ) != NULL );
1397*b1cdbd2cSJim Jagielski                         if ( bDraw && nFormat == SOT_FORMATSTR_ID_EMBED_SOURCE )
1398*b1cdbd2cSJim Jagielski                             pTabViewShell->PasteDraw();
1399*b1cdbd2cSJim Jagielski                         else
1400*b1cdbd2cSJim Jagielski                             bRet = pTabViewShell->PasteFromSystem(nFormat, sal_True);       // TRUE: keine Fehlermeldungen
1401*b1cdbd2cSJim Jagielski 					}
1402*b1cdbd2cSJim Jagielski 
1403*b1cdbd2cSJim Jagielski                     if ( bRet )
1404*b1cdbd2cSJim Jagielski                     {
1405*b1cdbd2cSJim Jagielski                         rReq.SetReturnValue(SfxInt16Item(nSlot, bRet)); // 1 = Erfolg, 0 = Fehler
1406*b1cdbd2cSJim Jagielski                         rReq.Done();
1407*b1cdbd2cSJim Jagielski                     }
1408*b1cdbd2cSJim Jagielski                     else
1409*b1cdbd2cSJim Jagielski                         // if format is not available -> fallback to request without parameters
1410*b1cdbd2cSJim Jagielski                         pItem = NULL;
1411*b1cdbd2cSJim Jagielski 				}
1412*b1cdbd2cSJim Jagielski 
1413*b1cdbd2cSJim Jagielski                 if ( !pItem )
1414*b1cdbd2cSJim Jagielski                 {
1415*b1cdbd2cSJim Jagielski                     if ( ScTransferObj::GetOwnClipboard( pWin ) )  // own cell data
1416*b1cdbd2cSJim Jagielski                     {
1417*b1cdbd2cSJim Jagielski                         rReq.SetSlot( FID_INS_CELL_CONTENTS );
1418*b1cdbd2cSJim Jagielski                         ExecuteSlot( rReq, GetInterface() );
1419*b1cdbd2cSJim Jagielski                         rReq.SetReturnValue(SfxInt16Item(nSlot, 1));    // 1 = Erfolg
1420*b1cdbd2cSJim Jagielski                     }
1421*b1cdbd2cSJim Jagielski                     else                                    // Zeichenobjekte oder fremde Daten
1422*b1cdbd2cSJim Jagielski                     {
1423*b1cdbd2cSJim Jagielski                         sal_Bool bDraw = ( ScDrawTransferObj::GetOwnClipboard( pWin ) != NULL );
1424*b1cdbd2cSJim Jagielski 
1425*b1cdbd2cSJim Jagielski                         SvxClipboardFmtItem aFormats( SID_CLIPBOARD_FORMAT_ITEMS );
1426*b1cdbd2cSJim Jagielski                         GetPossibleClipboardFormats( aFormats );
1427*b1cdbd2cSJim Jagielski 
1428*b1cdbd2cSJim Jagielski                         sal_uInt16 nFormatCount = aFormats.Count();
1429*b1cdbd2cSJim Jagielski                         if ( nFormatCount )
1430*b1cdbd2cSJim Jagielski                         {
1431*b1cdbd2cSJim Jagielski                             SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1432*b1cdbd2cSJim Jagielski                             SfxAbstractPasteDialog* pDlg = pFact->CreatePasteDialog( pTabViewShell->GetDialogParent() );
1433*b1cdbd2cSJim Jagielski                             if ( pDlg )
1434*b1cdbd2cSJim Jagielski                             {
1435*b1cdbd2cSJim Jagielski                             for (sal_uInt16 i=0; i<nFormatCount; i++)
1436*b1cdbd2cSJim Jagielski                             {
1437*b1cdbd2cSJim Jagielski                                 sal_uLong nFormatId = aFormats.GetClipbrdFormatId( i );
1438*b1cdbd2cSJim Jagielski                                 String aName = aFormats.GetClipbrdFormatName( i );
1439*b1cdbd2cSJim Jagielski                                 // special case for paste dialog: '*' is replaced by object type
1440*b1cdbd2cSJim Jagielski                                 if ( nFormatId == SOT_FORMATSTR_ID_EMBED_SOURCE )
1441*b1cdbd2cSJim Jagielski                                     aName.Assign((sal_Unicode)'*');
1442*b1cdbd2cSJim Jagielski                                 pDlg->Insert( nFormatId, aName );
1443*b1cdbd2cSJim Jagielski                             }
1444*b1cdbd2cSJim Jagielski 
1445*b1cdbd2cSJim Jagielski                             TransferableDataHelper aDataHelper(
1446*b1cdbd2cSJim Jagielski                                 TransferableDataHelper::CreateFromSystemClipboard( pWin ) );
1447*b1cdbd2cSJim Jagielski                             sal_uLong nFormat = pDlg->GetFormat( aDataHelper.GetTransferable() );
1448*b1cdbd2cSJim Jagielski                             if (nFormat > 0)
1449*b1cdbd2cSJim Jagielski                             {
1450*b1cdbd2cSJim Jagielski                                 {
1451*b1cdbd2cSJim Jagielski                                     WaitObject aWait( GetViewData()->GetDialogParent() );
1452*b1cdbd2cSJim Jagielski                                     if ( bDraw && nFormat == SOT_FORMATSTR_ID_EMBED_SOURCE )
1453*b1cdbd2cSJim Jagielski                                         pTabViewShell->PasteDraw();
1454*b1cdbd2cSJim Jagielski                                     else
1455*b1cdbd2cSJim Jagielski                                         pTabViewShell->PasteFromSystem(nFormat);
1456*b1cdbd2cSJim Jagielski                                 }
1457*b1cdbd2cSJim Jagielski                                 rReq.SetReturnValue(SfxInt16Item(nSlot, 1));    // 1 = Erfolg
1458*b1cdbd2cSJim Jagielski                                 rReq.AppendItem( SfxUInt32Item( nSlot, nFormat ) );
1459*b1cdbd2cSJim Jagielski                                 rReq.Done();
1460*b1cdbd2cSJim Jagielski                             }
1461*b1cdbd2cSJim Jagielski                             else
1462*b1cdbd2cSJim Jagielski                             {
1463*b1cdbd2cSJim Jagielski                                 rReq.SetReturnValue(SfxInt16Item(nSlot, 0));    // 0 = Fehler
1464*b1cdbd2cSJim Jagielski                                 rReq.Ignore();
1465*b1cdbd2cSJim Jagielski                             }
1466*b1cdbd2cSJim Jagielski 
1467*b1cdbd2cSJim Jagielski                             delete pDlg;
1468*b1cdbd2cSJim Jagielski                             }
1469*b1cdbd2cSJim Jagielski                         }
1470*b1cdbd2cSJim Jagielski                         else
1471*b1cdbd2cSJim Jagielski                             rReq.SetReturnValue(SfxInt16Item(nSlot, 0));        // 0 = Fehler
1472*b1cdbd2cSJim Jagielski                     }
1473*b1cdbd2cSJim Jagielski                 }
1474*b1cdbd2cSJim Jagielski 			}
1475*b1cdbd2cSJim Jagielski 			pTabViewShell->CellContentChanged();		// => PasteFromSystem() ???
1476*b1cdbd2cSJim Jagielski 			break;
1477*b1cdbd2cSJim Jagielski 
1478*b1cdbd2cSJim Jagielski 		//
1479*b1cdbd2cSJim Jagielski 		//	sonstiges
1480*b1cdbd2cSJim Jagielski 		//
1481*b1cdbd2cSJim Jagielski 
1482*b1cdbd2cSJim Jagielski 		case FID_INS_ROWBRK:
1483*b1cdbd2cSJim Jagielski 			pTabViewShell->InsertPageBreak( sal_False );
1484*b1cdbd2cSJim Jagielski 			rReq.Done();
1485*b1cdbd2cSJim Jagielski 			break;
1486*b1cdbd2cSJim Jagielski 
1487*b1cdbd2cSJim Jagielski 		case FID_INS_COLBRK:
1488*b1cdbd2cSJim Jagielski 			pTabViewShell->InsertPageBreak( sal_True );
1489*b1cdbd2cSJim Jagielski 			rReq.Done();
1490*b1cdbd2cSJim Jagielski 			break;
1491*b1cdbd2cSJim Jagielski 
1492*b1cdbd2cSJim Jagielski 		case FID_DEL_ROWBRK:
1493*b1cdbd2cSJim Jagielski 			pTabViewShell->DeletePageBreak( sal_False );
1494*b1cdbd2cSJim Jagielski 			rReq.Done();
1495*b1cdbd2cSJim Jagielski 			break;
1496*b1cdbd2cSJim Jagielski 
1497*b1cdbd2cSJim Jagielski 		case FID_DEL_COLBRK:
1498*b1cdbd2cSJim Jagielski 			pTabViewShell->DeletePageBreak( sal_True );
1499*b1cdbd2cSJim Jagielski 			rReq.Done();
1500*b1cdbd2cSJim Jagielski 			break;
1501*b1cdbd2cSJim Jagielski 
1502*b1cdbd2cSJim Jagielski 		case SID_DETECTIVE_ADD_PRED:
1503*b1cdbd2cSJim Jagielski 			pTabViewShell->DetectiveAddPred();
1504*b1cdbd2cSJim Jagielski 			rReq.Done();
1505*b1cdbd2cSJim Jagielski 			break;
1506*b1cdbd2cSJim Jagielski 
1507*b1cdbd2cSJim Jagielski 		case SID_DETECTIVE_DEL_PRED:
1508*b1cdbd2cSJim Jagielski 			pTabViewShell->DetectiveDelPred();
1509*b1cdbd2cSJim Jagielski 			rReq.Done();
1510*b1cdbd2cSJim Jagielski 			break;
1511*b1cdbd2cSJim Jagielski 
1512*b1cdbd2cSJim Jagielski 		case SID_DETECTIVE_ADD_SUCC:
1513*b1cdbd2cSJim Jagielski 			pTabViewShell->DetectiveAddSucc();
1514*b1cdbd2cSJim Jagielski 			rReq.Done();
1515*b1cdbd2cSJim Jagielski 			break;
1516*b1cdbd2cSJim Jagielski 
1517*b1cdbd2cSJim Jagielski 		case SID_DETECTIVE_DEL_SUCC:
1518*b1cdbd2cSJim Jagielski 			pTabViewShell->DetectiveDelSucc();
1519*b1cdbd2cSJim Jagielski 			rReq.Done();
1520*b1cdbd2cSJim Jagielski 			break;
1521*b1cdbd2cSJim Jagielski 
1522*b1cdbd2cSJim Jagielski 		case SID_DETECTIVE_ADD_ERR:
1523*b1cdbd2cSJim Jagielski 			pTabViewShell->DetectiveAddError();
1524*b1cdbd2cSJim Jagielski 			rReq.Done();
1525*b1cdbd2cSJim Jagielski 			break;
1526*b1cdbd2cSJim Jagielski 
1527*b1cdbd2cSJim Jagielski 		case SID_DETECTIVE_INVALID:
1528*b1cdbd2cSJim Jagielski 			pTabViewShell->DetectiveMarkInvalid();
1529*b1cdbd2cSJim Jagielski 			rReq.Done();
1530*b1cdbd2cSJim Jagielski 			break;
1531*b1cdbd2cSJim Jagielski 
1532*b1cdbd2cSJim Jagielski 		case SID_DETECTIVE_REFRESH:
1533*b1cdbd2cSJim Jagielski 			pTabViewShell->DetectiveRefresh();
1534*b1cdbd2cSJim Jagielski 			rReq.Done();
1535*b1cdbd2cSJim Jagielski 			break;
1536*b1cdbd2cSJim Jagielski 
1537*b1cdbd2cSJim Jagielski         case SID_SPELL_DIALOG:
1538*b1cdbd2cSJim Jagielski //           pTabViewShell->DoSpellingChecker();
1539*b1cdbd2cSJim Jagielski             {
1540*b1cdbd2cSJim Jagielski                 SfxViewFrame* pViewFrame = pTabViewShell->GetViewFrame();
1541*b1cdbd2cSJim Jagielski                 if( rReq.GetArgs() )
1542*b1cdbd2cSJim Jagielski                     pViewFrame->SetChildWindow( SID_SPELL_DIALOG,
1543*b1cdbd2cSJim Jagielski                         static_cast< const SfxBoolItem& >( rReq.GetArgs()->
1544*b1cdbd2cSJim Jagielski                             Get( SID_SPELL_DIALOG ) ).GetValue() );
1545*b1cdbd2cSJim Jagielski                 else
1546*b1cdbd2cSJim Jagielski                     pViewFrame->ToggleChildWindow( SID_SPELL_DIALOG );
1547*b1cdbd2cSJim Jagielski 
1548*b1cdbd2cSJim Jagielski                 pViewFrame->GetBindings().Invalidate( SID_SPELL_DIALOG );
1549*b1cdbd2cSJim Jagielski                 rReq.Ignore();
1550*b1cdbd2cSJim Jagielski             }
1551*b1cdbd2cSJim Jagielski 			break;
1552*b1cdbd2cSJim Jagielski 
1553*b1cdbd2cSJim Jagielski         case SID_HANGUL_HANJA_CONVERSION:
1554*b1cdbd2cSJim Jagielski             pTabViewShell->DoHangulHanjaConversion();
1555*b1cdbd2cSJim Jagielski             break;
1556*b1cdbd2cSJim Jagielski 
1557*b1cdbd2cSJim Jagielski         case SID_CHINESE_CONVERSION:
1558*b1cdbd2cSJim Jagielski             {
1559*b1cdbd2cSJim Jagielski                 //open ChineseTranslationDialog
1560*b1cdbd2cSJim Jagielski                 Reference< XComponentContext > xContext(
1561*b1cdbd2cSJim Jagielski                     ::cppu::defaultBootstrap_InitialComponentContext() ); //@todo get context from calc if that has one
1562*b1cdbd2cSJim Jagielski                 if(xContext.is())
1563*b1cdbd2cSJim Jagielski                 {
1564*b1cdbd2cSJim Jagielski                     Reference< lang::XMultiComponentFactory > xMCF( xContext->getServiceManager() );
1565*b1cdbd2cSJim Jagielski                     if(xMCF.is())
1566*b1cdbd2cSJim Jagielski                     {
1567*b1cdbd2cSJim Jagielski                         Reference< ui::dialogs::XExecutableDialog > xDialog(
1568*b1cdbd2cSJim Jagielski                                 xMCF->createInstanceWithContext(
1569*b1cdbd2cSJim Jagielski                                     rtl::OUString::createFromAscii("com.sun.star.linguistic2.ChineseTranslationDialog")
1570*b1cdbd2cSJim Jagielski                                     , xContext), UNO_QUERY);
1571*b1cdbd2cSJim Jagielski                         Reference< lang::XInitialization > xInit( xDialog, UNO_QUERY );
1572*b1cdbd2cSJim Jagielski                         if( xInit.is() )
1573*b1cdbd2cSJim Jagielski                         {
1574*b1cdbd2cSJim Jagielski                             //  initialize dialog
1575*b1cdbd2cSJim Jagielski                             Reference< awt::XWindow > xDialogParentWindow(0);
1576*b1cdbd2cSJim Jagielski                             Sequence<Any> aSeq(1);
1577*b1cdbd2cSJim Jagielski                             Any* pArray = aSeq.getArray();
1578*b1cdbd2cSJim Jagielski                             PropertyValue aParam;
1579*b1cdbd2cSJim Jagielski                             aParam.Name = rtl::OUString::createFromAscii("ParentWindow");
1580*b1cdbd2cSJim Jagielski                             aParam.Value <<= makeAny(xDialogParentWindow);
1581*b1cdbd2cSJim Jagielski                             pArray[0] <<= makeAny(aParam);
1582*b1cdbd2cSJim Jagielski                             xInit->initialize( aSeq );
1583*b1cdbd2cSJim Jagielski 
1584*b1cdbd2cSJim Jagielski                             //execute dialog
1585*b1cdbd2cSJim Jagielski                             sal_Int16 nDialogRet = xDialog->execute();
1586*b1cdbd2cSJim Jagielski                             if( RET_OK == nDialogRet )
1587*b1cdbd2cSJim Jagielski                             {
1588*b1cdbd2cSJim Jagielski                                 //get some parameters from the dialog
1589*b1cdbd2cSJim Jagielski                                 sal_Bool bToSimplified = sal_True;
1590*b1cdbd2cSJim Jagielski                                 sal_Bool bUseVariants = sal_True;
1591*b1cdbd2cSJim Jagielski                                 sal_Bool bCommonTerms = sal_True;
1592*b1cdbd2cSJim Jagielski                                 Reference< beans::XPropertySet >  xProp( xDialog, UNO_QUERY );
1593*b1cdbd2cSJim Jagielski                                 if( xProp.is() )
1594*b1cdbd2cSJim Jagielski                                 {
1595*b1cdbd2cSJim Jagielski                                     try
1596*b1cdbd2cSJim Jagielski                                     {
1597*b1cdbd2cSJim Jagielski                                         xProp->getPropertyValue( C2U("IsDirectionToSimplified") ) >>= bToSimplified;
1598*b1cdbd2cSJim Jagielski                                         xProp->getPropertyValue( C2U("IsUseCharacterVariants") ) >>= bUseVariants;
1599*b1cdbd2cSJim Jagielski                                         xProp->getPropertyValue( C2U("IsTranslateCommonTerms") ) >>= bCommonTerms;
1600*b1cdbd2cSJim Jagielski                                     }
1601*b1cdbd2cSJim Jagielski                                     catch( Exception& )
1602*b1cdbd2cSJim Jagielski                                     {
1603*b1cdbd2cSJim Jagielski                                     }
1604*b1cdbd2cSJim Jagielski                                 }
1605*b1cdbd2cSJim Jagielski 
1606*b1cdbd2cSJim Jagielski                                 //execute translation
1607*b1cdbd2cSJim Jagielski                                 LanguageType eSourceLang = bToSimplified ? LANGUAGE_CHINESE_TRADITIONAL : LANGUAGE_CHINESE_SIMPLIFIED;
1608*b1cdbd2cSJim Jagielski                                 LanguageType eTargetLang = bToSimplified ? LANGUAGE_CHINESE_SIMPLIFIED : LANGUAGE_CHINESE_TRADITIONAL;
1609*b1cdbd2cSJim Jagielski                                 sal_Int32 nOptions = bUseVariants ? i18n::TextConversionOption::USE_CHARACTER_VARIANTS : 0;
1610*b1cdbd2cSJim Jagielski                                 if( !bCommonTerms )
1611*b1cdbd2cSJim Jagielski                                     nOptions |= i18n::TextConversionOption::CHARACTER_BY_CHARACTER;
1612*b1cdbd2cSJim Jagielski 
1613*b1cdbd2cSJim Jagielski                                 Font aTargetFont = GetViewData()->GetActiveWin()->GetDefaultFont(
1614*b1cdbd2cSJim Jagielski                                                     DEFAULTFONT_CJK_SPREADSHEET,
1615*b1cdbd2cSJim Jagielski                                                     eTargetLang, DEFAULTFONT_FLAGS_ONLYONE );
1616*b1cdbd2cSJim Jagielski                                 ScConversionParam aConvParam( SC_CONVERSION_CHINESE_TRANSL,
1617*b1cdbd2cSJim Jagielski                                     eSourceLang, eTargetLang, aTargetFont, nOptions, false );
1618*b1cdbd2cSJim Jagielski                                 pTabViewShell->DoSheetConversion( aConvParam );
1619*b1cdbd2cSJim Jagielski                             }
1620*b1cdbd2cSJim Jagielski                         }
1621*b1cdbd2cSJim Jagielski                         Reference< lang::XComponent > xComponent( xDialog, UNO_QUERY );
1622*b1cdbd2cSJim Jagielski                         if( xComponent.is() )
1623*b1cdbd2cSJim Jagielski                             xComponent->dispose();
1624*b1cdbd2cSJim Jagielski                     }
1625*b1cdbd2cSJim Jagielski                 }
1626*b1cdbd2cSJim Jagielski             }
1627*b1cdbd2cSJim Jagielski             break;
1628*b1cdbd2cSJim Jagielski 
1629*b1cdbd2cSJim Jagielski         case SID_THESAURUS:
1630*b1cdbd2cSJim Jagielski 			pTabViewShell->DoThesaurus();
1631*b1cdbd2cSJim Jagielski 			break;
1632*b1cdbd2cSJim Jagielski 
1633*b1cdbd2cSJim Jagielski 		case SID_TOGGLE_REL:
1634*b1cdbd2cSJim Jagielski             pTabViewShell->DoRefConversion();
1635*b1cdbd2cSJim Jagielski 			break;
1636*b1cdbd2cSJim Jagielski 
1637*b1cdbd2cSJim Jagielski 		case SID_DEC_INDENT:
1638*b1cdbd2cSJim Jagielski 			pTabViewShell->ChangeIndent( sal_False );
1639*b1cdbd2cSJim Jagielski 			break;
1640*b1cdbd2cSJim Jagielski 		case SID_INC_INDENT:
1641*b1cdbd2cSJim Jagielski 			pTabViewShell->ChangeIndent( sal_True );
1642*b1cdbd2cSJim Jagielski 			break;
1643*b1cdbd2cSJim Jagielski 
1644*b1cdbd2cSJim Jagielski 		case FID_USE_NAME:
1645*b1cdbd2cSJim Jagielski 			{
1646*b1cdbd2cSJim Jagielski 				sal_uInt16 nFlags = pTabViewShell->GetCreateNameFlags();
1647*b1cdbd2cSJim Jagielski 
1648*b1cdbd2cSJim Jagielski 				//CHINA001 ScNameCreateDlg* pDlg = new ScNameCreateDlg( 	pTabViewShell->GetDialogParent(), nFlags );
1649*b1cdbd2cSJim Jagielski 				ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1650*b1cdbd2cSJim Jagielski 				DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
1651*b1cdbd2cSJim Jagielski 
1652*b1cdbd2cSJim Jagielski 				AbstractScNameCreateDlg* pDlg = pFact->CreateScNameCreateDlg(pTabViewShell->GetDialogParent(), nFlags, RID_SCDLG_NAMES_CREATE );
1653*b1cdbd2cSJim Jagielski 				DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
1654*b1cdbd2cSJim Jagielski 
1655*b1cdbd2cSJim Jagielski 				if( pDlg->Execute() )
1656*b1cdbd2cSJim Jagielski 				{
1657*b1cdbd2cSJim Jagielski 					nFlags = pDlg->GetFlags();
1658*b1cdbd2cSJim Jagielski 					pTabViewShell->CreateNames(nFlags);
1659*b1cdbd2cSJim Jagielski 					rReq.Done();
1660*b1cdbd2cSJim Jagielski 				}
1661*b1cdbd2cSJim Jagielski 				delete pDlg;
1662*b1cdbd2cSJim Jagielski 			}
1663*b1cdbd2cSJim Jagielski 			break;
1664*b1cdbd2cSJim Jagielski 
1665*b1cdbd2cSJim Jagielski 		case SID_CONSOLIDATE:
1666*b1cdbd2cSJim Jagielski 			{
1667*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem;
1668*b1cdbd2cSJim Jagielski 				if ( pReqArgs && SFX_ITEM_SET ==
1669*b1cdbd2cSJim Jagielski 						pReqArgs->GetItemState( SCITEM_CONSOLIDATEDATA, sal_True, &pItem ) )
1670*b1cdbd2cSJim Jagielski 				{
1671*b1cdbd2cSJim Jagielski 					const ScConsolidateParam& rParam =
1672*b1cdbd2cSJim Jagielski 							((const ScConsolidateItem*)pItem)->GetData();
1673*b1cdbd2cSJim Jagielski 
1674*b1cdbd2cSJim Jagielski 					pTabViewShell->Consolidate( rParam );
1675*b1cdbd2cSJim Jagielski 					GetViewData()->GetDocument()->SetConsolidateDlgData( &rParam );
1676*b1cdbd2cSJim Jagielski 
1677*b1cdbd2cSJim Jagielski 					rReq.Done();
1678*b1cdbd2cSJim Jagielski 				}
1679*b1cdbd2cSJim Jagielski 				else if (rReq.IsAPI())
1680*b1cdbd2cSJim Jagielski 					SbxBase::SetError(SbxERR_BAD_PARAMETER);
1681*b1cdbd2cSJim Jagielski 			}
1682*b1cdbd2cSJim Jagielski 			break;
1683*b1cdbd2cSJim Jagielski 
1684*b1cdbd2cSJim Jagielski 		case SID_INS_FUNCTION:
1685*b1cdbd2cSJim Jagielski 			{
1686*b1cdbd2cSJim Jagielski 				const SfxBoolItem* pOkItem = (const SfxBoolItem*)&pReqArgs->Get( SID_DLG_RETOK );
1687*b1cdbd2cSJim Jagielski 
1688*b1cdbd2cSJim Jagielski //				pScMod->SetFunctionDlg( NULL );
1689*b1cdbd2cSJim Jagielski 
1690*b1cdbd2cSJim Jagielski 				if ( pOkItem->GetValue() )		// OK
1691*b1cdbd2cSJim Jagielski 				{
1692*b1cdbd2cSJim Jagielski 					String				 aFormula;
1693*b1cdbd2cSJim Jagielski 					const SfxStringItem* pSItem 	 = (const SfxStringItem*)&pReqArgs->Get( SCITEM_STRING );
1694*b1cdbd2cSJim Jagielski 					const SfxBoolItem* 	 pMatrixItem = (const SfxBoolItem*)  &pReqArgs->Get( SID_DLG_MATRIX );
1695*b1cdbd2cSJim Jagielski 
1696*b1cdbd2cSJim Jagielski 					aFormula += pSItem->GetValue();
1697*b1cdbd2cSJim Jagielski 					pScMod->ActivateInputWindow( &aFormula, pMatrixItem->GetValue() );
1698*b1cdbd2cSJim Jagielski 				}
1699*b1cdbd2cSJim Jagielski 				else							// CANCEL
1700*b1cdbd2cSJim Jagielski 				{
1701*b1cdbd2cSJim Jagielski 					pScMod->ActivateInputWindow( NULL );
1702*b1cdbd2cSJim Jagielski 				}
1703*b1cdbd2cSJim Jagielski 				rReq.Ignore();		// only SID_ENTER_STRING is recorded
1704*b1cdbd2cSJim Jagielski 			}
1705*b1cdbd2cSJim Jagielski 			break;
1706*b1cdbd2cSJim Jagielski 
1707*b1cdbd2cSJim Jagielski 		case FID_DEFINE_NAME:
1708*b1cdbd2cSJim Jagielski 			if ( pReqArgs )
1709*b1cdbd2cSJim Jagielski 			{
1710*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem;
1711*b1cdbd2cSJim Jagielski 				String	aName, aSymbol, aAttrib;
1712*b1cdbd2cSJim Jagielski 
1713*b1cdbd2cSJim Jagielski 				if( IS_AVAILABLE( FID_DEFINE_NAME, &pItem ) )
1714*b1cdbd2cSJim Jagielski 					aName = ((const SfxStringItem*)pItem)->GetValue();
1715*b1cdbd2cSJim Jagielski 
1716*b1cdbd2cSJim Jagielski 				if( IS_AVAILABLE( FN_PARAM_1, &pItem ) )
1717*b1cdbd2cSJim Jagielski 					aSymbol = ((const SfxStringItem*)pItem)->GetValue();
1718*b1cdbd2cSJim Jagielski 
1719*b1cdbd2cSJim Jagielski 				if( IS_AVAILABLE( FN_PARAM_2, &pItem ) )
1720*b1cdbd2cSJim Jagielski 					aAttrib = ((const SfxStringItem*)pItem)->GetValue();
1721*b1cdbd2cSJim Jagielski 
1722*b1cdbd2cSJim Jagielski 				if ( aName.Len() && aSymbol.Len() )
1723*b1cdbd2cSJim Jagielski 				{
1724*b1cdbd2cSJim Jagielski 					if (pTabViewShell->InsertName( aName, aSymbol, aAttrib ))
1725*b1cdbd2cSJim Jagielski 						rReq.Done();
1726*b1cdbd2cSJim Jagielski 					else
1727*b1cdbd2cSJim Jagielski 						SbxBase::SetError( SbxERR_BAD_PARAMETER );	// Basic-Fehler
1728*b1cdbd2cSJim Jagielski 				}
1729*b1cdbd2cSJim Jagielski 			}
1730*b1cdbd2cSJim Jagielski 			else
1731*b1cdbd2cSJim Jagielski 			{
1732*b1cdbd2cSJim Jagielski 				sal_uInt16			nId  = ScNameDlgWrapper::GetChildWindowId();
1733*b1cdbd2cSJim Jagielski 				SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
1734*b1cdbd2cSJim Jagielski 				SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
1735*b1cdbd2cSJim Jagielski 
1736*b1cdbd2cSJim Jagielski 				pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True );
1737*b1cdbd2cSJim Jagielski 			}
1738*b1cdbd2cSJim Jagielski 			break;
1739*b1cdbd2cSJim Jagielski 
1740*b1cdbd2cSJim Jagielski 		case SID_DEFINE_COLROWNAMERANGES:
1741*b1cdbd2cSJim Jagielski 			{
1742*b1cdbd2cSJim Jagielski 
1743*b1cdbd2cSJim Jagielski 				sal_uInt16			nId  = ScColRowNameRangesDlgWrapper::GetChildWindowId();
1744*b1cdbd2cSJim Jagielski 				SfxViewFrame* pViewFrm = pTabViewShell->GetViewFrame();
1745*b1cdbd2cSJim Jagielski 				SfxChildWindow* pWnd = pViewFrm->GetChildWindow( nId );
1746*b1cdbd2cSJim Jagielski 
1747*b1cdbd2cSJim Jagielski 				pScMod->SetRefDialog( nId, pWnd ? sal_False : sal_True );
1748*b1cdbd2cSJim Jagielski 
1749*b1cdbd2cSJim Jagielski 			}
1750*b1cdbd2cSJim Jagielski 			break;
1751*b1cdbd2cSJim Jagielski 
1752*b1cdbd2cSJim Jagielski 		case SID_UPDATECHART:
1753*b1cdbd2cSJim Jagielski 			{
1754*b1cdbd2cSJim Jagielski 				sal_Bool bAll = sal_False;
1755*b1cdbd2cSJim Jagielski 
1756*b1cdbd2cSJim Jagielski 				if( pReqArgs )
1757*b1cdbd2cSJim Jagielski 				{
1758*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pItem;
1759*b1cdbd2cSJim Jagielski 
1760*b1cdbd2cSJim Jagielski 					if( IS_AVAILABLE( SID_UPDATECHART, &pItem ) )
1761*b1cdbd2cSJim Jagielski 						bAll = ((const SfxBoolItem*)pItem)->GetValue();
1762*b1cdbd2cSJim Jagielski 				}
1763*b1cdbd2cSJim Jagielski 
1764*b1cdbd2cSJim Jagielski 				pTabViewShell->UpdateCharts( bAll );
1765*b1cdbd2cSJim Jagielski 
1766*b1cdbd2cSJim Jagielski 				if( ! rReq.IsAPI() )
1767*b1cdbd2cSJim Jagielski 				{
1768*b1cdbd2cSJim Jagielski 					rReq.AppendItem( SfxBoolItem( SID_UPDATECHART, bAll ) );
1769*b1cdbd2cSJim Jagielski 					rReq.Done();
1770*b1cdbd2cSJim Jagielski 				}
1771*b1cdbd2cSJim Jagielski 			}
1772*b1cdbd2cSJim Jagielski 			break;
1773*b1cdbd2cSJim Jagielski 
1774*b1cdbd2cSJim Jagielski 
1775*b1cdbd2cSJim Jagielski 		case SID_TABOP:
1776*b1cdbd2cSJim Jagielski 			if (pReqArgs)
1777*b1cdbd2cSJim Jagielski 			{
1778*b1cdbd2cSJim Jagielski 				const ScTabOpItem& rItem =
1779*b1cdbd2cSJim Jagielski 						(const ScTabOpItem&)
1780*b1cdbd2cSJim Jagielski 							pReqArgs->Get( SID_TABOP );
1781*b1cdbd2cSJim Jagielski 
1782*b1cdbd2cSJim Jagielski 				pTabViewShell->TabOp( rItem.GetData() );
1783*b1cdbd2cSJim Jagielski 
1784*b1cdbd2cSJim Jagielski 				rReq.Done( *pReqArgs );
1785*b1cdbd2cSJim Jagielski 			}
1786*b1cdbd2cSJim Jagielski 			break;
1787*b1cdbd2cSJim Jagielski 
1788*b1cdbd2cSJim Jagielski 		case SID_SOLVE:
1789*b1cdbd2cSJim Jagielski 			if (pReqArgs)
1790*b1cdbd2cSJim Jagielski 			{
1791*b1cdbd2cSJim Jagielski 				const ScSolveItem& rItem =
1792*b1cdbd2cSJim Jagielski 						(const ScSolveItem&)
1793*b1cdbd2cSJim Jagielski 							pReqArgs->Get( SCITEM_SOLVEDATA );
1794*b1cdbd2cSJim Jagielski 
1795*b1cdbd2cSJim Jagielski 				pTabViewShell->Solve( rItem.GetData() );
1796*b1cdbd2cSJim Jagielski 
1797*b1cdbd2cSJim Jagielski 				rReq.Done( *pReqArgs );
1798*b1cdbd2cSJim Jagielski 			}
1799*b1cdbd2cSJim Jagielski 			break;
1800*b1cdbd2cSJim Jagielski 
1801*b1cdbd2cSJim Jagielski 		case FID_INSERT_NAME:
1802*b1cdbd2cSJim Jagielski 			{
1803*b1cdbd2cSJim Jagielski 				ScDocument*		pDoc = GetViewData()->GetDocument();
1804*b1cdbd2cSJim Jagielski 				//CHINA001 ScNamePasteDlg* pDlg = new ScNamePasteDlg( 	pTabViewShell->GetDialogParent(), pDoc->GetRangeName() );
1805*b1cdbd2cSJim Jagielski 				ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
1806*b1cdbd2cSJim Jagielski 				DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
1807*b1cdbd2cSJim Jagielski 
1808*b1cdbd2cSJim Jagielski 				AbstractScNamePasteDlg* pDlg = pFact->CreateScNamePasteDlg( pTabViewShell->GetDialogParent(), pDoc->GetRangeName(), RID_SCDLG_NAMES_PASTE );
1809*b1cdbd2cSJim Jagielski 				DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001
1810*b1cdbd2cSJim Jagielski 				switch( pDlg->Execute() )
1811*b1cdbd2cSJim Jagielski 				{
1812*b1cdbd2cSJim Jagielski 					case BTN_PASTE_LIST:
1813*b1cdbd2cSJim Jagielski 						pTabViewShell->InsertNameList();
1814*b1cdbd2cSJim Jagielski 						break;
1815*b1cdbd2cSJim Jagielski 					case BTN_PASTE_NAME:
1816*b1cdbd2cSJim Jagielski 						{
1817*b1cdbd2cSJim Jagielski 							ScInputHandler* pHdl = pScMod->GetInputHdl( pTabViewShell );
1818*b1cdbd2cSJim Jagielski 							if (pHdl)
1819*b1cdbd2cSJim Jagielski 							{
1820*b1cdbd2cSJim Jagielski 								//	das "=" per Key-Event, schaltet in den Eingabe-Modus
1821*b1cdbd2cSJim Jagielski 								pScMod->InputKeyEvent( KeyEvent('=',KeyCode()) );
1822*b1cdbd2cSJim Jagielski 
1823*b1cdbd2cSJim Jagielski 								String aName = pDlg->GetSelectedName();
1824*b1cdbd2cSJim Jagielski 								pHdl->InsertFunction( aName, sal_False );		// ohne "()"
1825*b1cdbd2cSJim Jagielski 							}
1826*b1cdbd2cSJim Jagielski 						}
1827*b1cdbd2cSJim Jagielski 						break;
1828*b1cdbd2cSJim Jagielski 				}
1829*b1cdbd2cSJim Jagielski 				delete pDlg;
1830*b1cdbd2cSJim Jagielski 			}
1831*b1cdbd2cSJim Jagielski 			break;
1832*b1cdbd2cSJim Jagielski 
1833*b1cdbd2cSJim Jagielski 		case SID_RANGE_NOTETEXT:
1834*b1cdbd2cSJim Jagielski 			if (pReqArgs)
1835*b1cdbd2cSJim Jagielski 			{
1836*b1cdbd2cSJim Jagielski                 const SfxStringItem& rTextItem = (const SfxStringItem&)pReqArgs->Get( SID_RANGE_NOTETEXT );
1837*b1cdbd2cSJim Jagielski 
1838*b1cdbd2cSJim Jagielski 				//	#43343# immer Cursorposition
1839*b1cdbd2cSJim Jagielski                 ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() );
1840*b1cdbd2cSJim Jagielski                 pTabViewShell->SetNoteText( aPos, rTextItem.GetValue() );
1841*b1cdbd2cSJim Jagielski 				rReq.Done();
1842*b1cdbd2cSJim Jagielski 			}
1843*b1cdbd2cSJim Jagielski 			break;
1844*b1cdbd2cSJim Jagielski 
1845*b1cdbd2cSJim Jagielski 		case SID_INSERT_POSTIT:
1846*b1cdbd2cSJim Jagielski             if ( pReqArgs )
1847*b1cdbd2cSJim Jagielski             {
1848*b1cdbd2cSJim Jagielski                 const SvxPostItAuthorItem&  rAuthorItem = (const SvxPostItAuthorItem&)pReqArgs->Get( SID_ATTR_POSTIT_AUTHOR );
1849*b1cdbd2cSJim Jagielski                 const SvxPostItDateItem&    rDateItem   = (const SvxPostItDateItem&)  pReqArgs->Get( SID_ATTR_POSTIT_DATE );
1850*b1cdbd2cSJim Jagielski                 const SvxPostItTextItem&    rTextItem   = (const SvxPostItTextItem&)  pReqArgs->Get( SID_ATTR_POSTIT_TEXT );
1851*b1cdbd2cSJim Jagielski 
1852*b1cdbd2cSJim Jagielski                 ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() );
1853*b1cdbd2cSJim Jagielski                 pTabViewShell->ReplaceNote( aPos, rTextItem.GetValue(), &rAuthorItem.GetValue(), &rDateItem.GetValue() );
1854*b1cdbd2cSJim Jagielski                 rReq.Done();
1855*b1cdbd2cSJim Jagielski             }
1856*b1cdbd2cSJim Jagielski             else
1857*b1cdbd2cSJim Jagielski             {
1858*b1cdbd2cSJim Jagielski                 pTabViewShell->EditNote();                  // Zeichenobjekt zum Editieren
1859*b1cdbd2cSJim Jagielski             }
1860*b1cdbd2cSJim Jagielski 			break;
1861*b1cdbd2cSJim Jagielski 
1862*b1cdbd2cSJim Jagielski 		case FID_NOTE_VISIBLE:
1863*b1cdbd2cSJim Jagielski 			{
1864*b1cdbd2cSJim Jagielski 				ScDocument* pDoc = GetViewData()->GetDocument();
1865*b1cdbd2cSJim Jagielski 				ScAddress aPos( GetViewData()->GetCurX(), GetViewData()->GetCurY(), GetViewData()->GetTabNo() );
1866*b1cdbd2cSJim Jagielski 				if( ScPostIt* pNote = pDoc->GetNote( aPos ) )
1867*b1cdbd2cSJim Jagielski 				{
1868*b1cdbd2cSJim Jagielski 					bool bShow;
1869*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pItem;
1870*b1cdbd2cSJim Jagielski 					if ( pReqArgs && (pReqArgs->GetItemState( FID_NOTE_VISIBLE, sal_True, &pItem ) == SFX_ITEM_SET) )
1871*b1cdbd2cSJim Jagielski 						bShow = ((const SfxBoolItem*) pItem)->GetValue();
1872*b1cdbd2cSJim Jagielski 					else
1873*b1cdbd2cSJim Jagielski 						bShow = !pNote->IsCaptionShown();
1874*b1cdbd2cSJim Jagielski 
1875*b1cdbd2cSJim Jagielski 					pTabViewShell->ShowNote( bShow );
1876*b1cdbd2cSJim Jagielski 
1877*b1cdbd2cSJim Jagielski 					if (!pReqArgs)
1878*b1cdbd2cSJim Jagielski 						rReq.AppendItem( SfxBoolItem( FID_NOTE_VISIBLE, bShow ) );
1879*b1cdbd2cSJim Jagielski 
1880*b1cdbd2cSJim Jagielski 					rReq.Done();
1881*b1cdbd2cSJim Jagielski 					rBindings.Invalidate( FID_NOTE_VISIBLE );
1882*b1cdbd2cSJim Jagielski 				}
1883*b1cdbd2cSJim Jagielski 				else
1884*b1cdbd2cSJim Jagielski 					rReq.Ignore();
1885*b1cdbd2cSJim Jagielski 			}
1886*b1cdbd2cSJim Jagielski 			break;
1887*b1cdbd2cSJim Jagielski 
1888*b1cdbd2cSJim Jagielski         case SID_DELETE_NOTE:
1889*b1cdbd2cSJim Jagielski             pTabViewShell->DeleteContents( IDF_NOTE );      // delete all notes in selection
1890*b1cdbd2cSJim Jagielski             rReq.Done();
1891*b1cdbd2cSJim Jagielski             break;
1892*b1cdbd2cSJim Jagielski 
1893*b1cdbd2cSJim Jagielski 		case SID_CHARMAP:
1894*b1cdbd2cSJim Jagielski 			if( pReqArgs != NULL )
1895*b1cdbd2cSJim Jagielski 			{
1896*b1cdbd2cSJim Jagielski 				String aChars, aFontName;
1897*b1cdbd2cSJim Jagielski 				const SfxItemSet *pArgs = rReq.GetArgs();
1898*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem = 0;
1899*b1cdbd2cSJim Jagielski 				if ( pArgs )
1900*b1cdbd2cSJim Jagielski 					pArgs->GetItemState(GetPool().GetWhich(SID_CHARMAP), sal_False, &pItem);
1901*b1cdbd2cSJim Jagielski 				if ( pItem )
1902*b1cdbd2cSJim Jagielski 				{
1903*b1cdbd2cSJim Jagielski 					const SfxStringItem* pStringItem = PTR_CAST( SfxStringItem, pItem );
1904*b1cdbd2cSJim Jagielski 					if ( pStringItem )
1905*b1cdbd2cSJim Jagielski 						aChars = pStringItem->GetValue();
1906*b1cdbd2cSJim Jagielski 					const SfxPoolItem* pFtItem = NULL;
1907*b1cdbd2cSJim Jagielski 					pArgs->GetItemState( GetPool().GetWhich(SID_ATTR_SPECIALCHAR), sal_False, &pFtItem);
1908*b1cdbd2cSJim Jagielski 					const SfxStringItem* pFontItem = PTR_CAST( SfxStringItem, pFtItem );
1909*b1cdbd2cSJim Jagielski 					if ( pFontItem )
1910*b1cdbd2cSJim Jagielski 						aFontName = pFontItem->GetValue();
1911*b1cdbd2cSJim Jagielski 				}
1912*b1cdbd2cSJim Jagielski 
1913*b1cdbd2cSJim Jagielski 				if ( aChars.Len() )
1914*b1cdbd2cSJim Jagielski 				{
1915*b1cdbd2cSJim Jagielski 					Font aFont;
1916*b1cdbd2cSJim Jagielski 					pTabViewShell->GetSelectionPattern()->GetFont( aFont, SC_AUTOCOL_BLACK, NULL, NULL, NULL,
1917*b1cdbd2cSJim Jagielski 																pTabViewShell->GetSelectionScriptType() );
1918*b1cdbd2cSJim Jagielski 					if ( aFontName.Len() )
1919*b1cdbd2cSJim Jagielski 						aFont = Font( aFontName, Size(1,1) );
1920*b1cdbd2cSJim Jagielski 					pTabViewShell->InsertSpecialChar( aChars, aFont );
1921*b1cdbd2cSJim Jagielski 					if( ! rReq.IsAPI() )
1922*b1cdbd2cSJim Jagielski 						rReq.Done();
1923*b1cdbd2cSJim Jagielski 				}
1924*b1cdbd2cSJim Jagielski 			}
1925*b1cdbd2cSJim Jagielski 			else
1926*b1cdbd2cSJim Jagielski 			{
1927*b1cdbd2cSJim Jagielski 				//CHINA001 SvxCharacterMap* pDlg = new SvxCharacterMap( 	pTabViewShell->GetDialogParent(), sal_False );
1928*b1cdbd2cSJim Jagielski 				SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
1929*b1cdbd2cSJim Jagielski 
1930*b1cdbd2cSJim Jagielski 				// font color doesn't matter here
1931*b1cdbd2cSJim Jagielski 				Font			 aCurFont;
1932*b1cdbd2cSJim Jagielski 				pTabViewShell->GetSelectionPattern()->GetFont( aCurFont, SC_AUTOCOL_BLACK, NULL, NULL, NULL,
1933*b1cdbd2cSJim Jagielski 																pTabViewShell->GetSelectionScriptType() );
1934*b1cdbd2cSJim Jagielski 
1935*b1cdbd2cSJim Jagielski 				SfxAllItemSet aSet( GetPool() );
1936*b1cdbd2cSJim Jagielski 				aSet.Put( SfxBoolItem( FN_PARAM_1, sal_False ) );
1937*b1cdbd2cSJim Jagielski 				aSet.Put( SvxFontItem( aCurFont.GetFamily(), aCurFont.GetName(), aCurFont.GetStyleName(), aCurFont.GetPitch(), aCurFont.GetCharSet(), GetPool().GetWhich(SID_ATTR_CHAR_FONT) ) );
1938*b1cdbd2cSJim Jagielski 
1939*b1cdbd2cSJim Jagielski 				SfxAbstractDialog* pDlg = pFact->CreateSfxDialog( pTabViewShell->GetDialogParent(), aSet,
1940*b1cdbd2cSJim Jagielski 					pTabViewShell->GetViewFrame()->GetFrame().GetFrameInterface(), RID_SVXDLG_CHARMAP );
1941*b1cdbd2cSJim Jagielski 
1942*b1cdbd2cSJim Jagielski 				if ( pDlg->Execute() == RET_OK )
1943*b1cdbd2cSJim Jagielski 				{
1944*b1cdbd2cSJim Jagielski 					SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pItem, SfxStringItem, SID_CHARMAP, sal_False );
1945*b1cdbd2cSJim Jagielski 					SFX_ITEMSET_ARG( pDlg->GetOutputItemSet(), pFontItem, SvxFontItem, SID_ATTR_CHAR_FONT, sal_False );
1946*b1cdbd2cSJim Jagielski 
1947*b1cdbd2cSJim Jagielski 					if ( pItem && pFontItem )
1948*b1cdbd2cSJim Jagielski 					{
1949*b1cdbd2cSJim Jagielski 						Font aNewFont( pFontItem->GetFamilyName(), pFontItem->GetStyleName(), Size(1,1) );
1950*b1cdbd2cSJim Jagielski 						aNewFont.SetCharSet( pFontItem->GetCharSet() );
1951*b1cdbd2cSJim Jagielski 						aNewFont.SetPitch( pFontItem->GetPitch() );
1952*b1cdbd2cSJim Jagielski 						pTabViewShell->InsertSpecialChar( pItem->GetValue(), aNewFont );
1953*b1cdbd2cSJim Jagielski 						rReq.AppendItem( *pFontItem );
1954*b1cdbd2cSJim Jagielski 						rReq.AppendItem( *pItem );
1955*b1cdbd2cSJim Jagielski 						rReq.Done();
1956*b1cdbd2cSJim Jagielski 					}
1957*b1cdbd2cSJim Jagielski 				}
1958*b1cdbd2cSJim Jagielski 				delete pDlg;
1959*b1cdbd2cSJim Jagielski 			}
1960*b1cdbd2cSJim Jagielski 			break;
1961*b1cdbd2cSJim Jagielski 
1962*b1cdbd2cSJim Jagielski 		case SID_SELECT_SCENARIO:
1963*b1cdbd2cSJim Jagielski 			{
1964*b1cdbd2cSJim Jagielski 				// Testing
1965*b1cdbd2cSJim Jagielski 
1966*b1cdbd2cSJim Jagielski 				if ( pReqArgs )
1967*b1cdbd2cSJim Jagielski 				{
1968*b1cdbd2cSJim Jagielski 					const SfxStringItem* pItem =
1969*b1cdbd2cSJim Jagielski 						(const SfxStringItem*)&pReqArgs->Get( SID_SELECT_SCENARIO );
1970*b1cdbd2cSJim Jagielski 
1971*b1cdbd2cSJim Jagielski 					if( pItem )
1972*b1cdbd2cSJim Jagielski 					{
1973*b1cdbd2cSJim Jagielski 						pTabViewShell->UseScenario( pItem->GetValue() );
1974*b1cdbd2cSJim Jagielski 						//!	wofuer soll der Return-Wert gut sein?!?!
1975*b1cdbd2cSJim Jagielski 						rReq.SetReturnValue( SfxStringItem( SID_SELECT_SCENARIO, pItem->GetValue() ) );
1976*b1cdbd2cSJim Jagielski 						rReq.Done();
1977*b1cdbd2cSJim Jagielski 					}
1978*b1cdbd2cSJim Jagielski 					else
1979*b1cdbd2cSJim Jagielski 					{
1980*b1cdbd2cSJim Jagielski 						DBG_ERROR("NULL");
1981*b1cdbd2cSJim Jagielski 					}
1982*b1cdbd2cSJim Jagielski 				}
1983*b1cdbd2cSJim Jagielski 			}
1984*b1cdbd2cSJim Jagielski 			break;
1985*b1cdbd2cSJim Jagielski 
1986*b1cdbd2cSJim Jagielski 		case SID_HYPERLINK_SETLINK:
1987*b1cdbd2cSJim Jagielski 			if( pReqArgs )
1988*b1cdbd2cSJim Jagielski 			{
1989*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem;
1990*b1cdbd2cSJim Jagielski 				if( IS_AVAILABLE( SID_HYPERLINK_SETLINK, &pItem ) )
1991*b1cdbd2cSJim Jagielski 				{
1992*b1cdbd2cSJim Jagielski 					const SvxHyperlinkItem* pHyper = (const SvxHyperlinkItem*) pItem;
1993*b1cdbd2cSJim Jagielski 					const String& rName	  = pHyper->GetName();
1994*b1cdbd2cSJim Jagielski 					const String& rURL	  = pHyper->GetURL();
1995*b1cdbd2cSJim Jagielski 					const String& rTarget = pHyper->GetTargetFrame();
1996*b1cdbd2cSJim Jagielski 					sal_uInt16 nType = (sal_uInt16) pHyper->GetInsertMode();
1997*b1cdbd2cSJim Jagielski 
1998*b1cdbd2cSJim Jagielski 					pTabViewShell->InsertURL( rName, rURL, rTarget, nType );
1999*b1cdbd2cSJim Jagielski                     rReq.Done();
2000*b1cdbd2cSJim Jagielski 				}
2001*b1cdbd2cSJim Jagielski                 else
2002*b1cdbd2cSJim Jagielski                     rReq.Ignore();
2003*b1cdbd2cSJim Jagielski 			}
2004*b1cdbd2cSJim Jagielski 			break;
2005*b1cdbd2cSJim Jagielski 
2006*b1cdbd2cSJim Jagielski 		case FID_CONDITIONAL_FORMAT:
2007*b1cdbd2cSJim Jagielski 			if( pReqArgs )
2008*b1cdbd2cSJim Jagielski 			{
2009*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem;
2010*b1cdbd2cSJim Jagielski 				if( IS_AVAILABLE( FID_CONDITIONAL_FORMAT, &pItem ) )
2011*b1cdbd2cSJim Jagielski 				{
2012*b1cdbd2cSJim Jagielski 					// Wenn RefInput auf andere Tabelle als Datentabelle umgeschaltet
2013*b1cdbd2cSJim Jagielski 					// hat wieder zurueckschalten:
2014*b1cdbd2cSJim Jagielski 					if ( GetViewData()->GetTabNo() != GetViewData()->GetRefTabNo() )
2015*b1cdbd2cSJim Jagielski 					{
2016*b1cdbd2cSJim Jagielski 						pTabViewShell->SetTabNo( GetViewData()->GetRefTabNo() );
2017*b1cdbd2cSJim Jagielski 						pTabViewShell->PaintExtras();
2018*b1cdbd2cSJim Jagielski 					}
2019*b1cdbd2cSJim Jagielski 
2020*b1cdbd2cSJim Jagielski 					const ScCondFrmtItem* pCndFmtItem = (const ScCondFrmtItem*) pItem;
2021*b1cdbd2cSJim Jagielski 					pTabViewShell->SetConditionalFormat( pCndFmtItem->GetData() );
2022*b1cdbd2cSJim Jagielski 					rReq.Done();
2023*b1cdbd2cSJim Jagielski 				}
2024*b1cdbd2cSJim Jagielski 			}
2025*b1cdbd2cSJim Jagielski 			break;
2026*b1cdbd2cSJim Jagielski 
2027*b1cdbd2cSJim Jagielski 		case SID_EXTERNAL_SOURCE:
2028*b1cdbd2cSJim Jagielski 			{
2029*b1cdbd2cSJim Jagielski                 String aFile;
2030*b1cdbd2cSJim Jagielski                 String aFilter;
2031*b1cdbd2cSJim Jagielski                 String aOptions;
2032*b1cdbd2cSJim Jagielski                 String aSource;
2033*b1cdbd2cSJim Jagielski                 sal_uLong nRefresh=0;
2034*b1cdbd2cSJim Jagielski 
2035*b1cdbd2cSJim Jagielski                 SFX_REQUEST_ARG( rReq, pFile, SfxStringItem, SID_FILE_NAME, sal_False );
2036*b1cdbd2cSJim Jagielski                 SFX_REQUEST_ARG( rReq, pSource, SfxStringItem, FN_PARAM_1, sal_False );
2037*b1cdbd2cSJim Jagielski                 if ( pFile && pSource )
2038*b1cdbd2cSJim Jagielski                 {
2039*b1cdbd2cSJim Jagielski                     aFile = pFile->GetValue();
2040*b1cdbd2cSJim Jagielski                     aSource = pSource->GetValue();
2041*b1cdbd2cSJim Jagielski                     SFX_REQUEST_ARG( rReq, pFilter, SfxStringItem, SID_FILTER_NAME, sal_False );
2042*b1cdbd2cSJim Jagielski                     if ( pFilter )
2043*b1cdbd2cSJim Jagielski                         aFilter = pFilter->GetValue();
2044*b1cdbd2cSJim Jagielski                     SFX_REQUEST_ARG( rReq, pOptions, SfxStringItem, SID_FILE_FILTEROPTIONS, sal_False );
2045*b1cdbd2cSJim Jagielski                     if ( pOptions )
2046*b1cdbd2cSJim Jagielski                         aOptions = pOptions->GetValue();
2047*b1cdbd2cSJim Jagielski                     SFX_REQUEST_ARG( rReq, pRefresh, SfxUInt32Item, FN_PARAM_2, sal_False );
2048*b1cdbd2cSJim Jagielski                     if ( pRefresh )
2049*b1cdbd2cSJim Jagielski                         nRefresh = pRefresh->GetValue();
2050*b1cdbd2cSJim Jagielski                 }
2051*b1cdbd2cSJim Jagielski                 else
2052*b1cdbd2cSJim Jagielski                 {
2053*b1cdbd2cSJim Jagielski                     //CHINA001 ScLinkedAreaDlg* pDlg = new ScLinkedAreaDlg( pTabViewShell->GetDialogParent() );
2054*b1cdbd2cSJim Jagielski 					ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
2055*b1cdbd2cSJim Jagielski 					DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001
2056*b1cdbd2cSJim Jagielski 
2057*b1cdbd2cSJim Jagielski                     delete pImpl->m_pLinkedDlg;
2058*b1cdbd2cSJim Jagielski                     pImpl->m_pLinkedDlg =
2059*b1cdbd2cSJim Jagielski                         pFact->CreateScLinkedAreaDlg( pTabViewShell->GetDialogParent(),
2060*b1cdbd2cSJim Jagielski                                                       RID_SCDLG_LINKAREA);
2061*b1cdbd2cSJim Jagielski                     DBG_ASSERT(pImpl->m_pLinkedDlg, "Dialog create fail!");//CHINA001
2062*b1cdbd2cSJim Jagielski                     delete pImpl->m_pRequest;
2063*b1cdbd2cSJim Jagielski                     pImpl->m_pRequest = new SfxRequest( rReq );
2064*b1cdbd2cSJim Jagielski                     pImpl->m_pLinkedDlg->StartExecuteModal( LINK( this, ScCellShell, DialogClosed ) );
2065*b1cdbd2cSJim Jagielski                     return;
2066*b1cdbd2cSJim Jagielski                 }
2067*b1cdbd2cSJim Jagielski 
2068*b1cdbd2cSJim Jagielski                 ExecuteExternalSource( aFile, aFilter, aOptions, aSource, nRefresh, rReq );
2069*b1cdbd2cSJim Jagielski 			}
2070*b1cdbd2cSJim Jagielski 			break;
2071*b1cdbd2cSJim Jagielski 
2072*b1cdbd2cSJim Jagielski 		//
2073*b1cdbd2cSJim Jagielski 		//
2074*b1cdbd2cSJim Jagielski 		//
2075*b1cdbd2cSJim Jagielski 
2076*b1cdbd2cSJim Jagielski 		default:
2077*b1cdbd2cSJim Jagielski 			DBG_ERROR("falscher Slot bei ExecuteEdit");
2078*b1cdbd2cSJim Jagielski 			break;
2079*b1cdbd2cSJim Jagielski 	}
2080*b1cdbd2cSJim Jagielski }
2081*b1cdbd2cSJim Jagielski 
ExecuteTrans(SfxRequest & rReq)2082*b1cdbd2cSJim Jagielski void ScCellShell::ExecuteTrans( SfxRequest& rReq )
2083*b1cdbd2cSJim Jagielski {
2084*b1cdbd2cSJim Jagielski 	sal_Int32 nType = ScViewUtil::GetTransliterationType( rReq.GetSlot() );
2085*b1cdbd2cSJim Jagielski 	if ( nType )
2086*b1cdbd2cSJim Jagielski 	{
2087*b1cdbd2cSJim Jagielski 		GetViewData()->GetView()->TransliterateText( nType );
2088*b1cdbd2cSJim Jagielski 		rReq.Done();
2089*b1cdbd2cSJim Jagielski 	}
2090*b1cdbd2cSJim Jagielski }
2091*b1cdbd2cSJim Jagielski 
ExecuteExternalSource(const String & _rFile,const String & _rFilter,const String & _rOptions,const String & _rSource,sal_uLong _nRefresh,SfxRequest & _rRequest)2092*b1cdbd2cSJim Jagielski void ScCellShell::ExecuteExternalSource(
2093*b1cdbd2cSJim Jagielski     const String& _rFile, const String& _rFilter, const String& _rOptions,
2094*b1cdbd2cSJim Jagielski     const String& _rSource, sal_uLong _nRefresh, SfxRequest& _rRequest )
2095*b1cdbd2cSJim Jagielski {
2096*b1cdbd2cSJim Jagielski     if ( _rFile.Len() && _rSource.Len() )         // filter may be empty
2097*b1cdbd2cSJim Jagielski     {
2098*b1cdbd2cSJim Jagielski         ScRange aLinkRange;
2099*b1cdbd2cSJim Jagielski         sal_Bool bMove = sal_False;
2100*b1cdbd2cSJim Jagielski 
2101*b1cdbd2cSJim Jagielski         ScViewData* pData = GetViewData();
2102*b1cdbd2cSJim Jagielski         ScMarkData& rMark = pData->GetMarkData();
2103*b1cdbd2cSJim Jagielski         rMark.MarkToSimple();
2104*b1cdbd2cSJim Jagielski         if ( rMark.IsMarked() )
2105*b1cdbd2cSJim Jagielski         {
2106*b1cdbd2cSJim Jagielski             rMark.GetMarkArea( aLinkRange );
2107*b1cdbd2cSJim Jagielski             bMove = sal_True;                       // insert/delete cells to fit range
2108*b1cdbd2cSJim Jagielski         }
2109*b1cdbd2cSJim Jagielski         else
2110*b1cdbd2cSJim Jagielski             aLinkRange = ScRange( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
2111*b1cdbd2cSJim Jagielski 
2112*b1cdbd2cSJim Jagielski         ScDocFunc aFunc(*pData->GetDocShell());
2113*b1cdbd2cSJim Jagielski         aFunc.InsertAreaLink( _rFile, _rFilter, _rOptions, _rSource,
2114*b1cdbd2cSJim Jagielski                                 aLinkRange, _nRefresh, bMove, sal_False );
2115*b1cdbd2cSJim Jagielski         _rRequest.Done();
2116*b1cdbd2cSJim Jagielski     }
2117*b1cdbd2cSJim Jagielski     else
2118*b1cdbd2cSJim Jagielski         _rRequest.Ignore();
2119*b1cdbd2cSJim Jagielski }
2120*b1cdbd2cSJim Jagielski 
IMPL_LINK(ScCellShell,DialogClosed,AbstractScLinkedAreaDlg *,EMPTYARG)2121*b1cdbd2cSJim Jagielski IMPL_LINK( ScCellShell, DialogClosed, AbstractScLinkedAreaDlg*, EMPTYARG )
2122*b1cdbd2cSJim Jagielski {
2123*b1cdbd2cSJim Jagielski     DBG_ASSERT( pImpl->m_pLinkedDlg, "ScCellShell::DialogClosed(): invalid request" );
2124*b1cdbd2cSJim Jagielski     DBG_ASSERT( pImpl->m_pRequest, "ScCellShell::DialogClosed(): invalid request" );
2125*b1cdbd2cSJim Jagielski     String sFile, sFilter, sOptions, sSource;
2126*b1cdbd2cSJim Jagielski     sal_uLong nRefresh = 0;
2127*b1cdbd2cSJim Jagielski 
2128*b1cdbd2cSJim Jagielski     if ( pImpl->m_pLinkedDlg->GetResult() == RET_OK )
2129*b1cdbd2cSJim Jagielski     {
2130*b1cdbd2cSJim Jagielski         sFile = pImpl->m_pLinkedDlg->GetURL();
2131*b1cdbd2cSJim Jagielski         sFilter = pImpl->m_pLinkedDlg->GetFilter();
2132*b1cdbd2cSJim Jagielski         sOptions = pImpl->m_pLinkedDlg->GetOptions();
2133*b1cdbd2cSJim Jagielski         sSource = pImpl->m_pLinkedDlg->GetSource();
2134*b1cdbd2cSJim Jagielski         nRefresh = pImpl->m_pLinkedDlg->GetRefresh();
2135*b1cdbd2cSJim Jagielski         if ( sFile.Len() )
2136*b1cdbd2cSJim Jagielski             pImpl->m_pRequest->AppendItem( SfxStringItem( SID_FILE_NAME, sFile ) );
2137*b1cdbd2cSJim Jagielski         if ( sFilter.Len() )
2138*b1cdbd2cSJim Jagielski             pImpl->m_pRequest->AppendItem( SfxStringItem( SID_FILTER_NAME, sFilter ) );
2139*b1cdbd2cSJim Jagielski         if ( sOptions.Len() )
2140*b1cdbd2cSJim Jagielski             pImpl->m_pRequest->AppendItem( SfxStringItem( SID_FILE_FILTEROPTIONS, sOptions ) );
2141*b1cdbd2cSJim Jagielski         if ( sSource.Len() )
2142*b1cdbd2cSJim Jagielski             pImpl->m_pRequest->AppendItem( SfxStringItem( FN_PARAM_1, sSource ) );
2143*b1cdbd2cSJim Jagielski         if ( nRefresh )
2144*b1cdbd2cSJim Jagielski             pImpl->m_pRequest->AppendItem( SfxUInt32Item( FN_PARAM_2, nRefresh ) );
2145*b1cdbd2cSJim Jagielski     }
2146*b1cdbd2cSJim Jagielski 
2147*b1cdbd2cSJim Jagielski     ExecuteExternalSource( sFile, sFilter, sOptions, sSource, nRefresh, *(pImpl->m_pRequest) );
2148*b1cdbd2cSJim Jagielski     return 0;
2149*b1cdbd2cSJim Jagielski }
2150*b1cdbd2cSJim Jagielski 
PasteFromClipboard(ScViewData * pViewData,ScTabViewShell * pTabViewShell,bool bShowDialog)2151*b1cdbd2cSJim Jagielski void ScCellShell::PasteFromClipboard( ScViewData* pViewData, ScTabViewShell* pTabViewShell, bool bShowDialog )
2152*b1cdbd2cSJim Jagielski {
2153*b1cdbd2cSJim Jagielski     Window* pWin = pViewData->GetActiveWin();
2154*b1cdbd2cSJim Jagielski     ScTransferObj* pOwnClip = ScTransferObj::GetOwnClipboard( pWin );
2155*b1cdbd2cSJim Jagielski     ScDocument* pThisDoc = pViewData->GetDocument();
2156*b1cdbd2cSJim Jagielski     ScDPObject* pDPObj = pThisDoc->GetDPAtCursor( pViewData->GetCurX(),
2157*b1cdbd2cSJim Jagielski                          pViewData->GetCurY(), pViewData->GetTabNo() );
2158*b1cdbd2cSJim Jagielski     if ( pOwnClip && pDPObj )
2159*b1cdbd2cSJim Jagielski     {
2160*b1cdbd2cSJim Jagielski         // paste from Calc into DataPilot table: sort (similar to drag & drop)
2161*b1cdbd2cSJim Jagielski 
2162*b1cdbd2cSJim Jagielski         ScDocument* pClipDoc = pOwnClip->GetDocument();
2163*b1cdbd2cSJim Jagielski         SCTAB nSourceTab = pOwnClip->GetVisibleTab();
2164*b1cdbd2cSJim Jagielski 
2165*b1cdbd2cSJim Jagielski         SCCOL nClipStartX;
2166*b1cdbd2cSJim Jagielski         SCROW nClipStartY;
2167*b1cdbd2cSJim Jagielski         SCCOL nClipEndX;
2168*b1cdbd2cSJim Jagielski         SCROW nClipEndY;
2169*b1cdbd2cSJim Jagielski         pClipDoc->GetClipStart( nClipStartX, nClipStartY );
2170*b1cdbd2cSJim Jagielski         pClipDoc->GetClipArea( nClipEndX, nClipEndY, sal_True );
2171*b1cdbd2cSJim Jagielski         nClipEndX = nClipEndX + nClipStartX;
2172*b1cdbd2cSJim Jagielski         nClipEndY = nClipEndY + nClipStartY;   // GetClipArea returns the difference
2173*b1cdbd2cSJim Jagielski 
2174*b1cdbd2cSJim Jagielski         ScRange aSource( nClipStartX, nClipStartY, nSourceTab, nClipEndX, nClipEndY, nSourceTab );
2175*b1cdbd2cSJim Jagielski         sal_Bool bDone = pTabViewShell->DataPilotMove( aSource, pViewData->GetCurPos() );
2176*b1cdbd2cSJim Jagielski         if ( !bDone )
2177*b1cdbd2cSJim Jagielski             pTabViewShell->ErrorMessage( STR_ERR_DATAPILOT_INPUT );
2178*b1cdbd2cSJim Jagielski     }
2179*b1cdbd2cSJim Jagielski     else
2180*b1cdbd2cSJim Jagielski     {
2181*b1cdbd2cSJim Jagielski         // normal paste
2182*b1cdbd2cSJim Jagielski         WaitObject aWait( pViewData->GetDialogParent() );
2183*b1cdbd2cSJim Jagielski         if (!pOwnClip)
2184*b1cdbd2cSJim Jagielski             pTabViewShell->PasteFromSystem();
2185*b1cdbd2cSJim Jagielski         else
2186*b1cdbd2cSJim Jagielski         {
2187*b1cdbd2cSJim Jagielski             ScDocument* pClipDoc = pOwnClip->GetDocument();
2188*b1cdbd2cSJim Jagielski             sal_uInt16 nFlags = IDF_ALL;
2189*b1cdbd2cSJim Jagielski             if (pClipDoc->GetClipParam().isMultiRange())
2190*b1cdbd2cSJim Jagielski                 // For multi-range paste, we paste values by default.
2191*b1cdbd2cSJim Jagielski                 nFlags &= ~IDF_FORMULA;
2192*b1cdbd2cSJim Jagielski 
2193*b1cdbd2cSJim Jagielski             pTabViewShell->PasteFromClip( nFlags, pClipDoc,
2194*b1cdbd2cSJim Jagielski                     PASTE_NOFUNC, sal_False, sal_False, sal_False, INS_NONE, IDF_NONE,
2195*b1cdbd2cSJim Jagielski                     bShowDialog );		// allow warning dialog
2196*b1cdbd2cSJim Jagielski         }
2197*b1cdbd2cSJim Jagielski     }
2198*b1cdbd2cSJim Jagielski     pTabViewShell->CellContentChanged();		// => PasteFromSystem() ???
2199*b1cdbd2cSJim Jagielski }
2200