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 // MARKER(update_precomp.py): autogen include statement, do not remove 23 #include "precompiled_automation.hxx" 24 #include <com/sun/star/frame/XFramesSupplier.hpp> 25 #include <com/sun/star/frame/XDispatch.hpp> 26 #include <com/sun/star/frame/XDispatchProvider.hpp> 27 #include <com/sun/star/util/XURLTransformer.hpp> 28 #include <comphelper/processfactory.hxx> 29 #include <comphelper/uieventslogger.hxx> 30 31 #include <tools/wintypes.hxx> 32 #include <vcl/dialog.hxx> 33 #include <vcl/button.hxx> 34 #include <vcl/menubtn.hxx> 35 #include <svtools/svtreebx.hxx> 36 #include <svtools/brwbox.hxx> 37 #include <vcl/msgbox.hxx> 38 #include <vcl/dockwin.hxx> 39 #include <vcl/floatwin.hxx> 40 #include <vcl/lstbox.hxx> 41 #include <vcl/combobox.hxx> 42 #include <vcl/morebtn.hxx> 43 #include <vcl/field.hxx> 44 #include <vcl/toolbox.hxx> 45 #include <vcl/tabctrl.hxx> 46 #include <vcl/tabpage.hxx> 47 #include <vcl/menu.hxx> 48 #include <vcl/status.hxx> 49 #include <svtools/prgsbar.hxx> 50 #include <svtools/editbrowsebox.hxx> 51 #include <vcl/splitwin.hxx> 52 #include <vcl/group.hxx> 53 #include <vcl/fixed.hxx> 54 #include <vcl/wrkwin.hxx> 55 #include <osl/diagnose.h> 56 #include <svtools/valueset.hxx> 57 #include <svtools/roadmap.hxx> 58 #include <svtools/table/tablecontrol.hxx> 59 #include <svtools/table/tablecontrolinterface.hxx> 60 #include <svl/poolitem.hxx> 61 #include <svtools/extensionlistbox.hxx> 62 #include <svtools/svtdata.hxx> 63 #include <tools/time.hxx> 64 #include <svtools/stringtransfer.hxx> 65 #include <tools/stream.hxx> 66 #include <tools/fsys.hxx> 67 #include <svl/stritem.hxx> 68 #include <svtools/ttprops.hxx> 69 #include <basic/ttstrhlp.hxx> 70 #include <basic/dispdefs.hxx> 71 #include <basic/sbuno.hxx> 72 #include <vos/socket.hxx> 73 #include <svl/pickerhistory.hxx> 74 #include <com/sun/star/util/XCancellable.hpp> 75 #include <sot/storage.hxx> 76 #include <sot/storinfo.hxx> 77 #include "statemnt.hxx" 78 #include "scmdstrm.hxx" 79 #include "retstrm.hxx" 80 #if OSL_DEBUG_LEVEL > 1 81 #include "editwin.hxx" 82 #endif 83 #include "rcontrol.hxx" 84 #include <automation/communi.hxx> 85 #include "testtool.hxx" 86 #include "profiler.hxx" 87 #include "recorder.hxx" 88 #include "testtool.hrc" 89 #include <basic/svtmsg.hrc> 90 #include <algorithm> 91 #include <vcl/dibtools.hxx> 92 93 using namespace com::sun::star::frame; 94 using namespace com::sun::star::uno; 95 //using namespace com::sun::star::util; geht wegen Color nicht 96 using namespace com::sun::star::beans; 97 using namespace svt; 98 //using namespace svt::table; 99 100 101 #ifndef SBX_VALUE_DECL_DEFINED 102 #define SBX_VALUE_DECL_DEFINED 103 SV_DECL_REF(SbxValue) 104 #endif 105 SV_IMPL_REF(SbxValue) 106 107 CommunicationLink *StatementFlow::pCommLink = NULL; 108 sal_Bool StatementFlow::bUseIPC = sal_True; 109 sal_Bool StatementFlow::bSending = sal_False; 110 ImplRemoteControl *StatementFlow::pRemoteControl = NULL; 111 112 sal_uInt16 StatementCommand::nDirPos = 0; 113 Dir *StatementCommand::pDir = NULL; 114 pfunc_osl_printDebugMessage StatementCommand::pOriginal_osl_DebugMessageFunc = NULL; 115 116 117 #define RESET_APPLICATION_TO_BACKING_WINDOW 118 119 120 #define SET_WINP_CLOSING(pWin) \ 121 pWindowWaitPointer = pWin; \ 122 aWindowWaitUId = pControl->GetUniqueOrHelpId(); \ 123 aWindowWaitOldHelpId = pWin->GetHelpId(); \ 124 aWindowWaitOldUniqueId = pWin->GetUniqueId(); \ 125 pWin->SetHelpId( rtl::OString("TT_Win_is_closing_HID") ); \ 126 pWin->SetUniqueId( rtl::OString("TT_Win_is_closing_UID") ); 127 128 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 129 130 StatementFlow::StatementFlow( StatementList *pAfterThis, sal_uInt16 nArtP ) 131 : nArt(nArtP) 132 , nParams(0) 133 , nSNr1(0) 134 , nLNr1(0) 135 , aString1() 136 , bBool1(sal_False) 137 { 138 QueStatement( pAfterThis ); 139 } 140 141 StatementFlow::StatementFlow( sal_uLong nServiceId, SCmdStream *pCmdIn, ImplRemoteControl *pRC ) 142 : nArt(0) 143 , nParams(0) 144 , nSNr1(0) 145 , nLNr1(0) 146 , aString1() 147 , bBool1(sal_False) 148 { 149 QueStatement( NULL ); 150 bUseIPC = (nServiceId == SI_IPCCommandBlock); 151 pRemoteControl = pRC; 152 pCmdIn->Read( nArt ); 153 pCmdIn->Read( nParams ); 154 155 if( nParams & PARAM_USHORT_1 ) pCmdIn->Read( nSNr1 ); 156 if( nParams & PARAM_ULONG_1 ) pCmdIn->Read( nLNr1 ); 157 if( nParams & PARAM_STR_1 ) pCmdIn->Read( aString1 ); 158 if( nParams & PARAM_BOOL_1 ) pCmdIn->Read( bBool1 ); // sollte nie auftreten!! 159 160 #if OSL_DEBUG_LEVEL > 1 161 m_pDbgWin->AddText( "Reading FlowControl: " ); 162 m_pDbgWin->AddText( String::CreateFromInt32( nArt ) ); 163 m_pDbgWin->AddText( " Params:" ); 164 if( nParams & PARAM_USHORT_1 ) {m_pDbgWin->AddText( " n1:" );m_pDbgWin->AddText( String::CreateFromInt32( nSNr1 ) );} 165 if( nParams & PARAM_ULONG_1 ) {m_pDbgWin->AddText( " l1:" );m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) );} 166 if( nParams & PARAM_STR_1 ) {m_pDbgWin->AddText( " s1:" );m_pDbgWin->AddText( aString1 );} 167 if( nParams & PARAM_BOOL_1 ) {m_pDbgWin->AddText( " b2:" );m_pDbgWin->AddText( bBool1 ? "TRUE" : "FALSE" );} 168 m_pDbgWin->AddText( "\n" ); 169 #endif 170 } 171 172 void StatementFlow::SendViaSocket() 173 { 174 if ( bSending ) 175 { 176 #if OSL_DEBUG_LEVEL > 1 177 m_pDbgWin->AddText( "SendViaSocket called recursively. Aborted!!!\n" ); 178 #endif 179 DBG_ERROR("SendViaSocket called recursively. Aborted!!!"); 180 return; 181 } 182 bSending = sal_True; 183 if ( pCommLink ) 184 { 185 if ( !pCommLink->TransferDataStream( pRet->GetStream() ) ) // tritt ein Fehler auf, so wird sofort gel�scht ... 186 pCommLink = NULL; 187 } 188 else 189 { 190 // Macht nix. Wenn das Basic nicht mehr da ist, ist sowiso alles egal 191 DBG_ERROR("Cannot send results to TestTool"); 192 } 193 194 pRet->Reset(); 195 bSending = sal_False; 196 IsError = sal_False; 197 } 198 199 sal_Bool StatementFlow::Execute() 200 { 201 #if OSL_DEBUG_LEVEL > 1 202 m_pDbgWin->AddText( "Executing Flow: " ); 203 m_pDbgWin->AddText( String::CreateFromInt32( nArt ) ); 204 m_pDbgWin->AddText( "\n" ); 205 #endif 206 switch ( nArt ) 207 { 208 case F_EndCommandBlock: 209 { 210 211 if ( !bUseIPC ) 212 { 213 // bBool1 wurde im CTOR auf sal_False initialisiert 214 if ( !bBool1 ) // also erster Durchlauf 215 { 216 pRemoteControl->pRetStream = pRet->GetStream(); 217 bBool1 = sal_True; // wurde im CTOR auf sal_False initialisiert 218 nRetryCount = nRetryCount * 4; 219 } 220 if ( pRemoteControl->pRetStream && (nRetryCount--) ) // also solange nicht abgeholt 221 { 222 return sal_False; // Bitte einmal vom Callstack runter 223 } 224 } 225 226 } 227 break; 228 } 229 230 Advance(); 231 switch ( nArt ) 232 { 233 case F_EndCommandBlock: 234 if ( !bUseIPC ) 235 { // wird oben abgehandelt 236 pRet->Reset(); 237 IsError = sal_False; 238 } 239 else 240 SendViaSocket(); 241 242 break; 243 244 case F_Sequence: 245 246 pRet->GenReturn(RET_Sequence,nLNr1); 247 #if OSL_DEBUG_LEVEL > 1 248 m_pDbgWin->AddText( "Sending Sequence Nr: " ); 249 m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) ); 250 m_pDbgWin->AddText( "\n" ); 251 #endif 252 253 break; 254 // case RET_: 255 default: 256 DBG_ERROR( "Unknown Flowcontrol" ); 257 break; 258 } 259 260 delete this; 261 return sal_True; 262 } 263 264 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 265 266 // neue Hilfsfunktion, die stetig erweitert werden muss 267 static short ImpGetRType( Window *pWin ) 268 { 269 short nRT = C_NoType; 270 WindowType eRT = pWin->GetType(); 271 switch( eRT ) { 272 case WINDOW_WINDOW: nRT = C_Window ; break; 273 274 case WINDOW_TABCONTROL: nRT = C_TabControl ; break; 275 case WINDOW_RADIOBUTTON: nRT = C_RadioButton ; break; 276 case WINDOW_CHECKBOX: nRT = C_CheckBox ; break; 277 case WINDOW_TRISTATEBOX: nRT = C_TriStateBox ; break; 278 case WINDOW_EDIT: nRT = C_Edit ; break; 279 case WINDOW_MULTILINEEDIT: nRT = C_MultiLineEdit ; break; 280 case WINDOW_MULTILISTBOX: nRT = C_MultiListBox ; break; 281 case WINDOW_LISTBOX: nRT = C_ListBox ; break; 282 case WINDOW_COMBOBOX: nRT = C_ComboBox ; break; 283 case WINDOW_PUSHBUTTON: nRT = C_PushButton ; break; 284 case WINDOW_SPINFIELD: nRT = C_SpinField ; break; 285 case WINDOW_PATTERNFIELD: nRT = C_PatternField ; break; 286 case WINDOW_NUMERICFIELD: nRT = C_NumericField ; break; 287 case WINDOW_METRICFIELD: nRT = C_MetricField ; break; 288 case WINDOW_CURRENCYFIELD: nRT = C_CurrencyField ; break; 289 case WINDOW_DATEFIELD: nRT = C_DateField ; break; 290 case WINDOW_TIMEFIELD: nRT = C_TimeField ; break; 291 case WINDOW_IMAGERADIOBUTTON: nRT = C_ImageRadioButton ; break; 292 case WINDOW_NUMERICBOX: nRT = C_NumericBox ; break; 293 case WINDOW_METRICBOX: nRT = C_MetricBox ; break; 294 case WINDOW_CURRENCYBOX: nRT = C_CurrencyBox ; break; 295 case WINDOW_DATEBOX: nRT = C_DateBox ; break; 296 case WINDOW_TIMEBOX: nRT = C_TimeBox ; break; 297 case WINDOW_IMAGEBUTTON: nRT = C_ImageButton ; break; 298 case WINDOW_MENUBUTTON: nRT = C_MenuButton ; break; 299 case WINDOW_MOREBUTTON: nRT = C_MoreButton ; break; 300 301 302 case WINDOW_TABPAGE: nRT = C_TabPage; break; 303 case WINDOW_MODALDIALOG: nRT = C_ModalDlg; break; 304 case WINDOW_FLOATINGWINDOW: nRT = C_FloatWin; break; 305 case WINDOW_MODELESSDIALOG: nRT = C_ModelessDlg; break; 306 case WINDOW_WORKWINDOW: nRT = C_WorkWin; break; 307 case WINDOW_DOCKINGWINDOW: nRT = C_DockingWin; break; 308 309 case WINDOW_MESSBOX: nRT = C_MessBox; break; 310 case WINDOW_INFOBOX: nRT = C_InfoBox; break; 311 case WINDOW_WARNINGBOX: nRT = C_WarningBox; break; 312 case WINDOW_ERRORBOX: nRT = C_ErrorBox; break; 313 case WINDOW_QUERYBOX: nRT = C_QueryBox; break; 314 #if 0 //ifndef VCL 315 case WINDOW_FILEDIALOG: nRT = C_FileDlg; break; 316 case WINDOW_PATHDIALOG: nRT = C_PathDlg; break; 317 case WINDOW_PRINTDIALOG: nRT = C_PrintDlg; break; 318 case WINDOW_PRINTERSETUPDIALOG: nRT = C_PrinterSetupDlg;break; 319 case WINDOW_COLORDIALOG: nRT = C_ColorDlg; break; 320 #endif 321 case WINDOW_TABDIALOG: nRT = C_TabDlg; break; 322 // case WINDOW_TABDIALOG: nRT = C_SingleTabDlg; break; 323 324 case WINDOW_PATTERNBOX: nRT = C_PatternBox; break; 325 case WINDOW_TOOLBOX: nRT = C_ToolBox; break; 326 // Gibts nicht case WINDOW_VALUESET: nRT = C_ValueSet; break; 327 case WINDOW_CONTROL: nRT = C_Control; break; 328 case WINDOW_OKBUTTON: nRT = C_OkButton; break; 329 case WINDOW_CANCELBUTTON: nRT = C_CancelButton; break; 330 case WINDOW_BUTTONDIALOG: nRT = C_ButtonDialog; break; 331 case WINDOW_TREELISTBOX: nRT = C_TreeListBox; break; 332 333 case WINDOW_DIALOG: nRT = C_Dialog; break; 334 } 335 return nRT; 336 } 337 338 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 339 340 StatementSlot::StatementSlot( SCmdStream *pCmdIn ) 341 : pItemArr(NULL) 342 { 343 QueStatement( NULL ); 344 pCmdIn->Read( nFunctionId ); 345 #if OSL_DEBUG_LEVEL > 1 346 m_pDbgWin->AddText( "Reading Slot: " ); 347 m_pDbgWin->AddText( String::CreateFromInt32( nFunctionId ) ); 348 m_pDbgWin->AddText( "\n" ); 349 #endif 350 pCmdIn->Read( nAnzahl ); 351 if ( nAnzahl ) 352 { 353 switch ( pCmdIn->GetNextType() ) 354 { 355 case BinUSHORT: // use old calling method 356 { 357 nAnzahl++; 358 pItemArr = new SfxPoolItem*[nAnzahl]; 359 for (sal_uInt16 i = 0 ; i+1 < nAnzahl ; i++) 360 pCmdIn->Read( pItemArr[i] ); 361 pItemArr[nAnzahl-1] = NULL; 362 } 363 break; 364 case BinString: // new Method 365 { 366 aArgs.realloc(nAnzahl); 367 PropertyValue* pArg = aArgs.getArray(); 368 for (sal_uInt16 i = 0 ; i < nAnzahl ; i++) 369 pCmdIn->Read( pArg[i] ); 370 } 371 break; 372 } 373 } 374 } 375 376 // Constructor for UnoSlot 377 StatementSlot::StatementSlot() 378 : nAnzahl( 0 ) 379 , pItemArr(NULL) 380 , nFunctionId( 0 ) 381 , bMenuClosed(sal_False) 382 {} 383 384 StatementSlot::StatementSlot( sal_uLong nSlot, SfxPoolItem* pItem ) 385 : pItemArr(NULL) 386 , bMenuClosed(sal_False) 387 { 388 QueStatement( NULL ); 389 nFunctionId = sal_uInt16(nSlot); 390 #if OSL_DEBUG_LEVEL > 1 391 m_pDbgWin->AddText( "Reading Slot: " ); 392 m_pDbgWin->AddText( String::CreateFromInt32( nFunctionId ) ); 393 m_pDbgWin->AddText( "\n" ); 394 #endif 395 if ( pItem ) 396 { 397 nAnzahl = 2; 398 pItemArr = new SfxPoolItem*[2]; 399 pItemArr[0] = pItem; 400 pItemArr[1] = NULL; 401 } 402 else 403 nAnzahl = 0; 404 } 405 406 StatementSlot::~StatementSlot() 407 { 408 if (nAnzahl) 409 { 410 if ( pItemArr ) 411 { 412 for (sal_uInt16 i = 0 ; i+1 < nAnzahl ; i++) 413 delete pItemArr[i]; 414 delete[] pItemArr; 415 } 416 417 aArgs.realloc( 0 ); 418 } 419 } 420 421 void StatementSlot::AddReferer() 422 { 423 HACK( "only to test!" ); 424 // because slot 6102 /*SID_VERB_START*/ crashes when called with Property Referer 425 // We return to the previous behavior (which was a bug realy) of not adding this Property to calls which have no properties at all 426 // according to MBA most likely this Property can be removed at all and is maybe only needed for Slots with URLs 427 if ( !nAnzahl ) 428 return; 429 430 PropertyValue* pArg; 431 432 nAnzahl++; 433 aArgs.realloc(nAnzahl); 434 pArg = aArgs.getArray(); 435 pArg[nAnzahl-1].Name = rtl::OUString::createFromAscii("Referer"); 436 pArg[nAnzahl-1].Value <<= ::rtl::OUString::createFromAscii("private:user"); 437 438 nAnzahl++; 439 aArgs.realloc(nAnzahl); 440 pArg = aArgs.getArray(); 441 pArg[nAnzahl-1].Name = rtl::OUString::createFromAscii("SynchronMode"); 442 pArg[nAnzahl-1].Value <<= sal_Bool( sal_True ); 443 } 444 445 class SlotStatusListener : public cppu::WeakImplHelper1< XStatusListener > 446 { 447 public: 448 SlotStatusListener(); 449 450 // XStatusListener 451 virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw (::com::sun::star::uno::RuntimeException); 452 // XEventListener 453 virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); 454 455 // local Members 456 sal_Bool bDisposed; 457 sal_Bool bEnabled; 458 }; 459 /* 460 struct FeatureStateEvent : public ::com::sun::star::lang::EventObject 461 ::com::sun::star::util::URL FeatureURL; 462 ::rtl::OUString FeatureDescriptor; 463 sal_Bool IsEnabled; 464 sal_Bool Requery; 465 ::com::sun::star::uno::Any State; 466 467 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > Source; 468 */ 469 470 SlotStatusListener::SlotStatusListener() 471 : bDisposed( sal_False ) 472 , bEnabled( sal_True ) 473 {} 474 475 // XStatusListener 476 void SAL_CALL SlotStatusListener::statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw (::com::sun::star::uno::RuntimeException) 477 { 478 // DBG_ERROR1("FeatureURL: %s", ByteString( String( Event.FeatureURL.Complete ), RTL_TEXTENCODING_UTF8 ).GetBuffer() ); 479 // DBG_ERROR1("FeatureDescriptor: %s", ByteString( String( Event.FeatureDescriptor ), RTL_TEXTENCODING_UTF8 ).GetBuffer() ); 480 bEnabled = Event.IsEnabled; 481 // DBG_ASSERT( Event.IsEnabled, "Not enabled" ); 482 // DBG_ASSERT( !Event.Requery, "Requery" ); 483 } 484 485 // XEventListener 486 void SAL_CALL SlotStatusListener::disposing( const ::com::sun::star::lang::EventObject& ) throw (::com::sun::star::uno::RuntimeException) 487 { 488 bDisposed = sal_True; 489 } 490 491 sal_Bool StatementSlot::Execute() 492 { 493 if ( IsError ) 494 { 495 #if OSL_DEBUG_LEVEL > 1 496 m_pDbgWin->AddText( "Skipping Slot: " ); 497 m_pDbgWin->AddText( String::CreateFromInt32( nFunctionId ) ); 498 m_pDbgWin->AddText( "\n" ); 499 #endif 500 501 Advance(); 502 delete this; 503 return sal_True; 504 } 505 506 InitProfile(); 507 #if OSL_DEBUG_LEVEL > 1 508 m_pDbgWin->AddText( "Executing Slot: " ); 509 m_pDbgWin->AddText( String::CreateFromInt32( nFunctionId ) ); 510 m_pDbgWin->AddText( "\n" ); 511 #endif 512 513 PopupMenu *pPopup = NULL; 514 MenuBar *pMenuBar = NULL; 515 Menu *pMenu; 516 517 GetCurrentMenues( pPopup, pMenuBar, pMenu ); 518 if ( pPopup ) 519 { 520 if ( !bMenuClosed ) 521 { 522 pPopup->EndExecute(0); 523 aSubMenuId1 = 0; 524 aSubMenuId2 = 0; 525 aSubMenuId3 = 0; 526 pMenuWindow = NULL; 527 bMenuClosed = sal_True; 528 #if OSL_DEBUG_LEVEL > 1 529 m_pDbgWin->AddText( "Closed contextmenu\n" ); 530 #endif 531 return sal_False; 532 } 533 else if ( nRetryCount-- ) 534 { 535 #if OSL_DEBUG_LEVEL > 1 536 m_pDbgWin->AddText( "Waiting for contextmenu to close\n" ); 537 #endif 538 return sal_False; 539 } 540 else 541 ReportError( GEN_RES_STR0( S_MENU_NOT_CLOSING ) ); 542 } 543 544 Advance(); 545 546 if ( !IsError ) 547 { 548 if ( ( nAnzahl == 0 && !getenv("OLDSLOTHANDLING") ) || aArgs.hasElements() ) 549 { // trying to call slots via uno 550 AddReferer(); 551 if ( !aUnoUrl.Len() ) 552 aUnoUrl = CUniString("slot:").Append( String::CreateFromInt32( nFunctionId ) ); 553 ::com::sun::star::util::URL aTargetURL; 554 aTargetURL.Complete = aUnoUrl; 555 Reference < XFramesSupplier > xDesktop = Reference < XFramesSupplier >( ::comphelper::getProcessServiceFactory()->createInstance( CUniString("com.sun.star.frame.Desktop") ), UNO_QUERY ); 556 Reference < XFrame > xFrame; 557 558 if ( xDesktop.is() ) 559 { 560 xFrame = xDesktop->getActiveFrame(); 561 if ( !xFrame.is() ) 562 { 563 Reference < XFrames > xFrames; 564 xFrames = xDesktop->getFrames(); 565 if ( xFrames.is() && xFrames->getCount() > 0 ) 566 { 567 Any aFrame = xFrames->getByIndex( xFrames->getCount() -1 ); 568 aFrame >>= xFrame; 569 } 570 } 571 if ( !xFrame.is() ) 572 { 573 if ( GetFirstDocFrame() ) 574 GetFirstDocFrame()->ToTop(); 575 xFrame = xDesktop->getActiveFrame(); 576 } 577 } 578 579 if ( xFrame.is() ) 580 xDesktop = Reference < XFramesSupplier >( xFrame, UNO_QUERY ); 581 else 582 xDesktop.clear(); 583 584 while ( xDesktop.is() && xDesktop->getActiveFrame().is() ) 585 { 586 xFrame = xDesktop->getActiveFrame(); 587 #if OSL_DEBUG_LEVEL > 1 588 ::rtl::OUString aName; 589 if ( xFrame.is() ) 590 aName = xFrame->getName(); 591 #endif 592 xDesktop = Reference < XFramesSupplier >( xFrame, UNO_QUERY ); 593 } 594 595 if ( !xFrame.is() ) 596 ReportError( GEN_RES_STR1( S_UNO_URL_EXECUTE_FAILED_NO_FRAME, aTargetURL.Complete ) ); 597 else 598 { 599 Reference < ::com::sun::star::util::XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance( CUniString("com.sun.star.util.URLTransformer" )), UNO_QUERY ); 600 xTrans->parseStrict( aTargetURL ); 601 602 Reference < XDispatchProvider > xProv( xFrame, UNO_QUERY ); 603 Reference < XDispatch > xDisp; 604 while ( xProv.is() && !xDisp.is() ) 605 { 606 xDisp = xProv->queryDispatch( aTargetURL, ::rtl::OUString(), 0 ); 607 if ( !xDisp.is() ) 608 { 609 xFrame = Reference < XFrame > ( xFrame->getCreator(), UNO_QUERY ); 610 xProv = Reference < XDispatchProvider > ( xFrame, UNO_QUERY ); 611 } 612 } 613 614 if ( xDisp.is() ) 615 { 616 Reference < XStatusListener > xListener = ( XStatusListener* )new SlotStatusListener; 617 xDisp->addStatusListener( xListener, aTargetURL ); 618 if ( static_cast< SlotStatusListener* >(xListener.get())->bEnabled ) 619 { 620 if ( bIsSlotInExecute ) 621 ReportError( GEN_RES_STR0( S_SLOT_IN_EXECUTE ) ); 622 else 623 { 624 bIsSlotInExecute = sal_True; 625 xDisp->dispatch( aTargetURL, aArgs ); 626 bIsSlotInExecute = sal_False; 627 } 628 } 629 else 630 ReportError( GEN_RES_STR1( S_UNO_URL_EXECUTE_FAILED_DISABLED, aTargetURL.Complete ) ); 631 xDisp->removeStatusListener( xListener, aTargetURL ); 632 } 633 else 634 ReportError( GEN_RES_STR1( S_UNO_URL_EXECUTE_FAILED_NO_DISPATCHER, aTargetURL.Complete ) ); 635 } 636 } 637 else 638 { 639 DirectLog( S_QAError, GEN_RES_STR0( S_DEPRECATED ) ); 640 if ( !pTTProperties ) 641 pTTProperties = new TTProperties(); 642 643 switch ( pTTProperties->ExecuteFunction( nFunctionId, pItemArr, EXECUTEMODE_DIALOGASYNCHRON | nUseBindings ) ) 644 { 645 case TT_PR_ERR_NODISPATCHER: 646 { 647 ReportError( rtl::OString::valueOf((sal_Int32)nFunctionId), GEN_RES_STR0( S_SID_EXECUTE_FAILED_NO_DISPATCHER ) ); 648 } 649 break; 650 case TT_PR_ERR_NOEXECUTE: 651 { 652 ReportError( rtl::OString::valueOf((sal_Int32)nFunctionId), GEN_RES_STR0( S_SID_EXECUTE_FAILED ) ); 653 } 654 break; 655 } 656 } 657 } 658 659 660 /* Neues Verfahren ab 334! 661 Neue Methode zum einstellen, da� Modale Dialoge immer Asynchron aufgerufen werden 662 und echter Returnwert, ob Slot geklappt hat 663 und Testen ob Slot �berhaupt durch UI aufgerufen werden kann */ 664 665 666 SendProfile( SlotString( nFunctionId ) ); 667 delete this; 668 return sal_True; 669 } 670 671 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 672 673 StatementUnoSlot::StatementUnoSlot(SCmdStream *pIn) 674 { 675 QueStatement( NULL ); 676 677 pIn->Read( aUnoUrl ); 678 679 #if OSL_DEBUG_LEVEL > 1 680 StatementList::m_pDbgWin->AddText( "UnoUrl:" ); 681 StatementList::m_pDbgWin->AddText( aUnoUrl ); 682 StatementList::m_pDbgWin->AddText( "\n" ); 683 #endif 684 685 } 686 687 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 688 689 StatementCommand::StatementCommand( StatementList *pAfterThis, sal_uInt16 MethodId, sal_uInt16 Params, sal_uInt16 Nr1 ) 690 : nMethodId( MethodId ) 691 , nParams(Params) 692 , nNr1(Nr1) 693 , nNr2(0) 694 , nNr3(0) 695 , nNr4(0) 696 , nLNr1(0) 697 , aString1() 698 , aString2() 699 , bBool1(sal_False) 700 , bBool2(sal_False) 701 { 702 QueStatement( pAfterThis ); 703 704 #if OSL_DEBUG_LEVEL > 1 705 m_pDbgWin->AddText( "Directly adding Conmmand:" ); 706 m_pDbgWin->AddText( " Methode: " ); 707 m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); 708 m_pDbgWin->AddText( " Params:" ); 709 if( nParams & PARAM_USHORT_1 ) {m_pDbgWin->AddText( " n1:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr1 ) );} 710 if( nParams & PARAM_USHORT_2 ) {m_pDbgWin->AddText( " n2:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr2 ) );} 711 if( nParams & PARAM_USHORT_3 ) {m_pDbgWin->AddText( " n3:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr3 ) );} 712 if( nParams & PARAM_USHORT_4 ) {m_pDbgWin->AddText( " n4:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr4 ) );} 713 if( nParams & PARAM_ULONG_1 ) {m_pDbgWin->AddText( " nl1:" );m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) );} 714 if( nParams & PARAM_STR_1 ) {m_pDbgWin->AddText( " s1:" );m_pDbgWin->AddText( aString1 );} 715 if( nParams & PARAM_STR_2 ) {m_pDbgWin->AddText( " s2:" );m_pDbgWin->AddText( aString2 );} 716 if( nParams & PARAM_BOOL_1 ) {m_pDbgWin->AddText( " b1:" );m_pDbgWin->AddText( bBool1 ? "TRUE" : "FALSE" );} 717 if( nParams & PARAM_BOOL_2 ) {m_pDbgWin->AddText( " b2:" );m_pDbgWin->AddText( bBool2 ? "TRUE" : "FALSE" );} 718 m_pDbgWin->AddText( "\n" ); 719 #endif 720 } 721 722 723 StatementCommand::StatementCommand( SCmdStream *pCmdIn ) 724 : nMethodId(0) 725 , nParams(0) 726 , nNr1(0) 727 , nNr2(0) 728 , nNr3(0) 729 , nNr4(0) 730 , nLNr1(0) 731 , aString1() 732 , aString2() 733 , bBool1(sal_False) 734 , bBool2(sal_False) 735 { 736 QueStatement( NULL ); 737 pCmdIn->Read( nMethodId ); 738 pCmdIn->Read( nParams ); 739 740 if( nParams & PARAM_USHORT_1 ) pCmdIn->Read( nNr1 ); 741 if( nParams & PARAM_USHORT_2 ) pCmdIn->Read( nNr2 ); 742 if( nParams & PARAM_USHORT_3 ) pCmdIn->Read( nNr3 ); 743 if( nParams & PARAM_USHORT_4 ) pCmdIn->Read( nNr4 ); 744 if( nParams & PARAM_ULONG_1 ) pCmdIn->Read( nLNr1 ); 745 if( nParams & PARAM_STR_1 ) pCmdIn->Read( aString1 ); 746 if( nParams & PARAM_STR_2 ) pCmdIn->Read( aString2 ); 747 if( nParams & PARAM_BOOL_1 ) pCmdIn->Read( bBool1 ); 748 if( nParams & PARAM_BOOL_2 ) pCmdIn->Read( bBool2 ); 749 750 #if OSL_DEBUG_LEVEL > 1 751 m_pDbgWin->AddText( "Reading Conmmand:" ); 752 m_pDbgWin->AddText( " Methode: " ); 753 m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); 754 m_pDbgWin->AddText( " Params:" ); 755 if( nParams & PARAM_USHORT_1 ) {m_pDbgWin->AddText( " n1:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr1 ) );} 756 if( nParams & PARAM_USHORT_2 ) {m_pDbgWin->AddText( " n2:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr2 ) );} 757 if( nParams & PARAM_USHORT_3 ) {m_pDbgWin->AddText( " n3:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr3 ) );} 758 if( nParams & PARAM_USHORT_4 ) {m_pDbgWin->AddText( " n4:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr4 ) );} 759 if( nParams & PARAM_ULONG_1 ) {m_pDbgWin->AddText( " nl1:" );m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) );} 760 if( nParams & PARAM_STR_1 ) {m_pDbgWin->AddText( " s1:" );m_pDbgWin->AddText( aString1 );} 761 if( nParams & PARAM_STR_2 ) {m_pDbgWin->AddText( " s2:" );m_pDbgWin->AddText( aString2 );} 762 if( nParams & PARAM_BOOL_1 ) {m_pDbgWin->AddText( " b1:" );m_pDbgWin->AddText( bBool1 ? "TRUE" : "FALSE" );} 763 if( nParams & PARAM_BOOL_2 ) {m_pDbgWin->AddText( " b2:" );m_pDbgWin->AddText( bBool2 ? "TRUE" : "FALSE" );} 764 m_pDbgWin->AddText( "\n" ); 765 #endif 766 767 if ( nMethodId == RC_AppAbort ) 768 { 769 #if OSL_DEBUG_LEVEL > 1 770 m_pDbgWin->AddText( "*Deleting all Commands:\n" ); 771 #endif 772 bReadingCommands = sal_False; 773 while ( StatementList::pFirst != this ) // Alles L�schen au�er mich selbst 774 { 775 StatementList *pDeQue = StatementList::pFirst; 776 pDeQue->Advance(); 777 delete pDeQue; 778 } 779 bReadingCommands = sal_True; 780 #if OSL_DEBUG_LEVEL > 1 781 m_pDbgWin->AddText( "*Done deleting all Commands:\n" ); 782 #endif 783 } 784 785 } 786 787 void StatementCommand::WriteControlData( Window *pBase, sal_uLong nConf, sal_Bool bFirst ) 788 { 789 790 if ( IsDialog(pBase) && !bFirst ) 791 return; 792 793 if ( bFirst ) 794 pRet->GenReturn ( RET_WinInfo, rtl::OString(), (comm_ULONG)nConf | DH_MODE_DATA_VALID, UniString(), sal_True ); 795 796 if ( bFirst ) 797 { 798 if ( pBase->GetType() == WINDOW_WINDOW && pBase->GetParent() && pBase->GetParent()->GetType() == WINDOW_CONTROL && 799 dynamic_cast< svt::table::TableControl* > ( pBase->GetParent() ) ) 800 pBase = pBase->GetParent(); 801 } 802 803 { // Klammerung, so da� der String nicht w�hrend der Rekursion bestehen bleibt 804 String aName; 805 sal_Bool bSkip = sal_False; 806 807 switch ( pBase->GetType() ) 808 { 809 case WINDOW_RADIOBUTTON: 810 case WINDOW_CHECKBOX: 811 case WINDOW_TRISTATEBOX: 812 case WINDOW_PUSHBUTTON: 813 case WINDOW_OKBUTTON: 814 case WINDOW_CANCELBUTTON: 815 case WINDOW_IMAGERADIOBUTTON: 816 case WINDOW_IMAGEBUTTON: 817 case WINDOW_MENUBUTTON: 818 case WINDOW_MOREBUTTON: 819 case WINDOW_TABPAGE: 820 case WINDOW_MODALDIALOG: 821 case WINDOW_FLOATINGWINDOW: 822 case WINDOW_MODELESSDIALOG: 823 case WINDOW_WORKWINDOW: 824 case WINDOW_DOCKINGWINDOW: 825 case WINDOW_CONTROL: 826 827 case WINDOW_FILEDIALOG: 828 case WINDOW_PATHDIALOG: 829 case WINDOW_PRINTDIALOG: 830 case WINDOW_PRINTERSETUPDIALOG: 831 case WINDOW_COLORDIALOG: 832 case WINDOW_TABDIALOG: 833 834 case WINDOW_BUTTONDIALOG: 835 836 case WINDOW_MENUBARWINDOW: 837 aName = pBase->GetText().EraseAllChars('~'); 838 break; 839 840 case WINDOW_EDIT: 841 case WINDOW_MULTILINEEDIT: 842 case WINDOW_MULTILISTBOX: 843 case WINDOW_LISTBOX: 844 case WINDOW_COMBOBOX: 845 case WINDOW_SPINFIELD: 846 case WINDOW_PATTERNFIELD: 847 case WINDOW_NUMERICFIELD: 848 case WINDOW_METRICFIELD: 849 case WINDOW_CURRENCYFIELD: 850 case WINDOW_DATEFIELD: 851 case WINDOW_TIMEFIELD: 852 case WINDOW_NUMERICBOX: 853 case WINDOW_METRICBOX: 854 case WINDOW_CURRENCYBOX: 855 case WINDOW_DATEBOX: 856 case WINDOW_TIMEBOX: 857 case WINDOW_PATTERNBOX: 858 case WINDOW_TOOLBOX: 859 aName = pBase->GetQuickHelpText(); 860 break; 861 862 case WINDOW_MESSBOX: 863 case WINDOW_INFOBOX: 864 case WINDOW_WARNINGBOX: 865 case WINDOW_ERRORBOX: 866 case WINDOW_QUERYBOX: 867 aName = ((MessBox*)pBase)->GetMessText(); 868 break; 869 870 default: 871 if ( pBase->GetUniqueOrHelpId().isEmpty() && !( nConf & DH_MODE_ALLWIN ) ) 872 bSkip = sal_True; 873 break; 874 } 875 876 if ( !bSkip ) 877 { 878 if ( aName.Len() == 0 ) 879 aName = pBase->GetQuickHelpText(); 880 if ( aName.Len() == 0 ) 881 aName = pBase->GetHelpText(); 882 if ( aName.Len() == 0 ) 883 aName = pBase->GetText(); 884 885 886 String aTypeSuffix; 887 if ( pBase->GetType() == WINDOW_CONTROL ) 888 { 889 if ( dynamic_cast< EditBrowseBox* >(pBase) ) 890 aTypeSuffix.AppendAscii( "/BrowseBox", 10 ); 891 else if ( dynamic_cast< ValueSet* >(pBase) ) 892 aTypeSuffix.AppendAscii( "/ValueSet", 9 ); 893 else if ( dynamic_cast< ORoadmap* >(pBase) ) 894 aTypeSuffix.AppendAscii( "/RoadMap", 8 ); 895 else if ( dynamic_cast< IExtensionListBox* >(pBase) ) 896 aTypeSuffix.AppendAscii( "/ExtensionListBox" ); 897 else if ( dynamic_cast< svt::table::TableControl* >(pBase) ) 898 aTypeSuffix.AppendAscii( "/TableControl" ); 899 else 900 aTypeSuffix.AppendAscii( "/Unknown", 8 ); 901 } 902 903 rtl::OString aId = pBase->GetUniqueOrHelpId(); 904 pRet->GenReturn ( RET_WinInfo, aId, (comm_ULONG)pBase->GetType(), 905 TypeString(pBase->GetType()).Append(aTypeSuffix).AppendAscii(": ").Append(aName), sal_False ); 906 907 908 if ( pBase->GetType() == WINDOW_TOOLBOX ) // Buttons und Controls auf Toolboxen. 909 { 910 ToolBox *pTB = ((ToolBox*)pBase); 911 sal_uInt16 i; 912 for ( i = 0; i < pTB->GetItemCount() ; i++ ) 913 { 914 aName = String(); 915 // if ( aName.Len() == 0 ) 916 // aName = pTB->GetQuickHelpText(); 917 if ( aName.Len() == 0 ) 918 aName = pTB->GetHelpText( pTB->GetItemId( i ) ); 919 if ( aName.Len() == 0 ) 920 aName = pTB->GetItemText( pTB->GetItemId( i ) ); 921 922 Window *pItemWin; 923 pItemWin = pTB->GetItemWindow( pTB->GetItemId( i ) ); 924 if ( pTB->GetItemType( i ) == TOOLBOXITEM_BUTTON && ( !pItemWin || !pItemWin->IsVisible() ) ) 925 { 926 if ( pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) 927 pRet->GenReturn ( RET_WinInfo, Str2Id(pTB->GetItemCommand(pTB->GetItemId( i ))), (comm_ULONG)WINDOW_BUTTON, 928 TypeString(WINDOW_BUTTON).AppendAscii(": ").Append(aName), sal_False ); 929 if ( !pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) 930 pRet->GenReturn ( RET_WinInfo, pTB->GetHelpId(pTB->GetItemId( i )), (comm_ULONG)WINDOW_BUTTON, 931 TypeString(WINDOW_BUTTON).AppendAscii(": ").Append(aName), sal_False ); 932 } 933 else 934 { 935 if ( pItemWin ) 936 { 937 if ( pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) 938 pRet->GenReturn ( RET_WinInfo, Str2Id(pTB->GetItemCommand(pTB->GetItemId( i ))), (comm_ULONG)pItemWin->GetType(), 939 TypeString(pItemWin->GetType()).AppendAscii(": ").Append(aName), sal_False ); 940 if ( !pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) 941 pRet->GenReturn ( RET_WinInfo, pTB->GetHelpId(pTB->GetItemId( i )), (comm_ULONG)pItemWin->GetType(), 942 TypeString(pItemWin->GetType()).AppendAscii(": ").Append(aName), sal_False ); 943 sal_uInt16 ii; 944 for( ii = 0 ; ii < pItemWin->GetChildCount(); ii++ ) 945 WriteControlData( pItemWin->GetChild(ii), nConf, sal_False ); 946 } 947 else 948 { 949 if ( nConf & DH_MODE_ALLWIN ) 950 { 951 String aToolBoxItemType; 952 switch ( pTB->GetItemType( i ) ) 953 { 954 case TOOLBOXITEM_DONTKNOW: 955 aToolBoxItemType.AssignAscii("TOOLBOXITEM_DONTKNOW"); 956 break; 957 case TOOLBOXITEM_BUTTON: 958 aToolBoxItemType.AssignAscii("TOOLBOXITEM_BUTTON"); 959 break; 960 case TOOLBOXITEM_SPACE: 961 aToolBoxItemType.AssignAscii("TOOLBOXITEM_SPACE"); 962 break; 963 case TOOLBOXITEM_SEPARATOR: 964 aToolBoxItemType.AssignAscii("TOOLBOXITEM_SEPARATOR"); 965 break; 966 case TOOLBOXITEM_BREAK: 967 aToolBoxItemType.AssignAscii("TOOLBOXITEM_BREAK"); 968 break; 969 default: 970 DBG_ERROR1( "Unknown TOOLBOXITEM %i", pTB->GetItemType( i ) ); 971 } 972 if ( pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) 973 pRet->GenReturn ( RET_WinInfo, Str2Id( pTB->GetItemCommand(pTB->GetItemId( i )) ), (comm_ULONG)WINDOW_BASE, 974 aToolBoxItemType.AppendAscii(": ").Append(aName), sal_False ); 975 if ( !pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) 976 pRet->GenReturn ( RET_WinInfo, pTB->GetHelpId(pTB->GetItemId( i )), (comm_ULONG)WINDOW_BASE, 977 aToolBoxItemType.AppendAscii(": ").Append(aName), sal_False ); 978 } 979 } 980 } 981 } 982 983 return; // ToolBox ist hier schon komplett abgehandelt. 984 } 985 986 987 if ( pBase->GetType() == WINDOW_BUTTONDIALOG // Buttons auf Buttondialogen mit ID 988 || pBase->GetType() == WINDOW_MESSBOX 989 || pBase->GetType() == WINDOW_INFOBOX 990 || pBase->GetType() == WINDOW_WARNINGBOX 991 || pBase->GetType() == WINDOW_ERRORBOX 992 || pBase->GetType() == WINDOW_QUERYBOX ) 993 { 994 ButtonDialog *pBD = ((ButtonDialog*)pBase); 995 sal_uInt16 i; 996 for ( i = 0; i < pBD->GetButtonCount() ; i++ ) 997 { 998 aName = String(); 999 if ( aName.Len() == 0 ) 1000 aName = pBD->GetPushButton( pBD->GetButtonId(i) )->GetText(); 1001 ByteString aID; 1002 switch ( pBD->GetButtonId(i) ) 1003 { 1004 case BUTTONID_OK: 1005 aID.Assign("Ok"); 1006 break; 1007 case BUTTONID_CANCEL: 1008 aID.Assign("Cancel"); 1009 break; 1010 case BUTTONID_YES: 1011 aID.Assign("Yes"); 1012 break; 1013 case BUTTONID_NO: 1014 aID.Assign("No"); 1015 break; 1016 case BUTTONID_RETRY: 1017 aID.Assign("Retry"); 1018 break; 1019 case BUTTONID_HELP: 1020 aID.Assign("Help"); 1021 break; 1022 default: 1023 aID = ByteString::CreateFromInt32( pBD->GetButtonId(i) ); 1024 break; 1025 } 1026 1027 pRet->GenReturn ( RET_WinInfo, aID, (comm_ULONG)pBD->GetPushButton( pBD->GetButtonId(i) )->GetType(), // So da� der Text angezeigt wird! 1028 TypeString(pBD->GetPushButton( pBD->GetButtonId(i) )->GetType()).AppendAscii(": ").Append(aName) 1029 .AppendAscii(" ButtonId = ").AppendAscii( aID.GetBuffer() ), sal_False ); 1030 } 1031 1032 return; // ButtonDialog ist hier schon komplett abgehandelt. 1033 } 1034 1035 1036 Menu* pMenu = GetMatchingMenu( pBase ); 1037 1038 if ( pMenu ) // Menus 1039 { 1040 sal_uInt16 i; 1041 for ( i = 0; i < pMenu->GetItemCount() ; i++ ) 1042 { 1043 sal_uInt16 nID = pMenu->GetItemId( i ); 1044 1045 aName = String(); 1046 if ( aName.Len() == 0 ) 1047 aName = pMenu->GetHelpText( nID ); 1048 if ( aName.Len() == 0 ) 1049 aName = pMenu->GetItemText( nID ); 1050 1051 1052 if ( pMenu->GetItemType( i ) == MENUITEM_STRING || pMenu->GetItemType( i ) == MENUITEM_IMAGE || pMenu->GetItemType( i ) == MENUITEM_STRINGIMAGE || (nConf & DH_MODE_ALLWIN) ) 1053 { 1054 String aMenuItemType; 1055 switch ( pMenu->GetItemType( i ) ) 1056 { 1057 case MENUITEM_STRING: 1058 aMenuItemType.AssignAscii("MENUITEM_STRING"); 1059 break; 1060 case MENUITEM_STRINGIMAGE: 1061 aMenuItemType.AssignAscii("MENUITEM_STRINGIMAGE"); 1062 break; 1063 case MENUITEM_IMAGE: 1064 aMenuItemType.AssignAscii("MENUITEM_IMAGE"); 1065 break; 1066 case MENUITEM_SEPARATOR: 1067 aMenuItemType.AssignAscii("MENUITEM_SEPARATOR"); 1068 break; 1069 case MENUITEM_DONTKNOW: 1070 aMenuItemType.AssignAscii("MENUITEM_DONTKNOW"); 1071 break; 1072 default: 1073 DBG_ERROR1( "Unknown MENUITEM %i", pMenu->GetItemType( i ) ); 1074 } 1075 if ( pMenu->GetItemCommand(nID).Len() || ( nConf & DH_MODE_ALLWIN ) ) 1076 pRet->GenReturn ( RET_WinInfo, Str2Id( pMenu->GetItemCommand(nID) ), (comm_ULONG)0, 1077 aMenuItemType.AppendAscii(": ").Append(aName), sal_False ); 1078 if ( !pMenu->GetItemCommand(nID).Len() || ( nConf & DH_MODE_ALLWIN ) ) 1079 pRet->GenReturn ( RET_WinInfo, rtl::OString::valueOf( (sal_Int32)nID ), (comm_ULONG)0, 1080 aMenuItemType.AppendAscii(": ").Append(aName), sal_False ); 1081 } 1082 } 1083 1084 return; // Menu ist hier schon komplett abgehandelt. 1085 } 1086 } 1087 } 1088 1089 for( sal_uInt16 i = 0 ; i < pBase->GetChildCount(); i++ ) 1090 WriteControlData( pBase->GetChild(i), nConf, sal_False ); 1091 } 1092 1093 class SysWinContainer : public WorkWindow 1094 { 1095 private: 1096 ToolBox *pClientWin; 1097 DockingWindow *pDock; 1098 public: 1099 SysWinContainer( ToolBox *pClient ); 1100 ~SysWinContainer(); 1101 virtual void Resize(); 1102 virtual void Resizing( Size& rSize ); 1103 }; 1104 1105 SysWinContainer::SysWinContainer( ToolBox *pClient ) 1106 : WorkWindow( NULL, WB_BORDER | WB_SIZEMOVE | WB_CLOSEABLE ) 1107 , pClientWin( pClient ) 1108 { 1109 pDock = new DockingWindow( this ); 1110 pClientWin->SetParent( pDock ); 1111 pClientWin->SetFloatingMode( sal_False ); 1112 SetText( pClient->GetText() ); 1113 SetPosPixel( Point( 1,40 ) ); 1114 Resize(); 1115 pDock->Show(); 1116 EnableAlwaysOnTop(); 1117 Show(); 1118 } 1119 1120 SysWinContainer::~SysWinContainer() 1121 { 1122 delete pDock; 1123 } 1124 1125 void SysWinContainer::Resize() 1126 { 1127 Size aSize( GetOutputSizePixel() ); 1128 Resizing( aSize ); 1129 // aSize = pClientWin->GetSizePixel(); 1130 // aSize = pClientWin->CalcWindowSizePixel(); 1131 if ( aSize != GetSizePixel() ) 1132 { 1133 SetOutputSizePixel( aSize ); 1134 pDock->SetSizePixel( aSize ); 1135 pClientWin->SetSizePixel( aSize ); 1136 } 1137 } 1138 1139 void SysWinContainer::Resizing( Size& rSize ) 1140 { 1141 Size aSize; 1142 Size aBestSize; 1143 sal_uInt16 i; 1144 sal_Bool bHasValue = sal_False; 1145 sal_uLong nBestValue = 0; 1146 sal_uLong nThisValue; 1147 for ( i=1 ; i<=1 ; i++ ) 1148 { 1149 aSize = pClientWin->CalcWindowSizePixel( i ); 1150 nThisValue = Abs( aSize.Width() - rSize.Width() ) + Abs( aSize.Height() - rSize.Height() ); 1151 if ( !bHasValue || ( nThisValue < nBestValue ) ) 1152 { 1153 nBestValue = nThisValue; 1154 aBestSize = aSize; 1155 bHasValue = sal_True; 1156 } 1157 } 1158 rSize = aBestSize; 1159 } 1160 1161 1162 class DisplayHidWin : public ToolBox 1163 { 1164 Edit *pEdit; 1165 Size aMinEditSize; 1166 sal_uInt16 nLastItemID; 1167 sal_Bool bIsDraging; 1168 sal_Bool bIsPermanentDraging; 1169 void SetDraging( sal_Bool bNewDraging ); 1170 Image *pShow, *pShow2; 1171 sal_Bool bConfigChanged; 1172 void EnableButtons( sal_uLong nConf ); 1173 1174 sal_uLong nEventHookID; 1175 static long stub_VCLEventHookProc( NotifyEvent& rEvt, void* pData ) 1176 { 1177 return ((DisplayHidWin*)pData)->VCLEventHook( rEvt ); 1178 } 1179 1180 long VCLEventHook( NotifyEvent& rEvt ); 1181 Window *pLastMouseMoveWin; 1182 1183 SysWinContainer *pContainer; 1184 1185 // aborting by pressing shist twice 1186 sal_Bool bOldShift; 1187 Time aLatest; 1188 sal_uInt16 nShiftCount; 1189 1190 public: 1191 DisplayHidWin(); 1192 ~DisplayHidWin(); 1193 1194 virtual void Tracking( const TrackingEvent& rTEvt ); 1195 virtual void Click(); 1196 virtual void Select(); 1197 virtual void SetText( const XubString& rStr ); 1198 1199 void SetDisplayText( const String &aNewText ){ pEdit->SetText(aNewText); } 1200 String GetDisplayText() const { return pEdit->GetText(); } 1201 sal_Bool IsDisplayTextModified() const { return pEdit->IsModified(); } 1202 void ClearDisplayTextModified() const { pEdit->ClearModifyFlag(); } 1203 1204 void SetConfig( sal_uLong nConf ); 1205 sal_uLong GetConfig(); 1206 1207 sal_Bool IsConfigChanged() { return bConfigChanged; } 1208 void ConfigSent() { bConfigChanged = sal_False; } 1209 1210 sal_Bool IsSendData() { return GetItemState( TT_SEND_DATA ) == STATE_CHECK; } 1211 // sal_Bool IsAllWin() { return GetItemState( TT_ALLWIN ) == STATE_CHECK; } 1212 1213 sal_Bool IsDraging() { return bIsDraging; } 1214 1215 Window* LastMouseMoveWin() { return pLastMouseMoveWin; } 1216 }; 1217 1218 DisplayHidWin::DisplayHidWin() 1219 : ToolBox( StatementList::GetFirstDocFrame(), TTProperties::GetSvtResId(DisplayHidToolBox) ) 1220 , bIsDraging( sal_False ) 1221 , bIsPermanentDraging( sal_False ) 1222 , pShow( NULL ) 1223 , pShow2( NULL ) 1224 , pLastMouseMoveWin( NULL ) 1225 , bOldShift( 0 ) 1226 , nShiftCount( 0 ) 1227 { 1228 SetOutStyle( TOOLBOX_STYLE_HANDPOINTER | TOOLBOX_STYLE_FLAT ); 1229 pEdit = new Edit( this, WB_CENTER | WB_BORDER ); 1230 aMinEditSize = GetItemRect( TT_OUTPUT ).GetSize(); 1231 /**/ aMinEditSize=Size(20,20); 1232 aMinEditSize.Width() *= 12; 1233 pEdit->SetSizePixel( aMinEditSize ); 1234 pEdit->Show(); 1235 SetItemWindow( TT_OUTPUT, pEdit ); 1236 Resize(); 1237 pContainer = new SysWinContainer( this ); 1238 nEventHookID = Application::AddEventHook( stub_VCLEventHookProc, this ); 1239 } 1240 1241 DisplayHidWin::~DisplayHidWin() 1242 { 1243 Application::RemoveEventHook( nEventHookID ); 1244 Hide(); // so GetFirstDocFrame won't return ourselves (needed for SOPlayer) 1245 SetParent( StatementList::GetFirstDocFrame() ); 1246 delete pContainer; 1247 delete pEdit; 1248 } 1249 1250 void DisplayHidWin::SetDraging( sal_Bool bNewDraging ) 1251 { 1252 if ( !pShow ) 1253 pShow = new Image( GetItemImage( TT_SHOW ) ); 1254 if ( !pShow2 ) 1255 pShow2 = new Image( Bitmap( TTProperties::GetSvtResId( TT_SHOW2 ) ) ); 1256 1257 if ( bNewDraging ) 1258 SetItemImage( TT_SHOW, *pShow2 ); 1259 else 1260 SetItemImage( TT_SHOW, *pShow ); 1261 1262 bIsDraging = bNewDraging; 1263 } 1264 1265 void DisplayHidWin::EnableButtons( sal_uLong nConf ) 1266 { 1267 sal_Bool bSend = sal_Bool(nConf & DH_MODE_SEND_DATA); 1268 EnableItem( TT_ALLWIN, bSend ); 1269 EnableItem( TT_KURZNAME, bSend ); 1270 EnableItem( TT_LANGNAME, bSend ); 1271 } 1272 1273 void DisplayHidWin::Tracking( const TrackingEvent& rTEvt ) 1274 { 1275 // if ( nLastItemID == TT_SHOW && GetItemState( TT_SHOW ) == STATE_NOCHECK && ( rTEvt.IsTrackingEnded() || rTEvt.IsTrackingCanceled() ) ) 1276 // SetDraging( sal_False ); 1277 if ( nLastItemID == TT_SHOW && GetItemState( TT_SHOW ) == STATE_NOCHECK ) 1278 EndTracking( ENDTRACK_CANCEL ); 1279 ToolBox::Tracking( rTEvt); 1280 } 1281 1282 void DisplayHidWin::Click() 1283 { 1284 nLastItemID = GetCurItemId(); 1285 if ( nLastItemID == TT_SHOW ) 1286 { 1287 SetDraging( sal_True ); 1288 } 1289 ToolBox::Click(); 1290 } 1291 1292 void DisplayHidWin::Select() 1293 { 1294 if ( GetItemState( GetCurItemId() ) == STATE_NOCHECK ) 1295 { 1296 SetItemState( GetCurItemId(), STATE_CHECK ); 1297 if ( GetCurItemId() == TT_SHOW ) 1298 { 1299 bIsPermanentDraging = sal_True; 1300 SetDraging( sal_True ); 1301 } 1302 } 1303 else 1304 { 1305 SetItemState( GetCurItemId(), STATE_NOCHECK ); 1306 if ( GetCurItemId() == TT_SHOW ) 1307 { 1308 bIsPermanentDraging = sal_False; 1309 SetDraging( sal_False ); 1310 } 1311 } 1312 if ( GetCurItemId() == TT_SEND_DATA ) 1313 { 1314 EnableButtons( GetConfig() ); 1315 } 1316 } 1317 1318 void DisplayHidWin::SetConfig( sal_uLong nConf ) 1319 { 1320 SetItemState( TT_KURZNAME, ( nConf & DH_MODE_KURZNAME ) ? STATE_CHECK : STATE_NOCHECK ); 1321 SetItemState( TT_LANGNAME, ( nConf & DH_MODE_LANGNAME ) ? STATE_CHECK : STATE_NOCHECK ); 1322 SetItemState( TT_ALLWIN, ( nConf & DH_MODE_ALLWIN ) ? STATE_CHECK : STATE_NOCHECK ); 1323 SetItemState( TT_SEND_DATA, ( nConf & DH_MODE_SEND_DATA ) ? STATE_CHECK : STATE_NOCHECK ); 1324 EnableButtons( nConf ); 1325 } 1326 1327 sal_uLong DisplayHidWin::GetConfig() 1328 { 1329 sal_uLong nConf = 0; 1330 if ( GetItemState( TT_KURZNAME ) == STATE_CHECK ) 1331 nConf |= DH_MODE_KURZNAME; 1332 if ( GetItemState( TT_LANGNAME ) == STATE_CHECK ) 1333 nConf |= DH_MODE_LANGNAME; 1334 if ( GetItemState( TT_ALLWIN ) == STATE_CHECK ) 1335 nConf |= DH_MODE_ALLWIN; 1336 if ( IsSendData() ) 1337 nConf |= DH_MODE_SEND_DATA; 1338 1339 return nConf; 1340 } 1341 1342 void DisplayHidWin::SetText( const XubString& rStr ) 1343 { 1344 pContainer->SetText( rStr ); 1345 } 1346 1347 long DisplayHidWin::VCLEventHook( NotifyEvent& rEvt ) 1348 { 1349 if ( EVENT_MOUSEMOVE == rEvt.GetType() ) 1350 { 1351 pLastMouseMoveWin = rEvt.GetWindow(); 1352 1353 // check if abort with pressing shift twice 1354 MouseEvent* pMEvt = (MouseEvent*)rEvt.GetMouseEvent(); 1355 1356 if ( ( pMEvt->IsShift() && !bOldShift ) ) // Shift pressed 1357 { 1358 if ( aLatest < Time() ) 1359 { 1360 nShiftCount = 0; 1361 aLatest = Time()+Time( 0, 0, 0, 50 ); 1362 } 1363 nShiftCount++; 1364 } 1365 if ( ( !pMEvt->IsShift() && bOldShift ) ) // Shift released 1366 { 1367 nShiftCount++; 1368 if ( nShiftCount == 4 && aLatest > Time() ) 1369 { 1370 bIsPermanentDraging = sal_False; 1371 SetDraging( sal_False ); 1372 SetItemState( TT_SHOW, STATE_NOCHECK ); 1373 } 1374 } 1375 bOldShift = pMEvt->IsShift(); 1376 } 1377 if ( ( ( EVENT_MOUSEBUTTONUP == rEvt.GetType() && rEvt.GetMouseEvent()->GetButtons() == MOUSE_LEFT) || ( EVENT_MOUSEMOVE == rEvt.GetType() && !rEvt.GetMouseEvent()->GetButtons() ) ) 1378 && IsDraging() && !bIsPermanentDraging ) 1379 SetDraging( sal_False ); 1380 return 0; 1381 } 1382 1383 1384 sal_Bool StatementCommand::DisplayHID() 1385 { 1386 // Return sal_True -> reexecute command 1387 1388 if ( !bBool2 ) // Wird auf sal_False initialisiert 1389 { 1390 bBool2 = sal_True; // Wir sind initialisiert. 1391 GetTTSettings()->pDisplayInstance = this; // Und haben die Macht (Alle anderen beenden sich) 1392 1393 if ( !(nParams & PARAM_ULONG_1) ) 1394 { 1395 if( GetTTSettings()->pDisplayHidWin ) // Nichts ver�ndern 1396 nLNr1 = GetTTSettings()->pDisplayHidWin->GetConfig(); 1397 else // Beim ersten Aufruf wollen wir alles richtig einstellen 1398 nLNr1 = DH_MODE_KURZNAME | DH_MODE_LANGNAME; 1399 1400 if( ((nParams & PARAM_BOOL_1) && bBool1) ) 1401 nLNr1 |= DH_MODE_SEND_DATA; 1402 else 1403 nLNr1 &= ( ~DH_MODE_SEND_DATA ); 1404 } 1405 1406 if ( GetTTSettings()->pDisplayHidWin ) 1407 GetTTSettings()->pDisplayHidWin->SetConfig( nLNr1 ); 1408 } 1409 1410 if ( GetTTSettings()->pDisplayInstance && GetTTSettings()->pDisplayInstance != this ) 1411 { 1412 DBG_WARNING("Mehrere DisplayHID am laufen"); 1413 return sal_False; // Noch eine andere Instanz macht das gleiche! 1414 } 1415 1416 if ( !GetTTSettings()->pDisplayHidWin ) 1417 { 1418 GetTTSettings()->pDisplayHidWin = new DisplayHidWin(); 1419 GetTTSettings()->aOriginalCaption = GetTTSettings()->pDisplayHidWin->GetText(); 1420 GetTTSettings()->pDisplayHidWin->Show(); 1421 if ( bBool1 ) 1422 nLNr1 |= DH_MODE_SEND_DATA; 1423 GetTTSettings()->pDisplayHidWin->SetConfig( nLNr1 ); 1424 1425 GetTTSettings()->Old = NULL; 1426 GetTTSettings()->Act = NULL; 1427 GetTTSettings()->pDisplayInstance = this; 1428 } 1429 else 1430 { 1431 GetTTSettings()->pDisplayHidWin->GetWindow( WINDOW_OVERLAP )->Enable( sal_True, sal_True ); 1432 GetTTSettings()->pDisplayHidWin->GetWindow( WINDOW_OVERLAP )->EnableInput( sal_True, sal_True ); 1433 } 1434 1435 1436 if ( GetTTSettings()->pDisplayHidWin->IsVisible() && !bDying ) 1437 { 1438 1439 if ( GetTTSettings()->pDisplayHidWin->IsDraging() ) 1440 { 1441 1442 1443 #define HIGHLIGHT_WIN( WinPtr ) \ 1444 { \ 1445 Color aLineColMem = WinPtr->GetLineColor(); \ 1446 WinPtr->SetLineColor( Color( COL_WHITE ) ); \ 1447 Color aFillColMem = WinPtr->GetFillColor(); \ 1448 WinPtr->SetFillColor( Color( COL_LIGHTRED ) ); \ 1449 RasterOp aROp = WinPtr->GetRasterOp(); \ 1450 WinPtr->SetRasterOp( ROP_XOR ); \ 1451 Size aSz = WinPtr->PixelToLogic( WinPtr->GetSizePixel() );\ 1452 sal_uLong nMaxCornerRadius = WinPtr->PixelToLogic( Point( 80, 0 ) ).X();\ 1453 sal_uLong iCorner = std::max ((sal_uLong) 8, (sal_uLong) std::min( nMaxCornerRadius, (sal_uLong) std::min((sal_uLong) (aSz.Width() / 6), (sal_uLong)(aSz.Height() / 6))));\ 1454 WinPtr->DrawRect(Rectangle(Point(),aSz), iCorner, iCorner);\ 1455 WinPtr->SetLineColor( aLineColMem ); \ 1456 WinPtr->SetFillColor( aFillColMem ); \ 1457 WinPtr->SetRasterOp( aROp ); \ 1458 } 1459 1460 1461 #define SET_WIN( WinPtr ) \ 1462 if ( StatementList::WinPtrValid(WinPtr) ) \ 1463 { \ 1464 HIGHLIGHT_WIN ( WinPtr ); \ 1465 } 1466 1467 #define RESET_WIN( WinPtr ) \ 1468 if ( StatementList::WinPtrValid(WinPtr) ) \ 1469 { \ 1470 WinPtr->Invalidate( INVALIDATE_NOTRANSPARENT ); \ 1471 WinPtr->Update(); \ 1472 } 1473 1474 1475 GetTTSettings()->Old = GetTTSettings()->Act; 1476 // GetTTSettings()->Act = GetMouseWin(); 1477 GetTTSettings()->Act = GetTTSettings()->pDisplayHidWin->LastMouseMoveWin(); 1478 1479 if ( !StatementList::WinPtrValid ( GetTTSettings()->Old ) ) 1480 GetTTSettings()->Old = NULL; 1481 if ( !StatementList::WinPtrValid ( GetTTSettings()->Act ) ) 1482 GetTTSettings()->Act = NULL; 1483 1484 if ( GetTTSettings()->Act && GetTTSettings()->Act->GetType() == WINDOW_BORDERWINDOW ) 1485 GetTTSettings()->Act = GetTTSettings()->Act->GetWindow( WINDOW_CLIENT ); 1486 1487 if ( GetTTSettings()->Act != GetTTSettings()->Old ) 1488 { 1489 if ( GetTTSettings()->Old ) 1490 { 1491 RESET_WIN(GetTTSettings()->Old); 1492 } 1493 if ( GetTTSettings()->Act ) 1494 { 1495 SET_WIN(GetTTSettings()->Act); 1496 GetTTSettings()->pDisplayHidWin->SetDisplayText( Id2Str(GetTTSettings()->Act->GetUniqueOrHelpId()).AppendAscii(" WinType: ") 1497 .Append(UniString::CreateFromInt64(GetTTSettings()->Act->GetType())).AppendAscii(" ").Append(GetTTSettings()->Act->GetText())); 1498 if ( GetTTSettings()->Act && !GetTTSettings()->Act->GetUniqueId().equals( GetTTSettings()->Act->GetHelpId() ) ) 1499 GetTTSettings()->pDisplayHidWin->SetText(UniString( TTProperties::GetSvtResId( TT_ALTERNATE_CAPTION ) ).AppendAscii(GetTTSettings()->Act->GetHelpId().getStr())); 1500 else 1501 GetTTSettings()->pDisplayHidWin->SetText( GetTTSettings()->aOriginalCaption ); 1502 } 1503 else 1504 GetTTSettings()->pDisplayHidWin->SetDisplayText(CUniString("Kein Window/Control gefunden")); 1505 } 1506 else if ( GetTTSettings()->Act ) 1507 { 1508 // SET_WIN(GetTTSettings()->Act); 1509 // allow setting a HelpID manually (just enter the ID in the displayHID Window and terminate it by | 1510 if ( GetTTSettings()->pDisplayHidWin->IsDisplayTextModified() && GetTTSettings()->pDisplayHidWin->GetDisplayText().GetTokenCount( '|' ) > 1 ) 1511 { 1512 GetTTSettings()->Act->SetUniqueId( Str2Id( GetTTSettings()->pDisplayHidWin->GetDisplayText().GetToken( '|' ) ) ); 1513 GetTTSettings()->pDisplayHidWin->ClearDisplayTextModified(); 1514 } 1515 } 1516 /* if ( Application::GetLastInputInterval() > 5000 ) // 5 Sekunden lang nix geschehen 1517 { 1518 GetTTSettings()->pDisplayHidWin->ToTop( TOTOP_NOGRABFOCUS ); 1519 } 1520 */ 1521 if ( GetTTSettings()->pDisplayHidWin->IsSendData() /*&& bBool2*/ && GetTTSettings()->Act ) 1522 { 1523 if ( !StatementFlow::bSending ) 1524 { // Normalerweise syncronisierung �ber Protokoll. Hier ist das aber asyncron!!! 1525 WriteControlData( GetTTSettings()->Act, GetTTSettings()->pDisplayHidWin->GetConfig() ); 1526 new StatementFlow( this, F_EndCommandBlock ); // Kommando zum Senden erzeugen und in que eintragen 1527 } 1528 } 1529 } //if ( GetTTSettings()->pDisplayHidWin->IsDraging() ) 1530 else 1531 { 1532 if ( GetTTSettings()->Act ) 1533 { 1534 RESET_WIN(GetTTSettings()->Act); 1535 GetTTSettings()->Act = NULL; 1536 } 1537 } 1538 1539 if ( pFirst == this ) // Sollte immer so sein, aber besser isses 1540 if ( pNext ) // Befehle warten auf Ausf�hrung 1541 { // An Ende neu einsortieren 1542 Advance(); 1543 QueStatement( NULL ); 1544 } 1545 // { // Ersten und 2. austauschen. 1546 // pFirst = pNext; 1547 // pNext = pNext->pNext; 1548 // pFirst->pNext = this; 1549 // } 1550 1551 } 1552 else 1553 { 1554 delete GetTTSettings()->pDisplayHidWin; 1555 GetTTSettings()->pDisplayHidWin = NULL; 1556 GetTTSettings()->pDisplayInstance = NULL; 1557 } 1558 1559 return GetTTSettings()->pDisplayHidWin != NULL; 1560 } 1561 1562 class TranslateWin : public WorkWindow 1563 { 1564 private: 1565 DECL_LINK( DoAccept, PushButton* ); 1566 DECL_LINK( DoNext, PushButton* ); 1567 DECL_LINK( DoSelect, PushButton* ); 1568 DECL_LINK( DoRestore, PushButton* ); 1569 DECL_LINK( TranslationChanged, Edit* ); 1570 DECL_LINK( ShowInplace, Timer* ); 1571 1572 Timer InplaceTimer; 1573 1574 // virtual void MouseButtonUp( const MouseEvent& rMEvt ); 1575 // virtual void MouseMove( const MouseEvent& rMEvt ); 1576 1577 PushButton PushButtonTT_PB_NEXT; 1578 GroupBox GroupBoxTT_GB_TRANSLATION; 1579 Edit EditTT_E_NEW; 1580 GroupBox GroupBoxTT_GB_COMMENT; 1581 Edit EditTT_E_COMMENT; 1582 PushButton PushButtonTT_PB_ACCEPT; 1583 FixedText FixedTextTT_FT_OLD; 1584 PushButton PushButtonTT_PB_SELECT; 1585 PushButton PushButtonTT_PB_RESTORE; 1586 1587 Window *Old; 1588 Window *Act; 1589 Window *pTranslateWin; 1590 sal_Bool bSelecting; 1591 1592 sal_Bool bAvailable; 1593 sal_Bool bNext; 1594 1595 sal_Bool TestChangedDataSaved(); 1596 1597 1598 sal_uLong nEventHookID; 1599 static long stub_VCLEventHookProc( NotifyEvent& rEvt, void* pData ) 1600 { 1601 return ((TranslateWin*)pData)->VCLEventHook( rEvt ); 1602 } 1603 1604 long VCLEventHook( NotifyEvent& rEvt ); 1605 1606 public: 1607 TranslateWin(); 1608 ~TranslateWin(); 1609 1610 static String MarkShortcutErrors( Window* pBase, sal_Bool bMark ); 1611 1612 sal_Bool IsTranslationAvailable(){ return bAvailable; } 1613 sal_Bool IsNextDialog(){ return bNext; } 1614 void ResetNextDialog(){ bNext = sal_False; } 1615 1616 Window* GetTranslationWindow(){ return pTranslateWin; } 1617 String GetOriginalText(){ return FixedTextTT_FT_OLD.GetText(); } 1618 String GetTranslationText(){ return EditTT_E_NEW.GetText(); } 1619 String GetComment(){ return EditTT_E_COMMENT.GetText(); } 1620 1621 void EnableTranslation(); 1622 }; 1623 1624 TranslateWin::TranslateWin() 1625 : WorkWindow( NULL, TTProperties::GetSvtResId( TT_INLINE_TRANSLATION ) ) 1626 , PushButtonTT_PB_NEXT( this, TTProperties::GetSvtResId( TT_PB_NEXT ) ) 1627 , GroupBoxTT_GB_TRANSLATION( this, TTProperties::GetSvtResId( TT_GB_TRANSLATION ) ) 1628 , EditTT_E_NEW( this, TTProperties::GetSvtResId( TT_E_NEW ) ) 1629 , GroupBoxTT_GB_COMMENT( this, TTProperties::GetSvtResId( TT_GB_COMMENT ) ) 1630 , EditTT_E_COMMENT( this, TTProperties::GetSvtResId( TT_E_COMMENT ) ) 1631 , PushButtonTT_PB_ACCEPT( this, TTProperties::GetSvtResId( TT_PB_ACCEPT ) ) 1632 , FixedTextTT_FT_OLD( this, TTProperties::GetSvtResId( TT_FT_OLD ) ) 1633 , PushButtonTT_PB_SELECT( this, TTProperties::GetSvtResId( TT_PB_SELECT ) ) 1634 , PushButtonTT_PB_RESTORE( this, TTProperties::GetSvtResId( TT_PB_RESTORE ) ) 1635 , Old( NULL ) 1636 , Act( NULL ) 1637 , pTranslateWin( NULL ) 1638 , bSelecting( sal_False ) 1639 , bAvailable( sal_False ) 1640 , bNext( sal_False ) 1641 { 1642 FreeResource(); 1643 PushButtonTT_PB_NEXT.SetClickHdl( LINK( this, TranslateWin, DoNext ) ); 1644 PushButtonTT_PB_ACCEPT.SetClickHdl( LINK( this, TranslateWin, DoAccept ) ); 1645 PushButtonTT_PB_SELECT.SetClickHdl( LINK( this, TranslateWin, DoSelect ) ); 1646 PushButtonTT_PB_RESTORE.SetClickHdl( LINK( this, TranslateWin, DoRestore ) ); 1647 EditTT_E_NEW.SetModifyHdl( LINK( this, TranslateWin, TranslationChanged ) ); 1648 InplaceTimer.SetTimeout( 250 ); 1649 InplaceTimer.SetTimeoutHdl( LINK( this, TranslateWin, ShowInplace ) ); 1650 EnableAlwaysOnTop(); 1651 nEventHookID = Application::AddEventHook( stub_VCLEventHookProc, this ); 1652 } 1653 1654 TranslateWin::~TranslateWin() 1655 { 1656 Application::RemoveEventHook( nEventHookID ); 1657 } 1658 1659 sal_Bool TranslateWin::TestChangedDataSaved() 1660 { 1661 if ( ( EditTT_E_NEW.GetText().CompareTo( FixedTextTT_FT_OLD.GetText() ) != COMPARE_EQUAL 1662 || EditTT_E_COMMENT.GetText().Len() ) 1663 && PushButtonTT_PB_ACCEPT.IsEnabled() ) 1664 { 1665 return MessBox( this, TTProperties::GetSvtResId( TT_DISCARD_CHANGED_DATA ) ).Execute() == RET_YES; 1666 } 1667 else 1668 return sal_True; 1669 } 1670 1671 IMPL_LINK( TranslateWin, DoAccept, PushButton*, EMPTYARG ) 1672 { 1673 PushButtonTT_PB_SELECT.Disable(); 1674 PushButtonTT_PB_NEXT.Disable(); 1675 PushButtonTT_PB_RESTORE.Disable(); 1676 EditTT_E_NEW.Disable(); 1677 EditTT_E_COMMENT.Disable(); 1678 PushButtonTT_PB_ACCEPT.Disable(); 1679 bAvailable = sal_True; 1680 return 0; 1681 } 1682 1683 IMPL_LINK( TranslateWin, DoNext, PushButton*, EMPTYARG ) 1684 { 1685 if ( TestChangedDataSaved() ) 1686 { 1687 PushButtonTT_PB_SELECT.Disable(); 1688 PushButtonTT_PB_NEXT.Disable(); 1689 PushButtonTT_PB_RESTORE.Disable(); 1690 EditTT_E_NEW.Disable(); 1691 EditTT_E_COMMENT.Disable(); 1692 PushButtonTT_PB_ACCEPT.Disable(); 1693 bNext = sal_True; 1694 } 1695 return 0; 1696 } 1697 1698 IMPL_LINK( TranslateWin, DoSelect, PushButton*, EMPTYARG ) 1699 { 1700 if ( bSelecting ) 1701 { 1702 // ReleaseMouse(); 1703 bSelecting = sal_False; 1704 } 1705 else 1706 { 1707 if ( TestChangedDataSaved() ) 1708 { 1709 PushButtonTT_PB_RESTORE.Disable(); 1710 // CaptureMouse(); 1711 bSelecting = sal_True; 1712 } 1713 } 1714 return 0; 1715 } 1716 1717 IMPL_LINK( TranslateWin, DoRestore, PushButton*, EMPTYARG ) 1718 { 1719 String sTT_E_OLD( FixedTextTT_FT_OLD.GetText()); 1720 sTT_E_OLD.SearchAndReplaceAll( CUniString("\\n"), CUniString("\n") ); 1721 sTT_E_OLD.SearchAndReplaceAll( CUniString("\\t"), CUniString("\t") ); 1722 1723 String sTT_E_NEW( EditTT_E_NEW.GetText()); 1724 sTT_E_NEW.SearchAndReplaceAll( CUniString("\\n"), CUniString("\n") ); 1725 sTT_E_NEW.SearchAndReplaceAll( CUniString("\\t"), CUniString("\t") ); 1726 1727 if ( StatementList::WinPtrValid( pTranslateWin ) && pTranslateWin->GetText().CompareTo( sTT_E_NEW ) == COMPARE_EQUAL ) 1728 { // Im ersten schritt nur in der UI zur�ck 1729 pTranslateWin->SetText( sTT_E_OLD ); 1730 } 1731 else 1732 { // Im zweite Schritt auch den eingegebenen Text 1733 EditTT_E_NEW.SetText( FixedTextTT_FT_OLD.GetText() ); 1734 PushButtonTT_PB_RESTORE.Disable(); 1735 } 1736 if ( StatementList::WinPtrValid( pTranslateWin ) ) 1737 MarkShortcutErrors( pTranslateWin->GetWindow( WINDOW_OVERLAP ), sal_True ); 1738 return 0; 1739 } 1740 1741 IMPL_LINK( TranslateWin, TranslationChanged, Edit*, pEdit ) 1742 { 1743 (void) pEdit; /* avoid warning about unused parameter */ 1744 PushButtonTT_PB_RESTORE.Enable(); 1745 InplaceTimer.Start(); 1746 return 0; 1747 } 1748 1749 IMPL_LINK( TranslateWin, ShowInplace, Timer*, EMPTYARG ) 1750 { 1751 PushButtonTT_PB_RESTORE.Enable(); 1752 if ( StatementList::WinPtrValid( pTranslateWin ) ) 1753 { 1754 String sTT_E_NEW( EditTT_E_NEW.GetText()); 1755 // alle CRs UnQuoten 1756 sTT_E_NEW.SearchAndReplaceAll( CUniString("\\n"), CUniString("\n") ); 1757 // alle TABSs UnQuoten 1758 sTT_E_NEW.SearchAndReplaceAll( CUniString("\\t"), CUniString("\t") ); 1759 pTranslateWin->SetText( sTT_E_NEW ); 1760 1761 MarkShortcutErrors( pTranslateWin->GetWindow( WINDOW_OVERLAP ), sal_True ); 1762 } 1763 return 0; 1764 } 1765 1766 long TranslateWin::VCLEventHook( NotifyEvent& rEvt ) 1767 { 1768 if ( EVENT_MOUSEMOVE == rEvt.GetType() ) 1769 { 1770 if ( bSelecting ) 1771 { 1772 const MouseEvent *pMEvt = rEvt.GetMouseEvent(); 1773 Old = Act; 1774 Act = rEvt.GetWindow(); 1775 1776 if ( Act ) 1777 { 1778 Window *pWin = Act; 1779 sal_uInt16 i; 1780 for ( i = 0 ; i < Act->GetChildCount() ; i++ ) 1781 { 1782 pWin = Act->GetChild(i); 1783 Rectangle aWinPosSize( pWin->GetPosPixel(), pWin->GetSizePixel() ); 1784 1785 if ( ( pWin->IsMouseTransparent() || !pWin->IsEnabled() ) && aWinPosSize.IsInside( pMEvt->GetPosPixel() ) ) 1786 { 1787 Act = pWin; 1788 break; 1789 } 1790 } 1791 } 1792 1793 if ( !StatementList::WinPtrValid ( Old ) ) 1794 Old = NULL; 1795 1796 if ( Act != Old ) 1797 { 1798 if ( Old ) 1799 { 1800 Window *pWin; 1801 if ( Old->IsMouseTransparent() && Old->GET_REAL_PARENT() ) 1802 pWin = Old->GET_REAL_PARENT(); 1803 else 1804 pWin = Old; 1805 RESET_WIN(pWin); 1806 } 1807 if ( Act ) 1808 { 1809 SET_WIN(Act); 1810 FixedTextTT_FT_OLD.SetText( Act->GetText() ); 1811 } 1812 else 1813 FixedTextTT_FT_OLD.SetText( String() ); 1814 } 1815 else if ( Act ) 1816 { 1817 // SET_WIN(Act); 1818 } 1819 /* if ( Application::GetLastInputInterval() > 5000 ) // 5 Sekunden lang nix geschehen 1820 { 1821 ToTop(); 1822 } 1823 */ 1824 } //if ( bSelecting ) 1825 else 1826 { 1827 if ( Act ) 1828 { 1829 if ( Act->IsMouseTransparent() && Act->GET_REAL_PARENT() ) 1830 Act = Act->GET_REAL_PARENT(); 1831 RESET_WIN(Act); 1832 Act = NULL; 1833 } 1834 } 1835 } 1836 else if ( EVENT_MOUSEBUTTONUP == rEvt.GetType() ) 1837 { 1838 if ( bSelecting ) 1839 { 1840 pTranslateWin = Act; 1841 if ( pTranslateWin ) 1842 { 1843 MarkShortcutErrors( pTranslateWin->GetWindow( WINDOW_OVERLAP ), sal_True ); 1844 // alle CRs quoten (NF) 1845 String sTT_E_NEW( pTranslateWin->GetText()); 1846 sTT_E_NEW.SearchAndReplaceAll( CUniString("\n"), CUniString("\\n") ); 1847 // alle TABSs quoten () 1848 sTT_E_NEW.SearchAndReplaceAll( CUniString("\t"), CUniString("\\t") ); 1849 1850 FixedTextTT_FT_OLD.SetText( sTT_E_NEW ); 1851 EditTT_E_NEW.SetText( sTT_E_NEW ); 1852 EditTT_E_NEW.Enable(); 1853 EditTT_E_NEW.GrabFocus(); 1854 EditTT_E_COMMENT.SetText( String() ); 1855 EditTT_E_COMMENT.Enable(); 1856 PushButtonTT_PB_ACCEPT.Enable(); 1857 } 1858 // ReleaseMouse(); 1859 bSelecting = sal_False; 1860 } 1861 } 1862 1863 return 0; 1864 } 1865 1866 #define FDS_ACTION_COLLECT 1 1867 #define FDS_ACTION_MARK 2 1868 #define FDS_ACTION_UNMARK 3 1869 1870 class FindShortcutErrors: public Search 1871 { 1872 String aShortcuts,aDoubleShortcuts; 1873 sal_uInt16 nAction; 1874 public: 1875 FindShortcutErrors(); 1876 virtual sal_Bool IsWinOK( Window *pWin ); 1877 void SetAction( sal_uInt16 nA ); 1878 String GetDoubleShortcuts() { return aDoubleShortcuts; } 1879 }; 1880 1881 FindShortcutErrors::FindShortcutErrors() 1882 : Search( SEARCH_NOOVERLAP | SEARCH_NO_TOPLEVEL_WIN ) 1883 { 1884 SetAction( FDS_ACTION_COLLECT ); // Wir fange immer mit sammeln an, ODER?? 1885 } 1886 1887 void FindShortcutErrors::SetAction( sal_uInt16 nA ) 1888 { 1889 nAction = nA; 1890 if ( FDS_ACTION_COLLECT == nAction ) 1891 { 1892 aShortcuts = UniString(); 1893 aDoubleShortcuts = UniString(); 1894 } 1895 } 1896 1897 sal_Bool FindShortcutErrors::IsWinOK( Window *pWin ) 1898 { 1899 if ( pWin->IsReallyVisible() ) 1900 { 1901 String aText = pWin->GetText(); 1902 xub_StrLen nPos = aText.Search('~'); 1903 String aShortcut; 1904 sal_Bool bHasAccel = sal_False; 1905 if ( nPos != STRING_NOTFOUND ) 1906 { 1907 aShortcut = aText.Copy( nPos+1, 1 ); 1908 aShortcut.ToLowerAscii(); 1909 bHasAccel = aShortcut.Len() == 1; 1910 } 1911 1912 switch ( nAction ) 1913 { 1914 case FDS_ACTION_COLLECT: 1915 { 1916 if ( aShortcuts.Search( aShortcut ) != STRING_NOTFOUND ) 1917 aDoubleShortcuts += aShortcut; 1918 else 1919 aShortcuts += aShortcut; 1920 } 1921 break; 1922 case FDS_ACTION_MARK: 1923 { 1924 sal_Bool bMissing = sal_False; 1925 if ( !bHasAccel && aText.Len() ) // should there be an accelarator defined 1926 { 1927 1928 Window* pChild; 1929 pChild = pWin->GetWindow( WINDOW_CLIENT ); 1930 1931 if ( (pChild->GetType() == WINDOW_RADIOBUTTON) || 1932 (pChild->GetType() == WINDOW_IMAGERADIOBUTTON) || 1933 (pChild->GetType() == WINDOW_CHECKBOX) || 1934 (pChild->GetType() == WINDOW_TRISTATEBOX) || 1935 (pChild->GetType() == WINDOW_PUSHBUTTON) ) 1936 { 1937 if ( !pChild->GetText().EqualsAscii( "..." ) ) 1938 bMissing = sal_True; 1939 } 1940 1941 if ( pChild->GetType() == WINDOW_FIXEDTEXT ) 1942 { 1943 Window* pTempChild = pWin->GetWindow( WINDOW_NEXT ); 1944 if ( pTempChild ) 1945 pTempChild = pTempChild->GetWindow( WINDOW_CLIENT ); 1946 1947 if ( pTempChild && pChild->GetText().Len() ) 1948 { 1949 if ( (pTempChild->GetType() == WINDOW_EDIT) || 1950 (pTempChild->GetType() == WINDOW_MULTILINEEDIT) || 1951 (pTempChild->GetType() == WINDOW_SPINFIELD) || 1952 (pTempChild->GetType() == WINDOW_PATTERNFIELD) || 1953 (pTempChild->GetType() == WINDOW_NUMERICFIELD) || 1954 (pTempChild->GetType() == WINDOW_METRICFIELD) || 1955 (pTempChild->GetType() == WINDOW_CURRENCYFIELD) || 1956 (pTempChild->GetType() == WINDOW_DATEFIELD) || 1957 (pTempChild->GetType() == WINDOW_TIMEFIELD) || 1958 (pTempChild->GetType() == WINDOW_LISTBOX) || 1959 (pTempChild->GetType() == WINDOW_MULTILISTBOX) || 1960 (pTempChild->GetType() == WINDOW_COMBOBOX) || 1961 (pTempChild->GetType() == WINDOW_PATTERNBOX) || 1962 (pTempChild->GetType() == WINDOW_NUMERICBOX) || 1963 (pTempChild->GetType() == WINDOW_METRICBOX) || 1964 (pTempChild->GetType() == WINDOW_CURRENCYBOX) || 1965 (pTempChild->GetType() == WINDOW_DATEBOX) || 1966 (pTempChild->GetType() == WINDOW_TIMEBOX) ) 1967 { 1968 bMissing = sal_True; 1969 } 1970 } 1971 } 1972 } 1973 1974 if ( bHasAccel && aDoubleShortcuts.Search( aShortcut ) != STRING_NOTFOUND ) 1975 { 1976 if ( pWin->GetType() == WINDOW_GROUPBOX ) 1977 pWin->SetControlForeground( Color( COL_LIGHTRED ) ); 1978 else 1979 { 1980 pWin->SetControlBackground(); 1981 Color aCol(COL_GRAY); 1982 aCol.SetRed( 0xff ); 1983 pWin->SetControlBackground( aCol ); 1984 } 1985 } 1986 else if ( bMissing ) 1987 { 1988 pWin->SetControlBackground(); 1989 Color aCol(COL_GRAY); 1990 aCol.SetRed( 0xff ); 1991 aCol.SetGreen( 0xff ); 1992 pWin->SetControlBackground( aCol ); 1993 } 1994 else 1995 { 1996 pWin->SetControlForeground(); 1997 pWin->SetControlBackground(); 1998 } 1999 } 2000 break; 2001 case FDS_ACTION_UNMARK: 2002 { 2003 pWin->SetControlForeground(); 2004 pWin->SetControlBackground(); 2005 } 2006 break; 2007 } 2008 } 2009 else 2010 if ( FDS_ACTION_MARK == nAction || FDS_ACTION_UNMARK == nAction ) 2011 { 2012 pWin->SetControlForeground(); 2013 pWin->SetControlBackground(); 2014 } 2015 2016 return sal_False; 2017 } 2018 2019 String TranslateWin::MarkShortcutErrors( Window* pBase, sal_Bool bMark ) 2020 { 2021 if ( pBase ) 2022 { 2023 FindShortcutErrors aFinder; 2024 if ( bMark ) 2025 { 2026 StatementList::SearchAllWin( pBase, aFinder, sal_True ); // collect Shortcuts first 2027 aFinder.SetAction( FDS_ACTION_MARK ); 2028 } 2029 else 2030 aFinder.SetAction( FDS_ACTION_UNMARK ); 2031 StatementList::SearchAllWin( pBase, aFinder, sal_True ); 2032 return aFinder.GetDoubleShortcuts(); 2033 } 2034 return UniString(); 2035 } 2036 2037 void TranslateWin::EnableTranslation() 2038 { 2039 PushButtonTT_PB_SELECT.Enable(); 2040 PushButtonTT_PB_NEXT.Enable(); 2041 bAvailable = sal_False; 2042 bNext = sal_False; 2043 } 2044 2045 void StatementCommand::Translate() 2046 { 2047 // Es wurde eine initale UniqueId mitgegeben. Dann nur die dopelten Shortcuts liefern 2048 if( (nParams & PARAM_STR_1) && nLNr1 ) 2049 { 2050 String aDouble; 2051 Window *pWin = SearchTree( Str2Id( aString1 ) ,sal_False ); 2052 if ( pWin ) 2053 { 2054 pWin = pWin->GetWindow( WINDOW_OVERLAP ); 2055 aDouble = TranslateWin::MarkShortcutErrors( pWin, sal_True ); 2056 } 2057 pRet->GenReturn ( RET_Value, nMethodId, aDouble ); 2058 return; 2059 } 2060 2061 if ( !GetTTSettings()->pTranslateWin ) 2062 { 2063 GetTTSettings()->pTranslateWin = new TranslateWin; 2064 GetTTSettings()->bToTop = sal_True; 2065 } 2066 2067 GetTTSettings()->pTranslateWin->Show(); 2068 if ( GetTTSettings()->bToTop ) 2069 { 2070 GetTTSettings()->pTranslateWin->ToTop(); 2071 GetTTSettings()->bToTop = sal_False; 2072 } 2073 2074 // GetTTSettings()->pTranslateWin->GetWindow( WINDOW_OVERLAP )->Enable( sal_True, sal_True ); 2075 GetTTSettings()->pTranslateWin->GetWindow( WINDOW_OVERLAP )->EnableInput( sal_True, sal_True ); 2076 2077 if ( GetTTSettings()->pTranslateWin->IsTranslationAvailable() ) 2078 { 2079 String aTranslation; 2080 Window* pTranslationWindow = GetTTSettings()->pTranslateWin->GetTranslationWindow(); 2081 2082 DBG_ASSERT( pTranslationWindow, "Kein Translation Window" ); 2083 2084 if ( WinPtrValid( pTranslationWindow ) ) 2085 { 2086 if ( pTranslationWindow->GetType() == WINDOW_BORDERWINDOW && pTranslationWindow->GetWindow( WINDOW_CLIENT ) ) 2087 { 2088 Window* pNew = pTranslationWindow->GetWindow( WINDOW_CLIENT ); 2089 // Bei Dockingwindoes das kanze Geraffel von Docking Floating �berspringen 2090 while ( IsDialog( pNew ) && pNew->GetUniqueOrHelpId().isEmpty() && pNew->GetChildCount() == 1 ) 2091 pNew = pNew->GetChild( 0 ); 2092 pTranslationWindow = pNew; 2093 } 2094 2095 aTranslation = CUniString("0;"); 2096 2097 aTranslation += Id2Str( pTranslationWindow->GetUniqueOrHelpId() ); 2098 aTranslation += ';'; 2099 2100 aTranslation += TypeString( pTranslationWindow->GetType() ); 2101 aTranslation += ';'; 2102 2103 Window* pParentDialog = pTranslationWindow; 2104 while ( pParentDialog && !IsDialog( pParentDialog ) ) 2105 { 2106 pParentDialog = pParentDialog->GET_REAL_PARENT(); 2107 } 2108 2109 if ( pParentDialog ) 2110 { 2111 aTranslation += Id2Str(pParentDialog->GetUniqueOrHelpId()); 2112 aTranslation += ';'; 2113 aTranslation += TypeString( pParentDialog->GetType() ); 2114 } 2115 else 2116 aTranslation.AppendAscii( "0;" ); // Zahl + leerer String 2117 aTranslation += ';'; 2118 2119 aTranslation += '\"'; 2120 aTranslation += GetTTSettings()->pTranslateWin->GetOriginalText(); 2121 aTranslation += '\"'; 2122 2123 aTranslation += ';'; 2124 2125 aTranslation += '\"'; 2126 aTranslation += GetTTSettings()->pTranslateWin->GetTranslationText(); 2127 aTranslation += '\"'; 2128 2129 aTranslation += ';'; 2130 2131 aTranslation += '\"'; 2132 aTranslation += GetTTSettings()->pTranslateWin->GetComment(); 2133 aTranslation += '\"'; 2134 2135 // alle CRs quoten (NF) 2136 aTranslation.SearchAndReplaceAll( CUniString("\n"), CUniString("\\n") ); 2137 // alle TABSs quoten () 2138 aTranslation.SearchAndReplaceAll( CUniString("\t"), CUniString("\\t") ); 2139 2140 pRet->GenReturn ( RET_Value, nMethodId, aTranslation ); 2141 GetTTSettings()->pTranslateWin->EnableTranslation(); 2142 GetTTSettings()->bToTop = sal_True; 2143 } 2144 else 2145 { 2146 pRet->GenReturn ( RET_Value, nMethodId, String() ); 2147 GetTTSettings()->pTranslateWin->EnableTranslation(); 2148 ErrorBox err( GetTTSettings()->pTranslateWin, TTProperties::GetSvtResId( TT_NO_CONTROL )); 2149 err.Execute(); 2150 GetTTSettings()->bToTop = sal_True; 2151 } 2152 2153 } 2154 else if ( GetTTSettings()->pTranslateWin->IsNextDialog() ) 2155 { 2156 pRet->GenReturn ( RET_Value, nMethodId, CUniString("1") ); 2157 GetTTSettings()->pTranslateWin->ResetNextDialog(); 2158 GetTTSettings()->pTranslateWin->LoseFocus(); 2159 GetTTSettings()->bToTop = sal_True; 2160 } 2161 else 2162 { 2163 GetTTSettings()->pTranslateWin->EnableTranslation(); 2164 pRet->GenReturn ( RET_Value, nMethodId, String() ); 2165 } 2166 } 2167 2168 Window* StatementCommand::GetNextOverlap( Window* pBase ) 2169 { // Findet irgendwelche Overlap-Fenster, die schlie�bar aussehen 2170 // Eventuell mu� noch die Auswahl verfeinert werden. 2171 2172 if ( pBase->GetType() != WINDOW_BORDERWINDOW ) 2173 pBase = pBase->GetWindow( WINDOW_OVERLAP ); 2174 2175 Window *pControl = NULL; 2176 if ( pBase->GetWindow( WINDOW_FIRSTOVERLAP ) ) 2177 { 2178 pControl = GetNextOverlap( pBase->GetWindow( WINDOW_FIRSTOVERLAP ) ); 2179 } 2180 2181 if ( !pControl && pBase->GetWindow( WINDOW_NEXT ) ) 2182 { 2183 pControl = GetNextOverlap( pBase->GetWindow( WINDOW_NEXT ) ); 2184 } 2185 2186 if ( !pControl ) 2187 { 2188 Window *pTest = pBase->GetWindow( WINDOW_CLIENT ); 2189 if ( IsAccessable (pTest) 2190 && pTest->IsEnabled() 2191 && pTest->IsVisible() 2192 && ((pTest->GetStyle() & WB_CLOSEABLE ) || (pBase->GetStyle() & WB_CLOSEABLE )) ) 2193 return pTest; 2194 else 2195 return NULL; 2196 } 2197 else 2198 return pControl; 2199 } 2200 2201 Window* StatementCommand::GetNextRecoverWin() 2202 { 2203 // �ber die TopLevelWindows der App iterieren 2204 Window* pBase = Application::GetFirstTopLevelWindow(); 2205 Window *pControl = NULL; 2206 Window* pMyFirstDocFrame = NULL; 2207 while ( pBase ) 2208 { 2209 // zuerst weitere Fenster auf dem Fenster suchen und schliessen 2210 pControl = GetNextOverlap( pBase ); 2211 if ( pControl && pControl->GetType() == WINDOW_HELPTEXTWINDOW ) 2212 {} // skip it 2213 else 2214 { 2215 if ( pControl && pControl->IsVisible() && !IsFirstDocFrame( pControl ) && !IsIMEWin( pControl ) ) 2216 { 2217 Window* pTB = pControl->GetChild( 0 ); 2218 if ( pControl->GetChildCount() == 1 && pTB->GetType() == WINDOW_TOOLBOX ) 2219 // return pTB; 2220 ; // do not act on floating toolboxes #i38796 2221 else 2222 return pControl; 2223 } 2224 2225 // dann das Fenster selbst Schliessen 2226 // erstes DocWin �berspringen 2227 // Assumption that Doc Windows are Borderwindows and ButtonDialog and such are not 2228 if ( pBase->IsVisible() && !IsFirstDocFrame( pBase ) && pBase->GetType() != WINDOW_BORDERWINDOW && !IsIMEWin( pBase ) ) 2229 return pBase; 2230 2231 if ( !pMyFirstDocFrame && IsFirstDocFrame( pBase ) ) 2232 pMyFirstDocFrame = pBase; 2233 } 2234 2235 pBase = Application::GetNextTopLevelWindow( pBase ); 2236 } 2237 #ifdef RESET_APPLICATION_TO_BACKING_WINDOW 2238 // close the FirstDocFrame last, It will not be closed, but the Document inside will be closed. 2239 if ( IsDocWin( pMyFirstDocFrame ) ) 2240 return pMyFirstDocFrame; 2241 #endif // def RESET_APPLICATION_TO_BACKING_WINDOW 2242 2243 return NULL; 2244 } 2245 2246 sal_Bool StatementCommand::Execute() 2247 { 2248 if ( IsError ) 2249 { 2250 #if OSL_DEBUG_LEVEL > 1 2251 m_pDbgWin->AddText( "Skipping Command: " ); 2252 m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); 2253 m_pDbgWin->AddText( "\n" ); 2254 #endif 2255 2256 Advance(); 2257 delete this; 2258 return sal_True; 2259 } 2260 2261 InitProfile(); 2262 #if OSL_DEBUG_LEVEL > 1 2263 m_pDbgWin->AddText( "Executing Command: " ); 2264 m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); 2265 m_pDbgWin->AddText( "\n" ); 2266 #endif 2267 2268 2269 2270 2271 2272 #if OSL_DEBUG_LEVEL > 1 2273 #define REPORT_WIN_CLOSED(pControl, aInfo) \ 2274 _REPORT_WIN_CLOSED(pControl, aInfo) \ 2275 m_pDbgWin->AddText( aInfo.AppendAscii(" \"").Append( pControl->GetText() ).AppendAscii("\" geschlossen, RType = ").Append( TypeString(pControl->GetType()) ).AppendAscii(", UId = ").Append( UIdString( pControl->GetUniqueOrHelpId() ) ) ); 2276 #else 2277 #define REPORT_WIN_CLOSED(pControl, aInfo) _REPORT_WIN_CLOSED(pControl, aInfo) 2278 #endif 2279 2280 #define REPORT_WIN_CLOSEDc(pControl, aInfo ) \ 2281 REPORT_WIN_CLOSED(pControl, CUniString(aInfo) ) 2282 2283 #define _REPORT_WIN_CLOSED(pControl, aInfo) \ 2284 if ( aString1.Len() ) \ 2285 aString1 += '\n'; \ 2286 aString1 += aInfo; \ 2287 aString1.AppendAscii(" \""); \ 2288 aString1 += pControl->GetText(); \ 2289 aString1.AppendAscii("\" geschlossen, RType = ");\ 2290 aString1 += TypeString(pControl->GetType()); \ 2291 aString1.AppendAscii(", UId = "); \ 2292 aString1 += UIdString(pControl->GetUniqueOrHelpId()); 2293 2294 2295 switch ( nMethodId ) 2296 { 2297 case RC_AppDelay: 2298 if ( !bBool1 ) 2299 { 2300 nLNr1 = Time().GetTime() + nNr1/10; 2301 bBool1 = sal_True; 2302 } 2303 if ( Time().GetTime() < long(nLNr1) ) // Aktuelle Zeit kleiner Endzeit 2304 return sal_False; 2305 break; 2306 case RC_DisplayHid: 2307 if ( DisplayHID() ) 2308 return sal_False; 2309 break; 2310 case RC_ResetApplication: 2311 { 2312 if ( !bBool1 ) 2313 { 2314 nRetryCount = 150; // das sollte reichen. 2315 bBool1 = sal_True; // Nur beim ersten mal! 2316 nNr1 = 1; // Welcher Button ist dran? 2317 nLNr1 = 0; // Speichern des AppWin 2318 aString1 = UniString(); // Liste der geschlossenen Fenster 2319 2320 // So da� nacher auch wieder alles auf Default steht 2321 nUseBindings = 0; 2322 bCatchGPF = sal_True; 2323 bUsePostEvents = sal_True; 2324 2325 aSubMenuId1 = 0; 2326 aSubMenuId2 = 0; 2327 aSubMenuId3 = 0; 2328 pMenuWindow = NULL; 2329 } 2330 if ( !nRetryCount ) 2331 ReportError( GEN_RES_STR0( S_RESETAPPLICATION_FAILED_COMPLEX ) ); 2332 2333 Window *pControl = GetNextRecoverWin(); 2334 2335 if ( pControl ) 2336 { 2337 bBool2 = sal_False; // flag for wait when all windows are closed 2338 pControl->GrabFocus(); 2339 2340 if ( pControl->GetType() != WINDOW_DOCKINGWINDOW 2341 && pControl->GetType() != WINDOW_FLOATINGWINDOW 2342 && pControl->GetType() != WINDOW_MODELESSDIALOG 2343 && pControl->GetType() != WINDOW_WORKWINDOW 2344 && pControl->GetType() != WINDOW_TOOLBOX 2345 && pControl->GetType() != WINDOW_BORDERWINDOW 2346 && nRetryCount-- ) 2347 { 2348 short nRT = ImpGetRType( pControl ); 2349 2350 if ( nRT == C_TabControl && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) 2351 { // Bei Tabcontrol den zugeh�rigen Tabdialog nehmen 2352 pControl = pControl->GET_REAL_PARENT(); 2353 nRT = ImpGetRType( pControl ); 2354 } 2355 2356 switch( nRT ) 2357 { 2358 case C_ModalDlg: 2359 case C_Dialog: 2360 case C_TabDlg: 2361 REPORT_WIN_CLOSEDc(pControl, "Dialog"); 2362 SET_WINP_CLOSING(pControl); 2363 ((SystemWindow*)pControl)->Close(); 2364 break; 2365 case C_WorkWin: 2366 break; 2367 case C_MessBox: 2368 case C_InfoBox: 2369 case C_WarningBox: 2370 case C_ErrorBox: 2371 case C_QueryBox: 2372 case C_ButtonDialog: 2373 { 2374 ButtonDialog* pBD = (ButtonDialog*)pControl; 2375 // nNr1 >= 10 bedeutet (Custom)-Buttons durchgehen 2376 if ( nNr1 >= 10+pBD->GetButtonCount() ) nNr1 = 1; 2377 switch( nNr1 ) 2378 { 2379 case 5: 2380 if ( pBD->GetPushButton( BUTTONID_OK ) ) 2381 { 2382 REPORT_WIN_CLOSEDc(pControl, "Message Box (OK)"); 2383 SET_WINP_CLOSING(pControl); 2384 pBD->EndDialog(RET_OK); 2385 } 2386 nNr1 = 10; // Nochmal alle Buttons der Reihe nach 2387 break; 2388 case 4: 2389 if ( pBD->GetPushButton( BUTTONID_CANCEL ) ) 2390 { 2391 REPORT_WIN_CLOSEDc(pControl, "Message Box (Cancel)"); 2392 SET_WINP_CLOSING(pControl); 2393 pBD->EndDialog(RET_CANCEL); 2394 } 2395 nNr1++; 2396 break; 2397 case 3: 2398 if ( pBD->GetPushButton( BUTTONID_YES ) ) 2399 { 2400 REPORT_WIN_CLOSEDc(pControl, "Message Box (Yes)"); 2401 SET_WINP_CLOSING(pControl); 2402 pBD->EndDialog(RET_YES); 2403 } 2404 nNr1++; 2405 break; 2406 case 2: // BUG 48239 2407 case 1: 2408 if ( pBD->GetPushButton( BUTTONID_NO ) ) 2409 { 2410 REPORT_WIN_CLOSEDc(pControl, "Message Box (No)"); 2411 SET_WINP_CLOSING(pControl); 2412 pBD->EndDialog(RET_NO); 2413 } 2414 nNr1++; 2415 break; 2416 default: 2417 { 2418 sal_uInt16 nID = pBD->GetButtonId( nNr1-10 ); 2419 if ( nID != BUTTONID_HELP ) 2420 { 2421 REPORT_WIN_CLOSED(pControl, CUniString("Message Box (").Append( UniString::CreateFromInt32(nID) ).AppendAscii(")")); 2422 SET_WINP_CLOSING(pControl); 2423 pBD->EndDialog(nID); 2424 } 2425 nNr1++; 2426 } 2427 } 2428 break; 2429 } 2430 default: 2431 DBG_ERROR( "Unknown Windowtype" ); 2432 REPORT_WIN_CLOSEDc(pControl, "Unknown Windowtype"); 2433 ReportError( GEN_RES_STR0( S_RESETAPPLICATION_FAILED_UNKNOWN ), pControl->GetType() ); 2434 #if OSL_DEBUG_LEVEL > 1 2435 m_pDbgWin->AddText( " Unbekannter Objekttyp aus UId" ); 2436 #endif 2437 break; 2438 } 2439 return sal_False; 2440 } 2441 else 2442 { 2443 if ( (pControl->GetType() == WINDOW_DOCKINGWINDOW || pControl->GetType() == WINDOW_TOOLBOX) && nRetryCount-- ) 2444 { 2445 if ( (((DockingWindow*)pControl)->GetStyle() | ((DockingWindow*)pControl)->GetFloatStyle()) & WB_CLOSEABLE ) 2446 { 2447 REPORT_WIN_CLOSED(pControl, TypeString(pControl->GetType())); 2448 SET_WINP_CLOSING(pControl); 2449 ((DockingWindow*)pControl)->Close(); 2450 2451 // Eigentlich nur bei TaskWindows! Hoffen wir mal, da� keine anderen DockingWindows dazwischen hauen. 2452 if ( (Window*)nLNr1 != pControl ) 2453 nNr1 = 1; // Zum durchprobieren der Buttons beim Schlie�en 2454 nLNr1 = (sal_uLong)pControl; 2455 2456 return sal_False; 2457 } 2458 } 2459 if ( nRetryCount-- 2460 && ( (pControl->GetType() == WINDOW_FLOATINGWINDOW) 2461 || (pControl->GetType() == WINDOW_MODELESSDIALOG) 2462 || (pControl->GetType() == WINDOW_WORKWINDOW) 2463 || (pControl->GetType() == WINDOW_BORDERWINDOW) ) ) 2464 { 2465 // if ( pControl->GetStyle() & WB_CLOSEABLE ) 2466 { 2467 #ifdef RESET_APPLICATION_TO_BACKING_WINDOW 2468 // Special handling for last Document; do not close the Frame, only the Document 2469 if ( GetDocWinCount() == 1 && IsDocFrame( pControl ) ) 2470 { 2471 if ( IsDocWin( pControl ) ) 2472 { 2473 if ( GetDocFrameMenuBar( pControl ) ) 2474 { 2475 MenuBar* pMenu = GetDocFrameMenuBar( pControl ); 2476 if ( pMenu->HasCloser() ) 2477 { 2478 REPORT_WIN_CLOSED( pControl, TypeString(pControl->GetType())); 2479 SET_WINP_CLOSING(pControl); 2480 2481 pMenu->GetCloserHdl().Call( pMenu ); 2482 2483 // nur bei TaskWindows! 2484 if ( (Window*)nLNr1 != pControl ) 2485 nNr1 = 1; // Zum durchprobieren der Buttons beim Schlie�en 2486 nLNr1 = (sal_uLong)pControl; 2487 2488 return sal_False; 2489 } 2490 } 2491 } 2492 } 2493 else 2494 #endif // def RESET_APPLICATION_TO_BACKING_WINDOW 2495 { 2496 REPORT_WIN_CLOSED( pControl, TypeString(pControl->GetType())); 2497 SET_WINP_CLOSING(pControl); 2498 ((SystemWindow*)pControl)->Close(); 2499 2500 // Eigentlich nur bei TaskWindows! 2501 if ( (Window*)nLNr1 != pControl ) 2502 nNr1 = 1; // Zum durchprobieren der Buttons beim Schlie�en 2503 nLNr1 = (sal_uLong)pControl; 2504 2505 return sal_False; 2506 } 2507 } 2508 } 2509 } 2510 } 2511 // wait for some time if more windows show up 2512 // E.g.: Floating toolbars on a Task which was hidden by another Task before 2513 if ( !bBool2 ) 2514 { 2515 nLNr1 = Time().GetTime() + 100; // 100 = 1 Second 2516 bBool2 = sal_True; 2517 } 2518 if ( Time().GetTime() < long(nLNr1) ) // Aktuelle Zeit kleiner Endzeit 2519 return sal_False; 2520 else 2521 pRet->GenReturn ( RET_Value, nMethodId, aString1); 2522 } 2523 break; 2524 case RC_WaitSlot: 2525 { 2526 if ( ! (nParams & PARAM_USHORT_1) ) 2527 nNr1 = 1000; // defaults to 1000 = 1 Sec. 2528 if ( !bBool1 ) 2529 { 2530 nLNr1 = Time().GetTime() + nNr1/10; 2531 bBool1 = sal_True; 2532 } 2533 2534 if ( !bIsSlotInExecute ) 2535 pRet->GenReturn ( RET_Value, nMethodId, comm_USHORT(CONST_WSFinished) ); 2536 else 2537 { 2538 if ( Time().GetTime() < long(nLNr1) ) // Aktuelle Zeit kleiner Endzeit 2539 return sal_False; 2540 pRet->GenReturn ( RET_Value, nMethodId, comm_USHORT(CONST_WSTimeout) ); 2541 } 2542 } 2543 break; 2544 } 2545 2546 2547 Advance(); 2548 2549 2550 switch ( nMethodId ) 2551 { 2552 case RC_AppDelay: // Diese Befehle werden anderswo behandelt 2553 case RC_DisplayHid: 2554 case RC_ResetApplication: 2555 case RC_WaitSlot: 2556 2557 case RC_AppAbort: // Sofortiges L�schen aller Befehle 2558 break; 2559 case RC_Assert: 2560 { 2561 ByteString aAssertion( "Diese Assertion wurde vom Testtool per Befehl ausgel�st" ); 2562 aAssertion = ByteString( String( aAssertion, RTL_TEXTENCODING_MS_1252 ), RTL_TEXTENCODING_UTF8 ); 2563 DBG_ASSERT( !aString1.Len(), ByteString( aString1, RTL_TEXTENCODING_UTF8 ).GetBuffer() ); 2564 DBG_ASSERT( aString1.Len(), aAssertion.GetBuffer() ); 2565 OSL_ENSURE( !aString1.Len(), ByteString( aString1, RTL_TEXTENCODING_UTF8 ).GetBuffer() ); 2566 OSL_ENSURE( aString1.Len(), aAssertion.GetBuffer() ); 2567 } 2568 break; 2569 case RC_CaptureAssertions: 2570 #ifdef DBG_UTIL 2571 if( !(nParams & PARAM_BOOL_1) || bBool1 ) 2572 { 2573 DBG_INSTOUTERROR( DBG_OUT_TESTTOOL ); 2574 osl_setDebugMessageFunc( osl_TestToolDebugPrint ); 2575 } 2576 else 2577 { 2578 DBG_INSTOUTERROR( DBG_OUT_MSGBOX ); 2579 osl_setDebugMessageFunc( pOriginal_osl_DebugMessageFunc ); 2580 } 2581 #endif 2582 break; 2583 case RC_Translate: 2584 Translate(); 2585 break; 2586 case RC_ApplicationBusy: 2587 { 2588 sal_Bool bWait = sal_False; 2589 ReportError( GEN_RES_STR0( S_NO_ACTIVE_WINDOW ) ); 2590 // if ( Application::GetAppWindow() ) 2591 // bWait = Application::GetAppWindow()->IsWait(); 2592 pRet->GenReturn ( RET_Value, nMethodId, bWait ); 2593 break; 2594 } 2595 case RC_GetClipboard: 2596 { 2597 ::rtl::OUString aTemp; 2598 ::svt::OStringTransfer::PasteString( aTemp, GetFirstDocFrame() ); 2599 pRet->GenReturn ( RET_Value, nMethodId, String( aTemp ) ); 2600 } 2601 break; 2602 case RC_SetClipboard: 2603 ::svt::OStringTransfer::CopyString(aString1,GetFirstDocFrame()); 2604 break; 2605 case RC_WinTree: 2606 pRet->GenReturn ( RET_Value, nMethodId, Tree( NULL, 0)); 2607 break; 2608 #if OSL_DEBUG_LEVEL > 1 2609 case RC_NoDebug: 2610 m_pDbgWin->bQuiet = sal_True; 2611 m_pDbgWin->Hide(); 2612 m_pDbgWin->Clear(); 2613 break; 2614 case RC_Debug: 2615 m_pDbgWin->bQuiet = sal_False; 2616 m_pDbgWin->Show(); 2617 break; 2618 #endif 2619 case RC_GPF: 2620 ((TabControl*)NULL)->SetCurPageId( 12345 ); 2621 break; 2622 case RC_GetNextCloseWindow: 2623 { 2624 Window *pWin = GetActive( WINDOW_BASE ); // WINDOW_ANYTYPE 2625 if ( !pWin ) 2626 ReportError( GEN_RES_STR0( S_NO_ACTIVE_WINDOW ) ); 2627 else if ( !IsDialog(pWin) ) 2628 ReportError( GEN_RES_STR0( S_NO_DIALOG_IN_GETACTIVE ) ); 2629 else 2630 { 2631 pRet->GenReturn( RET_Value, nMethodId, Id2Str(pWin->GetUniqueOrHelpId()) ); 2632 } 2633 } 2634 break; 2635 case RC_UseBindings: 2636 if( !(nParams & PARAM_BOOL_1) || bBool1 ) 2637 nUseBindings = SFX_USE_BINDINGS; 2638 else 2639 nUseBindings = 0; 2640 break; 2641 case RC_Profile: 2642 // Bei folgenden Parametern passiert folgendes: 2643 // ein boolean=false Alles Profiling stoppen (Ergebnisse liefern) 2644 // ein boolean=true, 1-4 ints Einteilung der Zeiten in K�stchen 2645 // kein! boolean keine ints loggen jeden Befehls 2646 // kein! boolean 1 int loggen alle int Millisekunden 2647 // ein String wird in das Logfile �bernommen(sonst passiert nichts) 2648 if( !(nParams & PARAM_BOOL_1) || bBool1 ) 2649 { 2650 if ( !pProfiler ) 2651 { 2652 pProfiler = new TTProfiler; 2653 InitProfile(); 2654 } 2655 2656 if( !(nParams & PARAM_BOOL_1) && (nParams & PARAM_USHORT_1) ) 2657 { // Autoprofiling: Profile nNr 2658 if ( pProfiler->IsProfilingPerCommand() ) 2659 { 2660 pProfiler->StopProfilingPerCommand(); 2661 } 2662 pProfiler->StartAutoProfiling( nNr1 ); 2663 2664 // Der Header ist abh�ngig vom Modus 2665 pRet->GenReturn( RET_ProfileInfo, 0, pProfiler->GetProfileHeader() ); 2666 } 2667 else if ( nParams & PARAM_USHORT_1 ) 2668 { // Partitioning initialisieren: Profile true [,nNr][,nNr][,nNr][,nNr] 2669 comm_ULONG nAnzahl=0; 2670 if ( nParams & PARAM_USHORT_1 ) { nAnzahl++; }; 2671 if ( nParams & PARAM_USHORT_2 ) { nAnzahl++; }; 2672 if ( nParams & PARAM_USHORT_3 ) { nAnzahl++; }; 2673 if ( nParams & PARAM_USHORT_4 ) { nAnzahl++; }; 2674 2675 // Hier werden die Parameter ans Testtool zur�ck �bertragen. 2676 // Das ist zwar etwas eigenartig, aber ansonsten m�sste man im Testtool 2677 // die einfache Struktur der Remotebefehle aufbrechen. 2678 pRet->GenReturn( RET_ProfileInfo, S_ProfileReset, nAnzahl ); 2679 2680 // Und die einzelnen Grenzen 2681 if ( nParams & PARAM_USHORT_1 ) { pRet->GenReturn( RET_ProfileInfo, S_ProfileBorder1, (comm_ULONG)nNr1 ); }; 2682 if ( nParams & PARAM_USHORT_2 ) { pRet->GenReturn( RET_ProfileInfo, S_ProfileBorder2, (comm_ULONG)nNr2 ); }; 2683 if ( nParams & PARAM_USHORT_3 ) { pRet->GenReturn( RET_ProfileInfo, S_ProfileBorder3, (comm_ULONG)nNr3 ); }; 2684 if ( nParams & PARAM_USHORT_4 ) { pRet->GenReturn( RET_ProfileInfo, S_ProfileBorder4, (comm_ULONG)nNr4 ); }; 2685 2686 pProfiler->StartPartitioning(); 2687 } 2688 else if( nParams == PARAM_STR_1 ) // Genau ein String! 2689 { // Nur einen String ins Profiling aufnehmen 2690 aString1 += '\n'; 2691 pRet->GenReturn( RET_ProfileInfo, 0, aString1 ); 2692 } 2693 else 2694 { // Normales Profiling je Kommando: profile 2695 if ( pProfiler->IsAutoProfiling() ) 2696 { 2697 pRet->GenReturn( RET_ProfileInfo, 0, pProfiler->GetAutoProfiling() ); 2698 pProfiler->StopAutoProfiling(); 2699 } 2700 pProfiler->StartProfilingPerCommand(); 2701 2702 // Der Header ist abh�ngig vom Modus 2703 pRet->GenReturn( RET_ProfileInfo, 0, pProfiler->GetProfileHeader() ); 2704 } 2705 } 2706 else // Profiling wieder ausschalten: Profile false 2707 if ( pProfiler ) 2708 { 2709 if ( pProfiler->IsProfilingPerCommand() ) 2710 pProfiler->StopProfilingPerCommand(); 2711 2712 if ( pProfiler->IsAutoProfiling() ) 2713 { 2714 pRet->GenReturn( RET_ProfileInfo, 0, pProfiler->GetAutoProfiling() ); 2715 pProfiler->StopAutoProfiling(); 2716 } 2717 2718 if ( pProfiler->IsPartitioning() ) 2719 { 2720 pRet->GenReturn( RET_ProfileInfo, S_ProfileDump, (comm_ULONG)0 ); 2721 pProfiler->StopPartitioning(); 2722 } 2723 2724 delete pProfiler; 2725 pProfiler = NULL; 2726 } 2727 break; 2728 case RC_MenuGetItemCount: 2729 case RC_MenuGetItemId: 2730 case RC_MenuGetItemPos: 2731 case RC_MenuIsSeperator: 2732 case RC_MenuIsItemChecked: 2733 case RC_MenuIsItemEnabled: 2734 case RC_MenuGetItemText: 2735 case RC_MenuGetItemCommand: 2736 case RC_MenuHasSubMenu: 2737 case RC_MenuSelect: 2738 { 2739 PopupMenu *pPopup = NULL; 2740 MenuBar *pMenuBar = NULL; 2741 Menu *pMenu; 2742 2743 sal_uInt16 nErr = GetCurrentMenues( pPopup, pMenuBar, pMenu ); 2744 2745 if ( !pMenu ) 2746 { 2747 if ( nErr == 1 ) 2748 ReportError( GEN_RES_STR0( S_NO_POPUP ) ); 2749 else 2750 ReportError( GEN_RES_STR0( S_NO_SUBMENU ) ); 2751 break; 2752 } 2753 2754 sal_uInt16 nItemCount = 0; 2755 switch ( nMethodId ) 2756 { 2757 case RC_MenuGetItemCount: 2758 case RC_MenuGetItemId: 2759 case RC_MenuIsSeperator: 2760 { 2761 nItemCount = pMenu->GetItemCount(); 2762 if ( pMenu->GetMenuFlags() & MENU_FLAG_HIDEDISABLEDENTRIES ) 2763 { // jep, we have to adjust the count 2764 sal_Bool bLastWasSeperator = sal_True; // sal_True for Separator at the top 2765 for ( sal_uInt16 i = 0 ; i < pMenu->GetItemCount() ; i++ ) 2766 { 2767 if ( !pMenu->IsItemEnabled( pMenu->GetItemId( i ) ) ) 2768 nItemCount--; 2769 else 2770 { 2771 if ( pMenu->GetItemType( i ) == MENUITEM_SEPARATOR && bLastWasSeperator ) 2772 nItemCount--; 2773 bLastWasSeperator = pMenu->GetItemType( i ) == MENUITEM_SEPARATOR; 2774 } 2775 } 2776 if ( bLastWasSeperator ) // Separator at bottom 2777 nItemCount--; 2778 } 2779 } 2780 break; 2781 } 2782 2783 // for certain methods calculate the physical index (reinserting the hidden entries) 2784 sal_uInt16 nPhysicalIndex = 0; 2785 switch ( nMethodId ) 2786 { 2787 case RC_MenuGetItemId: 2788 case RC_MenuIsSeperator: 2789 { 2790 nPhysicalIndex = nNr1; 2791 if ( pMenu->GetMenuFlags() & MENU_FLAG_HIDEDISABLEDENTRIES ) 2792 { // jep, we have to adjust the position 2793 sal_Bool bLastWasSeperator = sal_True; // sal_True for Separator at the top 2794 sal_uInt16 nVisibleCount = 0; 2795 for ( sal_uInt16 i = 0 ; i < pMenu->GetItemCount() && nVisibleCount < nNr1 ; i++ ) 2796 { 2797 if ( pMenu->IsItemEnabled( pMenu->GetItemId( i ) ) 2798 && !( pMenu->GetItemType( i ) == MENUITEM_SEPARATOR && bLastWasSeperator ) ) 2799 { 2800 nVisibleCount++; 2801 bLastWasSeperator = pMenu->GetItemType( i ) == MENUITEM_SEPARATOR; 2802 } 2803 else 2804 nPhysicalIndex++; 2805 } 2806 DBG_ASSERT( nVisibleCount == nNr1, "Adaption of Index failed: nVisibleCount != nNr1" ); 2807 } 2808 } 2809 break; 2810 } 2811 2812 2813 2814 switch ( nMethodId ) 2815 { 2816 case RC_MenuGetItemCount: 2817 { 2818 pRet->GenReturn ( RET_Value, nMethodId, (comm_ULONG)nItemCount ); 2819 } 2820 break; 2821 case RC_MenuGetItemId: 2822 { 2823 if ( ValueOK( rtl::OString(), RcString( nMethodId ),nNr1,nItemCount) ) 2824 pRet->GenReturn ( RET_Value, nMethodId, (comm_ULONG)pMenu->GetItemId(nPhysicalIndex-1) ); 2825 } 2826 break; 2827 case RC_MenuGetItemPos: 2828 { 2829 sal_uInt16 nLogicalPos = pMenu->GetItemPos(nNr1); 2830 if ( MENU_ITEM_NOTFOUND != nLogicalPos && pMenu->GetMenuFlags() & MENU_FLAG_HIDEDISABLEDENTRIES ) 2831 { // jep, we have to adjust the position 2832 if ( !pMenu->IsItemEnabled( nNr1 ) ) 2833 nLogicalPos = MENU_ITEM_NOTFOUND; 2834 else 2835 { 2836 sal_Bool bLastWasSeperator = sal_False; 2837 for ( int i = nLogicalPos ; i >= 0 ; i-- ) 2838 { 2839 if ( !pMenu->IsItemEnabled( pMenu->GetItemId( sal::static_int_cast< sal_uInt16 >(i) ) ) || 2840 ( pMenu->GetItemType( sal::static_int_cast< sal_uInt16 >(i) ) == MENUITEM_SEPARATOR && bLastWasSeperator ) ) 2841 nLogicalPos--; 2842 bLastWasSeperator = pMenu->GetItemType( sal::static_int_cast< sal_uInt16 >(i) ) == MENUITEM_SEPARATOR; 2843 } 2844 } 2845 } 2846 pRet->GenReturn ( RET_Value, nMethodId, (comm_ULONG)(nLogicalPos+1) ); 2847 } 2848 break; 2849 case RC_MenuIsSeperator: 2850 { 2851 if ( ValueOK( rtl::OString(), RcString( nMethodId ),nNr1,nItemCount) ) 2852 pRet->GenReturn ( RET_Value, nMethodId, (comm_BOOL)(pMenu->GetItemType(nPhysicalIndex-1) == MENUITEM_SEPARATOR) ); 2853 } 2854 break; 2855 case RC_MenuIsItemChecked: 2856 { 2857 pRet->GenReturn ( RET_Value, nMethodId, (comm_BOOL)pMenu->IsItemChecked(nNr1) ); 2858 } 2859 break; 2860 case RC_MenuIsItemEnabled: 2861 { 2862 pRet->GenReturn ( RET_Value, nMethodId, (comm_BOOL)pMenu->IsItemEnabled(nNr1) ); 2863 } 2864 break; 2865 case RC_MenuGetItemText: 2866 { 2867 pRet->GenReturn ( RET_Value, nMethodId, (String)pMenu->GetItemText(nNr1) ); 2868 } 2869 break; 2870 case RC_MenuGetItemCommand: 2871 { 2872 pRet->GenReturn ( RET_Value, nMethodId, (String)pMenu->GetItemCommand(nNr1) ); 2873 } 2874 break; 2875 case RC_MenuHasSubMenu: 2876 { 2877 pRet->GenReturn ( RET_Value, nMethodId, (sal_Bool)(pMenu->GetPopupMenu(nNr1) != NULL) ); 2878 } 2879 break; 2880 case RC_MenuSelect: 2881 { 2882 if ( pMenu->GetPopupMenu(nNr1) ) 2883 { 2884 if ( !aSubMenuId1 ) 2885 aSubMenuId1 = nNr1; 2886 else if ( !aSubMenuId2 ) 2887 aSubMenuId2 = nNr1; 2888 else if ( !aSubMenuId3 ) 2889 aSubMenuId3 = nNr1; 2890 2891 if ( pPopup ) 2892 pPopup->SelectEntry(nNr1); 2893 else 2894 pMenuBar->SelectEntry(nNr1); 2895 } 2896 else 2897 { 2898 if ( pPopup ) 2899 { 2900 pPopup->EndExecute(nNr1); 2901 aSubMenuId1 = 0; 2902 aSubMenuId2 = 0; 2903 aSubMenuId3 = 0; 2904 pMenuWindow = NULL; 2905 } 2906 else 2907 { 2908 pMenuBar->SelectEntry(nNr1); 2909 aSubMenuId1 = 0; 2910 aSubMenuId2 = 0; 2911 aSubMenuId3 = 0; 2912 pMenuWindow = NULL; 2913 } 2914 } 2915 } 2916 break; 2917 } 2918 } 2919 break; 2920 case RC_SetControlType: 2921 { 2922 DirectLog( S_QAError, GEN_RES_STR0( S_DEPRECATED ) ); 2923 } 2924 break; 2925 case RC_Kill: 2926 case RC_RmDir: 2927 case RC_MkDir: 2928 case RC_FileCopy: 2929 case RC_Name: 2930 case RC_Dir: 2931 case RC_FileLen: 2932 case RC_FileDateTime: 2933 { 2934 long nErrorcode = FSYS_ERR_OK; 2935 switch ( nMethodId ) 2936 { 2937 case RC_Kill: 2938 { 2939 DirEntry aFile( aString1 ); 2940 nErrorcode = aFile.GetError(); 2941 if ( FSYS_ERR_OK == nErrorcode && FileStat( aFile ).IsKind( FSYS_KIND_FILE ) ) 2942 nErrorcode = aFile.Kill(); 2943 else 2944 nErrorcode = FSYS_ERR_NOTAFILE; 2945 } 2946 break; 2947 case RC_RmDir: 2948 { 2949 DirEntry aDir( aString1 ); 2950 nErrorcode = aDir.GetError(); 2951 if ( FSYS_ERR_OK == nErrorcode && FileStat( aDir ).IsKind( FSYS_KIND_DIR ) ) 2952 nErrorcode = aDir.Kill(); 2953 else 2954 nErrorcode = FSYS_ERR_NOTADIRECTORY; 2955 } 2956 break; 2957 case RC_MkDir: 2958 { 2959 DirEntry aDir( aString1 ); 2960 nErrorcode = aDir.GetError(); 2961 if ( !nErrorcode && !aDir.MakeDir() ) 2962 nErrorcode = FSYS_ERR_UNKNOWN; 2963 // Workaround f�r Bug 60693 2964 // nErrorcode = aDir.GetError(); 2965 } 2966 break; 2967 case RC_FileCopy: 2968 { 2969 nErrorcode = DirEntry( aString1 ).CopyTo( DirEntry( aString2 ), FSYS_ACTION_COPYFILE ); 2970 } 2971 break; 2972 case RC_Name: 2973 { 2974 nErrorcode = DirEntry( aString1 ).MoveTo( DirEntry( aString2 ) ); 2975 } 2976 break; 2977 case RC_Dir: 2978 { 2979 2980 String aPath; 2981 sal_uInt16 nDirFlags = 0; 2982 // from basic/source/inc/runtime.hxx 2983 #define Sb_ATTR_NORMAL 0x0000 2984 #define Sb_ATTR_HIDDEN 0x0002 2985 #define Sb_ATTR_SYSTEM 0x0004 2986 #define Sb_ATTR_VOLUME 0x0008 2987 #define Sb_ATTR_DIRECTORY 0x0010 2988 #define Sb_ATTR_ARCHIVE 0x0020 2989 // copied from Basic and adapted basic/source/runtime/methods.cxx Revision 1.54 2990 if ( (nParams & PARAM_STR_1) ) 2991 { 2992 delete pDir; 2993 pDir = NULL; // wg. Sonderbehandlung Sb_ATTR_VOLUME 2994 DirEntry aEntry( aString1 ); 2995 FileStat aStat( aEntry ); 2996 if(!aStat.GetError() && (aStat.GetKind() & FSYS_KIND_FILE)) 2997 { 2998 // OK, only a filename 2999 // cut off path (VB4) 3000 aPath = aEntry.GetName(); 3001 } 3002 else 3003 { 3004 sal_uInt16 nFlags = 0; 3005 if ( (nParams & PARAM_USHORT_1) ) 3006 nDirFlags = nFlags = nNr1; 3007 else 3008 nDirFlags = nFlags = Sb_ATTR_HIDDEN | Sb_ATTR_SYSTEM | Sb_ATTR_DIRECTORY; 3009 3010 // Nur diese Bitmaske ist unter Windows erlaubt 3011 // Sb_ATTR_VOLUME wird getrennt gehandelt 3012 if( nDirFlags & Sb_ATTR_VOLUME ) 3013 aPath = aEntry.GetVolume(); 3014 else 3015 { 3016 // Die richtige Auswahl treffen 3017 sal_uInt16 nMode = FSYS_KIND_FILE; 3018 if( nFlags & Sb_ATTR_DIRECTORY ) 3019 nMode |= FSYS_KIND_DIR; 3020 if( nFlags == Sb_ATTR_DIRECTORY ) 3021 nMode = FSYS_KIND_DIR; 3022 pDir = new Dir( aEntry, (DirEntryKind) nMode ); 3023 nErrorcode = pDir->GetError(); 3024 nDirPos = 0; 3025 } 3026 } 3027 } 3028 3029 if( pDir ) 3030 { 3031 for( ;; ) 3032 { 3033 if( nDirPos >= pDir->Count() ) 3034 { 3035 delete pDir; 3036 pDir = NULL; 3037 aPath.Erase(); 3038 break; 3039 } 3040 DirEntry aNextEntry=(*(pDir))[nDirPos++]; 3041 aPath = aNextEntry.GetName(); //Full(); 3042 break; 3043 } 3044 } 3045 if ( !nErrorcode ) 3046 { 3047 pRet->GenReturn ( RET_Value, nMethodId, aPath ); 3048 } 3049 3050 3051 3052 /* keep old Implementation for now 3053 // neues Verzeichnis einlesen 3054 if ( (nParams & PARAM_STR_1) ) 3055 { 3056 if ( pDir ) 3057 { 3058 delete pDir; 3059 pDir = NULL; 3060 } 3061 DirEntryKind aDirEntryKind = FSYS_KIND_FILE | FSYS_KIND_DIR; 3062 if ( (nParams & PARAM_USHORT_1) && nNr1 ) 3063 { 3064 if ( nNr1 & 16 ) 3065 aDirEntryKind = FSYS_KIND_DIR; 3066 else 3067 ReportError( GEN_RES_STR0( S_SELECTION_BY_ATTRIBUTE_ONLY_DIRECTORIES ) ); 3068 } 3069 3070 DirEntry aEntry( aString1 ); 3071 nErrorcode = aEntry.GetError(); 3072 if ( !nErrorcode ) 3073 { 3074 nDirPos = 0; 3075 FileStat aFS( aEntry ); 3076 if ( !aFS.IsKind( FSYS_KIND_WILD ) && !aFS.IsKind( FSYS_KIND_DIR ) && aEntry.Exists() ) 3077 { // Sonderbehandlung f�r genau einen Eintrag 3078 if ( !aFS.IsKind( FSYS_KIND_DIR ) && ( aDirEntryKind == FSYS_KIND_DIR ) ) 3079 pRet->GenReturn ( RET_Value, nMethodId, String() ); 3080 else 3081 pRet->GenReturn ( RET_Value, nMethodId, (String)(aEntry.GetName()) ); 3082 3083 break; 3084 } 3085 else 3086 { 3087 pDir = new Dir( aEntry, aDirEntryKind ); 3088 nErrorcode = pDir->GetError(); 3089 } 3090 } 3091 } 3092 3093 if ( !pDir ) 3094 pDir = new Dir; 3095 3096 if ( !nErrorcode && ValueOK( nMethodId, GEN_RES_STR0( S_NO_MORE_FILES ), nDirPos+1, pDir->Count()+1 ) ) 3097 { 3098 if ( nDirPos == pDir->Count() ) 3099 pRet->GenReturn ( RET_Value, nMethodId, String() ); 3100 else 3101 pRet->GenReturn ( RET_Value, nMethodId, (String)((*pDir)[ nDirPos ].GetName()) ); 3102 nDirPos++; 3103 }*/ 3104 } 3105 break; 3106 case RC_FileLen: 3107 { 3108 DirEntry aFile( aString1 ); 3109 nErrorcode = aFile.GetError(); 3110 if ( FSYS_ERR_OK == nErrorcode ) 3111 { 3112 FileStat aFS( aFile ); 3113 pRet->GenReturn ( RET_Value, nMethodId, static_cast<comm_ULONG>(aFS.GetSize()) ); //GetSize() sal_uLong != comm_ULONG on 64bit 3114 nErrorcode = aFS.GetError(); 3115 } 3116 } 3117 break; 3118 case RC_FileDateTime: 3119 { 3120 DirEntry aFile( aString1 ); 3121 nErrorcode = aFile.GetError(); 3122 if ( FSYS_ERR_OK == nErrorcode ) 3123 { 3124 FileStat aStat( aFile ); 3125 Time aTime( aStat.TimeModified() ); 3126 Date aDate( aStat.DateModified() ); 3127 nErrorcode = aStat.GetError(); 3128 3129 double fSerial = (double)( aDate - Date(30,12,1899) ); 3130 long nSeconds = aTime.GetHour(); 3131 nSeconds *= 3600; 3132 nSeconds += aTime.GetMin() * 60; 3133 nSeconds += aTime.GetSec(); 3134 double nDays = ((double)nSeconds) / (double)(24.0*3600.0); 3135 fSerial += nDays; 3136 3137 SbxValueRef xValue = new SbxValue( SbxDATE ); 3138 xValue->PutDate( fSerial ); 3139 3140 pRet->GenReturn ( RET_Value, nMethodId, *xValue ); 3141 } 3142 } 3143 break; 3144 } 3145 switch ( nErrorcode ) 3146 { 3147 case FSYS_ERR_OK: 3148 break; 3149 case FSYS_ERR_MISPLACEDCHAR: 3150 { 3151 ReportError( CUniString("MISPLACEDCHAR") ); 3152 } 3153 break; 3154 case FSYS_ERR_INVALIDCHAR: 3155 { 3156 ReportError( CUniString("INVALIDCHAR") ); 3157 } 3158 break; 3159 case FSYS_ERR_NOTEXISTS: 3160 { 3161 ReportError( CUniString("NOTEXISTS") ); 3162 } 3163 break; 3164 case FSYS_ERR_ALREADYEXISTS: 3165 { 3166 ReportError( CUniString("ALREADYEXISTS") ); 3167 } 3168 break; 3169 case FSYS_ERR_NOTADIRECTORY: 3170 { 3171 ReportError( CUniString("NOTADIRECTORY") ); 3172 } 3173 break; 3174 case FSYS_ERR_NOTAFILE: 3175 { 3176 ReportError( CUniString("NOTAFILE") ); 3177 } 3178 break; 3179 case FSYS_ERR_INVALIDDEVICE: 3180 { 3181 ReportError( CUniString("INVALIDDEVICE") ); 3182 } 3183 break; 3184 case FSYS_ERR_ACCESSDENIED: 3185 { 3186 ReportError( CUniString("ACCESSDENIED") ); 3187 } 3188 break; 3189 case FSYS_ERR_LOCKVIOLATION: 3190 { 3191 ReportError( CUniString("LOCKVIOLATION") ); 3192 } 3193 break; 3194 case FSYS_ERR_VOLUMEFULL: 3195 { 3196 ReportError( CUniString("VOLUMEFULL") ); 3197 } 3198 break; 3199 case FSYS_ERR_ISWILDCARD: 3200 { 3201 ReportError( CUniString("ISWILDCARD") ); 3202 } 3203 break; 3204 case FSYS_ERR_NOTSUPPORTED: 3205 { 3206 ReportError( CUniString("NOTSUPPORTED") ); 3207 } 3208 break; 3209 case FSYS_ERR_UNKNOWN: 3210 { 3211 ReportError( CUniString("UNKNOWN") ); 3212 } 3213 break; 3214 default: 3215 { 3216 ReportError( CUniString("Not an FSYS Error") ); 3217 } 3218 } 3219 3220 } 3221 break; 3222 case RC_TypeKeysDelay: 3223 { 3224 if( (nParams & PARAM_BOOL_1) ) 3225 { 3226 bDoTypeKeysDelay = bBool1; 3227 } 3228 else if( nParams & PARAM_USHORT_1 ) 3229 { 3230 nMinTypeKeysDelay = nNr1; 3231 if( nParams & PARAM_USHORT_2 ) 3232 nMaxTypeKeysDelay = nNr2; 3233 else 3234 nMaxTypeKeysDelay = nMinTypeKeysDelay; 3235 } 3236 else 3237 ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); 3238 } 3239 break; 3240 case RC_GetMouseStyle: 3241 { 3242 Pointer aPointer; 3243 // if ( DragManager::GetDragManager() ) 3244 // aPointer = DragManager::GetDragManager()->GetDragPointer(); 3245 // else 3246 { 3247 Window *pActualWin = GetMouseWin(); 3248 if ( pActualWin ) 3249 aPointer = pActualWin->GetPointer(); 3250 else 3251 { 3252 ReportError( GEN_RES_STR1( S_POINTER_OUTSIDE_APPWIN, RcString( nMethodId ) ) ); 3253 aPointer = Pointer( POINTER_NULL ); 3254 } 3255 } 3256 pRet->GenReturn ( RET_Value, nMethodId, (comm_ULONG)aPointer.GetStyle() ); 3257 } 3258 break; 3259 case RC_UnpackStorage: 3260 { 3261 if( (nParams & PARAM_STR_1) ) 3262 { 3263 String aFileName( aString1 ); 3264 DirEntry aDestPath; 3265 if( (nParams & PARAM_STR_2) ) 3266 aDestPath = DirEntry( aString2 ); 3267 else 3268 { 3269 aDestPath = DirEntry( aFileName ); 3270 aDestPath.SetExtension( CUniString( "plaintext" ) ); 3271 } 3272 3273 #if OSL_DEBUG_LEVEL > 1 3274 sal_uInt16 nEntries = Dir( aDestPath, FSYS_KIND_FILE | FSYS_KIND_DIR ).Count(); 3275 (void) nEntries; /* avoid warning about unused parameter */ 3276 #endif 3277 // The Count is only larger than 2 is the path is a directory which is not empty 3278 // the Count of 2 results from the "." and ".." directory 3279 if ( Dir( aDestPath, FSYS_KIND_FILE | FSYS_KIND_DIR ).Count() > 2 ) 3280 DirectLog( S_QAError, GEN_RES_STR1( S_DIRECTORY_NOT_EMPTY, aDestPath.GetFull() ) ); 3281 3282 SotStorageRef xStorage = new SotStorage( aFileName, STREAM_STD_READ ); 3283 if ( xStorage->GetError() ) 3284 ReportError( GEN_RES_STR2(S_UNPACKING_STORAGE_FAILED, aFileName, aDestPath.GetFull()) ); 3285 else 3286 UnpackStorage( xStorage, aDestPath ); 3287 } 3288 else 3289 ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); 3290 } 3291 break; 3292 case RC_CloseSysDialog: 3293 case RC_ExistsSysDialog: 3294 { 3295 if( (nParams & PARAM_USHORT_1) ) 3296 { 3297 Reference < ::com::sun::star::util::XCancellable > xPicker; 3298 switch( nNr1 ) 3299 { 3300 case CONST_FilePicker: 3301 { 3302 xPicker.set( Reference < ::com::sun::star::util::XCancellable >( svt::GetTopMostFilePicker(), UNO_QUERY ) ); 3303 } 3304 break; 3305 case CONST_FolderPicker: 3306 { 3307 xPicker.set( Reference < ::com::sun::star::util::XCancellable >( svt::GetTopMostFolderPicker(), UNO_QUERY ) ); 3308 } 3309 break; 3310 default: 3311 ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); 3312 } 3313 switch( nMethodId ) 3314 { 3315 case RC_CloseSysDialog: 3316 { 3317 if ( xPicker.is() ) 3318 xPicker->cancel(); 3319 else 3320 ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); 3321 } 3322 break; 3323 case RC_ExistsSysDialog: 3324 { 3325 pRet->GenReturn ( RET_Value, nMethodId, (comm_BOOL)xPicker.is() ); 3326 } 3327 break; 3328 default: 3329 ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); 3330 } 3331 } 3332 else 3333 ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); 3334 } 3335 break; 3336 case RC_SAXCheckWellformed: 3337 case RC_SAXReadFile: 3338 3339 case RC_SAXGetNodeType: 3340 case RC_SAXGetAttributeCount: 3341 case RC_SAXGetAttributeName: 3342 case RC_SAXGetAttributeValue: 3343 case RC_SAXGetChildCount: 3344 case RC_SAXGetElementName: 3345 case RC_SAXGetChars: 3346 3347 case RC_SAXSeekElement: 3348 case RC_SAXHasElement: 3349 case RC_SAXGetElementPath: 3350 3351 case RC_SAXRelease: 3352 { 3353 HandleSAXParser(); 3354 } 3355 break; 3356 case RC_RecordMacro: 3357 { 3358 if ( ! (nParams & PARAM_BOOL_1) ) 3359 bBool1 = sal_True; 3360 3361 MacroRecorder::GetMacroRecorder()->SetActionRecord( bBool1 ); 3362 } 3363 break; 3364 case RC_GetDocumentCount : 3365 { 3366 pRet->GenReturn ( RET_Value, nMethodId, (comm_USHORT)GetDocWinCount() ); 3367 } 3368 break; 3369 case RC_ActivateDocument : 3370 { 3371 if( nParams & PARAM_USHORT_1 ) 3372 { 3373 if ( ValueOK( rtl::OString(), RcString( nMethodId ), nNr1, GetDocWinCount() ) ) 3374 { 3375 Window* pWin = GetDocWin( nNr1-1 ); 3376 if ( pWin ) 3377 { 3378 pWin->ToTop(); 3379 pWin->GrabFocus(); 3380 } 3381 } 3382 } 3383 else 3384 ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); 3385 } 3386 break; 3387 case RC_GetSystemLanguage : 3388 { 3389 pRet->GenReturn ( RET_Value, nMethodId, (comm_USHORT)Application::GetSettings().GetLanguage() ); 3390 } 3391 break; 3392 case RC_CatchGPF : 3393 { 3394 if( (nParams & PARAM_BOOL_1) ) 3395 bCatchGPF = bBool1; 3396 else 3397 bCatchGPF = sal_True; 3398 } 3399 break; 3400 case RC_IsProduct : 3401 { 3402 sal_Bool bIsProduct; 3403 #ifdef DBG_UTIL 3404 bIsProduct = sal_False; 3405 #else 3406 bIsProduct = sal_True; 3407 #endif 3408 pRet->GenReturn ( RET_Value, nMethodId, (sal_Bool)bIsProduct ); 3409 } 3410 break; 3411 case RC_UsePostEvents : 3412 { 3413 if( (nParams & PARAM_BOOL_1) ) 3414 bUsePostEvents = bBool1; 3415 else 3416 bUsePostEvents = sal_True; 3417 } 3418 break; 3419 default: 3420 ReportError( GEN_RES_STR1( S_UNKNOWN_COMMAND, RcString( nMethodId ) ) ); 3421 } 3422 SendProfile( RcString(nMethodId) ); 3423 delete this; 3424 return sal_True; 3425 } 3426 3427 3428 sal_Bool StatementCommand::UnpackStorage( SotStorageRef xStorage, DirEntry &aBaseDir ) 3429 { 3430 SvStorageInfoList aList; 3431 xStorage->FillInfoList( &aList ); 3432 3433 for( sal_uInt16 i = 0; i < aList.Count(); i++ ) 3434 { 3435 SvStorageInfo& rInfo = aList.GetObject( i ); 3436 String aName = rInfo.GetName(); 3437 DirEntry aPath ( aBaseDir ); 3438 aPath += DirEntry( aName ); 3439 sal_Bool bIsStorage = xStorage->IsStorage( aName ); 3440 if ( bIsStorage ) 3441 { 3442 SotStorageRef xSubStorage = xStorage->OpenSotStorage( aName, STREAM_STD_READ ); 3443 if ( xSubStorage->GetError() ) 3444 { 3445 ReportError( GEN_RES_STR2(S_UNPACKING_STORAGE_FAILED, aName, aPath.GetFull()) ); 3446 return sal_False; 3447 } 3448 UnpackStorage( xSubStorage, aPath ); 3449 } 3450 else 3451 { 3452 if ( !aPath.MakeDir( sal_True ) ) 3453 { 3454 ReportError( GEN_RES_STR1(S_CANNOT_CREATE_DIRECTORY, aPath.GetFull()) ); 3455 return sal_False; 3456 } 3457 SotStorageStreamRef xStream = xStorage->OpenSotStream( aName, STREAM_STD_READ ); 3458 SvFileStream aDestination( aPath.GetFull(), STREAM_STD_READWRITE | STREAM_TRUNC ); 3459 (*xStream) >> aDestination; 3460 if ( aDestination.GetError() != ERRCODE_NONE ) 3461 { 3462 ReportError( GEN_RES_STR2(S_UNPACKING_STORAGE_FAILED, aName, aPath.GetFull()) ); 3463 return sal_False; 3464 } 3465 aDestination.Close(); 3466 } 3467 } 3468 return sal_True; 3469 } 3470 3471 3472 // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 3473 3474 StatementControl::StatementControl( SCmdStream *pCmdIn, sal_uInt16 nControlIdType ) 3475 : StatementList() 3476 , nNr1( 0 ) 3477 , nNr2( 0 ) 3478 , nNr3( 0 ) 3479 , nNr4( 0 ) 3480 , nLNr1( 0 ) 3481 , aString1() 3482 , aString2() 3483 , bBool1(sal_False) 3484 , bBool2(sal_False) 3485 { 3486 QueStatement( NULL ); 3487 //HELPID BACKWARD (SIControl is no longer needed) 3488 if ( nControlIdType == SIControl ) 3489 { 3490 comm_ULONG nId; 3491 pCmdIn->Read( nId ); 3492 aUId = rtl::OString( nId ); 3493 if ( nId == 0 ) 3494 aUId = UID_ACTIVE; 3495 else 3496 ReportError( aUId, GEN_RES_STR1c( S_INTERNAL_ERROR, "using numeric HelpID from old Testtool" ) ); 3497 } 3498 else if ( nControlIdType == SIStringControl ) 3499 { 3500 String aId; 3501 pCmdIn->Read( aId ); 3502 aUId = Str2Id( aId ); 3503 } 3504 else 3505 { 3506 DBG_ERROR( "Wrong ControlType" ); 3507 } 3508 3509 pCmdIn->Read( nMethodId ); 3510 pCmdIn->Read( nParams ); 3511 3512 if( nParams & PARAM_USHORT_1 ) pCmdIn->Read( nNr1 ); 3513 if( nParams & PARAM_USHORT_2 ) pCmdIn->Read( nNr2 ); 3514 if( nParams & PARAM_USHORT_3 ) pCmdIn->Read( nNr3 ); 3515 if( nParams & PARAM_USHORT_4 ) pCmdIn->Read( nNr4 ); 3516 if( nParams & PARAM_ULONG_1 ) pCmdIn->Read( nLNr1 ); 3517 if( nParams & PARAM_STR_1 ) pCmdIn->Read( aString1 ); 3518 if( nParams & PARAM_STR_2 ) pCmdIn->Read( aString2 ); 3519 if( nParams & PARAM_BOOL_1 ) pCmdIn->Read( bBool1 ); 3520 if( nParams & PARAM_BOOL_2 ) pCmdIn->Read( bBool2 ); 3521 3522 #if OSL_DEBUG_LEVEL > 1 3523 m_pDbgWin->AddText( "Reading Control: UId: " ); 3524 m_pDbgWin->AddText( Id2Str( aUId ) ); 3525 m_pDbgWin->AddText( " Methode: " ); 3526 m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); 3527 m_pDbgWin->AddText( " Params:" ); 3528 if( nParams & PARAM_USHORT_1 ) {m_pDbgWin->AddText( " n1:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr1 ) );} 3529 if( nParams & PARAM_USHORT_2 ) {m_pDbgWin->AddText( " n2:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr2 ) );} 3530 if( nParams & PARAM_USHORT_3 ) {m_pDbgWin->AddText( " n3:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr3 ) );} 3531 if( nParams & PARAM_USHORT_4 ) {m_pDbgWin->AddText( " n4:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr4 ) );} 3532 if( nParams & PARAM_ULONG_1 ) {m_pDbgWin->AddText( " nl1:" );m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) );} 3533 if( nParams & PARAM_STR_1 ) {m_pDbgWin->AddText( " s1:" );m_pDbgWin->AddText( aString1 );} 3534 if( nParams & PARAM_STR_2 ) {m_pDbgWin->AddText( " s2:" );m_pDbgWin->AddText( aString2 );} 3535 /* if( nParams & PARAM_BOOL_1 ) pCmdIn->Read( bBool1 ); 3536 if( nParams & PARAM_BOOL_2 ) pCmdIn->Read( bBool2 );*/ 3537 m_pDbgWin->AddText( "\n" ); 3538 #endif 3539 } 3540 3541 sal_Bool IsDialog(Window *pWin) 3542 { // Alles was von SystemWindow abgeleitet ist 3543 if ( !pWin ) 3544 return sal_False; 3545 3546 switch (pWin->GetType()) 3547 { 3548 case WINDOW_FLOATINGWINDOW: 3549 case WINDOW_DOCKINGWINDOW: 3550 case WINDOW_MODELESSDIALOG: 3551 case WINDOW_DIALOG: 3552 case WINDOW_MODALDIALOG: 3553 case WINDOW_WORKWINDOW: 3554 case WINDOW_TABDIALOG: 3555 3556 case WINDOW_MESSBOX: 3557 case WINDOW_INFOBOX: 3558 case WINDOW_WARNINGBOX: 3559 case WINDOW_ERRORBOX: 3560 case WINDOW_QUERYBOX: 3561 case WINDOW_BUTTONDIALOG: 3562 case WINDOW_FILEDIALOG: 3563 case WINDOW_PRINTDIALOG: 3564 case WINDOW_PRINTERSETUPDIALOG: 3565 3566 // ab hier nicht ansprechbar (da nicht implementiert) 3567 case WINDOW_SYSWINDOW: 3568 case WINDOW_SYSTEMDIALOG: 3569 case WINDOW_COLORDIALOG: 3570 case WINDOW_FONTDIALOG: 3571 case WINDOW_PATHDIALOG: 3572 3573 3574 return sal_True; 3575 // break; 3576 default: 3577 return sal_False; 3578 // break; 3579 } 3580 } 3581 3582 3583 sal_Bool IsAccessable(Window *pWin) 3584 { 3585 if ( pWin == NULL ) 3586 return sal_False; 3587 3588 return pWin->IsEnabled() && pWin->IsInputEnabled(); 3589 } 3590 3591 3592 3593 // neue Hilfsfunktion 3594 static Window*ImpGetButton( Window *pBase, WinBits nMask, WinBits nWinBits ) 3595 { 3596 sal_uInt16 n = pBase->GetChildCount(); 3597 for( sal_uInt16 i = 0 ; i < n; i++ ) { 3598 Window *pChild = pBase->GetChild(i); 3599 if( pChild->GetType() == WINDOW_OKBUTTON 3600 || pChild->GetType() == WINDOW_CANCELBUTTON 3601 || pChild->GetType() == WINDOW_HELPBUTTON 3602 || pChild->GetType() == WINDOW_PUSHBUTTON ) 3603 if( !nMask || ( pChild->GetStyle() & nMask ) == nWinBits ) 3604 return pChild; 3605 } 3606 return NULL; 3607 } 3608 3609 sal_Bool StatementControl::ControlOK( Window *pControl, const sal_Char* cBezeichnung ) 3610 { 3611 if ( pControl && ( ( ( IsAccessable(pControl) || (nMethodId & M_WITH_RETURN) ) && 3612 pControl->IsVisible() ) || 3613 aUId.equals( UID_ACTIVE ) ) ) 3614 return sal_True; 3615 else 3616 { 3617 UniString aBezeichnung( cBezeichnung, RTL_TEXTENCODING_ASCII_US ); 3618 if ( aBezeichnung.Len() > 0 ) 3619 { 3620 if (!pControl) 3621 ReportError( aUId, GEN_RES_STR1( S_WIN_NOT_FOUND, aBezeichnung ) ); 3622 else if ( !pControl->IsVisible() ) 3623 ReportError( aUId, GEN_RES_STR1( S_WIN_INVISIBLE, aBezeichnung ) ); 3624 else 3625 ReportError( aUId, GEN_RES_STR1( S_WIN_DISABLED, aBezeichnung ) ); 3626 } 3627 #if OSL_DEBUG_LEVEL > 1 3628 m_pDbgWin->AddText( aBezeichnung.AppendAscii(" NotFound or Disabled or Invisible") ); 3629 #endif 3630 3631 return sal_False; 3632 } 3633 } 3634 3635 3636 sal_Bool StatementList::ValueOK( rtl::OString aId, String aBezeichnung, sal_uLong nValue, sal_uLong nMax ) 3637 { 3638 3639 if ( nMax < nValue ) 3640 { 3641 if ( aBezeichnung.Len() > 0 ) 3642 ReportError( aId, GEN_RES_STR3( S_NUMBER_TOO_BIG, aBezeichnung, UniString::CreateFromInt32( nValue ), UniString::CreateFromInt32( nMax ) ) ); 3643 return sal_False; 3644 } 3645 if ( nValue < 1 ) 3646 { 3647 if ( aBezeichnung.Len() > 0 ) 3648 ReportError( aId, GEN_RES_STR3c3( S_NUMBER_TOO_SMALL, aBezeichnung, UniString::CreateFromInt32( nValue ), "1" ) ); 3649 return sal_False; 3650 } 3651 return sal_True; 3652 } 3653 3654 sal_uInt16 StatementList::GetCurrentMenues( PopupMenu *&pPopup, MenuBar *&pMenuBar, Menu *&pMenu ) 3655 { 3656 if ( WinPtrValid( pMenuWindow ) ) 3657 pMenuBar = pMenuWindow->GetMenuBar(); 3658 3659 if ( pMenuBar ) // use MenuBar as base 3660 pMenu = pMenuBar; 3661 else // use contextmenu as base 3662 { 3663 pMenu = PopupMenu::GetActivePopupMenu(); 3664 pPopup = PopupMenu::GetActivePopupMenu(); 3665 } 3666 3667 if ( !pMenu ) 3668 return 1; 3669 3670 if ( aSubMenuId1 ) 3671 { 3672 pPopup = pMenu->GetPopupMenu( aSubMenuId1 ); 3673 pMenu = pPopup; 3674 } 3675 3676 if ( pMenu && aSubMenuId2 ) 3677 { 3678 pPopup = pMenu->GetPopupMenu( aSubMenuId2 ); 3679 pMenu = pPopup; 3680 } 3681 3682 if ( pMenu && aSubMenuId3 ) 3683 { 3684 pPopup = pMenu->GetPopupMenu( aSubMenuId3 ); 3685 pMenu = pPopup; 3686 } 3687 3688 return 0; 3689 } 3690 3691 void StatementControl::AnimateMouse( Window *pControl, TTHotSpots aWohin ) 3692 { 3693 Point aZiel; 3694 3695 switch (aWohin) 3696 { 3697 case MitteLinks: 3698 { 3699 long nHeight = pControl->GetSizePixel().Height(); 3700 aZiel.X() += 5; 3701 aZiel.Y() += nHeight / 2; 3702 } 3703 break; 3704 case Mitte: 3705 { 3706 Size aSize = pControl->GetOutputSizePixel(); 3707 aZiel.Move( aSize.Width() / 2, aSize.Height() / 2 ); 3708 } 3709 break; 3710 case MitteOben: 3711 { 3712 long nWidth = pControl->GetSizePixel().Width(); 3713 aZiel.X() += nWidth / 2; 3714 aZiel.Y() += 5; 3715 } 3716 break; 3717 } 3718 AnimateMouse( pControl, aZiel ); 3719 } 3720 3721 3722 void StatementControl::AnimateMouse( Window *pControl, Point aWohin ) 3723 { 3724 Point aAkt = pControl->GetPointerPosPixel(); 3725 Point aZiel = aWohin; 3726 3727 long nSteps; 3728 Point aDiff = aAkt - aZiel; 3729 3730 if ( Abs(aDiff.X()) < Abs(aDiff.Y()) ) 3731 nSteps = Abs(aDiff.Y()) / 5; 3732 else 3733 nSteps = Abs(aDiff.X()) / 5; 3734 if ( nSteps == 0 ) 3735 return; 3736 3737 aDiff *= 1000; 3738 aDiff /= nSteps; 3739 3740 StatementList::bExecuting = sal_True; // Bah ist das ein ekliger Hack 3741 // Das verhindert, da� schon der n�chste Befehl ausgef�hrt wird. 3742 3743 for ( ; nSteps ; nSteps-- ) 3744 { 3745 if ( Abs((aAkt - pControl->GetPointerPosPixel()).X()) > 5 || 3746 Abs((aAkt - pControl->GetPointerPosPixel()).Y()) > 5 ) 3747 nSteps = 1; 3748 aAkt = aZiel + aDiff * nSteps / 1000; 3749 pControl->SetPointerPosPixel(aAkt); 3750 SafeReschedule(); 3751 } 3752 pControl->SetPointerPosPixel(aZiel); 3753 StatementList::bExecuting = sal_False; // Bah ist das ein ekliger Hack 3754 } 3755 3756 3757 sal_Bool StatementControl::MaybeDoTypeKeysDelay( Window *pTestWindow ) 3758 { 3759 if ( bDoTypeKeysDelay ) 3760 { 3761 sal_uLong nTimeWait = nMinTypeKeysDelay; 3762 if ( nMaxTypeKeysDelay != nMinTypeKeysDelay ) 3763 nTimeWait += Time::GetSystemTicks() % ( nMaxTypeKeysDelay - nMinTypeKeysDelay ); 3764 Timer aTimer; 3765 aTimer.SetTimeout( nTimeWait ); 3766 aTimer.Start(); 3767 StatementList::bExecuting = sal_True; // Bah ist das ein ekliger Hack 3768 // Das verhindert, da� schon der n�chste Befehl ausgef�hrt wird. 3769 while ( aTimer.IsActive() ) 3770 { 3771 SafeReschedule( sal_True ); 3772 } 3773 StatementList::bExecuting = sal_False; // Bah ist das ein ekliger Hack 3774 if ( !WinPtrValid(pTestWindow ) ) 3775 { 3776 ReportError( aUId, GEN_RES_STR1( S_WINDOW_DISAPPEARED, MethodString( nMethodId ) ) ); 3777 return sal_False; 3778 } 3779 } 3780 return sal_True; 3781 } 3782 3783 sal_Bool StatementControl::HandleVisibleControls( Window *pControl ) 3784 { 3785 if( pControl ) // Also auch bei Disabled nicht jedoch bei Invisible 3786 { 3787 switch( nMethodId ) 3788 { 3789 case M_IsEnabled: 3790 pRet->GenReturn ( RET_Value, aUId, IsAccessable(pControl) ); 3791 break; 3792 case M_IsVisible: 3793 pRet->GenReturn ( RET_Value, aUId, pControl->IsVisible() ); 3794 break; 3795 case M_GetPosX: 3796 if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) 3797 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows 3798 if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) 3799 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge 3800 if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) 3801 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border 3802 if ( (nParams & PARAM_BOOL_1) && bBool1 ) 3803 pControl = pControl->GetWindow( WINDOW_OVERLAP ); 3804 3805 if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_SPLITWINDOW ) 3806 { 3807 Point aPos = pControl->GetPosPixel(); 3808 aPos = pControl->GET_REAL_PARENT()->OutputToScreenPixel( aPos ); 3809 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)aPos.X() ); 3810 } 3811 else 3812 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pControl->GetPosPixel().X() ); 3813 break; 3814 case M_GetPosY: 3815 if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) 3816 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows 3817 if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) 3818 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge 3819 if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) 3820 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border 3821 if ( (nParams & PARAM_BOOL_1) && bBool1 ) 3822 pControl = pControl->GetWindow( WINDOW_OVERLAP ); 3823 3824 if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_SPLITWINDOW ) 3825 { 3826 Point aPos = pControl->GetPosPixel(); 3827 aPos = pControl->GET_REAL_PARENT()->OutputToScreenPixel( aPos ); 3828 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)aPos.Y() ); 3829 } 3830 else 3831 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pControl->GetPosPixel().Y() ); 3832 break; 3833 case M_GetSizeX: 3834 if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) 3835 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows 3836 if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) 3837 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge 3838 if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) 3839 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border 3840 if ( (nParams & PARAM_BOOL_1) && bBool1 ) 3841 pControl = pControl->GetWindow( WINDOW_OVERLAP ); 3842 3843 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pControl->GetSizePixel().Width() ); 3844 break; 3845 case M_GetSizeY: 3846 if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) 3847 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows 3848 if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) 3849 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge 3850 if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) 3851 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border 3852 if ( (nParams & PARAM_BOOL_1) && bBool1 ) 3853 pControl = pControl->GetWindow( WINDOW_OVERLAP ); 3854 3855 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pControl->GetSizePixel().Height() ); 3856 break; 3857 case M_SnapShot: 3858 { 3859 if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) 3860 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows 3861 if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) 3862 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge 3863 if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) 3864 pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border 3865 if ( (nParams & PARAM_BOOL_1) && bBool1 ) 3866 pControl = pControl->GetWindow( WINDOW_OVERLAP ); 3867 3868 Bitmap aBmp = pControl->SnapShot(); 3869 if ( pControl->GetType() == WINDOW_WORKWINDOW ) 3870 { 3871 Point aStart = pControl->GetPosPixel(); 3872 if ( !(nParams & PARAM_USHORT_4) ) 3873 { 3874 nParams |= PARAM_USHORT_1; 3875 nParams |= PARAM_USHORT_2; 3876 nParams |= PARAM_USHORT_3; 3877 nParams |= PARAM_USHORT_4; 3878 nNr1 = (sal_uInt16)-aStart.X(); 3879 nNr2 = (sal_uInt16)-aStart.Y(); 3880 nNr3 = (sal_uInt16)pControl->GetSizePixel().Width() + 2*(sal_uInt16)aStart.X(); 3881 nNr4 = (sal_uInt16)pControl->GetSizePixel().Height() + 2*(sal_uInt16)aStart.Y(); 3882 } 3883 nNr1 = std::max((sal_uInt16)-aStart.X(),nNr1); 3884 nNr2 = std::max((sal_uInt16)-aStart.Y(),nNr2); 3885 nNr3 = std::min((sal_uInt16)(pControl->GetSizePixel().Width() + 2*(sal_uInt16)aStart.X()),nNr3); 3886 nNr4 = std::min((sal_uInt16)(pControl->GetSizePixel().Height() + 2*(sal_uInt16)aStart.Y()),nNr4); 3887 } 3888 if( nParams & PARAM_USHORT_4 ) 3889 { // Zuschneiden 3890 Point aPt(-nNr1,-nNr2); 3891 Size aSz(nNr3,nNr4); 3892 VirtualDevice aVDev( *pControl ); 3893 3894 aVDev.SetOutputSizePixel( aSz ); 3895 aVDev.DrawBitmap( aPt, aBmp ); 3896 aBmp = aVDev.GetBitmap( Point(), aSz ); 3897 } 3898 3899 SvFileStream fOut; 3900 fOut.Open(aString1,STREAM_STD_WRITE); 3901 WriteDIB(aBmp, fOut, true, true); 3902 if ( fOut.GetError() ) 3903 ReportError( aUId, GEN_RES_STR1( S_ERROR_SAVING_IMAGE, UniString::CreateFromInt32( fOut.GetError() ) ) ); 3904 fOut.Close(); 3905 } 3906 break; 3907 case M_GetFixedTextCount: 3908 { 3909 pRet->GenReturn ( RET_Value, aUId, CountWinByRT( pControl, WINDOW_FIXEDTEXT, sal_True ) ); 3910 } 3911 break; 3912 case M_GetFixedText: 3913 { 3914 if( ( nParams & PARAM_USHORT_1 ) == 0 ) 3915 nNr1 = 1; 3916 3917 FixedText* pFixedText = (FixedText*)GetWinByRT( pControl, WINDOW_FIXEDTEXT, sal_True, nNr1-1 ); 3918 if ( pFixedText ) 3919 pRet->GenReturn ( RET_Value, aUId, pFixedText->GetText() ); 3920 else 3921 ValueOK(aUId, MethodString( nMethodId ),nNr1,CountWinByRT( pControl, WINDOW_FIXEDTEXT, sal_True ) ); 3922 } 3923 break; 3924 case M_HasFocus: 3925 { 3926 pRet->GenReturn ( RET_Value, aUId, pControl->HasFocus() ); 3927 break; 3928 } 3929 case M_GetScreenRectangle: 3930 { 3931 Rectangle aRect = bBool1 ? pControl->GetClientWindowExtentsRelative(NULL) : pControl->GetWindowExtentsRelative( NULL ); 3932 pRet->GenReturn ( RET_Value, aUId, 3933 UniString::CreateFromInt32(aRect.Left()). 3934 AppendAscii(",").Append(UniString::CreateFromInt32(aRect.Top())). 3935 AppendAscii(",").Append(UniString::CreateFromInt32(aRect.GetWidth())). 3936 AppendAscii(",").Append(UniString::CreateFromInt32(aRect.GetHeight())) 3937 ); 3938 } 3939 break; 3940 case M_GetHelpText: 3941 { 3942 pRet->GenReturn ( RET_Value, aUId, pControl->GetHelpText()); 3943 } 3944 break; 3945 case M_GetQuickHelpText: 3946 { 3947 pRet->GenReturn ( RET_Value, aUId,pControl->GetQuickHelpText()); 3948 } 3949 break; 3950 default: 3951 return sal_False; 3952 } 3953 SendProfile( UIdString( aUId ).Append('.').Append( MethodString( nMethodId ) ) ); 3954 return sal_True; 3955 } 3956 return sal_False; 3957 } 3958 3959 sal_Bool StatementControl::HandleCommonMethods( Window *pControl ) 3960 { 3961 switch( nMethodId ) // Diese k�nnen an jedem Window ausgef�hrt werden 3962 { 3963 case M_Exists: // Oben schon Behandelt. Unterdr�ckt hier nur Fehler 3964 case M_NotExists: 3965 case M_IsEnabled: 3966 case M_IsVisible: 3967 case M_SnapShot: 3968 break; 3969 case M_Caption : 3970 { 3971 if ( pControl->GetText().Len() == 0 && IsDocFrame( pControl->GetWindow( WINDOW_FRAME ) ) ) 3972 pRet->GenReturn ( RET_Value, aUId, pControl->GetWindow( WINDOW_FRAME )->GetText()); 3973 else 3974 pRet->GenReturn ( RET_Value, aUId, pControl->GetText()); 3975 } 3976 break; 3977 case M_GetRT: 3978 { 3979 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pControl->GetType() ); 3980 } 3981 break; 3982 case M_TypeKeys: 3983 { 3984 if( !(nParams & PARAM_USHORT_1) ) // Anzahl wiederholungen 3985 nNr1 = 1; 3986 if( !(nParams & PARAM_BOOL_1) ) // Follow Focus 3987 bBool1 = sal_False; // so bleibt das bisherige Verhalten 3988 3989 if ( !bBool1 ) // Altes Verhalten 3990 pControl->GrabFocus(); 3991 else // If focus is not inside given control we grab it once. 3992 { 3993 Window *pFocus = GetpApp()->GetFocusWindow(); 3994 if ( !pFocus || !pControl->IsWindowOrChild( pFocus, sal_True ) ) 3995 pControl->GrabFocus(); 3996 } 3997 3998 3999 // maybe this can get removed since we are using GetPreferredKeyInputWindow() 4000 if ( pControl->GetType() == WINDOW_COMBOBOX ) 4001 { // Bei COMBOBOX an das Edit direkt liefern 4002 Window *pTemp = NULL; 4003 for ( sal_uInt16 i = 0 ; i < pControl->GetChildCount() && !pTemp ; i++ ) 4004 if ( pControl->GetChild( i )->GetType() == WINDOW_EDIT ) 4005 pTemp = pControl->GetChild( i ); 4006 if ( pTemp ) 4007 pControl = pTemp; 4008 } 4009 4010 Window *pDeliverHere = pControl; 4011 for (int j = 0; j < nNr1; j++) 4012 for (xub_StrLen i = 0; i < aString1.Len(); i++) 4013 { 4014 if ( StatementList::bUsePostEvents ) 4015 { // grab focus every time 4016 Window *pFocus = GetpApp()->GetFocusWindow(); 4017 if ( !pFocus || !pControl->IsWindowOrChild( pFocus, sal_True ) ) 4018 pControl->GrabFocus(); 4019 } 4020 if ( bBool1 ) // Jedesmal das FocusWindow finden 4021 { 4022 Window *pFocus = GetpApp()->GetFocusWindow(); 4023 if ( pFocus && pControl->IsWindowOrChild( pFocus, sal_True ) ) 4024 pDeliverHere = pFocus; 4025 else // sonst fallback auf das Basisfenster 4026 pDeliverHere = pControl; 4027 } 4028 pDeliverHere = pDeliverHere->GetPreferredKeyInputWindow(); 4029 KeyEvent aEvent; 4030 if ( ((sal_uInt16)aString1.GetChar(i)) <= 7 ) 4031 { 4032 sal_uInt16 nVal = 0; 4033 switch (aString1.GetChar(i)) 4034 { 4035 case 1: nVal = aString1.GetChar(i+1) + (aString1.GetChar(i+2) << 8); 4036 i += 2; 4037 break; 4038 case 3: nVal = (aString1.GetChar(i+1) << 8); 4039 i++; 4040 break; 4041 case 5: nVal = aString1.GetChar(i+1); 4042 i++; 4043 break; 4044 case 7: nVal = 0; 4045 break; 4046 } 4047 // #105672# 4048 // find out the keycode 4049 sal_uInt16 nKeygroup = nVal & KEYGROUP_TYPE; 4050 sal_uInt16 nKeyCode = nVal & KEY_CODE; 4051 sal_Unicode aCh; 4052 switch (nKeygroup) 4053 { 4054 case KEYGROUP_NUM: 4055 aCh = nKeyCode - KEY_0 + '0'; 4056 break; 4057 case KEYGROUP_ALPHA: 4058 aCh = nKeyCode - KEY_A; 4059 if ( nVal & KEY_MOD1 ) 4060 {} 4061 else if ( nVal & KEY_SHIFT ) 4062 aCh += 'A'; 4063 else 4064 aCh += 'a'; 4065 break; 4066 case KEYGROUP_MISC: 4067 { // CR ESC TAB BACK 4068 ByteString aPrintableMisc("\x0d\x1b\x09\x08 **+-*/.,<>=",16); 4069 if ( nKeyCode-KEY_RETURN < aPrintableMisc.Len() 4070 && nKeyCode != KEY_INSERT && nKeyCode != KEY_DELETE ) 4071 aCh = aPrintableMisc.GetChar( nKeyCode-KEY_RETURN ); 4072 else 4073 aCh = 0; 4074 } 4075 break; 4076 case KEYGROUP_CURSOR: 4077 case KEYGROUP_FKEYS: 4078 default: 4079 aCh = 0; 4080 } 4081 aEvent = KeyEvent(aCh,KeyCode(nVal & 0xFFF,nVal & 0xF000)); 4082 } 4083 else 4084 { 4085 // CR ESC TAB BACK 4086 String aPrintableMisc = CUniString("\x0d\x1b\x09\x08 xx+-*/.,<>="); 4087 sal_Unicode aCh = aString1.GetChar(i); 4088 if ( aCh >= 'a' && aCh <= 'z' ) 4089 aEvent = KeyEvent(aCh, KeyCode(KEYGROUP_ALPHA + aCh-'a', 0)); 4090 else if ( aCh >= 'A' && aCh <= 'Z' ) 4091 aEvent = KeyEvent(aCh, KeyCode(KEYGROUP_ALPHA + aCh-'a', KEY_SHIFT)); 4092 else if ( aCh >= '0' && aCh <= '9' ) 4093 aEvent = KeyEvent(aCh, KeyCode(KEYGROUP_NUM + aCh-'0', 0)); 4094 else if ( aPrintableMisc.Search(aCh) != STRING_NOTFOUND ) 4095 aEvent = KeyEvent(aCh, KeyCode(KEYGROUP_MISC + (sal_uInt16)aPrintableMisc.Search(aCh), 0)); 4096 else // Sollte eigentlich nicht auftreten 4097 aEvent = KeyEvent(aCh, KeyCode()); 4098 } 4099 ImplKeyInput( pDeliverHere, aEvent ); 4100 if ( !MaybeDoTypeKeysDelay( pControl ) ) 4101 break; 4102 else 4103 SafeReschedule();SafeReschedule();SafeReschedule(); 4104 } 4105 } 4106 break; 4107 4108 #define CalcMouseButton\ 4109 sal_uInt16 nButton = MOUSE_LEFT;\ 4110 if ( (nParams & PARAM_USHORT_3) )\ 4111 {\ 4112 switch ( nNr3 )\ 4113 {\ 4114 case 1: nButton = MOUSE_LEFT; break;\ 4115 case 2: nButton = MOUSE_MIDDLE; break;\ 4116 case 3: nButton = MOUSE_RIGHT; break;\ 4117 }\ 4118 }\ 4119 4120 case M_MouseDown: 4121 { 4122 CalcMouseButton; 4123 Size aS = pControl->GetOutputSizePixel(); 4124 Point aPos = Point(aS.Width() * nNr1 / 100,aS.Height() * nNr2 / 100); 4125 Window *pActualWin = pControl->FindWindow( aPos ); 4126 // AnimateMouse( pControl, aPos ); 4127 4128 if ( pActualWin ) 4129 aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); 4130 // aPos = pActualWin->ScreenToOutputPixel( pControl->OutputToScreenPixel ( aPos ) ); 4131 else 4132 pActualWin = pControl; 4133 4134 AnimateMouse( pActualWin, aPos ); 4135 pActualWin->GrabFocus(); 4136 MouseEvent aMEvnt(aPos,1,MOUSE_SIMPLECLICK|MOUSE_SELECT,nButton); 4137 ImplMouseButtonDown( pActualWin, aMEvnt ); 4138 } 4139 break; 4140 case M_MouseUp: 4141 { 4142 CalcMouseButton; 4143 Size aS = pControl->GetOutputSizePixel(); 4144 Point aPos = Point(aS.Width() * nNr1 / 100,aS.Height() * nNr2 / 100); 4145 Window *pActualWin = pControl->FindWindow( aPos ); 4146 4147 if ( pActualWin ) 4148 aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); 4149 // aPos = pActualWin->ScreenToOutputPixel( pControl->OutputToScreenPixel ( aPos ) ); 4150 else 4151 pActualWin = pControl; 4152 4153 AnimateMouse( pActualWin, aPos ); 4154 // pActualWin->GrabFocus(); 4155 MouseEvent aMEvt( aPos, 1, MOUSE_SIMPLECLICK|MOUSE_SELECT, nButton ); 4156 ImplMouseButtonUp( pActualWin, aMEvt ); 4157 } 4158 break; 4159 case M_MouseMove: 4160 { 4161 CalcMouseButton; 4162 Size aS = pControl->GetOutputSizePixel(); 4163 Point aPos = Point(aS.Width() * nNr1 / 100,aS.Height() * nNr2 / 100); 4164 Window *pActualWin = pControl->FindWindow( aPos ); 4165 4166 if ( pActualWin ) 4167 { 4168 aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); 4169 // aPos = pActualWin->ScreenToOutputPixel( pControl->OutputToScreenPixel ( aPos ) ); 4170 } 4171 else 4172 pActualWin = pControl; 4173 4174 AnimateMouse( pActualWin, aPos ); 4175 // pActualWin->GrabFocus(); 4176 MouseEvent aMEvt( aPos, 0, MOUSE_SIMPLEMOVE|MOUSE_DRAGMOVE, nButton ); 4177 ImplMouseMove( pActualWin, aMEvt ); 4178 } 4179 break; 4180 case M_MouseDoubleClick: 4181 { 4182 CalcMouseButton; 4183 Size aS = pControl->GetOutputSizePixel(); 4184 Point aPos = Point(aS.Width() * nNr1 / 100,aS.Height() * nNr2 / 100); 4185 Window *pActualWin = pControl->FindWindow( aPos ); 4186 4187 if ( pActualWin ) 4188 { 4189 aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); 4190 // aPos = pActualWin->ScreenToOutputPixel( pControl->OutputToScreenPixel ( aPos ) ); 4191 } 4192 else 4193 pActualWin = pControl; 4194 4195 AnimateMouse( pActualWin, aPos ); 4196 pActualWin->GrabFocus(); 4197 MouseEvent aMEvnt; 4198 aMEvnt = MouseEvent(aPos,1,MOUSE_SIMPLECLICK|MOUSE_SELECT,nButton); 4199 ImplMouseButtonDown( pActualWin, aMEvnt ); 4200 ImplMouseButtonUp ( pActualWin, aMEvnt ); 4201 aMEvnt = MouseEvent(aPos,2,MOUSE_SIMPLECLICK|MOUSE_SELECT,nButton); 4202 ImplMouseButtonDown( pActualWin, aMEvnt ); 4203 ImplMouseButtonUp ( pActualWin, aMEvnt ); 4204 } 4205 break; 4206 case M_DisplayPercent: 4207 { 4208 ModelessDialog *pDlg = new ModelessDialog(NULL); 4209 pDlg->SetOutputSizePixel(Size(100,30)); 4210 4211 Edit *pMyEd = new Edit(pDlg,WB_CENTER | WB_BORDER ); 4212 pMyEd->SetSizePixel(Size(100,30)); 4213 pDlg->SetText(UniString("Schlie�en", RTL_TEXTENCODING_ISO_8859_1)); 4214 pDlg->Show(); 4215 pMyEd->Show(); 4216 sal_uLong nTime = Time().GetTime(); 4217 4218 while (pDlg->IsVisible()) 4219 { 4220 pDlg->ToTop(); 4221 for (int i = 1 ; i<10 ; i++) 4222 SafeReschedule(); 4223 Point Pos = pControl->GetPointerPosPixel(); 4224 Size Siz=pControl->GetOutputSizePixel(); 4225 if ( Time().GetTime() - nTime > 10 ) 4226 { 4227 nTime = Time().GetTime(); 4228 pMyEd->SetText(UniString::CreateFromInt32(Pos.X()*100/Siz.Width()).AppendAscii("%x").Append( UniString::CreateFromInt32(Pos.Y()*100/Siz.Height()) ).Append('%')); 4229 } 4230 } 4231 4232 delete pMyEd; 4233 delete pDlg; 4234 } 4235 break; 4236 case M_OpenContextMenu: 4237 { 4238 aSubMenuId1 = 0; 4239 aSubMenuId2 = 0; 4240 aSubMenuId3 = 0; 4241 pMenuWindow = NULL; 4242 Point aPos; 4243 ToolBox* pTB = (ToolBox*)pControl; 4244 if ( (pControl->GetType() == WINDOW_TOOLBOX) && pTB->IsMenuEnabled() ) 4245 { 4246 pTB->ExecuteCustomMenu(); 4247 /* Rectangle aRect = pTB->GetMenubuttonRect(); 4248 AnimateMouse( pControl, aRect.Center() ); 4249 MouseEvent aMEvnt(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); 4250 ImplMouseButtonDown( pTB, aMEvnt );*/ 4251 } 4252 else 4253 { 4254 sal_Bool bAtMousePos = ( nParams & PARAM_BOOL_1 ) && bBool1; 4255 if ( bAtMousePos ) 4256 { 4257 aPos = pControl->GetPointerPosPixel(); 4258 Window *pActualWin = pControl->FindWindow( aPos ); 4259 4260 if ( pActualWin ) 4261 { 4262 aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); 4263 // aPos = pActualWin->ScreenToOutputPixel( pControl->OutputToScreenPixel ( aPos ) ); 4264 pControl = pActualWin; 4265 } 4266 } 4267 CommandEvent aEvent( aPos, COMMAND_CONTEXTMENU, bAtMousePos ); 4268 ImplCommand( pControl, aEvent ); 4269 } 4270 } 4271 break; 4272 case M_UseMenu: 4273 { 4274 aSubMenuId1 = 0; 4275 aSubMenuId2 = 0; 4276 aSubMenuId3 = 0; 4277 pMenuWindow = NULL; 4278 4279 while ( pControl && !( ( pControl->GetType() == WINDOW_SYSWINDOW || pControl->GetType() == WINDOW_WORKWINDOW ) && ControlOK( pControl, "" ) ) ) 4280 pControl = pControl->GET_REAL_PARENT(); 4281 4282 if ( pControl && ((SystemWindow*)pControl)->GetMenuBar() ) 4283 pMenuWindow = ((SystemWindow*)pControl); 4284 else 4285 ReportError( GEN_RES_STR1( S_NO_MENU, MethodString( nMethodId ) ) ); 4286 } 4287 break; 4288 case M_FadeIn: 4289 case M_FadeOut: 4290 case M_Pin: 4291 case M_IsFadeIn: 4292 case M_IsPin: 4293 { 4294 WindowAlign aWindowAlign = WINDOWALIGN_LEFT; 4295 if ( (nParams & PARAM_USHORT_1) ) 4296 { 4297 switch ( nNr1 ) 4298 { 4299 case CONST_ALIGN_LEFT: 4300 aWindowAlign = WINDOWALIGN_LEFT; 4301 break; 4302 case CONST_ALIGN_TOP: 4303 aWindowAlign = WINDOWALIGN_TOP; 4304 break; 4305 case CONST_ALIGN_RIGHT: 4306 aWindowAlign = WINDOWALIGN_RIGHT; 4307 break; 4308 case CONST_ALIGN_BOTTOM: 4309 aWindowAlign = WINDOWALIGN_BOTTOM; 4310 break; 4311 default: 4312 ReportError( aUId, GEN_RES_STR1( S_INVALID_POSITION, MethodString( nMethodId ) ) ); 4313 } 4314 } 4315 4316 Window* pTemp = NULL; 4317 while ( !pTemp && pControl ) 4318 { 4319 pTemp = GetFadeSplitWin( pControl, aWindowAlign ); 4320 pControl = pControl->GET_REAL_PARENT(); 4321 } 4322 4323 if ( !pTemp ) 4324 { 4325 ReportError( aUId, GEN_RES_STR1( S_SPLITWIN_NOT_FOUND, MethodString( nMethodId ) ) ); 4326 break; 4327 } 4328 4329 pControl = pTemp; // So da� wir unten ohne Fehler durchkommen 4330 SplitWindow *pSW = (SplitWindow*) pTemp; 4331 4332 // Rectangle GetAutoHideRect() const; 4333 // Rectangle GetFadeInRect() const; 4334 // Rectangle GetFadeOutRect() const; 4335 4336 switch( nMethodId ) 4337 { 4338 case M_FadeIn: 4339 if ( pSW->IsFadeInButtonVisible() ) 4340 pSW->FadeIn(); 4341 break; 4342 case M_FadeOut: 4343 if ( pSW->IsFadeOutButtonVisible() ) 4344 pSW->FadeOut(); 4345 break; 4346 case M_Pin: 4347 if ( ( pSW->GetAutoHideState() && bBool1 ) 4348 || ( !pSW->GetAutoHideState() && !bBool1 ) ) 4349 { 4350 MouseEvent aMEvnt; 4351 Point aPt( pSW->GetAutoHideRect().Center() ); 4352 aMEvnt = MouseEvent( aPt,1,MOUSE_SIMPLECLICK,MOUSE_LEFT ); 4353 ImplMouseButtonDown( pControl, aMEvnt, FORCE_DIRECT_CALL ); 4354 ImplMouseButtonUp ( pControl, aMEvnt, FORCE_DIRECT_CALL ); 4355 } 4356 // pSW->AutoHide(); 4357 break; 4358 case M_IsFadeIn: 4359 pRet->GenReturn ( RET_Value, aUId, pSW->IsFadeOutButtonVisible() ); 4360 break; 4361 case M_IsPin: 4362 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)!pSW->GetAutoHideState() ); 4363 break; 4364 default: 4365 ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); 4366 } 4367 SendProfile( UIdString( aUId ).Append('.').Append( MethodString( nMethodId ) ) ); 4368 } 4369 break; 4370 case M_StatusGetText: 4371 case M_StatusIsProgress: 4372 case M_StatusGetItemCount: 4373 case M_StatusGetItemId: 4374 { 4375 StatusBar *pStatus = NULL; 4376 while ( !pStatus && pControl ) 4377 { 4378 pStatus = (StatusBar*)GetWinByRT( pControl, WINDOW_STATUSBAR, sal_True ); 4379 pControl = pControl->GET_REAL_PARENT(); 4380 } 4381 4382 if ( !pStatus ) 4383 { 4384 ReportError( aUId, GEN_RES_STR1( S_NO_STATUSBAR, MethodString( nMethodId ) ) ); 4385 break; 4386 } 4387 4388 switch ( nMethodId ) 4389 { 4390 case M_StatusGetText: 4391 { 4392 if ( (nParams & PARAM_USHORT_1) ) 4393 { 4394 if ( pStatus->AreItemsVisible() ) 4395 pRet->GenReturn ( RET_Value, aUId, String(pStatus->GetItemText(nNr1))); 4396 else 4397 ReportError( aUId, GEN_RES_STR1( S_ITEMS_INVISIBLE, MethodString( nMethodId ) ) ); 4398 } 4399 else 4400 { 4401 if ( pStatus->AreItemsVisible() ) 4402 { 4403 if ( pStatus->GetItemCount() == 1 ) 4404 { 4405 pRet->GenReturn ( RET_Value, aUId, pStatus->GetItemText( pStatus->GetItemId(0) )); 4406 } 4407 else 4408 { 4409 pRet->GenReturn ( RET_Value, aUId, String() ); 4410 } 4411 } 4412 else 4413 pRet->GenReturn ( RET_Value, aUId, (String)pStatus->GetText() ); 4414 } 4415 } 4416 break; 4417 case M_StatusIsProgress: 4418 { 4419 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)pStatus->IsProgressMode() ); 4420 } 4421 break; 4422 case M_StatusGetItemCount: 4423 if ( pStatus->AreItemsVisible() ) 4424 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(pStatus->GetItemCount())); 4425 else 4426 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(0)); 4427 break; 4428 case M_StatusGetItemId: 4429 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,pStatus->GetItemCount()) ) 4430 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(pStatus->GetItemId(nNr1-1))); 4431 break; 4432 } 4433 } 4434 break; 4435 case M_HasScrollBar: 4436 case M_IsScrollBarEnabled: 4437 { 4438 if ( (nParams | PARAM_USHORT_1) != PARAM_USHORT_1 ) // so there are other params 4439 { 4440 ReportError( aUId, GEN_RES_STR0( S_INVALID_PARAMETERS ) ); 4441 break; 4442 } 4443 4444 if( !(nParams & PARAM_USHORT_1) ) 4445 nNr1 = CONST_ALIGN_RIGHT; // default is right Scrollbar(vertical) 4446 4447 if ( (nNr1 != CONST_ALIGN_RIGHT) && (nNr1 != CONST_ALIGN_BOTTOM) ) 4448 { 4449 ReportError( aUId, GEN_RES_STR1( S_INVALID_POSITION, MethodString( nMethodId ) ) ); 4450 break; 4451 } 4452 4453 ScrollBar *pScroll = NULL; 4454 4455 sal_uInt16 nSteps = 2; 4456 while ( !pScroll && pControl && nSteps-- ) 4457 { 4458 pScroll = GetScrollBar( pControl, nNr1, sal_True ); 4459 pControl = pControl->GET_REAL_PARENT(); 4460 } 4461 4462 switch ( nMethodId ) 4463 { 4464 case M_HasScrollBar: 4465 { 4466 if ( pScroll ) 4467 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)sal_True ); 4468 else 4469 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)sal_False ); 4470 } 4471 break; 4472 case M_IsScrollBarEnabled: 4473 { 4474 if ( !pScroll ) 4475 { 4476 ReportError( aUId, GEN_RES_STR1( S_NO_SCROLLBAR, MethodString( nMethodId ) ) ); 4477 break; 4478 } 4479 pRet->GenReturn ( RET_Value, aUId, pScroll->IsEnabled() ); 4480 } 4481 break; 4482 } 4483 } 4484 break; 4485 default: 4486 return sal_False; 4487 } 4488 return sal_True; 4489 } 4490 4491 4492 sal_Bool StatementControl::Execute() 4493 { 4494 Window *pControl; 4495 sal_Bool bStatementDone = sal_True; 4496 4497 4498 if ( IsError ) 4499 { 4500 #if OSL_DEBUG_LEVEL > 1 4501 m_pDbgWin->AddText( "Skipping Window: " ); 4502 m_pDbgWin->AddText( Id2Str( aUId ) ); 4503 m_pDbgWin->AddText( " Method: " ); 4504 m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); 4505 m_pDbgWin->AddText( "\n" ); 4506 #endif 4507 Advance(); 4508 delete this; 4509 return sal_True; 4510 } 4511 4512 InitProfile(); 4513 #if OSL_DEBUG_LEVEL > 1 4514 m_pDbgWin->AddText( "Executing Window: " ); 4515 m_pDbgWin->AddText( Id2Str( aUId ) ); 4516 m_pDbgWin->AddText( " Method: " ); 4517 m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); 4518 m_pDbgWin->AddText( "\n" ); 4519 #endif 4520 4521 4522 if ( aUId.equals( UID_ACTIVE ) ) 4523 pControl = GetAnyActive(); 4524 else 4525 { 4526 sal_Bool bSearchButtonOnToolbox = (nParams == PARAM_NONE) && ((M_Click == nMethodId) || (M_TearOff == nMethodId) || (M_IsEnabled == nMethodId) || (M_OpenMenu == nMethodId)); 4527 bSearchButtonOnToolbox |= (nParams == PARAM_USHORT_1) && (M_GetState == nMethodId); 4528 if ( nMethodId == M_TypeKeys || nMethodId == M_MouseDown 4529 || nMethodId == M_MouseUp || nMethodId == M_MouseMove 4530 || nMethodId == M_SnapShot ) 4531 { 4532 pControl = NULL; 4533 if ( /*(nMethodId == M_SnapShot || nMethodId == M_TypeKeys) &&*/ !pControl ) 4534 pControl = SearchTree( aUId ,bSearchButtonOnToolbox ); 4535 } 4536 else 4537 pControl = SearchTree( aUId ,bSearchButtonOnToolbox ); 4538 } 4539 4540 4541 if ( pControl && pControl->GetType() == WINDOW_TOOLBOX ) 4542 { 4543 if ( !aUId.equals( pControl->GetUniqueOrHelpId() ) ) 4544 { // Also wenn wir irgendwas auf einer Toolbox gefunden haben 4545 switch ( nMethodId ) 4546 { 4547 case M_Click: 4548 case M_TearOff: 4549 case M_OpenMenu: 4550 case M_GetState: 4551 break; 4552 case M_IsEnabled: 4553 nMethodId = _M_IsEnabled; // Umlabeln, da die Behandlung essentiell anders ist! 4554 break; 4555 default: 4556 pControl = NULL; 4557 } 4558 } 4559 } 4560 4561 4562 switch ( nMethodId ) 4563 { 4564 case M_Exists: 4565 case M_NotExists: 4566 Time aT; 4567 sal_uInt16 aSeconds = aT.GetMin()*60+aT.GetSec(); 4568 if ( !bBool2 ) // wurde im Konstruktor auf sal_False gesetzt 4569 { 4570 bBool2 = sal_True; 4571 nNr2 = aSeconds; 4572 if( !(nParams & PARAM_USHORT_1) ) 4573 nNr1 = 0; // defaultm��ig sofort zur�ck 4574 } 4575 if ( aSeconds < nNr2 ) // Falls die Stunde umgesprungen ist 4576 aSeconds += 60*60; 4577 4578 if ( /* !IsAccessable(pControl)#87019# */ !pControl || !pControl->IsVisible() ) 4579 pControl = NULL; 4580 if ( ((nMethodId == M_Exists) && pControl) || 4581 ((nMethodId == M_NotExists) && !pControl) ) 4582 { // Wenn Bedingung erf�llt 4583 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)sal_True ); 4584 } 4585 else 4586 if ( aSeconds <= nNr2 + nNr1 ) // Zeit ist noch nicht abgelaufen 4587 return sal_False; 4588 else 4589 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)sal_False ); 4590 4591 Advance(); 4592 delete this; 4593 return sal_True; 4594 // break; 4595 } 4596 4597 4598 short nRT = 0; 4599 4600 if( pControl ) // Das Fenster Existiert irgendwo, kann aber auch hidden sein! 4601 { 4602 nRT = ImpGetRType( pControl ); 4603 #if OSL_DEBUG_LEVEL > 1 4604 m_pDbgWin->AddText( "Type is: " ); 4605 m_pDbgWin->AddText( String::CreateFromInt32( nRT ) ); 4606 m_pDbgWin->AddText( "\n" ); 4607 #endif 4608 } 4609 4610 if ( nRT == C_Window && // Search for WorkWindow to satisfy these commands 4611 ( nMethodId == M_Close 4612 // || nMethodId == M_Size 4613 // || nMethodId == M_Move 4614 || nMethodId == M_IsMax 4615 || nMethodId == M_IsMin 4616 || nMethodId == M_IsRestore 4617 || nMethodId == M_Minimize 4618 || nMethodId == M_Maximize 4619 || nMethodId == M_Restore ) ) 4620 { 4621 Window* pNewControl = pControl; 4622 while ( pNewControl && pNewControl->GetType() != WINDOW_WORKWINDOW ) 4623 pNewControl = pNewControl->GET_REAL_PARENT(); 4624 4625 if ( pNewControl ) 4626 { 4627 pControl = pNewControl; 4628 nRT = C_WorkWin; 4629 } 4630 } 4631 4632 4633 if ( (!ControlOK( pControl, "" )) && ( nMethodId != M_SnapShot ) && (nRetryCount--)) 4634 { 4635 #if OSL_DEBUG_LEVEL > 1 4636 m_pDbgWin->AddText( CUniString("Reschedule command (").Append( UniString::CreateFromInt32(nRetryCount) ).AppendAscii(")\n") ); 4637 #endif 4638 return sal_False; 4639 } 4640 4641 if( ControlOK( pControl, "" ) ) 4642 { 4643 if ( nMethodId == M_OpenContextMenu && !bBool2 ) 4644 { 4645 pControl->GrabFocus(); // to get asyncron focus on unix 4646 bBool2 = sal_True; 4647 return sal_False; 4648 } 4649 // TODO: handle GetFocus for all Methods and Windows like this (remove part below) 4650 // See for impact of changed focus for HandleVisibleControls() (taking Snapshots might be different, possible exclude those methods) 4651 if (( (nRT == C_TreeListBox) && !bBool2 ) 4652 && nMethodId != M_TypeKeys // TypeKeys macht das selbst, falls eigenes Focushandling gew�nscht 4653 && nMethodId != M_MouseDown 4654 && nMethodId != M_MouseUp 4655 && nMethodId != M_MouseMove 4656 /*&& nMethodId != M_MouseDoubleClick*/ ) 4657 { 4658 if ( !pControl->HasFocus() ) 4659 { 4660 pControl->GrabFocus(); 4661 int i = 10; 4662 while ( i-- && !pControl->HasFocus() ) // reschedule a bit 4663 { 4664 SafeReschedule(); 4665 if ( !WinPtrValid( pControl ) ) 4666 return sal_False; 4667 } 4668 if ( !pControl->HasFocus() ) // to get asyncronous focus 4669 { 4670 bBool2 = sal_True; 4671 return sal_False; 4672 } 4673 } 4674 } 4675 } 4676 4677 Advance(); 4678 4679 if ( HandleVisibleControls( pControl ) ) 4680 { 4681 delete this; 4682 return sal_True; 4683 } 4684 if( ControlOK( pControl, "Window/Control" ) ) 4685 { 4686 if (((( nRT < C_TabPage && nRT > C_TabControl ) 4687 || nRT == C_PatternBox 4688 || nRT == C_ToolBox 4689 || nRT == C_ValueSet 4690 || nRT == C_Control 4691 || nRT == C_TreeListBox 4692 ) 4693 || nMethodId == M_OpenContextMenu ) 4694 && nMethodId != M_TypeKeys // TypeKeys macht das selbst, falls eigenes Focushandling gew�nscht 4695 && nMethodId != M_MouseDown 4696 && nMethodId != M_MouseUp 4697 && nMethodId != M_MouseMove 4698 /*&& nMethodId != M_MouseDoubleClick*/ ) 4699 pControl->GrabFocus(); 4700 4701 /* leads to problems because settext sets the text whereas typekeys adds to the text. 4702 if ( bDoTypeKeysDelay && nMethodId == M_SetText && ( nParams & PARAM_STR_1 ) ) 4703 { // Hier wird das Statement auf ein TypeKeys umgebogen 4704 nMethodId = M_TypeKeys; 4705 nParams = PARAM_BOOL_1 | PARAM_STR_1; 4706 bBool1 = sal_True; 4707 pControl->GrabFocus(); 4708 } 4709 */ 4710 if ( !HandleCommonMethods( pControl ) ) 4711 { 4712 switch( nRT ) 4713 { 4714 case C_TabControl: 4715 switch( nMethodId ) 4716 { 4717 case M_GetPageId: 4718 if ( (nParams & PARAM_USHORT_1) ) 4719 { 4720 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((TabControl*)pControl)->GetPageCount() ) ) 4721 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)((TabControl*)pControl)->GetPageId(nNr1-1)); 4722 } 4723 else 4724 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)((TabControl*)pControl)->GetCurPageId()); 4725 break; 4726 case M_GetPageCount: 4727 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)((TabControl*)pControl)->GetPageCount()); 4728 break; 4729 case M_SetPageId: 4730 if (((TabControl*)pControl)->GetCurPageId()) 4731 ((TabControl*)pControl)->DeactivatePage(); 4732 ((TabControl*)pControl)->SetCurPageId( nNr1 ); 4733 ((TabControl*)pControl)->ActivatePage(); 4734 break; 4735 case M_SetPageNr: 4736 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((TabControl*)pControl)->GetPageCount() ) ) 4737 { 4738 if (((TabControl*)pControl)->GetCurPageId()) 4739 ((TabControl*)pControl)->DeactivatePage(); 4740 ((TabControl*)pControl)->SetCurPageId( ((TabControl*)pControl)->GetPageId( nNr1-1 ) ); 4741 ((TabControl*)pControl)->ActivatePage(); 4742 } 4743 break; 4744 case M_GetPage: 4745 pRet->GenReturn ( RET_Value, aUId, Id2Str( ((TabControl*)pControl)->GetTabPage(((TabControl*)pControl)->GetCurPageId())->GetUniqueOrHelpId() ) ); 4746 break; 4747 case M_SetPage : 4748 { // Wegen lokaler Variablen 4749 TabControl *pTControl = ((TabControl*)pControl); 4750 sal_uInt16 nActive = pTControl->GetCurPageId(); 4751 sal_uInt16 i,anz; 4752 rtl::OString aID; 4753 rtl::OString aWantedID; 4754 //HELPID BACKWARD (No numbers please (remove PARAM_ULONG_1 part) 4755 if ( (nParams & PARAM_ULONG_1) ) 4756 { 4757 //aWantedID = rtl::OString( nLNr1 ); 4758 ReportError( aUId, GEN_RES_STR1c( S_INTERNAL_ERROR, "using numeric HelpID from old Testtool" ) ); 4759 } 4760 else if ( (nParams & PARAM_STR_1) ) 4761 { 4762 aWantedID = Str2Id( aString1 ); 4763 } 4764 else 4765 ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); 4766 4767 i = pTControl->GetPagePos( pTControl->GetCurPageId() ); 4768 for ( anz=0 ; anz < pTControl->GetPageCount() && !aID.equals( aWantedID ) ; anz++ ) 4769 { 4770 pTControl->SelectTabPage( pTControl->GetPageId(i) ); 4771 /*if (pTControl->GetCurPageId()) 4772 pTControl->DeactivatePage(); 4773 pTControl->SetCurPageId( pTControl->GetPageId(i) ); 4774 pTControl->ActivatePage();*/ 4775 aID = pTControl->GetTabPage(pTControl->GetCurPageId())->GetUniqueOrHelpId(); 4776 i++; 4777 if ( i >= pTControl->GetPageCount() ) 4778 i = 0; 4779 if ( !MaybeDoTypeKeysDelay( pTControl ) || !MaybeDoTypeKeysDelay( pTControl ) || !MaybeDoTypeKeysDelay( pTControl ) ) // 3 Mal aufrufen 4780 break; 4781 } 4782 if ( !aID.equals( aWantedID ) ) 4783 { 4784 pTControl->SelectTabPage( nActive ); 4785 /*if (pTControl->GetCurPageId()) 4786 pTControl->DeactivatePage(); 4787 pTControl->SetCurPageId( nActive ); 4788 pTControl->ActivatePage();*/ 4789 ReportError( aWantedID, GEN_RES_STR1( S_TABPAGE_NOT_FOUND, MethodString( nMethodId ) ) ); 4790 } 4791 } 4792 break; 4793 default: 4794 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "TabControl" ) ); 4795 break; 4796 } 4797 break; 4798 case C_RadioButton: 4799 case C_ImageRadioButton: 4800 switch( nMethodId ) 4801 { 4802 case M_AnimateMouse : 4803 AnimateMouse( pControl, MitteLinks); 4804 break; 4805 case M_IsChecked : 4806 pRet->GenReturn ( RET_Value, aUId, ((RadioButton*)pControl)->IsChecked()); 4807 break; 4808 case M_Check : 4809 ((RadioButton*)pControl)->Check(); 4810 ((RadioButton*)pControl)->Click(); 4811 break; 4812 default: 4813 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "RadioButton" ) ); 4814 break; 4815 } 4816 break; 4817 case C_CheckBox: 4818 case C_TriStateBox: 4819 switch( nMethodId ) 4820 { 4821 case M_AnimateMouse : 4822 AnimateMouse( pControl, MitteLinks); 4823 break; 4824 case M_IsChecked : 4825 pRet->GenReturn ( RET_Value, aUId, comm_BOOL( ((TriStateBox*)pControl)->GetState() == STATE_CHECK) ); 4826 break; 4827 case M_IsTristate : 4828 pRet->GenReturn ( RET_Value, aUId, comm_BOOL( ((TriStateBox*)pControl)->GetState() == STATE_DONTKNOW) ); 4829 break; 4830 case M_GetState : 4831 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(((TriStateBox*)pControl)->GetState())); 4832 break; 4833 case M_Check : 4834 ((TriStateBox*)pControl)->SetState( STATE_CHECK ); 4835 ((TriStateBox*)pControl)->Click(); 4836 break; 4837 case M_UnCheck : 4838 ((TriStateBox*)pControl)->SetState( STATE_NOCHECK ); 4839 ((TriStateBox*)pControl)->Click(); 4840 break; 4841 case M_TriState : 4842 if ( ((TriStateBox*)pControl)->IsTriStateEnabled() ) 4843 { 4844 ((TriStateBox*)pControl)->SetState( STATE_DONTKNOW ); 4845 ((TriStateBox*)pControl)->Click(); 4846 } 4847 else 4848 { 4849 ReportError( aUId, GEN_RES_STR0( S_TRISTATE_NOT_ALLOWED ) ); 4850 } 4851 break; 4852 case M_Click : 4853 { 4854 TriStateBox *pTB = ((TriStateBox*)pControl); 4855 if ( pTB->GetState() == STATE_NOCHECK ) 4856 pTB->SetState( STATE_CHECK ); 4857 else if ( pTB->GetState() == STATE_CHECK ) 4858 { 4859 if ( pTB->IsTriStateEnabled() ) 4860 pTB->SetState( STATE_DONTKNOW ); 4861 else 4862 pTB->SetState( STATE_NOCHECK ); 4863 } 4864 else 4865 pTB->SetState( STATE_NOCHECK ); 4866 pTB->Click(); 4867 } 4868 break; 4869 default: 4870 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "TriStateBox" ) ); 4871 break; 4872 } 4873 break; 4874 case C_Edit: 4875 case C_MultiLineEdit: 4876 switch( nMethodId ) 4877 { 4878 case M_AnimateMouse : 4879 AnimateMouse( pControl, Mitte); 4880 break; 4881 case M_GetText : 4882 pRet->GenReturn ( RET_Value, aUId, ((Edit*)pControl)->GetText()); 4883 break; 4884 case M_IsWritable: 4885 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL) !((Edit*)pControl)->IsReadOnly() ); 4886 break; 4887 default: 4888 if ( ! ((Edit*)pControl)->IsReadOnly() ) 4889 { 4890 switch( nMethodId ) 4891 { 4892 case M_SetText : 4893 ((Edit*)pControl)->SetText( aString1 ); 4894 if ( nRT == C_MultiLineEdit ) // since SetModifyFlag is not virtual we have to do this 4895 ((MultiLineEdit*)pControl)->SetModifyFlag(); 4896 else 4897 ((Edit*)pControl)->SetModifyFlag(); 4898 ((Edit*)pControl)->Modify(); 4899 if ( ((Edit*)pControl)->GetText().CompareTo(aString1) != COMPARE_EQUAL ) 4900 ReportError( aUId, GEN_RES_STR1( S_ERROR_IN_SET_TEXT, MethodString( nMethodId ) ) ); 4901 break; 4902 default: 4903 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "(MultiLine)Edit" ) ); 4904 break; 4905 } 4906 } 4907 else 4908 ReportError( aUId, GEN_RES_STR1c( S_ATTEMPT_TO_WRITE_READONLY, "(MultiLine)Edit" ) ); 4909 } 4910 break; 4911 case C_MultiListBox: 4912 case C_ListBox: 4913 switch( nMethodId ) 4914 { 4915 case M_AnimateMouse : 4916 AnimateMouse( pControl, MitteOben); 4917 break; 4918 case M_GetSelCount : 4919 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(((ListBox*)pControl)->GetSelectEntryCount())); 4920 break; 4921 case M_GetSelIndex : 4922 if ( ! (nParams & PARAM_USHORT_1) ) 4923 { 4924 if ( ((ListBox*)pControl)->GetSelectEntryCount() == 0 ) 4925 { 4926 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(0)); 4927 break; 4928 } 4929 nNr1 = 1; 4930 } 4931 ValueOK(aUId, MethodString( nMethodId ),nNr1,((ListBox*)pControl)->GetSelectEntryCount()); 4932 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(((ListBox*)pControl)->GetSelectEntryPos(nNr1-1)) +1); 4933 break; 4934 case M_GetSelText : 4935 if ( ! (nParams & PARAM_USHORT_1) ) 4936 nNr1 = 1; 4937 pRet->GenReturn ( RET_Value, aUId, ((ListBox*)pControl)->GetSelectEntry(nNr1-1)); 4938 break; 4939 case M_GetItemCount : 4940 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(((ListBox*)pControl)->GetEntryCount())); 4941 break; 4942 case M_GetItemText : 4943 pRet->GenReturn ( RET_Value, aUId, ((ListBox*)pControl)->GetEntry(nNr1-1)); 4944 break; 4945 case M_Select: 4946 case M_MultiSelect: 4947 { 4948 sal_Bool bUnselectBeforeSelect = ( nMethodId == M_Select ); 4949 sal_Bool bFehler = sal_False; 4950 if ( ! (nParams & PARAM_BOOL_1) ) 4951 bBool1 = sal_True; 4952 4953 if ( nMethodId == M_MultiSelect && nRT == C_ListBox ) 4954 { 4955 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ListBox" ) ); 4956 bFehler = sal_True; 4957 } 4958 4959 if ( !bBool1 && nMethodId == M_Select ) 4960 { 4961 ReportError( aUId, GEN_RES_STR1( S_NO_SELECT_FALSE, MethodString( nMethodId ) ) ); 4962 bFehler = sal_True; 4963 } 4964 4965 if ( !bFehler ) 4966 { 4967 if( nParams & PARAM_STR_1 ) 4968 { 4969 ListBox *pLB = ((ListBox*)pControl); 4970 sal_uInt16 nPos; 4971 if ( (nPos = pLB->GetEntryPos( aString1 )) == LISTBOX_ENTRY_NOTFOUND ) 4972 ReportError( aUId, GEN_RES_STR2( S_ENTRY_NOT_FOUND, MethodString( nMethodId ), aString1 ) ); 4973 else 4974 { 4975 if ( bUnselectBeforeSelect ) 4976 pLB->SetNoSelection(); 4977 pLB->SelectEntryPos( nPos, bBool1 ); 4978 if ( pLB->IsEntryPosSelected( nPos ) ? !bBool1 : bBool1 ) // XOR rein mit BOOL 4979 ReportError( aUId, GEN_RES_STR2( S_METHOD_FAILED, MethodString( nMethodId ), aString1 ) ); 4980 } 4981 } 4982 else 4983 { 4984 ListBox *pLB = ((ListBox*)pControl); 4985 pLB = static_cast<ListBox*>(pControl); 4986 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,pLB->GetEntryCount()) ) 4987 { 4988 if ( bUnselectBeforeSelect ) 4989 pLB->SetNoSelection(); 4990 pLB->SelectEntryPos( nNr1-1, bBool1 ); 4991 if ( pLB->IsEntryPosSelected( nNr1-1 ) ? !bBool1 : bBool1 ) // XOR rein mit BOOL 4992 ReportError( aUId, GEN_RES_STR2( S_METHOD_FAILED, MethodString( nMethodId ), UniString::CreateFromInt32( nNr1 ) ) ); 4993 } 4994 } 4995 ((ListBox*)pControl)->Select(); 4996 } 4997 } 4998 break; 4999 case M_SetNoSelection : 5000 ((ListBox*)pControl)->SetNoSelection(); 5001 ((ListBox*)pControl)->Select(); 5002 break; 5003 default: 5004 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "(Multi)ListBox" ) ); 5005 break; 5006 } 5007 break; 5008 case C_ComboBox: 5009 case C_PatternBox: 5010 case C_NumericBox: 5011 case C_MetricBox: 5012 case C_CurrencyBox: 5013 case C_DateBox: 5014 case C_TimeBox: 5015 switch( nMethodId ) 5016 { 5017 case M_AnimateMouse : 5018 AnimateMouse( pControl, MitteOben); 5019 break; 5020 case M_GetSelText : 5021 pRet->GenReturn ( RET_Value, aUId, ((ComboBox*)pControl)->GetText()); 5022 break; 5023 case M_GetSelIndex : 5024 { 5025 sal_uInt16 nPos = ((ComboBox*)pControl)->GetEntryPos(((ComboBox*)pControl)->GetText()); 5026 if ( nPos == COMBOBOX_ENTRY_NOTFOUND ) 5027 nPos = 0; 5028 else 5029 nPos++; 5030 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG) nPos); 5031 } 5032 break; 5033 case M_GetItemCount : 5034 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(((ComboBox*)pControl)->GetEntryCount())); 5035 break; 5036 case M_GetItemText : 5037 pRet->GenReturn ( RET_Value, aUId, ((ComboBox*)pControl)->GetEntry(nNr1-1)); 5038 break; 5039 case M_IsWritable: 5040 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL) !((ComboBox*)pControl)->IsReadOnly() ); 5041 break; 5042 case M_Select : 5043 if( nParams & PARAM_USHORT_1 ) 5044 { 5045 if ( !ValueOK(aUId, MethodString( nMethodId ),nNr1,((ComboBox*)pControl)->GetEntryCount()) ) 5046 break; 5047 aString1 = ((ComboBox*)pControl)->GetEntry(nNr1-1); 5048 } 5049 else 5050 { 5051 if ( ((ComboBox*)pControl)->GetEntryPos( aString1 ) == COMBOBOX_ENTRY_NOTFOUND ) 5052 { 5053 ReportError( aUId, GEN_RES_STR2( S_ENTRY_NOT_FOUND, MethodString( nMethodId ), aString1 ) ); 5054 break; 5055 } 5056 } 5057 5058 5059 ((ComboBox*)pControl)->SetText( aString1 ); 5060 ((ComboBox*)pControl)->SetModifyFlag(); 5061 ((ComboBox*)pControl)->Modify(); 5062 break; 5063 case M_SetText : 5064 if ( ! ((ComboBox*)pControl)->IsReadOnly() ) 5065 { 5066 if ( ! (nParams & PARAM_STR_1) ) 5067 aString1 = String(); 5068 ((ComboBox*)pControl)->SetText( aString1 ); 5069 ((ComboBox*)pControl)->SetModifyFlag(); 5070 ((ComboBox*)pControl)->Modify(); 5071 } 5072 else 5073 ReportError( aUId, GEN_RES_STR1c( S_ATTEMPT_TO_WRITE_READONLY, "ComboBox" ) ); 5074 break; 5075 default: 5076 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ComboBox" ) ); 5077 break; 5078 } 5079 break; 5080 case C_PushButton: 5081 case C_OkButton: 5082 case C_CancelButton: 5083 case C_ImageButton: 5084 switch( nMethodId ) 5085 { 5086 case M_AnimateMouse : 5087 AnimateMouse( pControl, Mitte); 5088 break; 5089 case M_Click : 5090 ((PushButton*)pControl)->Click(); 5091 break; 5092 default: 5093 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "PushButton" ) ); 5094 break; 5095 } 5096 break; 5097 case C_MoreButton: 5098 switch( nMethodId ) 5099 { 5100 case M_AnimateMouse : 5101 AnimateMouse( pControl, Mitte); 5102 break; 5103 case M_IsOpen : 5104 pRet->GenReturn ( RET_Value, aUId, ((MoreButton*)pControl)->GetState()); 5105 break; 5106 case M_Click : 5107 ((MoreButton*)pControl)->Click(); 5108 break; 5109 case M_Open : 5110 ((MoreButton*)pControl)->SetState(sal_True); 5111 break; 5112 case M_Close : 5113 ((MoreButton*)pControl)->SetState(sal_False); 5114 break; 5115 default: 5116 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MoreButton" ) ); 5117 break; 5118 } 5119 break; 5120 case C_SpinField: 5121 case C_PatternField: 5122 case C_NumericField: 5123 case C_MetricField: 5124 case C_CurrencyField: 5125 case C_DateField: 5126 case C_TimeField: 5127 switch( nMethodId ) 5128 { 5129 case M_AnimateMouse : 5130 AnimateMouse( pControl, Mitte); 5131 break; 5132 case M_GetText : 5133 pRet->GenReturn ( RET_Value, aUId, ((SpinField*)pControl)->GetText()); 5134 break; 5135 case M_IsWritable: 5136 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL) !((SpinField*)pControl)->IsReadOnly() ); 5137 break; 5138 case M_SetText : 5139 if ( ! ((SpinField*)pControl)->IsReadOnly() ) 5140 { 5141 ((SpinField*)pControl)->SetText( aString1 ); 5142 ((SpinField*)pControl)->SetModifyFlag(); 5143 ((SpinField*)pControl)->Modify(); 5144 } 5145 else 5146 ReportError( aUId, GEN_RES_STR1c( S_ATTEMPT_TO_WRITE_READONLY, "SpinField" ) ); 5147 break; 5148 case M_More : 5149 { 5150 if ( !(nParams & PARAM_USHORT_1) ) 5151 nNr1 = 1; 5152 for (int i = 1; i<= nNr1; i++) 5153 { 5154 ((SpinField*)pControl)->Up(); 5155 ((SpinField*)pControl)->SetModifyFlag(); 5156 ((SpinField*)pControl)->Modify(); 5157 } 5158 } 5159 break; 5160 case M_Less : 5161 { 5162 if ( !(nParams & PARAM_USHORT_1) ) 5163 nNr1 = 1; 5164 for (int i = 1; i<= nNr1; i++) 5165 { 5166 ((SpinField*)pControl)->Down(); 5167 ((SpinField*)pControl)->SetModifyFlag(); 5168 ((SpinField*)pControl)->Modify(); 5169 } 5170 } 5171 break; 5172 case M_ToMin : 5173 ((SpinField*)pControl)->First(); 5174 ((SpinField*)pControl)->SetModifyFlag(); 5175 ((SpinField*)pControl)->Modify(); 5176 break; 5177 case M_ToMax : 5178 ((SpinField*)pControl)->Last(); 5179 ((SpinField*)pControl)->SetModifyFlag(); 5180 ((SpinField*)pControl)->Modify(); 5181 break; 5182 default: 5183 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "SpinField" ) ); 5184 break; 5185 } 5186 break; 5187 5188 case C_MenuButton: 5189 switch( nMethodId ) 5190 { 5191 case M_AnimateMouse : 5192 AnimateMouse( pControl, Mitte); 5193 break; 5194 case M_Click : 5195 { 5196 MouseEvent aMEvnt; 5197 Point aPt( pControl->GetSizePixel().Width() / 2, pControl->GetSizePixel().Height() / 2 ); 5198 aMEvnt = MouseEvent( aPt,1,MOUSE_SIMPLECLICK,MOUSE_LEFT ); 5199 ImplMouseButtonDown( pControl, aMEvnt, FORCE_DIRECT_CALL ); 5200 ImplMouseButtonUp ( pControl, aMEvnt, FORCE_DIRECT_CALL ); 5201 } 5202 break; 5203 case M_Open : 5204 case M_OpenMenu : 5205 { 5206 MouseEvent aMEvnt; 5207 Point aPt( pControl->GetSizePixel().Width() / 2, pControl->GetSizePixel().Height() / 2 ); 5208 aMEvnt = MouseEvent( aPt,1,MOUSE_SIMPLECLICK,MOUSE_LEFT ); 5209 ImplMouseButtonDown( pControl, aMEvnt, FORCE_DIRECT_CALL ); 5210 5211 sal_uLong nStart = Time::GetSystemTicks(); 5212 sal_uLong nDelay = pControl->GetSettings().GetMouseSettings().GetActionDelay(); 5213 while ( ( Time::GetSystemTicks() - nStart ) < nDelay + 100 ) 5214 SafeReschedule(); 5215 5216 ImplMouseButtonUp ( pControl, aMEvnt, FORCE_DIRECT_CALL ); 5217 5218 aSubMenuId1 = 0; 5219 aSubMenuId2 = 0; 5220 aSubMenuId3 = 0; 5221 pMenuWindow = NULL; 5222 } 5223 break; 5224 default: 5225 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MenuButton" ) ); 5226 break; 5227 } 5228 break; 5229 case C_ToolBox: 5230 { 5231 ToolBox *pTB = ((ToolBox*)pControl); 5232 if ( !aUId.equals( pTB->GetUniqueOrHelpId() ) ) // So we found a Button on the ToolBox 5233 { 5234 if ( (nParams == PARAM_NONE) || (nParams == PARAM_USHORT_1) ) 5235 { // Wir f�lschen einen Parameter 5236 nParams |= PARAM_STR_1; 5237 aString1 = Id2Str( aUId ); 5238 } 5239 else 5240 ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); 5241 } 5242 5243 #define FIND_ITEM\ 5244 sal_uInt16 nItemPos = 0;\ 5245 sal_Bool bItemFound = sal_False;\ 5246 {\ 5247 rtl::OString aButtonId;\ 5248 if( nParams & PARAM_STR_1 )\ 5249 aButtonId = Str2Id( aString1 );\ 5250 else\ 5251 ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) );\ 5252 for ( nItemPos = 0; nItemPos < pTB->GetItemCount() && !aButtonId.equals(Str2Id( pTB->GetItemCommand(pTB->GetItemId(nItemPos)) )) &&\ 5253 !aButtonId.equals(pTB->GetHelpId(pTB->GetItemId(nItemPos))) ; nItemPos++ ) {}\ 5254 bItemFound = aButtonId.equals(Str2Id( pTB->GetItemCommand(pTB->GetItemId(nItemPos)) )) || aButtonId.equals(pTB->GetHelpId(pTB->GetItemId(nItemPos)));\ 5255 if ( !bItemFound )\ 5256 ReportError( aUId, GEN_RES_STR1( S_HELPID_ON_TOOLBOX_NOT_FOUND, MethodString( nMethodId ) ) );\ 5257 else\ 5258 {\ 5259 if ( !pTB->IsItemEnabled( pTB->GetItemId(nItemPos) ) && nMethodId != _M_IsEnabled && nMethodId != M_GetState )\ 5260 {\ 5261 ReportError( aUId, GEN_RES_STR1( S_BUTTON_DISABLED_ON_TOOLBOX, MethodString( nMethodId ) ) );\ 5262 bItemFound = sal_False;\ 5263 }\ 5264 else if ( !pTB->IsItemVisible( pTB->GetItemId(nItemPos) ) && nMethodId != M_GetState )\ 5265 {\ 5266 ReportError( aUId, GEN_RES_STR1( S_BUTTON_HIDDEN_ON_TOOLBOX, MethodString( nMethodId ) ) );\ 5267 bItemFound = sal_False;\ 5268 }\ 5269 else\ 5270 {\ 5271 if ( pTB->IsMenuEnabled() )\ 5272 { /* button is in Menu */\ 5273 }\ 5274 else\ 5275 { /* Try the multi line way */\ 5276 if ( pTB->GetItemRect(pTB->GetItemId(nItemPos)).IsEmpty() )\ 5277 {\ 5278 sal_uInt16 nLine = pTB->GetCurLine();\ 5279 do\ 5280 {\ 5281 pTB->ShowLine( sal_False );\ 5282 for ( int i = 1 ; i < 30 ; i++ )\ 5283 SafeReschedule();\ 5284 }\ 5285 while ( pTB->GetCurLine() != nLine && pTB->GetItemRect(pTB->GetItemId(nItemPos)).IsEmpty() );\ 5286 pTB->Invalidate( pTB->GetScrollRect() );\ 5287 }\ 5288 if ( pTB->GetItemRect(pTB->GetItemId(nItemPos)).IsEmpty() )\ 5289 {\ 5290 ReportError( aUId, GEN_RES_STR1( S_CANNOT_MAKE_BUTTON_VISIBLE_IN_TOOLBOX, MethodString( nMethodId ) ) );\ 5291 bItemFound = sal_False;\ 5292 }\ 5293 }\ 5294 }\ 5295 }\ 5296 } 5297 5298 switch( nMethodId ) 5299 { 5300 case M_AnimateMouse : 5301 AnimateMouse( pControl, MitteLinks); 5302 break; 5303 case M_Click : 5304 { 5305 FIND_ITEM; 5306 if ( bItemFound ) // FIND_ITEM Erfolgreich 5307 { 5308 Rectangle aRect = pTB->GetItemRect(pTB->GetItemId(nItemPos)); 5309 if ( aRect.IsEmpty() ) 5310 { 5311 pTB->ExecuteCustomMenu(); 5312 /* aRect = pTB->GetMenubuttonRect(); 5313 MouseEvent aMEvnt(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); 5314 ImplMouseButtonDown( pTB, aMEvnt );*/ 5315 5316 aSubMenuId1 = 0; 5317 aSubMenuId2 = 0; 5318 aSubMenuId3 = 0; 5319 pMenuWindow = NULL; 5320 5321 new StatementCommand( this, RC_MenuSelect, PARAM_USHORT_1, pTB->GetItemId(nItemPos) + TOOLBOX_MENUITEM_START ); 5322 } 5323 else 5324 { 5325 aRect = pTB->GetItemRect(pTB->GetItemId(nItemPos)); 5326 MouseEvent aMEvnt; 5327 aMEvnt = MouseEvent(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); 5328 ImplMouseButtonDown( pTB, aMEvnt, FORCE_DIRECT_CALL ); 5329 ImplMouseButtonUp ( pTB, aMEvnt, FORCE_DIRECT_CALL ); 5330 } 5331 } 5332 } 5333 break; 5334 case M_TearOff : 5335 { 5336 FIND_ITEM; 5337 if ( bItemFound ) // FIND_ITEM Erfolgreich 5338 { 5339 Rectangle aRect = pTB->GetItemPosDropDownRect( nItemPos ); 5340 AnimateMouse( pControl, aRect.Center() ); 5341 MouseEvent aMEvnt(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); 5342 ImplMouseButtonDown( pTB, aMEvnt, FORCE_DIRECT_CALL ); 5343 5344 Window *pWin = NULL; 5345 // Wait for the window to open. 5346 StatementList::bExecuting = sal_True; // Bah ist das ein ekliger Hack 5347 { // Das verhindert, da� schon der n�chste Befehl ausgef�hrt wird. 5348 Time aDelay; 5349 while ( !pWin && ( (pWin = GetPopupFloatingWin()) == NULL ) && ( Time() - aDelay ).GetSec() < 15 ) 5350 SafeReschedule(); 5351 } 5352 StatementList::bExecuting = sal_False; // Bah ist das ein ekliger Hack 5353 5354 if ( pWin && pWin->GetType() == WINDOW_FLOATINGWINDOW ) 5355 { 5356 aMEvnt = MouseEvent(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); 5357 ImplMouseButtonUp( pTB, aMEvnt, FORCE_DIRECT_CALL ); 5358 ((FloatingWindow*)pWin)->EndPopupMode( FLOATWIN_POPUPMODEEND_TEAROFF ); 5359 } 5360 else 5361 { 5362 aMEvnt = MouseEvent(Point(1,-10), 1, MOUSE_SIMPLECLICK,MOUSE_LEFT); 5363 ImplMouseButtonUp( pTB, aMEvnt, FORCE_DIRECT_CALL ); 5364 ReportError( aUId, GEN_RES_STR1( S_TEAROFF_FAILED, MethodString( nMethodId ) ) ); 5365 } 5366 } 5367 } 5368 break; 5369 case M_OpenMenu : 5370 { 5371 FIND_ITEM; 5372 if ( bItemFound ) // FIND_ITEM Erfolgreich 5373 { 5374 Rectangle aRect = pTB->GetItemPosDropDownRect( nItemPos ); 5375 AnimateMouse( pControl, aRect.Center() ); 5376 MouseEvent aMEvnt(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); 5377 ImplMouseButtonDown( pTB, aMEvnt); 5378 ImplMouseButtonUp( pTB, aMEvnt); 5379 5380 // Das Fenster ist offen. 5381 aSubMenuId1 = 0; 5382 aSubMenuId2 = 0; 5383 aSubMenuId3 = 0; 5384 pMenuWindow = NULL; 5385 } 5386 } 5387 break; 5388 case _M_IsEnabled: 5389 { 5390 FIND_ITEM; 5391 if ( bItemFound ) // FIND_ITEM Erfolgreich 5392 { 5393 pRet->GenReturn ( RET_Value, aUId, pTB->IsItemEnabled( pTB->GetItemId(nItemPos) ) ); 5394 } 5395 } 5396 break; 5397 case M_GetState : 5398 { 5399 FIND_ITEM; 5400 if ( bItemFound ) // FIND_ITEM Erfolgreich 5401 { 5402 if ( ValueOK( aUId, CUniString("GetState"), nNr1, 4 ) ) 5403 switch (nNr1) 5404 { 5405 case 0: 5406 pRet->GenReturn ( RET_Value, aUId, Id2Str( pTB->GetHelpId(pTB->GetItemId(nItemPos)) ) ); 5407 break; 5408 case 1: 5409 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pTB->GetItemType(nItemPos)); 5410 break; 5411 case 2: 5412 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pTB->GetItemState(pTB->GetItemId(nItemPos))); 5413 break; 5414 case 3: 5415 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pTB->GetItemId(nItemPos)); 5416 break; 5417 case 11: 5418 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG) nItemPos + 1); 5419 break; 5420 case 12: 5421 pRet->GenReturn ( RET_Value, aUId, Id2Str(pTB->GetHelpId())); // The toolbox's help id 5422 break; 5423 case 13: 5424 { 5425 Rectangle aRect = pTB->GetItemPosRect( nItemPos ); 5426 Rectangle aTBRect = pTB->GetWindowExtentsRelative( NULL ); 5427 pRet->GenReturn ( RET_Value, aUId, 5428 UniString::CreateFromInt32(aRect.Left()+aTBRect.Left()). 5429 AppendAscii(",").Append(UniString::CreateFromInt32(aRect.Top()+aTBRect.Top())). 5430 AppendAscii(",").Append(UniString::CreateFromInt32(aRect.GetWidth())). 5431 AppendAscii(",").Append(UniString::CreateFromInt32(aRect.GetHeight())) 5432 ); 5433 break; 5434 } 5435 default: 5436 ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); 5437 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(0)); 5438 break; 5439 } 5440 } 5441 } 5442 break; 5443 case M_GetItemHelpText : 5444 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pTB->GetItemCount() )) 5445 pRet->GenReturn ( RET_Value, aUId, (String)pTB->GetHelpText(pTB->GetItemId(nNr1-1))); 5446 break; 5447 case M_GetItemQuickHelpText : 5448 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pTB->GetItemCount() )) 5449 pRet->GenReturn ( RET_Value, aUId, (String)pTB->GetQuickHelpText(pTB->GetItemId(nNr1-1))); 5450 break; 5451 case M_GetItemText2: 5452 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pTB->GetItemCount() )) 5453 pRet->GenReturn ( RET_Value, aUId, (String)pTB->GetItemText(pTB->GetItemId(nNr1-1))); 5454 break; 5455 case M_GetItemText : 5456 pRet->GenReturn ( RET_Value, aUId, (String)pTB->GetItemText(nNr1)); 5457 break; 5458 case M_GetText : 5459 pRet->GenReturn ( RET_Value, aUId, (String)pTB->GetText()); 5460 break; 5461 case M_GetItemCount : 5462 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pTB->GetItemCount()); 5463 break; 5464 case M_SetNextToolBox : 5465 if ( (nParams & PARAM_STR_1) ) 5466 pTB->SetNextToolBox( aString1 ); 5467 else 5468 pTB->SetNextToolBox( pTB->GetNextToolBox() ); 5469 pTB->NextToolBox(); 5470 break; 5471 case M_GetNextToolBox : 5472 pRet->GenReturn ( RET_Value, aUId, (String)pTB->GetNextToolBox()); 5473 break; 5474 case M_Dock : 5475 case M_Undock : 5476 case M_IsDocked : 5477 case M_Close: 5478 case M_Size: 5479 case M_Move: 5480 case M_IsMax: 5481 case M_Minimize: 5482 case M_Maximize: 5483 case M_Help: // Alles was unten weiterbehandelt werden soll 5484 goto DockingWin; 5485 default: 5486 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ToolBox" ) ); 5487 break; 5488 } 5489 } 5490 break; 5491 5492 case C_TreeListBox: 5493 switch( nMethodId ) 5494 { 5495 5496 5497 5498 #define GET_NTH_ENTRY_LBOX( First, Next, Anzahl) \ 5499 SvLBoxEntry *pThisEntry = ((SvTreeListBox*)pControl)->First(); \ 5500 { \ 5501 int niTemp = Anzahl; \ 5502 while ( niTemp-- ) \ 5503 { \ 5504 pThisEntry = ((SvTreeListBox*)pControl)->Next( pThisEntry ); \ 5505 } \ 5506 } 5507 5508 case M_GetText : // Get the first text of the given (default=1) line 5509 { // should get removed some time 5510 SvTreeListBox *pTree = (SvTreeListBox*)pControl; 5511 SvLBoxEntry *pThisEntry = pTree->GetCurEntry(); 5512 if ( ! (nParams & PARAM_USHORT_1) ) 5513 nNr1 = 1; 5514 if ( pThisEntry ) 5515 { 5516 SvLBoxString* pItem = NULL; 5517 sal_uInt16 nValidTextItemCount = 0; 5518 { 5519 sal_uInt16 nIndex = 0; 5520 SvLBoxItem *pMyItem; 5521 while ( ( nValidTextItemCount < nNr1 ) && nIndex < pThisEntry->ItemCount() ) 5522 { 5523 pMyItem = pThisEntry->GetItem( nIndex ); 5524 if ( pMyItem->IsA() == SV_ITEM_ID_LBOXSTRING ) 5525 { 5526 pItem = (SvLBoxString*)pMyItem; 5527 nValidTextItemCount++; 5528 } 5529 nIndex++; 5530 } 5531 } 5532 if ( ValueOK( aUId, CUniString("GetText"), nNr1, nValidTextItemCount ) ) 5533 pRet->GenReturn ( RET_Value, aUId, pItem->GetText() ); 5534 } 5535 else 5536 ReportError( aUId, GEN_RES_STR2c2( S_NO_SELECTED_ENTRY, MethodString( nMethodId ), "TreeListBox" ) ); 5537 } 5538 break; 5539 case M_GetSelCount : 5540 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(((SvLBox*)pControl)->GetSelectionCount())); 5541 break; 5542 case M_GetItemCount : 5543 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(((SvLBox*)pControl)->GetVisibleCount()) ); 5544 break; 5545 case M_GetSelIndex : 5546 if ( ! (nParams & PARAM_USHORT_1) ) 5547 nNr1 = 1; 5548 if ( ValueOK(aUId, CUniString("GetSelIndex"),nNr1,((SvLBox*)pControl)->GetSelectionCount()) ) 5549 { 5550 nNr1--; 5551 GET_NTH_ENTRY_LBOX( FirstSelected, NextSelected, nNr1); 5552 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( ((SvTreeListBox*)pControl)->GetVisiblePos( pThisEntry )) +1 ); 5553 } 5554 break; 5555 case M_Select : 5556 if ( ! (nParams & PARAM_BOOL_1) ) 5557 bBool1 = sal_True; 5558 if( nParams & PARAM_STR_1 ) 5559 { 5560 /* ListBox *pLB = ((ListBox*)pControl); 5561 if ( pLB->GetEntryPos( aString1 ) == LISTBOX_ENTRY_NOTFOUND ) 5562 ReportError( aUId, GEN_RES_STR2( S_ENTRY_NOT_FOUND, MethodString( nMethodId ), aString1 ) ); 5563 else 5564 { 5565 pLB->SelectEntry( aString1, bBool1 ); 5566 if ( pLB->IsEntrySelected( aString1 ) ? !bBool1 : bBool1 ) // XOR rein mit BOOL 5567 ReportError( aUId, GEN_RES_STR2( S_METHOD_FAILED, MethodString( nMethodId ), aString1 ) ); 5568 } 5569 */ ReportError( aUId, GEN_RES_STR1( S_SELECT_DESELECT_VIA_STRING_NOT_IMPLEMENTED, MethodString( nMethodId ) ) ); 5570 } 5571 else 5572 { 5573 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) 5574 { 5575 SvLBoxEntry *pEntry = (SvLBoxEntry*)((SvTreeListBox*)pControl)->GetEntryAtVisPos( nNr1-1 ); 5576 ((SvTreeListBox*)pControl)->Select ( pEntry, bBool1 ); 5577 } 5578 } 5579 break; 5580 case M_Collapse : 5581 if( nParams & PARAM_STR_1 ) 5582 { 5583 ReportError( aUId, GEN_RES_STR1( S_SELECT_DESELECT_VIA_STRING_NOT_IMPLEMENTED, MethodString( nMethodId ) ) ); 5584 } 5585 else 5586 { 5587 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) 5588 { 5589 SvLBoxEntry *pEntry = (SvLBoxEntry*)((SvTreeListBox*)pControl)->GetEntryAtVisPos( nNr1-1 ); 5590 ((SvTreeListBox*)pControl)->Collapse ( pEntry ); 5591 } 5592 } 5593 break; 5594 case M_Expand : 5595 if( nParams & PARAM_STR_1 ) 5596 { 5597 ReportError( aUId, GEN_RES_STR1( S_SELECT_DESELECT_VIA_STRING_NOT_IMPLEMENTED, MethodString( nMethodId ) ) ); 5598 } 5599 else 5600 { 5601 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) 5602 { 5603 SvLBoxEntry *pEntry = (SvLBoxEntry*)((SvTreeListBox*)pControl)->GetEntryAtVisPos( nNr1-1 ); 5604 ((SvTreeListBox*)pControl)->Expand ( pEntry ); 5605 } 5606 } 5607 break; 5608 case M_GetSelText : 5609 if ( ! (nParams & PARAM_USHORT_1) ) 5610 nNr1 = 1; 5611 if ( ! (nParams & PARAM_USHORT_2) ) 5612 nNr2 = 1; 5613 if ( ValueOK(aUId, CUniString("GetSelText"),nNr1,((SvLBox*)pControl)->GetSelectionCount()) ) 5614 { 5615 nNr1--; 5616 GET_NTH_ENTRY_LBOX( FirstSelected, NextSelected, nNr1); 5617 if ( ValueOK( aUId, MethodString( nMethodId ),nNr2,pThisEntry->ItemCount() ) ) 5618 { 5619 SvLBoxString* pItem = NULL; 5620 if ( ! (nParams & PARAM_USHORT_2) ) 5621 pItem = (SvLBoxString*)pThisEntry->GetFirstItem( SV_ITEM_ID_LBOXSTRING ); 5622 else 5623 { 5624 SvLBoxItem *pMyItem = pThisEntry->GetItem( nNr2-1 ); 5625 if ( pMyItem->IsA() == SV_ITEM_ID_LBOXSTRING ) 5626 pItem = (SvLBoxString*)pMyItem; 5627 } 5628 5629 if ( pItem ) 5630 pRet->GenReturn ( RET_Value, aUId, pItem->GetText() ); 5631 else 5632 ReportError( aUId, GEN_RES_STR1( S_NO_LIST_BOX_STRING, MethodString( nMethodId ) ) ); 5633 } 5634 } 5635 break; 5636 case M_GetItemText : 5637 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) 5638 { 5639 SvLBoxEntry *pThisEntry = (SvLBoxEntry*)((SvTreeListBox*)pControl)->GetEntryAtVisPos( nNr1-1 ); 5640 if ( ! (nParams & PARAM_USHORT_2) ) 5641 nNr2 = 1; 5642 if ( ValueOK( aUId, MethodString( nMethodId ),nNr2,pThisEntry->ItemCount() ) ) 5643 { 5644 SvLBoxString* pItem = NULL; 5645 if ( ! (nParams & PARAM_USHORT_2) ) 5646 pItem = (SvLBoxString*)pThisEntry->GetFirstItem( SV_ITEM_ID_LBOXSTRING ); 5647 else 5648 { 5649 SvLBoxItem *pMyItem = pThisEntry->GetItem( nNr2-1 ); 5650 if ( pMyItem->IsA() == SV_ITEM_ID_LBOXSTRING ) 5651 pItem = (SvLBoxString*)pMyItem; 5652 } 5653 5654 if ( pItem ) 5655 pRet->GenReturn ( RET_Value, aUId, pItem->GetText() ); 5656 else 5657 ReportError( aUId, GEN_RES_STR1( S_NO_LIST_BOX_STRING, MethodString( nMethodId ) ) ); 5658 } 5659 } 5660 break; 5661 case M_IsChecked : 5662 case M_IsTristate : 5663 case M_GetState : 5664 case M_Check : 5665 case M_UnCheck : 5666 case M_TriState : 5667 { 5668 SvTreeListBox *pTree = (SvTreeListBox*)pControl; 5669 SvLBoxEntry *pThisEntry = NULL; 5670 5671 if ( ! (nParams & PARAM_USHORT_1) ) 5672 { 5673 pThisEntry = pTree->GetCurEntry(); 5674 if ( !pThisEntry ) 5675 ReportError( aUId, GEN_RES_STR2c2( S_NO_SELECTED_ENTRY, MethodString( nMethodId ), "TreeListBox" ) ); 5676 } 5677 else 5678 { 5679 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) 5680 { 5681 pThisEntry = (SvLBoxEntry*)pTree->GetEntryAtVisPos( nNr1-1 ); 5682 } 5683 } 5684 5685 if ( ! (nParams & PARAM_USHORT_2) ) 5686 nNr2 = 1; 5687 5688 if ( pThisEntry ) 5689 { 5690 if ( ValueOK( aUId, MethodString( nMethodId ),nNr2,pThisEntry->ItemCount() ) ) 5691 { 5692 SvLBoxButton* pItem = NULL; 5693 if ( ! (nParams & PARAM_USHORT_2) ) 5694 pItem = (SvLBoxButton*)pThisEntry->GetFirstItem( SV_ITEM_ID_LBOXBUTTON ); 5695 else 5696 { 5697 SvLBoxItem *pMyItem = pThisEntry->GetItem( nNr2-1 ); 5698 if ( pMyItem->IsA() == SV_ITEM_ID_LBOXBUTTON ) 5699 pItem = (SvLBoxButton*)pMyItem; 5700 } 5701 5702 if ( pItem ) 5703 { 5704 switch( nMethodId ) 5705 { 5706 case M_IsChecked : 5707 pRet->GenReturn ( RET_Value, aUId, comm_BOOL( pItem->IsStateChecked() ) ); 5708 break; 5709 case M_IsTristate : 5710 pRet->GenReturn ( RET_Value, aUId, comm_BOOL( pItem->IsStateTristate() ) ); 5711 break; 5712 case M_GetState : 5713 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( pItem->GetButtonFlags() & ~SV_STATE_MASK )); 5714 break; 5715 case M_Check : 5716 if ( !pItem->IsStateChecked() ) 5717 { 5718 pItem->SetStateChecked(); 5719 pTree->CheckButtonHdl(); 5720 pTree->InvalidateEntry( pThisEntry ); 5721 } 5722 break; 5723 case M_UnCheck : 5724 if ( pItem->IsStateChecked() || pItem->IsStateTristate() ) 5725 { 5726 pItem->SetStateUnchecked(); 5727 pTree->CheckButtonHdl(); 5728 pTree->InvalidateEntry( pThisEntry ); 5729 } 5730 break; 5731 case M_TriState : 5732 if ( !pItem->IsStateTristate() ) 5733 { 5734 pItem->SetStateTristate(); 5735 pTree->CheckButtonHdl(); 5736 pTree->InvalidateEntry( pThisEntry ); 5737 } 5738 break; 5739 default: 5740 ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); 5741 break; 5742 } 5743 } 5744 else 5745 ReportError( aUId, GEN_RES_STR1( S_NO_LIST_BOX_BUTTON, MethodString( nMethodId ) ) ); 5746 } 5747 } 5748 } 5749 break; 5750 case M_GetItemType : 5751 { 5752 SvTreeListBox *pTree = (SvTreeListBox*)pControl; 5753 SvLBoxEntry *pThisEntry = NULL; 5754 5755 if ( ! (nParams & PARAM_USHORT_1) ) 5756 { 5757 pThisEntry = pTree->GetCurEntry(); 5758 if ( !pThisEntry ) 5759 ReportError( aUId, GEN_RES_STR2c2( S_NO_SELECTED_ENTRY, MethodString( nMethodId ), "TreeListBox" ) ); 5760 } 5761 else 5762 { 5763 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) 5764 { 5765 pThisEntry = (SvLBoxEntry*)pTree->GetEntryAtVisPos( nNr1-1 ); 5766 } 5767 } 5768 5769 if ( pThisEntry ) 5770 { 5771 if ( ! (nParams & PARAM_USHORT_2) ) 5772 nNr2 = 1; 5773 if ( ValueOK( aUId, MethodString( nMethodId ),nNr2,pThisEntry->ItemCount() ) ) 5774 { 5775 SvLBoxItem *pMyItem = pThisEntry->GetItem( nNr2-1 ); 5776 comm_USHORT nType; 5777 switch ( pMyItem->IsA() ) 5778 { 5779 case SV_ITEM_ID_LBOXSTRING: nType = CONST_ItemTypeText ; break; 5780 case SV_ITEM_ID_LBOXBMP: nType = CONST_ItemTypeBMP ; break; 5781 case SV_ITEM_ID_LBOXBUTTON: nType = CONST_ItemTypeCheckbox ; break; 5782 case SV_ITEM_ID_LBOXCONTEXTBMP: nType = CONST_ItemTypeContextBMP ; break; 5783 default: nType = CONST_ItemTypeUnknown; 5784 } 5785 pRet->GenReturn ( RET_Value, aUId, nType ); 5786 } 5787 } 5788 } 5789 break; 5790 default: 5791 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "TreeListBox" ) ); 5792 break; 5793 } 5794 break; 5795 case C_Control: 5796 { 5797 sal_uInt16 nRealControlType = 0; 5798 if ( dynamic_cast< EditBrowseBox* >(pControl) ) 5799 nRealControlType = CONST_CTBrowseBox; 5800 else if ( dynamic_cast< ValueSet* >(pControl) ) 5801 nRealControlType = CONST_CTValueSet; 5802 else if ( dynamic_cast< ORoadmap* >(pControl) ) 5803 nRealControlType = CONST_CTORoadmap; 5804 else if ( dynamic_cast< IExtensionListBox* >(pControl) ) 5805 nRealControlType = CONST_CTIExtensionListBox; 5806 else if ( dynamic_cast< ::svt::table::TableControl* >(pControl) ) 5807 nRealControlType = CONST_CTTableControl; 5808 else 5809 nRealControlType = CONST_CTUnknown; 5810 5811 switch( nMethodId ) 5812 { 5813 case M_AnimateMouse : 5814 AnimateMouse( pControl, MitteOben); 5815 break; 5816 default: 5817 switch( nRealControlType ) 5818 { 5819 case CONST_CTBrowseBox: 5820 { 5821 EditBrowseBox* pEBBox = dynamic_cast< EditBrowseBox* >(pControl); 5822 switch( nMethodId ) 5823 { 5824 5825 5826 /* 5827 5828 5829 sal_Bool MakeFieldVisible( long nRow, sal_uInt16 nColId, sal_Bool bComplete = sal_False ); 5830 // access to dynamic values of cursor row 5831 String GetColumnTitle( sal_uInt16 nColumnId ) const; 5832 sal_uInt16 GetColumnId( sal_uInt16 nPos ) const; 5833 sal_uInt16 GetColumnPos( sal_uInt16 nColumnId ) const; 5834 // access and movement of cursor 5835 long GetCurRow() const { return nCurRow; } 5836 sal_uInt16 GetCurColumnId() const { return nCurColId; } 5837 sal_Bool GoToRow( long nRow ); 5838 sal_Bool GoToRowAndDoNotModifySelection( long nRow ); 5839 sal_Bool GoToColumnId( sal_uInt16 nColId ); 5840 sal_Bool GoToRowColumnId( long nRow, sal_uInt16 nColId ); 5841 // selections 5842 void SetNoSelection(); 5843 void SelectAll(); 5844 void SelectRow( long nRow, sal_Bool bSelect = sal_True, sal_Bool bExpand = sal_True ); 5845 void SelectColumnPos( sal_uInt16 nCol, sal_Bool bSelect = sal_True ) 5846 { SelectColumnPos( nCol, bSelect, sal_True); } 5847 void SelectColumnId( sal_uInt16 nColId, sal_Bool bSelect = sal_True ) 5848 { SelectColumnPos( GetColumnPos(nColId), bSelect, sal_True); } 5849 long GetSelectRowCount() const; 5850 sal_uInt16 GetSelectColumnCount() const; 5851 sal_Bool IsRowSelected( long nRow ) const; 5852 sal_Bool IsColumnSelected( sal_uInt16 nColumnId ) const; 5853 long FirstSelectedRow( sal_Bool bInverse = sal_False ); 5854 long LastSelectedRow( sal_Bool bInverse = sal_False ); 5855 long PrevSelectedRow(); 5856 long NextSelectedRow(); 5857 const MultiSelection* GetSelection() const 5858 { return bMultiSelection ? uRow.pSel : 0; } 5859 void SetSelection( const MultiSelection &rSelection ); 5860 5861 virtual String GetCellText(long _nRow, sal_uInt16 _nColId) const; 5862 sal_uInt16 GetColumnCount() const { return ColCount(); } 5863 protected: 5864 virtual long GetRowCount() const; 5865 5866 5867 EditBrowseBox 5868 5869 sal_Bool IsEditing() const {return aController.Is();} 5870 void InvalidateStatusCell(long nRow) {RowModified(nRow, 0);} 5871 void InvalidateHandleColumn(); 5872 5873 CellControllerRef Controller() const { return aController; } 5874 sal_Int32 GetBrowserFlags() const { return m_nBrowserFlags; } 5875 5876 virtual void ActivateCell(long nRow, sal_uInt16 nCol, sal_Bool bSetCellFocus = sal_True); 5877 virtual void DeactivateCell(sal_Bool bUpdate = sal_True); 5878 5879 5880 5881 */ 5882 case M_GetSelText : 5883 { 5884 pRet->GenReturn ( RET_Value, aUId, pEBBox->GetCellText( pEBBox->GetCurrRow(), pEBBox->GetColumnId( pEBBox->GetCurrColumn() ))); 5885 } 5886 break; 5887 case M_GetColumnCount : 5888 { 5889 sal_uInt16 nColCount = pEBBox->GetColumnCount(); 5890 comm_USHORT nUnfrozenColCount = 0; 5891 sal_uInt16 i; 5892 for ( i=0 ; i < nColCount ; i++ ) 5893 { 5894 if ( !pEBBox->IsFrozen( pEBBox->GetColumnId( i ) ) ) 5895 nUnfrozenColCount++; 5896 } 5897 pRet->GenReturn ( RET_Value, aUId, nUnfrozenColCount ); 5898 } 5899 break; 5900 case M_GetRowCount : 5901 { 5902 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pEBBox->GetRowCount() ); 5903 } 5904 break; 5905 case M_IsEditing : 5906 { 5907 CellControllerRef aControler; 5908 aControler = pEBBox->Controller(); 5909 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)aControler.Is() ); 5910 } 5911 break; 5912 case M_Select : 5913 { 5914 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,pEBBox->GetRowCount() ) ) 5915 { 5916 sal_uInt16 nColCount = pEBBox->GetColumnCount(); 5917 comm_USHORT nUnfrozenColCount = 0; 5918 sal_uInt16 i; 5919 for ( i=0 ; i < nColCount ; i++ ) 5920 { 5921 if ( !pEBBox->IsFrozen( pEBBox->GetColumnId( i ) ) ) 5922 nUnfrozenColCount++; 5923 } 5924 if ( ValueOK(aUId, MethodString( nMethodId ),nNr2,nUnfrozenColCount ) ) 5925 pEBBox->GoToRowColumnId( nNr1-1, pEBBox->GetColumnId( nNr2 ) ); 5926 } 5927 } 5928 break; 5929 5930 5931 5932 /* 5933 case M_GetSelCount : 5934 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(((SvLBox*)pControl)->GetSelectionCount())); 5935 break; 5936 case M_GetSelIndex : 5937 if ( ! (nParams & PARAM_USHORT_1) ) 5938 nNr1 = 1; 5939 if ( ValueOK(aUId, CUniString("GetSelIndex"),nNr1,((SvLBox*)pControl)->GetSelectionCount()) ) 5940 { 5941 nNr1--; 5942 COUNT_LBOX( FirstSelected, NextSelected, nNr1); 5943 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( ((SvTreeListBox*)pControl)->GetVisiblePos( pThisEntry )) +1 ); 5944 } 5945 break; 5946 case M_GetSelText : 5947 if ( ! (nParams & PARAM_USHORT_1) ) 5948 nNr1 = 1; 5949 if ( ValueOK(aUId, CUniString("GetSelText"),nNr1,((SvLBox*)pControl)->GetSelectionCount()) ) 5950 { 5951 nNr1--; 5952 COUNT_LBOX( FirstSelected, NextSelected, nNr1); 5953 GetFirstValidTextItem( pThisEntry ); 5954 pRet->GenReturn ( RET_Value, aUId, pItem->GetText() ); 5955 } 5956 break; 5957 case M_GetItemCount : 5958 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(((SvLBox*)pControl)->GetVisibleCount()) ); 5959 break; 5960 case M_GetItemText : 5961 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) 5962 { 5963 SvLBoxEntry *pEntry = (SvLBoxEntry*)((SvTreeListBox*)pControl)->GetEntryAtVisPos( nNr1-1 ); 5964 GetFirstValidTextItem( pEntry ); 5965 pRet->GenReturn ( RET_Value, aUId, pItem->GetText() ); 5966 } 5967 break; 5968 case M_Select : 5969 if ( ! (nParams & PARAM_BOOL_1) ) 5970 bBool1 = sal_True; 5971 if( nParams & PARAM_STR_1 ) 5972 { 5973 / * ListBox *pLB = ((ListBox*)pControl); 5974 if ( pLB->GetEntryPos( aString1 ) == LISTBOX_ENTRY_NOTFOUND ) 5975 ReportError( aUId, GEN_RES_STR2( S_ENTRY_NOT_FOUND, MethodString( nMethodId ), aString1 ) ); 5976 else 5977 { 5978 pLB->SelectEntry( aString1, bBool1 ); 5979 if ( pLB->IsEntrySelected( aString1 ) ? !bBool1 : bBool1 ) // XOR rein mit BOOL 5980 ReportError( aUId, GEN_RES_STR2( S_METHOD_FAILED, MethodString( nMethodId ), aString1 ) ); 5981 } 5982 * / ReportError( aUId, GEN_RES_STR1( S_SELECT_DESELECT_VIA_STRING_NOT_IMPLEMENTED, MethodString( nMethodId ) ) ); 5983 } 5984 else 5985 { 5986 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) 5987 { 5988 SvLBoxEntry *pEntry = (SvLBoxEntry*)((SvTreeListBox*)pControl)->GetEntryAtVisPos( nNr1-1 ); 5989 ((SvTreeListBox*)pControl)->Select ( pEntry, bBool1 ); 5990 } 5991 } 5992 break;*/ 5993 default: 5994 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "EditBrowseBox" ) ); 5995 break; 5996 } 5997 } 5998 break; 5999 case CONST_CTValueSet: 6000 { 6001 ValueSet *pVS = dynamic_cast< ValueSet* >(pControl); 6002 switch ( nMethodId ) 6003 { 6004 case M_GetItemCount: 6005 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( pVS->GetItemCount())); 6006 break; 6007 case M_GetItemText: 6008 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pVS->GetItemCount() )) 6009 pRet->GenReturn ( RET_Value, aUId, pVS->GetItemText( pVS->GetItemId( nNr1-1 ) ) ); 6010 break; 6011 case M_Select: 6012 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pVS->GetItemCount() )) 6013 pVS->SelectItem( pVS->GetItemId( nNr1-1 ) ); 6014 break; 6015 case M_GetSelIndex : 6016 if ( pVS->IsNoSelection() ) 6017 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(0)); 6018 else 6019 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( pVS->GetItemPos( pVS->GetSelectItemId() ) +1)); 6020 break; 6021 case M_GetSelText : 6022 if ( pVS->IsNoSelection() ) 6023 pRet->GenReturn ( RET_Value, aUId, String() ); 6024 else 6025 pRet->GenReturn ( RET_Value, aUId, pVS->GetItemText( pVS->GetSelectItemId() ) ); 6026 break; 6027 case M_SetNoSelection : 6028 pVS->SetNoSelection(); 6029 break; 6030 default: 6031 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ValueSet" ) ); 6032 break; 6033 } 6034 } 6035 break; 6036 case CONST_CTORoadmap: 6037 { 6038 ORoadmap *pRM = dynamic_cast< ORoadmap* >(pControl); 6039 switch ( nMethodId ) 6040 { 6041 case M_GetItemCount: 6042 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( pRM->GetItemCount())); 6043 break; 6044 case M_GetItemText: 6045 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pRM->GetItemCount() )) 6046 pRet->GenReturn ( RET_Value, aUId, pRM->GetRoadmapItemLabel( pRM->GetItemID( nNr1-1 ) ) ); 6047 break; 6048 case M_Select: 6049 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pRM->GetItemCount() )) 6050 { 6051 if ( pRM->IsRoadmapItemEnabled( pRM->GetItemID( nNr1-1 ) ) ) 6052 pRM->SelectRoadmapItemByID( pRM->GetItemID( nNr1-1 ) ); 6053 else 6054 ReportError( aUId, GEN_RES_STR1c( S_WIN_DISABLED, "RoadmapItem" ) ); 6055 } 6056 break; 6057 case M_GetSelIndex : 6058 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( pRM->GetItemIndex( pRM->GetCurrentRoadmapItemID() ) +1)); 6059 break; 6060 case M_GetSelText : 6061 pRet->GenReturn ( RET_Value, aUId, pRM->GetRoadmapItemLabel( pRM->GetCurrentRoadmapItemID() ) ); 6062 break; 6063 case M_IsItemEnabled : 6064 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pRM->GetItemCount() )) 6065 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)pRM->IsRoadmapItemEnabled( pRM->GetItemID( nNr1-1 ) ) ); 6066 break; 6067 default: 6068 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "RoadMap" ) ); 6069 break; 6070 } 6071 } 6072 break; 6073 case CONST_CTIExtensionListBox: 6074 { 6075 IExtensionListBox *pELB = dynamic_cast< IExtensionListBox* >(pControl); 6076 switch ( nMethodId ) 6077 { 6078 case M_GetItemCount: 6079 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( pELB->getItemCount())); 6080 break; 6081 case M_GetItemText: 6082 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pELB->getItemCount() )) 6083 switch ( nNr2 ) 6084 { 6085 case 1: 6086 pRet->GenReturn ( RET_Value, aUId, pELB->getItemName( nNr1 -1 ) ); 6087 break; 6088 case 2: 6089 pRet->GenReturn ( RET_Value, aUId, pELB->getItemVersion( nNr1 -1 ) ); 6090 break; 6091 case 3: 6092 pRet->GenReturn ( RET_Value, aUId, pELB->getItemDescription( nNr1 -1 ) ); 6093 break; 6094 case 4: 6095 pRet->GenReturn ( RET_Value, aUId, pELB->getItemPublisher( nNr1 -1 ) ); 6096 break; 6097 case 5: 6098 pRet->GenReturn ( RET_Value, aUId, pELB->getItemPublisherLink( nNr1 -1 ) ); 6099 break; 6100 default: 6101 ValueOK( aUId, MethodString( nMethodId ).AppendAscii(" String Number"), nNr2, 5 ); 6102 } 6103 break; 6104 case M_Select: 6105 if ( (nParams & PARAM_USHORT_1) ) 6106 { 6107 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pELB->getItemCount() )) 6108 { 6109 pELB->select( nNr1-1 ); 6110 } 6111 } 6112 else if ( (nParams & PARAM_STR_1) ) 6113 { 6114 pELB->select( aString1 ); 6115 sal_Bool bSuccess = sal_True; 6116 if ( pELB->getSelIndex() == EXTENSION_LISTBOX_ENTRY_NOTFOUND ) 6117 bSuccess = sal_False; 6118 else 6119 { 6120 if ( !aString1.Equals( String( pELB->getItemName( pELB->getSelIndex() ) ) ) ) 6121 bSuccess = sal_False; 6122 } 6123 if ( !bSuccess ) 6124 ReportError( aUId, GEN_RES_STR2( S_ENTRY_NOT_FOUND, MethodString( nMethodId ), aString1 ) ); 6125 } 6126 break; 6127 case M_GetSelCount : 6128 if ( pELB->getSelIndex() == EXTENSION_LISTBOX_ENTRY_NOTFOUND ) 6129 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( 0 )); 6130 else 6131 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( 1 )); 6132 break; 6133 case M_GetSelIndex : 6134 if ( pELB->getSelIndex() == EXTENSION_LISTBOX_ENTRY_NOTFOUND ) 6135 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( 0 )); 6136 else 6137 pRet->GenReturn ( RET_Value, aUId, comm_ULONG( pELB->getSelIndex() +1)); 6138 break; 6139 /* xxxcase M_SetNoSelection : 6140 ((ListBox*)pControl)->SetNoSelection(); 6141 ((ListBox*)pControl)->Select(); 6142 break; */ 6143 default: 6144 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "RoadMap" ) ); 6145 break; 6146 } 6147 } 6148 break; 6149 6150 case CONST_CTTableControl: 6151 { 6152 ::svt::table::TableControl *pTC = dynamic_cast< ::svt::table::TableControl* >(pControl); 6153 switch ( nMethodId ) 6154 { 6155 case M_GetItemType : 6156 { 6157 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pTC->GetColumnCount() ) && 6158 ValueOK( aUId, MethodString( nMethodId ), nNr2, pTC->GetRowCount() )) 6159 { 6160 ::svt::table::PTableModel pModel = pTC->GetModel(); 6161 Any aCell; 6162 pModel->getCellContent( nNr1-1, nNr2-1, aCell ); 6163 pRet->GenReturn ( RET_Value, aUId, String( aCell.getValueTypeName() )); 6164 } 6165 } 6166 break; 6167 case M_GetItemText : 6168 { 6169 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pTC->GetColumnCount() ) && 6170 ValueOK( aUId, MethodString( nMethodId ), nNr2, pTC->GetRowCount() )) 6171 { 6172 ::svt::table::PTableModel pModel = pTC->GetModel(); 6173 Any aCell; 6174 pModel->getCellContent( nNr1-1, nNr2-1, aCell ); 6175 /* doesn't work ATM since it gets casted to SbxDATE in VCLTestTool unfortunately 6176 SbxVariableRef xRes = new SbxVariable( SbxVARIANT ); 6177 unoToSbxValue( xRes, aCell ); 6178 pRet->GenReturn ( RET_Value, aUId, *xRes );*/ 6179 6180 Type aType = aCell.getValueType(); 6181 TypeClass eTypeClass = aType.getTypeClass(); 6182 switch( eTypeClass ) 6183 { 6184 /*case TypeClass_ENUM: 6185 { 6186 sal_Int32 nEnum = 0; 6187 enum2int( nEnum, aValue ); 6188 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)nEnum ); 6189 } 6190 break;*/ 6191 case TypeClass_BOOLEAN: 6192 pRet->GenReturn ( RET_Value, aUId, *(sal_Bool*)aCell.getValue() ); 6193 break; 6194 case TypeClass_CHAR: 6195 { 6196 ::rtl::OUString aContent( *(sal_Unicode*)aCell.getValue() ); 6197 pRet->GenReturn ( RET_Value, aUId, aContent ); 6198 } 6199 break; 6200 case TypeClass_STRING: 6201 { 6202 ::rtl::OUString aContent; 6203 aCell >>= aContent; 6204 pRet->GenReturn ( RET_Value, aUId, aContent ); 6205 } 6206 break; 6207 //case TypeClass_FLOAT: break; 6208 //case TypeClass_DOUBLE: break; 6209 //case TypeClass_OCTET: break; 6210 case TypeClass_BYTE: 6211 case TypeClass_SHORT: 6212 case TypeClass_LONG: 6213 case TypeClass_HYPER: 6214 case TypeClass_UNSIGNED_LONG: 6215 case TypeClass_UNSIGNED_HYPER: 6216 { 6217 comm_ULONG val = 0; 6218 aCell >>= val; 6219 pRet->GenReturn ( RET_Value, aUId, val ); 6220 } 6221 break; 6222 //case TypeClass_UNSIGNED_OCTET:break; 6223 case TypeClass_UNSIGNED_SHORT: 6224 { 6225 comm_USHORT val = 0; 6226 aCell >>= val; 6227 pRet->GenReturn ( RET_Value, aUId, val ); 6228 } 6229 break; 6230 default: 6231 pRet->GenReturn ( RET_Value, aUId, comm_USHORT(0) ); 6232 break; 6233 } 6234 } 6235 } 6236 break; 6237 case M_GetColumnCount : 6238 { 6239 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pTC->GetColumnCount() ); 6240 } 6241 break; 6242 case M_GetRowCount : 6243 { 6244 pRet->GenReturn ( RET_Value, aUId, (comm_ULONG)pTC->GetRowCount() ); 6245 } 6246 break; 6247 case M_Select : 6248 { 6249 if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pTC->GetRowCount() )) 6250 { 6251 if ( pTC->GoToRow( ::svt::table::RowPos( nNr1-1 ) ) ) 6252 { 6253 Size aSize( pTC->GetSizePixel() ); 6254 // DirectLog( S_QAError, UniString::CreateFromInt32( aSize.Width() ).Append( UniString::CreateFromInt32( aSize.Height() ) ) ); 6255 Point aPos( aSize.Width() / 2, aSize.Height() / 2 ); 6256 long nStep = aSize.Height() / 4; 6257 ::svt::table::RowPos nLastPos; 6258 while ( ( nLastPos = pTC->getTableControlInterface().hitTest( aPos ).nRow ) != nNr1-1 && nStep > 0 ) 6259 { 6260 if ( nLastPos > nNr1-1 || nLastPos == ROW_INVALID ) 6261 aPos.Y() -= nStep; 6262 else 6263 aPos.Y() += nStep; 6264 nStep /= 2; 6265 } 6266 if ( pTC->getTableControlInterface().hitTest( aPos ).nRow == nNr1-1 ) 6267 { 6268 MouseEvent aMEvnt(aPos,1,MOUSE_SIMPLECLICK|MOUSE_SELECT,MOUSE_LEFT,KEY_MOD1); 6269 pTC->getSelEngine()->SelMouseButtonDown( aMEvnt ); 6270 pTC->getSelEngine()->SelMouseButtonUp( aMEvnt ); 6271 if ( pTC->IsRowSelected( nNr1-1 ) ) 6272 pTC->Select(); 6273 } 6274 else 6275 ReportError( aUId, GEN_RES_STR2c2( S_METHOD_FAILED, MethodString( nMethodId ), "find pos" ) ); 6276 } 6277 else 6278 ReportError( aUId, GEN_RES_STR2c2( S_METHOD_FAILED, MethodString( nMethodId ), "GoTo" ) ); 6279 } 6280 } 6281 break; 6282 case M_GetSelCount : 6283 pRet->GenReturn ( RET_Value, aUId, comm_USHORT( pTC->GetSelectedRowCount() )); 6284 break; 6285 case M_GetSelIndex : 6286 if ( ! (nParams & PARAM_USHORT_1) ) 6287 nNr1 = 1; 6288 if ( ValueOK( aUId, CUniString("GetSelIndex"), nNr1, pTC->GetSelectedRowCount() ) ) 6289 pRet->GenReturn ( RET_Value, aUId, comm_USHORT( pTC->GetSelectedRowIndex( nNr1-1 ) +1 ) ); 6290 break; 6291 /* case M_GetSelText : 6292 if ( ! (nParams & PARAM_USHORT_1) ) 6293 nNr1 = 1; 6294 if ( ValueOK(aUId, CUniString("GetSelText"),nNr1,((SvLBox*)pControl)->GetSelectionCount()) ) 6295 { 6296 nNr1--; 6297 COUNT_LBOX( FirstSelected, NextSelected, nNr1); 6298 GetFirstValidTextItem( pThisEntry ); 6299 pRet->GenReturn ( RET_Value, aUId, pItem->GetText() ); 6300 } 6301 break; 6302 */ 6303 default: 6304 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "TableControl" ) ); 6305 break; 6306 } 6307 } 6308 break; 6309 6310 case CONST_CTUnknown: 6311 ReportError( aUId, GEN_RES_STR2( S_UNKNOWN_TYPE, UniString::CreateFromInt32( nRT ), MethodString(nMethodId) ) ); 6312 break; 6313 default: 6314 ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); 6315 break; 6316 } 6317 } 6318 break; 6319 } 6320 case C_Window: 6321 switch( nMethodId ) 6322 { 6323 case M_AnimateMouse : 6324 AnimateMouse( pControl, MitteOben); 6325 break; 6326 default: 6327 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "Window" ) ); 6328 break; 6329 } 6330 break; 6331 6332 case C_DockingWin: 6333 DockingWin: 6334 switch( nMethodId ) 6335 { 6336 case M_AnimateMouse : 6337 AnimateMouse( pControl, MitteOben); 6338 break; 6339 case M_Dock : 6340 if ( ((DockingWindow*)pControl)->IsFloatingMode() ) 6341 ((DockingWindow*)pControl)->SetFloatingMode(sal_False); 6342 else 6343 ReportError( aUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_FLOATING_MODE, MethodString( nMethodId ) ) ); 6344 break; 6345 case M_Undock : 6346 if ( !((DockingWindow*)pControl)->IsFloatingMode() ) 6347 ((DockingWindow*)pControl)->SetFloatingMode(sal_True); 6348 else 6349 ReportError( aUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_FLOATING_MODE, MethodString( nMethodId ) ) ); 6350 break; 6351 case M_IsDocked : 6352 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL) !((DockingWindow*)pControl)->IsFloatingMode()); 6353 break; 6354 case M_Close: 6355 //aWindowWaitUId = aUId; 6356 DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); 6357 SET_WINP_CLOSING(pControl); 6358 ((DockingWindow*)pControl)->Close(); 6359 break; 6360 case M_Size: 6361 case M_Move: 6362 case M_IsMax: 6363 case M_Minimize: 6364 case M_Maximize: 6365 if ( ((DockingWindow*)pControl)->IsFloatingMode() ) 6366 { 6367 Window* pFloat = ((DockingWindow*)pControl)->GetFloatingWindow(); 6368 if ( !pFloat && ((DockingWindow*)pControl)->IsFloatingMode() ) 6369 { 6370 if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) 6371 pFloat = pControl->GET_REAL_PARENT(); 6372 else 6373 { 6374 DBG_ERROR("FloatingMode set but Parent is no FloatingWindow"); 6375 } 6376 } 6377 if ( pFloat && pFloat->GetType() == WINDOW_FLOATINGWINDOW ) 6378 { 6379 pControl = pFloat; 6380 goto FloatWin; 6381 } 6382 else 6383 ReportError( aUId, GEN_RES_STR1( S_CANNOT_FIND_FLOATING_WIN, MethodString( nMethodId ) ) ); 6384 } 6385 else 6386 ReportError( aUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_DOCKING_MODE, MethodString( nMethodId ) ) ); 6387 break; 6388 case M_Help: // Alles was unten weiterbehandelt werden soll 6389 goto MoreDialog; 6390 6391 default: 6392 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "DockingWindow" ) ); 6393 break; 6394 } 6395 break; 6396 case C_FloatWin: 6397 FloatWin: 6398 switch( nMethodId ) 6399 { 6400 case M_AnimateMouse : 6401 AnimateMouse( pControl, MitteOben); 6402 break; 6403 case M_IsMax : 6404 pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)!((FloatingWindow*)pControl)->IsRollUp()); 6405 break; 6406 case M_Minimize : 6407 ((FloatingWindow*)pControl)->RollUp(); 6408 break; 6409 case M_Maximize : 6410 ((FloatingWindow*)pControl)->RollDown(); 6411 break; 6412 case M_Size: 6413 { 6414 if ( pControl->GetStyle() & WB_SIZEABLE ) 6415 { 6416 Size aMin = ((FloatingWindow*)pControl)->GetMinOutputSizePixel(); 6417 if ( aMin.Width() <= nNr1 && aMin.Height() <= nNr2 ) 6418 { 6419 pControl->SetSizePixel(Size(nNr1,nNr2)); 6420 pControl->Resize(); 6421 } 6422 else 6423 { 6424 ReportError( aUId, GEN_RES_STR2( S_SIZE_BELOW_MINIMUM, String::CreateFromInt32( aMin.Width() ), String::CreateFromInt32( aMin.Height() ) ) ); 6425 } 6426 } 6427 else 6428 ReportError( aUId, GEN_RES_STR1( S_SIZE_NOT_CHANGEABLE, MethodString( nMethodId ) ) ); 6429 break; 6430 } 6431 case M_Close: 6432 DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); 6433 SET_WINP_CLOSING(pControl); 6434 ((FloatingWindow*)pControl)->Close(); 6435 break; 6436 case M_Help: // Alles was unten weiterbehandelt werden soll 6437 case M_Move: 6438 goto MoreDialog; 6439 default: 6440 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "FloatingWin" ) ); 6441 break; 6442 } 6443 break; 6444 case C_ModelessDlg: 6445 case C_ModalDlg: 6446 case C_Dialog: 6447 case C_TabDlg: 6448 MoreDialog: 6449 switch( nMethodId ) 6450 { 6451 case M_AnimateMouse : 6452 AnimateMouse( pControl, MitteOben); 6453 break; 6454 case M_Close: 6455 DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); 6456 SET_WINP_CLOSING(pControl); 6457 ((SystemWindow*)pControl)->Close(); 6458 break; 6459 case M_OK: 6460 { 6461 Window *pChild = GetWinByRT( pControl, WINDOW_OKBUTTON ); 6462 if( ControlOK( pChild, "OK Button" ) ) 6463 { 6464 DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); 6465 SET_WINP_CLOSING(pControl); 6466 ((Button*)pChild)->Click(); 6467 } 6468 break; 6469 } 6470 case M_Cancel: 6471 { 6472 Window *pChild = GetWinByRT( pControl, WINDOW_CANCELBUTTON ); 6473 if( ControlOK( pChild, "Cancel Button" ) ) 6474 { 6475 DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); 6476 SET_WINP_CLOSING(pControl); 6477 ((Button*)pChild)->Click(); 6478 } 6479 break; 6480 } 6481 case M_Help: 6482 { 6483 Window *pChild = GetWinByRT( pControl, WINDOW_HELPBUTTON ); 6484 if( ControlOK( pChild, "Help Button" ) ) 6485 ((Button*)pChild)->Click(); 6486 break; 6487 } 6488 case M_Default: 6489 { 6490 Window *pChild = ImpGetButton( pControl, WB_DEFBUTTON, WB_DEFBUTTON ); 6491 if( ControlOK( pChild, "Default Button" ) ) 6492 ((Button*)pChild)->Click(); 6493 break; 6494 } 6495 case M_Move: 6496 { 6497 pControl->SetPosPixel(Point(nNr1,nNr2)); 6498 break; 6499 } 6500 default: 6501 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "Dialog" ) ); 6502 break; 6503 } 6504 break; 6505 case C_WorkWin: 6506 switch( nMethodId ) 6507 { 6508 case M_AnimateMouse : 6509 AnimateMouse( pControl, MitteOben); 6510 break; 6511 case M_Close: 6512 DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); 6513 SET_WINP_CLOSING(pControl); 6514 ((WorkWindow*)pControl)->Close(); 6515 break; 6516 case M_Size: 6517 case M_Move: 6518 goto FloatWin; 6519 // break; 6520 case M_IsMax : 6521 pRet->GenReturn ( RET_Value, aUId, ((WorkWindow*)pControl)->IsMaximized() ); 6522 break; 6523 case M_IsMin : 6524 pRet->GenReturn ( RET_Value, aUId, ((WorkWindow*)pControl)->IsMinimized() ); 6525 break; 6526 case M_IsRestore : 6527 pRet->GenReturn ( RET_Value, aUId, comm_BOOL (!((WorkWindow*)pControl)->IsMaximized() && !((WorkWindow*)pControl)->IsMinimized()) ); 6528 break; 6529 case M_Minimize : 6530 ((WorkWindow*)pControl)->Maximize( sal_False ); 6531 ((WorkWindow*)pControl)->Minimize(); 6532 break; 6533 case M_Maximize : 6534 ((WorkWindow*)pControl)->Maximize(); 6535 break; 6536 case M_Restore : 6537 ((WorkWindow*)pControl)->Maximize( sal_False ); 6538 ((WorkWindow*)pControl)->Restore(); 6539 break; 6540 case M_Help: // Alles was unten weiterbehandelt werden soll 6541 goto MoreDialog; 6542 default: 6543 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "WorkWindow" ) ); 6544 break; 6545 } 6546 break; 6547 case C_TabPage: 6548 ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); 6549 break; 6550 case C_MessBox: 6551 case C_InfoBox: 6552 case C_WarningBox: 6553 case C_ErrorBox: 6554 case C_QueryBox: 6555 { 6556 sal_Bool bDone = sal_True; 6557 MessBox* pMB = (MessBox*)pControl; 6558 switch( nMethodId ) 6559 { 6560 case M_GetCheckBoxText: 6561 pRet->GenReturn ( RET_Value, aUId, pMB->GetCheckBoxText() ); 6562 break; 6563 case M_IsChecked : 6564 pRet->GenReturn ( RET_Value, aUId, comm_BOOL( pMB->GetCheckBoxState() == STATE_CHECK) ); 6565 break; 6566 case M_Check : 6567 pMB->SetCheckBoxState( sal_True ); 6568 break; 6569 case M_UnCheck : 6570 pMB->SetCheckBoxState( sal_False ); 6571 break; 6572 case M_GetText : 6573 pRet->GenReturn ( RET_Value, aUId, pMB->GetMessText()); 6574 break; 6575 6576 default: 6577 bDone = sal_False; 6578 break; 6579 } 6580 if ( bDone ) 6581 break; // break the case here else continue at C_ButtonDialog 6582 } 6583 case C_ButtonDialog: 6584 { 6585 ButtonDialog* pBD = (ButtonDialog*)pControl; 6586 #if OSL_DEBUG_LEVEL > 1 6587 m_pDbgWin->AddText( "Working MessBox: " ); 6588 if (pControl->IsVisible()) 6589 m_pDbgWin->AddText("*(Visible)\n"); 6590 else 6591 m_pDbgWin->AddText("*(nicht Visible)\n"); 6592 #endif 6593 switch( nMethodId ) 6594 { 6595 case M_AnimateMouse : 6596 AnimateMouse( pControl, Mitte); 6597 break; 6598 case M_OK: 6599 if ( pBD->GetPushButton( BUTTONID_OK ) ) 6600 { 6601 SET_WINP_CLOSING(pControl); 6602 pBD->EndDialog(RET_OK); 6603 } 6604 else 6605 ReportError( aUId, GEN_RES_STR1( S_NO_OK_BUTTON, MethodString( nMethodId ) ) ); 6606 break; 6607 case M_Cancel: 6608 if ( pBD->GetPushButton( BUTTONID_CANCEL ) ) 6609 { 6610 SET_WINP_CLOSING(pControl); 6611 pBD->EndDialog(RET_CANCEL); 6612 } 6613 else 6614 ReportError( aUId, GEN_RES_STR1( S_NO_CANCEL_BUTTON, MethodString( nMethodId ) ) ); 6615 break; 6616 case M_Yes: 6617 if ( pBD->GetPushButton( BUTTONID_YES ) ) 6618 { 6619 SET_WINP_CLOSING(pControl); 6620 pBD->EndDialog(RET_YES); 6621 } 6622 else 6623 ReportError( aUId, GEN_RES_STR1( S_NO_YES_BUTTON, MethodString( nMethodId ) ) ); 6624 break; 6625 case M_No: 6626 if ( pBD->GetPushButton( BUTTONID_NO ) ) 6627 { 6628 SET_WINP_CLOSING(pControl); 6629 pBD->EndDialog(RET_NO); 6630 } 6631 else 6632 ReportError( aUId, GEN_RES_STR1( S_NO_NO_BUTTON, MethodString( nMethodId ) ) ); 6633 break; 6634 case M_Repeat: 6635 if ( pBD->GetPushButton( BUTTONID_RETRY ) ) 6636 { 6637 SET_WINP_CLOSING(pControl); 6638 pBD->EndDialog(RET_RETRY); 6639 } 6640 else 6641 ReportError( aUId, GEN_RES_STR1( S_NO_RETRY_BUTTON, MethodString( nMethodId ) ) ); 6642 break; 6643 case M_Help: 6644 if ( pBD->GetPushButton( BUTTONID_HELP ) ) 6645 { 6646 SET_WINP_CLOSING(pControl); 6647 pBD->EndDialog(BUTTONID_HELP); 6648 } 6649 else 6650 ReportError( aUId, GEN_RES_STR1( S_NO_HELP_BUTTON, MethodString( nMethodId ) ) ); 6651 break; 6652 case M_Default: 6653 { 6654 WinBits Style = pControl->GetStyle(); 6655 if ( Style & WB_DEF_OK ) 6656 { 6657 SET_WINP_CLOSING(pControl); 6658 pBD->EndDialog(RET_OK); 6659 } 6660 else if ( Style & WB_DEF_CANCEL ) 6661 { 6662 SET_WINP_CLOSING(pControl); 6663 pBD->EndDialog(RET_CANCEL); 6664 } 6665 else if ( Style & WB_DEF_YES ) 6666 { 6667 SET_WINP_CLOSING(pControl); 6668 pBD->EndDialog(RET_YES); 6669 } 6670 else if ( Style & WB_DEF_NO ) 6671 { 6672 SET_WINP_CLOSING(pControl); 6673 pBD->EndDialog(RET_NO); 6674 } 6675 else if ( Style & WB_DEF_RETRY ) 6676 { 6677 SET_WINP_CLOSING(pControl); 6678 pBD->EndDialog(RET_RETRY); 6679 } 6680 else 6681 ReportError( aUId, GEN_RES_STR1( S_NO_DEFAULT_BUTTON, MethodString( nMethodId ) ) ); 6682 } 6683 break; 6684 case M_GetText : 6685 pRet->GenReturn ( RET_Value, aUId, pControl->GetText()); 6686 break; 6687 case M_Click: 6688 if ( nParams & PARAM_USHORT_1 ) 6689 { 6690 if ( pBD->GetPushButton( nNr1 ) ) 6691 { 6692 if ( nNr1 != BUTTONID_HELP ) 6693 { 6694 SET_WINP_CLOSING(pControl); 6695 } 6696 pBD->GetPushButton( nNr1 )->Click(); 6697 } 6698 else 6699 ReportError( aUId, GEN_RES_STR2( S_NO_DEFAULT_BUTTON, UniString::CreateFromInt32( nNr1 ), MethodString( nMethodId ) ) ); 6700 } 6701 else 6702 ReportError( aUId, GEN_RES_STR1( S_BUTTONID_REQUIRED, MethodString( nMethodId ) ) ); 6703 break; 6704 case M_GetButtonCount : 6705 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(pBD->GetButtonCount())); 6706 break; 6707 case M_GetButtonId : 6708 if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,pBD->GetButtonCount()) ) 6709 pRet->GenReturn ( RET_Value, aUId, comm_ULONG(pBD->GetButtonId(nNr1-1))); 6710 break; 6711 default: 6712 ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MessageBox" ) ); 6713 break; 6714 } 6715 break; 6716 } 6717 default: 6718 DBG_ERROR( "Unknown Objekttype from UId or Method not suported" ); 6719 ReportError( aUId, GEN_RES_STR2( S_UNKNOWN_TYPE, UniString::CreateFromInt32( nRT ), MethodString(nMethodId) ) ); 6720 #if OSL_DEBUG_LEVEL > 1 6721 m_pDbgWin->AddText( " Unknown Objekttype from UId or Method not suported" ); 6722 #endif 6723 break; 6724 } 6725 } 6726 for( int i = 0; i < 32; i++ ) 6727 SafeReschedule(); 6728 } 6729 #if OSL_DEBUG_LEVEL > 1 6730 m_pDbgWin->AddText( "\n" ); 6731 #endif 6732 if ( bStatementDone ) 6733 { 6734 SendProfile( UIdString( aUId ).Append('.').Append( MethodString( nMethodId ) ) ); 6735 delete this; 6736 } 6737 else 6738 { 6739 if ( nRetryCount-- ) 6740 { 6741 #if OSL_DEBUG_LEVEL > 1 6742 m_pDbgWin->AddText( CUniString("Reschedule command (requed) (").Append( UniString::CreateFromInt32(nRetryCount) ).AppendAscii(")\n") ); 6743 #endif 6744 QueStatement( this ); // will que at the start of the list 6745 } 6746 else 6747 { 6748 bStatementDone=sal_True; 6749 } 6750 } 6751 return bStatementDone; 6752 6753 #define FINISH_NEXT 6754 #define FINISH_SAME 6755 6756 } 6757