'encoding UTF-8  Do not remove or change this line!
'**************************************************************************
'* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
'* 
'* Copyright 2008 by Sun Microsystems, Inc.
'*
'* OpenOffice.org - a multi-platform office productivity suite
'*
'* $RCSfile: ch_tools_statistics.inc,v $
'*
'* $Revision: 1.1 $
'*
'* last change: $Author: jsi $ $Date: 2008-06-13 14:27:02 $
'*
'* This file is part of OpenOffice.org.
'*
'* OpenOffice.org is free software: you can redistribute it and/or modify
'* it under the terms of the GNU Lesser General Public License version 3
'* only, as published by the Free Software Foundation.
'*
'* OpenOffice.org is distributed in the hope that it will be useful,
'* but WITHOUT ANY WARRANTY; without even the implied warranty of
'* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
'* GNU Lesser General Public License version 3 for more details
'* (a copy is included in the LICENSE file that accompanied this code).
'*
'* You should have received a copy of the GNU Lesser General Public License
'* version 3 along with OpenOffice.org.  If not, see
'* <http://www.openoffice.org/license.html>
'* for a copy of the LGPLv3 License.
'*
'/************************************************************************
'*
'* owner : helge.delfs@sun.com
'*
'* short description : Tool library for Statistics dialog
'*
'**************************************************************************************************
'*
' #1 fInvokeTrendlinesDialog
' #1 fInvokeInsertYErrorBarsDialog
' #1 fInsertMeanValueLines
' #1 fSetErrorCategory
' #1 fSetErrorValue
' #1 fSetErrorIndicatorItem
' #1 fSetRegressionCurvesItem
'*
'\************************************************************************************************

' ch_tools_statistics.inc - Library for automation of the 'Insert::Statistics...' dialog
' This Include contains a set of functions to modify the controls of the Statistics dialog.
' All functions are designed to return error-codes depending on the behaviour of the action applied.
' Return codes:
' Error 0: Success.
' Error 1: The basic action beeing applied caused a serious problem, e.g. a crash.
' Error 2 TO 9: A functional problem occured.
' Error 11 TO 19: Wrong marginal conditions end up in failture, e.g. control not visible.
' NOTE: This errors can also be used for 'negative' testing.
' Error 42: Wrong input. Probably only of interest during test development.
' Error 99: Unexpected behaviour - Shouldn't normally occur.
' ATTENTION:
' Only Errors 42 and 99 throw 'warnlogs'.
' All other errors are silent.
' They only throw QAErrorlogs the give a hint what probably went wrong.
' Expected Errors MUST exclusivly be handled by the calling routine.
'
'--------------------------------------------------------------------
'
function fInvokeTrendlinesDialog() as INTEGER
         fInvokeTrendlinesDialog = 99
' Function to invoke the 'Insert::Statistics...' dialog
' No Input
' Returns error-code:
' 0 := Sucess
' 1 := Serious problem trying to invoke the dialog
' 2 := Failure (Dialog not present after invocation)
'99 := Unexpected error
    
    printlog "** Invoking 'Insert::Trendlines...' in menu"
    '/// Execute menu item 'Insert::Trendlines...'
    try 
        InsertTrendlines
    catch
        qaErrorLog "Error 1: Invoking menu item 'Insert::Trendlines...' failed"
        fInvokeTrendlinesDialog = 1
        exit function
    endcatch
    
    '/// Lookup if call was successful
    Kontext "InsertTrendlinesDialog"
    if InsertTrendlinesDialog.exists(2) then
        printlog ">> Trend lines dialog is visible now."
        fInvokeTrendlinesDialog = 0
    else
        qaErrorLog "Error 2: OOPS, calling the slot '.uno:InsertTrendlines' didn't cause any problem ..."
        qaErrorLog "..., BUT the dialog doesn't seem to be visible"
        fInvokeTrendlinesDialog = 2
    endif

    if fInvokeTrendlinesDialog = 99 then
        warnlog "Error 99: Something unexpected happened!!"
    endif    
end function
'
'--------------------------------------------------------------------
'
function fInvokeInsertYErrorBarsDialog() as INTEGER
         fInvokeInsertYErrorBarsDialog = 99
' Function to invoke the 'Insert::InsertYErrorBars...' dialog
' No Input
' Returns error-code:
' 0 := Sucess
' 1 := Serious problem trying to invoke the dialog
' 2 := Failure (Dialog not present after invocation)
'99 := Unexpected error    
    printlog "** Invoking 'Insert::InsertYErrorBars...' in menu"
    '/// Execute menu item 'Insert::InsertYErrorBars...'
    try 
        InsertYErrorBars
    catch
        qaErrorLog "Error 1: Invoking menu item 'Insert::YErrorBars...' failed"
        fInvokeInsertYErrorBarsDialog = 1
        exit function
    endcatch
    
    '/// Lookup if call was successful
    Kontext "InsertYErrorBarsDLG"
    if InsertYErrorBarsDLG.exists(2) then
        printlog ">> InsertYErrorBars dialog is visible now."
        fInvokeInsertYErrorBarsDialog = 0
    else
        qaErrorLog "Error 2: OOPS, calling the slot '.uno:InsertYErrorBars' didn't cause any problem ..."
        qaErrorLog "..., BUT the dialog doesn't seem to be visible"
        fInvokeInsertYErrorBarsDialog = 2
    endif
    
    if fInvokeInsertYErrorBarsDialog = 99 then
        warnlog "Error 99: Something unexpected happened!!"
    endif
end function
'
'-------------------------------------------------------------------------
'
function fInsertMeanValueLines() as INTEGER
         fInsertMeanValueLines = 99
' Function to insert mean value lines in an activated chart object
' Input:
    QAErrorLog "#i86055#-Insert/ Mean Value Lines needs a check box in sub-menu to remove all lines with once click"
' Returns error-code:
' 0 := Sucess
' 1 := Serious problem trying to execute the command
' 2 := Serious problem trying to check if the line has been inserted
' 3 := Uncorrect selected object
' 4 := Format Line-dialog did not occour
'99 := Unexpected error
    
    printlog "** Executing 'Insert::MeanValueLines...' in menu"
    '/// Execute menu item 'Insert::MeanValueLines...'
    try 
        InsertMeanValueLines
    catch
        qaErrorLog "Error 1: Executing menu item 'Insert::MeanValueLines...' failed"
        fInsertMeanValueLines = 1
        exit function
    endcatch
    
    Kontext "DocumentChart"
    '/// Type three times TAB-key to select the first data series
    DocumentChart.TypeKeys "<TAB>" , 3
    '/// Type F3-function key to select the mean value line of that data series
    DocumentChart.TypeKeys "<F3>"
    '/// Open the context menu
    DocumentChart.OpenContextMenu TRUE     
    if hMenuItemGetCount = 10 then       
        '/// Select the first entry (properties)
        hMenuSelectNr (1)
    else
        qaErrorLog "Error 2: Opening context menu on inserted mean value line failed!"        
        fInsertMeanValueLines = 2
        exit function        
    endif
    Kontext
    '/// There should be one tab page (chart line)
    Active.SetPage TabFormatChartLine
    if Active.GetPageCount <> 1 then
        qaErrorLog "Error 3: Incorrect selected object!"        
        fInsertMeanValueLines = 3
        Active.Cancel        
        exit function
    endif
    Kontext "TabFormatChartLine"
    if TabFormatChartLine.Exists(1) then        
        fInsertMeanValueLines = 0
        '/// Leave the dialog with CANCEL
        TabFormatChartLine.CANCEL
        printlog ">> Inserting 'Mean Value Lines' seems to work"
    else
        qaErrorLog "Error 4: Format Line-dialog did not occour!"        
        fInsertMeanValueLines = 4        
        exit function                            
    end if          
    if fInsertMeanValueLines = 99 then
        warnlog "Error 99: Something unexpected happened!!"
    endif   
end function
'
'--------------------------------------------------------------------
'
function fSetErrorCategory ( oErrorCategory as OBJECT ) as INTEGER
         fSetErrorCategory = 99
' Function to select 'Error Category'
' Input:
' OBJECT oErrorCategory
' Declaration name of Radio-Button (valid values):
' - NoFunction
' - Variance<
' - StandardDeviation
' - Percentage 
' - ErrorMargin
' - ConstantValue
' Returns error-code:
' 0 := Sucess
' 1 := Serious problem trying to check 'Error Category' radio-button
' 2 := 'Error Category' radio-button was not set
'12 := Radio-Button for desired 'Error Category' is not enabled
'42 := User error, input doesn't match.
'99 := Unexpected error
    printlog "** Setting 'Error Category'"
    '/// Check if desired 'Error Category' radio-button is enabled
    Kontext "InsertStatisticsDialog"
    if NOT oErrorCategory.IsEnabled then
        qaErrorLog "Error 12: Radio-Button for desired 'Error Category' is not enabled"
        qaErrorLog "... BUG or Script problem -> Check this out!"
        fSetErrorCategory = 12
        exit function
    endif
    '/// Try to check desired 'Error Category'
    Kontext "InsertStatisticsDialog"
    try 
        oErrorCategory.Check
    catch
        ' Throw error 1 and quit on serious problem
        qaErrorLog "Error 1: Check 'Error Category' radio-button seems to cause a serious problem -> Check this out!"
        fSetErrorCategory = 1
        exit function
    endcatch
    '/// Verify (against input) if 'Error Category' radio-button was checked
    if oErrorCategory.IsChecked then
        fSetErrorCategory = 0
        printlog ">> Setting 'Error Category' radio-button seems to work"
    else
        qaErrorLog "Error 2: Desires 'Error Category' radio-button was not checked -> Check this out!"
        fSetErrorCategory = 2
    endif

    if fSetErrorCategory = 99 then
        warnlog "Error 99: Something unexpected happened!!"
    endif  
end function
'
'--------------------------------------------------------------------
'
function fSetErrorValue ( oErrorValue as OBJECT , _
                          sErrorValue as STRING , _
                          OPTIONAL bCheckResult as BOOLEAN , _
                          OPTIONAL sExpectedValue as STRING ) as INTEGER
         fSetErrorValue = 99
' Function to set 'Error Value'
' Input:
' OBJECT oErrorValue
' Declaration name of Spin-Field (valid values):
' - PercentageValue
' - ErrorMarginValue
' - ConstantValuePlus
' - ConstantValueMinus
' - STRING (numeric) sErrorValue
' - Value to assign to Spin-Field
' Returns error-code:
' 0 := Sucess
' 1 := Serious problem trying to check 'Error Value' Spin-Field
' 2 := 'Error Value' Spin-Field was not set
'12 := Spin-Field for desired 'Error Value' is not enabled
'42 := User error, input doesn't match.
'99 := Unexpected error
    if isMissing ( bCheckResult ) then
        bCheckResult = FALSE
    endif
    if isMissing ( sExpectedValue ) then
        sExpectedValue = sErrorValue
    endif
    printlog ""
    printlog "** Setting 'Error Value'"
    '/// Check if desired 'Error Value' Spin-Field is enabled
    Kontext "InsertStatisticsDialog"
    if NOT oErrorValue.IsEnabled then
        qaErrorLog "Error 12: Spin-Field for desired 'Error Value' is not enabled"
        qaErrorLog "... BUG or Script problem -> Check this out!"
        fSetErrorValue = 12
        exit function
    endif
    '/// Try to set desired 'Error Value'
    Kontext "InsertStatisticsDialog"
    try 
        oErrorValue.setText ( sErrorValue )
    catch
        ' Throw error 1 and quit on serious problem
        qaErrorLog "Error 1: Setting 'Error Value' Spin-Field seems to cause a serious problem -> Check this out!"
        fSetErrorValue = 1
        exit function
    endcatch
    '/// Verify (against input) if 'Error Value' Spin-Field was set correctly
    if bCheckResult then
        if oErrorValue.getText = sExpectedValue then
            fSetErrorValue = 0
            printlog ">> Setting 'Error Value' Spin-Field seems to work"
        else
            qaErrorLog "Error 2: Desires 'Error Value' Spin-Field was not set correctly (value out of range?) -> Check this out!"
            qaErrorLog "Expected result: " & sExpectedValue
            qaErrorLog "Obtained result: " & oErrorValue.getText
            fSetErrorValue = 2
        endif
    else
        fSetErrorValue = 0
        qaErrorLog "!! Skipped verification of result"
    endif

    if fSetErrorValue = 99 then
        warnlog "Error 99: Something unexpected happened!!"
    endif   
end function
'
'--------------------------------------------------------------------
'
function fSetErrorIndicatorItem ( iErrorIndicatorNumber as INTEGER ) as INTEGER
         fSetErrorIndicatorItem = 99
' Function to select the 'Error Indicator' item
' Input:
' INTEGER iErrorIndicatorNumber:
' Position in 'Error Indicator' control.
' Posible Values are 1 to 4
' NOTE: Currently the 'Error Indicator' control can only be addressed using 'typekeys'.
' -> No 100% proof verification of success possible!
' Returns error-code:
' 0 := Sucess.
' 1 := Serious problem while selecting the variant control.
'11 := 'Error Indicator' is not visible
'42 := User error, input out of range.
'99 := Unexpected error. 
    '/// Check if 'Error Indicator' is visible
    Kontext "InsertStatisticsDialog"
    if NOT ErrorIndicator.IsVisible then
        qaErrorLog "Error 11: 'Error Indicator' is not visible"
        qaErrorLog "... BUG or Script problem -> Check this out!"
        fSetErrorIndicatorItem = 11
        exit function
    endif
    '/// Lookup valid input value for 'Error Indicator Item'
    if ( iErrorIndicatorNumber < 1 ) OR ( iErrorIndicatorNumber > 4 ) then
         fSetErrorIndicatorItem = 42
         warnlog "USER ERROR: Input doesn't match!"
         exit function
    endif   
    printlog "** Selecting the 'Error Indicator'"
    '/// Select the desired entry number
    Kontext "InsertStatisticsDialog"
    try 
        ErrorIndicator.typeKeys "<HOME>"
        ErrorIndicator.typeKeys "<RIGHT>", ( iErrorIndicatorNumber - 1 )
        fSetErrorIndicatorItem = 0
        printlog ">> Selecting the 'Error Indicator' probably worked"
    catch
        ' Throw error 1 and quit on serious problem
        qaErrorLog "Error 1: Selecting 'Error Indicator' seems to cause a serious problem -> Check this out!"
        fSetErrorIndicatorItem = 1
        exit function
    endcatch
    
    if fSetErrorIndicatorItem = 99 then
        warnlog "Error 99: Something unexpected happened!!"
    endif   
end function
'
'--------------------------------------------------------------------
'
function fSetRegressionCurvesItem ( iRegressionCurveNumber as INTEGER ) as INTEGER
         fSetRegressionCurvesItem = 99
' Function to select the 'Regression Curves' item
' Input:
' INTEGER iRegressionCurveNumber:
' Position in 'Regression Curves' control.
' Posible Values are 1 to 5
' NOTE: Currently the 'Regression Curves' control can only be addressed using 'typekeys'.
' -> No 100% proof verification of success possible!
' Returns error-code:
' 0 := Sucess.
' 1 := Serious problem while selecting the variant control.
'11 := 'Regression Curves' is not visible
'42 := User error, input out of range.
'99 := Unexpected error.
    ' Check if 'Regression Curves' is visible
    Kontext "InsertStatisticsDialog"
    if NOT RegressionCurves.IsVisible then
        qaErrorLog "Error 11: 'Regression Curves' is not visible"
        qaErrorLog "... BUG or Script problem -> Check this out!"
        fSetRegressionCurvesItem = 11
        exit function
    endif
    '/// Lookup valid input value for 'Regression Curves Item'
    if ( iRegressionCurveNumber < 1 ) OR ( iRegressionCurveNumber > 5 ) then
         fSetRegressionCurvesItem = 42
         warnlog "USER ERROR: Input doesn't match!"
         exit function
    endif        
    printlog "** Selecting the 'Regression Curves'"
    '/// Select the desired entry number
    Kontext "InsertStatisticsDialog"
    try 
        RegressionCurves.typeKeys "<HOME>"
        RegressionCurves.typeKeys "<RIGHT>", ( iRegressionCurveNumber - 1 )
        fSetRegressionCurvesItem = 0
        printlog ">> Selecting the 'Regression Curves' probably worked"
    catch
        ' Throw error 1 and quit on serious problem
        qaErrorLog "Error 1: Selecting 'Regression Curves' seems to cause a serious problem -> Check this out!"
        fSetRegressionCurvesItem = 1
        exit function
    endcatch
    
    if fSetRegressionCurvesItem = 99 then
        warnlog "Error 99: Something unexpected happened!!"
    endif   
end function

