diff options
Diffstat (limited to 'automation/source/server/statemnt.cxx')
-rw-r--r-- | automation/source/server/statemnt.cxx | 6339 |
1 files changed, 0 insertions, 6339 deletions
diff --git a/automation/source/server/statemnt.cxx b/automation/source/server/statemnt.cxx deleted file mode 100644 index 23641de88..000000000 --- a/automation/source/server/statemnt.cxx +++ /dev/null @@ -1,6339 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_automation.hxx" -#include <com/sun/star/frame/XFramesSupplier.hpp> -#include <com/sun/star/frame/XDispatch.hpp> -#include <com/sun/star/frame/XDispatchProvider.hpp> -#include <com/sun/star/util/XURLTransformer.hpp> -#include <comphelper/processfactory.hxx> -#include <comphelper/uieventslogger.hxx> - -#include <tools/wintypes.hxx> -#include <vcl/dialog.hxx> -#include <vcl/button.hxx> -#include <vcl/menubtn.hxx> -#include <svtools/svtreebx.hxx> -#include <svtools/brwbox.hxx> -#include <vcl/msgbox.hxx> -#include <vcl/dockwin.hxx> -#include <vcl/floatwin.hxx> -#include <vcl/lstbox.hxx> -#include <vcl/combobox.hxx> -#include <vcl/morebtn.hxx> -#include <vcl/field.hxx> -#include <vcl/toolbox.hxx> -#include <vcl/tabctrl.hxx> -#include <vcl/tabpage.hxx> -#include <vcl/menu.hxx> -#include <vcl/status.hxx> -#include <svtools/prgsbar.hxx> -#include <svtools/editbrowsebox.hxx> -#include <vcl/splitwin.hxx> -#include <vcl/group.hxx> -#include <vcl/fixed.hxx> -#include <vcl/wrkwin.hxx> -#include <osl/diagnose.h> -#include <svtools/valueset.hxx> -#include <svtools/roadmap.hxx> -#include <svtools/table/tablecontrol.hxx> -#include <svtools/table/tablecontrolinterface.hxx> -#include <svl/poolitem.hxx> -#include <svtools/extensionlistbox.hxx> -// Hat keinen Includeschutz -#include <svtools/svtdata.hxx> -#include <tools/time.hxx> -#include <svtools/stringtransfer.hxx> -#include <tools/stream.hxx> -#include <tools/fsys.hxx> -#include <svl/stritem.hxx> -#include <svtools/ttprops.hxx> -#include <basic/ttstrhlp.hxx> -#include <basic/dispdefs.hxx> -#include <basic/sbuno.hxx> -#include <svl/pickerhistory.hxx> -#include <com/sun/star/util/XCancellable.hpp> - -#include <sot/storage.hxx> -#include <sot/storinfo.hxx> -#include "statemnt.hxx" -#include "scmdstrm.hxx" - -#include "retstrm.hxx" - -#if OSL_DEBUG_LEVEL > 1 -# include "editwin.hxx" -#endif - -#include "rcontrol.hxx" -#include <automation/communi.hxx> -#include "testtool.hxx" - -#include "profiler.hxx" - -#include "recorder.hxx" - -#include "testtool.hrc" -#include <basic/svtmsg.hrc> - -#include <algorithm> - - -using namespace com::sun::star::frame; -using namespace com::sun::star::uno; -using namespace com::sun::star::beans; -using namespace svt; - - -#ifndef SBX_VALUE_DECL_DEFINED -#define SBX_VALUE_DECL_DEFINED -SV_DECL_REF(SbxValue) -#endif -SV_IMPL_REF(SbxValue) - -CommunicationLink *StatementFlow::pCommLink = NULL; -sal_Bool StatementFlow::bUseIPC = sal_True; -sal_Bool StatementFlow::bSending = sal_False; -ImplRemoteControl *StatementFlow::pRemoteControl = NULL; - -sal_uInt16 StatementCommand::nDirPos = 0; -Dir *StatementCommand::pDir = NULL; -pfunc_osl_printDebugMessage StatementCommand::pOriginal_osl_DebugMessageFunc = NULL; - - -#define SET_WINP_CLOSING(pWin) \ - pWindowWaitPointer = pWin; \ - aWindowWaitUId = pControl->GetUniqueOrHelpId(); \ - aWindowWaitOldHelpId = pWin->GetHelpId(); \ - aWindowWaitOldUniqueId = pWin->GetUniqueId(); \ - pWin->SetHelpId( rtl::OString("TT_Win_is_closing_HID") ); \ - pWin->SetUniqueId( rtl::OString("TT_Win_is_closing_UID") ); - - -StatementFlow::StatementFlow( StatementList *pAfterThis, sal_uInt16 nArtP ) -: nArt(nArtP) -, nParams(0) -, nSNr1(0) -, nLNr1(0) -, aString1() -, bBool1(sal_False) -{ - QueStatement( pAfterThis ); -} - -StatementFlow::StatementFlow( sal_uLong nServiceId, SCmdStream *pCmdIn, ImplRemoteControl *pRC ) -: nArt(0) -, nParams(0) -, nSNr1(0) -, nLNr1(0) -, aString1() -, bBool1(sal_False) -{ - QueStatement( NULL ); - bUseIPC = (nServiceId == SI_IPCCommandBlock); - pRemoteControl = pRC; - pCmdIn->Read( nArt ); - pCmdIn->Read( nParams ); - - if( nParams & PARAM_UINT16_1 ) pCmdIn->Read( nSNr1 ); - if( nParams & PARAM_UINT32_1 ) pCmdIn->Read( nLNr1 ); - if( nParams & PARAM_STR_1 ) pCmdIn->Read( aString1 ); - if( nParams & PARAM_BOOL_1 ) pCmdIn->Read( bBool1 );// Should NEVER happen - -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Reading FlowControl: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nArt ) ); - m_pDbgWin->AddText( " Params:" ); - if( nParams & PARAM_UINT16_1 ) {m_pDbgWin->AddText( " n1:" );m_pDbgWin->AddText( String::CreateFromInt32( nSNr1 ) );} - if( nParams & PARAM_UINT32_1 ) {m_pDbgWin->AddText( " l1:" );m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) );} - if( nParams & PARAM_STR_1 ) {m_pDbgWin->AddText( " s1:" );m_pDbgWin->AddText( aString1 );} - if( nParams & PARAM_BOOL_1 ) {m_pDbgWin->AddText( " b2:" );m_pDbgWin->AddText( bBool1 ? "TRUE" : "FALSE" );} - m_pDbgWin->AddText( "\n" ); -#endif -} - -void StatementFlow::SendViaSocket() -{ - if ( bSending ) - { -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "SendViaSocket called recursively. Aborted!!!\n" ); -#endif - OSL_FAIL("SendViaSocket called recursively. Aborted!!!"); - return; - } - bSending = sal_True; - if ( pCommLink ) - { - if ( !pCommLink->TransferDataStream( pRet->GetStream() ) ) // tritt ein Fehler auf, so wird sofort gel�scht ... - pCommLink = NULL; - } - else - { - // Macht nix. Wenn das Basic nicht mehr da ist, ist sowiso alles egal - OSL_FAIL("Cannot send results to TestTool"); - } - - pRet->Reset(); - bSending = sal_False; - IsError = sal_False; -} - -sal_Bool StatementFlow::Execute() -{ -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Executing Flow: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nArt ) ); - m_pDbgWin->AddText( "\n" ); -#endif - switch ( nArt ) - { - case F_EndCommandBlock: - { - - if ( !bUseIPC ) - { - // bBool1 wurde im CTOR auf sal_False initialisiert - if ( !bBool1 ) // also erster Durchlauf - { - pRemoteControl->pRetStream = pRet->GetStream(); - bBool1 = sal_True; // wurde im CTOR auf sal_False initialisiert - nRetryCount = nRetryCount * 4; - } - if ( pRemoteControl->pRetStream && (nRetryCount--) ) // also solange nicht abgeholt - { - return sal_False; // Bitte einmal vom Callstack runter - } - } - - } - break; - } - - Advance(); - switch ( nArt ) - { - case F_EndCommandBlock: - if ( !bUseIPC ) - { // wird oben abgehandelt - pRet->Reset(); - IsError = sal_False; - } - else - SendViaSocket(); - - break; - - case F_Sequence: - - pRet->GenReturn(RET_Sequence,nLNr1); - #if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Sending Sequence Nr: " ); - m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) ); - m_pDbgWin->AddText( "\n" ); - #endif - - break; - default: - OSL_FAIL( "Unknown Flowcontrol" ); - break; - } - - delete this; - return sal_True; -} - - -// neue Hilfsfunktion, die stetig erweitert werden muss -static short ImpGetRType( Window *pWin ) -{ - short nRT = C_NoType; - WindowType eRT = pWin->GetType(); - switch( eRT ) { - case WINDOW_WINDOW: nRT = C_Window ; break; - - case WINDOW_TABCONTROL: nRT = C_TabControl ; break; - case WINDOW_RADIOBUTTON: nRT = C_RadioButton ; break; - case WINDOW_CHECKBOX: nRT = C_CheckBox ; break; - case WINDOW_TRISTATEBOX: nRT = C_TriStateBox ; break; - case WINDOW_EDIT: nRT = C_Edit ; break; - case WINDOW_MULTILINEEDIT: nRT = C_MultiLineEdit ; break; - case WINDOW_MULTILISTBOX: nRT = C_MultiListBox ; break; - case WINDOW_LISTBOX: nRT = C_ListBox ; break; - case WINDOW_COMBOBOX: nRT = C_ComboBox ; break; - case WINDOW_PUSHBUTTON: nRT = C_PushButton ; break; - case WINDOW_SPINFIELD: nRT = C_SpinField ; break; - case WINDOW_PATTERNFIELD: nRT = C_PatternField ; break; - case WINDOW_NUMERICFIELD: nRT = C_NumericField ; break; - case WINDOW_METRICFIELD: nRT = C_MetricField ; break; - case WINDOW_CURRENCYFIELD: nRT = C_CurrencyField ; break; - case WINDOW_DATEFIELD: nRT = C_DateField ; break; - case WINDOW_TIMEFIELD: nRT = C_TimeField ; break; - case WINDOW_IMAGERADIOBUTTON: nRT = C_ImageRadioButton ; break; - case WINDOW_NUMERICBOX: nRT = C_NumericBox ; break; - case WINDOW_METRICBOX: nRT = C_MetricBox ; break; - case WINDOW_CURRENCYBOX: nRT = C_CurrencyBox ; break; - case WINDOW_DATEBOX: nRT = C_DateBox ; break; - case WINDOW_TIMEBOX: nRT = C_TimeBox ; break; - case WINDOW_IMAGEBUTTON: nRT = C_ImageButton ; break; - case WINDOW_MENUBUTTON: nRT = C_MenuButton ; break; - case WINDOW_MOREBUTTON: nRT = C_MoreButton ; break; - - - case WINDOW_TABPAGE: nRT = C_TabPage; break; - case WINDOW_MODALDIALOG: nRT = C_ModalDlg; break; - case WINDOW_FLOATINGWINDOW: nRT = C_FloatWin; break; - case WINDOW_MODELESSDIALOG: nRT = C_ModelessDlg; break; - case WINDOW_WORKWINDOW: nRT = C_WorkWin; break; - case WINDOW_DOCKINGWINDOW: nRT = C_DockingWin; break; - - case WINDOW_MESSBOX: nRT = C_MessBox; break; - case WINDOW_INFOBOX: nRT = C_InfoBox; break; - case WINDOW_WARNINGBOX: nRT = C_WarningBox; break; - case WINDOW_ERRORBOX: nRT = C_ErrorBox; break; - case WINDOW_QUERYBOX: nRT = C_QueryBox; break; - case WINDOW_TABDIALOG: nRT = C_TabDlg; break; - - case WINDOW_PATTERNBOX: nRT = C_PatternBox; break; - case WINDOW_TOOLBOX: nRT = C_ToolBox; break; - case WINDOW_CONTROL: nRT = C_Control; break; - case WINDOW_OKBUTTON: nRT = C_OkButton; break; - case WINDOW_CANCELBUTTON: nRT = C_CancelButton; break; - case WINDOW_BUTTONDIALOG: nRT = C_ButtonDialog; break; - case WINDOW_TREELISTBOX: nRT = C_TreeListBox; break; - - case WINDOW_DIALOG: nRT = C_Dialog; break; - } - return nRT; -} - - -StatementSlot::StatementSlot( SCmdStream *pCmdIn ) -: pItemArr(NULL) -{ - QueStatement( NULL ); - pCmdIn->Read( nFunctionId ); -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Reading Slot: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nFunctionId ) ); - m_pDbgWin->AddText( "\n" ); -#endif - pCmdIn->Read( nAnzahl ); - if ( nAnzahl ) - { - switch ( pCmdIn->GetNextType() ) - { - case BinUINT16: // use old calling method - { - nAnzahl++; - pItemArr = new SfxPoolItem*[nAnzahl]; - for (sal_uInt16 i = 0 ; i+1 < nAnzahl ; i++) - pCmdIn->Read( pItemArr[i] ); - pItemArr[nAnzahl-1] = NULL; - } - break; - case BinString: // new Method - { - aArgs.realloc(nAnzahl); - PropertyValue* pArg = aArgs.getArray(); - for (sal_uInt16 i = 0 ; i < nAnzahl ; i++) - pCmdIn->Read( pArg[i] ); - } - break; - } - } -} - -// Constructor for UnoSlot -StatementSlot::StatementSlot() -: nAnzahl( 0 ) -, pItemArr(NULL) -, nFunctionId( 0 ) -, bMenuClosed(sal_False) -{} - -StatementSlot::StatementSlot( sal_uLong nSlot, SfxPoolItem* pItem ) -: pItemArr(NULL) -, bMenuClosed(sal_False) -{ - QueStatement( NULL ); - nFunctionId = sal_uInt16(nSlot); -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Reading Slot: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nFunctionId ) ); - m_pDbgWin->AddText( "\n" ); -#endif - if ( pItem ) - { - nAnzahl = 2; - pItemArr = new SfxPoolItem*[2]; - pItemArr[0] = pItem; - pItemArr[1] = NULL; - } - else - nAnzahl = 0; -} - -StatementSlot::~StatementSlot() -{ - if (nAnzahl) - { - if ( pItemArr ) - { - for (sal_uInt16 i = 0 ; i+1 < nAnzahl ; i++) - delete pItemArr[i]; - delete[] pItemArr; - } - - aArgs.realloc( 0 ); - } -} - -void StatementSlot::AddReferer() -{ - HACK( "only to test!" ); -// because slot 6102 /*SID_VERB_START*/ crashes when called with Property Referer -// We return to the previous behavior (which was a bug realy) of not adding this Property to calls which have no properties at all -// according to MBA most likely this Property can be removed at all and is maybe only needed for Slots with URLs - if ( !nAnzahl ) - return; - - PropertyValue* pArg; - - nAnzahl++; - aArgs.realloc(nAnzahl); - pArg = aArgs.getArray(); - pArg[nAnzahl-1].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Referer" )); - pArg[nAnzahl-1].Value <<= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:user" )); - - nAnzahl++; - aArgs.realloc(nAnzahl); - pArg = aArgs.getArray(); - pArg[nAnzahl-1].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SynchronMode" )); - pArg[nAnzahl-1].Value <<= sal_Bool( sal_True ); -} - -class SlotStatusListener : public cppu::WeakImplHelper1< XStatusListener > -{ -public: - SlotStatusListener(); - - // XStatusListener - virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw (::com::sun::star::uno::RuntimeException); - // XEventListener - virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); - - // local Members - sal_Bool bDisposed; - sal_Bool bEnabled; -}; - -SlotStatusListener::SlotStatusListener() -: bDisposed( sal_False ) -, bEnabled( sal_True ) -{} - -// XStatusListener -void SAL_CALL SlotStatusListener::statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) throw (::com::sun::star::uno::RuntimeException) -{ - bEnabled = Event.IsEnabled; -} - -// XEventListener -void SAL_CALL SlotStatusListener::disposing( const ::com::sun::star::lang::EventObject& ) throw (::com::sun::star::uno::RuntimeException) -{ - bDisposed = sal_True; -} - -sal_Bool StatementSlot::Execute() -{ - if ( IsError ) - { - #if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Skipping Slot: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nFunctionId ) ); - m_pDbgWin->AddText( "\n" ); - #endif - - Advance(); - delete this; - return sal_True; - } - - InitProfile(); -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Executing Slot: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nFunctionId ) ); - m_pDbgWin->AddText( "\n" ); -#endif - - PopupMenu *pPopup = NULL; - MenuBar *pMenuBar = NULL; - Menu *pMenu; - - GetCurrentMenues( pPopup, pMenuBar, pMenu ); - if ( pPopup ) - { - if ( !bMenuClosed ) - { - pPopup->EndExecute(0); - aSubMenuId1 = 0; - aSubMenuId2 = 0; - aSubMenuId3 = 0; - pMenuWindow = NULL; - bMenuClosed = sal_True; -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Closed contextmenu\n" ); -#endif - return sal_False; - } - else if ( nRetryCount-- ) - { -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Waiting for contextmenu to close\n" ); -#endif - return sal_False; - } - else - ReportError( GEN_RES_STR0( S_MENU_NOT_CLOSING ) ); - } - - Advance(); - - if ( !IsError ) - { - if ( ( nAnzahl == 0 && !getenv("OLDSLOTHANDLING") ) || aArgs.hasElements() ) - { // trying to call slots via uno - AddReferer(); - if ( !aUnoUrl.Len() ) - aUnoUrl = CUniString("slot:").Append( String::CreateFromInt32( nFunctionId ) ); - ::com::sun::star::util::URL aTargetURL; - aTargetURL.Complete = aUnoUrl; - Reference < XFramesSupplier > xDesktop = Reference < XFramesSupplier >( ::comphelper::getProcessServiceFactory()->createInstance( CUniString("com.sun.star.frame.Desktop") ), UNO_QUERY ); - Reference < XFrame > xFrame; - - if ( xDesktop.is() ) - { - xFrame = xDesktop->getActiveFrame(); - if ( !xFrame.is() ) - { - Reference < XFrames > xFrames; - xFrames = xDesktop->getFrames(); - if ( xFrames.is() && xFrames->getCount() > 0 ) - { - Any aFrame = xFrames->getByIndex( xFrames->getCount() -1 ); - aFrame >>= xFrame; - } - } - if ( !xFrame.is() ) - { - if ( GetFirstDocFrame() ) - GetFirstDocFrame()->ToTop(); - xFrame = xDesktop->getActiveFrame(); - } - } - - if ( xFrame.is() ) - xDesktop = Reference < XFramesSupplier >( xFrame, UNO_QUERY ); - else - xDesktop.clear(); - - while ( xDesktop.is() && xDesktop->getActiveFrame().is() ) - { - xFrame = xDesktop->getActiveFrame(); -#if OSL_DEBUG_LEVEL > 1 - ::rtl::OUString aName; - if ( xFrame.is() ) - aName = xFrame->getName(); -#endif - xDesktop = Reference < XFramesSupplier >( xFrame, UNO_QUERY ); - } - - if ( !xFrame.is() ) - ReportError( GEN_RES_STR1( S_UNO_URL_EXECUTE_FAILED_NO_FRAME, aTargetURL.Complete ) ); - else - { - Reference < ::com::sun::star::util::XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance( CUniString("com.sun.star.util.URLTransformer" )), UNO_QUERY ); - xTrans->parseStrict( aTargetURL ); - - Reference < XDispatchProvider > xProv( xFrame, UNO_QUERY ); - Reference < XDispatch > xDisp; - while ( xProv.is() && !xDisp.is() ) - { - xDisp = xProv->queryDispatch( aTargetURL, ::rtl::OUString(), 0 ); - if ( !xDisp.is() ) - { - xFrame = Reference < XFrame > ( xFrame->getCreator(), UNO_QUERY ); - xProv = Reference < XDispatchProvider > ( xFrame, UNO_QUERY ); - } - } - - if ( xDisp.is() ) - { - Reference < XStatusListener > xListener = ( XStatusListener* )new SlotStatusListener; - xDisp->addStatusListener( xListener, aTargetURL ); - if ( static_cast< SlotStatusListener* >(xListener.get())->bEnabled ) - { - if ( bIsSlotInExecute ) - ReportError( GEN_RES_STR0( S_SLOT_IN_EXECUTE ) ); - else - { - bIsSlotInExecute = sal_True; - xDisp->dispatch( aTargetURL, aArgs ); - bIsSlotInExecute = sal_False; - } - } - else - ReportError( GEN_RES_STR1( S_UNO_URL_EXECUTE_FAILED_DISABLED, aTargetURL.Complete ) ); - xDisp->removeStatusListener( xListener, aTargetURL ); - } - else - ReportError( GEN_RES_STR1( S_UNO_URL_EXECUTE_FAILED_NO_DISPATCHER, aTargetURL.Complete ) ); - } - } - else - { - DirectLog( S_QAError, GEN_RES_STR0( S_DEPRECATED ) ); - if ( !pTTProperties ) - pTTProperties = new TTProperties(); - - switch ( pTTProperties->ExecuteFunction( nFunctionId, pItemArr, EXECUTEMODE_DIALOGASYNCHRON | nUseBindings ) ) - { - case TT_PR_ERR_NODISPATCHER: - { - ReportError( rtl::OString::valueOf((sal_Int32)nFunctionId), GEN_RES_STR0( S_SID_EXECUTE_FAILED_NO_DISPATCHER ) ); - } - break; - case TT_PR_ERR_NOEXECUTE: - { - ReportError( rtl::OString::valueOf((sal_Int32)nFunctionId), GEN_RES_STR0( S_SID_EXECUTE_FAILED ) ); - } - break; - } - } - } - - -/* Neues Verfahren ab 334! - Neue Methode zum einstellen, da� Modale Dialoge immer Asynchron aufgerufen werden - und echter Returnwert, ob Slot geklappt hat - und Testen ob Slot �berhaupt durch UI aufgerufen werden kann */ - - - SendProfile( SlotString( nFunctionId ) ); - delete this; - return sal_True; -} - - -StatementUnoSlot::StatementUnoSlot(SCmdStream *pIn) -{ - QueStatement( NULL ); - - pIn->Read( aUnoUrl ); - -#if OSL_DEBUG_LEVEL > 1 - StatementList::m_pDbgWin->AddText( "UnoUrl:" ); - StatementList::m_pDbgWin->AddText( aUnoUrl ); - StatementList::m_pDbgWin->AddText( "\n" ); -#endif - -} - - -StatementCommand::StatementCommand( StatementList *pAfterThis, sal_uInt16 MethodId, sal_uInt16 Params, sal_uInt16 Nr1 ) -: nMethodId( MethodId ) -, nParams(Params) -, nNr1(Nr1) -, nNr2(0) -, nNr3(0) -, nNr4(0) -, aString1() -, aString2() -, bBool1(sal_False) -, bBool2(sal_False) -{ - nLNr1_and_Pointer.pWindow = 0; - - QueStatement( pAfterThis ); - -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Directly adding Conmmand:" ); - m_pDbgWin->AddText( " Methode: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); - m_pDbgWin->AddText( " Params:" ); - if( nParams & PARAM_UINT16_1 ) {m_pDbgWin->AddText( " n1:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr1 ) );} - if( nParams & PARAM_UINT16_2 ) {m_pDbgWin->AddText( " n2:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr2 ) );} - if( nParams & PARAM_UINT16_3 ) {m_pDbgWin->AddText( " n3:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr3 ) );} - if( nParams & PARAM_UINT16_4 ) {m_pDbgWin->AddText( " n4:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr4 ) );} - if( nParams & PARAM_UINT32_1 ) {m_pDbgWin->AddText( " nl1:" );m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) );} - if( nParams & PARAM_STR_1 ) {m_pDbgWin->AddText( " s1:" );m_pDbgWin->AddText( aString1 );} - if( nParams & PARAM_STR_2 ) {m_pDbgWin->AddText( " s2:" );m_pDbgWin->AddText( aString2 );} - if( nParams & PARAM_BOOL_1 ) {m_pDbgWin->AddText( " b1:" );m_pDbgWin->AddText( bBool1 ? "TRUE" : "FALSE" );} - if( nParams & PARAM_BOOL_2 ) {m_pDbgWin->AddText( " b2:" );m_pDbgWin->AddText( bBool2 ? "TRUE" : "FALSE" );} - m_pDbgWin->AddText( "\n" ); -#endif -} - - -StatementCommand::StatementCommand( SCmdStream *pCmdIn ) -: nMethodId(0) -, nParams(0) -, nNr1(0) -, nNr2(0) -, nNr3(0) -, nNr4(0) -, aString1() -, aString2() -, bBool1(sal_False) -, bBool2(sal_False) -{ - nLNr1_and_Pointer.pWindow = 0; - - QueStatement( NULL ); - pCmdIn->Read( nMethodId ); - pCmdIn->Read( nParams ); - - if( nParams & PARAM_UINT16_1 ) pCmdIn->Read( nNr1 ); - if( nParams & PARAM_UINT16_2 ) pCmdIn->Read( nNr2 ); - if( nParams & PARAM_UINT16_3 ) pCmdIn->Read( nNr3 ); - if( nParams & PARAM_UINT16_4 ) pCmdIn->Read( nNr4 ); - if( nParams & PARAM_UINT32_1 ) pCmdIn->Read( nLNr1_and_Pointer.nLNr1 ); - if( nParams & PARAM_STR_1 ) pCmdIn->Read( aString1 ); - if( nParams & PARAM_STR_2 ) pCmdIn->Read( aString2 ); - if( nParams & PARAM_BOOL_1 ) pCmdIn->Read( bBool1 ); - if( nParams & PARAM_BOOL_2 ) pCmdIn->Read( bBool2 ); - -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Reading Conmmand:" ); - m_pDbgWin->AddText( " Methode: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); - m_pDbgWin->AddText( " Params:" ); - if( nParams & PARAM_UINT16_1 ) {m_pDbgWin->AddText( " n1:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr1 ) );} - if( nParams & PARAM_UINT16_2 ) {m_pDbgWin->AddText( " n2:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr2 ) );} - if( nParams & PARAM_UINT16_3 ) {m_pDbgWin->AddText( " n3:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr3 ) );} - if( nParams & PARAM_UINT16_4 ) {m_pDbgWin->AddText( " n4:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr4 ) );} - if( nParams & PARAM_UINT32_1 ) {m_pDbgWin->AddText( " nl1:" );m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) );} - if( nParams & PARAM_STR_1 ) {m_pDbgWin->AddText( " s1:" );m_pDbgWin->AddText( aString1 );} - if( nParams & PARAM_STR_2 ) {m_pDbgWin->AddText( " s2:" );m_pDbgWin->AddText( aString2 );} - if( nParams & PARAM_BOOL_1 ) {m_pDbgWin->AddText( " b1:" );m_pDbgWin->AddText( bBool1 ? "TRUE" : "FALSE" );} - if( nParams & PARAM_BOOL_2 ) {m_pDbgWin->AddText( " b2:" );m_pDbgWin->AddText( bBool2 ? "TRUE" : "FALSE" );} - m_pDbgWin->AddText( "\n" ); -#endif - - if ( nMethodId == RC_AppAbort ) - { - #if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "*Deleting all Commands:\n" ); - #endif - bReadingCommands = sal_False; - while ( StatementList::pFirst != this ) // Alles L�schen au�er mich selbst - { - StatementList *pDeQue = StatementList::pFirst; - pDeQue->Advance(); - delete pDeQue; - } - bReadingCommands = sal_True; - #if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "*Done deleting all Commands:\n" ); - #endif - } - -} - -void StatementCommand::WriteControlData( Window *pBase, sal_uLong nConf, sal_Bool bFirst ) -{ - - if ( IsDialog(pBase) && !bFirst ) - return; - - if ( bFirst ) - pRet->GenReturn ( RET_WinInfo, rtl::OString(), (comm_UINT32)nConf | DH_MODE_DATA_VALID, UniString(), sal_True ); - - if ( bFirst ) - { - if ( pBase->GetType() == WINDOW_WINDOW && pBase->GetParent() && pBase->GetParent()->GetType() == WINDOW_CONTROL && - dynamic_cast< svt::table::TableControl* > ( pBase->GetParent() ) ) - pBase = pBase->GetParent(); - } - - { // Klammerung, so da� der String nicht w�hrend der Rekursion bestehen bleibt - String aName; - sal_Bool bSkip = sal_False; - - switch ( pBase->GetType() ) - { - case WINDOW_RADIOBUTTON: - case WINDOW_CHECKBOX: - case WINDOW_TRISTATEBOX: - case WINDOW_PUSHBUTTON: - case WINDOW_OKBUTTON: - case WINDOW_CANCELBUTTON: - case WINDOW_IMAGERADIOBUTTON: - case WINDOW_IMAGEBUTTON: - case WINDOW_MENUBUTTON: - case WINDOW_MOREBUTTON: - case WINDOW_TABPAGE: - case WINDOW_MODALDIALOG: - case WINDOW_FLOATINGWINDOW: - case WINDOW_MODELESSDIALOG: - case WINDOW_WORKWINDOW: - case WINDOW_DOCKINGWINDOW: - case WINDOW_CONTROL: - - case WINDOW_FILEDIALOG: - case WINDOW_PATHDIALOG: - case WINDOW_PRINTDIALOG: - case WINDOW_PRINTERSETUPDIALOG: - case WINDOW_COLORDIALOG: - case WINDOW_TABDIALOG: - - case WINDOW_BUTTONDIALOG: - - case WINDOW_MENUBARWINDOW: - aName = pBase->GetText().EraseAllChars('~'); - break; - - case WINDOW_EDIT: - case WINDOW_MULTILINEEDIT: - case WINDOW_MULTILISTBOX: - case WINDOW_LISTBOX: - case WINDOW_COMBOBOX: - case WINDOW_SPINFIELD: - case WINDOW_PATTERNFIELD: - case WINDOW_NUMERICFIELD: - case WINDOW_METRICFIELD: - case WINDOW_CURRENCYFIELD: - case WINDOW_DATEFIELD: - case WINDOW_TIMEFIELD: - case WINDOW_NUMERICBOX: - case WINDOW_METRICBOX: - case WINDOW_CURRENCYBOX: - case WINDOW_DATEBOX: - case WINDOW_TIMEBOX: - case WINDOW_PATTERNBOX: - case WINDOW_TOOLBOX: - aName = pBase->GetQuickHelpText(); - break; - - case WINDOW_MESSBOX: - case WINDOW_INFOBOX: - case WINDOW_WARNINGBOX: - case WINDOW_ERRORBOX: - case WINDOW_QUERYBOX: - aName = ((MessBox*)pBase)->GetMessText(); - break; - - default: - if ( ( pBase->GetUniqueOrHelpId().getLength() == 0 ) && !( nConf & DH_MODE_ALLWIN ) ) - bSkip = sal_True; - break; - } - - if ( !bSkip ) - { - if ( aName.Len() == 0 ) - aName = pBase->GetQuickHelpText(); - if ( aName.Len() == 0 ) - aName = pBase->GetHelpText(); - if ( aName.Len() == 0 ) - aName = pBase->GetText(); - - - String aTypeSuffix; - if ( pBase->GetType() == WINDOW_CONTROL ) - { - if ( dynamic_cast< EditBrowseBox* >(pBase) ) - aTypeSuffix.AppendAscii( "/BrowseBox", 10 ); - else if ( dynamic_cast< ValueSet* >(pBase) ) - aTypeSuffix.AppendAscii( "/ValueSet", 9 ); - else if ( dynamic_cast< ORoadmap* >(pBase) ) - aTypeSuffix.AppendAscii( "/RoadMap", 8 ); - else if ( dynamic_cast< IExtensionListBox* >(pBase) ) - aTypeSuffix.AppendAscii( "/ExtensionListBox" ); - else if ( dynamic_cast< svt::table::TableControl* >(pBase) ) - aTypeSuffix.AppendAscii( "/TableControl" ); - else - aTypeSuffix.AppendAscii( "/Unknown", 8 ); - } - - rtl::OString aId = pBase->GetUniqueOrHelpId(); - pRet->GenReturn ( RET_WinInfo, aId, (comm_UINT32)pBase->GetType(), - TypeString(pBase->GetType()).Append(aTypeSuffix).AppendAscii(": ").Append(aName), sal_False ); - - - if ( pBase->GetType() == WINDOW_TOOLBOX ) // Buttons und Controls auf Toolboxen. - { - ToolBox *pTB = ((ToolBox*)pBase); - sal_uInt16 i; - for ( i = 0; i < pTB->GetItemCount() ; i++ ) - { - aName = String(); - if ( aName.Len() == 0 ) - aName = pTB->GetHelpText( pTB->GetItemId( i ) ); - if ( aName.Len() == 0 ) - aName = pTB->GetItemText( pTB->GetItemId( i ) ); - - Window *pItemWin; - pItemWin = pTB->GetItemWindow( pTB->GetItemId( i ) ); - if ( pTB->GetItemType( i ) == TOOLBOXITEM_BUTTON && ( !pItemWin || !pItemWin->IsVisible() ) ) - { - if ( pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) - pRet->GenReturn ( RET_WinInfo, Str2Id(pTB->GetItemCommand(pTB->GetItemId( i ))), (comm_UINT32)WINDOW_BUTTON, - TypeString(WINDOW_BUTTON).AppendAscii(": ").Append(aName), sal_False ); - if ( !pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) - pRet->GenReturn ( RET_WinInfo, pTB->GetHelpId(pTB->GetItemId( i )), (comm_UINT32)WINDOW_BUTTON, - TypeString(WINDOW_BUTTON).AppendAscii(": ").Append(aName), sal_False ); - } - else - { - if ( pItemWin ) - { - if ( pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) - pRet->GenReturn ( RET_WinInfo, Str2Id(pTB->GetItemCommand(pTB->GetItemId( i ))), (comm_UINT32)pItemWin->GetType(), - TypeString(pItemWin->GetType()).AppendAscii(": ").Append(aName), sal_False ); - if ( !pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) - pRet->GenReturn ( RET_WinInfo, pTB->GetHelpId(pTB->GetItemId( i )), (comm_UINT32)pItemWin->GetType(), - TypeString(pItemWin->GetType()).AppendAscii(": ").Append(aName), sal_False ); - sal_uInt16 ii; - for( ii = 0 ; ii < pItemWin->GetChildCount(); ii++ ) - WriteControlData( pItemWin->GetChild(ii), nConf, sal_False ); - } - else - { - if ( nConf & DH_MODE_ALLWIN ) - { - String aToolBoxItemType; - switch ( pTB->GetItemType( i ) ) - { - case TOOLBOXITEM_DONTKNOW: - aToolBoxItemType.AssignAscii("TOOLBOXITEM_DONTKNOW"); - break; - case TOOLBOXITEM_BUTTON: - aToolBoxItemType.AssignAscii("TOOLBOXITEM_BUTTON"); - break; - case TOOLBOXITEM_SPACE: - aToolBoxItemType.AssignAscii("TOOLBOXITEM_SPACE"); - break; - case TOOLBOXITEM_SEPARATOR: - aToolBoxItemType.AssignAscii("TOOLBOXITEM_SEPARATOR"); - break; - case TOOLBOXITEM_BREAK: - aToolBoxItemType.AssignAscii("TOOLBOXITEM_BREAK"); - break; - default: - OSL_TRACE( "Unknown TOOLBOXITEM %i", pTB->GetItemType( i ) ); - } - if ( pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) - pRet->GenReturn ( RET_WinInfo, Str2Id( pTB->GetItemCommand(pTB->GetItemId( i )) ), (comm_UINT32)WINDOW_BASE, - aToolBoxItemType.AppendAscii(": ").Append(aName), sal_False ); - if ( !pTB->GetItemCommand(pTB->GetItemId( i )).Len() || ( nConf & DH_MODE_ALLWIN ) ) - pRet->GenReturn ( RET_WinInfo, pTB->GetHelpId(pTB->GetItemId( i )), (comm_UINT32)WINDOW_BASE, - aToolBoxItemType.AppendAscii(": ").Append(aName), sal_False ); - } - } - } - } - - return; // ToolBox ist hier schon komplett abgehandelt. - } - - - if ( pBase->GetType() == WINDOW_BUTTONDIALOG // Buttons auf Buttondialogen mit ID - || pBase->GetType() == WINDOW_MESSBOX - || pBase->GetType() == WINDOW_INFOBOX - || pBase->GetType() == WINDOW_WARNINGBOX - || pBase->GetType() == WINDOW_ERRORBOX - || pBase->GetType() == WINDOW_QUERYBOX ) - { - ButtonDialog *pBD = ((ButtonDialog*)pBase); - sal_uInt16 i; - for ( i = 0; i < pBD->GetButtonCount() ; i++ ) - { - aName = String(); - if ( aName.Len() == 0 ) - aName = pBD->GetPushButton( pBD->GetButtonId(i) )->GetText(); - ByteString aID; - switch ( pBD->GetButtonId(i) ) - { - case BUTTONID_OK: - aID.Assign("Ok"); - break; - case BUTTONID_CANCEL: - aID.Assign("Cancel"); - break; - case BUTTONID_YES: - aID.Assign("Yes"); - break; - case BUTTONID_NO: - aID.Assign("No"); - break; - case BUTTONID_RETRY: - aID.Assign("Retry"); - break; - case BUTTONID_HELP: - aID.Assign("Help"); - break; - default: - aID = rtl::OString::valueOf( - static_cast<sal_Int32>(pBD->GetButtonId(i))); - break; - } - - pRet->GenReturn ( RET_WinInfo, aID, (comm_UINT32)pBD->GetPushButton( pBD->GetButtonId(i) )->GetType(), // So da� der Text angezeigt wird! - TypeString(pBD->GetPushButton( pBD->GetButtonId(i) )->GetType()).AppendAscii(": ").Append(aName) - .AppendAscii(" ButtonId = ").AppendAscii( aID.GetBuffer() ), sal_False ); - } - - return; // ButtonDialog ist hier schon komplett abgehandelt. - } - - - Menu* pMenu = GetMatchingMenu( pBase ); - - if ( pMenu ) // Menus - { - sal_uInt16 i; - for ( i = 0; i < pMenu->GetItemCount() ; i++ ) - { - sal_uInt16 nID = pMenu->GetItemId( i ); - - aName = String(); - if ( aName.Len() == 0 ) - aName = pMenu->GetHelpText( nID ); - if ( aName.Len() == 0 ) - aName = pMenu->GetItemText( nID ); - - - if ( pMenu->GetItemType( i ) == MENUITEM_STRING || pMenu->GetItemType( i ) == MENUITEM_IMAGE || pMenu->GetItemType( i ) == MENUITEM_STRINGIMAGE || (nConf & DH_MODE_ALLWIN) ) - { - String aMenuItemType; - switch ( pMenu->GetItemType( i ) ) - { - case MENUITEM_STRING: - aMenuItemType.AssignAscii("MENUITEM_STRING"); - break; - case MENUITEM_STRINGIMAGE: - aMenuItemType.AssignAscii("MENUITEM_STRINGIMAGE"); - break; - case MENUITEM_IMAGE: - aMenuItemType.AssignAscii("MENUITEM_IMAGE"); - break; - case MENUITEM_SEPARATOR: - aMenuItemType.AssignAscii("MENUITEM_SEPARATOR"); - break; - case MENUITEM_DONTKNOW: - aMenuItemType.AssignAscii("MENUITEM_DONTKNOW"); - break; - default: - OSL_TRACE( "Unknown MENUITEM %i", pMenu->GetItemType( i ) ); - } - if ( pMenu->GetItemCommand(nID).Len() || ( nConf & DH_MODE_ALLWIN ) ) - pRet->GenReturn ( RET_WinInfo, Str2Id( pMenu->GetItemCommand(nID) ), (comm_UINT32)0, - aMenuItemType.AppendAscii(": ").Append(aName), sal_False ); - if ( !pMenu->GetItemCommand(nID).Len() || ( nConf & DH_MODE_ALLWIN ) ) - pRet->GenReturn ( RET_WinInfo, rtl::OString::valueOf( (sal_Int32)nID ), (comm_UINT32)0, - aMenuItemType.AppendAscii(": ").Append(aName), sal_False ); - } - } - - return; // Menu ist hier schon komplett abgehandelt. - } - } - } - - for( sal_uInt16 i = 0 ; i < pBase->GetChildCount(); i++ ) - WriteControlData( pBase->GetChild(i), nConf, sal_False ); -} - -class SysWinContainer : public WorkWindow -{ -private: - ToolBox *pClientWin; - DockingWindow *pDock; -public: - SysWinContainer( ToolBox *pClient ); - ~SysWinContainer(); - virtual void Resize(); - virtual void Resizing( Size& rSize ); -}; - -SysWinContainer::SysWinContainer( ToolBox *pClient ) -: WorkWindow( NULL, WB_BORDER | WB_SIZEMOVE | WB_CLOSEABLE ) -, pClientWin( pClient ) -{ - pDock = new DockingWindow( this ); - pClientWin->SetParent( pDock ); - pClientWin->SetFloatingMode( sal_False ); - SetText( pClient->GetText() ); - SetPosPixel( Point( 1,40 ) ); - Resize(); - pDock->Show(); - EnableAlwaysOnTop(); - Show(); -} - -SysWinContainer::~SysWinContainer() -{ - delete pDock; -} - -void SysWinContainer::Resize() -{ - Size aSize( GetOutputSizePixel() ); - Resizing( aSize ); - - if ( aSize != GetSizePixel() ) - { - SetOutputSizePixel( aSize ); - pDock->SetSizePixel( aSize ); - pClientWin->SetSizePixel( aSize ); - } -} - -void SysWinContainer::Resizing( Size& rSize ) -{ - Size aSize; - Size aBestSize; - sal_uInt16 i; - sal_Bool bHasValue = sal_False; - sal_uLong nBestValue = 0; - sal_uLong nThisValue; - for ( i=1 ; i<=1 ; i++ ) - { - aSize = pClientWin->CalcWindowSizePixel( i ); - nThisValue = Abs( aSize.Width() - rSize.Width() ) + Abs( aSize.Height() - rSize.Height() ); - if ( !bHasValue || ( nThisValue < nBestValue ) ) - { - nBestValue = nThisValue; - aBestSize = aSize; - bHasValue = sal_True; - } - } - rSize = aBestSize; -} - - -class DisplayHidWin : public ToolBox -{ - Edit *pEdit; - Size aMinEditSize; - sal_uInt16 nLastItemID; - sal_Bool bIsDraging; - sal_Bool bIsPermanentDraging; - void SetDraging( sal_Bool bNewDraging ); - Image *pShow, *pShow2; - sal_Bool bConfigChanged; - void EnableButtons( sal_uLong nConf ); - - sal_uLong nEventHookID; - static long stub_VCLEventHookProc( NotifyEvent& rEvt, void* pData ) - { - return ((DisplayHidWin*)pData)->VCLEventHook( rEvt ); - } - - long VCLEventHook( NotifyEvent& rEvt ); - Window *pLastMouseMoveWin; - - SysWinContainer *pContainer; - - // aborting by pressing shist twice - sal_Bool bOldShift; - Time aLatest; - sal_uInt16 nShiftCount; - -public: - DisplayHidWin(); - ~DisplayHidWin(); - - virtual void Tracking( const TrackingEvent& rTEvt ); - virtual void Click(); - virtual void Select(); - virtual void SetText( const XubString& rStr ); - - void SetDisplayText( const String &aNewText ){ pEdit->SetText(aNewText); } - String GetDisplayText() const { return pEdit->GetText(); } - sal_Bool IsDisplayTextModified() const { return pEdit->IsModified(); } - void ClearDisplayTextModified() const { pEdit->ClearModifyFlag(); } - - void SetConfig( sal_uLong nConf ); - sal_uLong GetConfig(); - - sal_Bool IsConfigChanged() { return bConfigChanged; } - void ConfigSent() { bConfigChanged = sal_False; } - - sal_Bool IsSendData() { return GetItemState( TT_SEND_DATA ) == STATE_CHECK; } - - sal_Bool IsDraging() { return bIsDraging; } - - Window* LastMouseMoveWin() { return pLastMouseMoveWin; } -}; - -DisplayHidWin::DisplayHidWin() -: ToolBox( StatementList::GetFirstDocFrame(), TTProperties::GetSvtResId(DisplayHidToolBox) ) -, bIsDraging( sal_False ) -, bIsPermanentDraging( sal_False ) -, pShow( NULL ) -, pShow2( NULL ) -, pLastMouseMoveWin( NULL ) -, bOldShift( 0 ) -, nShiftCount( 0 ) -{ - SetOutStyle( TOOLBOX_STYLE_HANDPOINTER | TOOLBOX_STYLE_FLAT ); - pEdit = new Edit( this, WB_CENTER | WB_BORDER ); - aMinEditSize = GetItemRect( TT_OUTPUT ).GetSize(); -/**/ aMinEditSize=Size(20,20); - aMinEditSize.Width() *= 12; - pEdit->SetSizePixel( aMinEditSize ); - pEdit->Show(); - SetItemWindow( TT_OUTPUT, pEdit ); - Resize(); - pContainer = new SysWinContainer( this ); - nEventHookID = Application::AddEventHook( stub_VCLEventHookProc, this ); -} - -DisplayHidWin::~DisplayHidWin() -{ - Application::RemoveEventHook( nEventHookID ); - Hide(); // so GetFirstDocFrame won't return ourselves (needed for SOPlayer) - SetParent( StatementList::GetFirstDocFrame() ); - delete pContainer; - delete pEdit; -} - -void DisplayHidWin::SetDraging( sal_Bool bNewDraging ) -{ - if ( !pShow ) - pShow = new Image( GetItemImage( TT_SHOW ) ); - if ( !pShow2 ) - pShow2 = new Image( Bitmap( TTProperties::GetSvtResId( TT_SHOW2 ) ) ); - - if ( bNewDraging ) - SetItemImage( TT_SHOW, *pShow2 ); - else - SetItemImage( TT_SHOW, *pShow ); - - bIsDraging = bNewDraging; -} - -void DisplayHidWin::EnableButtons( sal_uLong nConf ) -{ - sal_Bool bSend = sal_Bool(nConf & DH_MODE_SEND_DATA); - EnableItem( TT_ALLWIN, bSend ); - EnableItem( TT_KURZNAME, bSend ); - EnableItem( TT_LANGNAME, bSend ); -} - -void DisplayHidWin::Tracking( const TrackingEvent& rTEvt ) -{ - if ( nLastItemID == TT_SHOW && GetItemState( TT_SHOW ) == STATE_NOCHECK ) - EndTracking( ENDTRACK_CANCEL ); - ToolBox::Tracking( rTEvt); -} - -void DisplayHidWin::Click() -{ - nLastItemID = GetCurItemId(); - if ( nLastItemID == TT_SHOW ) - { - SetDraging( sal_True ); - } - ToolBox::Click(); -} - -void DisplayHidWin::Select() -{ - if ( GetItemState( GetCurItemId() ) == STATE_NOCHECK ) - { - SetItemState( GetCurItemId(), STATE_CHECK ); - if ( GetCurItemId() == TT_SHOW ) - { - bIsPermanentDraging = sal_True; - SetDraging( sal_True ); - } - } - else - { - SetItemState( GetCurItemId(), STATE_NOCHECK ); - if ( GetCurItemId() == TT_SHOW ) - { - bIsPermanentDraging = sal_False; - SetDraging( sal_False ); - } - } - if ( GetCurItemId() == TT_SEND_DATA ) - { - EnableButtons( GetConfig() ); - } -} - -void DisplayHidWin::SetConfig( sal_uLong nConf ) -{ - SetItemState( TT_KURZNAME, ( nConf & DH_MODE_KURZNAME ) ? STATE_CHECK : STATE_NOCHECK ); - SetItemState( TT_LANGNAME, ( nConf & DH_MODE_LANGNAME ) ? STATE_CHECK : STATE_NOCHECK ); - SetItemState( TT_ALLWIN, ( nConf & DH_MODE_ALLWIN ) ? STATE_CHECK : STATE_NOCHECK ); - SetItemState( TT_SEND_DATA, ( nConf & DH_MODE_SEND_DATA ) ? STATE_CHECK : STATE_NOCHECK ); - EnableButtons( nConf ); -} - -sal_uLong DisplayHidWin::GetConfig() -{ - sal_uLong nConf = 0; - if ( GetItemState( TT_KURZNAME ) == STATE_CHECK ) - nConf |= DH_MODE_KURZNAME; - if ( GetItemState( TT_LANGNAME ) == STATE_CHECK ) - nConf |= DH_MODE_LANGNAME; - if ( GetItemState( TT_ALLWIN ) == STATE_CHECK ) - nConf |= DH_MODE_ALLWIN; - if ( IsSendData() ) - nConf |= DH_MODE_SEND_DATA; - - return nConf; -} - -void DisplayHidWin::SetText( const XubString& rStr ) -{ - pContainer->SetText( rStr ); -} - -long DisplayHidWin::VCLEventHook( NotifyEvent& rEvt ) -{ - if ( EVENT_MOUSEMOVE == rEvt.GetType() ) - { - pLastMouseMoveWin = rEvt.GetWindow(); - - // check if abort with pressing shift twice - MouseEvent* pMEvt = (MouseEvent*)rEvt.GetMouseEvent(); - - if ( ( pMEvt->IsShift() && !bOldShift ) ) // Shift pressed - { - if ( aLatest < Time() ) - { - nShiftCount = 0; - aLatest = Time()+Time( 0, 0, 0, 50 ); - } - nShiftCount++; - } - if ( ( !pMEvt->IsShift() && bOldShift ) ) // Shift released - { - nShiftCount++; - if ( nShiftCount == 4 && aLatest > Time() ) - { - bIsPermanentDraging = sal_False; - SetDraging( sal_False ); - SetItemState( TT_SHOW, STATE_NOCHECK ); - } - } - bOldShift = pMEvt->IsShift(); - } - if ( ( ( EVENT_MOUSEBUTTONUP == rEvt.GetType() && rEvt.GetMouseEvent()->GetButtons() == MOUSE_LEFT) || ( EVENT_MOUSEMOVE == rEvt.GetType() && !rEvt.GetMouseEvent()->GetButtons() ) ) - && IsDraging() && !bIsPermanentDraging ) - SetDraging( sal_False ); - return 0; -} - - -sal_Bool StatementCommand::DisplayHID() -{ - // Return sal_True -> reexecute command - - if ( !bBool2 ) // Wird auf sal_False initialisiert - { - bBool2 = sal_True; // Wir sind initialisiert. - GetTTSettings()->pDisplayInstance = this; // Und haben die Macht (Alle anderen beenden sich) - - if ( !(nParams & PARAM_UINT32_1) ) - { - if( GetTTSettings()->pDisplayHidWin ) // Nichts ver�ndern - nLNr1_and_Pointer.nLNr1 = GetTTSettings()->pDisplayHidWin->GetConfig(); - else // Beim ersten Aufruf wollen wir alles richtig einstellen - nLNr1_and_Pointer.nLNr1 = DH_MODE_KURZNAME | DH_MODE_LANGNAME; - - if( ((nParams & PARAM_BOOL_1) && bBool1) ) - nLNr1_and_Pointer.nLNr1 |= DH_MODE_SEND_DATA; - else - nLNr1_and_Pointer.nLNr1 &= ( ~DH_MODE_SEND_DATA ); - } - - if ( GetTTSettings()->pDisplayHidWin ) - GetTTSettings()->pDisplayHidWin->SetConfig( nLNr1_and_Pointer.nLNr1 ); - } - - if ( GetTTSettings()->pDisplayInstance && GetTTSettings()->pDisplayInstance != this ) - { - DBG_WARNING("Mehrere DisplayHID am laufen"); - return sal_False; // Noch eine andere Instanz macht das gleiche! - } - - if ( !GetTTSettings()->pDisplayHidWin ) - { - GetTTSettings()->pDisplayHidWin = new DisplayHidWin(); - GetTTSettings()->aOriginalCaption = GetTTSettings()->pDisplayHidWin->GetText(); - GetTTSettings()->pDisplayHidWin->Show(); - if ( bBool1 ) - nLNr1_and_Pointer.nLNr1 |= DH_MODE_SEND_DATA; - GetTTSettings()->pDisplayHidWin->SetConfig( nLNr1_and_Pointer.nLNr1 ); - - GetTTSettings()->Old = NULL; - GetTTSettings()->Act = NULL; - GetTTSettings()->pDisplayInstance = this; - } - else - { - GetTTSettings()->pDisplayHidWin->GetWindow( WINDOW_OVERLAP )->Enable( sal_True, sal_True ); - GetTTSettings()->pDisplayHidWin->GetWindow( WINDOW_OVERLAP )->EnableInput( sal_True, sal_True ); - } - - - if ( GetTTSettings()->pDisplayHidWin->IsVisible() && !bDying ) - { - - if ( GetTTSettings()->pDisplayHidWin->IsDraging() ) - { - - -#define HIGHLIGHT_WIN( WinPtr ) \ - { \ - Color aLineColMem = WinPtr->GetLineColor(); \ - WinPtr->SetLineColor( Color( COL_WHITE ) ); \ - Color aFillColMem = WinPtr->GetFillColor(); \ - WinPtr->SetFillColor( Color( COL_LIGHTRED ) ); \ - RasterOp aROp = WinPtr->GetRasterOp(); \ - WinPtr->SetRasterOp( ROP_XOR ); \ - Size aSz = WinPtr->PixelToLogic( WinPtr->GetSizePixel() );\ - sal_uLong nMaxCornerRadius = WinPtr->PixelToLogic( Point( 80, 0 ) ).X();\ - sal_uLong iCorner = std::max ((sal_uLong) 8, (sal_uLong) std::min( nMaxCornerRadius, (sal_uLong) std::min((sal_uLong) (aSz.Width() / 6), (sal_uLong)(aSz.Height() / 6))));\ - WinPtr->DrawRect(Rectangle(Point(),aSz), iCorner, iCorner);\ - WinPtr->SetLineColor( aLineColMem ); \ - WinPtr->SetFillColor( aFillColMem ); \ - WinPtr->SetRasterOp( aROp ); \ - } - - -#define SET_WIN( WinPtr ) \ - if ( StatementList::WinPtrValid(WinPtr) ) \ - { \ - HIGHLIGHT_WIN ( WinPtr ); \ - } - -#define RESET_WIN( WinPtr ) \ - if ( StatementList::WinPtrValid(WinPtr) ) \ - { \ - WinPtr->Invalidate( INVALIDATE_NOTRANSPARENT ); \ - WinPtr->Update(); \ - } - - - GetTTSettings()->Old = GetTTSettings()->Act; - GetTTSettings()->Act = GetTTSettings()->pDisplayHidWin->LastMouseMoveWin(); - - if ( !StatementList::WinPtrValid ( GetTTSettings()->Old ) ) - GetTTSettings()->Old = NULL; - if ( !StatementList::WinPtrValid ( GetTTSettings()->Act ) ) - GetTTSettings()->Act = NULL; - - if ( GetTTSettings()->Act && GetTTSettings()->Act->GetType() == WINDOW_BORDERWINDOW ) - GetTTSettings()->Act = GetTTSettings()->Act->GetWindow( WINDOW_CLIENT ); - - if ( GetTTSettings()->Act != GetTTSettings()->Old ) - { - if ( GetTTSettings()->Old ) - { - RESET_WIN(GetTTSettings()->Old); - } - if ( GetTTSettings()->Act ) - { - SET_WIN(GetTTSettings()->Act); - GetTTSettings()->pDisplayHidWin->SetDisplayText( Id2Str(GetTTSettings()->Act->GetUniqueOrHelpId()).AppendAscii(" WinType: ") - .Append(UniString::CreateFromInt64(GetTTSettings()->Act->GetType())).AppendAscii(" ").Append(GetTTSettings()->Act->GetText())); - if ( GetTTSettings()->Act && !GetTTSettings()->Act->GetUniqueId().equals( GetTTSettings()->Act->GetHelpId() ) ) - GetTTSettings()->pDisplayHidWin->SetText(UniString( TTProperties::GetSvtResId( TT_ALTERNATE_CAPTION ) ).AppendAscii(GetTTSettings()->Act->GetHelpId().getStr())); - else - GetTTSettings()->pDisplayHidWin->SetText( GetTTSettings()->aOriginalCaption ); - } - else - GetTTSettings()->pDisplayHidWin->SetDisplayText(CUniString("Kein Window/Control gefunden")); - } - else if ( GetTTSettings()->Act ) - { - // allow setting a HelpID manually (just enter the ID in the displayHID Window and terminate it by | - if ( GetTTSettings()->pDisplayHidWin->IsDisplayTextModified() && GetTTSettings()->pDisplayHidWin->GetDisplayText().GetTokenCount( '|' ) > 1 ) - { - GetTTSettings()->Act->SetUniqueId( Str2Id( GetTTSettings()->pDisplayHidWin->GetDisplayText().GetToken( '|' ) ) ); - GetTTSettings()->pDisplayHidWin->ClearDisplayTextModified(); - } - } - - if ( GetTTSettings()->pDisplayHidWin->IsSendData() && GetTTSettings()->Act ) - { - if ( !StatementFlow::bSending ) - { // Normalerweise syncronisierung �ber Protokoll. Hier ist das aber asyncron!!! - WriteControlData( GetTTSettings()->Act, GetTTSettings()->pDisplayHidWin->GetConfig() ); - new StatementFlow( this, F_EndCommandBlock ); // Kommando zum Senden erzeugen und in que eintragen - } - } - } - else - { - if ( GetTTSettings()->Act ) - { - RESET_WIN(GetTTSettings()->Act); - GetTTSettings()->Act = NULL; - } - } - - if ( pFirst == this ) // Sollte immer so sein, aber besser isses - if ( pNext ) // Befehle warten auf Ausf�hrung - { // An Ende neu einsortieren - Advance(); - QueStatement( NULL ); - } - } - else - { - delete GetTTSettings()->pDisplayHidWin; - GetTTSettings()->pDisplayHidWin = NULL; - GetTTSettings()->pDisplayInstance = NULL; - } - - return GetTTSettings()->pDisplayHidWin != NULL; -} - -class TranslateWin : public WorkWindow -{ -private: - DECL_LINK( DoAccept, PushButton* ); - DECL_LINK( DoNext, PushButton* ); - DECL_LINK( DoSelect, PushButton* ); - DECL_LINK( DoRestore, PushButton* ); - DECL_LINK( TranslationChanged, Edit* ); - DECL_LINK( ShowInplace, Timer* ); - - Timer InplaceTimer; - - PushButton PushButtonTT_PB_NEXT; - GroupBox GroupBoxTT_GB_TRANSLATION; - Edit EditTT_E_NEW; - GroupBox GroupBoxTT_GB_COMMENT; - Edit EditTT_E_COMMENT; - PushButton PushButtonTT_PB_ACCEPT; - FixedText FixedTextTT_FT_OLD; - PushButton PushButtonTT_PB_SELECT; - PushButton PushButtonTT_PB_RESTORE; - - Window *Old; - Window *Act; - Window *pTranslateWin; - sal_Bool bSelecting; - - sal_Bool bAvailable; - sal_Bool bNext; - - sal_Bool TestChangedDataSaved(); - - - sal_uLong nEventHookID; - static long stub_VCLEventHookProc( NotifyEvent& rEvt, void* pData ) - { - return ((TranslateWin*)pData)->VCLEventHook( rEvt ); - } - - long VCLEventHook( NotifyEvent& rEvt ); - -public: - TranslateWin(); - ~TranslateWin(); - - static String MarkShortcutErrors( Window* pBase, sal_Bool bMark ); - - sal_Bool IsTranslationAvailable(){ return bAvailable; } - sal_Bool IsNextDialog(){ return bNext; } - void ResetNextDialog(){ bNext = sal_False; } - - Window* GetTranslationWindow(){ return pTranslateWin; } - String GetOriginalText(){ return FixedTextTT_FT_OLD.GetText(); } - String GetTranslationText(){ return EditTT_E_NEW.GetText(); } - String GetComment(){ return EditTT_E_COMMENT.GetText(); } - - void EnableTranslation(); -}; - -TranslateWin::TranslateWin() -: WorkWindow( NULL, TTProperties::GetSvtResId( TT_INLINE_TRANSLATION ) ) -, PushButtonTT_PB_NEXT( this, TTProperties::GetSvtResId( TT_PB_NEXT ) ) -, GroupBoxTT_GB_TRANSLATION( this, TTProperties::GetSvtResId( TT_GB_TRANSLATION ) ) -, EditTT_E_NEW( this, TTProperties::GetSvtResId( TT_E_NEW ) ) -, GroupBoxTT_GB_COMMENT( this, TTProperties::GetSvtResId( TT_GB_COMMENT ) ) -, EditTT_E_COMMENT( this, TTProperties::GetSvtResId( TT_E_COMMENT ) ) -, PushButtonTT_PB_ACCEPT( this, TTProperties::GetSvtResId( TT_PB_ACCEPT ) ) -, FixedTextTT_FT_OLD( this, TTProperties::GetSvtResId( TT_FT_OLD ) ) -, PushButtonTT_PB_SELECT( this, TTProperties::GetSvtResId( TT_PB_SELECT ) ) -, PushButtonTT_PB_RESTORE( this, TTProperties::GetSvtResId( TT_PB_RESTORE ) ) -, Old( NULL ) -, Act( NULL ) -, pTranslateWin( NULL ) -, bSelecting( sal_False ) -, bAvailable( sal_False ) -, bNext( sal_False ) -{ - FreeResource(); - PushButtonTT_PB_NEXT.SetClickHdl( LINK( this, TranslateWin, DoNext ) ); - PushButtonTT_PB_ACCEPT.SetClickHdl( LINK( this, TranslateWin, DoAccept ) ); - PushButtonTT_PB_SELECT.SetClickHdl( LINK( this, TranslateWin, DoSelect ) ); - PushButtonTT_PB_RESTORE.SetClickHdl( LINK( this, TranslateWin, DoRestore ) ); - EditTT_E_NEW.SetModifyHdl( LINK( this, TranslateWin, TranslationChanged ) ); - InplaceTimer.SetTimeout( 250 ); - InplaceTimer.SetTimeoutHdl( LINK( this, TranslateWin, ShowInplace ) ); - EnableAlwaysOnTop(); - nEventHookID = Application::AddEventHook( stub_VCLEventHookProc, this ); -} - -TranslateWin::~TranslateWin() -{ - Application::RemoveEventHook( nEventHookID ); -} - -sal_Bool TranslateWin::TestChangedDataSaved() -{ - if ( ( EditTT_E_NEW.GetText().CompareTo( FixedTextTT_FT_OLD.GetText() ) != COMPARE_EQUAL - || EditTT_E_COMMENT.GetText().Len() ) - && PushButtonTT_PB_ACCEPT.IsEnabled() ) - { - return MessBox( this, TTProperties::GetSvtResId( TT_DISCARD_CHANGED_DATA ) ).Execute() == RET_YES; - } - else - return sal_True; -} - -IMPL_LINK( TranslateWin, DoAccept, PushButton*, EMPTYARG ) -{ - PushButtonTT_PB_SELECT.Disable(); - PushButtonTT_PB_NEXT.Disable(); - PushButtonTT_PB_RESTORE.Disable(); - EditTT_E_NEW.Disable(); - EditTT_E_COMMENT.Disable(); - PushButtonTT_PB_ACCEPT.Disable(); - bAvailable = sal_True; - return 0; -} - -IMPL_LINK( TranslateWin, DoNext, PushButton*, EMPTYARG ) -{ - if ( TestChangedDataSaved() ) - { - PushButtonTT_PB_SELECT.Disable(); - PushButtonTT_PB_NEXT.Disable(); - PushButtonTT_PB_RESTORE.Disable(); - EditTT_E_NEW.Disable(); - EditTT_E_COMMENT.Disable(); - PushButtonTT_PB_ACCEPT.Disable(); - bNext = sal_True; - } - return 0; -} - -IMPL_LINK( TranslateWin, DoSelect, PushButton*, EMPTYARG ) -{ - if ( bSelecting ) - { - bSelecting = sal_False; - } - else - { - if ( TestChangedDataSaved() ) - { - PushButtonTT_PB_RESTORE.Disable(); - bSelecting = sal_True; - } - } - return 0; -} - -IMPL_LINK( TranslateWin, DoRestore, PushButton*, EMPTYARG ) -{ - String sTT_E_OLD( FixedTextTT_FT_OLD.GetText()); - sTT_E_OLD.SearchAndReplaceAll( CUniString("\\n"), CUniString("\n") ); - sTT_E_OLD.SearchAndReplaceAll( CUniString("\\t"), CUniString("\t") ); - - String sTT_E_NEW( EditTT_E_NEW.GetText()); - sTT_E_NEW.SearchAndReplaceAll( CUniString("\\n"), CUniString("\n") ); - sTT_E_NEW.SearchAndReplaceAll( CUniString("\\t"), CUniString("\t") ); - - if ( StatementList::WinPtrValid( pTranslateWin ) && pTranslateWin->GetText().CompareTo( sTT_E_NEW ) == COMPARE_EQUAL ) - { // Im ersten schritt nur in der UI zur�ck - pTranslateWin->SetText( sTT_E_OLD ); - } - else - { // Im zweite Schritt auch den eingegebenen Text - EditTT_E_NEW.SetText( FixedTextTT_FT_OLD.GetText() ); - PushButtonTT_PB_RESTORE.Disable(); - } - if ( StatementList::WinPtrValid( pTranslateWin ) ) - MarkShortcutErrors( pTranslateWin->GetWindow( WINDOW_OVERLAP ), sal_True ); - return 0; -} - -IMPL_LINK( TranslateWin, TranslationChanged, Edit*, pEdit ) -{ - (void) pEdit; /* avoid warning about unused parameter */ - PushButtonTT_PB_RESTORE.Enable(); - InplaceTimer.Start(); - return 0; -} - -IMPL_LINK( TranslateWin, ShowInplace, Timer*, EMPTYARG ) -{ - PushButtonTT_PB_RESTORE.Enable(); - if ( StatementList::WinPtrValid( pTranslateWin ) ) - { - String sTT_E_NEW( EditTT_E_NEW.GetText()); - // alle CRs UnQuoten - sTT_E_NEW.SearchAndReplaceAll( CUniString("\\n"), CUniString("\n") ); - // alle TABSs UnQuoten - sTT_E_NEW.SearchAndReplaceAll( CUniString("\\t"), CUniString("\t") ); - pTranslateWin->SetText( sTT_E_NEW ); - - MarkShortcutErrors( pTranslateWin->GetWindow( WINDOW_OVERLAP ), sal_True ); - } - return 0; -} - -long TranslateWin::VCLEventHook( NotifyEvent& rEvt ) -{ - if ( EVENT_MOUSEMOVE == rEvt.GetType() ) - { - if ( bSelecting ) - { - const MouseEvent *pMEvt = rEvt.GetMouseEvent(); - Old = Act; - Act = rEvt.GetWindow(); - - if ( Act ) - { - Window *pWin = Act; - sal_uInt16 i; - for ( i = 0 ; i < Act->GetChildCount() ; i++ ) - { - pWin = Act->GetChild(i); - Rectangle aWinPosSize( pWin->GetPosPixel(), pWin->GetSizePixel() ); - - if ( ( pWin->IsMouseTransparent() || !pWin->IsEnabled() ) && aWinPosSize.IsInside( pMEvt->GetPosPixel() ) ) - { - Act = pWin; - break; - } - } - } - - if ( !StatementList::WinPtrValid ( Old ) ) - Old = NULL; - - if ( Act != Old ) - { - if ( Old ) - { - Window *pWin; - if ( Old->IsMouseTransparent() && Old->GET_REAL_PARENT() ) - pWin = Old->GET_REAL_PARENT(); - else - pWin = Old; - RESET_WIN(pWin); - } - if ( Act ) - { - SET_WIN(Act); - FixedTextTT_FT_OLD.SetText( Act->GetText() ); - } - else - FixedTextTT_FT_OLD.SetText( String() ); - } - else if ( Act ) - { - } - } - else - { - if ( Act ) - { - if ( Act->IsMouseTransparent() && Act->GET_REAL_PARENT() ) - Act = Act->GET_REAL_PARENT(); - RESET_WIN(Act); - Act = NULL; - } - } - } - else if ( EVENT_MOUSEBUTTONUP == rEvt.GetType() ) - { - if ( bSelecting ) - { - pTranslateWin = Act; - if ( pTranslateWin ) - { - MarkShortcutErrors( pTranslateWin->GetWindow( WINDOW_OVERLAP ), sal_True ); - // alle CRs quoten (NF) - String sTT_E_NEW( pTranslateWin->GetText()); - sTT_E_NEW.SearchAndReplaceAll( CUniString("\n"), CUniString("\\n") ); - // alle TABSs quoten () - sTT_E_NEW.SearchAndReplaceAll( CUniString("\t"), CUniString("\\t") ); - - FixedTextTT_FT_OLD.SetText( sTT_E_NEW ); - EditTT_E_NEW.SetText( sTT_E_NEW ); - EditTT_E_NEW.Enable(); - EditTT_E_NEW.GrabFocus(); - EditTT_E_COMMENT.SetText( String() ); - EditTT_E_COMMENT.Enable(); - PushButtonTT_PB_ACCEPT.Enable(); - } - bSelecting = sal_False; - } - } - - return 0; -} - -#define FDS_ACTION_COLLECT 1 -#define FDS_ACTION_MARK 2 -#define FDS_ACTION_UNMARK 3 - -class FindShortcutErrors: public Search -{ - String aShortcuts,aDoubleShortcuts; - sal_uInt16 nAction; -public: - FindShortcutErrors(); - virtual sal_Bool IsWinOK( Window *pWin ); - void SetAction( sal_uInt16 nA ); - String GetDoubleShortcuts() { return aDoubleShortcuts; } -}; - -FindShortcutErrors::FindShortcutErrors() -: Search( SEARCH_NOOVERLAP | SEARCH_NO_TOPLEVEL_WIN ) -{ - SetAction( FDS_ACTION_COLLECT ); // Wir fange immer mit sammeln an, ODER?? -} - -void FindShortcutErrors::SetAction( sal_uInt16 nA ) -{ - nAction = nA; - if ( FDS_ACTION_COLLECT == nAction ) - { - aShortcuts = UniString(); - aDoubleShortcuts = UniString(); - } -} - -sal_Bool FindShortcutErrors::IsWinOK( Window *pWin ) -{ - if ( pWin->IsReallyVisible() ) - { - String aText = pWin->GetText(); - xub_StrLen nPos = aText.Search('~'); - String aShortcut; - sal_Bool bHasAccel = sal_False; - if ( nPos != STRING_NOTFOUND ) - { - aShortcut = aText.Copy( nPos+1, 1 ); - aShortcut.ToLowerAscii(); - bHasAccel = aShortcut.Len() == 1; - } - - switch ( nAction ) - { - case FDS_ACTION_COLLECT: - { - if ( aShortcuts.Search( aShortcut ) != STRING_NOTFOUND ) - aDoubleShortcuts += aShortcut; - else - aShortcuts += aShortcut; - } - break; - case FDS_ACTION_MARK: - { - sal_Bool bMissing = sal_False; - if ( !bHasAccel && aText.Len() ) // should there be an accelarator defined - { - - Window* pChild; - pChild = pWin->GetWindow( WINDOW_CLIENT ); - - if ( (pChild->GetType() == WINDOW_RADIOBUTTON) || - (pChild->GetType() == WINDOW_IMAGERADIOBUTTON) || - (pChild->GetType() == WINDOW_CHECKBOX) || - (pChild->GetType() == WINDOW_TRISTATEBOX) || - (pChild->GetType() == WINDOW_PUSHBUTTON) ) - { - if ( !pChild->GetText().EqualsAscii( "..." ) ) - bMissing = sal_True; - } - - if ( pChild->GetType() == WINDOW_FIXEDTEXT ) - { - Window* pTempChild = pWin->GetWindow( WINDOW_NEXT ); - if ( pTempChild ) - pTempChild = pTempChild->GetWindow( WINDOW_CLIENT ); - - if ( pTempChild && pChild->GetText().Len() ) - { - if ( (pTempChild->GetType() == WINDOW_EDIT) || - (pTempChild->GetType() == WINDOW_MULTILINEEDIT) || - (pTempChild->GetType() == WINDOW_SPINFIELD) || - (pTempChild->GetType() == WINDOW_PATTERNFIELD) || - (pTempChild->GetType() == WINDOW_NUMERICFIELD) || - (pTempChild->GetType() == WINDOW_METRICFIELD) || - (pTempChild->GetType() == WINDOW_CURRENCYFIELD) || - (pTempChild->GetType() == WINDOW_DATEFIELD) || - (pTempChild->GetType() == WINDOW_TIMEFIELD) || - (pTempChild->GetType() == WINDOW_LISTBOX) || - (pTempChild->GetType() == WINDOW_MULTILISTBOX) || - (pTempChild->GetType() == WINDOW_COMBOBOX) || - (pTempChild->GetType() == WINDOW_PATTERNBOX) || - (pTempChild->GetType() == WINDOW_NUMERICBOX) || - (pTempChild->GetType() == WINDOW_METRICBOX) || - (pTempChild->GetType() == WINDOW_CURRENCYBOX) || - (pTempChild->GetType() == WINDOW_DATEBOX) || - (pTempChild->GetType() == WINDOW_TIMEBOX) ) - { - bMissing = sal_True; - } - } - } - } - - if ( bHasAccel && aDoubleShortcuts.Search( aShortcut ) != STRING_NOTFOUND ) - { - if ( pWin->GetType() == WINDOW_GROUPBOX ) - pWin->SetControlForeground( Color( COL_LIGHTRED ) ); - else - { - pWin->SetControlBackground(); - Color aCol(COL_GRAY); - aCol.SetRed( 0xff ); - pWin->SetControlBackground( aCol ); - } - } - else if ( bMissing ) - { - pWin->SetControlBackground(); - Color aCol(COL_GRAY); - aCol.SetRed( 0xff ); - aCol.SetGreen( 0xff ); - pWin->SetControlBackground( aCol ); - } - else - { - pWin->SetControlForeground(); - pWin->SetControlBackground(); - } - } - break; - case FDS_ACTION_UNMARK: - { - pWin->SetControlForeground(); - pWin->SetControlBackground(); - } - break; - } - } - else - if ( FDS_ACTION_MARK == nAction || FDS_ACTION_UNMARK == nAction ) - { - pWin->SetControlForeground(); - pWin->SetControlBackground(); - } - - return sal_False; -} - -String TranslateWin::MarkShortcutErrors( Window* pBase, sal_Bool bMark ) -{ - if ( pBase ) - { - FindShortcutErrors aFinder; - if ( bMark ) - { - StatementList::SearchAllWin( pBase, aFinder, sal_True ); // collect Shortcuts first - aFinder.SetAction( FDS_ACTION_MARK ); - } - else - aFinder.SetAction( FDS_ACTION_UNMARK ); - StatementList::SearchAllWin( pBase, aFinder, sal_True ); - return aFinder.GetDoubleShortcuts(); - } - return UniString(); -} - -void TranslateWin::EnableTranslation() -{ - PushButtonTT_PB_SELECT.Enable(); - PushButtonTT_PB_NEXT.Enable(); - bAvailable = sal_False; - bNext = sal_False; -} - -void StatementCommand::Translate() -{ - // Es wurde eine initale UniqueId mitgegeben. Dann nur die dopelten Shortcuts liefern - if( (nParams & PARAM_STR_1) && nLNr1_and_Pointer.nLNr1 ) - { - String aDouble; - Window *pWin = SearchTree( Str2Id( aString1 ) ,sal_False ); - if ( pWin ) - { - pWin = pWin->GetWindow( WINDOW_OVERLAP ); - aDouble = TranslateWin::MarkShortcutErrors( pWin, sal_True ); - } - pRet->GenReturn ( RET_Value, nMethodId, aDouble ); - return; - } - - if ( !GetTTSettings()->pTranslateWin ) - { - GetTTSettings()->pTranslateWin = new TranslateWin; - GetTTSettings()->bToTop = sal_True; - } - - GetTTSettings()->pTranslateWin->Show(); - if ( GetTTSettings()->bToTop ) - { - GetTTSettings()->pTranslateWin->ToTop(); - GetTTSettings()->bToTop = sal_False; - } - - GetTTSettings()->pTranslateWin->GetWindow( WINDOW_OVERLAP )->EnableInput( sal_True, sal_True ); - - if ( GetTTSettings()->pTranslateWin->IsTranslationAvailable() ) - { - String aTranslation; - Window* pTranslationWindow = GetTTSettings()->pTranslateWin->GetTranslationWindow(); - - DBG_ASSERT( pTranslationWindow, "Kein Translation Window" ); - - if ( WinPtrValid( pTranslationWindow ) ) - { - if ( pTranslationWindow->GetType() == WINDOW_BORDERWINDOW && pTranslationWindow->GetWindow( WINDOW_CLIENT ) ) - { - Window* pNew = pTranslationWindow->GetWindow( WINDOW_CLIENT ); - // Bei Dockingwindoes das kanze Geraffel von Docking Floating �berspringen - while ( IsDialog( pNew ) && !pNew->GetUniqueOrHelpId().getLength() && pNew->GetChildCount() == 1 ) - pNew = pNew->GetChild( 0 ); - pTranslationWindow = pNew; - } - - aTranslation = CUniString("0;"); - - aTranslation += Id2Str( pTranslationWindow->GetUniqueOrHelpId() ); - aTranslation += ';'; - - aTranslation += TypeString( pTranslationWindow->GetType() ); - aTranslation += ';'; - - Window* pParentDialog = pTranslationWindow; - while ( pParentDialog && !IsDialog( pParentDialog ) ) - { - pParentDialog = pParentDialog->GET_REAL_PARENT(); - } - - if ( pParentDialog ) - { - aTranslation += Id2Str(pParentDialog->GetUniqueOrHelpId()); - aTranslation += ';'; - aTranslation += TypeString( pParentDialog->GetType() ); - } - else - aTranslation.AppendAscii( "0;" ); // Zahl + leerer String - aTranslation += ';'; - - aTranslation += '\"'; - aTranslation += GetTTSettings()->pTranslateWin->GetOriginalText(); - aTranslation += '\"'; - - aTranslation += ';'; - - aTranslation += '\"'; - aTranslation += GetTTSettings()->pTranslateWin->GetTranslationText(); - aTranslation += '\"'; - - aTranslation += ';'; - - aTranslation += '\"'; - aTranslation += GetTTSettings()->pTranslateWin->GetComment(); - aTranslation += '\"'; - - // alle CRs quoten (NF) - aTranslation.SearchAndReplaceAll( CUniString("\n"), CUniString("\\n") ); - // alle TABSs quoten () - aTranslation.SearchAndReplaceAll( CUniString("\t"), CUniString("\\t") ); - - pRet->GenReturn ( RET_Value, nMethodId, aTranslation ); - GetTTSettings()->pTranslateWin->EnableTranslation(); - GetTTSettings()->bToTop = sal_True; - } - else - { - pRet->GenReturn ( RET_Value, nMethodId, String() ); - GetTTSettings()->pTranslateWin->EnableTranslation(); - ErrorBox err( GetTTSettings()->pTranslateWin, TTProperties::GetSvtResId( TT_NO_CONTROL )); - err.Execute(); - GetTTSettings()->bToTop = sal_True; - } - - } - else if ( GetTTSettings()->pTranslateWin->IsNextDialog() ) - { - pRet->GenReturn ( RET_Value, nMethodId, CUniString("1") ); - GetTTSettings()->pTranslateWin->ResetNextDialog(); - GetTTSettings()->pTranslateWin->LoseFocus(); - GetTTSettings()->bToTop = sal_True; - } - else - { - GetTTSettings()->pTranslateWin->EnableTranslation(); - pRet->GenReturn ( RET_Value, nMethodId, String() ); - } -} - -Window* StatementCommand::GetNextOverlap( Window* pBase ) -{ // Findet irgendwelche Overlap-Fenster, die schlie�bar aussehen - // Eventuell mu� noch die Auswahl verfeinert werden. - - if ( pBase->GetType() != WINDOW_BORDERWINDOW ) - pBase = pBase->GetWindow( WINDOW_OVERLAP ); - - Window *pControl = NULL; - if ( pBase->GetWindow( WINDOW_FIRSTOVERLAP ) ) - { - pControl = GetNextOverlap( pBase->GetWindow( WINDOW_FIRSTOVERLAP ) ); - } - - if ( !pControl && pBase->GetWindow( WINDOW_NEXT ) ) - { - pControl = GetNextOverlap( pBase->GetWindow( WINDOW_NEXT ) ); - } - - if ( !pControl ) - { - Window *pTest = pBase->GetWindow( WINDOW_CLIENT ); - if ( IsAccessable (pTest) - && pTest->IsEnabled() - && pTest->IsVisible() - && ((pTest->GetStyle() & WB_CLOSEABLE ) || (pBase->GetStyle() & WB_CLOSEABLE )) ) - return pTest; - else - return NULL; - } - else - return pControl; -} - -Window* StatementCommand::GetNextRecoverWin() -{ - // �ber die TopLevelWindows der App iterieren - Window* pBase = Application::GetFirstTopLevelWindow(); - Window *pControl = NULL; - Window* pMyFirstDocFrame = NULL; - while ( pBase ) - { - // zuerst weitere Fenster auf dem Fenster suchen und schliessen - pControl = GetNextOverlap( pBase ); - if ( pControl && pControl->GetType() == WINDOW_HELPTEXTWINDOW ) - {} // skip it - else - { - if ( pControl && pControl->IsVisible() && !IsFirstDocFrame( pControl ) && !IsIMEWin( pControl ) ) - { - Window* pTB = pControl->GetChild( 0 ); - if ( pControl->GetChildCount() == 1 && pTB->GetType() == WINDOW_TOOLBOX ) - ; // do not act on floating toolboxes #i38796 - else - return pControl; - } - - // dann das Fenster selbst Schliessen - // erstes DocWin �berspringen - // Assumption that Doc Windows are Borderwindows and ButtonDialog and such are not - if ( pBase->IsVisible() && !IsFirstDocFrame( pBase ) && pBase->GetType() != WINDOW_BORDERWINDOW && !IsIMEWin( pBase ) ) - return pBase; - - if ( !pMyFirstDocFrame && IsFirstDocFrame( pBase ) ) - pMyFirstDocFrame = pBase; - } - - pBase = Application::GetNextTopLevelWindow( pBase ); - } - // close the FirstDocFrame last, It will not be closed, but the Document inside will be closed. - if ( IsDocWin( pMyFirstDocFrame ) ) - return pMyFirstDocFrame; - - return NULL; -} - -sal_Bool StatementCommand::Execute() -{ - if ( IsError ) - { -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Skipping Command: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); - m_pDbgWin->AddText( "\n" ); - #endif - - Advance(); - delete this; - return sal_True; - } - - InitProfile(); -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Executing Command: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); - m_pDbgWin->AddText( "\n" ); -#endif - - - - - -#if OSL_DEBUG_LEVEL > 1 -#define REPORT_WIN_CLOSED(pControl, aInfo) \ - _REPORT_WIN_CLOSED(pControl, aInfo) \ - m_pDbgWin->AddText( aInfo.AppendAscii(" \"").Append( pControl->GetText() ).AppendAscii("\" geschlossen, RType = ").Append( TypeString(pControl->GetType()) ).AppendAscii(", UId = ").Append( UIdString( pControl->GetUniqueOrHelpId() ) ) ); -#else -#define REPORT_WIN_CLOSED(pControl, aInfo) _REPORT_WIN_CLOSED(pControl, aInfo) -#endif - -#define REPORT_WIN_CLOSEDc(pControl, aInfo ) \ - REPORT_WIN_CLOSED(pControl, CUniString(aInfo) ) - -#define _REPORT_WIN_CLOSED(pControl, aInfo) \ - if ( aString1.Len() ) \ - aString1 += '\n'; \ - aString1 += aInfo; \ - aString1.AppendAscii(" \""); \ - aString1 += pControl->GetText(); \ - aString1.AppendAscii("\" geschlossen, RType = ");\ - aString1 += TypeString(pControl->GetType()); \ - aString1.AppendAscii(", UId = "); \ - aString1 += UIdString(pControl->GetUniqueOrHelpId()); - - - switch ( nMethodId ) - { - case RC_AppDelay: - if ( !bBool1 ) - { - nLNr1_and_Pointer.nLNr1 = Time().GetTime() + nNr1/10; - bBool1 = sal_True; - } - if ( Time().GetTime() < sal_Int32(nLNr1_and_Pointer.nLNr1) ) // Aktuelle Zeit kleiner Endzeit - return sal_False; - break; - case RC_DisplayHid: - if ( DisplayHID() ) - return sal_False; - break; - case RC_ResetApplication: - { - if ( !bBool1 ) - { - nRetryCount = 150; // das sollte reichen. - bBool1 = sal_True; // Nur beim ersten mal! - nNr1 = 1; // Welcher Button ist dran? - nLNr1_and_Pointer.pWindow = 0; // Speichern des AppWin - aString1 = UniString(); // Liste der geschlossenen Fenster - - // So da� nacher auch wieder alles auf Default steht - nUseBindings = 0; - bCatchGPF = sal_True; - bUsePostEvents = sal_True; - - aSubMenuId1 = 0; - aSubMenuId2 = 0; - aSubMenuId3 = 0; - pMenuWindow = NULL; - } - if ( !nRetryCount ) - ReportError( GEN_RES_STR0( S_RESETAPPLICATION_FAILED_COMPLEX ) ); - - Window *pControl = GetNextRecoverWin(); - - if ( pControl ) - { - bBool2 = sal_False; // flag for wait when all windows are closed - pControl->GrabFocus(); - - if ( pControl->GetType() != WINDOW_DOCKINGWINDOW - && pControl->GetType() != WINDOW_FLOATINGWINDOW - && pControl->GetType() != WINDOW_MODELESSDIALOG - && pControl->GetType() != WINDOW_WORKWINDOW - && pControl->GetType() != WINDOW_TOOLBOX - && pControl->GetType() != WINDOW_BORDERWINDOW - && nRetryCount-- ) - { - short nRT = ImpGetRType( pControl ); - - if ( nRT == C_TabControl && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) - { // Bei Tabcontrol den zugeh�rigen Tabdialog nehmen - pControl = pControl->GET_REAL_PARENT(); - nRT = ImpGetRType( pControl ); - } - - switch( nRT ) - { - case C_ModalDlg: - case C_Dialog: - case C_TabDlg: - REPORT_WIN_CLOSEDc(pControl, "Dialog"); - SET_WINP_CLOSING(pControl); - ((SystemWindow*)pControl)->Close(); - break; - case C_WorkWin: - break; - case C_MessBox: - case C_InfoBox: - case C_WarningBox: - case C_ErrorBox: - case C_QueryBox: - case C_ButtonDialog: - { - ButtonDialog* pBD = (ButtonDialog*)pControl; - // nNr1 >= 10 bedeutet (Custom)-Buttons durchgehen - if ( nNr1 >= 10+pBD->GetButtonCount() ) nNr1 = 1; - switch( nNr1 ) - { - case 5: - if ( pBD->GetPushButton( BUTTONID_OK ) ) - { - REPORT_WIN_CLOSEDc(pControl, "Message Box (OK)"); - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_OK); - } - nNr1 = 10; // Nochmal alle Buttons der Reihe nach - break; - case 4: - if ( pBD->GetPushButton( BUTTONID_CANCEL ) ) - { - REPORT_WIN_CLOSEDc(pControl, "Message Box (Cancel)"); - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_CANCEL); - } - nNr1++; - break; - case 3: - if ( pBD->GetPushButton( BUTTONID_YES ) ) - { - REPORT_WIN_CLOSEDc(pControl, "Message Box (Yes)"); - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_YES); - } - nNr1++; - break; - case 2: - case 1: - if ( pBD->GetPushButton( BUTTONID_NO ) ) - { - REPORT_WIN_CLOSEDc(pControl, "Message Box (No)"); - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_NO); - } - nNr1++; - break; - default: - { - sal_uInt16 nID = pBD->GetButtonId( nNr1-10 ); - if ( nID != BUTTONID_HELP ) - { - REPORT_WIN_CLOSED(pControl, CUniString("Message Box (").Append( UniString::CreateFromInt32(nID) ).AppendAscii(")")); - SET_WINP_CLOSING(pControl); - pBD->EndDialog(nID); - } - nNr1++; - } - } - break; - } - default: - OSL_FAIL( "Unknown Windowtype" ); - REPORT_WIN_CLOSEDc(pControl, "Unknown Windowtype"); - ReportError( GEN_RES_STR0( S_RESETAPPLICATION_FAILED_UNKNOWN ), pControl->GetType() ); - #if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( " Unbekannter Objekttyp aus UId" ); - #endif - break; - } - return sal_False; - } - else - { - if ( (pControl->GetType() == WINDOW_DOCKINGWINDOW || pControl->GetType() == WINDOW_TOOLBOX) && nRetryCount-- ) - { - if ( (((DockingWindow*)pControl)->GetStyle() | ((DockingWindow*)pControl)->GetFloatStyle()) & WB_CLOSEABLE ) - { - REPORT_WIN_CLOSED(pControl, TypeString(pControl->GetType())); - SET_WINP_CLOSING(pControl); - ((DockingWindow*)pControl)->Close(); - - // Eigentlich nur bei TaskWindows! Hoffen wir mal, da� keine anderen DockingWindows dazwischen hauen. - if ( nLNr1_and_Pointer.pWindow != pControl ) - nNr1 = 1; // Zum durchprobieren der Buttons beim Schlie�en - nLNr1_and_Pointer.pWindow = pControl; - - return sal_False; - } - } - if ( nRetryCount-- - && ( (pControl->GetType() == WINDOW_FLOATINGWINDOW) - || (pControl->GetType() == WINDOW_MODELESSDIALOG) - || (pControl->GetType() == WINDOW_WORKWINDOW) - || (pControl->GetType() == WINDOW_BORDERWINDOW) ) ) - { - // Special handling for last Document; do not close the Frame, only the Document - if ( GetDocWinCount() == 1 && IsDocFrame( pControl ) ) - { - if ( IsDocWin( pControl ) ) - { - if ( GetDocFrameMenuBar( pControl ) ) - { - MenuBar* pMenu = GetDocFrameMenuBar( pControl ); - if ( pMenu->HasCloser() ) - { - REPORT_WIN_CLOSED( pControl, TypeString(pControl->GetType())); - SET_WINP_CLOSING(pControl); - - pMenu->GetCloserHdl().Call( pMenu ); - - // nur bei TaskWindows! - if ( nLNr1_and_Pointer.pWindow != pControl ) - nNr1 = 1; // Zum durchprobieren der Buttons beim Schlie�en - nLNr1_and_Pointer.pWindow = pControl; - - return sal_False; - } - } - } - } - else - { - REPORT_WIN_CLOSED( pControl, TypeString(pControl->GetType())); - SET_WINP_CLOSING(pControl); - ((SystemWindow*)pControl)->Close(); - - // Eigentlich nur bei TaskWindows! - if ( nLNr1_and_Pointer.pWindow != pControl ) - nNr1 = 1; // Zum durchprobieren der Buttons beim Schlie�en - nLNr1_and_Pointer.pWindow = pControl; - - return sal_False; - } - } - } - } - // wait for some time if more windows show up - // E.g.: Floating toolbars on a Task which was hidden by another Task before - if ( !bBool2 ) - { - nLNr1_and_Pointer.nLNr1 = Time().GetTime() + 100; // 100 = 1 Second - bBool2 = sal_True; - } - if ( Time().GetTime() < sal_Int32(nLNr1_and_Pointer.nLNr1) ) // Aktuelle Zeit kleiner Endzeit - return sal_False; - else - pRet->GenReturn ( RET_Value, nMethodId, aString1); - } - break; - case RC_WaitSlot: - { - if ( ! (nParams & PARAM_UINT16_1) ) - nNr1 = 1000; // defaults to 1000 = 1 Sec. - if ( !bBool1 ) - { - nLNr1_and_Pointer.nLNr1 = Time().GetTime() + nNr1/10; - bBool1 = sal_True; - } - - if ( !bIsSlotInExecute ) - pRet->GenReturn ( RET_Value, nMethodId, comm_UINT16(CONST_WSFinished) ); - else - { - if ( Time().GetTime() < sal_Int32(nLNr1_and_Pointer.nLNr1) ) // Aktuelle Zeit kleiner Endzeit - return sal_False; - pRet->GenReturn ( RET_Value, nMethodId, comm_UINT16(CONST_WSTimeout) ); - } - } - break; - } - - - Advance(); - - - switch ( nMethodId ) - { - case RC_AppDelay: // Diese Befehle werden anderswo behandelt - case RC_DisplayHid: - case RC_ResetApplication: - case RC_WaitSlot: - - case RC_AppAbort: // Sofortiges L�schen aller Befehle - break; - case RC_Assert: - { - ByteString aAssertion( "Diese Assertion wurde vom Testtool per Befehl ausgel�st" ); - aAssertion = ByteString( String( aAssertion, RTL_TEXTENCODING_MS_1252 ), RTL_TEXTENCODING_UTF8 ); - DBG_ASSERT( !aString1.Len(), ByteString( aString1, RTL_TEXTENCODING_UTF8 ).GetBuffer() ); - DBG_ASSERT( aString1.Len(), aAssertion.GetBuffer() ); - OSL_ENSURE( !aString1.Len(), ByteString( aString1, RTL_TEXTENCODING_UTF8 ).GetBuffer() ); - OSL_ENSURE( aString1.Len(), aAssertion.GetBuffer() ); - } - break; - case RC_CaptureAssertions: -#ifdef DBG_UTIL - if( !(nParams & PARAM_BOOL_1) || bBool1 ) - { - DBG_INSTOUTERROR( DBG_OUT_TESTTOOL ); - osl_setDebugMessageFunc( osl_TestToolDebugPrint ); - } - else - { - DBG_INSTOUTERROR( DBG_OUT_MSGBOX ); - osl_setDebugMessageFunc( pOriginal_osl_DebugMessageFunc ); - } -#endif - break; - case RC_Translate: - Translate(); - break; - case RC_ApplicationBusy: - { - sal_Bool bWait = sal_False; - ReportError( GEN_RES_STR0( S_NO_ACTIVE_WINDOW ) ); - pRet->GenReturn ( RET_Value, nMethodId, bWait ); - break; - } - case RC_GetClipboard: - { - ::rtl::OUString aTemp; - ::svt::OStringTransfer::PasteString( aTemp, GetFirstDocFrame() ); - pRet->GenReturn ( RET_Value, nMethodId, String( aTemp ) ); - } - break; - case RC_SetClipboard: - ::svt::OStringTransfer::CopyString(aString1,GetFirstDocFrame()); - break; - case RC_WinTree: - pRet->GenReturn ( RET_Value, nMethodId, Tree( NULL, 0)); - break; - #if OSL_DEBUG_LEVEL > 1 - case RC_NoDebug: - m_pDbgWin->bQuiet = sal_True; - m_pDbgWin->Hide(); - m_pDbgWin->Clear(); - break; - case RC_Debug: - m_pDbgWin->bQuiet = sal_False; - m_pDbgWin->Show(); - break; - #endif - case RC_GPF: - ((TabControl*)NULL)->SetCurPageId( 12345 ); - break; - case RC_GetNextCloseWindow: - { - Window *pWin = GetActive( WINDOW_BASE ); // WINDOW_ANYTYPE - if ( !pWin ) - ReportError( GEN_RES_STR0( S_NO_ACTIVE_WINDOW ) ); - else if ( !IsDialog(pWin) ) - ReportError( GEN_RES_STR0( S_NO_DIALOG_IN_GETACTIVE ) ); - else - { - pRet->GenReturn( RET_Value, nMethodId, Id2Str(pWin->GetUniqueOrHelpId()) ); - } - } - break; - case RC_UseBindings: - if( !(nParams & PARAM_BOOL_1) || bBool1 ) - nUseBindings = SFX_USE_BINDINGS; - else - nUseBindings = 0; - break; - case RC_Profile: - // Bei folgenden Parametern passiert folgendes: - // ein boolean=false Alles Profiling stoppen (Ergebnisse liefern) - // ein boolean=true, 1-4 ints Einteilung der Zeiten in K�stchen - // kein! boolean keine ints loggen jeden Befehls - // kein! boolean 1 int loggen alle int Millisekunden - // ein String wird in das Logfile �bernommen(sonst passiert nichts) - if( !(nParams & PARAM_BOOL_1) || bBool1 ) - { - if ( !pProfiler ) - { - pProfiler = new TTProfiler; - InitProfile(); - } - - if( !(nParams & PARAM_BOOL_1) && (nParams & PARAM_UINT16_1) ) - { // Autoprofiling: Profile nNr - if ( pProfiler->IsProfilingPerCommand() ) - { - pProfiler->StopProfilingPerCommand(); - } - pProfiler->StartAutoProfiling( nNr1 ); - - // Der Header ist abh�ngig vom Modus - pRet->GenReturn( RET_ProfileInfo, 0, pProfiler->GetProfileHeader() ); - } - else if ( nParams & PARAM_UINT16_1 ) - { // Partitioning initialisieren: Profile true [,nNr][,nNr][,nNr][,nNr] - comm_UINT32 nAnzahl=0; - if ( nParams & PARAM_UINT16_1 ) { nAnzahl++; }; - if ( nParams & PARAM_UINT16_2 ) { nAnzahl++; }; - if ( nParams & PARAM_UINT16_3 ) { nAnzahl++; }; - if ( nParams & PARAM_UINT16_4 ) { nAnzahl++; }; - - // Hier werden die Parameter ans Testtool zur�ck �bertragen. - // Das ist zwar etwas eigenartig, aber ansonsten m�sste man im Testtool - // die einfache Struktur der Remotebefehle aufbrechen. - pRet->GenReturn( RET_ProfileInfo, S_ProfileReset, nAnzahl ); - - // Und die einzelnen Grenzen - if ( nParams & PARAM_UINT16_1 ) { pRet->GenReturn( RET_ProfileInfo, S_ProfileBorder1, (comm_UINT32)nNr1 ); }; - if ( nParams & PARAM_UINT16_2 ) { pRet->GenReturn( RET_ProfileInfo, S_ProfileBorder2, (comm_UINT32)nNr2 ); }; - if ( nParams & PARAM_UINT16_3 ) { pRet->GenReturn( RET_ProfileInfo, S_ProfileBorder3, (comm_UINT32)nNr3 ); }; - if ( nParams & PARAM_UINT16_4 ) { pRet->GenReturn( RET_ProfileInfo, S_ProfileBorder4, (comm_UINT32)nNr4 ); }; - - pProfiler->StartPartitioning(); - } - else if( nParams == PARAM_STR_1 ) // Genau ein String! - { // Nur einen String ins Profiling aufnehmen - aString1 += '\n'; - pRet->GenReturn( RET_ProfileInfo, 0, aString1 ); - } - else - { // Normales Profiling je Kommando: profile - if ( pProfiler->IsAutoProfiling() ) - { - pRet->GenReturn( RET_ProfileInfo, 0, pProfiler->GetAutoProfiling() ); - pProfiler->StopAutoProfiling(); - } - pProfiler->StartProfilingPerCommand(); - - // Der Header ist abh�ngig vom Modus - pRet->GenReturn( RET_ProfileInfo, 0, pProfiler->GetProfileHeader() ); - } - } - else // Profiling wieder ausschalten: Profile false - if ( pProfiler ) - { - if ( pProfiler->IsProfilingPerCommand() ) - pProfiler->StopProfilingPerCommand(); - - if ( pProfiler->IsAutoProfiling() ) - { - pRet->GenReturn( RET_ProfileInfo, 0, pProfiler->GetAutoProfiling() ); - pProfiler->StopAutoProfiling(); - } - - if ( pProfiler->IsPartitioning() ) - { - pRet->GenReturn( RET_ProfileInfo, S_ProfileDump, (comm_UINT32)0 ); - pProfiler->StopPartitioning(); - } - - delete pProfiler; - pProfiler = NULL; - } - break; - case RC_MenuGetItemCount: - case RC_MenuGetItemId: - case RC_MenuGetItemPos: - case RC_MenuIsSeperator: - case RC_MenuIsItemChecked: - case RC_MenuIsItemEnabled: - case RC_MenuGetItemText: - case RC_MenuGetItemCommand: - case RC_MenuHasSubMenu: - case RC_MenuSelect: - { - PopupMenu *pPopup = NULL; - MenuBar *pMenuBar = NULL; - Menu *pMenu; - - sal_uInt16 nErr = GetCurrentMenues( pPopup, pMenuBar, pMenu ); - - if ( !pMenu ) - { - if ( nErr == 1 ) - ReportError( GEN_RES_STR0( S_NO_POPUP ) ); - else - ReportError( GEN_RES_STR0( S_NO_SUBMENU ) ); - break; - } - - sal_uInt16 nItemCount = 0; - switch ( nMethodId ) - { - case RC_MenuGetItemCount: - case RC_MenuGetItemId: - case RC_MenuIsSeperator: - { - nItemCount = pMenu->GetItemCount(); - if ( pMenu->GetMenuFlags() & MENU_FLAG_HIDEDISABLEDENTRIES ) - { // jep, we have to adjust the count - sal_Bool bLastWasSeperator = sal_True; // sal_True for Separator at the top - for ( sal_uInt16 i = 0 ; i < pMenu->GetItemCount() ; i++ ) - { - if ( !pMenu->IsItemEnabled( pMenu->GetItemId( i ) ) ) - nItemCount--; - else - { - if ( pMenu->GetItemType( i ) == MENUITEM_SEPARATOR && bLastWasSeperator ) - nItemCount--; - bLastWasSeperator = pMenu->GetItemType( i ) == MENUITEM_SEPARATOR; - } - } - if ( bLastWasSeperator ) // Separator at bottom - nItemCount--; - } - } - break; - } - - // for certain methods calculate the physical index (reinserting the hidden entries) - sal_uInt16 nPhysicalIndex = 0; - switch ( nMethodId ) - { - case RC_MenuGetItemId: - case RC_MenuIsSeperator: - { - nPhysicalIndex = nNr1; - if ( pMenu->GetMenuFlags() & MENU_FLAG_HIDEDISABLEDENTRIES ) - { // jep, we have to adjust the position - sal_Bool bLastWasSeperator = sal_True; // sal_True for Separator at the top - sal_uInt16 nVisibleCount = 0; - for ( sal_uInt16 i = 0 ; i < pMenu->GetItemCount() && nVisibleCount < nNr1 ; i++ ) - { - if ( pMenu->IsItemEnabled( pMenu->GetItemId( i ) ) - && !( pMenu->GetItemType( i ) == MENUITEM_SEPARATOR && bLastWasSeperator ) ) - { - nVisibleCount++; - bLastWasSeperator = pMenu->GetItemType( i ) == MENUITEM_SEPARATOR; - } - else - nPhysicalIndex++; - } - DBG_ASSERT( nVisibleCount == nNr1, "Adaption of Index failed: nVisibleCount != nNr1" ); - } - } - break; - } - - - - switch ( nMethodId ) - { - case RC_MenuGetItemCount: - { - pRet->GenReturn ( RET_Value, nMethodId, (comm_UINT32)nItemCount ); - } - break; - case RC_MenuGetItemId: - { - if ( ValueOK( rtl::OString(), RcString( nMethodId ),nNr1,nItemCount) ) - pRet->GenReturn ( RET_Value, nMethodId, (comm_UINT32)pMenu->GetItemId(nPhysicalIndex-1) ); - } - break; - case RC_MenuGetItemPos: - { - sal_uInt16 nLogicalPos = pMenu->GetItemPos(nNr1); - if ( MENU_ITEM_NOTFOUND != nLogicalPos && pMenu->GetMenuFlags() & MENU_FLAG_HIDEDISABLEDENTRIES ) - { // jep, we have to adjust the position - if ( !pMenu->IsItemEnabled( nNr1 ) ) - nLogicalPos = MENU_ITEM_NOTFOUND; - else - { - sal_Bool bLastWasSeperator = sal_False; - for ( int i = nLogicalPos ; i >= 0 ; i-- ) - { - if ( !pMenu->IsItemEnabled( pMenu->GetItemId( sal::static_int_cast< sal_uInt16 >(i) ) ) || - ( pMenu->GetItemType( sal::static_int_cast< sal_uInt16 >(i) ) == MENUITEM_SEPARATOR && bLastWasSeperator ) ) - nLogicalPos--; - bLastWasSeperator = pMenu->GetItemType( sal::static_int_cast< sal_uInt16 >(i) ) == MENUITEM_SEPARATOR; - } - } - } - pRet->GenReturn ( RET_Value, nMethodId, (comm_UINT32)(nLogicalPos+1) ); - } - break; - case RC_MenuIsSeperator: - { - if ( ValueOK( rtl::OString(), RcString( nMethodId ),nNr1,nItemCount) ) - pRet->GenReturn ( RET_Value, nMethodId, (comm_BOOL)(pMenu->GetItemType(nPhysicalIndex-1) == MENUITEM_SEPARATOR) ); - } - break; - case RC_MenuIsItemChecked: - { - pRet->GenReturn ( RET_Value, nMethodId, (comm_BOOL)pMenu->IsItemChecked(nNr1) ); - } - break; - case RC_MenuIsItemEnabled: - { - pRet->GenReturn ( RET_Value, nMethodId, (comm_BOOL)pMenu->IsItemEnabled(nNr1) ); - } - break; - case RC_MenuGetItemText: - { - pRet->GenReturn ( RET_Value, nMethodId, (String)pMenu->GetItemText(nNr1) ); - } - break; - case RC_MenuGetItemCommand: - { - pRet->GenReturn ( RET_Value, nMethodId, (String)pMenu->GetItemCommand(nNr1) ); - } - break; - case RC_MenuHasSubMenu: - { - pRet->GenReturn ( RET_Value, nMethodId, (sal_Bool)(pMenu->GetPopupMenu(nNr1) != NULL) ); - } - break; - case RC_MenuSelect: - { - if ( pMenu->GetPopupMenu(nNr1) ) - { - if ( !aSubMenuId1 ) - aSubMenuId1 = nNr1; - else if ( !aSubMenuId2 ) - aSubMenuId2 = nNr1; - else if ( !aSubMenuId3 ) - aSubMenuId3 = nNr1; - - if ( pPopup ) - pPopup->SelectEntry(nNr1); - else - pMenuBar->SelectEntry(nNr1); - } - else - { - if ( pPopup ) - { - pPopup->EndExecute(nNr1); - aSubMenuId1 = 0; - aSubMenuId2 = 0; - aSubMenuId3 = 0; - pMenuWindow = NULL; - } - else - { - pMenuBar->SelectEntry(nNr1); - aSubMenuId1 = 0; - aSubMenuId2 = 0; - aSubMenuId3 = 0; - pMenuWindow = NULL; - } - } - } - break; - } - } - break; - case RC_SetControlType: - { - DirectLog( S_QAError, GEN_RES_STR0( S_DEPRECATED ) ); - } - break; - case RC_Kill: - case RC_RmDir: - case RC_MkDir: - case RC_FileCopy: - case RC_Name: - case RC_Dir: - case RC_FileLen: - case RC_FileDateTime: - { - long nErrorcode = FSYS_ERR_OK; - switch ( nMethodId ) - { - case RC_Kill: - { - DirEntry aFile( aString1 ); - nErrorcode = aFile.GetError(); - if ( FSYS_ERR_OK == nErrorcode && FileStat( aFile ).IsKind( FSYS_KIND_FILE ) ) - nErrorcode = aFile.Kill(); - else - nErrorcode = FSYS_ERR_NOTAFILE; - } - break; - case RC_RmDir: - { - DirEntry aDir( aString1 ); - nErrorcode = aDir.GetError(); - if ( FSYS_ERR_OK == nErrorcode && FileStat( aDir ).IsKind( FSYS_KIND_DIR ) ) - nErrorcode = aDir.Kill(); - else - nErrorcode = FSYS_ERR_NOTADIRECTORY; - } - break; - case RC_MkDir: - { - DirEntry aDir( aString1 ); - nErrorcode = aDir.GetError(); - if ( !nErrorcode && !aDir.MakeDir() ) - nErrorcode = FSYS_ERR_UNKNOWN; - } - break; - case RC_FileCopy: - { - nErrorcode = DirEntry( aString1 ).CopyTo( DirEntry( aString2 ), FSYS_ACTION_COPYFILE ); - } - break; - case RC_Name: - { - nErrorcode = DirEntry( aString1 ).MoveTo( DirEntry( aString2 ) ); - } - break; - case RC_Dir: - { - - String aPath; - sal_uInt16 nDirFlags = 0; -// from basic/source/inc/runtime.hxx -#define Sb_ATTR_NORMAL 0x0000 -#define Sb_ATTR_HIDDEN 0x0002 -#define Sb_ATTR_SYSTEM 0x0004 -#define Sb_ATTR_VOLUME 0x0008 -#define Sb_ATTR_DIRECTORY 0x0010 -#define Sb_ATTR_ARCHIVE 0x0020 - // copied from Basic and adapted basic/source/runtime/methods.cxx Revision 1.54 - if ( (nParams & PARAM_STR_1) ) - { - delete pDir; - pDir = NULL; // wg. Sonderbehandlung Sb_ATTR_VOLUME - DirEntry aEntry( aString1 ); - FileStat aStat( aEntry ); - if(!aStat.GetError() && (aStat.GetKind() & FSYS_KIND_FILE)) - { - // OK, only a filename - // cut off path (VB4) - aPath = aEntry.GetName(); - } - else - { - sal_uInt16 nFlags = 0; - if ( (nParams & PARAM_UINT16_1) ) - nDirFlags = nFlags = nNr1; - else - nDirFlags = nFlags = Sb_ATTR_HIDDEN | Sb_ATTR_SYSTEM | Sb_ATTR_DIRECTORY; - - // Nur diese Bitmaske ist unter Windows erlaubt - // Sb_ATTR_VOLUME wird getrennt gehandelt - if( nDirFlags & Sb_ATTR_VOLUME ) - aPath = aEntry.GetVolume(); - else - { - // Die richtige Auswahl treffen - sal_uInt16 nMode = FSYS_KIND_FILE; - if( nFlags & Sb_ATTR_DIRECTORY ) - nMode |= FSYS_KIND_DIR; - if( nFlags == Sb_ATTR_DIRECTORY ) - nMode = FSYS_KIND_DIR; - pDir = new Dir( aEntry, (DirEntryKind) nMode ); - nErrorcode = pDir->GetError(); - nDirPos = 0; - } - } - } - - if( pDir ) - { - for( ;; ) - { - if( nDirPos >= pDir->Count() ) - { - delete pDir; - pDir = NULL; - aPath.Erase(); - break; - } - DirEntry aNextEntry=(*(pDir))[nDirPos++]; - aPath = aNextEntry.GetName(); - break; - } - } - if ( !nErrorcode ) - { - pRet->GenReturn ( RET_Value, nMethodId, aPath ); - } - - } - break; - case RC_FileLen: - { - DirEntry aFile( aString1 ); - nErrorcode = aFile.GetError(); - if ( FSYS_ERR_OK == nErrorcode ) - { - FileStat aFS( aFile ); - pRet->GenReturn ( RET_Value, nMethodId, static_cast<comm_UINT32>(aFS.GetSize()) ); //GetSize() sal_uLong != comm_UINT32 on 64bit - nErrorcode = aFS.GetError(); - } - } - break; - case RC_FileDateTime: - { - DirEntry aFile( aString1 ); - nErrorcode = aFile.GetError(); - if ( FSYS_ERR_OK == nErrorcode ) - { - FileStat aStat( aFile ); - Time aTime( aStat.TimeModified() ); - Date aDate( aStat.DateModified() ); - nErrorcode = aStat.GetError(); - - double fSerial = (double)( aDate - Date(30,12,1899) ); - long nSeconds = aTime.GetHour(); - nSeconds *= 3600; - nSeconds += aTime.GetMin() * 60; - nSeconds += aTime.GetSec(); - double nDays = ((double)nSeconds) / (double)(24.0*3600.0); - fSerial += nDays; - - SbxValueRef xValue = new SbxValue( SbxDATE ); - xValue->PutDate( fSerial ); - - pRet->GenReturn ( RET_Value, nMethodId, *xValue ); - } - } - break; - } - switch ( nErrorcode ) - { - case FSYS_ERR_OK: - break; - case FSYS_ERR_MISPLACEDCHAR: - { - ReportError( CUniString("MISPLACEDCHAR") ); - } - break; - case FSYS_ERR_INVALIDCHAR: - { - ReportError( CUniString("INVALIDCHAR") ); - } - break; - case FSYS_ERR_NOTEXISTS: - { - ReportError( CUniString("NOTEXISTS") ); - } - break; - case FSYS_ERR_ALREADYEXISTS: - { - ReportError( CUniString("ALREADYEXISTS") ); - } - break; - case FSYS_ERR_NOTADIRECTORY: - { - ReportError( CUniString("NOTADIRECTORY") ); - } - break; - case FSYS_ERR_NOTAFILE: - { - ReportError( CUniString("NOTAFILE") ); - } - break; - case FSYS_ERR_INVALIDDEVICE: - { - ReportError( CUniString("INVALIDDEVICE") ); - } - break; - case FSYS_ERR_ACCESSDENIED: - { - ReportError( CUniString("ACCESSDENIED") ); - } - break; - case FSYS_ERR_LOCKVIOLATION: - { - ReportError( CUniString("LOCKVIOLATION") ); - } - break; - case FSYS_ERR_VOLUMEFULL: - { - ReportError( CUniString("VOLUMEFULL") ); - } - break; - case FSYS_ERR_ISWILDCARD: - { - ReportError( CUniString("ISWILDCARD") ); - } - break; - case FSYS_ERR_NOTSUPPORTED: - { - ReportError( CUniString("NOTSUPPORTED") ); - } - break; - case FSYS_ERR_UNKNOWN: - { - ReportError( CUniString("UNKNOWN") ); - } - break; - default: - { - ReportError( CUniString("Not an FSYS Error") ); - } - } - - } - break; - case RC_TypeKeysDelay: - { - if( (nParams & PARAM_BOOL_1) ) - { - bDoTypeKeysDelay = bBool1; - } - else if( nParams & PARAM_UINT16_1 ) - { - nMinTypeKeysDelay = nNr1; - if( nParams & PARAM_UINT16_2 ) - nMaxTypeKeysDelay = nNr2; - else - nMaxTypeKeysDelay = nMinTypeKeysDelay; - } - else - ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); - } - break; - case RC_GetMouseStyle: - { - Pointer aPointer; - Window *pActualWin = GetMouseWin(); - if ( pActualWin ) - aPointer = pActualWin->GetPointer(); - else - { - ReportError( GEN_RES_STR1( S_POINTER_OUTSIDE_APPWIN, RcString( nMethodId ) ) ); - aPointer = Pointer( POINTER_NULL ); - } - pRet->GenReturn ( RET_Value, nMethodId, (comm_UINT32)aPointer.GetStyle() ); - } - break; - case RC_UnpackStorage: - { - if( (nParams & PARAM_STR_1) ) - { - String aFileName( aString1 ); - DirEntry aDestPath; - if( (nParams & PARAM_STR_2) ) - aDestPath = DirEntry( aString2 ); - else - { - aDestPath = DirEntry( aFileName ); - aDestPath.SetExtension( CUniString( "plaintext" ) ); - } - -#if OSL_DEBUG_LEVEL > 1 - sal_uInt16 nEntries = Dir( aDestPath, FSYS_KIND_FILE | FSYS_KIND_DIR ).Count(); - (void) nEntries; /* avoid warning about unused parameter */ -#endif - // The Count is only larger than 2 is the path is a directory which is not empty - // the Count of 2 results from the "." and ".." directory - if ( Dir( aDestPath, FSYS_KIND_FILE | FSYS_KIND_DIR ).Count() > 2 ) - DirectLog( S_QAError, GEN_RES_STR1( S_DIRECTORY_NOT_EMPTY, aDestPath.GetFull() ) ); - - SotStorageRef xStorage = new SotStorage( aFileName, STREAM_STD_READ ); - if ( xStorage->GetError() ) - ReportError( GEN_RES_STR2(S_UNPACKING_STORAGE_FAILED, aFileName, aDestPath.GetFull()) ); - else - UnpackStorage( xStorage, aDestPath ); - } - else - ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); - } - break; - case RC_CloseSysDialog: - case RC_ExistsSysDialog: - { - if( (nParams & PARAM_UINT16_1) ) - { - Reference < ::com::sun::star::util::XCancellable > xPicker; - switch( nNr1 ) - { - case CONST_FilePicker: - { - xPicker.set( Reference < ::com::sun::star::util::XCancellable >( svt::GetTopMostFilePicker(), UNO_QUERY ) ); - } - break; - case CONST_FolderPicker: - { - xPicker.set( Reference < ::com::sun::star::util::XCancellable >( svt::GetTopMostFolderPicker(), UNO_QUERY ) ); - } - break; - default: - ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); - } - switch( nMethodId ) - { - case RC_CloseSysDialog: - { - if ( xPicker.is() ) - xPicker->cancel(); - else - ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); - } - break; - case RC_ExistsSysDialog: - { - pRet->GenReturn ( RET_Value, nMethodId, (comm_BOOL)xPicker.is() ); - } - break; - default: - ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); - } - } - else - ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); - } - break; - case RC_SAXCheckWellformed: - case RC_SAXReadFile: - - case RC_SAXGetNodeType: - case RC_SAXGetAttributeCount: - case RC_SAXGetAttributeName: - case RC_SAXGetAttributeValue: - case RC_SAXGetChildCount: - case RC_SAXGetElementName: - case RC_SAXGetChars: - - case RC_SAXSeekElement: - case RC_SAXHasElement: - case RC_SAXGetElementPath: - - case RC_SAXRelease: - { - HandleSAXParser(); - } - break; - case RC_RecordMacro: - { - if ( ! (nParams & PARAM_BOOL_1) ) - bBool1 = sal_True; - - MacroRecorder::GetMacroRecorder()->SetActionRecord( bBool1 ); - } - break; - case RC_GetDocumentCount : - { - pRet->GenReturn ( RET_Value, nMethodId, (comm_UINT16)GetDocWinCount() ); - } - break; - case RC_ActivateDocument : - { - if( nParams & PARAM_UINT16_1 ) - { - if ( ValueOK( rtl::OString(), RcString( nMethodId ), nNr1, GetDocWinCount() ) ) - { - Window* pWin = GetDocWin( nNr1-1 ); - if ( pWin ) - { - pWin->ToTop(); - pWin->GrabFocus(); - } - } - } - else - ReportError( GEN_RES_STR0( S_INVALID_PARAMETERS ) ); - } - break; - case RC_GetSystemLanguage : - { - pRet->GenReturn ( RET_Value, nMethodId, (comm_UINT16)Application::GetSettings().GetLanguage() ); - } - break; - case RC_CatchGPF : - { - if( (nParams & PARAM_BOOL_1) ) - bCatchGPF = bBool1; - else - bCatchGPF = sal_True; - } - break; - case RC_IsProduct : - { - sal_Bool bIsProduct; - #ifdef DBG_UTIL - bIsProduct = sal_False; - #else - bIsProduct = sal_True; - #endif - pRet->GenReturn ( RET_Value, nMethodId, (sal_Bool)bIsProduct ); - } - break; - case RC_UsePostEvents : - { - if( (nParams & PARAM_BOOL_1) ) - bUsePostEvents = bBool1; - else - bUsePostEvents = sal_True; - } - break; - default: - ReportError( GEN_RES_STR1( S_UNKNOWN_COMMAND, RcString( nMethodId ) ) ); - } - SendProfile( RcString(nMethodId) ); - delete this; - return sal_True; -} - - -sal_Bool StatementCommand::UnpackStorage( SotStorageRef xStorage, DirEntry &aBaseDir ) -{ - SvStorageInfoList aList; - xStorage->FillInfoList( &aList ); - - for( size_t i = 0; i < aList.size(); i++ ) - { - SvStorageInfo& rInfo = aList[ i ]; - String aName = rInfo.GetName(); - DirEntry aPath ( aBaseDir ); - aPath += DirEntry( aName ); - sal_Bool bIsStorage = xStorage->IsStorage( aName ); - if ( bIsStorage ) - { - SotStorageRef xSubStorage = xStorage->OpenSotStorage( aName, STREAM_STD_READ ); - if ( xSubStorage->GetError() ) - { - ReportError( GEN_RES_STR2(S_UNPACKING_STORAGE_FAILED, aName, aPath.GetFull()) ); - return sal_False; - } - UnpackStorage( xSubStorage, aPath ); - } - else - { - if ( !aPath.MakeDir( sal_True ) ) - { - ReportError( GEN_RES_STR1(S_CANNOT_CREATE_DIRECTORY, aPath.GetFull()) ); - return sal_False; - } - SotStorageStreamRef xStream = xStorage->OpenSotStream( aName, STREAM_STD_READ ); - SvFileStream aDestination( aPath.GetFull(), STREAM_STD_READWRITE | STREAM_TRUNC ); - (*xStream) >> aDestination; - if ( aDestination.GetError() != ERRCODE_NONE ) - { - ReportError( GEN_RES_STR2(S_UNPACKING_STORAGE_FAILED, aName, aPath.GetFull()) ); - return sal_False; - } - aDestination.Close(); - } - } - return sal_True; -} - - -StatementControl::StatementControl( SCmdStream *pCmdIn, sal_uInt16 nControlIdType ) -: StatementList() -, nNr1( 0 ) -, nNr2( 0 ) -, nNr3( 0 ) -, nNr4( 0 ) -, nLNr1( 0 ) -, aString1() -, aString2() -, bBool1(sal_False) -, bBool2(sal_False) -{ - QueStatement( NULL ); - //HELPID BACKWARD (SIControl is no longer needed) - if ( nControlIdType == SIControl ) - { - comm_UINT32 nId; - pCmdIn->Read( nId ); - aUId = rtl::OString( nId ); - if ( nId == 0 ) - aUId = UID_ACTIVE; - else - ReportError( aUId, GEN_RES_STR1c( S_INTERNAL_ERROR, "using numeric HelpID from old Testtool" ) ); - } - else if ( nControlIdType == SIStringControl ) - { - String aId; - pCmdIn->Read( aId ); - aUId = Str2Id( aId ); - } - else - { - OSL_FAIL( "Wrong ControlType" ); - } - - pCmdIn->Read( nMethodId ); - pCmdIn->Read( nParams ); - - if( nParams & PARAM_UINT16_1 ) pCmdIn->Read( nNr1 ); - if( nParams & PARAM_UINT16_2 ) pCmdIn->Read( nNr2 ); - if( nParams & PARAM_UINT16_3 ) pCmdIn->Read( nNr3 ); - if( nParams & PARAM_UINT16_4 ) pCmdIn->Read( nNr4 ); - if( nParams & PARAM_UINT32_1 ) pCmdIn->Read( nLNr1 ); - if( nParams & PARAM_STR_1 ) pCmdIn->Read( aString1 ); - if( nParams & PARAM_STR_2 ) pCmdIn->Read( aString2 ); - if( nParams & PARAM_BOOL_1 ) pCmdIn->Read( bBool1 ); - if( nParams & PARAM_BOOL_2 ) pCmdIn->Read( bBool2 ); - -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Reading Control: UId: " ); - m_pDbgWin->AddText( Id2Str( aUId ) ); - m_pDbgWin->AddText( " Methode: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); - m_pDbgWin->AddText( " Params:" ); - if( nParams & PARAM_UINT16_1 ) {m_pDbgWin->AddText( " n1:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr1 ) );} - if( nParams & PARAM_UINT16_2 ) {m_pDbgWin->AddText( " n2:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr2 ) );} - if( nParams & PARAM_UINT16_3 ) {m_pDbgWin->AddText( " n3:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr3 ) );} - if( nParams & PARAM_UINT16_4 ) {m_pDbgWin->AddText( " n4:" );m_pDbgWin->AddText( String::CreateFromInt32( nNr4 ) );} - if( nParams & PARAM_UINT32_1 ) {m_pDbgWin->AddText( " nl1:" );m_pDbgWin->AddText( String::CreateFromInt64( nLNr1 ) );} - if( nParams & PARAM_STR_1 ) {m_pDbgWin->AddText( " s1:" );m_pDbgWin->AddText( aString1 );} - if( nParams & PARAM_STR_2 ) {m_pDbgWin->AddText( " s2:" );m_pDbgWin->AddText( aString2 );} - m_pDbgWin->AddText( "\n" ); -#endif -} - -sal_Bool IsDialog(Window *pWin) -{ // Alles was von SystemWindow abgeleitet ist - if ( !pWin ) - return sal_False; - - switch (pWin->GetType()) - { - case WINDOW_FLOATINGWINDOW: - case WINDOW_DOCKINGWINDOW: - case WINDOW_MODELESSDIALOG: - case WINDOW_DIALOG: - case WINDOW_MODALDIALOG: - case WINDOW_WORKWINDOW: - case WINDOW_TABDIALOG: - - case WINDOW_MESSBOX: - case WINDOW_INFOBOX: - case WINDOW_WARNINGBOX: - case WINDOW_ERRORBOX: - case WINDOW_QUERYBOX: - case WINDOW_BUTTONDIALOG: - case WINDOW_FILEDIALOG: - case WINDOW_PRINTDIALOG: - case WINDOW_PRINTERSETUPDIALOG: - -// ab hier nicht ansprechbar (da nicht implementiert) - case WINDOW_SYSWINDOW: - case WINDOW_SYSTEMDIALOG: - case WINDOW_COLORDIALOG: - case WINDOW_FONTDIALOG: - case WINDOW_PATHDIALOG: - - - return sal_True; - default: - return sal_False; - } -} - - -sal_Bool IsAccessable(Window *pWin) -{ - if ( pWin == NULL ) - return sal_False; - - return pWin->IsEnabled() && pWin->IsInputEnabled(); -} - - - -// neue Hilfsfunktion -static Window*ImpGetButton( Window *pBase, WinBits nMask, WinBits nWinBits ) -{ - sal_uInt16 n = pBase->GetChildCount(); - for( sal_uInt16 i = 0 ; i < n; i++ ) { - Window *pChild = pBase->GetChild(i); - if( pChild->GetType() == WINDOW_OKBUTTON - || pChild->GetType() == WINDOW_CANCELBUTTON - || pChild->GetType() == WINDOW_HELPBUTTON - || pChild->GetType() == WINDOW_PUSHBUTTON ) - if( !nMask || ( pChild->GetStyle() & nMask ) == nWinBits ) - return pChild; - } - return NULL; -} - -sal_Bool StatementControl::ControlOK( Window *pControl, const sal_Char* cBezeichnung ) -{ - if ( pControl && ( ( ( IsAccessable(pControl) || (nMethodId & M_WITH_RETURN) ) && - pControl->IsVisible() ) || - aUId.equals( UID_ACTIVE ) ) ) - return sal_True; - else - { - UniString aBezeichnung( cBezeichnung, RTL_TEXTENCODING_ASCII_US ); - if ( aBezeichnung.Len() > 0 ) - { - if (!pControl) - ReportError( aUId, GEN_RES_STR1( S_WIN_NOT_FOUND, aBezeichnung ) ); - else if ( !pControl->IsVisible() ) - ReportError( aUId, GEN_RES_STR1( S_WIN_INVISIBLE, aBezeichnung ) ); - else - ReportError( aUId, GEN_RES_STR1( S_WIN_DISABLED, aBezeichnung ) ); - } - #if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( aBezeichnung.AppendAscii(" NotFound or Disabled or Invisible") ); - #endif - - return sal_False; - } -} - - -sal_Bool StatementList::ValueOK( rtl::OString aId, String aBezeichnung, sal_uLong nValue, sal_uLong nMax ) -{ - - if ( nMax < nValue ) - { - if ( aBezeichnung.Len() > 0 ) - ReportError( aId, GEN_RES_STR3( S_NUMBER_TOO_BIG, aBezeichnung, UniString::CreateFromInt32( nValue ), UniString::CreateFromInt32( nMax ) ) ); - return sal_False; - } - if ( nValue < 1 ) - { - if ( aBezeichnung.Len() > 0 ) - ReportError( aId, GEN_RES_STR3c3( S_NUMBER_TOO_SMALL, aBezeichnung, UniString::CreateFromInt32( nValue ), "1" ) ); - return sal_False; - } - return sal_True; -} - -sal_uInt16 StatementList::GetCurrentMenues( PopupMenu *&pPopup, MenuBar *&pMenuBar, Menu *&pMenu ) -{ - if ( WinPtrValid( pMenuWindow ) ) - pMenuBar = pMenuWindow->GetMenuBar(); - - if ( pMenuBar ) // use MenuBar as base - pMenu = pMenuBar; - else // use contextmenu as base - { - pMenu = PopupMenu::GetActivePopupMenu(); - pPopup = PopupMenu::GetActivePopupMenu(); - } - - if ( !pMenu ) - return 1; - - if ( aSubMenuId1 ) - { - pPopup = pMenu->GetPopupMenu( aSubMenuId1 ); - pMenu = pPopup; - } - - if ( pMenu && aSubMenuId2 ) - { - pPopup = pMenu->GetPopupMenu( aSubMenuId2 ); - pMenu = pPopup; - } - - if ( pMenu && aSubMenuId3 ) - { - pPopup = pMenu->GetPopupMenu( aSubMenuId3 ); - pMenu = pPopup; - } - - return 0; -} - -void StatementControl::AnimateMouse( Window *pControl, TTHotSpots aWohin ) -{ - Point aZiel; - - switch (aWohin) - { - case MitteLinks: - { - long nHeight = pControl->GetSizePixel().Height(); - aZiel.X() += 5; - aZiel.Y() += nHeight / 2; - } - break; - case Mitte: - { - Size aSize = pControl->GetOutputSizePixel(); - aZiel.Move( aSize.Width() / 2, aSize.Height() / 2 ); - } - break; - case MitteOben: - { - long nWidth = pControl->GetSizePixel().Width(); - aZiel.X() += nWidth / 2; - aZiel.Y() += 5; - } - break; - } - AnimateMouse( pControl, aZiel ); -} - - -void StatementControl::AnimateMouse( Window *pControl, Point aWohin ) -{ - Point aAkt = pControl->GetPointerPosPixel(); - Point aZiel = aWohin; - - long nSteps; - Point aDiff = aAkt - aZiel; - - if ( Abs(aDiff.X()) < Abs(aDiff.Y()) ) - nSteps = Abs(aDiff.Y()) / 5; - else - nSteps = Abs(aDiff.X()) / 5; - if ( nSteps == 0 ) - return; - - aDiff *= 1000; - aDiff /= nSteps; - - StatementList::bExecuting = sal_True; // Bah ist das ein ekliger Hack - // Das verhindert, da� schon der n�chste Befehl ausgef�hrt wird. - - for ( ; nSteps ; nSteps-- ) - { - if ( Abs((aAkt - pControl->GetPointerPosPixel()).X()) > 5 || - Abs((aAkt - pControl->GetPointerPosPixel()).Y()) > 5 ) - nSteps = 1; - aAkt = aZiel + aDiff * nSteps / 1000; - pControl->SetPointerPosPixel(aAkt); - SafeReschedule(); - } - pControl->SetPointerPosPixel(aZiel); - StatementList::bExecuting = sal_False; // Bah ist das ein ekliger Hack -} - - -sal_Bool StatementControl::MaybeDoTypeKeysDelay( Window *pTestWindow ) -{ - if ( bDoTypeKeysDelay ) - { - sal_uLong nTimeWait = nMinTypeKeysDelay; - if ( nMaxTypeKeysDelay != nMinTypeKeysDelay ) - nTimeWait += Time::GetSystemTicks() % ( nMaxTypeKeysDelay - nMinTypeKeysDelay ); - Timer aTimer; - aTimer.SetTimeout( nTimeWait ); - aTimer.Start(); - StatementList::bExecuting = sal_True; // Bah ist das ein ekliger Hack - // Das verhindert, da� schon der n�chste Befehl ausgef�hrt wird. - while ( aTimer.IsActive() ) - { - SafeReschedule( sal_True ); - } - StatementList::bExecuting = sal_False; // Bah ist das ein ekliger Hack - if ( !WinPtrValid(pTestWindow ) ) - { - ReportError( aUId, GEN_RES_STR1( S_WINDOW_DISAPPEARED, MethodString( nMethodId ) ) ); - return sal_False; - } - } - return sal_True; -} - -sal_Bool StatementControl::HandleVisibleControls( Window *pControl ) -{ - if( pControl ) // Also auch bei Disabled nicht jedoch bei Invisible - { - switch( nMethodId ) - { - case M_IsEnabled: - pRet->GenReturn ( RET_Value, aUId, IsAccessable(pControl) ); - break; - case M_IsVisible: - pRet->GenReturn ( RET_Value, aUId, pControl->IsVisible() ); - break; - case M_GetPosX: - if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows - if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge - if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border - if ( (nParams & PARAM_BOOL_1) && bBool1 ) - pControl = pControl->GetWindow( WINDOW_OVERLAP ); - - if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_SPLITWINDOW ) - { - Point aPos = pControl->GetPosPixel(); - aPos = pControl->GET_REAL_PARENT()->OutputToScreenPixel( aPos ); - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)aPos.X() ); - } - else - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pControl->GetPosPixel().X() ); - break; - case M_GetPosY: - if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows - if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge - if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border - if ( (nParams & PARAM_BOOL_1) && bBool1 ) - pControl = pControl->GetWindow( WINDOW_OVERLAP ); - - if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_SPLITWINDOW ) - { - Point aPos = pControl->GetPosPixel(); - aPos = pControl->GET_REAL_PARENT()->OutputToScreenPixel( aPos ); - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)aPos.Y() ); - } - else - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pControl->GetPosPixel().Y() ); - break; - case M_GetSizeX: - if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows - if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge - if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border - if ( (nParams & PARAM_BOOL_1) && bBool1 ) - pControl = pControl->GetWindow( WINDOW_OVERLAP ); - - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pControl->GetSizePixel().Width() ); - break; - case M_GetSizeY: - if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows - if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge - if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border - if ( (nParams & PARAM_BOOL_1) && bBool1 ) - pControl = pControl->GetWindow( WINDOW_OVERLAP ); - - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pControl->GetSizePixel().Height() ); - break; - case M_SnapShot: - { - if ( pControl->GetType() == WINDOW_DOCKINGWINDOW && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r FloatingWindows - if ( pControl->GetType() == WINDOW_TABCONTROL && pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_TABDIALOG ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r TabDialoge - if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_BORDERWINDOW ) - pControl = pControl->GET_REAL_PARENT(); // Sonderbehandlung f�r Border - if ( (nParams & PARAM_BOOL_1) && bBool1 ) - pControl = pControl->GetWindow( WINDOW_OVERLAP ); - - Bitmap aBmp = pControl->SnapShot(); - if ( pControl->GetType() == WINDOW_WORKWINDOW ) - { - Point aStart = pControl->GetPosPixel(); - if ( !(nParams & PARAM_UINT16_4) ) - { - nParams |= PARAM_UINT16_1; - nParams |= PARAM_UINT16_2; - nParams |= PARAM_UINT16_3; - nParams |= PARAM_UINT16_4; - nNr1 = (sal_uInt16)-aStart.X(); - nNr2 = (sal_uInt16)-aStart.Y(); - nNr3 = (sal_uInt16)pControl->GetSizePixel().Width() + 2*(sal_uInt16)aStart.X(); - nNr4 = (sal_uInt16)pControl->GetSizePixel().Height() + 2*(sal_uInt16)aStart.Y(); - } - nNr1 = std::max((sal_uInt16)-aStart.X(),nNr1); - nNr2 = std::max((sal_uInt16)-aStart.Y(),nNr2); - nNr3 = std::min((sal_uInt16)(pControl->GetSizePixel().Width() + 2*(sal_uInt16)aStart.X()),nNr3); - nNr4 = std::min((sal_uInt16)(pControl->GetSizePixel().Height() + 2*(sal_uInt16)aStart.Y()),nNr4); - } - if( nParams & PARAM_UINT16_4 ) - { // Zuschneiden - Point aPt(-nNr1,-nNr2); - Size aSz(nNr3,nNr4); - VirtualDevice aVDev( *pControl ); - - aVDev.SetOutputSizePixel( aSz ); - aVDev.DrawBitmap( aPt, aBmp ); - aBmp = aVDev.GetBitmap( Point(), aSz ); - } - - SvFileStream fOut; - fOut.Open(aString1,STREAM_STD_WRITE); - aBmp.Write(fOut); - if ( fOut.GetError() ) - ReportError( aUId, GEN_RES_STR1( S_ERROR_SAVING_IMAGE, UniString::CreateFromInt32( fOut.GetError() ) ) ); - fOut.Close(); - } - break; - case M_GetFixedTextCount: - { - pRet->GenReturn ( RET_Value, aUId, CountWinByRT( pControl, WINDOW_FIXEDTEXT, sal_True ) ); - } - break; - case M_GetFixedText: - { - if( ( nParams & PARAM_UINT16_1 ) == 0 ) - nNr1 = 1; - - FixedText* pFixedText = (FixedText*)GetWinByRT( pControl, WINDOW_FIXEDTEXT, sal_True, nNr1-1 ); - if ( pFixedText ) - pRet->GenReturn ( RET_Value, aUId, pFixedText->GetText() ); - else - ValueOK(aUId, MethodString( nMethodId ),nNr1,CountWinByRT( pControl, WINDOW_FIXEDTEXT, sal_True ) ); - } - break; - default: - return sal_False; - } - SendProfile( UIdString( aUId ).Append('.').Append( MethodString( nMethodId ) ) ); - return sal_True; - } - return sal_False; -} - -sal_Bool StatementControl::HandleCommonMethods( Window *pControl ) -{ - switch( nMethodId ) // Diese k�nnen an jedem Window ausgef�hrt werden - { - case M_Exists: // Oben schon Behandelt. Unterdr�ckt hier nur Fehler - case M_NotExists: - case M_IsEnabled: - case M_IsVisible: - case M_SnapShot: - break; - case M_Caption : - { - if ( pControl->GetText().Len() == 0 && IsDocFrame( pControl->GetWindow( WINDOW_FRAME ) ) ) - pRet->GenReturn ( RET_Value, aUId, pControl->GetWindow( WINDOW_FRAME )->GetText()); - else - pRet->GenReturn ( RET_Value, aUId, pControl->GetText()); - } - break; - case M_GetRT: - { - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pControl->GetType() ); - } - break; - case M_TypeKeys: - { - if( !(nParams & PARAM_UINT16_1) ) // Anzahl wiederholungen - nNr1 = 1; - if( !(nParams & PARAM_BOOL_1) ) // Follow Focus - bBool1 = sal_False; // so bleibt das bisherige Verhalten - - if ( !bBool1 ) // Altes Verhalten - pControl->GrabFocus(); - else // If focus is not inside given control we grab it once. - { - Window *pFocus = GetpApp()->GetFocusWindow(); - if ( !pFocus || !pControl->IsWindowOrChild( pFocus, sal_True ) ) - pControl->GrabFocus(); - } - - - // maybe this can get removed since we are using GetPreferredKeyInputWindow() - if ( pControl->GetType() == WINDOW_COMBOBOX ) - { // Bei COMBOBOX an das Edit direkt liefern - Window *pTemp = NULL; - for ( sal_uInt16 i = 0 ; i < pControl->GetChildCount() && !pTemp ; i++ ) - if ( pControl->GetChild( i )->GetType() == WINDOW_EDIT ) - pTemp = pControl->GetChild( i ); - if ( pTemp ) - pControl = pTemp; - } - - Window *pDeliverHere = pControl; - for (int j = 0; j < nNr1; j++) - for (xub_StrLen i = 0; i < aString1.Len(); i++) - { - if ( StatementList::bUsePostEvents ) - { // grab focus every time - Window *pFocus = GetpApp()->GetFocusWindow(); - if ( !pFocus || !pControl->IsWindowOrChild( pFocus, sal_True ) ) - pControl->GrabFocus(); - } - if ( bBool1 ) // Jedesmal das FocusWindow finden - { - Window *pFocus = GetpApp()->GetFocusWindow(); - if ( pFocus && pControl->IsWindowOrChild( pFocus, sal_True ) ) - pDeliverHere = pFocus; - else // sonst fallback auf das Basisfenster - pDeliverHere = pControl; - } - pDeliverHere = pDeliverHere->GetPreferredKeyInputWindow(); - KeyEvent aEvent; - if ( ((sal_uInt16)aString1.GetChar(i)) <= 7 ) - { - sal_uInt16 nVal = 0; - switch (aString1.GetChar(i)) - { - case 1: nVal = aString1.GetChar(i+1) + (aString1.GetChar(i+2) << 8); - i += 2; - break; - case 3: nVal = (aString1.GetChar(i+1) << 8); - i++; - break; - case 5: nVal = aString1.GetChar(i+1); - i++; - break; - case 7: nVal = 0; - break; - } - // #105672# - // find out the keycode - sal_uInt16 nKeygroup = nVal & KEYGROUP_TYPE; - sal_uInt16 nKeyCode = nVal & KEY_CODE; - sal_Unicode aCh; - switch (nKeygroup) - { - case KEYGROUP_NUM: - aCh = nKeyCode - KEY_0 + '0'; - break; - case KEYGROUP_ALPHA: - aCh = nKeyCode - KEY_A; - if ( nVal & KEY_MOD1 ) - {} - else if ( nVal & KEY_SHIFT ) - aCh += 'A'; - else - aCh += 'a'; - break; - case KEYGROUP_MISC: - { // CR ESC TAB BACK - ByteString aPrintableMisc("\x0d\x1b\x09\x08 **+-*/.,<>=",16); - if ( nKeyCode-KEY_RETURN < aPrintableMisc.Len() - && nKeyCode != KEY_INSERT && nKeyCode != KEY_DELETE ) - aCh = aPrintableMisc.GetChar( nKeyCode-KEY_RETURN ); - else - aCh = 0; - } - break; - case KEYGROUP_CURSOR: - case KEYGROUP_FKEYS: - default: - aCh = 0; - } - aEvent = KeyEvent(aCh,KeyCode(nVal & 0xFFF,nVal & 0xF000)); - } - else - { - // CR ESC TAB BACK - String aPrintableMisc = CUniString("\x0d\x1b\x09\x08 xx+-*/.,<>="); - sal_Unicode aCh = aString1.GetChar(i); - if ( aCh >= 'a' && aCh <= 'z' ) - aEvent = KeyEvent(aCh, KeyCode(KEYGROUP_ALPHA + aCh-'a', 0)); - else if ( aCh >= 'A' && aCh <= 'Z' ) - aEvent = KeyEvent(aCh, KeyCode(KEYGROUP_ALPHA + aCh-'a', KEY_SHIFT)); - else if ( aCh >= '0' && aCh <= '9' ) - aEvent = KeyEvent(aCh, KeyCode(KEYGROUP_NUM + aCh-'0', 0)); - else if ( aPrintableMisc.Search(aCh) != STRING_NOTFOUND ) - aEvent = KeyEvent(aCh, KeyCode(KEYGROUP_MISC + (sal_uInt16)aPrintableMisc.Search(aCh), 0)); - else // Sollte eigentlich nicht auftreten - aEvent = KeyEvent(aCh, KeyCode()); - } - ImplKeyInput( pDeliverHere, aEvent ); - if ( !MaybeDoTypeKeysDelay( pControl ) ) - break; - else - SafeReschedule();SafeReschedule();SafeReschedule(); - } - } - break; - -#define CalcMouseButton\ - sal_uInt16 nButton = MOUSE_LEFT;\ - if ( (nParams & PARAM_UINT16_3) )\ - {\ - switch ( nNr3 )\ - {\ - case 1: nButton = MOUSE_LEFT; break;\ - case 2: nButton = MOUSE_MIDDLE; break;\ - case 3: nButton = MOUSE_RIGHT; break;\ - }\ - }\ - - case M_MouseDown: - { - CalcMouseButton; - Size aS = pControl->GetOutputSizePixel(); - Point aPos = Point(aS.Width() * nNr1 / 100,aS.Height() * nNr2 / 100); - Window *pActualWin = pControl->FindWindow( aPos ); - - if ( pActualWin ) - aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); - else - pActualWin = pControl; - - AnimateMouse( pActualWin, aPos ); - pActualWin->GrabFocus(); - MouseEvent aMEvnt(aPos,1,MOUSE_SIMPLECLICK|MOUSE_SELECT,nButton); - ImplMouseButtonDown( pActualWin, aMEvnt ); - } - break; - case M_MouseUp: - { - CalcMouseButton; - Size aS = pControl->GetOutputSizePixel(); - Point aPos = Point(aS.Width() * nNr1 / 100,aS.Height() * nNr2 / 100); - Window *pActualWin = pControl->FindWindow( aPos ); - - if ( pActualWin ) - aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); - else - pActualWin = pControl; - - AnimateMouse( pActualWin, aPos ); - MouseEvent aMEvt( aPos, 1, MOUSE_SIMPLECLICK|MOUSE_SELECT, nButton ); - ImplMouseButtonUp( pActualWin, aMEvt ); - } - break; - case M_MouseMove: - { - CalcMouseButton; - Size aS = pControl->GetOutputSizePixel(); - Point aPos = Point(aS.Width() * nNr1 / 100,aS.Height() * nNr2 / 100); - Window *pActualWin = pControl->FindWindow( aPos ); - - if ( pActualWin ) - { - aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); - } - else - pActualWin = pControl; - - AnimateMouse( pActualWin, aPos ); - MouseEvent aMEvt( aPos, 0, MOUSE_SIMPLEMOVE|MOUSE_DRAGMOVE, nButton ); - ImplMouseMove( pActualWin, aMEvt ); - } - break; - case M_MouseDoubleClick: - { - CalcMouseButton; - Size aS = pControl->GetOutputSizePixel(); - Point aPos = Point(aS.Width() * nNr1 / 100,aS.Height() * nNr2 / 100); - Window *pActualWin = pControl->FindWindow( aPos ); - - if ( pActualWin ) - { - aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); - } - else - pActualWin = pControl; - - AnimateMouse( pActualWin, aPos ); - pActualWin->GrabFocus(); - MouseEvent aMEvnt; - aMEvnt = MouseEvent(aPos,1,MOUSE_SIMPLECLICK|MOUSE_SELECT,nButton); - ImplMouseButtonDown( pActualWin, aMEvnt ); - ImplMouseButtonUp ( pActualWin, aMEvnt ); - aMEvnt = MouseEvent(aPos,2,MOUSE_SIMPLECLICK|MOUSE_SELECT,nButton); - ImplMouseButtonDown( pActualWin, aMEvnt ); - ImplMouseButtonUp ( pActualWin, aMEvnt ); - } - break; - case M_DisplayPercent: - { - ModelessDialog *pDlg = new ModelessDialog(NULL); - pDlg->SetOutputSizePixel(Size(100,30)); - - Edit *pMyEd = new Edit(pDlg,WB_CENTER | WB_BORDER ); - pMyEd->SetSizePixel(Size(100,30)); - pDlg->SetText(UniString("Schlie�en", RTL_TEXTENCODING_ISO_8859_1)); - pDlg->Show(); - pMyEd->Show(); - sal_uLong nTime = Time().GetTime(); - - while (pDlg->IsVisible()) - { - pDlg->ToTop(); - for (int i = 1 ; i<10 ; i++) - SafeReschedule(); - Point Pos = pControl->GetPointerPosPixel(); - Size Siz=pControl->GetOutputSizePixel(); - if ( Time().GetTime() - nTime > 10 ) - { - nTime = Time().GetTime(); - pMyEd->SetText(UniString::CreateFromInt32(Pos.X()*100/Siz.Width()).AppendAscii("%x").Append( UniString::CreateFromInt32(Pos.Y()*100/Siz.Height()) ).Append('%')); - } - } - - delete pMyEd; - delete pDlg; - } - break; - case M_OpenContextMenu: - { - aSubMenuId1 = 0; - aSubMenuId2 = 0; - aSubMenuId3 = 0; - pMenuWindow = NULL; - Point aPos; - ToolBox* pTB = (ToolBox*)pControl; - if ( (pControl->GetType() == WINDOW_TOOLBOX) && pTB->IsMenuEnabled() ) - { - pTB->ExecuteCustomMenu(); - } - else - { - sal_Bool bAtMousePos = ( nParams & PARAM_BOOL_1 ) && bBool1; - if ( bAtMousePos ) - { - aPos = pControl->GetPointerPosPixel(); - Window *pActualWin = pControl->FindWindow( aPos ); - - if ( pActualWin ) - { - aPos = pActualWin->AbsoluteScreenToOutputPixel( pControl->OutputToAbsoluteScreenPixel ( aPos ) ); - pControl = pActualWin; - } - } - CommandEvent aEvent( aPos, COMMAND_CONTEXTMENU, bAtMousePos ); - ImplCommand( pControl, aEvent ); - } - } - break; - case M_UseMenu: - { - aSubMenuId1 = 0; - aSubMenuId2 = 0; - aSubMenuId3 = 0; - pMenuWindow = NULL; - - while ( pControl && !( ( pControl->GetType() == WINDOW_SYSWINDOW || pControl->GetType() == WINDOW_WORKWINDOW ) && ControlOK( pControl, "" ) ) ) - pControl = pControl->GET_REAL_PARENT(); - - if ( pControl && ((SystemWindow*)pControl)->GetMenuBar() ) - pMenuWindow = ((SystemWindow*)pControl); - else - ReportError( GEN_RES_STR1( S_NO_MENU, MethodString( nMethodId ) ) ); - } - break; - case M_FadeIn: - case M_FadeOut: - case M_Pin: - case M_IsFadeIn: - case M_IsPin: - { - WindowAlign aWindowAlign = WINDOWALIGN_LEFT; - if ( (nParams & PARAM_UINT16_1) ) - { - switch ( nNr1 ) - { - case CONST_ALIGN_LEFT: - aWindowAlign = WINDOWALIGN_LEFT; - break; - case CONST_ALIGN_TOP: - aWindowAlign = WINDOWALIGN_TOP; - break; - case CONST_ALIGN_RIGHT: - aWindowAlign = WINDOWALIGN_RIGHT; - break; - case CONST_ALIGN_BOTTOM: - aWindowAlign = WINDOWALIGN_BOTTOM; - break; - default: - ReportError( aUId, GEN_RES_STR1( S_INVALID_POSITION, MethodString( nMethodId ) ) ); - } - } - - Window* pTemp = NULL; - while ( !pTemp && pControl ) - { - pTemp = GetFadeSplitWin( pControl, aWindowAlign ); - pControl = pControl->GET_REAL_PARENT(); - } - - if ( !pTemp ) - { - ReportError( aUId, GEN_RES_STR1( S_SPLITWIN_NOT_FOUND, MethodString( nMethodId ) ) ); - break; - } - - pControl = pTemp; // So da� wir unten ohne Fehler durchkommen - SplitWindow *pSW = (SplitWindow*) pTemp; - - switch( nMethodId ) - { - case M_FadeIn: - if ( pSW->IsFadeInButtonVisible() ) - pSW->FadeIn(); - break; - case M_FadeOut: - if ( pSW->IsFadeOutButtonVisible() ) - pSW->FadeOut(); - break; - case M_Pin: - if ( ( pSW->GetAutoHideState() && bBool1 ) - || ( !pSW->GetAutoHideState() && !bBool1 ) ) - { - MouseEvent aMEvnt; - Point aPt( pSW->GetAutoHideRect().Center() ); - aMEvnt = MouseEvent( aPt,1,MOUSE_SIMPLECLICK,MOUSE_LEFT ); - ImplMouseButtonDown( pControl, aMEvnt, FORCE_DIRECT_CALL ); - ImplMouseButtonUp ( pControl, aMEvnt, FORCE_DIRECT_CALL ); - } - break; - case M_IsFadeIn: - pRet->GenReturn ( RET_Value, aUId, pSW->IsFadeOutButtonVisible() ); - break; - case M_IsPin: - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)!pSW->GetAutoHideState() ); - break; - default: - ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); - } - SendProfile( UIdString( aUId ).Append('.').Append( MethodString( nMethodId ) ) ); - } - break; - case M_StatusGetText: - case M_StatusIsProgress: - case M_StatusGetItemCount: - case M_StatusGetItemId: - { - StatusBar *pStatus = NULL; - while ( !pStatus && pControl ) - { - pStatus = (StatusBar*)GetWinByRT( pControl, WINDOW_STATUSBAR, sal_True ); - pControl = pControl->GET_REAL_PARENT(); - } - - if ( !pStatus ) - { - ReportError( aUId, GEN_RES_STR1( S_NO_STATUSBAR, MethodString( nMethodId ) ) ); - break; - } - - switch ( nMethodId ) - { - case M_StatusGetText: - { - if ( (nParams & PARAM_UINT16_1) ) - { - if ( pStatus->AreItemsVisible() ) - pRet->GenReturn ( RET_Value, aUId, String(pStatus->GetItemText(nNr1))); - else - ReportError( aUId, GEN_RES_STR1( S_ITEMS_INVISIBLE, MethodString( nMethodId ) ) ); - } - else - { - if ( pStatus->AreItemsVisible() ) - { - if ( pStatus->GetItemCount() == 1 ) - { - pRet->GenReturn ( RET_Value, aUId, pStatus->GetItemText( pStatus->GetItemId(0) )); - } - else - { - pRet->GenReturn ( RET_Value, aUId, String() ); - } - } - else - pRet->GenReturn ( RET_Value, aUId, (String)pStatus->GetText() ); - } - } - break; - case M_StatusIsProgress: - { - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)pStatus->IsProgressMode() ); - } - break; - case M_StatusGetItemCount: - if ( pStatus->AreItemsVisible() ) - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(pStatus->GetItemCount())); - else - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(0)); - break; - case M_StatusGetItemId: - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,pStatus->GetItemCount()) ) - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(pStatus->GetItemId(nNr1-1))); - break; - } - } - break; - case M_HasScrollBar: - case M_IsScrollBarEnabled: - { - if ( (nParams | PARAM_UINT16_1) != PARAM_UINT16_1 ) // so there are other params - { - ReportError( aUId, GEN_RES_STR0( S_INVALID_PARAMETERS ) ); - break; - } - - if( !(nParams & PARAM_UINT16_1) ) - nNr1 = CONST_ALIGN_RIGHT; // default is right Scrollbar(vertical) - - if ( (nNr1 != CONST_ALIGN_RIGHT) && (nNr1 != CONST_ALIGN_BOTTOM) ) - { - ReportError( aUId, GEN_RES_STR1( S_INVALID_POSITION, MethodString( nMethodId ) ) ); - break; - } - - ScrollBar *pScroll = NULL; - - sal_uInt16 nSteps = 2; - while ( !pScroll && pControl && nSteps-- ) - { - pScroll = GetScrollBar( pControl, nNr1, sal_True ); - pControl = pControl->GET_REAL_PARENT(); - } - - switch ( nMethodId ) - { - case M_HasScrollBar: - { - if ( pScroll ) - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)sal_True ); - else - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)sal_False ); - } - break; - case M_IsScrollBarEnabled: - { - if ( !pScroll ) - { - ReportError( aUId, GEN_RES_STR1( S_NO_SCROLLBAR, MethodString( nMethodId ) ) ); - break; - } - pRet->GenReturn ( RET_Value, aUId, pScroll->IsEnabled() ); - } - break; - } - } - break; - default: - return sal_False; - } - return sal_True; -} - - -sal_Bool StatementControl::Execute() -{ - Window *pControl; - sal_Bool bStatementDone = sal_True; - - - if ( IsError ) - { - #if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Skipping Window: " ); - m_pDbgWin->AddText( Id2Str( aUId ) ); - m_pDbgWin->AddText( " Method: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); - m_pDbgWin->AddText( "\n" ); - #endif - Advance(); - delete this; - return sal_True; - } - - InitProfile(); -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Executing Window: " ); - m_pDbgWin->AddText( Id2Str( aUId ) ); - m_pDbgWin->AddText( " Method: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nMethodId ) ); - m_pDbgWin->AddText( "\n" ); -#endif - - - if ( aUId.equals( UID_ACTIVE ) ) - pControl = GetAnyActive(); - else - { - sal_Bool bSearchButtonOnToolbox = (nParams == PARAM_NONE) && ((M_Click == nMethodId) || (M_TearOff == nMethodId) || (M_IsEnabled == nMethodId) || (M_OpenMenu == nMethodId)); - bSearchButtonOnToolbox |= (nParams == PARAM_UINT16_1) && (M_GetState == nMethodId); - if ( nMethodId == M_TypeKeys || nMethodId == M_MouseDown - || nMethodId == M_MouseUp || nMethodId == M_MouseMove - || nMethodId == M_SnapShot ) - { - pControl = NULL; - if ( /*(nMethodId == M_SnapShot || nMethodId == M_TypeKeys) &&*/ !pControl ) - pControl = SearchTree( aUId ,bSearchButtonOnToolbox ); - } - else - pControl = SearchTree( aUId ,bSearchButtonOnToolbox ); - } - - - if ( pControl && pControl->GetType() == WINDOW_TOOLBOX ) - { - if ( !aUId.equals( pControl->GetUniqueOrHelpId() ) ) - { // Also wenn wir irgendwas auf einer Toolbox gefunden haben - switch ( nMethodId ) - { - case M_Click: - case M_TearOff: - case M_OpenMenu: - case M_GetState: - break; - case M_IsEnabled: - nMethodId = _M_IsEnabled; // Umlabeln, da die Behandlung essentiell anders ist! - break; - default: - pControl = NULL; - } - } - } - - - switch ( nMethodId ) - { - case M_Exists: - case M_NotExists: - Time aT; - sal_uInt16 aSeconds = aT.GetMin()*60+aT.GetSec(); - if ( !bBool2 ) // wurde im Konstruktor auf sal_False gesetzt - { - bBool2 = sal_True; - nNr2 = aSeconds; - if( !(nParams & PARAM_UINT16_1) ) - nNr1 = 0; // defaultm��ig sofort zur�ck - } - if ( aSeconds < nNr2 ) // Falls die Stunde umgesprungen ist - aSeconds += 60*60; - - if ( !pControl || !pControl->IsVisible() ) - pControl = NULL; - if ( ((nMethodId == M_Exists) && pControl) || - ((nMethodId == M_NotExists) && !pControl) ) - { // Wenn Bedingung erf�llt - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)sal_True ); - } - else - if ( aSeconds <= nNr2 + nNr1 ) // Zeit ist noch nicht abgelaufen - return sal_False; - else - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)sal_False ); - - Advance(); - delete this; - return sal_True; - } - - - short nRT = 0; - - if( pControl ) // Das Fenster Existiert irgendwo, kann aber auch hidden sein! - { - nRT = ImpGetRType( pControl ); -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Type is: " ); - m_pDbgWin->AddText( String::CreateFromInt32( nRT ) ); - m_pDbgWin->AddText( "\n" ); -#endif - } - - if ( nRT == C_Window && // Search for WorkWindow to satisfy these commands - ( nMethodId == M_Close - || nMethodId == M_IsMax - || nMethodId == M_IsMin - || nMethodId == M_IsRestore - || nMethodId == M_Minimize - || nMethodId == M_Maximize - || nMethodId == M_Restore ) ) - { - Window* pNewControl = pControl; - while ( pNewControl && pNewControl->GetType() != WINDOW_WORKWINDOW ) - pNewControl = pNewControl->GET_REAL_PARENT(); - - if ( pNewControl ) - { - pControl = pNewControl; - nRT = C_WorkWin; - } - } - - - if ( (!ControlOK( pControl, "" )) && ( nMethodId != M_SnapShot ) && (nRetryCount--)) - { -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( CUniString("Reschedule command (").Append( UniString::CreateFromInt32(nRetryCount) ).AppendAscii(")\n") ); -#endif - return sal_False; - } - - if( ControlOK( pControl, "" ) ) - { - if ( nMethodId == M_OpenContextMenu && !bBool2 ) - { - pControl->GrabFocus(); // to get asyncron focus on unix - bBool2 = sal_True; - return sal_False; - } - // TODO: handle GetFocus for all Methods and Windows like this (remove part below) - // See for impact of changed focus for HandleVisibleControls() (taking Snapshots might be different, possible exclude those methods) - if (( (nRT == C_TreeListBox) && !bBool2 ) - && nMethodId != M_TypeKeys // TypeKeys macht das selbst, falls eigenes Focushandling gew�nscht - && nMethodId != M_MouseDown - && nMethodId != M_MouseUp - && nMethodId != M_MouseMove ) - { - if ( !pControl->HasFocus() ) - { - pControl->GrabFocus(); - int i = 10; - while ( i-- && !pControl->HasFocus() ) // reschedule a bit - { - SafeReschedule(); - if ( !WinPtrValid( pControl ) ) - return sal_False; - } - if ( !pControl->HasFocus() ) // to get asyncronous focus - { - bBool2 = sal_True; - return sal_False; - } - } - } - } - - Advance(); - - if ( HandleVisibleControls( pControl ) ) - { - delete this; - return sal_True; - } - if( ControlOK( pControl, "Window/Control" ) ) - { - if (((( nRT < C_TabPage && nRT > C_TabControl ) - || nRT == C_PatternBox - || nRT == C_ToolBox - || nRT == C_ValueSet - || nRT == C_Control - || nRT == C_TreeListBox - ) - || nMethodId == M_OpenContextMenu ) - && nMethodId != M_TypeKeys // TypeKeys macht das selbst, falls eigenes Focushandling gew�nscht - && nMethodId != M_MouseDown - && nMethodId != M_MouseUp - && nMethodId != M_MouseMove ) - pControl->GrabFocus(); - - if ( !HandleCommonMethods( pControl ) ) - { - switch( nRT ) - { - case C_TabControl: - switch( nMethodId ) - { - case M_GetPageId: - if ( (nParams & PARAM_UINT16_1) ) - { - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((TabControl*)pControl)->GetPageCount() ) ) - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)((TabControl*)pControl)->GetPageId(nNr1-1)); - } - else - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)((TabControl*)pControl)->GetCurPageId()); - break; - case M_GetPageCount: - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)((TabControl*)pControl)->GetPageCount()); - break; - case M_SetPageId: - if (((TabControl*)pControl)->GetCurPageId()) - ((TabControl*)pControl)->DeactivatePage(); - ((TabControl*)pControl)->SetCurPageId( nNr1 ); - ((TabControl*)pControl)->ActivatePage(); - break; - case M_SetPageNr: - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((TabControl*)pControl)->GetPageCount() ) ) - { - if (((TabControl*)pControl)->GetCurPageId()) - ((TabControl*)pControl)->DeactivatePage(); - ((TabControl*)pControl)->SetCurPageId( ((TabControl*)pControl)->GetPageId( nNr1-1 ) ); - ((TabControl*)pControl)->ActivatePage(); - } - break; - case M_GetPage: - pRet->GenReturn ( RET_Value, aUId, Id2Str( ((TabControl*)pControl)->GetTabPage(((TabControl*)pControl)->GetCurPageId())->GetUniqueOrHelpId() ) ); - break; - case M_SetPage : - { // Wegen lokaler Variablen - TabControl *pTControl = ((TabControl*)pControl); - sal_uInt16 nActive = pTControl->GetCurPageId(); - sal_uInt16 i,anz; - rtl::OString aID; - rtl::OString aWantedID; - //HELPID BACKWARD (No numbers please (remove PARAM_UINT32_1 part) - if ( (nParams & PARAM_UINT32_1) ) - { - ReportError( aUId, GEN_RES_STR1c( S_INTERNAL_ERROR, "using numeric HelpID from old Testtool" ) ); - } - else if ( (nParams & PARAM_STR_1) ) - { - aWantedID = Str2Id( aString1 ); - } - else - ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); - - i = pTControl->GetPagePos( pTControl->GetCurPageId() ); - for ( anz=0 ; anz < pTControl->GetPageCount() && !aID.equals( aWantedID ) ; anz++ ) - { - pTControl->SelectTabPage( pTControl->GetPageId(i) ); - aID = pTControl->GetTabPage(pTControl->GetCurPageId())->GetUniqueOrHelpId(); - i++; - if ( i >= pTControl->GetPageCount() ) - i = 0; - if ( !MaybeDoTypeKeysDelay( pTControl ) || !MaybeDoTypeKeysDelay( pTControl ) || !MaybeDoTypeKeysDelay( pTControl ) ) // 3 Mal aufrufen - break; - } - if ( !aID.equals( aWantedID ) ) - { - pTControl->SelectTabPage( nActive ); - ReportError( aWantedID, GEN_RES_STR1( S_TABPAGE_NOT_FOUND, MethodString( nMethodId ) ) ); - } - } - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "TabControl" ) ); - break; - } - break; - case C_RadioButton: - case C_ImageRadioButton: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteLinks); - break; - case M_IsChecked : - pRet->GenReturn ( RET_Value, aUId, ((RadioButton*)pControl)->IsChecked()); - break; - case M_Check : - ((RadioButton*)pControl)->Check(); - ((RadioButton*)pControl)->Click(); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "RadioButton" ) ); - break; - } - break; - case C_CheckBox: - case C_TriStateBox: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteLinks); - break; - case M_IsChecked : - pRet->GenReturn ( RET_Value, aUId, comm_BOOL( ((TriStateBox*)pControl)->GetState() == STATE_CHECK) ); - break; - case M_IsTristate : - pRet->GenReturn ( RET_Value, aUId, comm_BOOL( ((TriStateBox*)pControl)->GetState() == STATE_DONTKNOW) ); - break; - case M_GetState : - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(((TriStateBox*)pControl)->GetState())); - break; - case M_Check : - ((TriStateBox*)pControl)->SetState( STATE_CHECK ); - ((TriStateBox*)pControl)->Click(); - break; - case M_UnCheck : - ((TriStateBox*)pControl)->SetState( STATE_NOCHECK ); - ((TriStateBox*)pControl)->Click(); - break; - case M_TriState : - if ( ((TriStateBox*)pControl)->IsTriStateEnabled() ) - { - ((TriStateBox*)pControl)->SetState( STATE_DONTKNOW ); - ((TriStateBox*)pControl)->Click(); - } - else - { - ReportError( aUId, GEN_RES_STR0( S_TRISTATE_NOT_ALLOWED ) ); - } - break; - case M_Click : - { - TriStateBox *pTB = ((TriStateBox*)pControl); - if ( pTB->GetState() == STATE_NOCHECK ) - pTB->SetState( STATE_CHECK ); - else if ( pTB->GetState() == STATE_CHECK ) - { - if ( pTB->IsTriStateEnabled() ) - pTB->SetState( STATE_DONTKNOW ); - else - pTB->SetState( STATE_NOCHECK ); - } - else - pTB->SetState( STATE_NOCHECK ); - pTB->Click(); - } - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "TriStateBox" ) ); - break; - } - break; - case C_Edit: - case C_MultiLineEdit: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, Mitte); - break; - case M_GetText : - pRet->GenReturn ( RET_Value, aUId, ((Edit*)pControl)->GetText()); - break; - case M_IsWritable: - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL) !((Edit*)pControl)->IsReadOnly() ); - break; - default: - if ( ! ((Edit*)pControl)->IsReadOnly() ) - { - switch( nMethodId ) - { - case M_SetText : - ((Edit*)pControl)->SetText( aString1 ); - if ( nRT == C_MultiLineEdit ) // since SetModifyFlag is not virtual we have to do this - ((MultiLineEdit*)pControl)->SetModifyFlag(); - else - ((Edit*)pControl)->SetModifyFlag(); - ((Edit*)pControl)->Modify(); - if ( ((Edit*)pControl)->GetText().CompareTo(aString1) != COMPARE_EQUAL ) - ReportError( aUId, GEN_RES_STR1( S_ERROR_IN_SET_TEXT, MethodString( nMethodId ) ) ); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "(MultiLine)Edit" ) ); - break; - } - } - else - ReportError( aUId, GEN_RES_STR1c( S_ATTEMPT_TO_WRITE_READONLY, "(MultiLine)Edit" ) ); - } - break; - case C_MultiListBox: - case C_ListBox: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteOben); - break; - case M_GetSelCount : - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(((ListBox*)pControl)->GetSelectEntryCount())); - break; - case M_GetSelIndex : - if ( ! (nParams & PARAM_UINT16_1) ) - { - if ( ((ListBox*)pControl)->GetSelectEntryCount() == 0 ) - { - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(0)); - break; - } - nNr1 = 1; - } - ValueOK(aUId, MethodString( nMethodId ),nNr1,((ListBox*)pControl)->GetSelectEntryCount()); - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(((ListBox*)pControl)->GetSelectEntryPos(nNr1-1)) +1); - break; - case M_GetSelText : - if ( ! (nParams & PARAM_UINT16_1) ) - nNr1 = 1; - pRet->GenReturn ( RET_Value, aUId, ((ListBox*)pControl)->GetSelectEntry(nNr1-1)); - break; - case M_GetItemCount : - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(((ListBox*)pControl)->GetEntryCount())); - break; - case M_GetItemText : - pRet->GenReturn ( RET_Value, aUId, ((ListBox*)pControl)->GetEntry(nNr1-1)); - break; - case M_Select: - case M_MultiSelect: - { - sal_Bool bUnselectBeforeSelect = ( nMethodId == M_Select ); - sal_Bool bFehler = sal_False; - if ( ! (nParams & PARAM_BOOL_1) ) - bBool1 = sal_True; - - if ( nMethodId == M_MultiSelect && nRT == C_ListBox ) - { - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ListBox" ) ); - bFehler = sal_True; - } - - if ( !bBool1 && nMethodId == M_Select ) - { - ReportError( aUId, GEN_RES_STR1( S_NO_SELECT_FALSE, MethodString( nMethodId ) ) ); - bFehler = sal_True; - } - - if ( !bFehler ) - { - if( nParams & PARAM_STR_1 ) - { - ListBox *pLB = ((ListBox*)pControl); - sal_uInt16 nPos; - if ( (nPos = pLB->GetEntryPos( aString1 )) == LISTBOX_ENTRY_NOTFOUND ) - ReportError( aUId, GEN_RES_STR2( S_ENTRY_NOT_FOUND, MethodString( nMethodId ), aString1 ) ); - else - { - if ( bUnselectBeforeSelect ) - pLB->SetNoSelection(); - pLB->SelectEntryPos( nPos, bBool1 ); - if ( pLB->IsEntryPosSelected( nPos ) ? !bBool1 : bBool1 ) // XOR rein mit BOOL - ReportError( aUId, GEN_RES_STR2( S_METHOD_FAILED, MethodString( nMethodId ), aString1 ) ); - } - } - else - { - ListBox *pLB = ((ListBox*)pControl); - pLB = static_cast<ListBox*>(pControl); - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,pLB->GetEntryCount()) ) - { - if ( bUnselectBeforeSelect ) - pLB->SetNoSelection(); - pLB->SelectEntryPos( nNr1-1, bBool1 ); - if ( pLB->IsEntryPosSelected( nNr1-1 ) ? !bBool1 : bBool1 ) // XOR rein mit BOOL - ReportError( aUId, GEN_RES_STR2( S_METHOD_FAILED, MethodString( nMethodId ), UniString::CreateFromInt32( nNr1 ) ) ); - } - } - ((ListBox*)pControl)->Select(); - } - } - break; - case M_SetNoSelection : - ((ListBox*)pControl)->SetNoSelection(); - ((ListBox*)pControl)->Select(); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "(Multi)ListBox" ) ); - break; - } - break; - case C_ComboBox: - case C_PatternBox: - case C_NumericBox: - case C_MetricBox: - case C_CurrencyBox: - case C_DateBox: - case C_TimeBox: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteOben); - break; - case M_GetSelText : - pRet->GenReturn ( RET_Value, aUId, ((ComboBox*)pControl)->GetText()); - break; - case M_GetSelIndex : - { - sal_uInt16 nPos = ((ComboBox*)pControl)->GetEntryPos(((ComboBox*)pControl)->GetText()); - if ( nPos == COMBOBOX_ENTRY_NOTFOUND ) - nPos = 0; - else - nPos++; - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32) nPos); - } - break; - case M_GetItemCount : - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(((ComboBox*)pControl)->GetEntryCount())); - break; - case M_GetItemText : - pRet->GenReturn ( RET_Value, aUId, ((ComboBox*)pControl)->GetEntry(nNr1-1)); - break; - case M_IsWritable: - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL) !((ComboBox*)pControl)->IsReadOnly() ); - break; - case M_Select : - if( nParams & PARAM_UINT16_1 ) - { - if ( !ValueOK(aUId, MethodString( nMethodId ),nNr1,((ComboBox*)pControl)->GetEntryCount()) ) - break; - aString1 = ((ComboBox*)pControl)->GetEntry(nNr1-1); - } - else - { - if ( ((ComboBox*)pControl)->GetEntryPos( aString1 ) == COMBOBOX_ENTRY_NOTFOUND ) - { - ReportError( aUId, GEN_RES_STR2( S_ENTRY_NOT_FOUND, MethodString( nMethodId ), aString1 ) ); - break; - } - } - - - ((ComboBox*)pControl)->SetText( aString1 ); - ((ComboBox*)pControl)->SetModifyFlag(); - ((ComboBox*)pControl)->Modify(); - break; - case M_SetText : - if ( ! ((ComboBox*)pControl)->IsReadOnly() ) - { - if ( ! (nParams & PARAM_STR_1) ) - aString1 = String(); - ((ComboBox*)pControl)->SetText( aString1 ); - ((ComboBox*)pControl)->SetModifyFlag(); - ((ComboBox*)pControl)->Modify(); - } - else - ReportError( aUId, GEN_RES_STR1c( S_ATTEMPT_TO_WRITE_READONLY, "ComboBox" ) ); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ComboBox" ) ); - break; - } - break; - case C_PushButton: - case C_OkButton: - case C_CancelButton: - case C_ImageButton: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, Mitte); - break; - case M_Click : - ((PushButton*)pControl)->Click(); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "PushButton" ) ); - break; - } - break; - case C_MoreButton: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, Mitte); - break; - case M_IsOpen : - pRet->GenReturn ( RET_Value, aUId, ((MoreButton*)pControl)->GetState()); - break; - case M_Click : - ((MoreButton*)pControl)->Click(); - break; - case M_Open : - ((MoreButton*)pControl)->SetState(sal_True); - break; - case M_Close : - ((MoreButton*)pControl)->SetState(sal_False); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MoreButton" ) ); - break; - } - break; - case C_SpinField: - case C_PatternField: - case C_NumericField: - case C_MetricField: - case C_CurrencyField: - case C_DateField: - case C_TimeField: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, Mitte); - break; - case M_GetText : - pRet->GenReturn ( RET_Value, aUId, ((SpinField*)pControl)->GetText()); - break; - case M_IsWritable: - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL) !((SpinField*)pControl)->IsReadOnly() ); - break; - case M_SetText : - if ( ! ((SpinField*)pControl)->IsReadOnly() ) - { - ((SpinField*)pControl)->SetText( aString1 ); - ((SpinField*)pControl)->SetModifyFlag(); - ((SpinField*)pControl)->Modify(); - } - else - ReportError( aUId, GEN_RES_STR1c( S_ATTEMPT_TO_WRITE_READONLY, "SpinField" ) ); - break; - case M_More : - { - if ( !(nParams & PARAM_UINT16_1) ) - nNr1 = 1; - for (int i = 1; i<= nNr1; i++) - { - ((SpinField*)pControl)->Up(); - ((SpinField*)pControl)->SetModifyFlag(); - ((SpinField*)pControl)->Modify(); - } - } - break; - case M_Less : - { - if ( !(nParams & PARAM_UINT16_1) ) - nNr1 = 1; - for (int i = 1; i<= nNr1; i++) - { - ((SpinField*)pControl)->Down(); - ((SpinField*)pControl)->SetModifyFlag(); - ((SpinField*)pControl)->Modify(); - } - } - break; - case M_ToMin : - ((SpinField*)pControl)->First(); - ((SpinField*)pControl)->SetModifyFlag(); - ((SpinField*)pControl)->Modify(); - break; - case M_ToMax : - ((SpinField*)pControl)->Last(); - ((SpinField*)pControl)->SetModifyFlag(); - ((SpinField*)pControl)->Modify(); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "SpinField" ) ); - break; - } - break; - - case C_MenuButton: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, Mitte); - break; - case M_Click : - { - MouseEvent aMEvnt; - Point aPt( pControl->GetSizePixel().Width() / 2, pControl->GetSizePixel().Height() / 2 ); - aMEvnt = MouseEvent( aPt,1,MOUSE_SIMPLECLICK,MOUSE_LEFT ); - ImplMouseButtonDown( pControl, aMEvnt, FORCE_DIRECT_CALL ); - ImplMouseButtonUp ( pControl, aMEvnt, FORCE_DIRECT_CALL ); - } - break; - case M_Open : - case M_OpenMenu : - { - MouseEvent aMEvnt; - Point aPt( pControl->GetSizePixel().Width() / 2, pControl->GetSizePixel().Height() / 2 ); - aMEvnt = MouseEvent( aPt,1,MOUSE_SIMPLECLICK,MOUSE_LEFT ); - ImplMouseButtonDown( pControl, aMEvnt, FORCE_DIRECT_CALL ); - - sal_uLong nStart = Time::GetSystemTicks(); - sal_uLong nDelay = pControl->GetSettings().GetMouseSettings().GetActionDelay(); - while ( ( Time::GetSystemTicks() - nStart ) < nDelay + 100 ) - SafeReschedule(); - - ImplMouseButtonUp ( pControl, aMEvnt, FORCE_DIRECT_CALL ); - - aSubMenuId1 = 0; - aSubMenuId2 = 0; - aSubMenuId3 = 0; - pMenuWindow = NULL; - } - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MenuButton" ) ); - break; - } - break; - case C_ToolBox: - { - ToolBox *pTB = ((ToolBox*)pControl); - if ( !aUId.equals( pTB->GetUniqueOrHelpId() ) ) // So we found a Button on the ToolBox - { - if ( (nParams == PARAM_NONE) || (nParams == PARAM_UINT16_1) ) - { // Wir f�lschen einen Parameter - nParams |= PARAM_STR_1; - aString1 = Id2Str( aUId ); - } - else - ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); - } - -#define FIND_ITEM\ - sal_uInt16 nItemPos = 0;\ - sal_Bool bItemFound = sal_False;\ - {\ - rtl::OString aButtonId;\ - if( nParams & PARAM_STR_1 )\ - aButtonId = Str2Id( aString1 );\ - else\ - ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) );\ - for ( nItemPos = 0; nItemPos < pTB->GetItemCount() && !aButtonId.equals(Str2Id( pTB->GetItemCommand(pTB->GetItemId(nItemPos)) )) &&\ - !aButtonId.equals(pTB->GetHelpId(pTB->GetItemId(nItemPos))) ; nItemPos++ ) {}\ - bItemFound = aButtonId.equals(Str2Id( pTB->GetItemCommand(pTB->GetItemId(nItemPos)) )) || aButtonId.equals(pTB->GetHelpId(pTB->GetItemId(nItemPos)));\ - if ( !bItemFound )\ - ReportError( aUId, GEN_RES_STR1( S_HELPID_ON_TOOLBOX_NOT_FOUND, MethodString( nMethodId ) ) );\ - else\ - {\ - if ( !pTB->IsItemEnabled( pTB->GetItemId(nItemPos) ) && nMethodId != _M_IsEnabled && nMethodId != M_GetState )\ - {\ - ReportError( aUId, GEN_RES_STR1( S_BUTTON_DISABLED_ON_TOOLBOX, MethodString( nMethodId ) ) );\ - bItemFound = sal_False;\ - }\ - else if ( !pTB->IsItemVisible( pTB->GetItemId(nItemPos) ) && nMethodId != M_GetState )\ - {\ - ReportError( aUId, GEN_RES_STR1( S_BUTTON_HIDDEN_ON_TOOLBOX, MethodString( nMethodId ) ) );\ - bItemFound = sal_False;\ - }\ - else\ - {\ - if ( pTB->IsMenuEnabled() )\ - { /* button is in Menu */\ - }\ - else\ - { /* Try the multi line way */\ - if ( pTB->GetItemRect(pTB->GetItemId(nItemPos)).IsEmpty() )\ - {\ - sal_uInt16 nLine = pTB->GetCurLine();\ - do\ - {\ - pTB->ShowLine( sal_False );\ - for ( int i = 1 ; i < 30 ; i++ )\ - SafeReschedule();\ - }\ - while ( pTB->GetCurLine() != nLine && pTB->GetItemRect(pTB->GetItemId(nItemPos)).IsEmpty() );\ - pTB->Invalidate( pTB->GetScrollRect() );\ - }\ - if ( pTB->GetItemRect(pTB->GetItemId(nItemPos)).IsEmpty() )\ - {\ - ReportError( aUId, GEN_RES_STR1( S_CANNOT_MAKE_BUTTON_VISIBLE_IN_TOOLBOX, MethodString( nMethodId ) ) );\ - bItemFound = sal_False;\ - }\ - }\ - }\ - }\ - } - - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteLinks); - break; - case M_Click : - { - FIND_ITEM; - if ( bItemFound ) // FIND_ITEM Erfolgreich - { - Rectangle aRect = pTB->GetItemRect(pTB->GetItemId(nItemPos)); - if ( aRect.IsEmpty() ) - { - pTB->ExecuteCustomMenu(); - - aSubMenuId1 = 0; - aSubMenuId2 = 0; - aSubMenuId3 = 0; - pMenuWindow = NULL; - - new StatementCommand( this, RC_MenuSelect, PARAM_UINT16_1, pTB->GetItemId(nItemPos) + TOOLBOX_MENUITEM_START ); - } - else - { - aRect = pTB->GetItemRect(pTB->GetItemId(nItemPos)); - MouseEvent aMEvnt; - aMEvnt = MouseEvent(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); - ImplMouseButtonDown( pTB, aMEvnt, FORCE_DIRECT_CALL ); - ImplMouseButtonUp ( pTB, aMEvnt, FORCE_DIRECT_CALL ); - } - } - } - break; - case M_TearOff : - { - FIND_ITEM; - if ( bItemFound ) // FIND_ITEM Erfolgreich - { - Rectangle aRect = pTB->GetItemPosDropDownRect( nItemPos ); - AnimateMouse( pControl, aRect.Center() ); - MouseEvent aMEvnt(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); - ImplMouseButtonDown( pTB, aMEvnt, FORCE_DIRECT_CALL ); - - Window *pWin = NULL; - // Wait for the window to open. - StatementList::bExecuting = sal_True; // Bah ist das ein ekliger Hack - { // Das verhindert, da� schon der n�chste Befehl ausgef�hrt wird. - Time aDelay; - while ( !pWin && ( (pWin = GetPopupFloatingWin()) == NULL ) && ( Time() - aDelay ).GetSec() < 15 ) - SafeReschedule(); - } - StatementList::bExecuting = sal_False; // Bah ist das ein ekliger Hack - - if ( pWin && pWin->GetType() == WINDOW_FLOATINGWINDOW ) - { - aMEvnt = MouseEvent(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); - ImplMouseButtonUp( pTB, aMEvnt, FORCE_DIRECT_CALL ); - ((FloatingWindow*)pWin)->EndPopupMode( FLOATWIN_POPUPMODEEND_TEAROFF ); - } - else - { - aMEvnt = MouseEvent(Point(1,-10), 1, MOUSE_SIMPLECLICK,MOUSE_LEFT); - ImplMouseButtonUp( pTB, aMEvnt, FORCE_DIRECT_CALL ); - ReportError( aUId, GEN_RES_STR1( S_TEAROFF_FAILED, MethodString( nMethodId ) ) ); - } - } - } - break; - case M_OpenMenu : - { - FIND_ITEM; - if ( bItemFound ) // FIND_ITEM Erfolgreich - { - Rectangle aRect = pTB->GetItemPosDropDownRect( nItemPos ); - AnimateMouse( pControl, aRect.Center() ); - MouseEvent aMEvnt(aRect.Center(),1,MOUSE_SIMPLECLICK,MOUSE_LEFT); - ImplMouseButtonDown( pTB, aMEvnt); - ImplMouseButtonUp( pTB, aMEvnt); - - // Das Fenster ist offen. - aSubMenuId1 = 0; - aSubMenuId2 = 0; - aSubMenuId3 = 0; - pMenuWindow = NULL; - } - } - break; - case _M_IsEnabled: - { - FIND_ITEM; - if ( bItemFound ) // FIND_ITEM Erfolgreich - { - pRet->GenReturn ( RET_Value, aUId, pTB->IsItemEnabled( pTB->GetItemId(nItemPos) ) ); - } - } - break; - case M_GetState : - { - FIND_ITEM; - if ( bItemFound ) // FIND_ITEM Erfolgreich - { - if ( ValueOK( aUId, CUniString("GetState"), nNr1, 4 ) ) - switch (nNr1) - { - case 0: - pRet->GenReturn ( RET_Value, aUId, Id2Str( pTB->GetHelpId(pTB->GetItemId(nItemPos)) ) ); - break; - case 1: - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pTB->GetItemType(nItemPos)); - break; - case 2: - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pTB->GetItemState(pTB->GetItemId(nItemPos))); - break; - case 3: - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pTB->GetItemId(nItemPos)); - break; - default: - ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(0)); - break; - } - } - } - break; - case M_GetItemText : - pRet->GenReturn ( RET_Value, aUId, (String)pTB->GetItemText(nNr1)); - break; - case M_GetText : - pRet->GenReturn ( RET_Value, aUId, (String)pTB->GetText()); - break; - case M_GetItemCount : - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pTB->GetItemCount()); - break; - 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, aUId, (String)pTB->GetNextToolBox()); - break; - case M_Dock : - case M_Undock : - case M_IsDocked : - case M_Close: - case M_Size: - case M_Move: - case M_IsMax: - case M_Minimize: - case M_Maximize: - case M_Help: // Alles was unten weiterbehandelt werden soll - goto DockingWin; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ToolBox" ) ); - break; - } - } - break; - - case C_TreeListBox: - switch( nMethodId ) - { - - - -#define GET_NTH_ENTRY_LBOX( First, Next, Anzahl) \ - SvLBoxEntry *pThisEntry = ((SvTreeListBox*)pControl)->First(); \ - { \ - int niTemp = Anzahl; \ - while ( niTemp-- ) \ - { \ - pThisEntry = ((SvTreeListBox*)pControl)->Next( pThisEntry ); \ - } \ - } - - case M_GetText : // Get the first text of the given (default=1) line - { // should get removed some time - SvTreeListBox *pTree = (SvTreeListBox*)pControl; - SvLBoxEntry *pThisEntry = pTree->GetCurEntry(); - if ( ! (nParams & PARAM_UINT16_1) ) - nNr1 = 1; - if ( pThisEntry ) - { - SvLBoxString* pItem = NULL; - sal_uInt16 nValidTextItemCount = 0; - { - sal_uInt16 nIndex = 0; - SvLBoxItem *pMyItem; - while ( ( nValidTextItemCount < nNr1 ) && nIndex < pThisEntry->ItemCount() ) - { - pMyItem = pThisEntry->GetItem( nIndex ); - if ( pMyItem->IsA() == SV_ITEM_ID_LBOXSTRING ) - { - pItem = (SvLBoxString*)pMyItem; - nValidTextItemCount++; - } - nIndex++; - } - } - if ( ValueOK( aUId, CUniString("GetText"), nNr1, nValidTextItemCount ) ) - pRet->GenReturn ( RET_Value, aUId, pItem->GetText() ); - } - else - ReportError( aUId, GEN_RES_STR2c2( S_NO_SELECTED_ENTRY, MethodString( nMethodId ), "TreeListBox" ) ); - } - break; - case M_GetSelCount : - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(((SvLBox*)pControl)->GetSelectionCount())); - break; - case M_GetItemCount : - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(((SvLBox*)pControl)->GetVisibleCount()) ); - break; - case M_GetSelIndex : - if ( ! (nParams & PARAM_UINT16_1) ) - nNr1 = 1; - if ( ValueOK(aUId, CUniString("GetSelIndex"),nNr1,((SvLBox*)pControl)->GetSelectionCount()) ) - { - nNr1--; - GET_NTH_ENTRY_LBOX( FirstSelected, NextSelected, nNr1); - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( ((SvTreeListBox*)pControl)->GetVisiblePos( pThisEntry )) +1 ); - } - break; - case M_Select : - if ( ! (nParams & PARAM_BOOL_1) ) - bBool1 = sal_True; - if( nParams & PARAM_STR_1 ) - { - ReportError( aUId, GEN_RES_STR1( S_SELECT_DESELECT_VIA_STRING_NOT_IMPLEMENTED, MethodString( nMethodId ) ) ); - } - else - { - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) - { - SvLBoxEntry *pEntry = (SvLBoxEntry*)((SvTreeListBox*)pControl)->GetEntryAtVisPos( nNr1-1 ); - ((SvTreeListBox*)pControl)->Select ( pEntry, bBool1 ); - } - } - break; - case M_GetSelText : - if ( ! (nParams & PARAM_UINT16_1) ) - nNr1 = 1; - if ( ! (nParams & PARAM_UINT16_2) ) - nNr2 = 1; - if ( ValueOK(aUId, CUniString("GetSelText"),nNr1,((SvLBox*)pControl)->GetSelectionCount()) ) - { - nNr1--; - GET_NTH_ENTRY_LBOX( FirstSelected, NextSelected, nNr1); - if ( ValueOK( aUId, MethodString( nMethodId ),nNr2,pThisEntry->ItemCount() ) ) - { - SvLBoxString* pItem = NULL; - if ( ! (nParams & PARAM_UINT16_2) ) - pItem = (SvLBoxString*)pThisEntry->GetFirstItem( SV_ITEM_ID_LBOXSTRING ); - else - { - SvLBoxItem *pMyItem = pThisEntry->GetItem( nNr2-1 ); - if ( pMyItem->IsA() == SV_ITEM_ID_LBOXSTRING ) - pItem = (SvLBoxString*)pMyItem; - } - - if ( pItem ) - pRet->GenReturn ( RET_Value, aUId, pItem->GetText() ); - else - ReportError( aUId, GEN_RES_STR1( S_NO_LIST_BOX_STRING, MethodString( nMethodId ) ) ); - } - } - break; - case M_GetItemText : - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) - { - SvLBoxEntry *pThisEntry = (SvLBoxEntry*)((SvTreeListBox*)pControl)->GetEntryAtVisPos( nNr1-1 ); - if ( ! (nParams & PARAM_UINT16_2) ) - nNr2 = 1; - if ( ValueOK( aUId, MethodString( nMethodId ),nNr2,pThisEntry->ItemCount() ) ) - { - SvLBoxString* pItem = NULL; - if ( ! (nParams & PARAM_UINT16_2) ) - pItem = (SvLBoxString*)pThisEntry->GetFirstItem( SV_ITEM_ID_LBOXSTRING ); - else - { - SvLBoxItem *pMyItem = pThisEntry->GetItem( nNr2-1 ); - if ( pMyItem->IsA() == SV_ITEM_ID_LBOXSTRING ) - pItem = (SvLBoxString*)pMyItem; - } - - if ( pItem ) - pRet->GenReturn ( RET_Value, aUId, pItem->GetText() ); - else - ReportError( aUId, GEN_RES_STR1( S_NO_LIST_BOX_STRING, MethodString( nMethodId ) ) ); - } - } - break; - case M_IsChecked : - case M_IsTristate : - case M_GetState : - case M_Check : - case M_UnCheck : - case M_TriState : - { - SvTreeListBox *pTree = (SvTreeListBox*)pControl; - SvLBoxEntry *pThisEntry = NULL; - - if ( ! (nParams & PARAM_UINT16_1) ) - { - pThisEntry = pTree->GetCurEntry(); - if ( !pThisEntry ) - ReportError( aUId, GEN_RES_STR2c2( S_NO_SELECTED_ENTRY, MethodString( nMethodId ), "TreeListBox" ) ); - } - else - { - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) - { - pThisEntry = (SvLBoxEntry*)pTree->GetEntryAtVisPos( nNr1-1 ); - } - } - - if ( ! (nParams & PARAM_UINT16_2) ) - nNr2 = 1; - - if ( pThisEntry ) - { - if ( ValueOK( aUId, MethodString( nMethodId ),nNr2,pThisEntry->ItemCount() ) ) - { - SvLBoxButton* pItem = NULL; - if ( ! (nParams & PARAM_UINT16_2) ) - pItem = (SvLBoxButton*)pThisEntry->GetFirstItem( SV_ITEM_ID_LBOXBUTTON ); - else - { - SvLBoxItem *pMyItem = pThisEntry->GetItem( nNr2-1 ); - if ( pMyItem->IsA() == SV_ITEM_ID_LBOXBUTTON ) - pItem = (SvLBoxButton*)pMyItem; - } - - if ( pItem ) - { - switch( nMethodId ) - { - case M_IsChecked : - pRet->GenReturn ( RET_Value, aUId, comm_BOOL( pItem->IsStateChecked() ) ); - break; - case M_IsTristate : - pRet->GenReturn ( RET_Value, aUId, comm_BOOL( pItem->IsStateTristate() ) ); - break; - case M_GetState : - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( pItem->GetButtonFlags() & ~SV_STATE_MASK )); - break; - case M_Check : - if ( !pItem->IsStateChecked() ) - { - pItem->SetStateChecked(); - pTree->CheckButtonHdl(); - pTree->InvalidateEntry( pThisEntry ); - } - break; - case M_UnCheck : - if ( pItem->IsStateChecked() || pItem->IsStateTristate() ) - { - pItem->SetStateUnchecked(); - pTree->CheckButtonHdl(); - pTree->InvalidateEntry( pThisEntry ); - } - break; - case M_TriState : - if ( !pItem->IsStateTristate() ) - { - pItem->SetStateTristate(); - pTree->CheckButtonHdl(); - pTree->InvalidateEntry( pThisEntry ); - } - break; - default: - ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); - break; - } - } - else - ReportError( aUId, GEN_RES_STR1( S_NO_LIST_BOX_BUTTON, MethodString( nMethodId ) ) ); - } - } - } - break; - case M_GetItemType : - { - SvTreeListBox *pTree = (SvTreeListBox*)pControl; - SvLBoxEntry *pThisEntry = NULL; - - if ( ! (nParams & PARAM_UINT16_1) ) - { - pThisEntry = pTree->GetCurEntry(); - if ( !pThisEntry ) - ReportError( aUId, GEN_RES_STR2c2( S_NO_SELECTED_ENTRY, MethodString( nMethodId ), "TreeListBox" ) ); - } - else - { - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,((SvLBox*)pControl)->GetVisibleCount()) ) - { - pThisEntry = (SvLBoxEntry*)pTree->GetEntryAtVisPos( nNr1-1 ); - } - } - - if ( pThisEntry ) - { - if ( ! (nParams & PARAM_UINT16_2) ) - nNr2 = 1; - if ( ValueOK( aUId, MethodString( nMethodId ),nNr2,pThisEntry->ItemCount() ) ) - { - SvLBoxItem *pMyItem = pThisEntry->GetItem( nNr2-1 ); - comm_UINT16 nType; - switch ( pMyItem->IsA() ) - { - case SV_ITEM_ID_LBOXSTRING: nType = CONST_ItemTypeText ; break; - case SV_ITEM_ID_LBOXBMP: nType = CONST_ItemTypeBMP ; break; - case SV_ITEM_ID_LBOXBUTTON: nType = CONST_ItemTypeCheckbox ; break; - case SV_ITEM_ID_LBOXCONTEXTBMP: nType = CONST_ItemTypeContextBMP ; break; - default: nType = CONST_ItemTypeUnknown; - } - pRet->GenReturn ( RET_Value, aUId, nType ); - } - } - } - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "TreeListBox" ) ); - break; - } - break; - case C_Control: - { - sal_uInt16 nRealControlType = 0; - if ( dynamic_cast< EditBrowseBox* >(pControl) ) - nRealControlType = CONST_CTBrowseBox; - else if ( dynamic_cast< ValueSet* >(pControl) ) - nRealControlType = CONST_CTValueSet; - else if ( dynamic_cast< ORoadmap* >(pControl) ) - nRealControlType = CONST_CTORoadmap; - else if ( dynamic_cast< IExtensionListBox* >(pControl) ) - nRealControlType = CONST_CTIExtensionListBox; - else if ( dynamic_cast< ::svt::table::TableControl* >(pControl) ) - nRealControlType = CONST_CTTableControl; - else - nRealControlType = CONST_CTUnknown; - - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteOben); - break; - default: - switch( nRealControlType ) - { - case CONST_CTBrowseBox: - { - EditBrowseBox* pEBBox = dynamic_cast< EditBrowseBox* >(pControl); - switch( nMethodId ) - { - case M_GetSelText : - { - pRet->GenReturn ( RET_Value, aUId, pEBBox->GetCellText( pEBBox->GetCurrRow(), pEBBox->GetColumnId( pEBBox->GetCurrColumn() ))); - } - break; - case M_GetColumnCount : - { - sal_uInt16 nColCount = pEBBox->GetColumnCount(); - comm_UINT16 nUnfrozenColCount = 0; - sal_uInt16 i; - for ( i=0 ; i < nColCount ; i++ ) - { - if ( !pEBBox->IsFrozen( pEBBox->GetColumnId( i ) ) ) - nUnfrozenColCount++; - } - pRet->GenReturn ( RET_Value, aUId, nUnfrozenColCount ); - } - break; - case M_GetRowCount : - { - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pEBBox->GetRowCount() ); - } - break; - case M_IsEditing : - { - CellControllerRef aControler; - aControler = pEBBox->Controller(); - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)aControler.Is() ); - } - break; - case M_Select : - { - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,pEBBox->GetRowCount() ) ) - { - sal_uInt16 nColCount = pEBBox->GetColumnCount(); - comm_UINT16 nUnfrozenColCount = 0; - sal_uInt16 i; - for ( i=0 ; i < nColCount ; i++ ) - { - if ( !pEBBox->IsFrozen( pEBBox->GetColumnId( i ) ) ) - nUnfrozenColCount++; - } - if ( ValueOK(aUId, MethodString( nMethodId ),nNr2,nUnfrozenColCount ) ) - pEBBox->GoToRowColumnId( nNr1-1, pEBBox->GetColumnId( nNr2 ) ); - } - } - break; - - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "EditBrowseBox" ) ); - break; - } - } - break; - case CONST_CTValueSet: - { - ValueSet *pVS = dynamic_cast< ValueSet* >(pControl); - switch ( nMethodId ) - { - case M_GetItemCount: - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( pVS->GetItemCount())); - break; - case M_GetItemText: - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pVS->GetItemCount() )) - pRet->GenReturn ( RET_Value, aUId, pVS->GetItemText( pVS->GetItemId( nNr1-1 ) ) ); - break; - case M_Select: - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pVS->GetItemCount() )) - pVS->SelectItem( pVS->GetItemId( nNr1-1 ) ); - break; - case M_GetSelIndex : - if ( pVS->IsNoSelection() ) - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(0)); - else - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( pVS->GetItemPos( pVS->GetSelectItemId() ) +1)); - break; - case M_GetSelText : - if ( pVS->IsNoSelection() ) - pRet->GenReturn ( RET_Value, aUId, String() ); - else - pRet->GenReturn ( RET_Value, aUId, pVS->GetItemText( pVS->GetSelectItemId() ) ); - break; - case M_SetNoSelection : - pVS->SetNoSelection(); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "ValueSet" ) ); - break; - } - } - break; - case CONST_CTORoadmap: - { - ORoadmap *pRM = dynamic_cast< ORoadmap* >(pControl); - switch ( nMethodId ) - { - case M_GetItemCount: - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( pRM->GetItemCount())); - break; - case M_GetItemText: - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pRM->GetItemCount() )) - pRet->GenReturn ( RET_Value, aUId, pRM->GetRoadmapItemLabel( pRM->GetItemID( nNr1-1 ) ) ); - break; - case M_Select: - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pRM->GetItemCount() )) - { - if ( pRM->IsRoadmapItemEnabled( pRM->GetItemID( nNr1-1 ) ) ) - pRM->SelectRoadmapItemByID( pRM->GetItemID( nNr1-1 ) ); - else - ReportError( aUId, GEN_RES_STR1c( S_WIN_DISABLED, "RoadmapItem" ) ); - } - break; - case M_GetSelIndex : - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( pRM->GetItemIndex( pRM->GetCurrentRoadmapItemID() ) +1)); - break; - case M_GetSelText : - pRet->GenReturn ( RET_Value, aUId, pRM->GetRoadmapItemLabel( pRM->GetCurrentRoadmapItemID() ) ); - break; - case M_IsItemEnabled : - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pRM->GetItemCount() )) - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL)pRM->IsRoadmapItemEnabled( pRM->GetItemID( nNr1-1 ) ) ); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "RoadMap" ) ); - break; - } - } - break; - case CONST_CTIExtensionListBox: - { - IExtensionListBox *pELB = dynamic_cast< IExtensionListBox* >(pControl); - switch ( nMethodId ) - { - case M_GetItemCount: - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( pELB->getItemCount())); - break; - case M_GetItemText: - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pELB->getItemCount() )) - switch ( nNr2 ) - { - case 1: - pRet->GenReturn ( RET_Value, aUId, pELB->getItemName( nNr1 -1 ) ); - break; - case 2: - pRet->GenReturn ( RET_Value, aUId, pELB->getItemVersion( nNr1 -1 ) ); - break; - case 3: - pRet->GenReturn ( RET_Value, aUId, pELB->getItemDescription( nNr1 -1 ) ); - break; - case 4: - pRet->GenReturn ( RET_Value, aUId, pELB->getItemPublisher( nNr1 -1 ) ); - break; - case 5: - pRet->GenReturn ( RET_Value, aUId, pELB->getItemPublisherLink( nNr1 -1 ) ); - break; - default: - ValueOK( aUId, MethodString( nMethodId ).AppendAscii(" String Number"), nNr2, 5 ); - } - break; - case M_Select: - if ( (nParams & PARAM_UINT16_1) ) - { - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pELB->getItemCount() )) - { - pELB->select( nNr1-1 ); - } - } - else if ( (nParams & PARAM_STR_1) ) - { - pELB->select( aString1 ); - sal_Bool bSuccess = sal_True; - if ( pELB->getSelIndex() == EXTENSION_LISTBOX_ENTRY_NOTFOUND ) - bSuccess = sal_False; - else - { - if ( !aString1.Equals( String( pELB->getItemName( pELB->getSelIndex() ) ) ) ) - bSuccess = sal_False; - } - if ( !bSuccess ) - ReportError( aUId, GEN_RES_STR2( S_ENTRY_NOT_FOUND, MethodString( nMethodId ), aString1 ) ); - } - break; - case M_GetSelCount : - if ( pELB->getSelIndex() == EXTENSION_LISTBOX_ENTRY_NOTFOUND ) - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( 0 )); - else - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( 1 )); - break; - case M_GetSelIndex : - if ( pELB->getSelIndex() == EXTENSION_LISTBOX_ENTRY_NOTFOUND ) - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( 0 )); - else - pRet->GenReturn ( RET_Value, aUId, comm_UINT32( pELB->getSelIndex() +1)); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "RoadMap" ) ); - break; - } - } - break; - - case CONST_CTTableControl: - { - ::svt::table::TableControl *pTC = dynamic_cast< ::svt::table::TableControl* >(pControl); - switch ( nMethodId ) - { - case M_GetItemType : - { - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pTC->GetColumnCount() ) && - ValueOK( aUId, MethodString( nMethodId ), nNr2, pTC->GetRowCount() )) - { - ::svt::table::PTableModel pModel = pTC->GetModel(); - Any aCell; - pModel->getCellContent( nNr1-1, nNr2-1, aCell ); - pRet->GenReturn ( RET_Value, aUId, String( aCell.getValueTypeName() )); - } - } - break; - case M_GetItemText : - { - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pTC->GetColumnCount() ) && - ValueOK( aUId, MethodString( nMethodId ), nNr2, pTC->GetRowCount() )) - { - ::svt::table::PTableModel pModel = pTC->GetModel(); - Any aCell; - pModel->getCellContent( nNr1-1, nNr2-1, aCell ); - - Type aType = aCell.getValueType(); - TypeClass eTypeClass = aType.getTypeClass(); - switch( eTypeClass ) - { - case TypeClass_BOOLEAN: - pRet->GenReturn ( RET_Value, aUId, *(sal_Bool*)aCell.getValue() ); - break; - case TypeClass_CHAR: - { - ::rtl::OUString aContent( *(sal_Unicode*)aCell.getValue() ); - pRet->GenReturn ( RET_Value, aUId, aContent ); - } - break; - case TypeClass_STRING: - { - ::rtl::OUString aContent; - aCell >>= aContent; - pRet->GenReturn ( RET_Value, aUId, aContent ); - } - break; - case TypeClass_BYTE: - case TypeClass_SHORT: - case TypeClass_LONG: - case TypeClass_HYPER: - case TypeClass_UNSIGNED_LONG: - case TypeClass_UNSIGNED_HYPER: - { - comm_UINT32 val = 0; - aCell >>= val; - pRet->GenReturn ( RET_Value, aUId, val ); - } - break; - case TypeClass_UNSIGNED_SHORT: - { - comm_UINT16 val = 0; - aCell >>= val; - pRet->GenReturn ( RET_Value, aUId, val ); - } - break; - default: - pRet->GenReturn ( RET_Value, aUId, comm_UINT16(0) ); - break; - } - } - } - break; - case M_GetColumnCount : - { - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pTC->GetColumnCount() ); - } - break; - case M_GetRowCount : - { - pRet->GenReturn ( RET_Value, aUId, (comm_UINT32)pTC->GetRowCount() ); - } - break; - case M_Select : - { - if ( ValueOK( aUId, MethodString( nMethodId ), nNr1, pTC->GetRowCount() )) - { - if ( pTC->GoToRow( ::svt::table::RowPos( nNr1-1 ) ) ) - { - Size aSize( pTC->GetSizePixel() ); - Point aPos( aSize.Width() / 2, aSize.Height() / 2 ); - long nStep = aSize.Height() / 4; - ::svt::table::RowPos nLastPos; - while ( ( nLastPos = pTC->getTableControlInterface().hitTest( aPos ).nRow ) != nNr1-1 && nStep > 0 ) - { - if ( nLastPos > nNr1-1 || nLastPos == ROW_INVALID ) - aPos.Y() -= nStep; - else - aPos.Y() += nStep; - nStep /= 2; - } - if ( pTC->getTableControlInterface().hitTest( aPos ).nRow == nNr1-1 ) - { - MouseEvent aMEvnt(aPos,1,MOUSE_SIMPLECLICK|MOUSE_SELECT,MOUSE_LEFT,KEY_MOD1); - pTC->getSelEngine()->SelMouseButtonDown( aMEvnt ); - pTC->getSelEngine()->SelMouseButtonUp( aMEvnt ); - if ( pTC->IsRowSelected( nNr1-1 ) ) - pTC->Select(); - } - else - ReportError( aUId, GEN_RES_STR2c2( S_METHOD_FAILED, MethodString( nMethodId ), "find pos" ) ); - } - else - ReportError( aUId, GEN_RES_STR2c2( S_METHOD_FAILED, MethodString( nMethodId ), "GoTo" ) ); - } - } - break; - case M_GetSelCount : - pRet->GenReturn ( RET_Value, aUId, comm_UINT16( pTC->GetSelectedRowCount() )); - break; - case M_GetSelIndex : - if ( ! (nParams & PARAM_UINT16_1) ) - nNr1 = 1; - if ( ValueOK( aUId, CUniString("GetSelIndex"), nNr1, pTC->GetSelectedRowCount() ) ) - pRet->GenReturn ( RET_Value, aUId, comm_UINT16( pTC->GetSelectedRowIndex( nNr1-1 ) +1 ) ); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "TableControl" ) ); - break; - } - } - break; - - case CONST_CTUnknown: - ReportError( aUId, GEN_RES_STR2( S_UNKNOWN_TYPE, UniString::CreateFromInt32( nRT ), MethodString(nMethodId) ) ); - break; - default: - ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); - break; - } - } - break; - } - case C_Window: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteOben); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "Window" ) ); - break; - } - break; - - case C_DockingWin: - DockingWin: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteOben); - break; - case M_Dock : - if ( ((DockingWindow*)pControl)->IsFloatingMode() ) - ((DockingWindow*)pControl)->SetFloatingMode(sal_False); - else - ReportError( aUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_FLOATING_MODE, MethodString( nMethodId ) ) ); - break; - case M_Undock : - if ( !((DockingWindow*)pControl)->IsFloatingMode() ) - ((DockingWindow*)pControl)->SetFloatingMode(sal_True); - else - ReportError( aUId, GEN_RES_STR1( S_ALLOWED_ONLY_IN_FLOATING_MODE, MethodString( nMethodId ) ) ); - break; - case M_IsDocked : - pRet->GenReturn ( RET_Value, aUId, (comm_BOOL) !((DockingWindow*)pControl)->IsFloatingMode()); - break; - case M_Close: - DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != 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() ) - { - Window* pFloat = ((DockingWindow*)pControl)->GetFloatingWindow(); - if ( !pFloat && ((DockingWindow*)pControl)->IsFloatingMode() ) - { - if ( pControl->GET_REAL_PARENT() && pControl->GET_REAL_PARENT()->GetType() == WINDOW_FLOATINGWINDOW ) - pFloat = pControl->GET_REAL_PARENT(); - else - { - OSL_FAIL("FloatingMode set but Parent is no FloatingWindow"); - } - } - if ( pFloat && pFloat->GetType() == WINDOW_FLOATINGWINDOW ) - { - pControl = pFloat; - goto FloatWin; - } - else - ReportError( aUId, GEN_RES_STR1( S_CANNOT_FIND_FLOATING_WIN, MethodString( nMethodId ) ) ); - } - else - ReportError( aUId, 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( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "DockingWindow" ) ); - break; - } - break; - case C_FloatWin: - FloatWin: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteOben); - break; - case M_IsMax : - pRet->GenReturn ( RET_Value, aUId, (comm_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 ) - { - Size aMin = ((FloatingWindow*)pControl)->GetMinOutputSizePixel(); - if ( aMin.Width() <= nNr1 && aMin.Height() <= nNr2 ) - { - pControl->SetSizePixel(Size(nNr1,nNr2)); - pControl->Resize(); - } - else - { - ReportError( aUId, GEN_RES_STR2( S_SIZE_BELOW_MINIMUM, String::CreateFromInt32( aMin.Width() ), String::CreateFromInt32( aMin.Height() ) ) ); - } - } - else - ReportError( aUId, GEN_RES_STR1( S_SIZE_NOT_CHANGEABLE, MethodString( nMethodId ) ) ); - break; - } - case M_Close: - DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != 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( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "FloatingWin" ) ); - break; - } - break; - case C_ModelessDlg: - case C_ModalDlg: - case C_Dialog: - case C_TabDlg: - MoreDialog: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteOben); - break; - case M_Close: - DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); - SET_WINP_CLOSING(pControl); - ((SystemWindow*)pControl)->Close(); - break; - case M_OK: - { - Window *pChild = GetWinByRT( pControl, WINDOW_OKBUTTON ); - if( ControlOK( pChild, "OK Button" ) ) - { - DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); - SET_WINP_CLOSING(pControl); - ((Button*)pChild)->Click(); - } - break; - } - case M_Cancel: - { - Window *pChild = GetWinByRT( pControl, WINDOW_CANCELBUTTON ); - if( ControlOK( pChild, "Cancel Button" ) ) - { - DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); - SET_WINP_CLOSING(pControl); - ((Button*)pChild)->Click(); - } - break; - } - case M_Help: - { - Window *pChild = GetWinByRT( pControl, WINDOW_HELPBUTTON ); - if( ControlOK( pChild, "Help Button" ) ) - ((Button*)pChild)->Click(); - break; - } - case M_Default: - { - Window *pChild = ImpGetButton( pControl, WB_DEFBUTTON, WB_DEFBUTTON ); - if( ControlOK( pChild, "Default Button" ) ) - ((Button*)pChild)->Click(); - break; - } - case M_Move: - { - pControl->SetPosPixel(Point(nNr1,nNr2)); - break; - } - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "Dialog" ) ); - break; - } - break; - case C_WorkWin: - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, MitteOben); - break; - case M_Close: - DBG_ASSERT( aUId.equals( pControl->GetUniqueOrHelpId() ), "aUID != UniqueOrHelpId"); - SET_WINP_CLOSING(pControl); - ((WorkWindow*)pControl)->Close(); - break; - case M_Size: - case M_Move: - goto FloatWin; - case M_IsMax : - pRet->GenReturn ( RET_Value, aUId, ((WorkWindow*)pControl)->IsMaximized() ); - break; - case M_IsMin : - pRet->GenReturn ( RET_Value, aUId, ((WorkWindow*)pControl)->IsMinimized() ); - break; - case M_IsRestore : - pRet->GenReturn ( RET_Value, aUId, comm_BOOL (!((WorkWindow*)pControl)->IsMaximized() && !((WorkWindow*)pControl)->IsMinimized()) ); - break; - case M_Minimize : - ((WorkWindow*)pControl)->Maximize( sal_False ); - ((WorkWindow*)pControl)->Minimize(); - break; - case M_Maximize : - ((WorkWindow*)pControl)->Maximize(); - break; - case M_Restore : - ((WorkWindow*)pControl)->Maximize( sal_False ); - ((WorkWindow*)pControl)->Restore(); - break; - case M_Help: // Alles was unten weiterbehandelt werden soll - goto MoreDialog; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "WorkWindow" ) ); - break; - } - break; - case C_TabPage: - ReportError( aUId, GEN_RES_STR1( S_INTERNAL_ERROR, MethodString( nMethodId ) ) ); - break; - case C_MessBox: - case C_InfoBox: - case C_WarningBox: - case C_ErrorBox: - case C_QueryBox: - { - sal_Bool bDone = sal_True; - MessBox* pMB = (MessBox*)pControl; - switch( nMethodId ) - { - case M_GetCheckBoxText: - pRet->GenReturn ( RET_Value, aUId, pMB->GetCheckBoxText() ); - break; - case M_IsChecked : - pRet->GenReturn ( RET_Value, aUId, comm_BOOL( pMB->GetCheckBoxState() == STATE_CHECK) ); - break; - case M_Check : - pMB->SetCheckBoxState( sal_True ); - break; - case M_UnCheck : - pMB->SetCheckBoxState( sal_False ); - break; - case M_GetText : - pRet->GenReturn ( RET_Value, aUId, pMB->GetMessText()); - break; - - default: - bDone = sal_False; - break; - } - if ( bDone ) - break; // break the case here else continue at C_ButtonDialog - } - case C_ButtonDialog: - { - ButtonDialog* pBD = (ButtonDialog*)pControl; -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "Working MessBox: " ); - if (pControl->IsVisible()) - m_pDbgWin->AddText("*(Visible)\n"); - else - m_pDbgWin->AddText("*(nicht Visible)\n"); -#endif - switch( nMethodId ) - { - case M_AnimateMouse : - AnimateMouse( pControl, Mitte); - break; - case M_OK: - if ( pBD->GetPushButton( BUTTONID_OK ) ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_OK); - } - else - ReportError( aUId, GEN_RES_STR1( S_NO_OK_BUTTON, MethodString( nMethodId ) ) ); - break; - case M_Cancel: - if ( pBD->GetPushButton( BUTTONID_CANCEL ) ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_CANCEL); - } - else - ReportError( aUId, GEN_RES_STR1( S_NO_CANCEL_BUTTON, MethodString( nMethodId ) ) ); - break; - case M_Yes: - if ( pBD->GetPushButton( BUTTONID_YES ) ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_YES); - } - else - ReportError( aUId, GEN_RES_STR1( S_NO_YES_BUTTON, MethodString( nMethodId ) ) ); - break; - case M_No: - if ( pBD->GetPushButton( BUTTONID_NO ) ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_NO); - } - else - ReportError( aUId, GEN_RES_STR1( S_NO_NO_BUTTON, MethodString( nMethodId ) ) ); - break; - case M_Repeat: - if ( pBD->GetPushButton( BUTTONID_RETRY ) ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_RETRY); - } - else - ReportError( aUId, GEN_RES_STR1( S_NO_RETRY_BUTTON, MethodString( nMethodId ) ) ); - break; - case M_Help: - if ( pBD->GetPushButton( BUTTONID_HELP ) ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(BUTTONID_HELP); - } - else - ReportError( aUId, GEN_RES_STR1( S_NO_HELP_BUTTON, MethodString( nMethodId ) ) ); - break; - case M_Default: - { - WinBits Style = pControl->GetStyle(); - if ( Style & WB_DEF_OK ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_OK); - } - else if ( Style & WB_DEF_CANCEL ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_CANCEL); - } - else if ( Style & WB_DEF_YES ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_YES); - } - else if ( Style & WB_DEF_NO ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_NO); - } - else if ( Style & WB_DEF_RETRY ) - { - SET_WINP_CLOSING(pControl); - pBD->EndDialog(RET_RETRY); - } - else - ReportError( aUId, GEN_RES_STR1( S_NO_DEFAULT_BUTTON, MethodString( nMethodId ) ) ); - } - break; - case M_GetText : - pRet->GenReturn ( RET_Value, aUId, pControl->GetText()); - break; - case M_Click: - if ( nParams & PARAM_UINT16_1 ) - { - if ( pBD->GetPushButton( nNr1 ) ) - { - if ( nNr1 != BUTTONID_HELP ) - { - SET_WINP_CLOSING(pControl); - } - pBD->GetPushButton( nNr1 )->Click(); - } - else - ReportError( aUId, GEN_RES_STR2( S_NO_DEFAULT_BUTTON, UniString::CreateFromInt32( nNr1 ), MethodString( nMethodId ) ) ); - } - else - ReportError( aUId, GEN_RES_STR1( S_BUTTONID_REQUIRED, MethodString( nMethodId ) ) ); - break; - case M_GetButtonCount : - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(pBD->GetButtonCount())); - break; - case M_GetButtonId : - if ( ValueOK(aUId, MethodString( nMethodId ),nNr1,pBD->GetButtonCount()) ) - pRet->GenReturn ( RET_Value, aUId, comm_UINT32(pBD->GetButtonId(nNr1-1))); - break; - default: - ReportError( aUId, GEN_RES_STR2c2( S_UNKNOWN_METHOD, MethodString(nMethodId), "MessageBox" ) ); - break; - } - break; - } - default: - OSL_FAIL( "Unknown Objekttype from UId or Method not suported" ); - ReportError( aUId, GEN_RES_STR2( S_UNKNOWN_TYPE, UniString::CreateFromInt32( nRT ), MethodString(nMethodId) ) ); -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( " Unknown Objekttype from UId or Method not suported" ); -#endif - break; - } - } - for( int i = 0; i < 32; i++ ) - SafeReschedule(); - } -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( "\n" ); -#endif - if ( bStatementDone ) - { - SendProfile( UIdString( aUId ).Append('.').Append( MethodString( nMethodId ) ) ); - delete this; - } - else - { - if ( nRetryCount-- ) - { -#if OSL_DEBUG_LEVEL > 1 - m_pDbgWin->AddText( CUniString("Reschedule command (requed) (").Append( UniString::CreateFromInt32(nRetryCount) ).AppendAscii(")\n") ); -#endif - QueStatement( this ); // will que at the start of the list - } - else - { - bStatementDone=sal_True; - } - } - return bStatementDone; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |