entry_vector3.vala 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright (c) 2012-2020 Daniele Bartolini and individual contributors.
  3. * License: https://github.com/dbartolini/crown/blob/master/LICENSE
  4. */
  5. using Gtk;
  6. namespace Crown
  7. {
  8. public class EntryVector3 : Gtk.Box
  9. {
  10. // Data
  11. public bool _stop_emit;
  12. // Widgets
  13. public EntryDouble _x;
  14. public EntryDouble _y;
  15. public EntryDouble _z;
  16. public Vector3 value
  17. {
  18. get
  19. {
  20. return Vector3(_x.value, _y.value, _z.value);
  21. }
  22. set
  23. {
  24. _stop_emit = true;
  25. Vector3 val = (Vector3)value;
  26. _x.value = val.x;
  27. _y.value = val.y;
  28. _z.value = val.z;
  29. _stop_emit = false;
  30. }
  31. }
  32. // Signals
  33. public signal void value_changed();
  34. public EntryVector3(Vector3 xyz, Vector3 min, Vector3 max, string fmt)
  35. {
  36. Object(orientation: Gtk.Orientation.HORIZONTAL, spacing: 0);
  37. // Data
  38. _stop_emit = false;
  39. // Widgets
  40. _x = new EntryDouble(xyz.x, min.x, max.x, fmt);
  41. _y = new EntryDouble(xyz.y, min.y, max.y, fmt);
  42. _z = new EntryDouble(xyz.z, min.z, max.z, fmt);
  43. _x.value_changed.connect(on_value_changed);
  44. _y.value_changed.connect(on_value_changed);
  45. _z.value_changed.connect(on_value_changed);
  46. add(_x);
  47. add(_y);
  48. add(_z);
  49. }
  50. private void on_value_changed()
  51. {
  52. if (!_stop_emit)
  53. value_changed();
  54. }
  55. }
  56. }