Toolbar.hx 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package hide.comp;
  2. typedef ToolToggle = {
  3. var element : Element;
  4. function toggle( v : Bool ) : Void;
  5. function isDown(): Bool;
  6. }
  7. typedef ToolSelect<T> = {
  8. var element : Element;
  9. function setContent( elements : Array<{ label : String, value : T }> ) : Void;
  10. dynamic function onSelect( v : T ) : Void;
  11. }
  12. class Toolbar extends Component {
  13. public function new(?parent,?el) {
  14. super(parent,el);
  15. element.addClass("hide-toolbar");
  16. }
  17. public function addButton( icon : String, ?label : String, ?onClick : Void -> Void ) {
  18. var e = new Element('<div class="button" title="${label==null ? "" : label}"><div class="icon fa fa-$icon"/></div>');
  19. if( onClick != null ) e.click(function(_) onClick());
  20. e.appendTo(element);
  21. return e;
  22. }
  23. public function addToggle( icon : String, ?title : String, ?label : String, ?onToggle : Bool -> Void, ?defValue = false ) : ToolToggle {
  24. var e = new Element('<div class="toggle" title="${title==null ? "" : title}"><div class="icon fa fa-$icon"/></div>');
  25. if(label != null) {
  26. new Element('<label>$label</label>').appendTo(e);
  27. }
  28. e.click(function(_) {
  29. e.toggleClass("toggled");
  30. this.saveDisplayState("toggle:" + icon, e.hasClass("toggled"));
  31. if( onToggle != null ) onToggle(e.hasClass("toggled"));
  32. });
  33. e.appendTo(element);
  34. if( defValue ) e.addClass("toggled");
  35. var def = getDisplayState("toggle:" + icon);
  36. if( def == null ) def = false;
  37. if( def != defValue ) e.click();
  38. return {
  39. element : e,
  40. toggle : function(b) e.toggleClass("toggled",b),
  41. isDown: function() return e.hasClass("toggled") };
  42. }
  43. public function addColor( label : String, onChange : Int -> Void, ?alpha : Bool, ?defValue = 0 ) {
  44. var color = new hide.comp.ColorPicker(alpha, element);
  45. color.onChange = function(move) {
  46. if( !move ) this.saveDisplayState("color:" + label, color.value);
  47. onChange(color.value);
  48. };
  49. var def = getDisplayState("color:" + label);
  50. if( def == null ) def = defValue;
  51. color.value = def;
  52. onChange(def);
  53. return color;
  54. }
  55. public function addSelect<T>( icon : String, ?label : String ) : ToolSelect<T> {
  56. var e = new Element('<div class="select" title="${label==null ? "" : label}"><div class="icon fa fa-$icon"/><select/></div>');
  57. var content : Array<{ label : String, value : T }> = [];
  58. var select = e.find("select");
  59. var tool : ToolSelect<T> = {
  60. element : e,
  61. setContent : function(c) {
  62. select.html("");
  63. content = c;
  64. for( i in 0...content.length )
  65. new Element('<option value="$i">${content[i].label}</option>').appendTo(select);
  66. },
  67. onSelect : function(_) {},
  68. };
  69. select.change(function(_) tool.onSelect(content[Std.parseInt(select.val())].value));
  70. e.appendTo(element);
  71. return tool;
  72. }
  73. public function addRange( label : String, onChange : Float -> Void, ?defValue = 0., min = 0., max = 1. ) {
  74. var r = new hide.comp.Range(element,new Element('<input title="$label" type="range" min="$min" max="$max" value="$defValue">'));
  75. r.onChange = function(_) onChange(r.value);
  76. return r;
  77. }
  78. }