xref: /AOO41X/main/sc/source/ui/view/reffact.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sc.hxx"
30 
31 
32 
33 // INCLUDE ---------------------------------------------------------------
34 
35 #include <sfx2/app.hxx>
36 #include <sfx2/basedlgs.hxx>
37 #include <sfx2/bindings.hxx>
38 #include <sfx2/dispatch.hxx>
39 #include <sfx2/viewfrm.hxx>
40 
41 #include "reffact.hxx"
42 #include "tabvwsh.hxx"
43 #include "sc.hrc"
44 #include "acredlin.hxx"
45 #include "simpref.hxx"
46 #include "scmod.hxx"
47 //<!--Added by PengYunQuan for Validity Cell Range Picker
48 #include "validate.hxx"
49 //<!--Added by PengYunQuan for Validity Cell Range Picker
50 
51 // -----------------------------------------------------------------------
52 
53 SFX_IMPL_MODELESSDIALOG(ScNameDlgWrapper, FID_DEFINE_NAME )
54 SFX_IMPL_MODELESSDIALOG(ScSolverDlgWrapper, SID_OPENDLG_SOLVE )
55 SFX_IMPL_MODELESSDIALOG(ScOptSolverDlgWrapper, SID_OPENDLG_OPTSOLVER )
56 SFX_IMPL_MODELESSDIALOG(ScPivotLayoutWrapper, SID_OPENDLG_PIVOTTABLE )
57 SFX_IMPL_MODELESSDIALOG(ScTabOpDlgWrapper, SID_OPENDLG_TABOP )
58 SFX_IMPL_MODELESSDIALOG(ScFilterDlgWrapper, SID_FILTER )
59 SFX_IMPL_MODELESSDIALOG(ScSpecialFilterDlgWrapper, SID_SPECIAL_FILTER )
60 SFX_IMPL_MODELESSDIALOG(ScDbNameDlgWrapper, SID_DEFINE_DBNAME )
61 SFX_IMPL_MODELESSDIALOG(ScConsolidateDlgWrapper, SID_OPENDLG_CONSOLIDATE )
62 SFX_IMPL_MODELESSDIALOG(ScPrintAreasDlgWrapper, SID_OPENDLG_EDIT_PRINTAREA )
63 SFX_IMPL_MODELESSDIALOG(ScCondFormatDlgWrapper, SID_OPENDLG_CONDFRMT )
64 SFX_IMPL_MODELESSDIALOG(ScColRowNameRangesDlgWrapper, SID_DEFINE_COLROWNAMERANGES )
65 SFX_IMPL_MODELESSDIALOG(ScFormulaDlgWrapper, SID_OPENDLG_FUNCTION )
66 SFX_IMPL_MODELESSDIALOG(ScAcceptChgDlgWrapper, FID_CHG_ACCEPT )
67 SFX_IMPL_MODELESSDIALOG(ScHighlightChgDlgWrapper, FID_CHG_SHOW )
68 SFX_IMPL_MODELESSDIALOG(ScSimpleRefDlgWrapper, WID_SIMPLE_REF )
69 /*!!! dafuer muss der Funktionsautopilot noch umgebaut werden
70 SFX_IMPL_CHILDWINDOW(ScFunctionDlgWrapper, SID_OPENDLG_FUNCTION )
71 SFX_IMPL_CHILDWINDOW(ScEditFunctionDlgWrapper, SID_OPENDLG_EDITFUNCTION )
72 SFX_IMPL_CHILDWINDOW(ScArgumentDlgWrapper, SID_OPENDLG_ARGUMENT )
73 */
74 //<!--Added by PengYunQuan for Validity Cell Range Picker
75 //SFX_IMPL_MODELESSDIALOG(ScValidityRefChildWin, SID_VALIDITY_REFERENCE )
76 SFX_IMPL_CHILDWINDOW(ScValidityRefChildWin, SID_VALIDITY_REFERENCE)
77 SfxChildWinInfo __EXPORT ScValidityRefChildWin::GetInfo() const
78 {
79 	SfxChildWinInfo anInfo = SfxChildWindow::GetInfo();
80 
81 	if( Window *pWnd = GetWindow() )
82 	{
83 		anInfo.aSize  = pWnd->GetSizePixel();
84 
85 		if( pWnd->IsDialog() )
86 			if ( static_cast<Dialog*>(pWnd)->IsRollUp() )
87 				anInfo.nFlags |= SFX_CHILDWIN_ZOOMIN;
88 	}
89 
90 	return anInfo;
91 }
92 
93 namespace { ScTabViewShell * lcl_GetTabViewShell( SfxBindings *pBindings ); }
94 //<!--Added by PengYunQuan for Validity Cell Range Picker
95 
96 #define IMPL_CHILD_CTOR(Class,sid) \
97 	Class::Class( Window*  	 			pParentP,					\
98 					sal_uInt16		 		nId,						\
99 					SfxBindings*		p,							\
100 					SfxChildWinInfo*	pInfo )						\
101 		: SfxChildWindow(pParentP, nId)								\
102 	{																\
103 		/*//<!--Added by PengYunQuan for Validity Cell Range Picker*/\
104 		/************************************************************************************/\
105 		/*		When a new document is creating, the SfxViewFrame may be ready,				*/\
106 		/*		But the ScTabViewShell may have not been activated yet. In this 			*/\
107 		/*		situation, SfxViewShell::Current() does not get the correct shell, 			*/\
108 		/*		and we should lcl_GetTabViewShell( p ) instead of SfxViewShell::Current()	*/\
109 		/************************************************************************************/\
110         ScTabViewShell* pViewShell = lcl_GetTabViewShell( p );      \
111 		/*//-->Added by PengYunQuan for Validity Cell Range Picker*/\
112         if (!pViewShell)                                            \
113             pViewShell = PTR_CAST( ScTabViewShell, SfxViewShell::Current() ); \
114 		DBG_ASSERT( pViewShell, "missing view shell :-(" );			\
115 		pWindow = pViewShell ?										\
116 			pViewShell->CreateRefDialog( p, this, pInfo, pParentP, sid ) : NULL;	\
117 		if (pViewShell && !pWindow)												\
118 			pViewShell->GetViewFrame()->SetChildWindow( nId, sal_False );			\
119 	}
120 
121 
122 //=========================================================================
123 
124 //-------------------------------------------------------------------------
125 // ScNameDlgWrapper
126 //-------------------------------------------------------------------------
127 
128 IMPL_CHILD_CTOR( ScNameDlgWrapper, FID_DEFINE_NAME )
129 
130 //-------------------------------------------------------------------------
131 // ScSolverDlgWrapper
132 //-------------------------------------------------------------------------
133 
134 IMPL_CHILD_CTOR( ScSolverDlgWrapper, SID_OPENDLG_SOLVE )
135 
136 //-------------------------------------------------------------------------
137 // ScOptSolverDlgWrapper
138 //-------------------------------------------------------------------------
139 
140 IMPL_CHILD_CTOR( ScOptSolverDlgWrapper, SID_OPENDLG_OPTSOLVER )
141 
142 //-------------------------------------------------------------------------
143 // ScPivotLayoutWrapper
144 //-------------------------------------------------------------------------
145 
146 IMPL_CHILD_CTOR( ScPivotLayoutWrapper, SID_OPENDLG_PIVOTTABLE )
147 
148 //-------------------------------------------------------------------------
149 // ScTabOpDlgWrapper
150 //-------------------------------------------------------------------------
151 
152 IMPL_CHILD_CTOR( ScTabOpDlgWrapper, SID_OPENDLG_TABOP )
153 
154 //-------------------------------------------------------------------------
155 // ScFilterDlgWrapper
156 //-------------------------------------------------------------------------
157 
158 IMPL_CHILD_CTOR( ScFilterDlgWrapper, SID_FILTER )
159 
160 //-------------------------------------------------------------------------
161 // ScSpecialFilterDlgWrapper
162 //-------------------------------------------------------------------------
163 
164 IMPL_CHILD_CTOR( ScSpecialFilterDlgWrapper, SID_SPECIAL_FILTER )
165 
166 //-------------------------------------------------------------------------
167 // ScDbNameDlgWrapper
168 //-------------------------------------------------------------------------
169 
170 IMPL_CHILD_CTOR( ScDbNameDlgWrapper, SID_DEFINE_DBNAME )
171 
172 //-------------------------------------------------------------------------
173 // ScColRowNameRangesDlgWrapper
174 //-------------------------------------------------------------------------
175 
176 IMPL_CHILD_CTOR( ScColRowNameRangesDlgWrapper, SID_DEFINE_COLROWNAMERANGES )
177 
178 //-------------------------------------------------------------------------
179 // ScConsolidateDlgWrapper
180 //-------------------------------------------------------------------------
181 
182 IMPL_CHILD_CTOR( ScConsolidateDlgWrapper, SID_OPENDLG_CONSOLIDATE )
183 
184 //-------------------------------------------------------------------------
185 // ScPrintAreasDlgWrapper
186 //-------------------------------------------------------------------------
187 
188 IMPL_CHILD_CTOR( ScPrintAreasDlgWrapper, SID_OPENDLG_EDIT_PRINTAREA )
189 
190 //-------------------------------------------------------------------------
191 // ScCondFormatDlgWrapper
192 //-------------------------------------------------------------------------
193 
194 IMPL_CHILD_CTOR( ScCondFormatDlgWrapper, SID_OPENDLG_CONDFRMT )
195 
196 //-------------------------------------------------------------------------
197 // ScFormulaDlgWrapper
198 //-------------------------------------------------------------------------
199 
200 IMPL_CHILD_CTOR( ScFormulaDlgWrapper, SID_OPENDLG_FUNCTION )
201 
202 
203 //-------------------------------------------------------------------------
204 // ScSimpleRefDlgWrapper
205 //-------------------------------------------------------------------------
206 
207 static sal_Bool		bScSimpleRefFlag;
208 static long		nScSimpleRefHeight;
209 static long		nScSimpleRefWidth;
210 static long		nScSimpleRefX;
211 static long		nScSimpleRefY;
212 static sal_Bool		bAutoReOpen=sal_True;
213 
214 ScSimpleRefDlgWrapper::ScSimpleRefDlgWrapper( Window* pParentP,
215 								sal_uInt16		 		nId,
216 								SfxBindings*		p,
217 								SfxChildWinInfo*	pInfo )
218 		: SfxChildWindow(pParentP, nId)
219 {
220 //	ScTabViewShell* pViewShell =
221 //		PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
222 
223     ScTabViewShell* pViewShell = NULL;
224     SfxDispatcher* pDisp = p->GetDispatcher();
225     if ( pDisp )
226     {
227         SfxViewFrame* pViewFrm = pDisp->GetFrame();
228         if ( pViewFrm )
229             pViewShell = PTR_CAST( ScTabViewShell, pViewFrm->GetViewShell() );
230     }
231 
232 	DBG_ASSERT( pViewShell, "missing view shell :-(" );
233 
234 	if(pInfo!=NULL && bScSimpleRefFlag)
235 	{
236 		pInfo->aPos.X()=nScSimpleRefX;
237 		pInfo->aPos.Y()=nScSimpleRefY;
238 		pInfo->aSize.Height()=nScSimpleRefHeight;
239 		pInfo->aSize.Width()=nScSimpleRefWidth;
240 	}
241 	pWindow = NULL;
242 
243 	if(bAutoReOpen && pViewShell)
244 		pWindow = pViewShell->CreateRefDialog( p, this, pInfo, pParentP, WID_SIMPLE_REF);
245 
246 	if (!pWindow)
247 	{
248 		SC_MOD()->SetRefDialog( nId, sal_False );
249 	}
250 }
251 
252 void ScSimpleRefDlgWrapper::SetDefaultPosSize(Point aPos, Size aSize, sal_Bool bSet)
253 {
254 	bScSimpleRefFlag=bSet;
255 	if(bScSimpleRefFlag)
256 	{
257 		nScSimpleRefX=aPos.X();
258 		nScSimpleRefY=aPos.Y();
259 		nScSimpleRefHeight=aSize.Height();
260 		nScSimpleRefWidth=aSize.Width();
261 	}
262 }
263 
264 
265 String ScSimpleRefDlgWrapper::GetRefString()
266 {
267 	String aResult;
268 	if(pWindow!=NULL)
269 	{
270 		aResult=((ScSimpleRefDlg*)pWindow)->GetRefString();
271 	}
272 	return aResult;
273 }
274 
275 void ScSimpleRefDlgWrapper::SetAutoReOpen(sal_Bool bFlag)
276 {
277 	bAutoReOpen=bFlag;
278 }
279 
280 void ScSimpleRefDlgWrapper::SetRefString(const String& rStr)
281 {
282 	if(pWindow!=NULL)
283 	{
284 		((ScSimpleRefDlg*)pWindow)->SetRefString(rStr);
285 	}
286 }
287 
288 void ScSimpleRefDlgWrapper::SetCloseHdl( const Link& rLink )
289 {
290 	if(pWindow!=NULL)
291 	{
292 		((ScSimpleRefDlg*)pWindow)->SetCloseHdl( rLink );
293 	}
294 }
295 
296 void ScSimpleRefDlgWrapper::SetUnoLinks( const Link& rDone,
297 					const Link& rAbort, const Link& rChange )
298 {
299 	if(pWindow!=NULL)
300 	{
301 		((ScSimpleRefDlg*)pWindow)->SetUnoLinks( rDone, rAbort, rChange );
302 	}
303 }
304 
305 void ScSimpleRefDlgWrapper::SetFlags( sal_Bool bCloseOnButtonUp, sal_Bool bSingleCell, sal_Bool bMultiSelection )
306 {
307 	if(pWindow!=NULL)
308 	{
309 		((ScSimpleRefDlg*)pWindow)->SetFlags( bCloseOnButtonUp, bSingleCell, bMultiSelection );
310 	}
311 }
312 
313 void ScSimpleRefDlgWrapper::StartRefInput()
314 {
315 	if(pWindow!=NULL)
316 	{
317 		((ScSimpleRefDlg*)pWindow)->StartRefInput();
318 	}
319 }
320 
321 
322 
323 //-------------------------------------------------------------------------
324 // ScAcceptChgDlgWrapper //Kommentar: sollte in die ViewShell
325 //-------------------------------------------------------------------------
326 
327 ScAcceptChgDlgWrapper::ScAcceptChgDlgWrapper(	Window* pParentP,
328 											sal_uInt16 nId,
329 											SfxBindings* pBindings,
330 											SfxChildWinInfo* pInfo ) :
331 											SfxChildWindow( pParentP, nId )
332 {
333 		ScTabViewShell* pViewShell =
334 			PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
335 		DBG_ASSERT( pViewShell, "missing view shell :-(" );
336         pWindow = pViewShell ?
337             new ScAcceptChgDlg( pBindings, this, pParentP, pViewShell->GetViewData() ) :
338             NULL;
339 		if(pWindow!=NULL)
340 		{
341 			((ScAcceptChgDlg*)pWindow)->Initialize( pInfo );
342 		}
343 		if (pViewShell && !pWindow)
344 			pViewShell->GetViewFrame()->SetChildWindow( nId, sal_False );
345 }
346 
347 void ScAcceptChgDlgWrapper::ReInitDlg()
348 {
349 	ScTabViewShell* pViewShell =
350 		PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
351 	DBG_ASSERT( pViewShell, "missing view shell :-(" );
352 
353     if(pWindow!=NULL && pViewShell)
354 	{
355 		((ScAcceptChgDlg*)pWindow)->ReInit(pViewShell->GetViewData());
356 	}
357 }
358 
359 //-------------------------------------------------------------------------
360 // ScHighlightChgDlgWrapper
361 //-------------------------------------------------------------------------
362 
363 IMPL_CHILD_CTOR( ScHighlightChgDlgWrapper, FID_CHG_SHOW )
364 
365 /*------------------------------------------------------------------------*/
366 /*@@@
367 		//-------------------------------------------------------------------------
368 		// ScFunctionDlgWrapper
369 		//-------------------------------------------------------------------------
370 
371 		IMPL_CHILD_CTOR( ScFunctionDlgWrapper, SID_OPENDLG_FUNCTION )
372 
373 		//-------------------------------------------------------------------------
374 		// ScEditFunctionDlgWrapper
375 		//-------------------------------------------------------------------------
376 
377 		IMPL_CHILD_CTOR( ScEditFunctionDlgWrapper, SID_OPENDLG_EDITFUNCTION )
378 
379 		//-------------------------------------------------------------------------
380 		// ScArgumentDlgWrapper
381 		//-------------------------------------------------------------------------
382 
383 		IMPL_CHILD_CTOR( ScArgumentDlgWrapper, SID_OPENDLG_ARGUMENT )
384 @@@*/
385 /*------------------------------------------------------------------------*/
386 
387 
388 //<!--Added by PengYunQuan for Validity Cell Range Picker
389 namespace
390 {
391 	ScTabViewShell * lcl_GetTabViewShell( SfxBindings *pBindings )
392 	{
393 		if( pBindings )
394 			if( SfxDispatcher* pDisp = pBindings ->GetDispatcher() )
395 				if( SfxViewFrame *pFrm = pDisp->GetFrame() )
396 					if( SfxViewShell* pViewSh = pFrm->GetViewShell() )
397 						return dynamic_cast<ScTabViewShell*>( pViewSh );
398 
399 		return NULL;
400 	}
401 }
402 
403 ScValidityRefChildWin::ScValidityRefChildWin( Window*  	 			pParentP,					\
404 											 sal_uInt16		 		nId,						\
405 											 SfxBindings*		p,							\
406 											 SfxChildWinInfo*	/*pInfo*/ )						\
407 											 : SfxChildWindow(pParentP, nId),
408 											 m_bVisibleLock( false ),
409 											 m_bFreeWindowLock( false ),
410 											 m_pSavedWndParent( NULL )
411 {
412 	SetWantsFocus( sal_False );\
413 		ScTabViewShell* pViewShell =								\
414             NULL != ( pWindow =  ScValidationDlg::Find1AliveObject( pParentP ) ) ? static_cast<ScValidationDlg*>(pWindow)->GetTabViewShell() :
415             lcl_GetTabViewShell( p );
416         if (!pViewShell)
417             pViewShell = PTR_CAST( ScTabViewShell, SfxViewShell::Current() );
418 		DBG_ASSERT( pViewShell, "missing view shell :-(" );			\
419 		if (pViewShell && !pWindow)												\
420 			pViewShell->GetViewFrame()->SetChildWindow( nId, sal_False );			\
421 		else if( pWindow /*&& pWindow->ISA(ScValidationDlg)*/ )
422 		{}//pWindow = new Window( pParentP, WB_HIDE );
423 
424 	if( pWindow ) m_pSavedWndParent = pWindow->GetParent();
425 }
426 
427 ScValidityRefChildWin::~ScValidityRefChildWin()
428 {
429 	if( pWindow ) pWindow->SetParent( m_pSavedWndParent );
430 
431 	if( m_bFreeWindowLock )
432 		pWindow = NULL;
433 }
434 //-->Added by PengYunQuan for Validity Cell Range Picker
435