reference_chooser.vala 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 ReferenceChooser : Gtk.Box
  9. {
  10. // Data
  11. private bool _stop_emit;
  12. private string _type;
  13. // Widgets
  14. private Gtk.Entry _name;
  15. private Gtk.Button _selector;
  16. private ProjectStore _project_store;
  17. public string value
  18. {
  19. get
  20. {
  21. return _name.text;
  22. }
  23. set
  24. {
  25. _stop_emit = true;
  26. _name.text = value;
  27. _stop_emit = false;
  28. }
  29. }
  30. // Signals
  31. public signal void value_changed();
  32. public ReferenceChooser(ProjectStore store, string type)
  33. {
  34. Object(orientation: Gtk.Orientation.HORIZONTAL, spacing: 0);
  35. // Data
  36. _stop_emit = false;
  37. _type = type;
  38. // Widgets
  39. _name = new Gtk.Entry();
  40. _name.sensitive = false;
  41. _name.hexpand = true;
  42. _name.changed.connect(on_value_changed);
  43. _selector = new Gtk.Button.from_icon_name("document-open-symbolic");
  44. _selector.clicked.connect(on_selector_clicked);
  45. _project_store = store;
  46. add(_name);
  47. add(_selector);
  48. }
  49. private void on_value_changed()
  50. {
  51. if (!_stop_emit)
  52. value_changed();
  53. }
  54. private void on_selector_clicked()
  55. {
  56. Gtk.Dialog dg = new Gtk.Dialog.with_buttons("Select resource"
  57. , null
  58. , DialogFlags.MODAL
  59. , null
  60. );
  61. var rb = new ResourceBrowser(null, _project_store, false);
  62. rb.set_type_filter(type_filter);
  63. rb.resource_selected.connect(() => { _name.text = rb._name; dg.response(ResponseType.OK); });
  64. dg.skip_taskbar_hint = true;
  65. dg.get_content_area().add(rb);
  66. dg.show_all();
  67. dg.run();
  68. dg.destroy();
  69. }
  70. private bool type_filter(string type, string name)
  71. {
  72. return _type == type;
  73. }
  74. }
  75. }