1*9d1279ecSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*9d1279ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*9d1279ecSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*9d1279ecSAndrew Rist * distributed with this work for additional information 6*9d1279ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*9d1279ecSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*9d1279ecSAndrew Rist * "License"); you may not use this file except in compliance 9*9d1279ecSAndrew Rist * with the License. You may obtain a copy of the License at 10*9d1279ecSAndrew Rist * 11*9d1279ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*9d1279ecSAndrew Rist * 13*9d1279ecSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*9d1279ecSAndrew Rist * software distributed under the License is distributed on an 15*9d1279ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*9d1279ecSAndrew Rist * KIND, either express or implied. See the License for the 17*9d1279ecSAndrew Rist * specific language governing permissions and limitations 18*9d1279ecSAndrew Rist * under the License. 19*9d1279ecSAndrew Rist * 20*9d1279ecSAndrew Rist *************************************************************/ 21*9d1279ecSAndrew Rist 22*9d1279ecSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_automation.hxx" 26cdf0e10cSrcweir #include <osl/mutex.hxx> 27cdf0e10cSrcweir 28cdf0e10cSrcweir #include <vcl/window.hxx> 29cdf0e10cSrcweir #include <vcl/vclevent.hxx> 30cdf0e10cSrcweir #include <vcl/button.hxx> 31cdf0e10cSrcweir #include <vcl/edit.hxx> 32cdf0e10cSrcweir #include <vcl/spinfld.hxx> 33cdf0e10cSrcweir #include <vcl/msgbox.hxx> 34cdf0e10cSrcweir #include <vcl/toolbox.hxx> 35cdf0e10cSrcweir #include <vcl/lstbox.hxx> 36cdf0e10cSrcweir #include <vcl/sound.hxx> 37cdf0e10cSrcweir #include <vcl/combobox.hxx> 38cdf0e10cSrcweir #include <vcl/floatwin.hxx> 39cdf0e10cSrcweir #include <basic/ttstrhlp.hxx> 40cdf0e10cSrcweir #include "statemnt.hxx" 41cdf0e10cSrcweir #include "retstrm.hxx" 42cdf0e10cSrcweir #include "rcontrol.hxx" 43cdf0e10cSrcweir #include "recorder.hxx" 44cdf0e10cSrcweir 45cdf0e10cSrcweir #include <comphelper/uieventslogger.hxx> 46cdf0e10cSrcweir 47cdf0e10cSrcweir MacroRecorder* MacroRecorder::pMacroRecorder = NULL; 48cdf0e10cSrcweir 49cdf0e10cSrcweir MacroRecorder::MacroRecorder() 50cdf0e10cSrcweir : pLastWin( NULL ) 51cdf0e10cSrcweir , pEditModify( NULL ) 52cdf0e10cSrcweir , pActionParent( NULL ) 53cdf0e10cSrcweir , aKeyUniqueID() 54cdf0e10cSrcweir , pKeyWin( NULL ) 55cdf0e10cSrcweir , bKeyFollowFocus( sal_False ) 56cdf0e10cSrcweir , m_bRecord( sal_False ) 57cdf0e10cSrcweir , m_bLog( sal_False ) 58cdf0e10cSrcweir { 59cdf0e10cSrcweir aHookRefresh.SetTimeout( 500 ); 60cdf0e10cSrcweir aHookRefresh.SetTimeoutHdl( LINK( this, MacroRecorder, HookRefreshHdl) ); 61cdf0e10cSrcweir aHookRefresh.Start(); 62cdf0e10cSrcweir aEventListenerHdl = LINK( this, MacroRecorder, EventListener ); 63cdf0e10cSrcweir AddEventHooks(); 64cdf0e10cSrcweir } 65cdf0e10cSrcweir 66cdf0e10cSrcweir MacroRecorder::~MacroRecorder() 67cdf0e10cSrcweir { 68cdf0e10cSrcweir aHookRefresh.Stop(); 69cdf0e10cSrcweir RemoveEventHooks(); 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir void MacroRecorder::AddEventHooks() 73cdf0e10cSrcweir { 74cdf0e10cSrcweir Window *pTopLevel = Application::GetFirstTopLevelWindow(); 75cdf0e10cSrcweir while ( pTopLevel ) 76cdf0e10cSrcweir { 77cdf0e10cSrcweir Window *pParent = pTopLevel; 78cdf0e10cSrcweir while ( pParent->GetParent() ) 79cdf0e10cSrcweir pParent = pParent->GetParent(); 80cdf0e10cSrcweir 81cdf0e10cSrcweir pParent->RemoveChildEventListener( aEventListenerHdl ); // might be instrumented already 82cdf0e10cSrcweir pParent->AddChildEventListener( aEventListenerHdl ); 83cdf0e10cSrcweir 84cdf0e10cSrcweir pTopLevel = Application::GetNextTopLevelWindow( pTopLevel ); 85cdf0e10cSrcweir } 86cdf0e10cSrcweir } 87cdf0e10cSrcweir 88cdf0e10cSrcweir void MacroRecorder::RemoveEventHooks() 89cdf0e10cSrcweir { 90cdf0e10cSrcweir Window *pTopLevel = Application::GetFirstTopLevelWindow(); 91cdf0e10cSrcweir while ( pTopLevel ) 92cdf0e10cSrcweir { 93cdf0e10cSrcweir pTopLevel->RemoveChildEventListener( aEventListenerHdl ); 94cdf0e10cSrcweir pTopLevel = Application::GetNextTopLevelWindow( pTopLevel ); 95cdf0e10cSrcweir } 96cdf0e10cSrcweir } 97cdf0e10cSrcweir 98cdf0e10cSrcweir IMPL_LINK( MacroRecorder, HookRefreshHdl, void*, EMPTYARG ) 99cdf0e10cSrcweir { 100cdf0e10cSrcweir AddEventHooks(); 101cdf0e10cSrcweir return 0; 102cdf0e10cSrcweir } 103cdf0e10cSrcweir 104cdf0e10cSrcweir void MacroRecorder::LogVCL( rtl::OString aParentID, sal_uInt16 nVCLWindowType, rtl::OString aID, String aMethod, sal_uInt16 nParam ) 105cdf0e10cSrcweir { 106cdf0e10cSrcweir ::comphelper::UiEventsLogger::logVcl( Id2Str( aParentID ), nVCLWindowType, Id2Str( aID ), aMethod, nParam ); 107cdf0e10cSrcweir } 108cdf0e10cSrcweir 109cdf0e10cSrcweir void MacroRecorder::LogVCL( rtl::OString aParentID, sal_uInt16 nVCLWindowType, rtl::OString aID, String aMethod ) 110cdf0e10cSrcweir { 111cdf0e10cSrcweir ::comphelper::UiEventsLogger::logVcl( Id2Str( aParentID ), nVCLWindowType, Id2Str( aID ), aMethod ); 112cdf0e10cSrcweir } 113cdf0e10cSrcweir 114cdf0e10cSrcweir Window* MacroRecorder::GetParentWithID( Window* pThis ) 115cdf0e10cSrcweir { 116cdf0e10cSrcweir Window *pOverlap = pThis->GetWindow( WINDOW_OVERLAP ); 117cdf0e10cSrcweir while ( pOverlap != pThis && !pThis->GetUniqueOrHelpId().getLength() && pThis->GET_REAL_PARENT() ) 118cdf0e10cSrcweir pThis = pThis->GET_REAL_PARENT(); 119cdf0e10cSrcweir return pThis; 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir rtl::OString MacroRecorder::GetParentID( Window* pThis ) 123cdf0e10cSrcweir { 124cdf0e10cSrcweir if ( pThis->GetParent() ) 125cdf0e10cSrcweir return pThis->GetParent()->GetUniqueOrHelpId(); 126cdf0e10cSrcweir else 127cdf0e10cSrcweir return rtl::OString(); 128cdf0e10cSrcweir } 129cdf0e10cSrcweir 130cdf0e10cSrcweir IMPL_LINK( MacroRecorder, EventListener, VclSimpleEvent*, pEvent ) 131cdf0e10cSrcweir { 132cdf0e10cSrcweir sal_Bool bSendData = sal_False; 133cdf0e10cSrcweir 134cdf0e10cSrcweir if ( pEvent->ISA( VclWindowEvent ) ) 135cdf0e10cSrcweir { 136cdf0e10cSrcweir VclWindowEvent* pWinEvent = ( VclWindowEvent* ) pEvent; 137cdf0e10cSrcweir Window* pWin = pWinEvent->GetWindow(); 138cdf0e10cSrcweir sal_uLong nEventID = pWinEvent->GetId(); 139cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 140cdf0e10cSrcweir if ( nEventID >= 1001 && nEventID != VCLEVENT_WINDOW_KEYUP ) 141cdf0e10cSrcweir nEventID = pWinEvent->GetId(); // Just something to set a breakpoint 142cdf0e10cSrcweir else 143cdf0e10cSrcweir return 0; 144cdf0e10cSrcweir #endif 145cdf0e10cSrcweir 146cdf0e10cSrcweir // check for different action after collecting keys 147cdf0e10cSrcweir // send if there_is_something_to_send 148cdf0e10cSrcweir // and eather event_is_not_of_interest 149cdf0e10cSrcweir // or ( new_window and new_window_is_interesting ) ( ignore interesting events to uninteresting window ) 150cdf0e10cSrcweir 151cdf0e10cSrcweir if ( aKeyString.Len() 152cdf0e10cSrcweir && ( ( nEventID != VCLEVENT_WINDOW_KEYINPUT 153cdf0e10cSrcweir && nEventID != VCLEVENT_WINDOW_MOUSEMOVE 154cdf0e10cSrcweir && nEventID != VCLEVENT_WINDOW_COMMAND 155cdf0e10cSrcweir && nEventID != VCLEVENT_WINDOW_KEYUP ) 156cdf0e10cSrcweir || ( pKeyWin != pWin 157cdf0e10cSrcweir && ( pWin->GetType() == WINDOW_CONTROL || pWin->GetType() == WINDOW_WINDOW ) 158cdf0e10cSrcweir ) 159cdf0e10cSrcweir ) 160cdf0e10cSrcweir ) 161cdf0e10cSrcweir { 162cdf0e10cSrcweir if ( m_bRecord ) 163cdf0e10cSrcweir { 164cdf0e10cSrcweir // we cannot access pKeyWin since it might have dissapeared 165cdf0e10cSrcweir if ( bKeyFollowFocus ) 166cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, aKeyUniqueID, (sal_uInt16)M_TypeKeys, aKeyString, bKeyFollowFocus ); 167cdf0e10cSrcweir else 168cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, aKeyUniqueID, (sal_uInt16)M_TypeKeys, aKeyString ); 169cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 170cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, aKeyUniqueID, (sal_uInt16)M_TypeKeys, String::CreateFromInt32( nEventID ) ); 171cdf0e10cSrcweir #endif 172cdf0e10cSrcweir bSendData = sal_True; 173cdf0e10cSrcweir } 174cdf0e10cSrcweir if ( m_bLog ) 175cdf0e10cSrcweir { 176cdf0e10cSrcweir // HACK Too many KeyEvents generated LogVCL( rtl::OString(), 0, aKeyUniqueID, CUniString("TypeKeys"), aKeyString.Len() ); 177cdf0e10cSrcweir } 178cdf0e10cSrcweir // cleanup 179cdf0e10cSrcweir aKeyString.Erase(); 180cdf0e10cSrcweir pKeyWin = NULL; 181cdf0e10cSrcweir bKeyFollowFocus = sal_False; 182cdf0e10cSrcweir } 183cdf0e10cSrcweir 184cdf0e10cSrcweir switch ( pWin->GetType() ) 185cdf0e10cSrcweir { 186cdf0e10cSrcweir case WINDOW_TABPAGE: 187cdf0e10cSrcweir switch( nEventID ) 188cdf0e10cSrcweir { 189cdf0e10cSrcweir case VCLEVENT_WINDOW_ACTIVATE: 190cdf0e10cSrcweir if ( m_bRecord ) 191cdf0e10cSrcweir { 192cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, rtl::OString(), (comm_USHORT)(M_SetPage|M_RET_NUM_CONTROL), Id2Str( pWin->GetUniqueOrHelpId() ) ); 193cdf0e10cSrcweir bSendData = sal_True; 194cdf0e10cSrcweir } 195cdf0e10cSrcweir if ( m_bLog ) 196cdf0e10cSrcweir { 197cdf0e10cSrcweir LogVCL( rtl::OString(), pWin->GetType(), pWin->GetUniqueOrHelpId(), CUniString("SetPage") ); 198cdf0e10cSrcweir } 199cdf0e10cSrcweir break; 200cdf0e10cSrcweir } 201cdf0e10cSrcweir break; 202cdf0e10cSrcweir case WINDOW_RADIOBUTTON: 203cdf0e10cSrcweir case WINDOW_IMAGERADIOBUTTON: 204cdf0e10cSrcweir switch( nEventID ) 205cdf0e10cSrcweir { 206cdf0e10cSrcweir case VCLEVENT_BUTTON_CLICK: // VCLEVENT_RADIOBUTTON_TOGGLE 207cdf0e10cSrcweir { 208cdf0e10cSrcweir if ( ((RadioButton*)pWin)->IsChecked() ) 209cdf0e10cSrcweir { 210cdf0e10cSrcweir if ( m_bRecord ) 211cdf0e10cSrcweir { 212cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (comm_USHORT)M_Check ); 213cdf0e10cSrcweir bSendData = sal_True; 214cdf0e10cSrcweir } 215cdf0e10cSrcweir if ( m_bLog ) 216cdf0e10cSrcweir { 217cdf0e10cSrcweir LogVCL( GetParentID( pWin ), pWin->GetType(), pWin->GetUniqueOrHelpId(), CUniString("Check") ); 218cdf0e10cSrcweir } 219cdf0e10cSrcweir } 220cdf0e10cSrcweir } 221cdf0e10cSrcweir break; 222cdf0e10cSrcweir } 223cdf0e10cSrcweir break; 224cdf0e10cSrcweir case WINDOW_CHECKBOX: 225cdf0e10cSrcweir case WINDOW_TRISTATEBOX: 226cdf0e10cSrcweir switch( nEventID ) 227cdf0e10cSrcweir { 228cdf0e10cSrcweir case VCLEVENT_BUTTON_CLICK: //VCLEVENT_CHECKBOX_TOGGLE: 229cdf0e10cSrcweir { 230cdf0e10cSrcweir comm_USHORT nMethod; 231cdf0e10cSrcweir String aMethod; 232cdf0e10cSrcweir switch ( ((TriStateBox*)pWin)->GetState() ) 233cdf0e10cSrcweir { 234cdf0e10cSrcweir case STATE_CHECK: nMethod = M_Check; aMethod = CUniString("Check"); break; 235cdf0e10cSrcweir case STATE_NOCHECK: nMethod = M_UnCheck; aMethod = CUniString("UnCheck"); break; 236cdf0e10cSrcweir case STATE_DONTKNOW: nMethod = M_TriState; aMethod = CUniString("TriState"); break; 237cdf0e10cSrcweir default: nMethod = M_Check; 238cdf0e10cSrcweir DBG_ERROR( "Unknown state in TriStateBox::GetState()" ); 239cdf0e10cSrcweir } 240cdf0e10cSrcweir if ( m_bRecord ) 241cdf0e10cSrcweir { 242cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), nMethod ); 243cdf0e10cSrcweir bSendData = sal_True; 244cdf0e10cSrcweir } 245cdf0e10cSrcweir if ( m_bLog ) 246cdf0e10cSrcweir { 247cdf0e10cSrcweir LogVCL( GetParentID( pWin ), pWin->GetType(), pWin->GetUniqueOrHelpId(), aMethod ); 248cdf0e10cSrcweir } 249cdf0e10cSrcweir } 250cdf0e10cSrcweir break; 251cdf0e10cSrcweir } 252cdf0e10cSrcweir break; 253cdf0e10cSrcweir case WINDOW_EDIT: 254cdf0e10cSrcweir case WINDOW_MULTILINEEDIT: 255cdf0e10cSrcweir switch( nEventID ) 256cdf0e10cSrcweir { 257cdf0e10cSrcweir case VCLEVENT_EDIT_MODIFY: 258cdf0e10cSrcweir pEditModify = pWin; 259cdf0e10cSrcweir aEditModifyString = ((Edit*)pWin)->GetText(); 260cdf0e10cSrcweir break; 261cdf0e10cSrcweir } 262cdf0e10cSrcweir break; 263cdf0e10cSrcweir case WINDOW_MULTILISTBOX: 264cdf0e10cSrcweir switch( nEventID ) 265cdf0e10cSrcweir { 266cdf0e10cSrcweir case VCLEVENT_LISTBOX_SELECT: 267cdf0e10cSrcweir Sound::Beep(); 268cdf0e10cSrcweir } 269cdf0e10cSrcweir case WINDOW_LISTBOX: 270cdf0e10cSrcweir switch( nEventID ) 271cdf0e10cSrcweir { 272cdf0e10cSrcweir // case VCLEVENT_LISTBOX_DOUBLECLICK: 273cdf0e10cSrcweir case VCLEVENT_LISTBOX_SELECT: 274cdf0e10cSrcweir if ( m_bRecord ) 275cdf0e10cSrcweir { 276cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (comm_USHORT)M_Select, comm_ULONG( ((ListBox*)pWin)->GetSelectEntryPos() +1 ) ); 277cdf0e10cSrcweir bSendData = sal_True; 278cdf0e10cSrcweir } 279cdf0e10cSrcweir if ( m_bLog ) 280cdf0e10cSrcweir { 281cdf0e10cSrcweir LogVCL( GetParentID( pWin ), pWin->GetType(), pWin->GetUniqueOrHelpId(), CUniString("Select"), ((ListBox*)pWin)->GetSelectEntryPos() ); 282cdf0e10cSrcweir } 283cdf0e10cSrcweir break; 284cdf0e10cSrcweir } 285cdf0e10cSrcweir break; 286cdf0e10cSrcweir case WINDOW_COMBOBOX: 287cdf0e10cSrcweir case WINDOW_PATTERNBOX: 288cdf0e10cSrcweir case WINDOW_NUMERICBOX: 289cdf0e10cSrcweir case WINDOW_METRICBOX: 290cdf0e10cSrcweir case WINDOW_CURRENCYBOX: 291cdf0e10cSrcweir case WINDOW_DATEBOX: 292cdf0e10cSrcweir case WINDOW_TIMEBOX: 293cdf0e10cSrcweir switch( nEventID ) 294cdf0e10cSrcweir { 295cdf0e10cSrcweir case VCLEVENT_EDIT_MODIFY: 296cdf0e10cSrcweir pEditModify = pWin; 297cdf0e10cSrcweir aEditModifyString = ((Edit*)pWin)->GetText(); 298cdf0e10cSrcweir break; 299cdf0e10cSrcweir case VCLEVENT_COMBOBOX_SELECT: 300cdf0e10cSrcweir { 301cdf0e10cSrcweir pEditModify = NULL; 302cdf0e10cSrcweir aEditModifyString.Erase(); 303cdf0e10cSrcweir 304cdf0e10cSrcweir sal_uInt16 nPos = ((ComboBox*)pWin)->GetEntryPos(((ComboBox*)pWin)->GetText()); 305cdf0e10cSrcweir if ( m_bRecord ) 306cdf0e10cSrcweir { 307cdf0e10cSrcweir if ( nPos == COMBOBOX_ENTRY_NOTFOUND ) 308cdf0e10cSrcweir Sound::Beep(); 309cdf0e10cSrcweir else 310cdf0e10cSrcweir { 311cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (comm_USHORT)M_Select, (comm_ULONG) nPos+1 ); 312cdf0e10cSrcweir bSendData = sal_True; 313cdf0e10cSrcweir } 314cdf0e10cSrcweir } 315cdf0e10cSrcweir if ( m_bLog ) 316cdf0e10cSrcweir { 317cdf0e10cSrcweir LogVCL( GetParentID( pWin ), pWin->GetType(), pWin->GetUniqueOrHelpId(), CUniString("Select"), nPos ); 318cdf0e10cSrcweir } 319cdf0e10cSrcweir } 320cdf0e10cSrcweir } 321cdf0e10cSrcweir break; 322cdf0e10cSrcweir case WINDOW_PUSHBUTTON: 323cdf0e10cSrcweir case WINDOW_OKBUTTON: 324cdf0e10cSrcweir case WINDOW_CANCELBUTTON: 325cdf0e10cSrcweir case WINDOW_IMAGEBUTTON: 326cdf0e10cSrcweir case WINDOW_MOREBUTTON: 327cdf0e10cSrcweir case WINDOW_HELPBUTTON: 328cdf0e10cSrcweir switch( nEventID ) 329cdf0e10cSrcweir { 330cdf0e10cSrcweir case VCLEVENT_BUTTON_CLICK: 331cdf0e10cSrcweir Window* pParent = pWin->GetParent(); 332cdf0e10cSrcweir sal_Bool bDone = sal_False; 333cdf0e10cSrcweir if ( pParent->IsDialog() && !pWin->GetUniqueOrHelpId().getLength() ) 334cdf0e10cSrcweir { 335cdf0e10cSrcweir switch ( pParent->GetType() ) 336cdf0e10cSrcweir { 337cdf0e10cSrcweir case WINDOW_MESSBOX: 338cdf0e10cSrcweir case WINDOW_INFOBOX: 339cdf0e10cSrcweir case WINDOW_WARNINGBOX: 340cdf0e10cSrcweir case WINDOW_ERRORBOX: 341cdf0e10cSrcweir case WINDOW_QUERYBOX: 342cdf0e10cSrcweir case WINDOW_BUTTONDIALOG: 343cdf0e10cSrcweir { 344cdf0e10cSrcweir comm_USHORT nMethod; 345cdf0e10cSrcweir String aMethod; 346cdf0e10cSrcweir ButtonDialog* pBD = (ButtonDialog*)pParent; 347cdf0e10cSrcweir 348cdf0e10cSrcweir // we have to find the current Button ID ourselves since it is not generated at this point :-( 349cdf0e10cSrcweir sal_uInt16 nCurrentButtonId = 0xffff; // Some wild value to wak up people 350cdf0e10cSrcweir sal_uInt16 i; 351cdf0e10cSrcweir for ( i = 0; i < pBD->GetButtonCount() ; i++ ) 352cdf0e10cSrcweir { 353cdf0e10cSrcweir if ( pBD->GetPushButton( pBD->GetButtonId(i) ) == pWin ) 354cdf0e10cSrcweir { 355cdf0e10cSrcweir nCurrentButtonId = pBD->GetButtonId(i); 356cdf0e10cSrcweir break; 357cdf0e10cSrcweir } 358cdf0e10cSrcweir } 359cdf0e10cSrcweir 360cdf0e10cSrcweir switch ( nCurrentButtonId ) 361cdf0e10cSrcweir { 362cdf0e10cSrcweir case BUTTONID_OK: nMethod = M_OK; aMethod = CUniString("OK"); break; 363cdf0e10cSrcweir case BUTTONID_CANCEL: nMethod = M_Cancel; aMethod = CUniString("Cancel"); break; 364cdf0e10cSrcweir case BUTTONID_YES: nMethod = M_Yes; aMethod = CUniString("Yes"); break; 365cdf0e10cSrcweir case BUTTONID_NO: nMethod = M_No; aMethod = CUniString("No"); break; 366cdf0e10cSrcweir case BUTTONID_RETRY: nMethod = M_Repeat; aMethod = CUniString("Repeat"); break; 367cdf0e10cSrcweir case BUTTONID_HELP: nMethod = M_Help; aMethod = CUniString("Help"); break; 368cdf0e10cSrcweir default: nMethod = M_Click; aMethod = CUniString("Click"); 369cdf0e10cSrcweir } 370cdf0e10cSrcweir if ( m_bRecord ) 371cdf0e10cSrcweir { 372cdf0e10cSrcweir if ( nMethod != M_Click ) 373cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, UID_ACTIVE, nMethod ); 374cdf0e10cSrcweir else 375cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, UID_ACTIVE, nMethod, (comm_ULONG)nCurrentButtonId ); 376cdf0e10cSrcweir bSendData = sal_True; 377cdf0e10cSrcweir } 378cdf0e10cSrcweir if ( m_bLog ) 379cdf0e10cSrcweir { 380cdf0e10cSrcweir if ( nMethod != M_Click ) 381cdf0e10cSrcweir LogVCL( rtl::OString(), pWin->GetType(), pWin->GetUniqueOrHelpId(), aMethod ); 382cdf0e10cSrcweir else 383cdf0e10cSrcweir LogVCL( rtl::OString(), pWin->GetType(), pWin->GetUniqueOrHelpId(), aMethod, nCurrentButtonId ); 384cdf0e10cSrcweir bDone = sal_True; 385cdf0e10cSrcweir } 386cdf0e10cSrcweir } 387cdf0e10cSrcweir break; 388cdf0e10cSrcweir default: 389cdf0e10cSrcweir { 390cdf0e10cSrcweir comm_USHORT nMethod; 391cdf0e10cSrcweir String aMethod; 392cdf0e10cSrcweir switch ( pWin->GetType() ) 393cdf0e10cSrcweir { 394cdf0e10cSrcweir case WINDOW_OKBUTTON: nMethod = M_OK; aMethod = CUniString("OK"); break; 395cdf0e10cSrcweir case WINDOW_CANCELBUTTON: nMethod = M_Cancel; aMethod = CUniString("Cancel"); break; 396cdf0e10cSrcweir case WINDOW_HELPBUTTON: nMethod = M_Help; aMethod = CUniString("Help"); break; 397cdf0e10cSrcweir default: nMethod = M_Default;aMethod = CUniString("Unknown Button"); 398cdf0e10cSrcweir DBG_ERROR( "Unknown Button" ); 399cdf0e10cSrcweir } 400cdf0e10cSrcweir if ( m_bRecord ) 401cdf0e10cSrcweir { 402cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pParent->GetUniqueOrHelpId(), nMethod ); 403cdf0e10cSrcweir bSendData = sal_True; 404cdf0e10cSrcweir } 405cdf0e10cSrcweir if ( m_bLog ) 406cdf0e10cSrcweir { 407cdf0e10cSrcweir LogVCL( GetParentID( pWin ), pWin->GetType(), pWin->GetUniqueOrHelpId(), aMethod ); 408cdf0e10cSrcweir bDone = sal_True; 409cdf0e10cSrcweir } 410cdf0e10cSrcweir } 411cdf0e10cSrcweir break; 412cdf0e10cSrcweir } 413cdf0e10cSrcweir } 414cdf0e10cSrcweir if ( m_bRecord ) 415cdf0e10cSrcweir { 416cdf0e10cSrcweir if ( !bSendData && pWin->GetUniqueOrHelpId().getLength() ) 417cdf0e10cSrcweir { 418cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (comm_USHORT)M_Click ); 419cdf0e10cSrcweir bSendData = sal_True; 420cdf0e10cSrcweir } 421cdf0e10cSrcweir } 422cdf0e10cSrcweir if ( m_bLog ) 423cdf0e10cSrcweir { 424cdf0e10cSrcweir if ( !bDone ) 425cdf0e10cSrcweir LogVCL( GetParentID( pWin ), pWin->GetType(), pWin->GetUniqueOrHelpId(), CUniString("Click") ); 426cdf0e10cSrcweir } 427cdf0e10cSrcweir } 428cdf0e10cSrcweir break; 429cdf0e10cSrcweir /* case C_MoreButton: 430cdf0e10cSrcweir switch( nEventID ) 431cdf0e10cSrcweir { 432cdf0e10cSrcweir case M_IsOpen : 433cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, ((MoreButton*)pControl)->GetState()); 434cdf0e10cSrcweir break; 435cdf0e10cSrcweir case M_Click : 436cdf0e10cSrcweir ((MoreButton*)pControl)->Click(); 437cdf0e10cSrcweir break; 438cdf0e10cSrcweir case M_Open : 439cdf0e10cSrcweir ((MoreButton*)pControl)->SetState(sal_True); 440cdf0e10cSrcweir break; 441cdf0e10cSrcweir case M_Close : 442cdf0e10cSrcweir ((MoreButton*)pControl)->SetState(sal_False); 443cdf0e10cSrcweir break; 444cdf0e10cSrcweir default: 445cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MoreButton" ) ); 446cdf0e10cSrcweir break; 447cdf0e10cSrcweir } 448cdf0e10cSrcweir break;*/ 449cdf0e10cSrcweir case WINDOW_SPINFIELD: 450cdf0e10cSrcweir case WINDOW_PATTERNFIELD: 451cdf0e10cSrcweir case WINDOW_NUMERICFIELD: 452cdf0e10cSrcweir case WINDOW_METRICFIELD: 453cdf0e10cSrcweir case WINDOW_CURRENCYFIELD: 454cdf0e10cSrcweir case WINDOW_DATEFIELD: 455cdf0e10cSrcweir case WINDOW_TIMEFIELD: 456cdf0e10cSrcweir switch( nEventID ) 457cdf0e10cSrcweir { 458cdf0e10cSrcweir case VCLEVENT_SPINFIELD_UP: 459cdf0e10cSrcweir case VCLEVENT_SPINFIELD_DOWN: 460cdf0e10cSrcweir case VCLEVENT_SPINFIELD_FIRST: 461cdf0e10cSrcweir case VCLEVENT_SPINFIELD_LAST: 462cdf0e10cSrcweir { 463cdf0e10cSrcweir pEditModify = NULL; 464cdf0e10cSrcweir aEditModifyString.Erase(); 465cdf0e10cSrcweir 466cdf0e10cSrcweir comm_USHORT nMethod; 467cdf0e10cSrcweir String aMethod; 468cdf0e10cSrcweir switch ( nEventID ) 469cdf0e10cSrcweir { 470cdf0e10cSrcweir case VCLEVENT_SPINFIELD_UP: nMethod = M_More; aMethod = CUniString("More"); break; 471cdf0e10cSrcweir case VCLEVENT_SPINFIELD_DOWN: nMethod = M_Less; aMethod = CUniString("Less"); break; 472cdf0e10cSrcweir case VCLEVENT_SPINFIELD_FIRST: nMethod = M_ToMin; aMethod = CUniString("ToMin"); break; 473cdf0e10cSrcweir case VCLEVENT_SPINFIELD_LAST: nMethod = M_ToMax; aMethod = CUniString("ToMax"); break; 474cdf0e10cSrcweir default: nMethod = M_ToMin; aMethod = CUniString("Unknown"); 475cdf0e10cSrcweir DBG_ERROR( "Unknown EventID in Spinfield" ); 476cdf0e10cSrcweir } 477cdf0e10cSrcweir if ( m_bRecord ) 478cdf0e10cSrcweir { 479cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), nMethod ); 480cdf0e10cSrcweir bSendData = sal_True; 481cdf0e10cSrcweir } 482cdf0e10cSrcweir if ( m_bLog ) 483cdf0e10cSrcweir { 484cdf0e10cSrcweir LogVCL( GetParentID( pWin ), pWin->GetType(), pWin->GetUniqueOrHelpId(), aMethod ); 485cdf0e10cSrcweir } 486cdf0e10cSrcweir } 487cdf0e10cSrcweir break; 488cdf0e10cSrcweir case VCLEVENT_EDIT_MODIFY: 489cdf0e10cSrcweir pEditModify = pWin; 490cdf0e10cSrcweir aEditModifyString = ((SpinField*)pWin)->GetText(); 491cdf0e10cSrcweir break; 492cdf0e10cSrcweir } 493cdf0e10cSrcweir break; 494cdf0e10cSrcweir 495cdf0e10cSrcweir case WINDOW_MENUBUTTON: 496cdf0e10cSrcweir switch( nEventID ) 497cdf0e10cSrcweir { 498cdf0e10cSrcweir case VCLEVENT_BUTTON_CLICK: 499cdf0e10cSrcweir if ( m_bRecord ) 500cdf0e10cSrcweir { 501cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (comm_USHORT)M_Click ); 502cdf0e10cSrcweir bSendData = sal_True; 503cdf0e10cSrcweir } 504cdf0e10cSrcweir if ( m_bLog ) 505cdf0e10cSrcweir { 506cdf0e10cSrcweir LogVCL( GetParentID( pWin ), pWin->GetType(), pWin->GetUniqueOrHelpId(), CUniString("Click") ); 507cdf0e10cSrcweir } 508cdf0e10cSrcweir break; 509cdf0e10cSrcweir /* Keyevent or Timeout 510cdf0e10cSrcweir case M_Open : 511cdf0e10cSrcweir { 512cdf0e10cSrcweir MouseEvent aMEvnt; 513cdf0e10cSrcweir Point aPt( pControl->GetSizePixel().Width() / 2, pControl->GetSizePixel().Height() / 2 ); 514cdf0e10cSrcweir aMEvnt = MouseEvent( aPt,1,MOUSE_SIMPLECLICK,MOUSE_LEFT ); 515cdf0e10cSrcweir ImplMouseButtonDown( pControl, aMEvnt ); 516cdf0e10cSrcweir 517cdf0e10cSrcweir sal_uLong nStart = Time::GetSystemTicks(); 518cdf0e10cSrcweir sal_uLong nDelay = pControl->GetSettings().GetMouseSettings().GetActionDelay(); 519cdf0e10cSrcweir while ( ( Time::GetSystemTicks() - nStart ) < nDelay + 100 ) 520cdf0e10cSrcweir SafeReschedule(); 521cdf0e10cSrcweir 522cdf0e10cSrcweir ImplMouseButtonUp ( pControl, aMEvnt ); 523cdf0e10cSrcweir } 524cdf0e10cSrcweir break;*/ 525cdf0e10cSrcweir } 526cdf0e10cSrcweir break; 527cdf0e10cSrcweir case WINDOW_TOOLBOX: 528cdf0e10cSrcweir { 529cdf0e10cSrcweir ToolBox *pTB = ((ToolBox*)pWin); 530cdf0e10cSrcweir switch( nEventID ) 531cdf0e10cSrcweir { 532cdf0e10cSrcweir case VCLEVENT_TOOLBOX_SELECT: 533cdf0e10cSrcweir { // a Button has been clicked 534cdf0e10cSrcweir // so this cannot be a tearoff or OpenMenu anymore 535cdf0e10cSrcweir pActionParent = NULL; 536cdf0e10cSrcweir // compare to 1 for floating ToolBoxes 537cdf0e10cSrcweir if ( m_bRecord ) 538cdf0e10cSrcweir { 539cdf0e10cSrcweir if ( !pWin->GetUniqueOrHelpId().getLength() /* || pWin->GetUniqueOrHelpId().Matches( 1 ) */ ) 540cdf0e10cSrcweir // generate direct Button access 541cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, Str2Id( pTB->GetItemCommand( pTB->GetCurItemId() ) ), (comm_USHORT)(M_Click) ); 542cdf0e10cSrcweir else 543cdf0e10cSrcweir // access via Toolbox 544cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pTB->GetUniqueOrHelpId(), (comm_USHORT)(M_Click|M_RET_NUM_CONTROL), Id2Str( pTB->GetHelpId( pTB->GetCurItemId() ) ) ); 545cdf0e10cSrcweir bSendData = sal_True; 546cdf0e10cSrcweir } 547cdf0e10cSrcweir /* not needed if ( m_bLog ) 548cdf0e10cSrcweir { 549cdf0e10cSrcweir }*/ 550cdf0e10cSrcweir } 551cdf0e10cSrcweir break; 552cdf0e10cSrcweir case VCLEVENT_TOOLBOX_CLICK: /// ATTENTION this is called during initialisation of toolbox. whoever 'invented' this 553cdf0e10cSrcweir pActionParent = pTB; 554cdf0e10cSrcweir break; 555cdf0e10cSrcweir // case VCLEVENT_WINDOW_SHOW: // not usable ATM. see above 556cdf0e10cSrcweir // if ( pActionParent ) 557cdf0e10cSrcweir // { // a new toolbox opens up, might be a tearoff 558cdf0e10cSrcweir // if ( pActionParent != pWin ) 559cdf0e10cSrcweir // { // it IS a tearoff not an undock 560cdf0e10cSrcweir // // compare to 1 for floating ToolBoxes 561cdf0e10cSrcweir // if ( m_bRecord ) 562cdf0e10cSrcweir // { 563cdf0e10cSrcweir // if ( !pWin->GetSmartUniqueOrHelpId().HasAny() || pWin->GetSmartUniqueOrHelpId().Matches( 1 ) ) 564cdf0e10cSrcweir // // generate direct Button access 565cdf0e10cSrcweir // StatementList::pRet->GenReturn( RET_MacroRecorder, rtl::OString( pActionParent->GetHelpId( pActionParent->GetCurItemId() ) ), (comm_USHORT)(M_TearOff) ); 566cdf0e10cSrcweir // else 567cdf0e10cSrcweir // // access via Toolbox 568cdf0e10cSrcweir // StatementList::pRet->GenReturn( RET_MacroRecorder, pActionParent->GetSmartUniqueOrHelpId(), (comm_USHORT)(M_TearOff|M_RET_NUM_CONTROL), static_cast<comm_ULONG>(pActionParent->GetHelpId( pActionParent->GetCurItemId() )) ); // GetHelpId() sal_uLong != comm_ULONG on 64bit 569cdf0e10cSrcweir // bSendData = sal_True; 570cdf0e10cSrcweir // } 571cdf0e10cSrcweir // if ( m_bLog ) 572cdf0e10cSrcweir // { 573cdf0e10cSrcweir // LogVCL( pActionParent->GetSmartUniqueOrHelpId(), pWin->GetType(), pActionParent->GetHelpId( pActionParent->GetCurItemId() ), CUniString("TearOff") ); 574cdf0e10cSrcweir // } 575cdf0e10cSrcweir // } 576cdf0e10cSrcweir // pActionParent = NULL; 577cdf0e10cSrcweir // } 578cdf0e10cSrcweir // break; 579cdf0e10cSrcweir case VCLEVENT_TOOLBOX_DEACTIVATE: 580cdf0e10cSrcweir pActionParent = NULL; 581cdf0e10cSrcweir break; 582cdf0e10cSrcweir } 583cdf0e10cSrcweir } 584cdf0e10cSrcweir break; 585cdf0e10cSrcweir /* ToolBox *pTB = ((ToolBox*)pControl); 586cdf0e10cSrcweir if ( pTB->GetUniqueOrHelpId() != nUId ) // Also Button auf der ToolBox gefunden 587cdf0e10cSrcweir { 588cdf0e10cSrcweir if ( nParams == PARAM_NONE ) 589cdf0e10cSrcweir { // Wir f�lschen einen Parameter 590cdf0e10cSrcweir nParams = PARAM_USHORT_1; 591cdf0e10cSrcweir nNr1 = nUId; 592cdf0e10cSrcweir } 593cdf0e10cSrcweir else 594cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); 595cdf0e10cSrcweir } 596cdf0e10cSrcweir 597cdf0e10cSrcweir #define FIND_HELP\ 598cdf0e10cSrcweir {\ 599cdf0e10cSrcweir if( nParams == PARAM_USHORT_1 )\ 600cdf0e10cSrcweir nLNr1 = nNr1;\ 601cdf0e10cSrcweir for ( nNr1 = 0; nNr1 < pTB->GetItemCount() && nLNr1 != pTB->GetHelpId(pTB->GetItemId(nNr1)) ; nNr1++ ) {}\ 602cdf0e10cSrcweir bBool1 = nLNr1 == pTB->GetHelpId(pTB->GetItemId(nNr1));\ 603cdf0e10cSrcweir if ( !bBool1 )\ 604cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_HELPID_ON_TOOLBOX_NOT_FOUND, MethodString( nMethodId ) ) );\ 605cdf0e10cSrcweir else\ 606cdf0e10cSrcweir {\ 607cdf0e10cSrcweir if ( !pTB->IsItemEnabled( pTB->GetItemId(nNr1) ) && nMethodId != _M_IsEnabled )\ 608cdf0e10cSrcweir {\ 609cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_BUTTON_DISABLED_ON_TOOLBOX, MethodString( nMethodId ) ) );\ 610cdf0e10cSrcweir bBool1 = sal_False;\ 611cdf0e10cSrcweir }\ 612cdf0e10cSrcweir else if ( !pTB->IsItemVisible( pTB->GetItemId(nNr1) ) )\ 613cdf0e10cSrcweir {\ 614cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_BUTTON_HIDDEN_ON_TOOLBOX, MethodString( nMethodId ) ) );\ 615cdf0e10cSrcweir bBool1 = sal_False;\ 616cdf0e10cSrcweir }\ 617cdf0e10cSrcweir else\ 618cdf0e10cSrcweir {\ 619cdf0e10cSrcweir if ( pTB->GetItemRect(pTB->GetItemId(nNr1)).IsEmpty() )\ 620cdf0e10cSrcweir {\ 621cdf0e10cSrcweir sal_uInt16 nLine = pTB->GetCurLine();\ 622cdf0e10cSrcweir do\ 623cdf0e10cSrcweir {\ 624cdf0e10cSrcweir pTB->ShowLine( sal_False );\ 625cdf0e10cSrcweir for ( int i = 1 ; i < 30 ; i++ )\ 626cdf0e10cSrcweir SafeReschedule();\ 627cdf0e10cSrcweir }\ 628cdf0e10cSrcweir while ( pTB->GetCurLine() != nLine && pTB->GetItemRect(pTB->GetItemId(nNr1)).IsEmpty() );\ 629cdf0e10cSrcweir pTB->Invalidate( pTB->GetScrollRect() );\ 630cdf0e10cSrcweir }\ 631cdf0e10cSrcweir if ( pTB->GetItemRect(pTB->GetItemId(nNr1)).IsEmpty() )\ 632cdf0e10cSrcweir {\ 633cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_CANNOT_MAKE_BUTTON_VISIBLE_IN_TOOLBOX, MethodString( nMethodId ) ) );\ 634cdf0e10cSrcweir bBool1 = sal_False;\ 635cdf0e10cSrcweir }\ 636cdf0e10cSrcweir }\ 637cdf0e10cSrcweir }\ 638cdf0e10cSrcweir }\ 639cdf0e10cSrcweir 640cdf0e10cSrcweir switch( nEventID ) 641cdf0e10cSrcweir { 642cdf0e10cSrcweir case M_SetNextToolBox : 643cdf0e10cSrcweir if ( (nParams & PARAM_STR_1) ) 644cdf0e10cSrcweir pTB->SetNextToolBox( aString1 ); 645cdf0e10cSrcweir else 646cdf0e10cSrcweir pTB->SetNextToolBox( pTB->GetNextToolBox() ); 647cdf0e10cSrcweir pTB->NextToolBox(); 648cdf0e10cSrcweir break; 649cdf0e10cSrcweir case M_GetNextToolBox : 650cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, (String)pTB->GetNextToolBox()); 651cdf0e10cSrcweir break; 652cdf0e10cSrcweir default: 653cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ToolBox" ) ); 654cdf0e10cSrcweir break; 655cdf0e10cSrcweir } 656cdf0e10cSrcweir } 657cdf0e10cSrcweir break; 658cdf0e10cSrcweir */ 659cdf0e10cSrcweir case WINDOW_CONTROL: 660cdf0e10cSrcweir case WINDOW_WINDOW: 661cdf0e10cSrcweir switch( nEventID ) 662cdf0e10cSrcweir { 663cdf0e10cSrcweir case VCLEVENT_WINDOW_COMMAND: 664cdf0e10cSrcweir break; 665cdf0e10cSrcweir case VCLEVENT_WINDOW_KEYINPUT: 666cdf0e10cSrcweir { 667cdf0e10cSrcweir const KeyEvent *pKeyEvent = ((KeyEvent*)pWinEvent->GetData()); 668cdf0e10cSrcweir const KeyCode aKeyCode = pKeyEvent->GetKeyCode(); 669cdf0e10cSrcweir if ( pKeyEvent ) 670cdf0e10cSrcweir { 671cdf0e10cSrcweir pKeyWin = pWin; 672cdf0e10cSrcweir Window *pIdWin = GetParentWithID( pWin ); 673cdf0e10cSrcweir if ( pIdWin != pWin ) 674cdf0e10cSrcweir bKeyFollowFocus = sal_True; 675cdf0e10cSrcweir aKeyUniqueID = pIdWin->GetUniqueOrHelpId(); 676cdf0e10cSrcweir if ( m_bLog ) 677cdf0e10cSrcweir { 678cdf0e10cSrcweir // HACK Too many KeyEvents generated if ( aKeyString.Len() == 0 ) 679cdf0e10cSrcweir // HACK Too many KeyEvents generated LogVCL( rtl::OString(), 0, aKeyUniqueID, CUniString("TypeKeysStart") ); 680cdf0e10cSrcweir } 681cdf0e10cSrcweir if ( ( !aKeyCode.IsMod1() && !aKeyCode.IsMod2() ) && 682cdf0e10cSrcweir (( aKeyCode.GetGroup() == KEYGROUP_NUM) || 683cdf0e10cSrcweir ( aKeyCode.GetGroup() == KEYGROUP_ALPHA) || 684cdf0e10cSrcweir ( aKeyCode.GetCode() == KEY_SPACE) || 685cdf0e10cSrcweir ( aKeyCode.GetCode() == KEY_ADD) || 686cdf0e10cSrcweir ( aKeyCode.GetCode() == KEY_SUBTRACT) || 687cdf0e10cSrcweir ( aKeyCode.GetCode() == KEY_MULTIPLY) || 688cdf0e10cSrcweir ( aKeyCode.GetCode() == KEY_DIVIDE) || 689cdf0e10cSrcweir ( aKeyCode.GetCode() == KEY_POINT) || 690cdf0e10cSrcweir ( aKeyCode.GetCode() == KEY_COMMA) || 691cdf0e10cSrcweir ( aKeyCode.GetCode() == KEY_EQUAL) || 692cdf0e10cSrcweir ( aKeyCode.GetCode() == 0) ) ) 693cdf0e10cSrcweir { 694cdf0e10cSrcweir DBG_ASSERT( pKeyEvent->GetCharCode(), "no charcode found" ); 695cdf0e10cSrcweir aKeyString += pKeyEvent->GetCharCode(); 696cdf0e10cSrcweir } 697cdf0e10cSrcweir else 698cdf0e10cSrcweir { // not a regular key, transfer KeyCode 699cdf0e10cSrcweir aKeyString += sal_Unicode(1); // mask it 700cdf0e10cSrcweir // extra for '>' which is coded as <SHIFT GREATER> 701cdf0e10cSrcweir if ( pKeyEvent->GetCharCode() == '>' ) 702cdf0e10cSrcweir aKeyString += sal_Unicode( KEY_GREATER | (aKeyCode.GetAllModifier() & ~KEY_SHIFT) ); 703cdf0e10cSrcweir else 704cdf0e10cSrcweir aKeyString += sal_Unicode( aKeyCode.GetCode() | aKeyCode.GetAllModifier() ); 705cdf0e10cSrcweir } 706cdf0e10cSrcweir } 707cdf0e10cSrcweir } 708cdf0e10cSrcweir break; 709cdf0e10cSrcweir 710cdf0e10cSrcweir case VCLEVENT_WINDOW_MOUSEMOVE: 711cdf0e10cSrcweir case VCLEVENT_WINDOW_MOUSEBUTTONDOWN: 712cdf0e10cSrcweir case VCLEVENT_WINDOW_MOUSEBUTTONUP: 713cdf0e10cSrcweir { 714cdf0e10cSrcweir } 715cdf0e10cSrcweir break; 716cdf0e10cSrcweir 717cdf0e10cSrcweir 718cdf0e10cSrcweir } 719cdf0e10cSrcweir break; 720cdf0e10cSrcweir case WINDOW_DOCKINGWINDOW: 721cdf0e10cSrcweir // switch( nEventID ) 722cdf0e10cSrcweir { 723cdf0e10cSrcweir // case 1 .. 0xffff: 724cdf0e10cSrcweir DBG_TRACE3( "TT_VCLMessage %u %u %X",nEventID, pWin->GetType(), pWin ); 725cdf0e10cSrcweir // sal_Bool bx = ((DockingWindow*)pWin)->IsFloatingMode(); 726cdf0e10cSrcweir // break; 727cdf0e10cSrcweir /* case M_Dock : 728cdf0e10cSrcweir if ( ((DockingWindow*)pControl)->IsFloatingMode() ) 729cdf0e10cSrcweir ((DockingWindow*)pControl)->SetFloatingMode(sal_False); 730cdf0e10cSrcweir else 731cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_FLOATING_MODE, MethodString( nMethodId ) ) ); 732cdf0e10cSrcweir break; 733cdf0e10cSrcweir case M_Undock : 734cdf0e10cSrcweir if ( !((DockingWindow*)pControl)->IsFloatingMode() ) 735cdf0e10cSrcweir ((DockingWindow*)pControl)->SetFloatingMode(sal_True); 736cdf0e10cSrcweir else 737cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_FLOATING_MODE, MethodString( nMethodId ) ) ); 738cdf0e10cSrcweir break; 739cdf0e10cSrcweir case M_IsDocked : 740cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, (comm_BOOL) !((DockingWindow*)pControl)->IsFloatingMode()); 741cdf0e10cSrcweir break; 742cdf0e10cSrcweir case M_Close: 743cdf0e10cSrcweir //nWindowWaitUId = nUId; 744cdf0e10cSrcweir DBG_ASSERT( nUId == pControl->GetUniqueOrHelpId(), "nUID != UniqueOrHelpId"); 745cdf0e10cSrcweir SET_WINP_CLOSING(pControl); 746cdf0e10cSrcweir ((DockingWindow*)pControl)->Close(); 747cdf0e10cSrcweir break; 748cdf0e10cSrcweir case M_Size: 749cdf0e10cSrcweir case M_Move: 750cdf0e10cSrcweir case M_IsMax : 751cdf0e10cSrcweir case M_Minimize : 752cdf0e10cSrcweir case M_Maximize : 753cdf0e10cSrcweir if ( ((DockingWindow*)pControl)->IsFloatingMode() ) 754cdf0e10cSrcweir { 755cdf0e10cSrcweir pControl = ((DockingWindow*)pControl)->GetFloatingWindow(); 756cdf0e10cSrcweir goto FloatWin; 757cdf0e10cSrcweir } 758cdf0e10cSrcweir else 759cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_DOCKING_MODE, MethodString( nMethodId ) ) ); 760cdf0e10cSrcweir break; 761cdf0e10cSrcweir case M_Help: // Alles was unten weiterbehandelt werden soll 762cdf0e10cSrcweir goto MoreDialog; 763cdf0e10cSrcweir 764cdf0e10cSrcweir default: 765cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "DockingWindow" ) ); 766cdf0e10cSrcweir break;*/ 767cdf0e10cSrcweir } 768cdf0e10cSrcweir break; 769cdf0e10cSrcweir 770cdf0e10cSrcweir 771cdf0e10cSrcweir 772cdf0e10cSrcweir 773cdf0e10cSrcweir 774cdf0e10cSrcweir 775cdf0e10cSrcweir case WINDOW_FLOATINGWINDOW: 776cdf0e10cSrcweir { 777cdf0e10cSrcweir DBG_TRACE3( "TT_VCLMessage %u %u %X",nEventID, pWin->GetType(), pWin ); 778cdf0e10cSrcweir // FloatingWindow *pFW = ((FloatingWindow*)pWin); 779cdf0e10cSrcweir /* switch( nEventID ) 780cdf0e10cSrcweir { 781cdf0e10cSrcweir 782cdf0e10cSrcweir // M_OpenMenu an einem ToolboxButton 783cdf0e10cSrcweir case VCLEVENT_WINDOW_SHOW: 784cdf0e10cSrcweir if ( pActionParent ) 785cdf0e10cSrcweir { // a new FloatingWindow opens up, so we assume an OpenMenu 786cdf0e10cSrcweir // compare to 1 for floating ToolBoxes 787cdf0e10cSrcweir if ( ( pActionParent->GetUniqueOrHelpId() == 0 || pActionParent->GetUniqueOrHelpId() == 1 ) ) 788cdf0e10cSrcweir // generate direct Button access 789cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pActionParent->GetHelpId( pActionParent->GetCurItemId() ), (comm_USHORT)(M_OpenMenu) ); 790cdf0e10cSrcweir else 791cdf0e10cSrcweir // access via Toolbox 792cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pActionParent->GetUniqueOrHelpId(), (comm_USHORT)(M_OpenMenu|M_RET_NUM_CONTROL), pActionParent->GetHelpId( pActionParent->GetCurItemId() ) ); 793cdf0e10cSrcweir bSendData = sal_True; 794cdf0e10cSrcweir } 795cdf0e10cSrcweir break; 796cdf0e10cSrcweir 797cdf0e10cSrcweir } 798cdf0e10cSrcweir */ } 799cdf0e10cSrcweir break; 800cdf0e10cSrcweir /* 801cdf0e10cSrcweir case M_AnimateMouse : 802cdf0e10cSrcweir AnimateMouse( pControl, MitteOben); 803cdf0e10cSrcweir break; 804cdf0e10cSrcweir case M_IsMax : 805cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, (comm_BOOL)!((FloatingWindow*)pControl)->IsRollUp()); 806cdf0e10cSrcweir break; 807cdf0e10cSrcweir case M_Minimize : 808cdf0e10cSrcweir ((FloatingWindow*)pControl)->RollUp(); 809cdf0e10cSrcweir break; 810cdf0e10cSrcweir case M_Maximize : 811cdf0e10cSrcweir ((FloatingWindow*)pControl)->RollDown(); 812cdf0e10cSrcweir break; 813cdf0e10cSrcweir case M_Size: 814cdf0e10cSrcweir { 815cdf0e10cSrcweir if ( pControl->GetStyle() & WB_SIZEABLE ) 816cdf0e10cSrcweir { 817cdf0e10cSrcweir pControl->SetSizePixel(Size(nNr1,nNr2)); 818cdf0e10cSrcweir pControl->Resize(); 819cdf0e10cSrcweir } 820cdf0e10cSrcweir else 821cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_SIZE_NOT_CHANGEABLE, MethodString( nMethodId ) ) ); 822cdf0e10cSrcweir break; 823cdf0e10cSrcweir } 824cdf0e10cSrcweir case M_Close: 825cdf0e10cSrcweir DBG_ASSERT( nUId == pControl->GetUniqueOrHelpId(), "nUID != UniqueOrHelpId"); 826cdf0e10cSrcweir SET_WINP_CLOSING(pControl); 827cdf0e10cSrcweir ((FloatingWindow*)pControl)->Close(); 828cdf0e10cSrcweir break; 829cdf0e10cSrcweir case M_Help: // Alles was unten weiterbehandelt werden soll 830cdf0e10cSrcweir case M_Move: 831cdf0e10cSrcweir goto MoreDialog; 832cdf0e10cSrcweir default: 833cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "FloatingWin" ) ); 834cdf0e10cSrcweir break; 835cdf0e10cSrcweir } 836cdf0e10cSrcweir break;*/ 837cdf0e10cSrcweir 838cdf0e10cSrcweir 839cdf0e10cSrcweir 840cdf0e10cSrcweir 841cdf0e10cSrcweir 842cdf0e10cSrcweir 843cdf0e10cSrcweir 844cdf0e10cSrcweir 845cdf0e10cSrcweir /* 846cdf0e10cSrcweir case C_ModelessDlg: 847cdf0e10cSrcweir case C_Dlg: 848cdf0e10cSrcweir case C_TabDlg: 849cdf0e10cSrcweir MoreDialog: 850cdf0e10cSrcweir switch( nEventID ) 851cdf0e10cSrcweir { 852cdf0e10cSrcweir 853cdf0e10cSrcweir // (Rect GetRect) 854cdf0e10cSrcweir 855cdf0e10cSrcweir case M_AnimateMouse : 856cdf0e10cSrcweir AnimateMouse( pControl, MitteOben); 857cdf0e10cSrcweir break; 858cdf0e10cSrcweir case M_Close: 859cdf0e10cSrcweir DBG_ASSERT( nUId == pControl->GetUniqueOrHelpId(), "nUID != UniqueOrHelpId"); 860cdf0e10cSrcweir SET_WINP_CLOSING(pControl); 861cdf0e10cSrcweir ((SystemWindow*)pControl)->Close(); 862cdf0e10cSrcweir break; 863cdf0e10cSrcweir case M_Move: 864cdf0e10cSrcweir { 865cdf0e10cSrcweir pControl->SetPosPixel(Point(nNr1,nNr2)); 866cdf0e10cSrcweir break; 867cdf0e10cSrcweir } 868cdf0e10cSrcweir default: 869cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "Dialog" ) ); 870cdf0e10cSrcweir break; 871cdf0e10cSrcweir } 872cdf0e10cSrcweir break;*/ 873cdf0e10cSrcweir 874cdf0e10cSrcweir 875cdf0e10cSrcweir 876cdf0e10cSrcweir 877cdf0e10cSrcweir 878cdf0e10cSrcweir 879cdf0e10cSrcweir 880cdf0e10cSrcweir 881cdf0e10cSrcweir 882cdf0e10cSrcweir 883cdf0e10cSrcweir 884cdf0e10cSrcweir 885cdf0e10cSrcweir 886cdf0e10cSrcweir /* 887cdf0e10cSrcweir case C_WorkWin: 888cdf0e10cSrcweir switch( nEventID ) 889cdf0e10cSrcweir { 890cdf0e10cSrcweir case M_Close: 891cdf0e10cSrcweir DBG_ASSERT( nUId == pControl->GetUniqueOrHelpId(), "nUID != UniqueOrHelpId"); 892cdf0e10cSrcweir SET_WINP_CLOSING(pControl); 893cdf0e10cSrcweir ((WorkWindow*)pControl)->Close(); 894cdf0e10cSrcweir break; 895cdf0e10cSrcweir case M_Size: 896cdf0e10cSrcweir case M_Move: 897cdf0e10cSrcweir goto FloatWin; 898cdf0e10cSrcweir break; 899cdf0e10cSrcweir case M_Help: // Alles was unten weiterbehandelt werden soll 900cdf0e10cSrcweir goto MoreDialog; 901cdf0e10cSrcweir default: 902cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "WorkWindow" ) ); 903cdf0e10cSrcweir break; 904cdf0e10cSrcweir } 905cdf0e10cSrcweir break; 906cdf0e10cSrcweir */ 907cdf0e10cSrcweir 908cdf0e10cSrcweir 909cdf0e10cSrcweir /* case C_TabPage: 910cdf0e10cSrcweir switch( nEventID ) 911cdf0e10cSrcweir { 912cdf0e10cSrcweir } 913cdf0e10cSrcweir break;*/ 914cdf0e10cSrcweir 915cdf0e10cSrcweir 916cdf0e10cSrcweir 917cdf0e10cSrcweir 918cdf0e10cSrcweir 919cdf0e10cSrcweir 920cdf0e10cSrcweir 921cdf0e10cSrcweir 922cdf0e10cSrcweir 923cdf0e10cSrcweir 924cdf0e10cSrcweir 925cdf0e10cSrcweir 926cdf0e10cSrcweir 927cdf0e10cSrcweir /* 928cdf0e10cSrcweir case C_MessBox: 929cdf0e10cSrcweir case C_InfoBox: 930cdf0e10cSrcweir case C_WarningBox: 931cdf0e10cSrcweir case C_ErrorBox: 932cdf0e10cSrcweir case C_QueryBox: 933cdf0e10cSrcweir { 934cdf0e10cSrcweir sal_Bool bDone = sal_True; 935cdf0e10cSrcweir MessBox* pMB = (MessBox*)pControl; 936cdf0e10cSrcweir switch( nEventID ) 937cdf0e10cSrcweir { 938cdf0e10cSrcweir case M_GetCheckBoxText: 939cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, pMB->GetCheckBoxText() ); 940cdf0e10cSrcweir break; 941cdf0e10cSrcweir case M_IsChecked : 942cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, comm_BOOL( pMB->GetCheckBoxState() == STATE_CHECK) ); 943cdf0e10cSrcweir break; 944cdf0e10cSrcweir case M_GetState : 945cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, comm_ULONG( pMB->GetCheckBoxState() )); 946cdf0e10cSrcweir break; 947cdf0e10cSrcweir case M_Check : 948cdf0e10cSrcweir pMB->SetCheckBoxState( STATE_CHECK ); 949cdf0e10cSrcweir break; 950cdf0e10cSrcweir case M_UnCheck : 951cdf0e10cSrcweir pMB->SetCheckBoxState( STATE_NOCHECK ); 952cdf0e10cSrcweir break; 953cdf0e10cSrcweir case M_GetText : 954cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, pMB->GetMessText()); 955cdf0e10cSrcweir break; 956cdf0e10cSrcweir 957cdf0e10cSrcweir default: 958cdf0e10cSrcweir bDone = sal_False; 959cdf0e10cSrcweir break; 960cdf0e10cSrcweir } 961cdf0e10cSrcweir if ( bDone ) 962cdf0e10cSrcweir break; // break the case here else continue at C_ButtonDialog 963cdf0e10cSrcweir } 964cdf0e10cSrcweir case C_ButtonDialog: 965cdf0e10cSrcweir { 966cdf0e10cSrcweir ButtonDialog* pBD = (ButtonDialog*)pControl; 967cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 968cdf0e10cSrcweir m_pDbgWin->AddText( "Working MessBox: " ); 969cdf0e10cSrcweir if (pControl->IsVisible()) 970cdf0e10cSrcweir m_pDbgWin->AddText("*(Visible)\n"); 971cdf0e10cSrcweir else 972cdf0e10cSrcweir m_pDbgWin->AddText("*(nicht Visible)\n"); 973cdf0e10cSrcweir #endif 974cdf0e10cSrcweir switch( nEventID ) 975cdf0e10cSrcweir { 976cdf0e10cSrcweir case M_GetText : 977cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, pControl->GetText()); 978cdf0e10cSrcweir break; 979cdf0e10cSrcweir case M_Click: 980cdf0e10cSrcweir if ( nParams & PARAM_USHORT_1 ) 981cdf0e10cSrcweir { 982cdf0e10cSrcweir if ( pBD->GetPushButton( nNr1 ) ) 983cdf0e10cSrcweir { 984cdf0e10cSrcweir if ( nNr1 != BUTTONID_HELP ) 985cdf0e10cSrcweir { 986cdf0e10cSrcweir SET_WINP_CLOSING(pControl); 987cdf0e10cSrcweir } 988cdf0e10cSrcweir pBD->GetPushButton( nNr1 )->Click(); 989cdf0e10cSrcweir } 990cdf0e10cSrcweir else 991cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR2( S_NO_DEFAULT_BUTTON, UniString::CreateFromInt32( nNr1 ), MethodString( nMethodId ) ) ); 992cdf0e10cSrcweir } 993cdf0e10cSrcweir else 994cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR1( S_BUTTONID_REQUIRED, MethodString( nMethodId ) ) ); 995cdf0e10cSrcweir break; 996cdf0e10cSrcweir case M_GetButtonCount : 997cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, comm_ULONG(pBD->GetButtonCount())); 998cdf0e10cSrcweir break; 999cdf0e10cSrcweir case M_GetButtonId : 1000cdf0e10cSrcweir if ( ValueOK(nUId, MethodString( nMethodId ),nNr1,pBD->GetButtonCount()) ) 1001cdf0e10cSrcweir pRet->GenReturn ( RET_Value, nUId, comm_ULONG(pBD->GetButtonId(nNr1-1))); 1002cdf0e10cSrcweir break; 1003cdf0e10cSrcweir default: 1004cdf0e10cSrcweir ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MessageBox" ) ); 1005cdf0e10cSrcweir break; 1006cdf0e10cSrcweir } 1007cdf0e10cSrcweir break; 1008cdf0e10cSrcweir 1009cdf0e10cSrcweir 1010cdf0e10cSrcweir */ 1011cdf0e10cSrcweir 1012cdf0e10cSrcweir 1013cdf0e10cSrcweir } 1014cdf0e10cSrcweir 1015cdf0e10cSrcweir 1016cdf0e10cSrcweir switch( nEventID ) 1017cdf0e10cSrcweir { 1018cdf0e10cSrcweir case VCLEVENT_CONTROL_LOSEFOCUS: 1019cdf0e10cSrcweir if ( pEditModify == pWin ) 1020cdf0e10cSrcweir { 1021cdf0e10cSrcweir if ( m_bRecord ) 1022cdf0e10cSrcweir { 1023cdf0e10cSrcweir StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), M_SetText, aEditModifyString ); 1024cdf0e10cSrcweir bSendData = sal_True; 1025cdf0e10cSrcweir } 1026cdf0e10cSrcweir if ( m_bLog ) 1027cdf0e10cSrcweir { 1028cdf0e10cSrcweir LogVCL( GetParentID( pWin ), pWin->GetType(), pWin->GetUniqueOrHelpId(), CUniString("Modify") ); 1029cdf0e10cSrcweir } 1030cdf0e10cSrcweir pEditModify = NULL; 1031cdf0e10cSrcweir aEditModifyString.Erase(); //could be somewhat lengthy 1032cdf0e10cSrcweir } 1033cdf0e10cSrcweir break; 1034cdf0e10cSrcweir } 1035cdf0e10cSrcweir 1036cdf0e10cSrcweir pLastWin = pWin; 1037cdf0e10cSrcweir 1038cdf0e10cSrcweir } // if 1039cdf0e10cSrcweir else if ( pEvent->ISA( VclMenuEvent ) ) 1040cdf0e10cSrcweir { 1041cdf0e10cSrcweir // VclMenuEvent* pMenuEvent = ( VclMenuEvent* ) pEvent; 1042cdf0e10cSrcweir } 1043cdf0e10cSrcweir 1044cdf0e10cSrcweir 1045cdf0e10cSrcweir if ( bSendData ) 1046cdf0e10cSrcweir new StatementFlow( NULL, F_EndCommandBlock ); // Kommando zum Senden erzeugen und in que eintragen 1047cdf0e10cSrcweir 1048cdf0e10cSrcweir return 0; 1049cdf0e10cSrcweir } 1050cdf0e10cSrcweir 1051cdf0e10cSrcweir 1052cdf0e10cSrcweir 1053cdf0e10cSrcweir static ::osl::Mutex * getRecorderMutex() 1054cdf0e10cSrcweir { 1055cdf0e10cSrcweir static ::osl::Mutex * pMutex = NULL; 1056cdf0e10cSrcweir if(pMutex==NULL) 1057cdf0e10cSrcweir { 1058cdf0e10cSrcweir ::osl::MutexGuard aGuard(::osl::Mutex::getGlobalMutex()); 1059cdf0e10cSrcweir if(pMutex==NULL) 1060cdf0e10cSrcweir pMutex = new ::osl::Mutex(); 1061cdf0e10cSrcweir } 1062cdf0e10cSrcweir return pMutex; 1063cdf0e10cSrcweir } 1064cdf0e10cSrcweir 1065cdf0e10cSrcweir 1066cdf0e10cSrcweir void MacroRecorder::CheckDelete() 1067cdf0e10cSrcweir { 1068cdf0e10cSrcweir ::osl::MutexGuard aGuard( getRecorderMutex() ); 1069cdf0e10cSrcweir if ( !m_bRecord && !m_bLog ) 1070cdf0e10cSrcweir { 1071cdf0e10cSrcweir pMacroRecorder = NULL; 1072cdf0e10cSrcweir delete this; 1073cdf0e10cSrcweir } 1074cdf0e10cSrcweir } 1075cdf0e10cSrcweir 1076cdf0e10cSrcweir 1077cdf0e10cSrcweir MacroRecorder* MacroRecorder::GetMacroRecorder() 1078cdf0e10cSrcweir { 1079cdf0e10cSrcweir ::osl::MutexGuard aGuard( getRecorderMutex() ); 1080cdf0e10cSrcweir if ( !pMacroRecorder ) 1081cdf0e10cSrcweir pMacroRecorder = new MacroRecorder; 1082cdf0e10cSrcweir 1083cdf0e10cSrcweir return pMacroRecorder; 1084cdf0e10cSrcweir } 1085cdf0e10cSrcweir 1086cdf0e10cSrcweir sal_Bool MacroRecorder::HasMacroRecorder() 1087cdf0e10cSrcweir { 1088cdf0e10cSrcweir ::osl::MutexGuard aGuard( getRecorderMutex() ); 1089cdf0e10cSrcweir return pMacroRecorder != NULL; 1090cdf0e10cSrcweir } 1091cdf0e10cSrcweir 1092