mlapptools icon indicating copy to clipboard operation
mlapptools copied to clipboard

Can't format uitreenode text

Open davidn-IA opened this issue 7 years ago • 12 comments

Submitted pull request #5 allows formatting controls whose parent is not the uifigure, however, the following fails:

f = uifigure('Position', [680 558 560 420]); t = uitree(f,'Position',[20 20 520 380]); tn = uitreenode(t,'Text','Test me'); mlapptools.fontWeight(tn, 'bold');

with the following error:

Error using mlapptools/getWidgetID (line 363) widgetID query timed out after 5 seconds, UI needs more time to load Error in mlapptools.getWebElements (line 108) widgetID = mlapptools.getWidgetID(win, mlapptools.getDataTag(uiElement)); Error in mlapptools.fontWeight (line 65) [win, widgetID] = mlapptools.getWebElements(uiElement); Error in Untitled4 (line 6) mlapptools.fontWeight(tn, 'bold');

(Note that increasing timeout doesn't help)

davidn-IA avatar Jan 02 '18 17:01 davidn-IA

Will have to do some deeper investigation, I cannot reproduce this on my machine.

sco1 avatar Jan 02 '18 17:01 sco1

Matlab 2017b -- should have mentioned that. Have not tried it on other versions.

davidn-IA avatar Jan 02 '18 17:01 davidn-IA

@davidn-IA OS ?

Dev-iL avatar Jan 02 '18 17:01 Dev-iL

W10 Enterprise FCU

davidn-IA avatar Jan 02 '18 17:01 davidn-IA

Ok, I can reproduce this. Let's see now....


For now I found a totally unrelated bug in decodeDijitRegistryResult :)

Dev-iL avatar Jan 02 '18 17:01 Dev-iL

Good news - I found a way to format uitree and uitreenode objects!

It seems that uitree objects use some different system internally (possibly ReactJS), so their children don't have a widgetid field we can refer to in order to edit the style. However, they do have some other identifiers such as data-test-id and data-reactid, which we could use.

I had to rethink how we uniquely identify (and pass around) UI objects. This resulted in some refactoring an overall more robust code.

@davidn-IA Until the latest PR is merged, you can head over to my fork and give the new code a try!

Dev-iL avatar Jan 03 '18 18:01 Dev-iL

Fantastic, thanks. Will be checking it out shortly.

davidn-IA avatar Jan 03 '18 18:01 davidn-IA

It's an improvement but unfortunately fails on subnodes, per this example:

f = uifigure('Position', [680 558 560 420]); t = uitree(f,'Position',[20 20 520 380]); tn = uitreenode(t,'Text','Test me'); tn2 = uitreenode(tn,'Text','Test me'); mlapptools.fontWeight(tn, 'bold'); % <-- this is OK mlapptools.fontWeight(tn2, 'bold'); % <--- but fails here

davidn-IA avatar Jan 03 '18 18:01 davidn-IA

Changed this from 'bug' to 'enhancement' because formatting trees seems to require a completely different approach than other widgets.

At the moment, only top-level tree nodes can be modified permanently, whereas sub-nodes must be visible (i.e. parent is expanded) to apply changes, and changed don't persist if the parent node is collapsed.

function Issue6
  f = uifigure('Position', [680 558 560 420]);
  t = uitree(f,'Position',[20 20 520 380]);
  tn = uitreenode(t,'Text','Lorem');
  tn2 = uitreenode(tn,'Text','Ipsum');
  tn3 = uitreenode(tn2,'Text','Dolor');
  mlapptools.fontWeight(tn3, 'bold');
end

untitled

Dev-iL avatar Jan 04 '18 08:01 Dev-iL

Should be fixed with #8 (947c54e). @davidn-IA, how does it look on your end?

sco1 avatar Jan 07 '18 18:01 sco1

Fantastic. This is a terrific improvement, thanks!

davidn-IA avatar Jan 08 '18 03:01 davidn-IA

@sco1 I wouldn't close it just yet seeing how the existing solution is not really ideal...

Dev-iL avatar Jan 08 '18 15:01 Dev-iL