summaryrefslogtreecommitdiff
path: root/modules/gui/macros/findobj.sci
diff options
context:
space:
mode:
Diffstat (limited to 'modules/gui/macros/findobj.sci')
-rwxr-xr-xmodules/gui/macros/findobj.sci91
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
+//-----------------------------------------------------------------------------