Wouldn’t it be nice if the code for your E-mail client would look like this?
private void GetHeadersCallback (Tny.Folder folder, bool cancel, Tny.List model, IntPtr user_data)
{
if (!cancel)
this.headers_treeview.Model = (Gtk.TreeModel) model;
}
private void StatusCallback (GLib.Object sender, Tny.Status status)
{
this.progressbar.Fraction = status.Fraction;
}
private void GetMsgCallBack (Tny.Folder folder, bool cancel, Tny.Msg msg, IntPtr user_data)
{
if (msg != null && !cancel)
this.msg_view.Msg = msg;
}
private void OnMailSelected (object o, EventArgs args)
{
Tny.Ui.GTK.HeaderListModel model = (o as Gtk.TreeSelection).TreeView.Model
as Tny.Ui.GTK.HeaderListModel;
Tny.Header header = model.GetHeader (o as Gtk.TreeSelection);
if (header != null) {
Console.WriteLine ("Message selected: " + header.From);
this.cur_folder.GetMsgAsync (header, GetMsgCallBack, StatusCallback);
}
}
private void OnFolderChanged (object o, EventArgs args)
{
Tny.Ui.GTK.FolderStoreTreeModel model = (o as Gtk.TreeSelection).TreeView.Model
as Tny.Ui.GTK.FolderStoreTreeModel;
Tny.Folder folder = model.GetFolder (o as Gtk.TreeSelection);
if (folder != null) {
Tny.Ui.GTK.HeaderListModel headers_model = new Tny.Ui.GTK.HeaderListModel();
Console.WriteLine ("Folder selected: " + folder.Name);
this.cur_folder = folder;
folder.GetHeadersAsync (headers_model, true, GetHeadersCallback, StatusCallback);
}
}
It would