FileChooser.vala 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Adw;
  2. using Gtk;
  3. namespace Publicate {
  4. public class FileChooserPopover : Popover {
  5. private ViewerWindow toplevel;
  6. private FileExplorer explorer;
  7. public signal void asset_selected(Ppub.Asset asset);
  8. public FileChooserPopover(ViewerWindow window) {
  9. toplevel = window;
  10. var box = new Box(Orientation.VERTICAL, 8);
  11. explorer = new FileExplorer();
  12. explorer.height_request = 200;
  13. explorer.asset_selected.connect(selected);
  14. box.append(explorer);
  15. child = box;
  16. }
  17. public void set_assets(Invercargill.Enumerable<Ppub.Asset> files) {
  18. explorer.set_assets(files);
  19. }
  20. public void set_selected_item(string name) {
  21. explorer.set_selected_item(name);
  22. }
  23. private void selected(Ppub.Asset asset) {
  24. popdown();
  25. asset_selected(asset);
  26. }
  27. }
  28. public class FileChooserRow : ActionRow {
  29. public signal void asset_selected(Ppub.Asset asset);
  30. private ViewerWindow toplevel;
  31. private FileChooserPopover popover;
  32. public string selected_asset {get; set;}
  33. public FileChooserRow(ViewerWindow window) {
  34. toplevel = window;
  35. subtitle = "Not selected";
  36. popover = new FileChooserPopover(window);
  37. popover.asset_selected.connect(selected);
  38. add_suffix(popover);
  39. var button = new Button.from_icon_name("document-open-symbolic");
  40. button.clicked.connect(() => popover.popup());
  41. button.margin_bottom = 8;
  42. button.margin_top = 8;
  43. button.add_css_class("flat");
  44. add_suffix(button);
  45. activatable_widget = button;
  46. activatable = true;
  47. }
  48. public void set_assets(Invercargill.Enumerable<Ppub.Asset> files) {
  49. popover.set_assets(files);
  50. }
  51. private void selected(Ppub.Asset asset) {
  52. selected_asset = name;
  53. subtitle = asset.name;
  54. asset_selected(asset);
  55. }
  56. public void set_selected_item(string name) {
  57. subtitle = name;
  58. popover.set_selected_item(name);
  59. selected_asset = name;
  60. }
  61. }
  62. }