1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_automation.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir // do not use Application Idle but AutoTimer instead 32*cdf0e10cSrcweir #define TIMERIDLE 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #define NO_JPEG 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir #ifndef NO_JPEG 37*cdf0e10cSrcweir #include <svtools/jpeg.hxx> 38*cdf0e10cSrcweir #endif 39*cdf0e10cSrcweir #include <vcl/timer.hxx> 40*cdf0e10cSrcweir #include <vcl/wrkwin.hxx> 41*cdf0e10cSrcweir #include <osl/diagnose.h> 42*cdf0e10cSrcweir #include <osl/mutex.hxx> 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir #ifndef _DIALOG_HXX //autogen 45*cdf0e10cSrcweir #include <vcl/dialog.hxx> 46*cdf0e10cSrcweir #endif 47*cdf0e10cSrcweir #include <tools/stream.hxx> 48*cdf0e10cSrcweir #include <tools/config.hxx> 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir #include <vos/socket.hxx> 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir #if 1 53*cdf0e10cSrcweir #include <svtools/ttprops.hxx> 54*cdf0e10cSrcweir #include <basic/ttstrhlp.hxx> 55*cdf0e10cSrcweir #include <svl/stritem.hxx> 56*cdf0e10cSrcweir #include <svtools/stringtransfer.hxx> 57*cdf0e10cSrcweir #include <vcl/sound.hxx> 58*cdf0e10cSrcweir #include "testtool.hrc" 59*cdf0e10cSrcweir #include <vcl/bitmap.hxx> 60*cdf0e10cSrcweir // Hat keinen Includeschutz 61*cdf0e10cSrcweir #include <svtools/svtdata.hxx> 62*cdf0e10cSrcweir //#ifndef _DTRANS_HXX //autogen 63*cdf0e10cSrcweir //#include <so2/dtrans.hxx> 64*cdf0e10cSrcweir //#endif 65*cdf0e10cSrcweir #endif // 1 66*cdf0e10cSrcweir #include <rtl/textenc.h> 67*cdf0e10cSrcweir #include <rtl/uri.h> 68*cdf0e10cSrcweir #include <rtl/uri.hxx> 69*cdf0e10cSrcweir #include "statemnt.hxx" 70*cdf0e10cSrcweir #include "scmdstrm.hxx" 71*cdf0e10cSrcweir #include "rcontrol.hxx" 72*cdf0e10cSrcweir #include "server.hxx" 73*cdf0e10cSrcweir #include "testtool.hxx" 74*cdf0e10cSrcweir #include "automation/automation.hxx" 75*cdf0e10cSrcweir #include "recorder.hxx" 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir #include "basic/svtmsg.hrc" 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir #ifdef DBG_UTIL 80*cdf0e10cSrcweir void TestToolDebugPrint( const sal_Char *pString ) 81*cdf0e10cSrcweir { 82*cdf0e10cSrcweir if ( !DbgFilterMessage( pString ) ) 83*cdf0e10cSrcweir StatementList::DirectLog( S_AssertError, UniString( pString, RTL_TEXTENCODING_UTF8 ) ); 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir void SAL_CALL osl_TestToolDebugPrint( const sal_Char *pString ) 86*cdf0e10cSrcweir { 87*cdf0e10cSrcweir TestToolDebugPrint( pString ); 88*cdf0e10cSrcweir } 89*cdf0e10cSrcweir #endif 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir sal_uLong RemoteControlCommunicationManager::nPortIs = TT_PORT_NOT_INITIALIZED; 93*cdf0e10cSrcweir sal_uInt16 RemoteControlCommunicationManager::nComm = 0; 94*cdf0e10cSrcweir sal_Bool RemoteControlCommunicationManager::bQuiet = sal_False; 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 97*cdf0e10cSrcweir RemoteControlCommunicationManager::RemoteControlCommunicationManager( EditWindow * pDbgWin ) 98*cdf0e10cSrcweir #else 99*cdf0e10cSrcweir RemoteControlCommunicationManager::RemoteControlCommunicationManager() 100*cdf0e10cSrcweir #endif 101*cdf0e10cSrcweir : CommunicationManagerServerViaSocket( GetPort(), 1, sal_True ) 102*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 103*cdf0e10cSrcweir , m_pDbgWin( pDbgWin ) 104*cdf0e10cSrcweir #endif 105*cdf0e10cSrcweir , pTimer( NULL ) 106*cdf0e10cSrcweir { 107*cdf0e10cSrcweir bIsPortValid = ( GetPort() != 0 ); 108*cdf0e10cSrcweir if ( bQuiet ) 109*cdf0e10cSrcweir { 110*cdf0e10cSrcweir SetInfoType( CM_NO_TEXT ); 111*cdf0e10cSrcweir } 112*cdf0e10cSrcweir else 113*cdf0e10cSrcweir { 114*cdf0e10cSrcweir SetInfoType( CM_SHORT_TEXT | CM_ALL ); 115*cdf0e10cSrcweir ByteString aByteString; 116*cdf0e10cSrcweir InfoMsg( InfoString( aByteString, CM_ALL ) ); // Anzeigen, da� wir da sind 117*cdf0e10cSrcweir } 118*cdf0e10cSrcweir } 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir RemoteControlCommunicationManager::~RemoteControlCommunicationManager() 121*cdf0e10cSrcweir { 122*cdf0e10cSrcweir if ( pTimer ) 123*cdf0e10cSrcweir delete pTimer; 124*cdf0e10cSrcweir DoQuickShutdown(); 125*cdf0e10cSrcweir } 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir void RemoteControlCommunicationManager::ConnectionOpened( CommunicationLink* pCL ) 128*cdf0e10cSrcweir { 129*cdf0e10cSrcweir StatementFlow::pCommLink = pCL; 130*cdf0e10cSrcweir CommunicationManagerServerViaSocket::ConnectionOpened( pCL ); 131*cdf0e10cSrcweir } 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir void RemoteControlCommunicationManager::ConnectionClosed( CommunicationLink* pCL ) 135*cdf0e10cSrcweir { 136*cdf0e10cSrcweir StatementFlow::pCommLink = NULL; 137*cdf0e10cSrcweir CommunicationManagerServerViaSocket::ConnectionClosed( pCL ); 138*cdf0e10cSrcweir } 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir IMPL_LINK( RemoteControlCommunicationManager, SetWinCaption, Timer*, EMPTYARG ) 142*cdf0e10cSrcweir { 143*cdf0e10cSrcweir if ( pTimer ) 144*cdf0e10cSrcweir { 145*cdf0e10cSrcweir delete pTimer; 146*cdf0e10cSrcweir pTimer = NULL; 147*cdf0e10cSrcweir } 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir if ( StatementList::GetFirstDocFrame() ) 150*cdf0e10cSrcweir { 151*cdf0e10cSrcweir if ( !aOriginalWinCaption.Len() ) 152*cdf0e10cSrcweir aOriginalWinCaption = StatementList::GetFirstDocFrame()->GetText(); 153*cdf0e10cSrcweir StatementList::GetFirstDocFrame()->SetText(String(aOriginalWinCaption).AppendAscii(" TT").Append(aAdditionalWinCaption).AppendAscii("[").Append(UniString::CreateFromInt32(nPortToListen)).AppendAscii("]")); 154*cdf0e10cSrcweir } 155*cdf0e10cSrcweir else 156*cdf0e10cSrcweir { // Dann Probieren wir es eben in 1 Sekunde nochmal 157*cdf0e10cSrcweir pTimer = new Timer(); // Wird im Link gel�scht 158*cdf0e10cSrcweir pTimer->SetTimeout( 1000 ); 159*cdf0e10cSrcweir pTimer->SetTimeoutHdl( LINK( this, RemoteControlCommunicationManager, SetWinCaption ) ); 160*cdf0e10cSrcweir pTimer->Start(); 161*cdf0e10cSrcweir } 162*cdf0e10cSrcweir return 0; 163*cdf0e10cSrcweir } 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir void RemoteControlCommunicationManager::InfoMsg( InfoString aMsg ) 166*cdf0e10cSrcweir { 167*cdf0e10cSrcweir if ( !bIsPortValid ) 168*cdf0e10cSrcweir return; 169*cdf0e10cSrcweir aAdditionalWinCaption = UniString( aMsg, RTL_TEXTENCODING_ASCII_US ); 170*cdf0e10cSrcweir SetWinCaption(); 171*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 172*cdf0e10cSrcweir m_pDbgWin->AddText( UniString( (ByteString)aMsg, RTL_TEXTENCODING_ASCII_US ) ); 173*cdf0e10cSrcweir m_pDbgWin->AddText( "\n" ); 174*cdf0e10cSrcweir #endif 175*cdf0e10cSrcweir } 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir sal_uLong RemoteControlCommunicationManager::GetPort() 178*cdf0e10cSrcweir { 179*cdf0e10cSrcweir if ( TT_PORT_NOT_INITIALIZED == nPortIs ) 180*cdf0e10cSrcweir { // Read Config 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir sal_uInt16 i; 183*cdf0e10cSrcweir // are we to be automated at all? 184*cdf0e10cSrcweir sal_Bool bAutomate = sal_False; 185*cdf0e10cSrcweir for ( i = 0 ; i < Application::GetCommandLineParamCount() ; i++ ) 186*cdf0e10cSrcweir { 187*cdf0e10cSrcweir if ( Application::GetCommandLineParam( i ).EqualsIgnoreCaseAscii("/enableautomation") 188*cdf0e10cSrcweir || Application::GetCommandLineParam( i ).EqualsIgnoreCaseAscii("-enableautomation")) 189*cdf0e10cSrcweir { 190*cdf0e10cSrcweir bAutomate = sal_True; 191*cdf0e10cSrcweir break; 192*cdf0e10cSrcweir } 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir // if started within Portal determin location of testtool.ini/rc by analysing the commandline 196*cdf0e10cSrcweir // /userid:demo1[/export/home/user/demo1] 197*cdf0e10cSrcweir // -userid:demo1[/export/home/user/demo1] 198*cdf0e10cSrcweir String aIniFileDir; 199*cdf0e10cSrcweir for ( i = 0 ; i < Application::GetCommandLineParamCount() ; i++ ) 200*cdf0e10cSrcweir { 201*cdf0e10cSrcweir if ( Application::GetCommandLineParam( i ).Copy(0,8).EqualsIgnoreCaseAscii("/userid:") 202*cdf0e10cSrcweir || Application::GetCommandLineParam( i ).Copy(0,8).EqualsIgnoreCaseAscii("-userid:") ) 203*cdf0e10cSrcweir { 204*cdf0e10cSrcweir rtl::OUString aEncHome 205*cdf0e10cSrcweir = Application::GetCommandLineParam(i).GetBuffer(); 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir rtl::OUString aDecHome = rtl::Uri::decode(aEncHome, 208*cdf0e10cSrcweir rtl_UriDecodeWithCharset, 209*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8); 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir aIniFileDir = aDecHome; 212*cdf0e10cSrcweir aIniFileDir.Erase( 0, aIniFileDir.Search('[')+1 ); 213*cdf0e10cSrcweir aIniFileDir.Erase( aIniFileDir.Search(']') ); 214*cdf0e10cSrcweir } 215*cdf0e10cSrcweir } 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir if ( ! aIniFileDir.Len() ) 218*cdf0e10cSrcweir aIniFileDir = Config::GetDefDirectory(); 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir Config aConf(Config::GetConfigName( aIniFileDir, CUniString("testtool") )); 221*cdf0e10cSrcweir aConf.SetGroup("Communication"); 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir ByteString aNoTesttoolKey( ByteString("Exclude_").Append( ByteString( Application::GetAppFileName(), RTL_TEXTENCODING_UTF8 ) ) ); 224*cdf0e10cSrcweir // -notesttool 225*cdf0e10cSrcweir for ( i = 0 ; i < Application::GetCommandLineParamCount() ; i++ ) 226*cdf0e10cSrcweir { 227*cdf0e10cSrcweir if ( Application::GetCommandLineParam( i ).CompareIgnoreCaseToAscii("-notesttool") == COMPARE_EQUAL ) 228*cdf0e10cSrcweir aConf.WriteKey( aNoTesttoolKey, "something" ); 229*cdf0e10cSrcweir } 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir nPortIs = aConf.ReadKey("TTPort","0").ToInt32(); 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir // noch pr�fen ob dieses Office getestet werden soll. 234*cdf0e10cSrcweir if ( !bAutomate || aConf.ReadKey( aNoTesttoolKey, "" ) != "" ) 235*cdf0e10cSrcweir nPortIs = 0; 236*cdf0e10cSrcweir 237*cdf0e10cSrcweir nComm = (sal_uInt16)aConf.ReadKey("Comm","0").ToInt32(); 238*cdf0e10cSrcweir if ( nComm ) 239*cdf0e10cSrcweir aConf.DeleteKey("Comm"); 240*cdf0e10cSrcweir 241*cdf0e10cSrcweir bQuiet = ( aConf.ReadKey("Quiet","no").CompareIgnoreCaseToAscii("yes") == COMPARE_EQUAL ); 242*cdf0e10cSrcweir } 243*cdf0e10cSrcweir return nPortIs; 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 247*cdf0e10cSrcweir #define MIN_IDLE 10000 // Ruhe vor dem Sturm min 10 Sekunden 248*cdf0e10cSrcweir #else 249*cdf0e10cSrcweir #define MIN_IDLE 60000 // Ruhe vor dem Sturm min 1 Minuten 250*cdf0e10cSrcweir #endif 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir class ExtraIdle : public AutoTimer 253*cdf0e10cSrcweir { 254*cdf0e10cSrcweir virtual void Timeout(); 255*cdf0e10cSrcweir 256*cdf0e10cSrcweir sal_uInt16 nStep; 257*cdf0e10cSrcweir ImplRemoteControl *pRemoteControl; 258*cdf0e10cSrcweir public: 259*cdf0e10cSrcweir ExtraIdle( ImplRemoteControl *pRC ); 260*cdf0e10cSrcweir }; 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir ExtraIdle::ExtraIdle( ImplRemoteControl *pRC ) 264*cdf0e10cSrcweir : nStep( 0 ) 265*cdf0e10cSrcweir , pRemoteControl (pRC ) 266*cdf0e10cSrcweir { 267*cdf0e10cSrcweir SetTimeout( 120000 ); // 2 Minuten 268*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 269*cdf0e10cSrcweir SetTimeout( 40000 ); // 40 Sekunden 270*cdf0e10cSrcweir #endif 271*cdf0e10cSrcweir Start(); 272*cdf0e10cSrcweir } 273*cdf0e10cSrcweir 274*cdf0e10cSrcweir void ExtraIdle::Timeout() 275*cdf0e10cSrcweir { 276*cdf0e10cSrcweir if ( !StatementList::pTTProperties ) 277*cdf0e10cSrcweir StatementList::pTTProperties = new TTProperties(); 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir if ( !StatementList::pTTProperties->GetSlots() ) 280*cdf0e10cSrcweir { 281*cdf0e10cSrcweir delete this; 282*cdf0e10cSrcweir return; 283*cdf0e10cSrcweir } 284*cdf0e10cSrcweir 285*cdf0e10cSrcweir // M�ssen wir selbst idlen? 286*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 287*cdf0e10cSrcweir sal_uLong nLastInputInterval = Application::GetLastInputInterval(); 288*cdf0e10cSrcweir sal_Bool bIsInModalMode = Application::IsInModalMode(); 289*cdf0e10cSrcweir if ( bIsInModalMode || nLastInputInterval < MIN_IDLE ) 290*cdf0e10cSrcweir #else 291*cdf0e10cSrcweir if ( Application::IsInModalMode() || Application::GetLastInputInterval() < MIN_IDLE ) 292*cdf0e10cSrcweir #endif 293*cdf0e10cSrcweir { 294*cdf0e10cSrcweir if ( nStep ) // Schon angefangen? dann abbrechen, sonst sp�ter nochmal 295*cdf0e10cSrcweir { 296*cdf0e10cSrcweir if ( nStep < 15 ) 297*cdf0e10cSrcweir { 298*cdf0e10cSrcweir Sound::Beep(); 299*cdf0e10cSrcweir Sound::Beep(); 300*cdf0e10cSrcweir } 301*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL < 2 302*cdf0e10cSrcweir delete this; 303*cdf0e10cSrcweir #endif 304*cdf0e10cSrcweir } 305*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 306*cdf0e10cSrcweir if ( nStep < 15 ) 307*cdf0e10cSrcweir { 308*cdf0e10cSrcweir Sound::Beep(); 309*cdf0e10cSrcweir Sound::Beep(); 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir #endif 312*cdf0e10cSrcweir return; 313*cdf0e10cSrcweir } 314*cdf0e10cSrcweir 315*cdf0e10cSrcweir if ( StatementList::pFirst ) // Verarbeitung neu aufsetzen 316*cdf0e10cSrcweir { 317*cdf0e10cSrcweir GetpApp()->PostUserEvent( LINK( pRemoteControl, ImplRemoteControl, CommandHdl ) ); 318*cdf0e10cSrcweir return; 319*cdf0e10cSrcweir } 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir 322*cdf0e10cSrcweir switch ( nStep++ ) // Probieren ob wir noch was machen k�nnen 323*cdf0e10cSrcweir { 324*cdf0e10cSrcweir case 0: 325*cdf0e10cSrcweir { 326*cdf0e10cSrcweir SfxPoolItem *pItem = new SfxStringItem((sal_uInt16)StatementList::pTTProperties->nSidNewDocDirect, CUniString("swriter/web") ); 327*cdf0e10cSrcweir new StatementSlot( StatementList::pTTProperties->nSidNewDocDirect, pItem ); 328*cdf0e10cSrcweir SetTimeout(30000); 329*cdf0e10cSrcweir return; 330*cdf0e10cSrcweir } 331*cdf0e10cSrcweir case 1: 332*cdf0e10cSrcweir { 333*cdf0e10cSrcweir new StatementSlot( StatementList::pTTProperties->nSidSourceView ); 334*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 335*cdf0e10cSrcweir SetTimeout(7000); 336*cdf0e10cSrcweir #else 337*cdf0e10cSrcweir SetTimeout(1500); 338*cdf0e10cSrcweir #endif 339*cdf0e10cSrcweir return; 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir case 2: 342*cdf0e10cSrcweir { 343*cdf0e10cSrcweir new StatementSlot( StatementList::pTTProperties->nSidSelectAll ); 344*cdf0e10cSrcweir return; 345*cdf0e10cSrcweir } 346*cdf0e10cSrcweir case 3: 347*cdf0e10cSrcweir { 348*cdf0e10cSrcweir 349*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 350*cdf0e10cSrcweir //#define TT_NO_DECRYPT 351*cdf0e10cSrcweir #define TT_CODE 352*cdf0e10cSrcweir #else 353*cdf0e10cSrcweir #define TT_CODE 354*cdf0e10cSrcweir #endif 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir #ifdef TT_NO_DECRYPT 357*cdf0e10cSrcweir String aStr = 358*cdf0e10cSrcweir "" 359*cdf0e10cSrcweir ; 360*cdf0e10cSrcweir 361*cdf0e10cSrcweir #else 362*cdf0e10cSrcweir ByteString aStr = 363*cdf0e10cSrcweir "\n" 364*cdf0e10cSrcweir "VRQJ`ob\n" 365*cdf0e10cSrcweir "YEZO\n" 366*cdf0e10cSrcweir "ob\n" 367*cdf0e10cSrcweir "UmRo`\n" 368*cdf0e10cSrcweir "5J~O2o5+90~5,6xW$+5:c9o0UXRm`Y UQ~JP~X]`Y\\|%Y`Yo]~O||2[pP0Y1J,|V),,7:,+|JS+U*[/O|K\n" 369*cdf0e10cSrcweir "|KaLYNV~]]2W/]*Y9|`*Y,P=[5P|U\n" 370*cdf0e10cSrcweir "]}mqbw`zZU\\L\n" 371*cdf0e10cSrcweir "LZdYWo9\n" 372*cdf0e10cSrcweir "/J\n" 373*cdf0e10cSrcweir "U~[QoZ\n" 374*cdf0e10cSrcweir "Rqd~V\n" 375*cdf0e10cSrcweir ",)1~00\n" 376*cdf0e10cSrcweir "\n" 377*cdf0e10cSrcweir ")0~*2=\n" 378*cdf0e10cSrcweir "++2\\5&K|~5n9r~9/*9<*~051*Q|0~0rY|~./97~Q*7,Z9<|KY0:=K*<=w~qY`IbOKzLwN,`7b,V~]E`]b\\ORE~\n" 379*cdf0e10cSrcweir "\n" 380*cdf0e10cSrcweir "Vq~bR`W;a+Y\\J=LKJa+W*I/PbR~JLUX[|b~`Z2P/R*[9a~W=9~/9p8=a*P=J0OZ~7L`JbL=P<WbaLQbPO]JYKbD\n" 381*cdf0e10cSrcweir "aY`J5J:b~7=2~+9)9W1,50b9X3P0`YbYVJ`Jb \\`Z]`Vb\n" 382*cdf0e10cSrcweir "VRQJ`b" 383*cdf0e10cSrcweir ; 384*cdf0e10cSrcweir #endif 385*cdf0e10cSrcweir 386*cdf0e10cSrcweir #ifdef TT_CODE 387*cdf0e10cSrcweir for ( sal_uInt16 i = 0 ; i < aStr.Len() ; i++ ) 388*cdf0e10cSrcweir { 389*cdf0e10cSrcweir if ( aStr.GetChar(i) < 32 || aStr.GetChar(i) > 126 ) 390*cdf0e10cSrcweir { 391*cdf0e10cSrcweir // do nothing 392*cdf0e10cSrcweir } 393*cdf0e10cSrcweir else 394*cdf0e10cSrcweir { 395*cdf0e10cSrcweir aStr.SetChar( i, aStr.GetChar(i) - 32 ); 396*cdf0e10cSrcweir aStr.SetChar( i, 126 - aStr.GetChar(i) ); 397*cdf0e10cSrcweir } 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir if ( i > (aStr.Len() / 2) && (i&1) ) 400*cdf0e10cSrcweir { 401*cdf0e10cSrcweir sal_Char c = aStr.GetChar(i); 402*cdf0e10cSrcweir aStr.SetChar( i, aStr.GetChar(aStr.Len()-i-1) ); 403*cdf0e10cSrcweir aStr.SetChar( aStr.Len()-i-1, c ); 404*cdf0e10cSrcweir } 405*cdf0e10cSrcweir } 406*cdf0e10cSrcweir #endif 407*cdf0e10cSrcweir 408*cdf0e10cSrcweir ::svt::OStringTransfer::CopyString( UniString( aStr, RTL_TEXTENCODING_ASCII_US ), StatementList::GetFirstDocFrame() ); 409*cdf0e10cSrcweir 410*cdf0e10cSrcweir new StatementSlot( StatementList::pTTProperties->nSidPaste ); 411*cdf0e10cSrcweir return; 412*cdf0e10cSrcweir } 413*cdf0e10cSrcweir case 4: 414*cdf0e10cSrcweir { 415*cdf0e10cSrcweir new StatementSlot( StatementList::pTTProperties->nSidSourceView ); 416*cdf0e10cSrcweir return; 417*cdf0e10cSrcweir } 418*cdf0e10cSrcweir case 5: 419*cdf0e10cSrcweir { 420*cdf0e10cSrcweir new StatementSlot( StatementList::pTTProperties->nSidSelectAll ); 421*cdf0e10cSrcweir new StatementSlot( StatementList::pTTProperties->nSidCopy ); 422*cdf0e10cSrcweir new StatementSlot( StatementList::pTTProperties->nSidPaste ); 423*cdf0e10cSrcweir return; 424*cdf0e10cSrcweir } 425*cdf0e10cSrcweir case 6: 426*cdf0e10cSrcweir { 427*cdf0e10cSrcweir ByteString aTr("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-"); 428*cdf0e10cSrcweir ByteString aData = 429*cdf0e10cSrcweir "P-S-0U04Fihixh00l0004b0b300-PS0g30428333y243q334j44426a6a65576c8k97aJecf7feccedg2inj3ghlshde5krk+lno" 430*cdf0e10cSrcweir "PpqpBfjsgusp1unp-po-PS0gm044x465e6b6L6boygeg-ooo-ooo-ooo-ooo-ooo-ooo-ooo-ooo-ooo-ooo-ooo-ooo-ooo-ooo" 431*cdf0e10cSrcweir "-ooo-ooo-oo-1M04020Y30J0o080B040R040M-N0M700l010l000k000000000006000N011I112r222M-N0gJ40D000U001R011" 432*cdf0e10cSrcweir "0110500vr0001014p148mcg1R4koV18s95cwkAE2V8gImM5kgQY9WcosCw22I556p669I99aoaadrddd6eeeNghhIhhiriik6lll" 433*cdf0e10cSrcweir "NlmmImoprppp6qqqNsttItturuuw6xxxNxyyHyAA6BBBNBCCHCEE6FFFNFGGHGII6JJJNJKKHKMM6NNNNNOOHOQQ6RRRNRSSCSUU" 434*cdf0e10cSrcweir "NUVVIVVWpWWYIYYZrZZZ6+++M-N0Q700R000l000l000g00000006000N011I112r222M-N0kJ40C0003110d1110110r00t6000" 435*cdf0e10cSrcweir "Q041l18cF14gtk1ous48Acw295gAlEIMv28cxkY5FosQE2595dU9sY56q669N9aaCaddNdeeIeghrhhh6iiiNkllIllmrmmo6ppp" 436*cdf0e10cSrcweir "NpqqIqstrttt6uuuIwwxrxxx6yyyIAABrBBB6CCCIEEFrFFF6GGGIIIJrJJJ6KKKIMMNrNNN6OOOIQQRrRRR6SSSIUUVrVVV6WWW" 437*cdf0e10cSrcweir "IYYZrZZZ6+++U-S0d3009004Q040Of0TPU5QGjFCdPoji85WiqEopkCag321kP8dW4yO4KRlNi9iwzeTKup+Yk0lrdcicCEeLtVQ" 438*cdf0e10cSrcweir "z1IFeROmSJBa7VYMYY-0EWGkJWH6LpAVdrUepM7ScEpkTBkenX3YGuoFVU0IGk+dSzPpv0N6U07eTPFgid-YtvOD2ws5C96qDgIL" 439*cdf0e10cSrcweir "vhsoWmBPAozc+KgPjiVuW0TJnrt6PqF63p2VJEJ6A+l33JqESWh0G4yn1JkcaaEBnw17xmaf0q4BGkVy40Jj+FAyioG3KEukCtP1" 440*cdf0e10cSrcweir "OAdOe4ASVCPuUrQDFsqBoRWN6jqxOBfH-30WbgyZy+HtyI6xNVvt3M0lnfscjA8rBUeoRXifTPCceY6t46AR9ooG2jVzdmo+PQ6R" 441*cdf0e10cSrcweir "cAEDd7VE3GvUyDJzn2e0yyzypEdnCzUZorT029pk4LHJYsRQmR5smaW9EuCbt2A2s2Nd9ZKAkcJSWoTGPV5p6d1PZCiYt6kVETBB" 442*cdf0e10cSrcweir "K7zNWhRK7kMBCag7zELQ2e6HWHM+BwO4nJA-30uF2a2WgcgndWuk6gPbha0D5WFPq902KmjNwyg5xkVQvgd9W9SCfiFd95Ndh9yj" 443*cdf0e10cSrcweir "Odd7k38da3xWqtwcHPOEb7AvIPqAdRbz3XNNEYFu7bS9Iz-0UVQJc-gtgPCQ7cledmoGTULsGpjeu0TzkJi2tusMDnR4cisDw2rz" 444*cdf0e10cSrcweir "Vhs36hPC0oSH7V-UMAjVIC3dRFwNoc20a0+Culnm3q9QQJsgt00IeEoRXCh3jUg3eO8yGBOpFwYap5OrpoAfMeR6Q8L0sUIgI7B3" 445*cdf0e10cSrcweir "Oy9q5WMBAxg5PYnBSxZlywhwDlb45Il6Y+F-NaH62MEoByaq02d2aaEz5Bwx45DqfEC4ACqd4FYjI9IbAgqH7uFopm+JQRSHrSNd" 446*cdf0e10cSrcweir "ct0dwNo+FAUaD926b3wtUoRIPJ-MTLLiQcC92bTBue9RkDqqYRcXxn06S9Jm6Qhpk9IjH8JLyIinJj3EAF7bTH9jkf170OvzuO2j" 447*cdf0e10cSrcweir "I2jenHhQvnKoDSHSmWenEhfEHkVgekpfIOhkBhqLVaEvb83EyfD2Awrbk5+lwyvOne6yBA36rdrmna4xFOsvqGxRcgcJy-lXnjCn" 448*cdf0e10cSrcweir "eeWhGvqAbmSf7LcDwqykK9jqADpRqkXSq7MB7ZOHSgJhNitiw3i6y9LYjRNlq4Lc-00zCNL3CThC65Ajjlw8550bAbqa0d0Jz3BT" 449*cdf0e10cSrcweir "kH6EDgQhRUhjtyK9y9CjraNEw9ERUq6MmYa989nsRqsPxo+zi2IbOfxy9q3lFL-QSWn5qwp7nTFUwVe-XaDxnGfWOIYXXfIkILs-" 450*cdf0e10cSrcweir "lWPSm51tjj967w11u-YylxUO++EfuLsmr1c3jLdgcDYmK9roIAmz1t1vAalje3oyXDp335xkQ24rS1JhdokOn5cWpizqiE5bsbg4" 451*cdf0e10cSrcweir "4gWkfJ2IEVnSoWmj8eNeAFuoT0wzWWm9UgmDKRH2INGJy6OHTwn7zawsiPo796yQd6OsPORlTrUR-bEMLPj8nZdMwyX-Jb8npd2-" 452*cdf0e10cSrcweir "zV9JMRdNarUy1aF0tiihB0o+kQh5iy9r9BMqhPjf+WckJ9WWqmSQTEqAl+zwgw-+vH5WomSNVjbDLchO9Ae-ggdQGPcb+7Dq0X-d" 453*cdf0e10cSrcweir "XsFHj76-a0eUqKlN6cgHMKgKSmv8xcMVnCIPAnqR0SsThTWe8GSgo3pTGWTgBrtb1X2OfHMHsi8D3gkpPwKvoxoEuSJcTmD2kiAS" 454*cdf0e10cSrcweir "Pk3wl5C5NZDe9OrZMdDg6VQpDybXJ7EWLCdwsPoTGqhcGOGvrJ2WgFuuem+wP1ZGhkpee9rU7CTad9q9DxVgNzGWk+lGid6rKswa" 455*cdf0e10cSrcweir "1+Uc57RmFASpo3qbaGvuMReTLCWXsocM6lvXmSZHAhhaaV7EHH9sJglnrUlniII4I0gVZHFLys8VKKb2yKbAYHeSY3VlmgRywmqd" 456*cdf0e10cSrcweir "UXugq90wSsh0poya0qEAF9CjjadQumckue1unyK1sdcUwyxQOcARlHjLWYd3lS2ozCTQ48zZXesU66bAUfTdoXoOInm7MpPgwiDp" 457*cdf0e10cSrcweir "XDqJrEMEChxb747KzIHfxSdi++EwdRNK7RHEmgVhqiZkW1WqBEnjst6Oz08ztIPVknfPjq8NDB4h9g1sD+l1xQNzHNg+Jb1Vmii6" 458*cdf0e10cSrcweir "1dP-57LPdOhlWSTKYaCmzwAhGqyOlPrY9zXZodpZuoL2kjTBLBxaeGcM+NONZcN7GqIqFcNlhVgMXKHsd-WEBBR957ZZn7hk-mbb" 459*cdf0e10cSrcweir "FGxWLzaiHE6t48mXupNDlxi6d1w-yaPlmczA0gTsEhqRrsEbj48ProNvyivlaY06bdYSvGN7IOBc1ezBJiFd5OTz+RbzIsqJpCsJ" 460*cdf0e10cSrcweir "BOTSLjAdwXCzq-XExGbygb3X2oURVXxTB4q0e6euBRnXkIJuTM7SfQfQkdEEjN7J56t3oxP6B0cA4lgSDhURzsDzrkk0ECxfwaU3" 461*cdf0e10cSrcweir "ovagJuvzx07aksPdxkQ8aqEy618F-4wjCr3hZq8gq3gu7RJ4ovXa86R7ZskSYJC01o2OpfvJh0WqpYiIuE0zBqpI3kTJQZ0Or5ku" 462*cdf0e10cSrcweir "9RzhbzbV1AU0BzJ5vPTOBRIOIAiJiBiOdI8fR3dcWle3xCder+W6QELyr6NaldJipQCeAMwRr5mpzZESGAhuU3BDdkCh5ENgMUE-" 463*cdf0e10cSrcweir "sWotoCfnOwT7tJlXLHODk8K7Z4zYCG9Dh2fQazDE0JqBDruomfatotGADn25BCDpk6GI6SSftpUd71Qr1JBrgOr33aWswl983Uk7" 464*cdf0e10cSrcweir "cq9Em7vGtACekHlvOOVJfbdh76nNHzuQ1Z1oBvuU9l-dAg+-QWWFQ18D8U+zmYn1jypyarIXSrcIb67wLDTFXWm8F9XPmFWRBD3d" 465*cdf0e10cSrcweir "WukVJwhGNV5ZHVE1wCudY07ZIEAd1kgzgPcRSxFhRhFpXsnESjJhUNCA3DlrARwzz+llg0xpVHrJiddYT36P453qxpOmIE9e6-qJ" 466*cdf0e10cSrcweir "h4ipfTTt8f2Kq4mdWniErPtI+wrN-edvCQFtPdrL+tpV6EpPRXgmHnjRhV0eWWzqxdRZacX98CME3pvwDYWkO8TOUlcNQSKTU1iF" 467*cdf0e10cSrcweir "FC9WIBA8PulsCFVNH1qJwZxYYcaX6CGNnR7vHiIBDsTE51J4b4fYucNYFG9V5mCUdrJT57tHk9eghSOfgeHZDxuvQt8619pwKma7" 468*cdf0e10cSrcweir "3Nl00EFklZOk+APRmKviL+iyiG1sWfA3E0xUPznlQgvsHJRzD9u0TzHsB6tIMKLmOxvVHG9knpHerjAXNqIp7jwZzvYXIyW8kw8g" 469*cdf0e10cSrcweir "3ycECFaB2Y2U0l00NE7l2Aca2y5uhk+QJygN0857SQMVSEXjy+Q84nQjkTh1GAtFACtdHRhwQ6FhQMLjFu6zyxuFycbQA7qNSsiy" 470*cdf0e10cSrcweir "90wlAaUBBtFhxMV0TPd8DbVScjJoMSAYMh6GhAHnKOZsbdqvwtHKdZWZ9HQbdmVOt0xnnK5Ju9KfwhuHMZIoPt73BqspII6qBobB" 471*cdf0e10cSrcweir "5kfcwm183j4fwapcs50EoGgz2UZGuK88agfskePeYt9DOQD3qxxfuJ5lZUFHa8aqFJIT6MG2Kwtwuu0zBqTz8x5DYM7PDh29F9FU" 472*cdf0e10cSrcweir "1ge-wqqIMqmXlpbO65sila1be1yRGABAbw2njF5txZEAaqEyEo9FUPqnKQ4y1NQqSXkCpsqpO06UUCyBBzaDjawwoHkKOT1-zqpz" 473*cdf0e10cSrcweir "FU7JNudONE3fuYk83U9thALoAIeG6FKizOLgU4AcDcszCmGZgylUI-Edd9mAKL9nJe+YdiYxl7uX4mATdO30KcuDrRoTxBbiHbuA" 474*cdf0e10cSrcweir "qlorQn1D0opRuIhzVLm8+z8QRFlNA0683M1QYE+Lhka+kaIDvE8RHQHel4bOsMFp6lmV6D3cNhQvpG1sECm02a5tgF52reEBaYEw" 475*cdf0e10cSrcweir "OhD+RQiFedTm3OQg5iq2c04kidOoDgaPNGs1VitbrhIvAuzStaWksap3jp9UrAN1O-0nAECIfSP0QHVkGWtduz6XSmJ7MsLPmPJ3" 476*cdf0e10cSrcweir "hRjY7DtZXWjvtHcj9ooAXcPsI+3YgG951n7urnyB1kbQV+ZdlAbI11Y3orBMB+le8goi66fWyEX9FHpFEL32jNqSghzvyEC1227-" 477*cdf0e10cSrcweir "p5t8vx19mYHbOghy5K7voWUAXsjX2gwzicmKiNJR9OrHppAbVEVzVjOuYWmwCpGWFW1DlaoOc03PWkgqvVeezQY8IiM9Rptnniwf" 478*cdf0e10cSrcweir "Xa1XnMPo6ES0MHE5nwC8tT65VVw3C2peCu720i6oVvevcoMGeP3PVgvBkudifs0GNH7AaOGVFhrbE68B8sq6AH8BFvXhZfzdhb1f" 479*cdf0e10cSrcweir "Y1p-GVyr3qECy393zFEq0wHg2Vls4OiVD-J0d7JFKsuhUPgdykTCWhbqkdvwUUyg7qXPvdeC09AUAszRcVsk5iihIr1+N-0ATkGU" 480*cdf0e10cSrcweir "i6GPwTlzw-dALNmjbVjHOSAsWaihe303RxAmD4akSPWkjgtot17BTZfaSgaNH+ESoUGJ3GgPJqD8UBsAShIF-X0wwyFpDkTwESHg" 481*cdf0e10cSrcweir "jNwUF9EpszCwj1myzqZG9hIp76G1ymz7BuZF0T5pdA1GMG8AGuRbXEtJMkHsDJoztG06Jqm-khFPydXg-VB1k+l9AMwzzvtCDacK" 482*cdf0e10cSrcweir "k22WU1fByYcDpmW0Y9YF-zeZDDcQJVF8tT8cNNjt9GdIF3103ZFP8oulWCfnXETCKz3YQFsm3qOUu6GJ-lb2foo1WJqGpcCbyPmy" 483*cdf0e10cSrcweir "Ib95rQLJnk56YC1KmN5zMJ831cVsERyvdPOSW8kg-2uk8m3J4zgAWAhvvBOofIjFb5yNf0shVv-JJ9f49ZFcQ+LKDFKX3iNV1E-G" 484*cdf0e10cSrcweir "MxeEwbi-uGP8BGO4vGgV0IFbgswumfhk14OF3q+1qwRFpq4hr1s6zQEAgoVAW3QE4tsQpYW3JkcqDcnSOjbePZeFrFMor-o3UG2F" 485*cdf0e10cSrcweir "jmw8667eXk3UiM9vq5EpyrbQxexsJ3tKy7w6lGsumfMWIlcSglkLUzicysuPgqT5Wuzn8MkGvTYve2UyunErUnD-+Qwr0rDo1tOG" 486*cdf0e10cSrcweir "bbtcNNeFInx5rDK3DHahjTON3d3oTpePxioVK3sRLDh185yKMzTQv812ADCFcwvFHbetPF41f7kot00O2OMUkw4OPvuTRkhdAhgd" 487*cdf0e10cSrcweir "il2SM9bunNaNHqh9Ov8Qv3SKEl1O-BwzjYF0VWjkxycswQFqQotUPw+Q-6FrCPFWvaF2CP2F319stMfD-8bHsd87KZfQ9ChereG4" 488*cdf0e10cSrcweir "Z8XP8dNMipn-evkOVVFqfgN16dO8Ya9nqGFIpIW1Ljv7wOAzdZFsm5C1EuQoKzwyXDO0BDjceBsyTt40H0upG8D1N1ZP66OPIeQy" 489*cdf0e10cSrcweir "oXQwI63e+NnuYA0687-d6N6rDscj+VHn2R0RUXQFZ2+EANqcqvan4y0Erpl01fAfmLaI8pmOgsRUDvuF5e9YnWNhxtSzS4fsjj1J" 490*cdf0e10cSrcweir "1EIGpcw0WfiaOul1s19ZIECoLBx-#S"; 491*cdf0e10cSrcweir 492*cdf0e10cSrcweir 493*cdf0e10cSrcweir //#if OSL_DEBUG_LEVEL > 1 494*cdf0e10cSrcweir // SvFileStream aStream( "d:\\gh_writeback.jpg" , STREAM_STD_READWRITE | STREAM_TRUNC ); 495*cdf0e10cSrcweir //#else 496*cdf0e10cSrcweir SvMemoryStream aStream; 497*cdf0e10cSrcweir //#endif 498*cdf0e10cSrcweir xub_StrLen c; 499*cdf0e10cSrcweir xub_StrLen cRest = 0; 500*cdf0e10cSrcweir 501*cdf0e10cSrcweir xub_StrLen nIndex; 502*cdf0e10cSrcweir for ( nIndex = 0 ; nIndex < aData.Len() ; nIndex++ ) 503*cdf0e10cSrcweir { 504*cdf0e10cSrcweir if ( ( nIndex & 3 ) == 0 ) 505*cdf0e10cSrcweir { 506*cdf0e10cSrcweir cRest = aData.GetChar( nIndex ); 507*cdf0e10cSrcweir cRest = aTr.Search( (sal_Char)cRest ); 508*cdf0e10cSrcweir } 509*cdf0e10cSrcweir else 510*cdf0e10cSrcweir { 511*cdf0e10cSrcweir c = aData.GetChar( nIndex ); 512*cdf0e10cSrcweir c = aTr.Search( (sal_Char)c ); 513*cdf0e10cSrcweir 514*cdf0e10cSrcweir c <<= 2; 515*cdf0e10cSrcweir c |= ( ( cRest & 0x30 ) >> 4 ); 516*cdf0e10cSrcweir cRest <<= 2; 517*cdf0e10cSrcweir 518*cdf0e10cSrcweir aStream << sal_Char(c); 519*cdf0e10cSrcweir } 520*cdf0e10cSrcweir } 521*cdf0e10cSrcweir 522*cdf0e10cSrcweir aStream.Seek(0); 523*cdf0e10cSrcweir #ifndef NO_JPEG 524*cdf0e10cSrcweir Graphic aGraphic; 525*cdf0e10cSrcweir if ( ImportJPEG( aStream, aGraphic, NULL ) ) 526*cdf0e10cSrcweir { 527*cdf0e10cSrcweir Bitmap *pBmp = new Bitmap( aGraphic.GetBitmap() ); 528*cdf0e10cSrcweir StatementList::pTTProperties->Img( pBmp ); 529*cdf0e10cSrcweir delete pBmp; 530*cdf0e10cSrcweir } 531*cdf0e10cSrcweir else 532*cdf0e10cSrcweir #endif 533*cdf0e10cSrcweir { 534*cdf0e10cSrcweir ::svt::OStringTransfer::CopyString( CUniString("\nSorry! no bitmap"), StatementList::GetFirstDocFrame() ); 535*cdf0e10cSrcweir } 536*cdf0e10cSrcweir 537*cdf0e10cSrcweir /*********************************************************************** 538*cdf0e10cSrcweir // sal_uInt16 nBC = pBmp->GetBitCount(); 539*cdf0e10cSrcweir // pBmp->Scale( 0.02, 0.02 ); 540*cdf0e10cSrcweir // nBC = pBmp->GetBitCount(); 541*cdf0e10cSrcweir // SvMemoryStream aStream; 542*cdf0e10cSrcweir SvFileStream aStream( "d:\gh_small50.jpg", STREAM_STD_READ ); 543*cdf0e10cSrcweir 544*cdf0e10cSrcweir aStream.Seek( 0 ); 545*cdf0e10cSrcweir xub_StrLen c; 546*cdf0e10cSrcweir String aOut; 547*cdf0e10cSrcweir String aDreierGruppe; 548*cdf0e10cSrcweir xub_StrLen cRest=0; 549*cdf0e10cSrcweir aStream >> c; 550*cdf0e10cSrcweir while ( !aStream.IsEof() ) 551*cdf0e10cSrcweir { 552*cdf0e10cSrcweir cRest <<= 2; // Im ersten Durchgang egal, da immer 0 553*cdf0e10cSrcweir cRest |= ( c & 0x03 ); 554*cdf0e10cSrcweir c >>= 2; 555*cdf0e10cSrcweir aDreierGruppe += aTr.GetChar( c ); 556*cdf0e10cSrcweir 557*cdf0e10cSrcweir if ( aDreierGruppe.Len() == 3 ) 558*cdf0e10cSrcweir { 559*cdf0e10cSrcweir aOut += aTr.GetChar( cRest ); 560*cdf0e10cSrcweir aOut += aDreierGruppe; 561*cdf0e10cSrcweir cRest = 0; 562*cdf0e10cSrcweir aDreierGruppe = ""; 563*cdf0e10cSrcweir } 564*cdf0e10cSrcweir aStream >> c; 565*cdf0e10cSrcweir } 566*cdf0e10cSrcweir if ( aDreierGruppe.Len() ) 567*cdf0e10cSrcweir { 568*cdf0e10cSrcweir aOut += cRest; 569*cdf0e10cSrcweir aOut += aDreierGruppe; 570*cdf0e10cSrcweir } 571*cdf0e10cSrcweir ::svt::OStringTransfer::CopyString( aOut ); 572*cdf0e10cSrcweir **********************************************************************************/ 573*cdf0e10cSrcweir 574*cdf0e10cSrcweir new StatementSlot( StatementList::pTTProperties->nSidPaste ); 575*cdf0e10cSrcweir return; 576*cdf0e10cSrcweir } 577*cdf0e10cSrcweir case 7: 578*cdf0e10cSrcweir { 579*cdf0e10cSrcweir new StatementSlot( 20384 ); // FN_TOOL_ANKER_CHAR aus SW? 580*cdf0e10cSrcweir return; 581*cdf0e10cSrcweir } 582*cdf0e10cSrcweir } 583*cdf0e10cSrcweir 584*cdf0e10cSrcweir // Wir sind am Ende 585*cdf0e10cSrcweir 586*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL < 2 587*cdf0e10cSrcweir delete this; 588*cdf0e10cSrcweir #endif 589*cdf0e10cSrcweir } 590*cdf0e10cSrcweir 591*cdf0e10cSrcweir IMPL_LINK( ImplRemoteControl, IdleHdl, Application*, EMPTYARG ) 592*cdf0e10cSrcweir { 593*cdf0e10cSrcweir if( StatementList::pFirst ) 594*cdf0e10cSrcweir { 595*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 596*cdf0e10cSrcweir m_pDbgWin->AddText( "* " ); 597*cdf0e10cSrcweir #endif 598*cdf0e10cSrcweir GetpApp()->PostUserEvent( LINK( this, ImplRemoteControl, CommandHdl ) ); 599*cdf0e10cSrcweir } 600*cdf0e10cSrcweir return 0; 601*cdf0e10cSrcweir } 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir 604*cdf0e10cSrcweir 605*cdf0e10cSrcweir IMPL_LINK( ImplRemoteControl, CommandHdl, Application*, EMPTYARG ) 606*cdf0e10cSrcweir { 607*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 608*cdf0e10cSrcweir m_pDbgWin->AddText( "Entering CommandHdl\n" ); 609*cdf0e10cSrcweir #endif 610*cdf0e10cSrcweir 611*cdf0e10cSrcweir if ( StatementList::MaybeResetSafeReschedule() ) 612*cdf0e10cSrcweir { 613*cdf0e10cSrcweir StatementList::bExecuting = sal_False; // Wird nacher im SafeReschedule wieder zur�ckgesetzt 614*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 615*cdf0e10cSrcweir m_pDbgWin->AddText( "SafeReschedule has been reset\n" ); 616*cdf0e10cSrcweir #endif 617*cdf0e10cSrcweir } 618*cdf0e10cSrcweir 619*cdf0e10cSrcweir if ( ( StatementList::bReadingCommands && !StatementList::bDying ) || 620*cdf0e10cSrcweir ( StatementList::bExecuting ) || 621*cdf0e10cSrcweir ( StatementList::IsInReschedule() ) ) 622*cdf0e10cSrcweir { 623*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 624*cdf0e10cSrcweir if ( StatementList::bReadingCommands ) 625*cdf0e10cSrcweir m_pDbgWin->AddText( "Reading Commands " ); 626*cdf0e10cSrcweir if ( StatementList::bExecuting ) 627*cdf0e10cSrcweir m_pDbgWin->AddText( "In Execute " ); 628*cdf0e10cSrcweir if ( StatementList::IsInReschedule() ) 629*cdf0e10cSrcweir { 630*cdf0e10cSrcweir m_pDbgWin->AddText( "In Reschedule FocusWindow: 0x" ); 631*cdf0e10cSrcweir m_pDbgWin->AddText( 632*cdf0e10cSrcweir String::CreateFromInt64( 633*cdf0e10cSrcweir sal::static_int_cast< sal_Int64 >( 634*cdf0e10cSrcweir reinterpret_cast< sal_IntPtr >(GetpApp()->GetFocusWindow())), 635*cdf0e10cSrcweir 16 )); 636*cdf0e10cSrcweir m_pDbgWin->AddText( " " ); 637*cdf0e10cSrcweir } 638*cdf0e10cSrcweir m_pDbgWin->AddText( "Leaving CommandHdl\n" ); 639*cdf0e10cSrcweir #endif 640*cdf0e10cSrcweir return 0; // Garnicht erst irgendwelchen bl�dsinn machen 641*cdf0e10cSrcweir } 642*cdf0e10cSrcweir 643*cdf0e10cSrcweir while( StatementList::pFirst && ( !StatementList::bReadingCommands || StatementList::bDying ) ) 644*cdf0e10cSrcweir // Schleift hier bis Befehl nicht zur�ckkommt, 645*cdf0e10cSrcweir // Wird dann rekursiv �ber IdleHdl und PostUserEvent aufgerufen. 646*cdf0e10cSrcweir { 647*cdf0e10cSrcweir m_bInsideExecutionLoop = sal_True; 648*cdf0e10cSrcweir #ifdef TIMERIDLE 649*cdf0e10cSrcweir m_aIdleTimer.Stop(); 650*cdf0e10cSrcweir m_aIdleTimer.Start(); 651*cdf0e10cSrcweir #endif 652*cdf0e10cSrcweir StatementList *pC = StatementList::pFirst; 653*cdf0e10cSrcweir 654*cdf0e10cSrcweir // MessBox MB( pMainWin, WB_DEF_OK|WB_OK, "Pause ...", "... und Weiter" ); 655*cdf0e10cSrcweir // MB.Execute(); 656*cdf0e10cSrcweir 657*cdf0e10cSrcweir if ( !StatementList::bCatchGPF ) 658*cdf0e10cSrcweir { 659*cdf0e10cSrcweir if (!pC->CheckWindowWait() || !pC->Execute()) 660*cdf0e10cSrcweir { 661*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 662*cdf0e10cSrcweir m_pDbgWin->AddText( "Leaving CommandHdl\n" ); 663*cdf0e10cSrcweir #endif 664*cdf0e10cSrcweir return 0; // So dass die App nochmal �ne chance bekommt 665*cdf0e10cSrcweir } 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir else 668*cdf0e10cSrcweir { 669*cdf0e10cSrcweir try 670*cdf0e10cSrcweir { 671*cdf0e10cSrcweir if (!pC->CheckWindowWait() || !pC->Execute()) 672*cdf0e10cSrcweir { 673*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 674*cdf0e10cSrcweir m_pDbgWin->AddText( "Leaving CommandHdl\n" ); 675*cdf0e10cSrcweir #endif 676*cdf0e10cSrcweir return 0; // So dass die App nochmal �ne chance bekommt 677*cdf0e10cSrcweir } 678*cdf0e10cSrcweir } 679*cdf0e10cSrcweir catch( ... ) 680*cdf0e10cSrcweir { 681*cdf0e10cSrcweir if ( !StatementFlow::bUseIPC ) 682*cdf0e10cSrcweir throw; // aus der Hilfe heraus nicht leise abbrechen 683*cdf0e10cSrcweir 684*cdf0e10cSrcweir try 685*cdf0e10cSrcweir { 686*cdf0e10cSrcweir ModelessDialog *pDlg = new ModelessDialog(NULL); 687*cdf0e10cSrcweir pDlg->SetOutputSizePixel(Size(150,0)); 688*cdf0e10cSrcweir pDlg->SetText( String ( TTProperties::GetSvtResId( TT_GPF ) ) ); 689*cdf0e10cSrcweir pDlg->Show(); 690*cdf0e10cSrcweir DBG_ERROR("GPF"); 691*cdf0e10cSrcweir pC->ReportError( GEN_RES_STR0( S_GPF_ABORT ) ); 692*cdf0e10cSrcweir StatementList::bDying = sal_True; 693*cdf0e10cSrcweir while ( StatementList::pFirst ) // Kommandos werden �bersprungen 694*cdf0e10cSrcweir StatementList::NormalReschedule(); 695*cdf0e10cSrcweir delete pDlg; 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir catch ( ... ) 698*cdf0e10cSrcweir { 699*cdf0e10cSrcweir Application::Quit(); 700*cdf0e10cSrcweir } 701*cdf0e10cSrcweir Application::Quit(); 702*cdf0e10cSrcweir } 703*cdf0e10cSrcweir } 704*cdf0e10cSrcweir 705*cdf0e10cSrcweir /* #i46293# remove reschedules 706*cdf0e10cSrcweir for (int xx = 1;xx < 20;xx++) 707*cdf0e10cSrcweir StatementList::NormalReschedule(); 708*cdf0e10cSrcweir */ 709*cdf0e10cSrcweir m_bInsideExecutionLoop = sal_False; 710*cdf0e10cSrcweir } 711*cdf0e10cSrcweir 712*cdf0e10cSrcweir StatementList::aWindowWaitUId = rtl::OString(); // Warten r�cksetzen, da handler sowieso verlassen wird 713*cdf0e10cSrcweir 714*cdf0e10cSrcweir /* if( StatementList::pFirst && !StatementList::bReadingCommands ) 715*cdf0e10cSrcweir // Abfrage n�tig, da andere CommandHdl aktiv sein k�nnen oder 716*cdf0e10cSrcweir // neue Commands gelesen werden k�nnen 717*cdf0e10cSrcweir { 718*cdf0e10cSrcweir delete StatementList::pFirst; // L�scht die gesamte Liste !! 719*cdf0e10cSrcweir StatementList::pFirst = NULL; 720*cdf0e10cSrcweir StatementList::pCurrent = NULL; // Nur zur Sicherheit, sollte hier sowieso NULL sein 721*cdf0e10cSrcweir }*/ 722*cdf0e10cSrcweir 723*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 724*cdf0e10cSrcweir m_pDbgWin->AddText( "Leaving CommandHdl\n" ); 725*cdf0e10cSrcweir #endif 726*cdf0e10cSrcweir return 0; 727*cdf0e10cSrcweir } 728*cdf0e10cSrcweir 729*cdf0e10cSrcweir IMPL_LINK( ImplRemoteControl, QueCommandsEvent, CommunicationLink*, pCL ) 730*cdf0e10cSrcweir { 731*cdf0e10cSrcweir SvStream *pTemp = pCL->GetServiceData(); 732*cdf0e10cSrcweir QueCommands( SI_IPCCommandBlock, pTemp ); 733*cdf0e10cSrcweir delete pTemp; 734*cdf0e10cSrcweir return 0; 735*cdf0e10cSrcweir } 736*cdf0e10cSrcweir 737*cdf0e10cSrcweir sal_Bool ImplRemoteControl::QueCommands( sal_uLong nServiceId, SvStream *pIn ) 738*cdf0e10cSrcweir { 739*cdf0e10cSrcweir // return sal_True; 740*cdf0e10cSrcweir sal_uInt16 nId; 741*cdf0e10cSrcweir 742*cdf0e10cSrcweir if( !m_bIdleInserted ) 743*cdf0e10cSrcweir { 744*cdf0e10cSrcweir #ifdef TIMERIDLE 745*cdf0e10cSrcweir m_aIdleTimer.SetTimeoutHdl( LINK( this, ImplRemoteControl, IdleHdl ) ); 746*cdf0e10cSrcweir m_aIdleTimer.SetTimeout( 500 ); 747*cdf0e10cSrcweir m_aIdleTimer.Start(); 748*cdf0e10cSrcweir #else 749*cdf0e10cSrcweir GetpApp()->InsertIdleHdl( LINK( this, ImplRemoteControl, IdleHdl ), 1 ); 750*cdf0e10cSrcweir #endif 751*cdf0e10cSrcweir m_bIdleInserted = sal_True; 752*cdf0e10cSrcweir } 753*cdf0e10cSrcweir 754*cdf0e10cSrcweir 755*cdf0e10cSrcweir StatementList::bReadingCommands = sal_True; 756*cdf0e10cSrcweir 757*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 758*cdf0e10cSrcweir if (!m_pDbgWin->bQuiet) 759*cdf0e10cSrcweir m_pDbgWin->Show(); 760*cdf0e10cSrcweir m_pDbgWin->AddText( "Reading " ); 761*cdf0e10cSrcweir m_pDbgWin->AddText( String::CreateFromInt64( nServiceId ) ); 762*cdf0e10cSrcweir m_pDbgWin->AddText( " :\n" ); 763*cdf0e10cSrcweir #endif 764*cdf0e10cSrcweir 765*cdf0e10cSrcweir if( nServiceId != SI_IPCCommandBlock && nServiceId != SI_DirectCommandBlock ) 766*cdf0e10cSrcweir { 767*cdf0e10cSrcweir DBG_ERROR1( "Ung�ltiger Request :%i", (int)nServiceId ); 768*cdf0e10cSrcweir return sal_False; 769*cdf0e10cSrcweir } 770*cdf0e10cSrcweir 771*cdf0e10cSrcweir SCmdStream *pCmdStream = new SCmdStream(pIn); 772*cdf0e10cSrcweir 773*cdf0e10cSrcweir pCmdStream->Read( nId ); 774*cdf0e10cSrcweir while( !pIn->IsEof() ) 775*cdf0e10cSrcweir { 776*cdf0e10cSrcweir switch( nId ) 777*cdf0e10cSrcweir { 778*cdf0e10cSrcweir case SICommand: 779*cdf0e10cSrcweir { 780*cdf0e10cSrcweir new StatementCommand( pCmdStream ); // Wird im Konstruktor an Liste angeh�ngt 781*cdf0e10cSrcweir break; 782*cdf0e10cSrcweir } 783*cdf0e10cSrcweir case SIControl: 784*cdf0e10cSrcweir case SIStringControl: 785*cdf0e10cSrcweir { 786*cdf0e10cSrcweir new StatementControl( pCmdStream, nId ); // Wird im Konstruktor an Liste angeh�ngt 787*cdf0e10cSrcweir break; 788*cdf0e10cSrcweir } 789*cdf0e10cSrcweir case SISlot: 790*cdf0e10cSrcweir { 791*cdf0e10cSrcweir new StatementSlot( pCmdStream ); // Wird im Konstruktor an Liste angeh�ngt 792*cdf0e10cSrcweir break; 793*cdf0e10cSrcweir } 794*cdf0e10cSrcweir case SIUnoSlot: 795*cdf0e10cSrcweir { 796*cdf0e10cSrcweir new StatementUnoSlot( pCmdStream ); // Wird im Konstruktor an Liste angeh�ngt 797*cdf0e10cSrcweir break; 798*cdf0e10cSrcweir } 799*cdf0e10cSrcweir case SIFlow: 800*cdf0e10cSrcweir { 801*cdf0e10cSrcweir new StatementFlow( nServiceId, pCmdStream, this ); // Wird im Konstruktor an Liste angeh�ngt 802*cdf0e10cSrcweir break; 803*cdf0e10cSrcweir } 804*cdf0e10cSrcweir default: 805*cdf0e10cSrcweir DBG_ERROR1( "Unbekannter Request Nr:%i", nId ); 806*cdf0e10cSrcweir break; 807*cdf0e10cSrcweir } 808*cdf0e10cSrcweir if( !pIn->IsEof() ) 809*cdf0e10cSrcweir pCmdStream->Read( nId ); 810*cdf0e10cSrcweir else { 811*cdf0e10cSrcweir DBG_ERROR( "truncated input stream" ); 812*cdf0e10cSrcweir } 813*cdf0e10cSrcweir } 814*cdf0e10cSrcweir 815*cdf0e10cSrcweir StatementList::bReadingCommands = sal_False; 816*cdf0e10cSrcweir 817*cdf0e10cSrcweir delete pCmdStream; 818*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 819*cdf0e10cSrcweir m_pDbgWin->AddText( "Done Reading " ); 820*cdf0e10cSrcweir m_pDbgWin->AddText( String::CreateFromInt64( nServiceId ) ); 821*cdf0e10cSrcweir m_pDbgWin->AddText( " :\n" ); 822*cdf0e10cSrcweir #endif 823*cdf0e10cSrcweir if ( !m_bInsideExecutionLoop ) 824*cdf0e10cSrcweir { 825*cdf0e10cSrcweir #ifdef DEBUG 826*cdf0e10cSrcweir m_pDbgWin->AddText( "Posting Event for CommandHdl.\n" ); 827*cdf0e10cSrcweir #endif 828*cdf0e10cSrcweir 829*cdf0e10cSrcweir GetpApp()->PostUserEvent( LINK( this, ImplRemoteControl, CommandHdl ) ); 830*cdf0e10cSrcweir } 831*cdf0e10cSrcweir #ifdef DEBUG 832*cdf0e10cSrcweir else 833*cdf0e10cSrcweir m_bInsideExecutionLoop = sal_True; 834*cdf0e10cSrcweir #endif 835*cdf0e10cSrcweir return sal_True; 836*cdf0e10cSrcweir } // sal_Bool ImplRemoteControl::QueCommands( sal_uLong nServiceId, SvStream *pIn ) 837*cdf0e10cSrcweir 838*cdf0e10cSrcweir 839*cdf0e10cSrcweir SvStream* ImplRemoteControl::GetReturnStream() 840*cdf0e10cSrcweir { 841*cdf0e10cSrcweir SvStream* pTemp = pRetStream; 842*cdf0e10cSrcweir pRetStream = NULL; 843*cdf0e10cSrcweir return pTemp; 844*cdf0e10cSrcweir } 845*cdf0e10cSrcweir 846*cdf0e10cSrcweir ImplRemoteControl::ImplRemoteControl() 847*cdf0e10cSrcweir : m_bIdleInserted( sal_False ) 848*cdf0e10cSrcweir , m_bInsideExecutionLoop( sal_False ) 849*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 850*cdf0e10cSrcweir , m_pDbgWin(NULL) 851*cdf0e10cSrcweir #endif 852*cdf0e10cSrcweir , pRetStream(NULL) 853*cdf0e10cSrcweir { 854*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 855*cdf0e10cSrcweir if ( RemoteControlCommunicationManager::GetPort() != TT_NO_PORT_DEFINED || RemoteControlCommunicationManager::nComm ) 856*cdf0e10cSrcweir { 857*cdf0e10cSrcweir m_pDbgWin = new EditWindow( NULL, CUniString("Debug Window"), WB_VSCROLL ); 858*cdf0e10cSrcweir m_pDbgWin->bQuiet = sal_True; 859*cdf0e10cSrcweir m_pDbgWin->Hide(); 860*cdf0e10cSrcweir m_pDbgWin->bQuiet = sal_False; 861*cdf0e10cSrcweir m_pDbgWin->Show(); 862*cdf0e10cSrcweir 863*cdf0e10cSrcweir StatementList::m_pDbgWin = m_pDbgWin; 864*cdf0e10cSrcweir } 865*cdf0e10cSrcweir #endif 866*cdf0e10cSrcweir if ( RemoteControlCommunicationManager::GetPort() == TT_NO_PORT_DEFINED ) 867*cdf0e10cSrcweir pServiceMgr = NULL; 868*cdf0e10cSrcweir else 869*cdf0e10cSrcweir { 870*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 871*cdf0e10cSrcweir pServiceMgr = new RemoteControlCommunicationManager( m_pDbgWin ); 872*cdf0e10cSrcweir #else 873*cdf0e10cSrcweir pServiceMgr = new RemoteControlCommunicationManager(); 874*cdf0e10cSrcweir #endif 875*cdf0e10cSrcweir pServiceMgr->SetDataReceivedHdl( LINK( this, ImplRemoteControl, QueCommandsEvent ) ); 876*cdf0e10cSrcweir pServiceMgr->StartCommunication(); 877*cdf0e10cSrcweir 878*cdf0e10cSrcweir #ifdef DBG_UTIL 879*cdf0e10cSrcweir DbgSetPrintTestTool( TestToolDebugPrint ); 880*cdf0e10cSrcweir // first change it, so we get the original Pointer 881*cdf0e10cSrcweir StatementCommand::pOriginal_osl_DebugMessageFunc = osl_setDebugMessageFunc( osl_TestToolDebugPrint ); 882*cdf0e10cSrcweir if ( DbgGetErrorOut() != DBG_OUT_TESTTOOL ) 883*cdf0e10cSrcweir osl_setDebugMessageFunc( StatementCommand::pOriginal_osl_DebugMessageFunc ); 884*cdf0e10cSrcweir #endif 885*cdf0e10cSrcweir } 886*cdf0e10cSrcweir if ( RemoteControlCommunicationManager::nComm ) 887*cdf0e10cSrcweir new ExtraIdle( this ); // Setzt die Bearbeitung wieder auf 888*cdf0e10cSrcweir } 889*cdf0e10cSrcweir 890*cdf0e10cSrcweir ImplRemoteControl::~ImplRemoteControl() 891*cdf0e10cSrcweir { 892*cdf0e10cSrcweir if ( MacroRecorder::HasMacroRecorder() ) 893*cdf0e10cSrcweir MacroRecorder::GetMacroRecorder()->SetActionRecord( sal_False ); // Will delete MacroRecorder if necessary 894*cdf0e10cSrcweir 895*cdf0e10cSrcweir 896*cdf0e10cSrcweir StatementList::bDying = sal_True; 897*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 898*cdf0e10cSrcweir if ( m_pDbgWin ) 899*cdf0e10cSrcweir m_pDbgWin->bQuiet = sal_True; // Keine Ausgabe mehr im Debugwindow 900*cdf0e10cSrcweir #endif 901*cdf0e10cSrcweir 902*cdf0e10cSrcweir #ifdef DBG_UTIL 903*cdf0e10cSrcweir // Zur�cksetzen, so da� nachfolgende Assertions nicht verloren gehen 904*cdf0e10cSrcweir DbgSetPrintTestTool( NULL ); 905*cdf0e10cSrcweir osl_setDebugMessageFunc( StatementCommand::pOriginal_osl_DebugMessageFunc ); 906*cdf0e10cSrcweir #endif 907*cdf0e10cSrcweir 908*cdf0e10cSrcweir if ( StatementList::pFirst ) 909*cdf0e10cSrcweir { // Es sind noch Kommandos da, also auch eine M�glichkeit zur�ckzusenden. 910*cdf0e10cSrcweir StatementList::pFirst->ReportError( GEN_RES_STR0( S_APP_SHUTDOWN ) ); 911*cdf0e10cSrcweir while ( StatementList::pFirst ) // Kommandos werden �bersprungen 912*cdf0e10cSrcweir StatementList::NormalReschedule(); // Fehler zur�ckgeschickt 913*cdf0e10cSrcweir } 914*cdf0e10cSrcweir 915*cdf0e10cSrcweir if ( pServiceMgr ) 916*cdf0e10cSrcweir pServiceMgr->StopCommunication(); 917*cdf0e10cSrcweir 918*cdf0e10cSrcweir if ( GetTTSettings()->pDisplayHidWin ) 919*cdf0e10cSrcweir { 920*cdf0e10cSrcweir delete (Window*)(GetTTSettings()->pDisplayHidWin); 921*cdf0e10cSrcweir GetTTSettings()->pDisplayHidWin = NULL; 922*cdf0e10cSrcweir } 923*cdf0e10cSrcweir if ( GetTTSettings()->pTranslateWin ) 924*cdf0e10cSrcweir { 925*cdf0e10cSrcweir delete (Window*)(GetTTSettings()->pTranslateWin); 926*cdf0e10cSrcweir GetTTSettings()->pTranslateWin = NULL; 927*cdf0e10cSrcweir } 928*cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 929*cdf0e10cSrcweir delete m_pDbgWin; 930*cdf0e10cSrcweir #endif 931*cdf0e10cSrcweir if( m_bIdleInserted ) 932*cdf0e10cSrcweir { 933*cdf0e10cSrcweir #ifdef TIMERIDLE 934*cdf0e10cSrcweir m_aIdleTimer.Stop(); 935*cdf0e10cSrcweir #else 936*cdf0e10cSrcweir GetpApp()->RemoveIdleHdl( LINK( this, ImplRemoteControl, IdleHdl ) ); 937*cdf0e10cSrcweir #endif 938*cdf0e10cSrcweir m_bIdleInserted = sal_False; 939*cdf0e10cSrcweir } 940*cdf0e10cSrcweir delete pServiceMgr; 941*cdf0e10cSrcweir } 942*cdf0e10cSrcweir 943*cdf0e10cSrcweir RemoteControl::RemoteControl() 944*cdf0e10cSrcweir { 945*cdf0e10cSrcweir pImpl = new ImplRemoteControl; 946*cdf0e10cSrcweir } 947*cdf0e10cSrcweir 948*cdf0e10cSrcweir RemoteControl::~RemoteControl() 949*cdf0e10cSrcweir { 950*cdf0e10cSrcweir delete pImpl; 951*cdf0e10cSrcweir } 952*cdf0e10cSrcweir 953*cdf0e10cSrcweir static ::osl::Mutex aMutex; 954*cdf0e10cSrcweir static RemoteControl* pRemoteControl = 0; 955*cdf0e10cSrcweir extern "C" void CreateRemoteControl() 956*cdf0e10cSrcweir { 957*cdf0e10cSrcweir if ( !pRemoteControl ) 958*cdf0e10cSrcweir { 959*cdf0e10cSrcweir ::osl::MutexGuard aGuard( aMutex ); 960*cdf0e10cSrcweir if ( !pRemoteControl ) 961*cdf0e10cSrcweir pRemoteControl = new RemoteControl(); 962*cdf0e10cSrcweir } 963*cdf0e10cSrcweir } 964*cdf0e10cSrcweir 965*cdf0e10cSrcweir extern "C" void DestroyRemoteControl() 966*cdf0e10cSrcweir { 967*cdf0e10cSrcweir ::osl::MutexGuard aGuard( aMutex ); 968*cdf0e10cSrcweir delete pRemoteControl; 969*cdf0e10cSrcweir pRemoteControl = 0; 970*cdf0e10cSrcweir } 971*cdf0e10cSrcweir 972*cdf0e10cSrcweir extern "C" void CreateEventLogger() 973*cdf0e10cSrcweir { 974*cdf0e10cSrcweir MacroRecorder::GetMacroRecorder()->SetActionLog(); 975*cdf0e10cSrcweir } 976*cdf0e10cSrcweir 977*cdf0e10cSrcweir extern "C" void DestroyEventLogger() 978*cdf0e10cSrcweir { 979*cdf0e10cSrcweir MacroRecorder::GetMacroRecorder()->SetActionLog( sal_False ); // Will delete MacroRecorder if necessary 980*cdf0e10cSrcweir } 981*cdf0e10cSrcweir 982