'encoding UTF-8 Do not remove or change this line!
'**************************************************************
'
' Licensed to the Apache Software Foundation (ASF) under one
' or more contributor license agreements. See the NOTICE file
' distributed with this work for additional information
' regarding copyright ownership. The ASF licenses this file
' to you under the Apache License, Version 2.0 (the
' "License"); you may not use this file except in compliance
' with the License. You may obtain a copy of the License at
'
' http://www.apache.org/licenses/LICENSE-2.0
'
' Unless required by applicable law or agreed to in writing,
' software distributed under the License is distributed on an
' "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
' KIND, either express or implied. See the License for the
' specific language governing permissions and limitations
' under the License.
'
'**************************************************************
'*
'* short description : Tools for working with the property browser for formcontrols
'*
'\******************************************************************************
function hOpenPropertyBrowser() as boolean
'///
Open the BASIC property browser
const CFN = "framework::tools::includes::pbrowser_tools.inc::hOpenPropertyBrowser(): "
kontext "ControlPropertiesTabControl"
if ( ControlPropertiesTabControl.exists() ) then
printlog( "Property Browser is already open, no action taken" )
hOpenPropertyBrowser() = true
else
if ( hUseAsyncSlot( "ContextProperties" ) <> -1 ) then
kontext "ControlPropertiesTabControl"
if ( ControlPropertiesTabControl.exists( 2 ) ) then
ControlPropertiesTabControl.setPage( TabGeneralControl )
hOpenPropertyBrowser() = true
else
warnlog( CFN & "Dialog is not available" )
hOpenPropertyBrowser() = false
endif
else
warnlog( CFN & "Could not execute slot" )
hOpenPropertyBrowser() = false
endif
endif
end function
'*******************************************************************************
function hClosePropertyBrowser() as boolean
const CFN = "framework::tools::includes::pbrowser_tools.inc::hClosePropertyBrowser(): "
printlog( "Closing Property-Browser (if open)" )
kontext "ControlPropertiesTabControl"
if ( ControlPropertiesTabControl.exists() ) then
hUseAsyncSlot( "ContextProperties" )
if ( ControlPropertiesTabControl.notExists( 2 ) ) then
hClosePropertyBrowser() = true
else
warnlog( CFN & "Failed to close dialog" )
hClosePropertyBrowser() = false
endif
else
printlog( "Property browser is not open, no action taken." )
hClosePropertyBrowser() = true
endif
end function
'*******************************************************************************
function hPBSetControlName( cControl as string ) as boolean
'///Name a control, with limited errorhandling
'///This function was introduced due to a problem with the property-
'///browser not being open fast enough or just refusing to accept input
'///Input:
'///
'///+- Text to be inserted in the control "NameText" (string)
'///
'///Returns:
'///
'///+- Errorcondition
'///
'///+- TRUE: The control name was successfully updated
'///+- FALSE: Control is not visible within current context
'///
'///
const CFN = "hPBSetControlName::"
'///Description:
'///
'///+- Test that the control "NameText" exists
' Note: A number of fallbacks are used here because the entryfield "NameText"
' is less than reliable. My hope is that one of the methods succeeds.
kontext "TabGeneralControl"
if ( NameText.exists() ) then
'///+- Set the new name
hDeleteEntryFieldContent( NameText )
' Name the control and append some Spaces which should be truncated.
printlog( CFN & "Naming control: " & cControl )
NameText.setText( cControl )
TabGeneralControl.typeKeys( "" )
WaitSlot()
if ( NameText.getText() = cControl ) then
printlog( CFN & "Name is set ok: " & cControl )
hPBSetControlName() = true
exit function
endif
' If the name cannot be set this is in 99% of the cases a timing problem.
' Here is a (costly) workaround.
qaerrorlog( CFN & "Name not set correctly, retrying" )
Wait( 300 )
NameText.setText( cControl )
TabGeneralControl.typeKeys( "" )
Wait( 300 )
' Test again, leave function if good
if ( NameText.getText() = cControl ) then
printlog( CFN & "Name is set ok: " & cControl )
hPBSetControlName() = true
exit function
endif
warnlog( CFN & "Unable to set control name: " & cControl )
hPBSetControlName() = false
else
warnlog( "Unable to name the control." )
hPBSetControlName() = false
endif
'///
end function
'*******************************************************************************
function hPBGetControlName( cControl as string ) as boolean
'///Verify that the expected control is open
'///Use hPBSetControlName( string ) to set the name and when you reopen it
'///+ verify that you got the right control wit this function
'///Input:
'///
'///+- Name of the control (string)
'///
'///Returns:
'///
'///+- Errorcondition (boolean)
'///
'///+- TRUE: The control has the correct name
'///+- FALSE: Any other condition
'///
'///
'///Description:
'///
dim cControlName as string
const CFN = "hPBGetControlName::"
'///+- If "NameText" exists, retrieve its text
kontext "TabGeneralControl"
if ( TabGeneralControl.exists( 1 ) ) then
if ( TabGeneralControl.isVisible() ) then
wait( 300 )
cControlName = NameText.getText()
'///+- Verify that the name is correct
if ( cControlName = cControl ) then
printlog( CFN & "The name of the control is correct: " & cControl )
hPBGetControlName() = true
else
warnlog( CFN & "Unexpected control name:" )
printlog( CFN & "Found....: " & cControlName )
printlog( CFN & "Expected.: " & cControl )
hPBGetControlName() = false
endif
else
warnlog( CFN & "Dialog present but tabpage could not be accessed (TabGeneralControl)." )
hPBGetControlName() = false
endif
else
warnlog( CFN & "Unable to get the name from the control, dialog not accessible (TabGeneralControl)." )
hPBGetControlName() = false
endif
'///
end function
'*******************************************************************************
function hSetPBTabPage( iPage as integer ) as boolean
'///A small helper to switch between tabpages in the property-browser
'///Input:
'///
'///+- Page-ID (integer)
'///
'///+- 1 = General page
'///+- 2 = Events page
'///
'///
'///Returns:
'///
'///+- Errorcondition (boolean)
'///
'///+- TRUE on success
'///+- FALSE on any error
'///
'///
'///Description:
'///
const CFN = "hSetPBTabPage::"
printlog( CFN & "Enter with option: " & iPage )
'///+- Switch to the requested page
kontext "ControlPropertiesTabControl"
if ( not ControlPropertiesTabControl.exists( 3 ) ) then
printlog( CFN & "Exit: Control Properties Dialog is not open, aborting" )
hSetPBTabPage() = false
exit function
else
if ( GVERBOSE ) then
printlog( CFN & "Control Properties Dialog is open" )
endif
endif
select case iPage
case 1
printlog( CFN & "Switching to control properties tabpage" )
kontext "ControlPropertiesTabControl"
ControlPropertiesTabControl.setPage TabGeneralControl
kontext "TabGeneralControl"
if ( nametext.exists( 5 ) ) then
printlog( CFN & "Exit: Control properties are open (true)" )
hSetPBTabPage() = true
exit function
else
printlog( CFN & "Exit: Failed to open Control Properties (false)" )
hSetPBTabPage() = false
exit function
endif
case 2
printlog( CFN & "Switching to event assignment tabpage" )
kontext "ControlPropertiesTabControl"
ControlPropertiesTabControl.setPage TabEventsControl
kontext "TabEventsControl"
if ( PBFocusGained.exists( 5 ) ) then
printlog( CFN & "Exit: Events page is open (true)" )
hSetPBTabPage() = true
exit function
else
printlog( CFN & "Exit: Failed to open events-page (false)" )
hSetPBTabPage() = false
exit function
endif
case else
printlog( CFN & "Invalid parameter passed to function: " & iPage )
hSerPBTabPage() = false
exit function
end select
'///
end function
'*******************************************************************************
function hDeleteEntryFieldContent( oControl as object ) as boolean
printlog( "Original name is: " & oControl.getText() )
oControl.typeKeys( "" )
oControl.typeKeys( "" )
oControl.typeKeys( "" )
if ( oControl.getText() = "" ) then
hDeleteEntryFieldContent() = true
else
hDeleteEntryFieldContent() = false
endif
end function