ExpRange.hx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package hide.comp;
  2. class ExpRange extends Range {
  3. public function setMinMax(min: Float, max: Float) {
  4. originMin = Math.log(min) / Math.log(scale);
  5. originMax = Math.log(max) / Math.log(scale);
  6. f.attr("min", originMin);
  7. f.attr("max", originMax);
  8. curMin = originMin;
  9. curMax = originMax;
  10. }
  11. public function new(?parent:Element,?root:Element) {
  12. super(parent, root);
  13. scale = 10;
  14. setMinMax(0.001, 100000.0);
  15. current = Std.parseFloat(f.attr("value"));
  16. if(current != null && !Math.isNaN(current))
  17. original = current;
  18. else
  19. current = 0;
  20. function contextMenu(e) {
  21. e.preventDefault();
  22. new ContextMenu([
  23. { label : "Reset", click : reset },
  24. { label : "sep", isSeparator: true},
  25. { label : "Copy", click : copy},
  26. { label : "Paste", click: paste, enabled : canPaste()},
  27. { label : "sep", isSeparator: true},
  28. { label : "Cancel", click : function() {} },
  29. ]);
  30. return false;
  31. }
  32. element.contextmenu(contextMenu);
  33. f.on("input", function(_) {
  34. var v = Math.round(Std.parseFloat(f.val()) * 100) / 100;
  35. setInner(v,true);
  36. refresh();
  37. onChange(true);
  38. });
  39. inputView.keyup(function(e) {
  40. if( e.keyCode == 13 || e.keyCode == 27 ) {
  41. inputView.blur();
  42. refresh();
  43. return;
  44. }
  45. var v = Std.parseFloat(inputView.val());
  46. if( Math.isNaN(v) ) return;
  47. set_value(v);
  48. onChange(true);
  49. });
  50. inputView.change(function(e) {
  51. var v = Std.parseFloat(inputView.val());
  52. if( Math.isNaN(v) ) return;
  53. set_value(v);
  54. onChange(false);
  55. });
  56. refresh();
  57. f.change(function(e) {
  58. var v = Math.round(Std.parseFloat(f.val()) * 100) / 100;
  59. setInner(v,false);
  60. refresh();
  61. onChange(false);
  62. });
  63. }
  64. function refresh() {
  65. inputView.val(get_value());
  66. f.val(current);
  67. }
  68. override function set_value(v:Float) : Float {
  69. current = Math.log(v) / Math.log(scale);
  70. setInner(current,true);
  71. refresh();
  72. return current;
  73. }
  74. override function get_value() {
  75. var val = Math.pow(scale, hxd.Math.round(current * 10.0) / 10.0);
  76. return val;
  77. }
  78. override function setInner(v:Float,tempChange:Bool) {
  79. current = v;
  80. }
  81. }