Finally an update to this log, conveniently before midterm evaluations! I have updated the midterm deliverables page to reflect the current status of the project, but for those who love visuals here is a screenshot showing off the interface in action.
As of posting, most basic functionality is complete. As listed in the midterm deliverables there are still some outstanding features not yet working. Missing is, UPnP support, a persistent interface between sessions, restoring individual torrent settings between sessions, viewing pieces, creating and setting labels, and also a small handful of helper features(auto add from directory, move data once download is complete, etc).
Regarding viewing pieces, to my knowledge, currently there is nothing like a piece bar available in gtk-sharp. This is going to be needed to illustrate torrent availability/pieces, as well as a file’s download progress. Although at the moment I’m not sure what creating a custom widget like this entails.
After adding filtering support to my TreeView, drag n’ drop broke. This was due to the TreeModelFilter not supporting the TreeDragDest interface. I am having a hard time solving this problem. The following Gtk warning has some suggestions,
Gtk-WARNING **: You must override the default 'drag_drop' handler on GtkTreeView when using models that don't support the GtkTreeDragDest interface and enabling drag-and-drop. The simplest way to do this is to connect to 'drag_drop' and call g_signal_stop_emission_by_name() in your signal handler to prevent the default handler from running. Look at the source code for the default handler in gtktreeview.c to get an idea what your handler should do. (gtktreeview.c is in the GTK source code.) If you're using GTK from a language other than C, there may be a more natural way to override default handlers, e.g. via derivation.
I’m sure this is an easy solution, but as I am new to gtk-sharp, I’m quite lost! I’ve tried creating a stub by overiding OnDragDrop in my TreeView but that of course stopped DragDataReceived from working. It suggests a call to g_signal_stop_emission_by_name() (through a P/Invoke?) but I’m guessing that would be the same as creating a stub. Lastly I derived TreeModelFilter and implemented the interface but at runtime I received a cannot override exception.
Other then the above problems, development has been great. Alan’s MonoTorrent library is great to work with.