This week at the Microsoft PDC I showed gsharp, our GUI repl for the C# 3.0 language, a tool that I had previously talked about.
Before the PDC we copied an idea from Owen's great reinteract shell where we provide our REPL with a mechanism to turn objects into Gtk.Widgets which we then insert.
Out of the box we support System.Drawing.Bitmap images, we turn those into Gtk Widgets that then we render:
I also added a toy Plot command that can take a number of lambdas that return floats to do some cute plots. The plots are just rendered into a System.Drawing.Bitmap so they get painted on the screen automatically:
But you can add your own handlers for any data types you want, all you have to do is call RegisterTransformHandler with a function that can return a Gtk.Widget based on an input object, or null if it does not know how to render it.
The implementation to render images is very simple, this is the implementation:
using System; public class MyRenderHelpers { public static object RenderBitmaps (object o) { System.Drawing.Bitmap bitmap = o as System.Drawing.Bitmap; if (bitmap == null) return null; return new BitmapWidget (bitmap); } }
You can put your own library of helper methods in a compiled assembly in ~/.config/gsharp, and then register all of your types from a file ending with the extension .cs in ~/.config/gsharp:
RegisterTransformHandler (MyRenderHelpers.RenderBitmaps);
And you are done.
The above could be used for example to create all kinds of information visualizers for the GUI REPL. I would love to see a LINQ query navigator, similar to the one in LinqPad.
Update: A one line change that brings gsharp into the new millenium by rendering `true' and `false' with icons instead of text:
Posted on 02 Nov 2008