FileChooser.vala 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 FileChooserRow(ViewerWindow window) {
  33. toplevel = window;
  34. subtitle = "Not selected";
  35. popover = new FileChooserPopover(window);
  36. popover.asset_selected.connect(selected);
  37. add_suffix(popover);
  38. var button = new Button.from_icon_name("document-open-symbolic");
  39. button.clicked.connect(() => popover.popup());
  40. button.margin_bottom = 8;
  41. button.margin_top = 8;
  42. button.add_css_class("flat");
  43. add_suffix(button);
  44. activatable_widget = button;
  45. activatable = true;
  46. }
  47. public void set_assets(Invercargill.Enumerable<Ppub.Asset> files) {
  48. popover.set_assets(files);
  49. }
  50. private void selected(Ppub.Asset asset) {
  51. subtitle = asset.name;
  52. asset_selected(asset);
  53. }
  54. public void set_selected_item(string name) {
  55. subtitle = name;
  56. popover.set_selected_item(name);
  57. }
  58. }
  59. }