using System.Collections.ObjectModel; using Eto.Forms; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using TimelapseApi; namespace Timelapse.Desktop; internal class ExportWindow : Dialog { public class Export { public Export(string text) { Text=text; } public string Text {get;set;} public override string ToString() { return Text; } } public class Share { public Share(string text,Func show) { ShowDialog = show; Text = text; } public Func ShowDialog {get;set;} public string Text {get;set;} public override string ToString() { return Text.ToString(); } } public ExportWindow(Form main,Api instance,GuiData guiData,bool share) { Title=share ? "Export and Share" : "Export"; DynamicLayout lyt=new DynamicLayout(); lyt.BeginHorizontal(); lyt.BeginVertical(); Button acceptBtn =new Button() { Text=share ? "Export and Share" : "Export", Enabled=false }; ObservableCollection shares=new ObservableCollection(); List exports=new List(); DropDown export = new DropDown(); lyt.Add(export,true); DropDown shareDD = new DropDown() {Enabled=false,DataStore=shares}; if(share) { lyt.EndBeginHorizontal(); lyt.Add(shareDD); } lyt.EndHorizontal(); lyt.EndBeginVertical(); lyt.AddSpace(true,true); lyt.BeginHorizontal(); lyt.AddSpace(true); lyt.Add(acceptBtn); lyt.EndHorizontal(); lyt.EndVertical(); this.Content=lyt; if(guiData.Export != null) { foreach(var item in guiData.Export) { exports.Add(new Export(item.Text)); } export.DataStore=exports; export.SelectedIndexChanged += (sender,e)=>{ int index=export.SelectedIndex; if(index > -1 && exports.Count > 0) { if(share) { acceptBtn.Enabled=false; shareDD.Enabled=true; shares.Clear(); if(guiData.Share != null) { foreach(var item in guiData.Share) { var j=new Share(item.Text,item.ShareActionAsync); shares.Add(j); } } }else{ acceptBtn.Enabled=true; } } else { acceptBtn.Enabled=false; shareDD.Enabled=false; } }; shareDD.SelectedIndexChanged+=(sender,e)=>{ int index=shareDD.SelectedIndex; acceptBtn.Enabled=index > -1 && shares.Count > 0; }; acceptBtn.Click += async (sender,e)=>{ int pos = export.SelectedIndex; Func? dlg=null; if(share) dlg=shares[shareDD.SelectedIndex].ShowDialog; var filename= await instance.Export(main,pos); if(share && dlg != null && !string.IsNullOrWhiteSpace(filename) && File.Exists(filename)) { await dlg(main,filename); } }; } } }