1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using Adw;
- using Gtk;
- namespace Publicate {
- public class FileExplorer : Box {
-
- private ListBox file_list;
- private ScrolledWindow scroll_window;
- private Invercargill.Sequence<Ppub.Asset> assets;
- private Invercargill.Sequence<FileItem> file_items;
- public signal void asset_selected(Ppub.Asset asset);
- public Ppub.Asset? selected_asset {get; private set;}
- public FileExplorer() {
- scroll_window = new ScrolledWindow();
- scroll_window.hscrollbar_policy = PolicyType.NEVER;
- scroll_window.propagate_natural_width = true;
- append(scroll_window);
- create_list();
- }
- private void create_list() {
- file_list = new ListBox();
- scroll_window.child = file_list;
- file_list.row_activated.connect((row) => {
- var item = (FileItem)row;
- selected_asset = item.asset;
- asset_selected(item.asset);
- });
- }
-
- public void set_assets(Invercargill.Enumerable<Ppub.Asset> files) {
- create_list();
- assets = files.to_sequence();
- file_items = new Invercargill.Sequence<FileItem>();
-
- foreach(var asset in assets) {
- var item = new FileItem(asset);
- file_list.append(item);
- file_items.add(item);
- }
-
- }
- public void set_selected_item(string name) {
- var item = file_items.where(i => i.asset.name == name).first_or_default();
- file_list.select_row(item);
- }
- }
- public class FileItem : ActionRow {
- public Ppub.Asset asset {get; private set;}
- public FileItem(Ppub.Asset asset) {
- this.asset = asset;
- activatable = true;
- title = asset.name;
- subtitle = ContentType.get_description (asset.mimetype);
-
- var icon = new Image.from_gicon (ContentType.get_icon (asset.mimetype));
- add_prefix (icon);
- }
-
- }
- }
|