using Adw; using Gtk; namespace Publicate { public class FileChooserPopover : Popover { private ViewerWindow toplevel; private FileExplorer explorer; public signal void asset_selected(Ppub.Asset asset); public FileChooserPopover(ViewerWindow window) { toplevel = window; var box = new Box(Orientation.VERTICAL, 8); explorer = new FileExplorer(); explorer.height_request = 200; explorer.asset_selected.connect(selected); box.append(explorer); child = box; } public void set_assets(Invercargill.Enumerable files) { explorer.set_assets(files); } public void set_selected_item(string name) { explorer.set_selected_item(name); } private void selected(Ppub.Asset asset) { popdown(); asset_selected(asset); } } public class FileChooserRow : ActionRow { public signal void asset_selected(Ppub.Asset asset); private ViewerWindow toplevel; private FileChooserPopover popover; public FileChooserRow(ViewerWindow window) { toplevel = window; subtitle = "Not selected"; popover = new FileChooserPopover(window); popover.asset_selected.connect(selected); add_suffix(popover); var button = new Button.from_icon_name("document-open-symbolic"); button.clicked.connect(() => popover.popup()); button.margin_bottom = 8; button.margin_top = 8; button.add_css_class("flat"); add_suffix(button); activatable_widget = button; activatable = true; } public void set_assets(Invercargill.Enumerable files) { popover.set_assets(files); } private void selected(Ppub.Asset asset) { subtitle = asset.name; asset_selected(asset); } public void set_selected_item(string name) { subtitle = name; popover.set_selected_item(name); } } }