mlapptools
mlapptools copied to clipboard
Private function `figFromWebwindow` doesn't work on R2017a
Expected Behavior
myGUI = DOMdemoGUI;
mlapptools.fontColor(myGUI.TextArea, 'aqua');
Change color from TextArea font to 'aqua'
Actual Behavior
Error using arrayfun
matlab.internal.webwindow output type is not supported. Set 'UniformOutput' to false.
Error in mlapptools/figFromWebwindow (line 434)
ww = arrayfun(@mlapptools.getWebWindow, hUIFigs);
Error in mlapptools/waitTillWebwindowLoaded (line 595)
hFig = mlapptools.figFromWebwindow(hWebwindow);
Error in mlapptools.getWebElements (line 140)
mlapptools.waitTillWebwindowLoaded(win);
Error in mlapptools.fontColor (line 69)
[win, ID_struct] = mlapptools.getWebElements(uiElement);
If changing line 434 from:
ww = arrayfun(@mlapptools.getWebWindow, hUIFigs);
to
ww = arrayfun(@mlapptools.getWebWindow, hUIFigs, 'un',0);
following error occurs:
Error using getappdata
Value must be a handle.
Error in mlapptools/getTimeout (line 488)
to = getappdata(hFig, mlapptools.TAG_TIMEOUT);
Error in mlapptools/waitTillWebwindowLoaded (line 598)
to = mlapptools.getTimeout(hFig);
Error in mlapptools.getWebElements (line 140)
mlapptools.waitTillWebwindowLoaded(win);
Error in mlapptools.fontColor (line 69)
[win, ID_struct] = mlapptools.getWebElements(uiElement);
Steps to Reproduce the Problem
Enter this command in the Matlab Command Line (or any other command from the examples):
myGUI = DOMdemoGUI;
mlapptools.fontColor(myGUI.TextArea, 'aqua');
Specifications
- MATLAB Release: R2017a
- Operating System: Win 7
This is likely version specific, the issue does not occur in R2017b.
@Proxoso While we're adding a warning or a workaround for older versions, you can use the setStyle
syntax, which should work :
myGUI = DOMdemoGUI;
[hWin, widgetID] = mlapptools.getWebElements(myGUI.TextArea);
mlapptools.setStyle(hWin, 'color', 'aqua', widgetID);
@Dev-iL - if you look at the error stack provided by @Proxoso , you'll see that it stems from mlapptools.fontColor
:69 -
[win, ID_struct] = mlapptools.getWebElements(uiElement);
which indicates that your suggested workaround will also fail, because getWebElements
fails.
My hunch is that it's due to a slow rendering, which means the timeout is reached before the widgetID is available.
@altmany Good point. I have modified the waitTillWebwindowLoaded
logic a bit to make getWebElements
less likely to fail due to trivial problems; it might help with this issue as well.