input_object.vala 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * Copyright (c) 2012-2025 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. namespace Crown
  6. {
  7. public class InputObject : InputEnum
  8. {
  9. public StringId64 _type;
  10. public Database _database;
  11. public override GLib.Value union_value()
  12. {
  13. return this.value;
  14. }
  15. public override void set_union_value(GLib.Value v)
  16. {
  17. this.value = (Guid)v;
  18. }
  19. public Guid value
  20. {
  21. get
  22. {
  23. return Guid.parse(this.get_active_id());
  24. }
  25. set
  26. {
  27. _filter.refilter();
  28. bool success = this.set_active_id(value.to_string());
  29. set_inconsistent(!success);
  30. }
  31. }
  32. public bool filter_visible_func(Gtk.TreeModel model, Gtk.TreeIter iter)
  33. {
  34. Value id_val;
  35. model.get_value(iter, 0, out id_val);
  36. if (!_inconsistent && (string)id_val == INCONSISTENT_ID)
  37. return false;
  38. // TODO: filter based on type.
  39. return true;
  40. }
  41. public string object_name(Guid id, ref int num_unnamed)
  42. {
  43. string name = _database.object_name(id);
  44. if (name == OBJECT_NAME_UNNAMED) {
  45. if (num_unnamed > 0) {
  46. return "%s (%d)".printf(OBJECT_NAME_UNNAMED, num_unnamed++);
  47. } else {
  48. ++num_unnamed;
  49. return name;
  50. }
  51. }
  52. return name;
  53. }
  54. public InputObject(StringId64 type, Database database)
  55. {
  56. _type = type;
  57. _database = database;
  58. int num_unnamed = 0;
  59. Gee.HashMap<Guid?, Gee.HashMap<string, Value?>> all_objects = database._data;
  60. foreach (var o in all_objects) {
  61. if (StringId64(database.object_type(o.key)) == type)
  62. append(o.key.to_string(), object_name(o.key, ref num_unnamed));
  63. }
  64. }
  65. }
  66. } /* namespace Crown */