diff options
Diffstat (limited to 'modules/gui/macros/findobj.sci')
-rwxr-xr-x | modules/gui/macros/findobj.sci | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/modules/gui/macros/findobj.sci b/modules/gui/macros/findobj.sci new file mode 100755 index 000000000..b26445c67 --- /dev/null +++ b/modules/gui/macros/findobj.sci @@ -0,0 +1,91 @@ +// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +// Copyright (C) 2008 - INRIA - Vincent COUVERT +// Copyright (C) 2008 - DIGITEO - Vincent COUVERT +// +// This file must be used under the terms of the CeCILL. +// This source file is licensed as described in the file COPYING, which +// you should have received as part of this distribution. The terms +// are also available at +// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt +function h = findobj(propertyName, propertyValue) + + rhs = argn(2); + if rhs<> [1 2] then + error(msprintf(gettext("%s: Wrong number of input arguments: %d or %d expected.\n"), "findobj", 1, 2)); + return; + end + + if rhs == 1 then + h = get(propertyName); + if h <> [] then + return; + end + elseif strcmpi(propertyName, "tag") == 0 then + h = get(propertyValue); + if h <> [] then + return; + end + end + + // Return value + h = [] + + // Get all opened figures + figureIds = winsid(); + if isempty(figureIds) then + return + end + + currentFig = gcf(); + + propertyName = convstr(propertyName,"l"); + + // Iterate over all figures + for figureindex = 1:size(figureIds,2) + // Does the figure match the propertyName/propertyValue set ? + f=scf(figureIds(figureindex)); + + %ierr = execstr("%bool = isequal(get(f, propertyName), propertyValue);", "errcatch"); + if %ierr==0 & %bool then + h = f; + break + end + + answ = findMatchingChild(f.children, propertyName, propertyValue); + if ~isempty(answ) then + h = answ; + break + end + end + + scf(currentFig); + +endfunction +//----------------------------------------------------------------------------- +function hFound = findMatchingChild(children, propertyName, propertyValue) + // Copyright DIGITEO 2008 + // Vincent COUVERT + + hFound = [] + + for childIndex = 1:size(children,1) + + %ierr = execstr("%bool = isequal(get(children(childIndex), propertyName), propertyValue);", "errcatch"); + if %ierr==0 & %bool then + hFound = children(childIndex); + return + end + + %ierr = execstr("get(children(childIndex), ""children"");", "errcatch"); // Does the child have a children property + + if %ierr==0 then // Yes the child can have children + answ = findMatchingChild(children(childIndex).children, propertyName, propertyValue); + if ~isempty(answ) then + hFound = answ; + return + end + end + end + +endfunction +//----------------------------------------------------------------------------- |