merge the formfield patch from ooo-build
[ooovba.git] / testautomation / global / tools / includes / required / t_menu.inc
blob3b0833a51284c66073e0cb5c24b226973c8da4c1
1 'encoding UTF-8  Do not remove or change this line!
2 '*******************************************************************************
3 '* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 '*
5 '* Copyright 2008 by Sun Microsystems, Inc.
6 '*
7 '* OpenOffice.org - a multi-platform office productivity suite
8 '*
9 '* $RCSfile: t_menu.inc,v $
11 '* $Revision: 1.1 $
13 '* last change: $Author: jsi $ $Date: 2008-06-13 10:27:10 $
15 '* This file is part of OpenOffice.org.
17 '* OpenOffice.org is free software: you can redistribute it and/or modify
18 '* it under the terms of the GNU Lesser General Public License version 3
19 '* only, as published by the Free Software Foundation.
21 '* OpenOffice.org is distributed in the hope that it will be useful,
22 '* but WITHOUT ANY WARRANTY; without even the implied warranty of
23 '* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24 '* GNU Lesser General Public License version 3 for more details
25 '* (a copy is included in the LICENSE file that accompanied this code).
27 '* You should have received a copy of the GNU Lesser General Public License
28 '* version 3 along with OpenOffice.org.  If not, see
29 '* <http://www.openoffice.org/license.html>
30 '* for a copy of the LGPLv3 License.
32 '/******************************************************************************
34 '* Owner : thorsten.bosbach@sun.com
36 '* short description : wrappers for accessing menues (context-, bar-, button- menues)
38 '\******************************************************************************
40 function hMenuItemGetCount as Integer
42     '/// OUTPUT: number of entries in the activated menu (without seperators) ///'
43     '///+ menu left open ///'
44     dim iCurrentMenuItem as integer
45     dim iValidMenuItems as integer
47     sleep( 2 )
49     iValidMenuItems = 0
50     for iCurrentMenuItem = 1 to MenuGetItemCount
51         if ( NOT MenuIsSeperator ( iCurrentMenuItem ) ) then
52             iValidMenuItems = iValidMenuItems + 1
53         endif
54     next iCurrentMenuItem
55     hMenuItemGetCount = iValidMenuItems
57 end function
59 '*******************************************************************************
61 function hMenuSelectNr ( EintragsNr as Integer ) as String
63     '/// Selects the given nr. of <b>enabled</b> menu entry.
64     '/// <u>Note</u>: If there are disabled menu items are included the routine ignores them!
65     '///INPUT : number of entry from the top (>=1) OR
66     '///INPUT : number of entry from the bottom (<=-1)
67     '///INPUT : 0 to close menu
68     '///+ OUTPUT: text of the entry
70     Dim i, j, RealEnd, Ende as Integer
71     Dim nID as long
73     sleep( 2 )
75     Ende = EintragsNr
76     RealEnd = MenuGetItemCount
77     If (Ende > 0) then
78         if Ende > RealEnd then
79             Warnlog "hMenuSelectNr canceled: Entry number "+ Ende +" does not exists, because there are only " + RealEnd + "  entries! "
80             hMenuClose
81             exit function
82         endif
83         j=0
84         for i=1 to Ende
85             if MenuIsSeperator ( i+j ) then
86                 j = j+1
87             endif
88         next i
89     else
90         if ((RealEnd + Ende) < 0) then
91             Warnlog "hMenuSelectNr canceled: Entry number "+ Ende +" does not exists, because there are only " + RealEnd + "  entries! "
92             hMenuClose
93             exit function
94         endif
95         j=1
96         for i=-1 to Ende step -1
97             if MenuIsSeperator (RealEnd +i+j) then
98                 j = j -1
99             endif
100         next i
101         j = j + RealEnd
102     endif
103     if EintragsNr = 0 then
104         hMenuClose
105         exit function
106     endif
107     nID = MenuGetItemID ( EintragsNr+j )
108     hMenuSelectNr = MenuGetItemText ( nID )
109     MenuSelect ( nID )
111 end function
113 '*******************************************************************************
115 function hMenuItemCheck ( EintragsNr as Integer ) as String
117     '/// check the menu item (if it is checked, it stays checked) ///'
118     '///+ INPUT : number of entry from the top (>=1)///'
119     '///+ OUTPUT: text of the entry ///'
120     Dim i as Integer, j as Integer, RealEnd as Integer, Ende as Integer, nID as Integer
122     Ende = EintragsNr
123     RealEnd = hMenuItemGetCount
125     if Ende > RealEnd then
126         Warnlog "hMenuItemCheck canceled: Entry number "+ Ende +" does not exists, because there are only " + RealEnd + "  entries! "
127         hMenuClose
128         exit function
129     endif
130     j=0
131     for i=1 to Ende
132         if MenuIsSeperator ( i+j ) then
133             j = j+1
134         endif
135     next i
136     nID = MenuGetItemID ( EintragsNr+j )
137     hMenuItemCheck = MenuGetItemText ( nID )
138     if NOT MenuIsItemChecked ( nID ) then
139         MenuSelect ( nID )
140     else
141         hMenuClose()
142     endif
144 end function
146 '*******************************************************************************
148 function hMenuItemUnCheck ( EintragsNr as Integer ) as String
150     '/// UNcheck the menu item (if it is UNchecked, it stays UNchecked) ///'
151     '///+ INPUT : number of entry from the top (>=1)///'
152     '///+ OUTPUT: text of the entry ///'
153     Dim i, j, RealEnd, Ende, nID as Integer
155     Ende = EintragsNr
156     RealEnd = hMenuItemGetCount
157     if Ende > RealEnd then
158         Warnlog "hMenuItemUnCheck canceled: Entry number "+ Ende +" does not exists, because there are only " + RealEnd + "  entries! "
159         hMenuClose
160         exit function
161     endif
162     j=0
163     for i=1 to Ende
164         if MenuIsSeperator ( i+j ) then
165             j = j+1
166         endif
167     next i
168     nID = MenuGetItemID ( EintragsNr+j )
169     hMenuItemUnCheck = MenuGetItemText ( nID )
170     if MenuIsItemChecked ( nID ) then
171         MenuSelect ( nID )
172     else
173         hMenuClose()
174     endif
176 end function
178 '*******************************************************************************
180 function hMenuFindSelect(MenuID as variant, SelectSlot as Boolean, ExpectedNr as integer, optional VerboseWrongPosition as Boolean) as Boolean
182     '/// Find specified MenuID in Menu, check if its found on the expected place, ///'
183     '/// if not - report the correct slot, and if specified to do so - Select the correct slot. ///'
184     '///+ INPUT: MenuID: the string-name of the menu-entry we are lookin for. ///'
185     '///+ INPUT: TRUE, if the slot should be called, ///'
186     '///+            FALSE, if the slot shouldn't be called. ///'
187     '///+ INPUT: Optional: TRUE, if errors should be reported. ///'
188     '///+                           FALSE, silent mode for errors. ///'
189     '///+ INPUT: Optional: The Expected Number of entry from the top (>=1) ///'
190     '///+ OUTPUT: If not found at the expected place - the correct Entry-number is reported ///'
192     Dim i as Integer
193     Dim RealId as Integer
194     Dim RealPosition as Integer
195     Dim MenuIDAsNumber as integer
196     Dim MenuIDAsString as string
197     Dim RealEnd as Integer
198     Dim nID as string
199     Dim found as string
200     Dim StringType as Boolean
202     '/// find out if we are going to search for an ID, or a string (.uno:) ///'
203     if IsNumeric(MenuID) then
204         MenuIDAsNumber = MenuID
205         StringType = FALSE
206     else
207         MenuIDAsString = MenuID
208         StringType = TRUE
209     endif
211     RealEnd = MenuGetItemCount
212     if ExpectedNr > RealEnd then
213         Warnlog "Entry number "+ ExpectedNr +" is higher than the number of entries (" + RealEnd + ") in this menu! "
214     endif
216     if StringType = FALSE then  'Search for the number.
218         nID = MenuGetItemID ( ExpectedNr )
219         if nID <> MenuID then
220             if VerboseWrongPosition = TRUE then
221                 warnlog " the questioned ID (" + MenuID + ") were not found on position " + ExpectedNr
222             endif
223             Found = FALSE
224             for i=1 to RealEnd
225                 nID = MenuGetItemID (i)
226                 printlog "For the position '" + i + "', the ItemCommand was: " + MenuGetItemCommand (MenuGetItemID (i)) + " and the ID was: " + MenuGetItemID (i) + "."
227                 if nID = MenuID then
228                     Found = TRUE
229                     RealID = MenuGetItemID (i)
230                     RealPosition = i
231                     if VerboseWrongPosition = TRUE then
232                         warnlog "The real Position (Separators included) was: " + i
233                     endif
234                     i = RealEnd
235                 endif
236             next i
237         else
238             Found = TRUE
239             RealPosition = ExpectedNr
240             RealId = MenuGetItemID (ExpectedNr)
241         endif
243         if Found = TRUE then
244             if SelectSlot then
245                 MenuSelect (RealID)
246                 hMenuFindSelect = TRUE
247             else
248                 printlog "the slot was found, but the tester had choosen NOT to open the slot"
249                 hMenuFindSelect = TRUE
250                 hMenuClose
251             endif
252         else
253             if VerboseWrongPosition = TRUE then
254                 warnlog "The slot was NOT found. Has either been removed, or it's a bug."
255             endif
256             hMenuFindSelect = FALSE
257             hMenuClose
258         endif
260     else 'StringType = TRUE   :   Seach for the .uno; -name.
261         nID = lCase(MenuGetItemCommand (MenuGetItemID (ExpectedNr)))
263         if nID <> lCase(MenuID) then
264             if VerboseWrongPosition = TRUE then
265                 warnlog " the questioned ID (" + MenuID + ") were not found on position " + ExpectedNr
266             endif
267             Found = FALSE
268             for i=1 to RealEnd
269                 nID = MenuGetItemCommand (MenuGetItemID (i))
270                 printlog "For the position '" + i + "', the ItemCommand was: " + nID + " and the ID was: " + MenuGetItemID (i) + "."
271                 if nID = MenuID then
272                     Found = TRUE
273                     RealID = MenuGetItemID (i)
274                     RealPosition = i
275                     if VerboseWrongPosition = TRUE then
276                         warnlog "The real Position (Separators included) was: " + i
277                     endif
278                     i = RealEnd
279                 endif
280             next i
281         else
282             Found = TRUE
283             RealPosition = ExpectedNr
284             RealId = MenuGetItemID (ExpectedNr)
285         endif
286         if Found = TRUE then
287             if SelectSlot then
288                 MenuSelect (RealID)
289                 hMenuFindSelect = TRUE
290             else
291                 printlog "the slot was found, but the tester had choosen NOT to open the slot"
292                 hMenuFindSelect = TRUE
293                 hMenuClose()
294             endif
295         else
296             if VerboseWrongPosition = TRUE then
297                 warnlog "The slot was NOT found. Has either been removed, or it's a bug."
298             endif
299             hMenuFindSelect = FALSE
300             hMenuClose()
301         endif
302     endif 'StringType = TRUE
303     wait 500   'Wait 0,5 seconds in case we just have called a Submenu.
305 end function
307 '*******************************************************************************
309 function hMenuItemIsChecked ( EintragsNr as Integer ) as Boolean
311     '/// is the the menu item checked ? ///'
312     '///+ INPUT : number of entry from the top (>=1)///'
313     '///+ OUTPUT: True = yes!, False = no! ///'
315     Dim i, j, Ende, RealEnd, nID as Integer
317     Ende = EintragsNr
318     RealEnd = hMenuItemGetCount
319     if Ende > RealEnd then
320         Warnlog "hMenuItemIsChecked canceled: Entry number "+ Ende +" does not exists, because there are only " + RealEnd + "  entries! "
321         hMenuClose
322         exit function
323     endif
324     j=0
325     for i=1 to Ende
326         if MenuIsSeperator ( i+j ) then
327             j = j+1
328         endif
329     next i
330     nID = MenuGetItemID ( EintragsNr + j )
331     hMenuItemIsChecked = MenuIsItemChecked ( nID )
333 end function
335 '*******************************************************************************
337 function hMenuItemIsEnabled ( EintragsNr as Integer ) as Boolean
339     '/// is the the menu item enabled (not greyed out) ? ///'
340     '///+ INPUT : number of entry from the top (>=1)///'
341     '///+ OUTPUT: True = yes!, False = no! ///'
342     '///+ menu left open ///'
344     Dim i, j, Ende, RealEnd, nID as Integer
346     Ende = EintragsNr
347     RealEnd = MenuGetItemCount
348     if Ende > RealEnd then
349         Warnlog "hMenuItemIsEnabled canceled: Entry number "+ Ende +" does not exists, because there are only " + RealEnd + "  entries! "
350         hMenuClose
351         exit function
352     endif
353     j=0
354     for i=1 to Ende
355         if MenuIsSeperator ( i+j ) then
356             j = j+1
357         endif
358     next i
359     nID = MenuGetItemID ( EintragsNr + j )
360     hMenuItemIsEnabled = MenuIsItemEnabled ( nID )
362 end function
364 '*******************************************************************************
366 function hMenuItemGetText ( EintragsNr as Integer ) as String
368     '///+ INPUT : number of entry from the top (>=1)///'
369     '///+ OUTPUT: text of item without tilde ///'
370     '///+ menu left open ///'
372     Dim i, j, RealEnd, Ende, nID as Integer
374     Ende = EintragsNr
375     RealEnd = MenuGetItemCount
376     if Ende > RealEnd then
377         Warnlog "hMenuItemGetText canceled: Entry number "+ Ende +" does not exists, because there are only " + RealEnd + "  entries! "
378         hMenuClose
379         exit function
380     endif
381     j=0
382     for i=1 to Ende
383         if MenuIsSeperator ( i+j ) then
384             j = j+1
385         endif
386     next i
387     nID = MenuGetItemID ( EintragsNr + j )
388     hMenuItemGetText = hhEntferneTilde ( MenuGetItemText ( nID ) )
390 end function
392 '*******************************************************************************
394 sub hMenuClose
396     '/// close menue ///'
397     '///+ after a hMenuClose you have to execute Kontext.UseMenu again
398     '///+ if you want to open any other menu.
399     MenuSelect ( 0 )
401 end sub
403 '*******************************************************************************
405 function hhEntferneTilde ( sEintrag as String ) as String
407     '///+ INPUT : string with tilde ///'
408     '///+ OUTPUT: string without tilde ///'
410     Dim i
411     i = Instr ( 1, sEintrag, "~", 1 )
412     if i <> 0 then
413         hhEntferneTilde = Left ( sEintrag, i-1 ) + Right ( sEintrag, ( Len(sEintrag) - i ) )
414     else
415         hhEntferneTilde = sEintrag
416     endif
418 end function
420 '*******************************************************************************
422 function hMenuGetItemCommand ( EintragsNr as Integer ) as String
424     '/// <u>hMenuGetItemCommand(Nr)</u> ///
425     '///+ To read the slot/UNO slot which is behind a menu item. ///
426     '///+ Seperators will be ignored for the input INTEGER!
428     Dim i as integer
429     Dim j as integer
430     Dim RealEnd as integer
431     Dim DasEnde as integer
432     Dim nID as Integer
433     DasEnde = EintragsNr
434     RealEnd = MenuGetItemCount
435     if DasEnde > RealEnd then
436         warnlog "Parameter (" & DasEnde & ") bigger than items in menu (" & RealEnd & ") , 'hMenuGetItemCommand' canceled."
437     else
438         j=0
439         for i=1 to DasEnde
440             if MenuIsSeperator ( i+j ) then
441                 j = j+1
442             endif
443         next i
444         nID = MenuGetItemID ( EintragsNr+j )
445         hMenuGetItemCommand = MenuGetItemCommand ( nID )
446     endif
448 end function
450 '*******************************************************************************
452 function hMenuGetItemId ( EintragsNr as Integer ) as integer
454     '///+ To read the Slot ID which is behind a menu item. ///
455     '///+ Seperators will be ignored for the input INTEGER!
457     Dim i as integer
458     Dim j as integer
459     Dim RealEnd as integer
460     Dim DasEnde as integer
461     DasEnde = EintragsNr
462     RealEnd = MenuGetItemCount
463     if DasEnde > RealEnd then
464         warnlog "Parameter (" & DasEnde & ") bigger than items in menu (" & RealEnd & ") , 'hMenuGetItemId' canceled."
465     else
466         j=0
467         for i=1 to DasEnde
468             if MenuIsSeperator ( i+j ) then
469                 j = j+1
470             endif
471         next i
472         hMenuGetItemId = MenuGetItemID ( EintragsNr+j )
473     endif
475 end function
477 '*******************************************************************************
479 '/// Functions for the lower part of the 'Window' Menu ///'
480 '///+ philosophie: you can't do any actions on the first document -> it get's the number 0 and it doesn't count ///'
481 '///+ so the first window you can work with gets the number 1 and counting starts with 1 ... ///'
482 '///<b> function hUseMenu () </b>///'
483 '///+ very global function: depends on 'gApplication' just activates the menu-bar ///'
484 '///<b> function hWindowGetIndex () as integer </b>///'
485 '///+ returns the number of the active window ///'
486 '///<b> function hWindowGetText (optional iWindow as integer) as string </b>///'
487 '///+ returns the text of the menu entry without the tilde: ///'
488 '///+ w/ calling parameter: the active window ///'
489 '///+ w/o calling parameter: the window i ///'
490 '///<b> function hWindowSelect (iWindow as integer) </b>///'
491 '///+ switches to the window i ///'
492 '///+ calling parameter: id of the window to activate ///'
494 '*******************************************************************************
496 function hWindowGetIndex () as integer
498     '///<b> function hWindowGetIndex () as integer </b>///'
499     '///+ returns the number of the active window ///'
501     dim iMenues as integer      ' takes the number of entries in the windows menue
502     dim iNotWindows as integer  ' number of open windows
503     dim iKandidate as integer
504     dim i as integer
506     iNotWindows = GetDocumentCount()
507     hUseMenu()
509     iMenues = hMenuItemGetCount
510     hMenuSelectNr(iMenues-1)    ' 'windows' ist usually the one before the last
511     waitslot() 'wait 200
512     iKandidate = 0
513     iMenues = hMenuItemGetCount
514     for i = ((iMenues - iNotWindows) + 1) to iMenues
515         if (hMenuItemIsChecked (i)) then
516             if (iKandidate = 0) then
517                 iKandidate = i
518             else
519                 Warnlog "unexpected error 4711 - more than one window active??!! hWindowGetIndex () "
520             endif
521         endif
522     next i
523     iMenues = (iKandidate - (iMenues - iNotWindows) - 1)
524     hMenuClose()
526     hWindowGetIndex = iMenues
528 end function
530 '*******************************************************************************
532 function hWindowGetText (optional iWindow as integer) as string
534     '///<b> function hWindowGetText (optional iWindow as integer) as string </b>///'
535     '///+ returns the text of the menu entry without the tilde: ///'
536     '///+ w/ calling parameter: the active window ///'
537     '///+ w/o calling parameter: the window i ///'
539     dim iMenues as integer      ' takes the number of entries in the windows menue
540     dim iNotWindows as integer  ' number of open windows
541     dim iUseWindow
543     if (isMissing(iWindow) = FALSE) then
544         iUseWindow = iWindow
545     else
546         iUseWindow = hWindowGetIndex()
547     endif
549     iNotWindows = GetDocumentCount()
550     hUseMenu()
552     iMenues = hMenuItemGetCount
553     hMenuSelectNr(iMenues-1)    ' 'windows' ist usually the one before the last
555     waitslot() 'wait 200
556     iMenues = hMenuItemGetCount
557     hWindowGetText = hMenuItemGetTextMitTilde (iUseWindow + (iMenues - iNotWindows) + 1)
558     hWindowGetText = hhEntferneTilde(hWindowGetText)
559     hMenuClose()
561 end function
563 '*******************************************************************************
565 function hWindowSelect (iWindow as integer)
567     '///<b> function hWindowSelect (iWindow as integer) </b>///'
568     '///+ switches to the window i ///'
569     '///+ calling parameter: id of the window to activate ///'
571     dim iMenues as integer      ' takes the number of entries in the windows menue
572     dim iNotWindows as integer  ' number of open windows
574     iNotWindows = GetDocumentCount ()
575     hUseMenu()
577     'ActivateDocument iNumber as integer ' is a testtool command, but there is no system that stays behind iNumber :-[
578     iMenues = hMenuItemGetCount
579     hMenuSelectNr(iMenues-1)    ' 'windows' ist usually the one before the last
580     WaitSlot() 'wait 200
582     iMenues = hMenuItemGetCount
583     hMenuSelectNr (iWindow + 1 + (iMenues - iNotWindows))
585 end function
587 '*******************************************************************************
589 function hUseMenu ()
591     '///<b> function hUseMenu () </b>///'
592     '///+ very global function: depends on 'gApplication' just activates the menu-bar ///'
594     Select Case Ucase(gApplication)
595     Case "WRITER"
597         Kontext "DocumentWriter"
598         DocumentWriter.UseMenu
600     Case "MASTERDOCUMENT"
602         Kontext "DocumentMasterDoc"
603         DocumentMasterDoc.UseMenu
605     Case "HTML"
607         Kontext "DocumentWriterWeb"
608         DocumentWriterWeb.UseMenu
610     case "CALC" ' there are 2 entries over :-( usually only one, html 0 :-((((
612         Kontext "DocumentCalc"
613         DocumentCalc.UseMenu
615     case "DRAW"
617         Kontext "DocumentDraw"
618         DocumentDraw.UseMenu
620     case "IMPRESS"
622         Kontext "DocumentImpress"
623         DocumentImpress.UseMenu
625     case "MATH" :
627         Kontext "DocumentMath"
628         DocumentMath.UseMenu
630     case "DATABASE" :
632         Kontext "DATABASE"
633         Database.UseMenu
635     case "BASIC" :
637         Kontext "BasicIde"
638         BasicIde.UseMenu
640     case "NONE" :
642         Kontext "DocumentBackground"
643         DocumentBackground.UseMenu
645     end select
647 end function
649 '*******************************************************************************
651 function hOpenContextMenu()
653     '/// very global function: depends on 'gApplication' just opens the Context Menu ///'
655     Select Case Ucase(gApplication)
656     Case "WRITER"
658         Kontext "DocumentWriter"
659         DocumentWriter.openContextMenu
661     Case "MASTERDOCUMENT"
663         Kontext "DocumentMasterDoc"
664         DocumentMasterDoc.openContextMenu
666     Case "HTML"
668         Kontext "DocumentWriterWeb"
669         DocumentWriterWeb.openContextMenu
671     case "CALC"
673         Kontext "DocumentCalc"
674         DocumentCalc.openContextMenu
676     case "DRAW"
678         Kontext "DocumentDraw"
679         DocumentDraw.openContextMenu
681     case "IMPRESS"
683         Kontext "DocumentImpress"
684         DocumentImpress.openContextMenu
686     case "MATH" :
688         Kontext "DocumentMath"
689         DocumentMath.openContextMenu
691     end select
693 end function
695 '*******************************************************************************
697 function hGetWindowCaption(sApplication as string, optional bAll as boolean)
699     '///<b> function hGetWindowCaption () </b>///'
700     '///+ just returns the string from the application main window ///'
701     '///+ If optional parameter = true, thenn go throught all applications and get caption; return array ///'
703     dim sTemp as string
704     dim aApplication() as string
705     dim aTemp(10) as string
706     dim iTimes as integer
707     dim i as integer
709     aApplication = array("SWRITER","SGLOBAL","SWEB","SCALC","SDRAW","SIMPRESS","SMATH","BASIC","BACK")
710     if (isMissing(bAll) OR (NOT bAll)) then
711         iTimes = 0
712     else
713         iTimes = uBound(aApplication())
714         sApplication = aApplication(0)
715     endif
716     for i=0 to iTimes
717         Select Case Ucase(sApplication)
718         Case "SWRITER"
720             Kontext "DocumentWriter"
721             try
722                 sTemp = DocumentWriter.caption
723             catch
724             endcatch
725         Case "SGLOBAL"
727             Kontext "DocumentMasterDoc"
728             try
729                 sTemp = DocumentMasterDoc.caption
730             catch
731             endcatch
732         Case "SWEB"
734             Kontext "DocumentWriterWeb"
735             try
736                 sTemp = DocumentWriterWeb.caption
737             catch
738             endcatch
739         case "SCALC"
741             Kontext "DocumentCalc"
742             try
743                 sTemp = DocumentCalc.caption
744             catch
745             endcatch
746         case "SDRAW"
748             Kontext "DocumentDraw"
749             try
750                 sTemp = DocumentDraw.caption
751             catch
752             endcatch
753         case "SIMPRESS"
755             Kontext "DocumentImpress"
756             try
757                 sTemp = DocumentImpress.caption
758             catch
759             endcatch
760         case "SMATH"
762             Kontext "DocumentMath"
763             try
764                 sTemp = DocumentMath.caption
765             catch
766             endcatch
767         Case "BASIC"
769             Kontext "BasicIDE"
770             try
771                 sTemp = BasicIDE.caption
772             catch
773             endcatch
774         Case "BACK"
776             Kontext "DocumentBackground"
777             try
778                 sTemp = DocumentBackground.caption
779             catch
780             endcatch
781         case else
782             qaErrorLog "sApplication not defined: '" + sApplication + "'"
783             sTemp = ""
784         end select
785         aTemp(i) = sTemp
786         try
787             sApplication=aApplication(i+1)
788         catch
789         endcatch
790     next i
791     if (iTimes > 0) then
792         hGetWindowCaption = aTemp()
793     else
794         hGetWindowCaption = sTemp
795     endif
797 end function
799 '*******************************************************************************
801 function fSplitWindowTitle(sInString as string)
803     dim a, b, x, i as integer
804     dim sTemp() as string
805     dim sTempReturn(2) as string
806     dim sTempReturn2(3) as string
807     dim bTestToolCommunication as boolean
808     dim bDebugVersion as boolean ' aka 'nonpro'
809     dim bError as boolean
811     ' a) 'Untitled2 - OpenOffice.org Draw' (2)
812     ' b) 'Untitled1 - OpenOffice.org Writer TTD :localhost[1034]' (4)
813     ' c) 'Untitled1 - StarOffice Writer [680m72(Build:8863)]' (3)
814     ' d) 'Untitled2 - StarOffice Draw [680m72(Build:8863)] TTD :localhost[1034]' (5)
816     bTestToolCommunication = FALSE
817     bDebugVersion = FALSE
818     bError = FALSE
819     if (sInString <> "") then
820         ' ' - ' separates Filename from Vendor
821         a = instr(sInString, " - ") ' get Document file name or Untitledi
822         if (a > 1) then
823             if (instr(a+1,sInString, " - ") > a) then
824                 qaErrorLog "Argh!"
825                 bError = TRUE
826             endif
827             sTempReturn(0) = left(sInString, a-1)                        ' (0) Filename
828         else
829             sTempReturn(0) = ""
830             bError = TRUE
831         endif
833         ' seperate second string by spaces
834         sTemp() = split(right(sInString, len(sInString)-(a+2)), " ") ' Parts are now separated by spaces
835         x = uBound(sTemp())
837         sTempReturn(1) = sTemp(1)                                        ' (1) Application
838         sTempReturn(2) = sTemp(0)                                        ' (2) Vendor
840         ' if ']' at end... (b,c,d)
841         if (right(sInString,1) = "]") then
842             ' if ')' at second last position it is a nonpro!
843             if (right(sInString,2) = ")]") then
844                 ' normal detection works with spaces... (c)
845                 bDebugVersion = TRUE
846             else
847                 ' remove TestTool communication string (b,d)
848                 ' it is the last 2 space seperated parts!
849                 bTestToolCommunication = TRUE
850                 if (left(sTemp(2),1)="[") then
851                     bDebugVersion = TRUE
852                 endif
853             endif
854         else
855             ' normal detection with spaces works... (a)
856         endif
858         ' sanity checks, to warn if assumptions are not met!
859         select case x
860         case 1:
861             if ((bTestToolCommunication) OR (bDebugVersion)) then
862                 qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 1"
863                 bError = TRUE
864             endif
865         case 2:
866             if ((bTestToolCommunication) OR (NOT bDebugVersion)) then
867                 qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 2"
868                 bError = TRUE
869             endif
870         case 3:
871             if ((NOT bTestToolCommunication) OR (bDebugVersion)) then
872                 qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 3"
873                 bError = TRUE
874             endif
876             '***** Warning: Indention error *****
877         case 4:
878             if ((NOT bTestToolCommunication) OR (NOT bDebugVersion)) then
881                 '***** Warning: Indention error *****
882                 qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 4"
883                 bError = TRUE
884             endif
885         case else:
886             qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 0"
887             bError = TRUE
888         end select
890         if bError then
891             printlog sInString
892         endif
894         if (x > 1) then ' there is more to evaluate
895             ' save the current computed values
896             for i=0 to 2
897                 '***** Warning: Indention error *****
898                 sTempReturn2(i) = sTempReturn(i)
899             next i
900             ' make return array bigger
901             redim sTempReturn(4) as string
902             ' copy data back
903             for i=0 to 2
904                 '***** Warning: Indention error *****
905                 sTempReturn(i) = sTempReturn2(i)
906             next i
907             ' set remaining values, if exist
908             ' debug version string
909             if bDebugVersion then
910                 '***** Warning: Indention error *****
911                 sTempReturn(3) = mid(sTemp(2),2,len(sTemp(2))-2) ' optional (3) Debug Version
912             else
913                 '***** Warning: Indention error *****
914                 sTempReturn(3) = ""
915             endif
916             ' TestTool Communication string
917             if bTestToolCommunication then
918                 '***** Warning: Indention error *****
919                 ' if true, then always the two last strings
920                 sTempReturn(4) = sTemp(x-1) + " " + sTemp(x)        ' optional (4) TestTool Communication
921             else
922                 '***** Warning: Indention error *****
923                 sTempReturn(4) = ""
924             endif
925         endif
926     else
927         redim sTempReturn(0) as string
928         sTempReturn(0) = ""
929     endif
931     fSplitWindowTitle = sTempReturn()
933 end function