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