################################################################################ # TSL-LIBRARY: EMOS_STD_win_lib ################################################################################ # Copyright (C) 2000 EMOS Computer Consulting GmbH # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # For further information please contact: # # Dean Rajovic # EMOS Computer Consulting GmbH # Oskar-Messter-Straße 25 # 85737 Ismaning # Germany # tel.: +49 89 608 765-0 # mailto:drajovic@emos.de # http://www.emos.de ################################################################################ # $Revision: 1.1.1.1 $ # $Author: drajovic $ # $Date: 2004/03/24 20:14:04 $ # $Archive: /MERCURY/Projects/EMOS_GPL/STD/emos_std_win_lib/script $ # $NoKeywords: $ ################################################################################ #**# #* This library contains alternative implementations for standard functions #* that operate on windows (win_x() functions). #* Another sort of functions in this library are functions that implement some #* additional functionality that would probably fit into Mercury's logic #* for win_x() functions. #*/ #** #* This function invokes win_activate() before calling set_window(). It also #* takes care of the timeout (which does not normally work with win_activate()). #* If for some reason standard set_window() does not work, try this function #* before trying something else. #* @param win (in) window name #* @param time (in) (optional) timeout #* @return #* E_OK: success #* !E_OK: failure #*/ public function EMOS_set_window( in win1, in time1 ) { static rc, t000; if (win_exists(win1) != E_OK) { # window existiert noch nicht if (time1 * 1 == 0) rc = set_window(win1); else rc = set_window(win1,time1); if (rc == E_OK) rc = win_activate(win1); } else { # window existiert schon if (time1 * 1 == 0) { rc = win_activate(win1); if (rc == E_OK) rc = set_window(win1); } else { set_timeout( time1 ); rc = win_activate(win1); restore_timeout(); if (rc == E_OK) rc = set_window(win1,time1); } } return(rc); } #** #* Waits for window to close. #* @param win (in) window name #* @param time (in) (optional) timeout #* @return #* E_OK: success; window closed #* !E_OK: failure #*/ public function EMOS_check_win_closed( in win, in timeout ) { auto rc, t, i; t = timeout*1; if ( t < 0 || t > 300 ) t = 5; # default timeout = 5 seconds rc = win_exists( win ); for( i = 0; i < t && rc == E_OK; i++ ) { rc = win_exists( win ); wait(1); } switch ( rc ) { case E_NOT_FOUND: case E_NOT_DISPLAYED: return E_OK; case E_OK: tl_step( win, rc, "Window not closed within " & t & " seconds" ); return E_EXIST; default: return rc; } } #** #* Attempts to close all given windows. #* @param wins (inout[]) array indexed from 0 upwards containg names of windows to close #* @return returns E_OK if none of the specified windows existed by the time this function exited #* otherwise E_EXISTS is returned #*/ public function EMOS_win_close_all( inout wins[] ) { auto count, i; for ( i in wins ) count++; # loop1: attempts to close all windows for ( i=0; i<count; i++ ) { if ( win_exists( wins[i] ) == E_OK ) { if ( win_close( wins[i] ) == E_OK ) { # sometimes win_close() does not work but still returns E_OK if ( win_exists( wins[i] ) == E_OK ) { if ( set_window( wins[i] ) == E_OK ) { type ("<kAlt_L>-<kF4><kAlt_L>+"); } if ( win_exists( wins[i] ) == E_OK ) { continue; # still exists, don't bother any more } } i = -1; # window closed, restart the loop continue; } } } # loop2: checks that none of the windows is still open for ( i=0; i<count; i++ ) { if ( win_exists( wins[i] ) == E_OK ) { return E_EXIST; } } return E_OK; } ########################################################################### # TSL-LIBRARY: EMOS_STD_win_lib ###########################################################################