Menu.hx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package hide.ui;
  2. class Menu {
  3. public var root : nw.Menu;
  4. public function new( menu : Element) {
  5. root = new nw.Menu({type: Menubar});
  6. buildMenuRec(root,"",menu);
  7. }
  8. function buildMenuRec( menu : nw.Menu, path : String, e : Element ) {
  9. var cl = e.attr("class");
  10. if( cl != null ) {
  11. if( path == "" ) path = cl else path = path + "." + cl;
  12. }
  13. var elt = e.get(0);
  14. switch( elt.nodeName ) {
  15. case "MENU":
  16. var submenu = null;
  17. if( elt.firstElementChild != null ) {
  18. submenu = new nw.Menu({type:ContextMenu});
  19. for( e in e.children().elements() )
  20. buildMenuRec(submenu, path, e);
  21. }
  22. var type : nw.MenuItem.MenuItemType = switch( e.attr("type") ) {
  23. case "checkbox": Checkbox;
  24. default: Normal;
  25. }
  26. var label = e.attr("label");
  27. if( label == null ) label = "???";
  28. var checked = e.prop("checked") || e.attr("checked") == "checked";
  29. var m = new nw.MenuItem(submenu == null ? { label : label, type : type } : { label : label, type : type, submenu : submenu });
  30. if( type == Checkbox )
  31. m.checked = checked;
  32. if( e.attr("disabled") == "disabled" )
  33. m.enabled = false;
  34. m.click = function() {
  35. if( type == Checkbox ) {
  36. checked = !checked;
  37. e.prop("checked", checked);
  38. m.checked = checked;
  39. }
  40. e.click();
  41. };
  42. menu.append(m);
  43. case "SEPARATOR":
  44. menu.append(new nw.MenuItem({ label : null, type : Separator }));
  45. default:
  46. for( e in e.children().elements() )
  47. buildMenuRec(menu, path, e);
  48. }
  49. }
  50. }