select_resource_dialog.vala 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. * Copyright (c) 2012-2026 Daniele Bartolini et al.
  3. * SPDX-License-Identifier: GPL-3.0-or-later
  4. */
  5. namespace Crown
  6. {
  7. public class SelectResourceDialog : Gtk.Window
  8. {
  9. public string _resource_type;
  10. public Gtk.EventControllerKey _controller_key;
  11. public ResourceChooser _chooser;
  12. public Gtk.HeaderBar _header_bar;
  13. public signal void resource_selected(string type, string name);
  14. public SelectResourceDialog(string resource_type, ProjectStore project_store, Gtk.Window? parent)
  15. {
  16. _resource_type = resource_type;
  17. this.set_icon_name(CROWN_EDITOR_ICON_NAME);
  18. if (parent != null) {
  19. this.set_transient_for(parent);
  20. this.set_modal(true);
  21. }
  22. this.delete_event.connect(on_close);
  23. _controller_key = new Gtk.EventControllerKey(this);
  24. _controller_key.set_propagation_phase(Gtk.PropagationPhase.CAPTURE);
  25. _controller_key.key_pressed.connect((keyval) => {
  26. if (keyval == Gdk.Key.Escape) {
  27. this.close();
  28. return Gdk.EVENT_STOP;
  29. }
  30. return Gdk.EVENT_PROPAGATE;
  31. });
  32. _header_bar = new Gtk.HeaderBar();
  33. _header_bar.title = "Select a %s".printf(resource_type);
  34. _header_bar.show_close_button = true;
  35. this.set_titlebar(_header_bar);
  36. _chooser = new ResourceChooser(null, project_store);
  37. _chooser.set_type_filter(on_resource_chooser_filter);
  38. _chooser.resource_selected.connect(on_resource_chooser_resource_selected);
  39. this.add(_chooser);
  40. }
  41. public bool on_close()
  42. {
  43. this.hide();
  44. return Gdk.EVENT_STOP;
  45. }
  46. public bool on_resource_chooser_filter(string type, string name)
  47. {
  48. return _resource_type == type;
  49. }
  50. public void on_resource_chooser_resource_selected(string type, string name)
  51. {
  52. resource_selected(type, name);
  53. }
  54. }
  55. } /* namespace Crown */