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