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