xref: /aoo42x/main/sc/source/ui/view/tabvwshc.cxx (revision 22407013)
1b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3b3f79822SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4b3f79822SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5b3f79822SAndrew Rist  * distributed with this work for additional information
6b3f79822SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7b3f79822SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8b3f79822SAndrew Rist  * "License"); you may not use this file except in compliance
9b3f79822SAndrew Rist  * with the License.  You may obtain a copy of the License at
10b3f79822SAndrew Rist  *
11b3f79822SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12b3f79822SAndrew Rist  *
13b3f79822SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14b3f79822SAndrew Rist  * software distributed under the License is distributed on an
15b3f79822SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b3f79822SAndrew Rist  * KIND, either express or implied.  See the License for the
17b3f79822SAndrew Rist  * specific language governing permissions and limitations
18b3f79822SAndrew Rist  * under the License.
19b3f79822SAndrew Rist  *
20b3f79822SAndrew Rist  *************************************************************/
21b3f79822SAndrew Rist 
22b3f79822SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir 
28cdf0e10cSrcweir 
29cdf0e10cSrcweir //------------------------------------------------------------------
30cdf0e10cSrcweir 
31cdf0e10cSrcweir // INCLUDE ---------------------------------------------------------------
32cdf0e10cSrcweir #include "scitems.hxx"
33cdf0e10cSrcweir #include <vcl/msgbox.hxx>
34cdf0e10cSrcweir #include <sfx2/childwin.hxx>
35cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include "tabvwsh.hxx"
38cdf0e10cSrcweir #include "sc.hrc"
39cdf0e10cSrcweir #include "globstr.hrc"
40cdf0e10cSrcweir #include "global.hxx"
41cdf0e10cSrcweir #include "scmod.hxx"
42cdf0e10cSrcweir #include "docsh.hxx"
43cdf0e10cSrcweir #include "document.hxx"
44cdf0e10cSrcweir #include "uiitems.hxx"
45cdf0e10cSrcweir #include "pivot.hxx"
46cdf0e10cSrcweir #include "namedlg.hxx"
47cdf0e10cSrcweir #include "solvrdlg.hxx"
48cdf0e10cSrcweir #include "optsolver.hxx"
49cdf0e10cSrcweir #include "tabopdlg.hxx"
50cdf0e10cSrcweir #include "autoform.hxx"         // Core
51cdf0e10cSrcweir #include "autofmt.hxx"          // Dialog
52cdf0e10cSrcweir #include "consdlg.hxx"
53cdf0e10cSrcweir //CHINA001 #include "sortdlg.hxx"
54cdf0e10cSrcweir #include "filtdlg.hxx"
55cdf0e10cSrcweir #include "dbnamdlg.hxx"
56cdf0e10cSrcweir #include "pvlaydlg.hxx"
57cdf0e10cSrcweir #include "areasdlg.hxx"
58cdf0e10cSrcweir #include "condfrmt.hxx"
59cdf0e10cSrcweir #include "rangeutl.hxx"
60cdf0e10cSrcweir #include "crnrdlg.hxx"
61cdf0e10cSrcweir #include "formula.hxx"
62cdf0e10cSrcweir #include "cell.hxx"             // Input Status Edit-Zellen
63cdf0e10cSrcweir #include "acredlin.hxx"
64cdf0e10cSrcweir #include "highred.hxx"
65cdf0e10cSrcweir #include "simpref.hxx"
66cdf0e10cSrcweir #include "funcdesc.hxx"
67cdf0e10cSrcweir #include "dpobject.hxx"
68cdf0e10cSrcweir 
69cdf0e10cSrcweir //------------------------------------------------------------------
70cdf0e10cSrcweir 
SetCurRefDlgId(sal_uInt16 nNew)71cdf0e10cSrcweir void ScTabViewShell::SetCurRefDlgId( sal_uInt16 nNew )
72cdf0e10cSrcweir {
73cdf0e10cSrcweir 	//	CurRefDlgId is stored in ScModule to find if a ref dialog is open,
74cdf0e10cSrcweir 	//	and in the view to identify the view that has opened the dialog
75cdf0e10cSrcweir 	nCurRefDlgId = nNew;
76cdf0e10cSrcweir }
77cdf0e10cSrcweir 
CreateRefDialog(SfxBindings * pB,SfxChildWindow * pCW,SfxChildWinInfo * pInfo,Window * pParent,sal_uInt16 nSlotId)78cdf0e10cSrcweir SfxModelessDialog* ScTabViewShell::CreateRefDialog(
79cdf0e10cSrcweir 						SfxBindings* pB, SfxChildWindow* pCW, SfxChildWinInfo* pInfo,
80cdf0e10cSrcweir 						Window* pParent, sal_uInt16 nSlotId )
81cdf0e10cSrcweir {
82cdf0e10cSrcweir 	//	Dialog nur aufmachen, wenn ueber ScModule::SetRefDialog gerufen, damit
83cdf0e10cSrcweir 	//	z.B. nach einem Absturz offene Ref-Dialoge nicht wiederkommen (#42341#).
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 	if ( SC_MOD()->GetCurRefDlgId() != nSlotId )
86cdf0e10cSrcweir 		return NULL;
87cdf0e10cSrcweir 
88cdf0e10cSrcweir 	if ( nCurRefDlgId != nSlotId )
89cdf0e10cSrcweir 	{
90cdf0e10cSrcweir 		//	the dialog has been opened in a different view
91cdf0e10cSrcweir 		//	-> lock the dispatcher for this view (modal mode)
92cdf0e10cSrcweir 
93cdf0e10cSrcweir 		GetViewData()->GetDispatcher().Lock( sal_True );	// lock is reset when closing dialog
94cdf0e10cSrcweir 		return NULL;
95cdf0e10cSrcweir 	}
96cdf0e10cSrcweir 
97cdf0e10cSrcweir 	SfxModelessDialog* pResult = 0;
98cdf0e10cSrcweir 
99cdf0e10cSrcweir 	if(pCW)
100cdf0e10cSrcweir 		pCW->SetHideNotDelete(sal_True);
101cdf0e10cSrcweir 
102cdf0e10cSrcweir 	switch( nSlotId )
103cdf0e10cSrcweir 	{
104cdf0e10cSrcweir 		case FID_DEFINE_NAME:
105cdf0e10cSrcweir 		pResult = new ScNameDlg( pB, pCW, pParent, GetViewData(),
106cdf0e10cSrcweir 								 ScAddress( GetViewData()->GetCurX(),
107cdf0e10cSrcweir 											GetViewData()->GetCurY(),
108cdf0e10cSrcweir 											GetViewData()->GetTabNo() ) );
109cdf0e10cSrcweir 		break;
110cdf0e10cSrcweir 
111cdf0e10cSrcweir 		case SID_DEFINE_COLROWNAMERANGES:
112cdf0e10cSrcweir 		{
113cdf0e10cSrcweir 			pResult = new ScColRowNameRangesDlg( pB, pCW, pParent, GetViewData() );
114cdf0e10cSrcweir 		}
115cdf0e10cSrcweir 		break;
116cdf0e10cSrcweir 
117cdf0e10cSrcweir 		case SID_OPENDLG_CONSOLIDATE:
118cdf0e10cSrcweir 		{
119cdf0e10cSrcweir 			SfxItemSet aArgSet( GetPool(),
120cdf0e10cSrcweir 								SCITEM_CONSOLIDATEDATA,
121cdf0e10cSrcweir 								SCITEM_CONSOLIDATEDATA );
122cdf0e10cSrcweir 
123cdf0e10cSrcweir 			const ScConsolidateParam* pDlgData =
124cdf0e10cSrcweir 							GetViewData()->GetDocument()->GetConsolidateDlgData();
125cdf0e10cSrcweir 
126cdf0e10cSrcweir 			if ( !pDlgData )
127cdf0e10cSrcweir 			{
128cdf0e10cSrcweir 				ScConsolidateParam	aConsParam;
129cdf0e10cSrcweir                 SCCOL nStartCol, nEndCol;
130cdf0e10cSrcweir                 SCROW nStartRow, nEndRow;
131cdf0e10cSrcweir                 SCTAB nStartTab, nEndTab;
132cdf0e10cSrcweir 
133cdf0e10cSrcweir 				GetViewData()->GetSimpleArea( nStartCol, nStartRow, nStartTab,
134cdf0e10cSrcweir 											  nEndCol,	 nEndRow,	nEndTab );
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 				PutInOrder( nStartCol, nEndCol );
137cdf0e10cSrcweir 				PutInOrder( nStartRow, nEndRow );
138cdf0e10cSrcweir 				PutInOrder( nStartTab, nEndTab );
139cdf0e10cSrcweir 
140cdf0e10cSrcweir 				aConsParam.nCol = nStartCol;
141cdf0e10cSrcweir 				aConsParam.nRow = nStartRow;
142cdf0e10cSrcweir 				aConsParam.nTab = nStartTab;
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 				aArgSet.Put( ScConsolidateItem( SCITEM_CONSOLIDATEDATA,
145cdf0e10cSrcweir 												&aConsParam ) );
146cdf0e10cSrcweir 			}
147cdf0e10cSrcweir 			else
148cdf0e10cSrcweir 			{
149cdf0e10cSrcweir 				aArgSet.Put( ScConsolidateItem( SCITEM_CONSOLIDATEDATA, pDlgData ) );
150cdf0e10cSrcweir 			}
151cdf0e10cSrcweir 			pResult = new ScConsolidateDlg( pB, pCW, pParent, aArgSet );
152cdf0e10cSrcweir 		}
153cdf0e10cSrcweir 		break;
154cdf0e10cSrcweir 
155cdf0e10cSrcweir 		case SID_DEFINE_DBNAME:
156cdf0e10cSrcweir 		{
157cdf0e10cSrcweir 			//	wenn auf einem bestehenden Bereich aufgerufen, den markieren
158cdf0e10cSrcweir 			GetDBData( sal_True, SC_DB_OLD );
159cdf0e10cSrcweir 			const ScMarkData& rMark = GetViewData()->GetMarkData();
160cdf0e10cSrcweir 			if ( !rMark.IsMarked() && !rMark.IsMultiMarked() )
161cdf0e10cSrcweir 				MarkDataArea( sal_False );
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 			pResult = new ScDbNameDlg( pB, pCW, pParent, GetViewData() );
164cdf0e10cSrcweir 		}
165cdf0e10cSrcweir 		break;
166cdf0e10cSrcweir 
167cdf0e10cSrcweir 		case SID_SPECIAL_FILTER:
168cdf0e10cSrcweir 		{
169cdf0e10cSrcweir 			ScQueryParam	aQueryParam;
170cdf0e10cSrcweir 			SfxItemSet		aArgSet( GetPool(),
171cdf0e10cSrcweir 									 SCITEM_QUERYDATA,
172cdf0e10cSrcweir 									 SCITEM_QUERYDATA );
173cdf0e10cSrcweir 
174*22407013SOliver-Rainer Wittmann 			ScDBData* pDBData = GetDBData( sal_True, SC_DB_MAKE, SC_DBSEL_ROW_DOWN);
175cdf0e10cSrcweir 			pDBData->GetQueryParam( aQueryParam );
176cdf0e10cSrcweir 
177cdf0e10cSrcweir 			ScQueryItem aItem( SCITEM_QUERYDATA, GetViewData(), &aQueryParam );
178cdf0e10cSrcweir 			ScRange aAdvSource;
179cdf0e10cSrcweir 			if (pDBData->GetAdvancedQuerySource(aAdvSource))
180cdf0e10cSrcweir 				aItem.SetAdvancedQuerySource( &aAdvSource );
181cdf0e10cSrcweir 
182cdf0e10cSrcweir 			aArgSet.Put( aItem );
183cdf0e10cSrcweir 
184cdf0e10cSrcweir 			// aktuelle Tabelle merken (wg. RefInput im Dialog)
185cdf0e10cSrcweir 			GetViewData()->SetRefTabNo( GetViewData()->GetTabNo() );
186cdf0e10cSrcweir 
187cdf0e10cSrcweir 			pResult = new ScSpecialFilterDlg( pB, pCW, pParent, aArgSet );
188cdf0e10cSrcweir 		}
189cdf0e10cSrcweir 		break;
190cdf0e10cSrcweir 
191cdf0e10cSrcweir 		case SID_FILTER:
192cdf0e10cSrcweir 		{
193cdf0e10cSrcweir 
194cdf0e10cSrcweir 			ScQueryParam	aQueryParam;
195cdf0e10cSrcweir 			SfxItemSet		aArgSet( GetPool(),
196cdf0e10cSrcweir 									 SCITEM_QUERYDATA,
197cdf0e10cSrcweir 									 SCITEM_QUERYDATA );
198cdf0e10cSrcweir 
199*22407013SOliver-Rainer Wittmann 			ScDBData* pDBData = GetDBData( sal_True, SC_DB_MAKE, SC_DBSEL_ROW_DOWN);
200cdf0e10cSrcweir 			pDBData->GetQueryParam( aQueryParam );
201cdf0e10cSrcweir 
202cdf0e10cSrcweir 			aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA,
203cdf0e10cSrcweir 									  GetViewData(),
204cdf0e10cSrcweir 									  &aQueryParam ) );
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 			// aktuelle Tabelle merken (wg. RefInput im Dialog)
207cdf0e10cSrcweir 			GetViewData()->SetRefTabNo( GetViewData()->GetTabNo() );
208cdf0e10cSrcweir 
209cdf0e10cSrcweir 			pResult = new ScFilterDlg( pB, pCW, pParent, aArgSet );
210cdf0e10cSrcweir 		}
211cdf0e10cSrcweir 		break;
212cdf0e10cSrcweir 
213cdf0e10cSrcweir 		case SID_OPENDLG_TABOP:
214cdf0e10cSrcweir 		{
215cdf0e10cSrcweir 			ScViewData*  pViewData	= GetViewData();
216cdf0e10cSrcweir 			ScRefAddress  aCurPos	( pViewData->GetCurX(),
217cdf0e10cSrcweir 									  pViewData->GetCurY(),
218cdf0e10cSrcweir 									  pViewData->GetTabNo(),
219cdf0e10cSrcweir 									  sal_False, sal_False, sal_False );
220cdf0e10cSrcweir 
221cdf0e10cSrcweir 			pResult = new ScTabOpDlg( pB, pCW, pParent, pViewData->GetDocument(), aCurPos );
222cdf0e10cSrcweir 		}
223cdf0e10cSrcweir 		break;
224cdf0e10cSrcweir 
225cdf0e10cSrcweir 		case SID_OPENDLG_SOLVE:
226cdf0e10cSrcweir 		{
227cdf0e10cSrcweir 			ScViewData*  pViewData	= GetViewData();
228cdf0e10cSrcweir             ScAddress aCurPos(  pViewData->GetCurX(),
229cdf0e10cSrcweir                                 pViewData->GetCurY(),
230cdf0e10cSrcweir                                 pViewData->GetTabNo());
231cdf0e10cSrcweir 			pResult = new ScSolverDlg( pB, pCW, pParent, pViewData->GetDocument(), aCurPos );
232cdf0e10cSrcweir 		}
233cdf0e10cSrcweir 		break;
234cdf0e10cSrcweir 
235cdf0e10cSrcweir         case SID_OPENDLG_OPTSOLVER:
236cdf0e10cSrcweir         {
237cdf0e10cSrcweir             ScViewData* pViewData = GetViewData();
238cdf0e10cSrcweir             ScAddress aCurPos( pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo());
239cdf0e10cSrcweir             pResult = new ScOptSolverDlg( pB, pCW, pParent, pViewData->GetDocShell(), aCurPos );
240cdf0e10cSrcweir         }
241cdf0e10cSrcweir         break;
242cdf0e10cSrcweir 
243cdf0e10cSrcweir 		case SID_OPENDLG_PIVOTTABLE:
244cdf0e10cSrcweir 		{
245cdf0e10cSrcweir 			//	all settings must be in pDialogDPObject
246cdf0e10cSrcweir 
247cdf0e10cSrcweir             if( pDialogDPObject )
248cdf0e10cSrcweir             {
249cdf0e10cSrcweir                 GetViewData()->SetRefTabNo( GetViewData()->GetTabNo() );
250cdf0e10cSrcweir                 pResult = new ScPivotLayoutDlg( pB, pCW, pParent, *pDialogDPObject );
251cdf0e10cSrcweir             }
252cdf0e10cSrcweir 		}
253cdf0e10cSrcweir 		break;
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 		case SID_OPENDLG_EDIT_PRINTAREA:
256cdf0e10cSrcweir 		{
257cdf0e10cSrcweir 			pResult = new ScPrintAreasDlg( pB, pCW, pParent );
258cdf0e10cSrcweir 		}
259cdf0e10cSrcweir 		break;
260cdf0e10cSrcweir 
261cdf0e10cSrcweir 		case SID_OPENDLG_CONDFRMT:
262cdf0e10cSrcweir 		{
263cdf0e10cSrcweir 			ScViewData* pViewData = GetViewData();
264cdf0e10cSrcweir 
265cdf0e10cSrcweir 			ScDocument* pDoc = pViewData->GetDocument();
266cdf0e10cSrcweir 			const ScConditionalFormat* pForm = pDoc->GetCondFormat(
267cdf0e10cSrcweir 				pViewData->GetCurX(), pViewData->GetCurY(), pViewData->GetTabNo() );
268cdf0e10cSrcweir 
269cdf0e10cSrcweir 			// aktuelle Tabelle merken (wg. RefInput im Dialog)
270cdf0e10cSrcweir 			pViewData->SetRefTabNo( pViewData->GetTabNo() );
271cdf0e10cSrcweir 
272cdf0e10cSrcweir 			pResult = new ScConditionalFormatDlg( pB, pCW, pParent, pDoc, pForm );
273cdf0e10cSrcweir 		}
274cdf0e10cSrcweir 		break;
275cdf0e10cSrcweir 
276cdf0e10cSrcweir 		case SID_OPENDLG_FUNCTION:
277cdf0e10cSrcweir 		{
278cdf0e10cSrcweir 			//	Dialog schaut selber, was in der Zelle steht
279cdf0e10cSrcweir 
280cdf0e10cSrcweir 			pResult = new ScFormulaDlg( pB, pCW, pParent, GetViewData(),ScGlobal::GetStarCalcFunctionMgr() );
281cdf0e10cSrcweir 		}
282cdf0e10cSrcweir 		break;
283cdf0e10cSrcweir 
284cdf0e10cSrcweir 		case FID_CHG_SHOW:
285cdf0e10cSrcweir 		{
286cdf0e10cSrcweir 			//	Dialog schaut selber, was in der Zelle steht
287cdf0e10cSrcweir 
288cdf0e10cSrcweir 			pResult = new ScHighlightChgDlg( pB, pCW, pParent, GetViewData() );
289cdf0e10cSrcweir 		}
290cdf0e10cSrcweir 		break;
291cdf0e10cSrcweir 
292cdf0e10cSrcweir 		case WID_SIMPLE_REF:
293cdf0e10cSrcweir 		{
294cdf0e10cSrcweir 			//	Dialog schaut selber, was in der Zelle steht
295cdf0e10cSrcweir 
296cdf0e10cSrcweir             ScViewData* pViewData = GetViewData();
297cdf0e10cSrcweir             pViewData->SetRefTabNo( pViewData->GetTabNo() );
298cdf0e10cSrcweir             pResult = new ScSimpleRefDlg( pB, pCW, pParent, pViewData );
299cdf0e10cSrcweir 		}
300cdf0e10cSrcweir 		break;
301cdf0e10cSrcweir 
302cdf0e10cSrcweir 
303cdf0e10cSrcweir 		default:
304cdf0e10cSrcweir 		DBG_ERROR( "ScTabViewShell::CreateRefDialog: unbekannte ID" );
305cdf0e10cSrcweir 		break;
306cdf0e10cSrcweir 	}
307cdf0e10cSrcweir 
308cdf0e10cSrcweir 	if (pResult)
309cdf0e10cSrcweir 	{
310cdf0e10cSrcweir 		//	Die Dialoge gehen immer mit eingeklapptem Zusaetze-Button auf,
311cdf0e10cSrcweir 		//	darum muss die Groesse ueber das Initialize gerettet werden
312cdf0e10cSrcweir 		//	(oder den Zusaetze-Status mit speichern !!!)
313cdf0e10cSrcweir 
314cdf0e10cSrcweir 		Size aSize = pResult->GetSizePixel();
315cdf0e10cSrcweir 		pResult->Initialize( pInfo );
316cdf0e10cSrcweir 		pResult->SetSizePixel(aSize);
317cdf0e10cSrcweir 	}
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 	return pResult;
320cdf0e10cSrcweir }
321cdf0e10cSrcweir 
322cdf0e10cSrcweir 
323cdf0e10cSrcweir 
324