summaryrefslogtreecommitdiff
path: root/automation/source/server/recorder.cxx
diff options
context:
space:
mode:
authorMartin Hollmichel <mh@openoffice.org>2002-11-18 14:29:33 +0000
committerMartin Hollmichel <mh@openoffice.org>2002-11-18 14:29:33 +0000
commit4c7c7dc4716363014dc2dcad679df44dfabe24b4 (patch)
tree5685259311bbd28aca667bb475f51ec192a76f6f /automation/source/server/recorder.cxx
parent02f4ad619774297658085bb84fcb5d009dbfe715 (diff)
add: testtool, #104916#
Diffstat (limited to 'automation/source/server/recorder.cxx')
-rw-r--r--automation/source/server/recorder.cxx1038
1 files changed, 1038 insertions, 0 deletions
diff --git a/automation/source/server/recorder.cxx b/automation/source/server/recorder.cxx
new file mode 100644
index 000000000000..c4c1ba36ac07
--- /dev/null
+++ b/automation/source/server/recorder.cxx
@@ -0,0 +1,1038 @@
+/*************************************************************************
+ *
+ * $RCSfile: recorder.cxx,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: mh $ $Date: 2002-11-18 15:28:17 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2002
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2002 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2002 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#ifndef _SV_WINDOW_HXX
+#include <vcl/window.hxx>
+#endif
+#ifndef _VCL_VCLEVENT_HXX
+#include <vcl/vclevent.hxx>
+#endif
+#ifndef _SV_BUTTON_HXX
+#include <vcl/button.hxx>
+#endif
+#ifndef _SV_EDIT_HXX
+#include <vcl/edit.hxx>
+#endif
+#ifndef _SV_SPINFLD_HXX
+#include <vcl/spinfld.hxx>
+#endif
+#ifndef _SV_MSGBOX_HXX
+#include <vcl/msgbox.hxx>
+#endif
+#ifndef _SV_TOOLBOX_HXX
+#include <vcl/toolbox.hxx>
+#endif
+#ifndef _SV_LSTBOX_HXX
+#include <vcl/lstbox.hxx>
+#endif
+#ifndef _SV_SOUND_HXX
+#include <vcl/sound.hxx>
+#endif
+#ifndef _SV_COMBOBOX_HXX
+#include <vcl/combobox.hxx>
+#endif
+#ifndef _SV_FLOATWIN_HXX
+#include <vcl/floatwin.hxx>
+#endif
+#include "statemnt.hxx"
+#include "retstrm.hxx"
+#include "rcontrol.hxx"
+
+class MacroRecorder
+{
+private:
+ Window* GetParentWithID( Window* pThis );
+
+ Link aEventListenerHdl;
+ DECL_LINK( EventListener, VclSimpleEvent* );
+
+ Window* pLastWin;
+ Window* pEditModify;
+ String aEditModifyString;
+
+ ToolBox *pActionParent; // toolbox from which a tearoff or OpenMenu might happen
+
+ // record keys
+ String aKeyString;
+ ULONG aKeyUniqueID; // has to be remembert seperately since Window might be gone when needed
+ Window* pKeyWin;
+ BOOL bKeyFollowFocus;
+
+ AutoTimer aHookRefresh;
+ void AddEventHooks();
+ void RemoveEventHooks();
+ DECL_LINK( HookRefreskHdl, void* );
+
+public:
+
+ MacroRecorder();
+ ~MacroRecorder();
+};
+
+
+MacroRecorder::MacroRecorder()
+: pLastWin( NULL )
+, pEditModify( NULL )
+, pActionParent( NULL )
+, aKeyUniqueID( 0 )
+, pKeyWin( NULL )
+, bKeyFollowFocus( FALSE )
+{
+ aHookRefresh.SetTimeout( 500 );
+ aHookRefresh.SetTimeoutHdl( LINK( this, MacroRecorder, HookRefreskHdl) );
+ aHookRefresh.Start();
+ aEventListenerHdl = LINK( this, MacroRecorder, EventListener );
+ AddEventHooks();
+}
+
+MacroRecorder::~MacroRecorder()
+{
+ aHookRefresh.Stop();
+ RemoveEventHooks();
+}
+
+void MacroRecorder::AddEventHooks()
+{
+ Window *pTopLevel = Application::GetFirstTopLevelWindow();
+ while ( pTopLevel )
+ {
+ Window *pParent = pTopLevel;
+ while ( pParent->GetParent() )
+ pParent = pParent->GetParent();
+
+ pParent->RemoveChildEventListener( aEventListenerHdl ); // might be instrumented already
+ pParent->AddChildEventListener( aEventListenerHdl );
+
+ pTopLevel = Application::GetNextTopLevelWindow( pTopLevel );
+ }
+}
+
+void MacroRecorder::RemoveEventHooks()
+{
+ Window *pTopLevel = Application::GetFirstTopLevelWindow();
+ while ( pTopLevel )
+ {
+ pTopLevel->RemoveChildEventListener( aEventListenerHdl );
+ pTopLevel = Application::GetNextTopLevelWindow( pTopLevel );
+ }
+}
+
+IMPL_LINK( MacroRecorder, HookRefreskHdl, void*, EMPTYARG )
+{
+ AddEventHooks();
+ return 0;
+}
+
+
+Window* MacroRecorder::GetParentWithID( Window* pThis )
+{
+ Window *pOverlap = pThis->GetWindow( WINDOW_OVERLAP );
+ while ( pOverlap != pThis && pThis->GetUniqueOrHelpId() == 0 && pThis->GET_REAL_PARENT() )
+ pThis = pThis->GET_REAL_PARENT();
+ return pThis;
+}
+
+IMPL_LINK( MacroRecorder, EventListener, VclSimpleEvent*, pEvent )
+{
+ BOOL bSendData = FALSE;
+
+ if ( pEvent->ISA( VclWindowEvent ) )
+ {
+ VclWindowEvent* pWinEvent = ( VclWindowEvent* ) pEvent;
+ Window* pWin = pWinEvent->GetWindow();
+ ULONG nEventID = pWinEvent->GetId();
+#ifdef DEBUG
+ if ( nEventID >= 1001 && nEventID != VCLEVENT_WINDOW_KEYUP )
+ nEventID = pWinEvent->GetId(); // Just something to set a breakpoint
+ else
+ return 0;
+#endif
+
+// check for different action after collecting keys
+ // send if there_is_something_to_send
+ // and eather event_is_not_of_interest
+ // or ( new_window and new_window_is_interesting ) ( ignore interesting events to uninteresting window )
+
+ if ( aKeyString.Len()
+ && ( ( nEventID != VCLEVENT_WINDOW_KEYINPUT && nEventID != VCLEVENT_WINDOW_MOUSEMOVE )
+ || ( pKeyWin != pWin
+ && ( pWin->GetType() == WINDOW_CONTROL || pWin->GetType() == WINDOW_WINDOW )
+ )
+ )
+ )
+ {
+ // we cannot access pKeyWin since it might have dissapeared
+ if ( bKeyFollowFocus )
+ StatementList::pRet->GenReturn( RET_MacroRecorder, aKeyUniqueID, (USHORT)M_TypeKeys, aKeyString, bKeyFollowFocus );
+ else
+ StatementList::pRet->GenReturn( RET_MacroRecorder, aKeyUniqueID, (USHORT)M_TypeKeys, aKeyString );
+ bSendData = TRUE;
+ // cleanup
+ aKeyString.Erase();
+ pKeyWin = NULL;
+ bKeyFollowFocus = FALSE;
+ }
+
+ switch ( pWin->GetType() )
+ {
+ case WINDOW_TABPAGE:
+ switch( nEventID )
+ {
+ case VCLEVENT_WINDOW_ACTIVATE:
+ StatementList::pRet->GenReturn( RET_MacroRecorder, 0, (USHORT)(M_SetPage|M_RET_NUM_CONTROL), pWin->GetUniqueOrHelpId() );
+ bSendData = TRUE;
+ break;
+ }
+ break;
+ case WINDOW_RADIOBUTTON:
+ case WINDOW_IMAGERADIOBUTTON:
+ switch( nEventID )
+ {
+ case VCLEVENT_BUTTON_CLICK: // VCLEVENT_RADIOBUTTON_TOGGLE
+ {
+ if ( ((RadioButton*)pWin)->IsChecked() )
+ {
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (USHORT)M_Check );
+ bSendData = TRUE;
+ }
+ }
+ break;
+ }
+ break;
+ case WINDOW_CHECKBOX:
+ case WINDOW_TRISTATEBOX:
+ switch( nEventID )
+ {
+ case VCLEVENT_BUTTON_CLICK: //VCLEVENT_CHECKBOX_TOGGLE:
+ {
+ USHORT nMethod;
+ switch ( ((TriStateBox*)pWin)->GetState() )
+ {
+ case STATE_CHECK: nMethod = M_Check; break;
+ case STATE_NOCHECK: nMethod = M_UnCheck; break;
+ case STATE_DONTKNOW: nMethod = M_TriState; break;
+ }
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), nMethod );
+ bSendData = TRUE;
+ }
+ break;
+ }
+ break;
+ case WINDOW_EDIT:
+ case WINDOW_MULTILINEEDIT:
+ switch( nEventID )
+ {
+ case VCLEVENT_EDIT_MODIFY:
+ pEditModify = pWin;
+ aEditModifyString = ((Edit*)pWin)->GetText();
+ break;
+ }
+ break;
+ case WINDOW_MULTILISTBOX:
+ switch( nEventID )
+ {
+ case VCLEVENT_LISTBOX_SELECT:
+ Sound::Beep();
+ }
+ case WINDOW_LISTBOX:
+ switch( nEventID )
+ {
+// case VCLEVENT_LISTBOX_DOUBLECLICK:
+ case VCLEVENT_LISTBOX_SELECT:
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (USHORT)M_Select, ULONG( ((ListBox*)pWin)->GetSelectEntryPos() +1 ) );
+ bSendData = TRUE;
+ break;
+ }
+ break;
+ case WINDOW_COMBOBOX:
+ case WINDOW_PATTERNBOX:
+ case WINDOW_NUMERICBOX:
+ case WINDOW_METRICBOX:
+ case WINDOW_CURRENCYBOX:
+ case WINDOW_DATEBOX:
+ case WINDOW_TIMEBOX:
+ switch( nEventID )
+ {
+ case VCLEVENT_EDIT_MODIFY:
+ pEditModify = pWin;
+ aEditModifyString = ((Edit*)pWin)->GetText();
+ break;
+ case VCLEVENT_COMBOBOX_SELECT:
+ {
+ pEditModify = NULL;
+ aEditModifyString.Erase();
+
+ USHORT nPos = ((ComboBox*)pWin)->GetEntryPos(((ComboBox*)pWin)->GetText());
+ if ( nPos == COMBOBOX_ENTRY_NOTFOUND )
+ Sound::Beep();
+ else
+ {
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (USHORT)M_Select, (ULONG) nPos+1 );
+ bSendData = TRUE;
+ }
+ }
+ }
+ break;
+ case WINDOW_PUSHBUTTON:
+ case WINDOW_OKBUTTON:
+ case WINDOW_CANCELBUTTON:
+ case WINDOW_IMAGEBUTTON:
+ case WINDOW_MOREBUTTON:
+ case WINDOW_HELPBUTTON:
+ switch( nEventID )
+ {
+ case VCLEVENT_BUTTON_CLICK:
+ Window* pParent = pWin->GetParent();
+ if ( pParent->IsDialog() && pWin->GetUniqueOrHelpId() == 0 )
+ {
+ switch ( pParent->GetType() )
+ {
+ case WINDOW_MESSBOX:
+ case WINDOW_INFOBOX:
+ case WINDOW_WARNINGBOX:
+ case WINDOW_ERRORBOX:
+ case WINDOW_QUERYBOX:
+ case WINDOW_BUTTONDIALOG:
+ {
+ USHORT nMethod;
+ ButtonDialog* pBD = (ButtonDialog*)pParent;
+
+ // we have to find the current Button ID ourselves since it is not generated at this point :-(
+ USHORT nCurrentButtonId = 99999; // Some wild value to wak up people
+ int i;
+ for ( i = 0; i < pBD->GetButtonCount() ; i++ )
+ {
+ if ( pBD->GetPushButton( pBD->GetButtonId(i) ) == pWin )
+ {
+ nCurrentButtonId = pBD->GetButtonId(i);
+ break;
+ }
+ }
+
+ switch ( nCurrentButtonId )
+ {
+ case BUTTONID_OK: nMethod = M_OK; break;
+ case BUTTONID_CANCEL: nMethod = M_Cancel; break;
+ case BUTTONID_YES: nMethod = M_Yes; break;
+ case BUTTONID_NO: nMethod = M_No; break;
+ case BUTTONID_RETRY: nMethod = M_Repeat; break;
+ case BUTTONID_HELP: nMethod = M_Help; break;
+ default: nMethod = M_Click;
+ }
+ if ( nMethod != M_Click )
+ StatementList::pRet->GenReturn( RET_MacroRecorder, (USHORT)0, nMethod );
+ else
+ StatementList::pRet->GenReturn( RET_MacroRecorder, (USHORT)0, nMethod, (ULONG)nCurrentButtonId );
+ bSendData = TRUE;
+ }
+ break;
+ default:
+ {
+ USHORT nMethod;
+ switch ( pWin->GetType() )
+ {
+ case WINDOW_OKBUTTON: nMethod = M_OK; break;
+ case WINDOW_CANCELBUTTON: nMethod = M_Cancel; break;
+ case WINDOW_HELPBUTTON: nMethod = M_Help; break;
+ default: Sound::Beep();
+ }
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pParent->GetUniqueOrHelpId(), nMethod );
+ bSendData = TRUE;
+ }
+ break;
+ }
+ }
+ if ( !bSendData && pWin->GetUniqueOrHelpId() )
+ {
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (USHORT)M_Click );
+ bSendData = TRUE;
+ }
+ }
+ break;
+/* case C_MoreButton:
+ switch( nEventID )
+ {
+ case M_IsOpen :
+ pRet->GenReturn ( RET_Value, nUId, ((MoreButton*)pControl)->GetState());
+ break;
+ case M_Click :
+ ((MoreButton*)pControl)->Click();
+ break;
+ case M_Open :
+ ((MoreButton*)pControl)->SetState(TRUE);
+ break;
+ case M_Close :
+ ((MoreButton*)pControl)->SetState(FALSE);
+ break;
+ default:
+ ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MoreButton" ) );
+ break;
+ }
+ break;*/
+ case WINDOW_SPINFIELD:
+ case WINDOW_PATTERNFIELD:
+ case WINDOW_NUMERICFIELD:
+ case WINDOW_METRICFIELD:
+ case WINDOW_CURRENCYFIELD:
+ case WINDOW_DATEFIELD:
+ case WINDOW_TIMEFIELD:
+ switch( nEventID )
+ {
+ case VCLEVENT_SPINFIELD_UP:
+ case VCLEVENT_SPINFIELD_DOWN:
+ case VCLEVENT_SPINFIELD_FIRST:
+ case VCLEVENT_SPINFIELD_LAST:
+ {
+ pEditModify = NULL;
+ aEditModifyString.Erase();
+
+ USHORT nMethod;
+ switch ( nEventID )
+ {
+ case VCLEVENT_SPINFIELD_UP: nMethod = M_More; break;
+ case VCLEVENT_SPINFIELD_DOWN: nMethod = M_Less; break;
+ case VCLEVENT_SPINFIELD_FIRST: nMethod = M_ToMin; break;
+ case VCLEVENT_SPINFIELD_LAST: nMethod = M_ToMax; break;
+ }
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), nMethod );
+ bSendData = TRUE;
+ }
+ break;
+ case VCLEVENT_EDIT_MODIFY:
+ pEditModify = pWin;
+ aEditModifyString = ((SpinField*)pWin)->GetText();
+ break;
+ }
+ break;
+
+ case WINDOW_MENUBUTTON:
+ switch( nEventID )
+ {
+ case VCLEVENT_BUTTON_CLICK:
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), (USHORT)M_Click );
+ bSendData = TRUE;
+ break;
+/* Keyevent or Timeout
+ case M_Open :
+ {
+ MouseEvent aMEvnt;
+ Point aPt( pControl->GetSizePixel().Width() / 2, pControl->GetSizePixel().Height() / 2 );
+ aMEvnt = MouseEvent( aPt,1,MOUSE_SIMPLECLICK,MOUSE_LEFT );
+ ImplMouseButtonDown( pControl, aMEvnt );
+
+ ULONG nStart = Time::GetSystemTicks();
+ ULONG nDelay = pControl->GetSettings().GetMouseSettings().GetActionDelay();
+ while ( ( Time::GetSystemTicks() - nStart ) < nDelay + 100 )
+ SafeReschedule();
+
+ ImplMouseButtonUp ( pControl, aMEvnt );
+ }
+ break;*/
+ }
+ break;
+ case WINDOW_TOOLBOX:
+ {
+ ToolBox *pTB = ((ToolBox*)pWin);
+ switch( nEventID )
+ {
+ case VCLEVENT_TOOLBOX_SELECT:
+ { // a Button has been clicked
+ // so this cannot be a tearoff or OpenMenu anymore
+ pActionParent = NULL;
+ // compare to 1 for floating ToolBoxes
+ if ( ( pWin->GetUniqueOrHelpId() == 0 || pWin->GetUniqueOrHelpId() == 1 ) )
+ // generate direct Button access
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pTB->GetHelpId( pTB->GetCurItemId() ), (USHORT)(M_Click) );
+ else
+ // access via Toolbox
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pTB->GetUniqueOrHelpId(), (USHORT)(M_Click|M_RET_NUM_CONTROL), pTB->GetHelpId( pTB->GetCurItemId() ) );
+ bSendData = TRUE;
+ }
+ break;
+ case VCLEVENT_TOOLBOX_CLICK:
+ pActionParent = pTB;
+ break;
+ case VCLEVENT_WINDOW_SHOW:
+ if ( pActionParent )
+ { // a new toolbox opens up, might be a tearoff
+ if ( pActionParent != pWin )
+ { // it IS a tearoff not an undock
+ // compare to 1 for floating ToolBoxes
+ if ( ( pActionParent->GetUniqueOrHelpId() == 0 || pActionParent->GetUniqueOrHelpId() == 1 ) )
+ // generate direct Button access
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pActionParent->GetHelpId( pActionParent->GetCurItemId() ), (USHORT)(M_TearOff) );
+ else
+ // access via Toolbox
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pActionParent->GetUniqueOrHelpId(), (USHORT)(M_TearOff|M_RET_NUM_CONTROL), pActionParent->GetHelpId( pActionParent->GetCurItemId() ) );
+ bSendData = TRUE;
+ }
+ pActionParent = NULL;
+ }
+ break;
+ case VCLEVENT_TOOLBOX_DEACTIVATE:
+ pActionParent = NULL;
+ break;
+ }
+ }
+ break;
+/* ToolBox *pTB = ((ToolBox*)pControl);
+ if ( pTB->GetUniqueOrHelpId() != nUId ) // Also Button auf der ToolBox gefunden
+ {
+ if ( nParams == PARAM_NONE )
+ { // Wir fälschen einen Parameter
+ nParams = PARAM_USHORT_1;
+ nNr1 = nUId;
+ }
+ else
+ ReportError( nUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) );
+ }
+
+#define FIND_HELP\
+{\
+ if( nParams == PARAM_USHORT_1 )\
+ nLNr1 = nNr1;\
+ for ( nNr1 = 0; nNr1 < pTB->GetItemCount() && nLNr1 != pTB->GetHelpId(pTB->GetItemId(nNr1)) ; nNr1++ ) {}\
+ bBool1 = nLNr1 == pTB->GetHelpId(pTB->GetItemId(nNr1));\
+ if ( !bBool1 )\
+ ReportError( nUId, GEN_RES_STR1( S_HELPID_ON_TOOLBOX_NOT_FOUND, MethodString( nMethodId ) ) );\
+ else\
+ {\
+ if ( !pTB->IsItemEnabled( pTB->GetItemId(nNr1) ) && nMethodId != _M_IsEnabled )\
+ {\
+ ReportError( nUId, GEN_RES_STR1( S_BUTTON_DISABLED_ON_TOOLBOX, MethodString( nMethodId ) ) );\
+ bBool1 = FALSE;\
+ }\
+ else if ( !pTB->IsItemVisible( pTB->GetItemId(nNr1) ) )\
+ {\
+ ReportError( nUId, GEN_RES_STR1( S_BUTTON_HIDDEN_ON_TOOLBOX, MethodString( nMethodId ) ) );\
+ bBool1 = FALSE;\
+ }\
+ else\
+ {\
+ if ( pTB->GetItemRect(pTB->GetItemId(nNr1)).IsEmpty() )\
+ {\
+ USHORT nLine = pTB->GetCurLine();\
+ do\
+ {\
+ pTB->ShowLine( FALSE );\
+ for ( int i = 1 ; i < 30 ; i++ )\
+ SafeReschedule();\
+ }\
+ while ( pTB->GetCurLine() != nLine && pTB->GetItemRect(pTB->GetItemId(nNr1)).IsEmpty() );\
+ pTB->Invalidate( pTB->GetScrollRect() );\
+ }\
+ if ( pTB->GetItemRect(pTB->GetItemId(nNr1)).IsEmpty() )\
+ {\
+ ReportError( nUId, GEN_RES_STR1( S_CANNOT_MAKE_BUTTON_VISIBLE_IN_TOOLBOX, MethodString( nMethodId ) ) );\
+ bBool1 = FALSE;\
+ }\
+ }\
+ }\
+}\
+
+ switch( nEventID )
+ {
+ case M_SetNextToolBox :
+ if ( (nParams & PARAM_STR_1) )
+ pTB->SetNextToolBox( aString1 );
+ else
+ pTB->SetNextToolBox( pTB->GetNextToolBox() );
+ pTB->NextToolBox();
+ break;
+ case M_GetNextToolBox :
+ pRet->GenReturn ( RET_Value, nUId, (String)pTB->GetNextToolBox());
+ break;
+ default:
+ ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ToolBox" ) );
+ break;
+ }
+ }
+ break;
+*/
+ case WINDOW_CONTROL:
+ case WINDOW_WINDOW:
+ switch( nEventID )
+ {
+ case VCLEVENT_WINDOW_COMMAND:
+ break;
+ case VCLEVENT_WINDOW_KEYINPUT:
+ {
+ const KeyEvent *pKeyEvent = ((KeyEvent*)pWinEvent->GetData());
+ const KeyCode aKeyCode = pKeyEvent->GetKeyCode();
+ if ( pKeyEvent )
+ {
+ if ( ( !aKeyCode.IsMod1() && !aKeyCode.IsMod2() ) &&
+ (( aKeyCode.GetGroup() == KEYGROUP_NUM) ||
+ ( aKeyCode.GetGroup() == KEYGROUP_ALPHA) ||
+ ( aKeyCode.GetCode() == KEY_SPACE) ||
+ ( aKeyCode.GetCode() == KEY_ADD) ||
+ ( aKeyCode.GetCode() == KEY_SUBTRACT) ||
+ ( aKeyCode.GetCode() == KEY_MULTIPLY) ||
+ ( aKeyCode.GetCode() == KEY_DIVIDE) ||
+ ( aKeyCode.GetCode() == KEY_POINT) ||
+ ( aKeyCode.GetCode() == KEY_COMMA) ||
+ ( aKeyCode.GetCode() == KEY_EQUAL) ||
+ ( aKeyCode.GetCode() == 0) ) )
+ {
+ DBG_ASSERT( pKeyEvent->GetCharCode(), "no charcode found" )
+ aKeyString += pKeyEvent->GetCharCode();
+ }
+ else
+ { // not a regular key, transfer KeyCode
+ aKeyString += 1; // mask it
+ // extra for '>' which is coded as <SHIFT LESS>
+ if ( pKeyEvent->GetCharCode() == '>' )
+ aKeyString += ( KEY_GREATER | aKeyCode.GetAllModifier() & ~KEY_SHIFT );
+ else
+ aKeyString += ( aKeyCode.GetCode() | aKeyCode.GetAllModifier() );
+ }
+ pKeyWin = pWin;
+ Window *pIdWin = pWin;
+ while ( pIdWin->GetParent() && !pIdWin->GetUniqueOrHelpId() )
+ {
+ pIdWin = pIdWin->GetParent();
+ bKeyFollowFocus = TRUE;
+ }
+ aKeyUniqueID = pIdWin->GetUniqueOrHelpId();
+ }
+ }
+ break;
+
+ case VCLEVENT_WINDOW_MOUSEMOVE:
+ case VCLEVENT_WINDOW_MOUSEBUTTONDOWN:
+ case VCLEVENT_WINDOW_MOUSEBUTTONUP:
+ {
+ }
+ break;
+
+
+ }
+ break;
+ case WINDOW_DOCKINGWINDOW:
+// switch( nEventID )
+ {
+// case 1 .. 0xffff:
+ DBG_TRACE3( "TT_VCLMessage %u %u %X",nEventID, pWin->GetType(), pWin );
+ BOOL bx = ((DockingWindow*)pWin)->IsFloatingMode();
+// break;
+/* case M_Dock :
+ if ( ((DockingWindow*)pControl)->IsFloatingMode() )
+ ((DockingWindow*)pControl)->SetFloatingMode(FALSE);
+ else
+ ReportError( nUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_FLOATING_MODE, MethodString( nMethodId ) ) );
+ break;
+ case M_Undock :
+ if ( !((DockingWindow*)pControl)->IsFloatingMode() )
+ ((DockingWindow*)pControl)->SetFloatingMode(TRUE);
+ else
+ ReportError( nUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_FLOATING_MODE, MethodString( nMethodId ) ) );
+ break;
+ case M_IsDocked :
+ pRet->GenReturn ( RET_Value, nUId, (BOOL) !((DockingWindow*)pControl)->IsFloatingMode());
+ break;
+ case M_Close:
+ //nWindowWaitUId = nUId;
+ DBG_ASSERT( nUId == pControl->GetUniqueOrHelpId(), "nUID != UniqueOrHelpId");
+ SET_WINP_CLOSING(pControl);
+ ((DockingWindow*)pControl)->Close();
+ break;
+ case M_Size:
+ case M_Move:
+ case M_IsMax :
+ case M_Minimize :
+ case M_Maximize :
+ if ( ((DockingWindow*)pControl)->IsFloatingMode() )
+ {
+ pControl = ((DockingWindow*)pControl)->GetFloatingWindow();
+ goto FloatWin;
+ }
+ else
+ ReportError( nUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_DOCKING_MODE, MethodString( nMethodId ) ) );
+ break;
+ case M_Help: // Alles was unten weiterbehandelt werden soll
+ goto MoreDialog;
+
+ default:
+ ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "DockingWindow" ) );
+ break;*/
+ }
+ break;
+
+
+
+
+
+
+ case WINDOW_FLOATINGWINDOW:
+ {
+ DBG_TRACE3( "TT_VCLMessage %u %u %X",nEventID, pWin->GetType(), pWin );
+ FloatingWindow *pFW = ((FloatingWindow*)pWin);
+ switch( nEventID )
+ {
+/*
+// M_OpenMenu an einem ToolboxButton
+ case VCLEVENT_WINDOW_SHOW:
+ if ( pActionParent )
+ { // a new FloatingWindow opens up, so we assume an OpenMenu
+ // compare to 1 for floating ToolBoxes
+ if ( ( pActionParent->GetUniqueOrHelpId() == 0 || pActionParent->GetUniqueOrHelpId() == 1 ) )
+ // generate direct Button access
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pActionParent->GetHelpId( pActionParent->GetCurItemId() ), (USHORT)(M_OpenMenu) );
+ else
+ // access via Toolbox
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pActionParent->GetUniqueOrHelpId(), (USHORT)(M_OpenMenu|M_RET_NUM_CONTROL), pActionParent->GetHelpId( pActionParent->GetCurItemId() ) );
+ bSendData = TRUE;
+ }
+ break;
+ */
+ }
+ }
+ break;
+/*
+ case M_AnimateMouse :
+ AnimateMouse( pControl, MitteOben);
+ break;
+ case M_IsMax :
+ pRet->GenReturn ( RET_Value, nUId, (BOOL)!((FloatingWindow*)pControl)->IsRollUp());
+ break;
+ case M_Minimize :
+ ((FloatingWindow*)pControl)->RollUp();
+ break;
+ case M_Maximize :
+ ((FloatingWindow*)pControl)->RollDown();
+ break;
+ case M_Size:
+ {
+ if ( pControl->GetStyle() & WB_SIZEABLE )
+ {
+ pControl->SetSizePixel(Size(nNr1,nNr2));
+ pControl->Resize();
+ }
+ else
+ ReportError( nUId, GEN_RES_STR1( S_SIZE_NOT_CHANGEABLE, MethodString( nMethodId ) ) );
+ break;
+ }
+ case M_Close:
+ DBG_ASSERT( nUId == pControl->GetUniqueOrHelpId(), "nUID != UniqueOrHelpId");
+ SET_WINP_CLOSING(pControl);
+ ((FloatingWindow*)pControl)->Close();
+ break;
+ case M_Help: // Alles was unten weiterbehandelt werden soll
+ case M_Move:
+ goto MoreDialog;
+ default:
+ ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "FloatingWin" ) );
+ break;
+ }
+ break;*/
+
+
+
+
+
+
+
+
+/*
+ case C_ModelessDlg:
+ case C_Dlg:
+ case C_TabDlg:
+ MoreDialog:
+ switch( nEventID )
+ {
+
+ // (Rect GetRect)
+
+ case M_AnimateMouse :
+ AnimateMouse( pControl, MitteOben);
+ break;
+ case M_Close:
+ DBG_ASSERT( nUId == pControl->GetUniqueOrHelpId(), "nUID != UniqueOrHelpId");
+ SET_WINP_CLOSING(pControl);
+ ((SystemWindow*)pControl)->Close();
+ break;
+ case M_Move:
+ {
+ pControl->SetPosPixel(Point(nNr1,nNr2));
+ break;
+ }
+ default:
+ ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "Dialog" ) );
+ break;
+ }
+ break;*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+ case C_WorkWin:
+ switch( nEventID )
+ {
+ case M_Close:
+ DBG_ASSERT( nUId == pControl->GetUniqueOrHelpId(), "nUID != UniqueOrHelpId");
+ SET_WINP_CLOSING(pControl);
+ ((WorkWindow*)pControl)->Close();
+ break;
+ case M_Size:
+ case M_Move:
+ goto FloatWin;
+ break;
+ case M_Help: // Alles was unten weiterbehandelt werden soll
+ goto MoreDialog;
+ default:
+ ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "WorkWindow" ) );
+ break;
+ }
+ break;
+ */
+
+
+/* case C_TabPage:
+ switch( nEventID )
+ {
+ }
+ break;*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+ case C_MessBox:
+ case C_InfoBox:
+ case C_WarningBox:
+ case C_ErrorBox:
+ case C_QueryBox:
+ {
+ BOOL bDone = TRUE;
+ MessBox* pMB = (MessBox*)pControl;
+ switch( nEventID )
+ {
+#if SUPD > 631
+ case M_GetCheckBoxText:
+ pRet->GenReturn ( RET_Value, nUId, pMB->GetCheckBoxText() );
+ break;
+ case M_IsChecked :
+ pRet->GenReturn ( RET_Value, nUId, BOOL( pMB->GetCheckBoxState() == STATE_CHECK) );
+ break;
+ case M_GetState :
+ pRet->GenReturn ( RET_Value, nUId, ULONG( pMB->GetCheckBoxState() ));
+ break;
+ case M_Check :
+ pMB->SetCheckBoxState( STATE_CHECK );
+ break;
+ case M_UnCheck :
+ pMB->SetCheckBoxState( STATE_NOCHECK );
+ break;
+#endif
+ case M_GetText :
+ pRet->GenReturn ( RET_Value, nUId, pMB->GetMessText());
+ break;
+
+ default:
+ bDone = FALSE;
+ break;
+ }
+ if ( bDone )
+ break; // break the case here else continue at C_ButtonDialog
+ }
+ case C_ButtonDialog:
+ {
+ ButtonDialog* pBD = (ButtonDialog*)pControl;
+#ifdef DEBUG
+ m_pDbgWin->AddText( "Working MessBox: " );
+ if (pControl->IsVisible())
+ m_pDbgWin->AddText("*(Visible)\n");
+ else
+ m_pDbgWin->AddText("*(nicht Visible)\n");
+#endif
+ switch( nEventID )
+ {
+ case M_GetText :
+ pRet->GenReturn ( RET_Value, nUId, pControl->GetText());
+ break;
+ case M_Click:
+ if ( nParams & PARAM_USHORT_1 )
+ {
+ if ( pBD->GetPushButton( nNr1 ) )
+ {
+ if ( nNr1 != BUTTONID_HELP )
+ {
+ SET_WINP_CLOSING(pControl);
+ }
+ pBD->GetPushButton( nNr1 )->Click();
+ }
+ else
+ ReportError( nUId, GEN_RES_STR2( S_NO_DEFAULT_BUTTON, UniString::CreateFromInt32( nNr1 ), MethodString( nMethodId ) ) );
+ }
+ else
+ ReportError( nUId, GEN_RES_STR1( S_BUTTONID_REQUIRED, MethodString( nMethodId ) ) );
+ break;
+ case M_GetButtonCount :
+ pRet->GenReturn ( RET_Value, nUId, ULONG(pBD->GetButtonCount()));
+ break;
+ case M_GetButtonId :
+ if ( ValueOK(nUId, MethodString( nMethodId ),nNr1,pBD->GetButtonCount()) )
+ pRet->GenReturn ( RET_Value, nUId, ULONG(pBD->GetButtonId(nNr1-1)));
+ break;
+ default:
+ ReportError( nUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MessageBox" ) );
+ break;
+ }
+ break;
+
+
+ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+
+ switch( nEventID )
+ {
+ case VCLEVENT_CONTROL_LOSEFOCUS:
+ if ( pEditModify == pWin )
+ {
+ StatementList::pRet->GenReturn( RET_MacroRecorder, pWin->GetUniqueOrHelpId(), M_SetText, aEditModifyString );
+ bSendData = TRUE;
+ pEditModify = NULL;
+ aEditModifyString.Erase(); //could be somewhat lengthy
+ }
+ break;
+ }
+
+ pLastWin = pWin;
+
+ } // if
+ else if ( pEvent->ISA( VclMenuEvent ) )
+ {
+ VclMenuEvent* pMenuEvent = ( VclMenuEvent* ) pEvent;
+ }
+
+
+ if ( bSendData )
+ new StatementFlow( NULL, F_EndCommandBlock ); // Kommando zum Senden erzeugen und in que eintragen
+
+ return 0;
+}
+
+
+void StatementCommand::HandleMacroRecorder()
+{
+ static MacroRecorder *pMacroRecorder = NULL;
+
+ if ( ! (nParams & PARAM_BOOL_1) )
+ bBool1 = TRUE;
+
+ if ( bBool1 )
+ {
+ if ( !pMacroRecorder )
+ pMacroRecorder = new MacroRecorder;
+ }
+ else
+ {
+ delete pMacroRecorder;
+ pMacroRecorder = NULL;
+ }
+}
+