As Leo moves to multiple GUIs? plug-ins will either have to support each different GUI, or only run on some and not others. It would be unreasonable for Leo to provide GUI independent functions to allow plug-ins to do anything in any GUI, because (a) it's too much work, (b) it would be yet another generic GUI, in other words a re-invention of the wheel, and (c) it would require working to the lowest common denominator, which defeats the point of multi-GUI support in the first place.

But I think Leo could provide a small and simple set of GUI-independent functions for plug-ins to use to do interface related things that would make it possible to write most plug-ins for all GUIs? at once.

Here's the start of a list of such functions - what are people's thoughts on whether this is doable and what's missing from the list?

  1. Set foreground / background color of headline text.
  2. Open menu on right click on node (maybe this exists already?).
  3. Display one or more small image next to (left of) the node.
  4. Create and write to a status line (may require multiple or shared status lines).
  5. Basic set of simple dialogs (Yes/No, Info./Warning/Error, and 'enter a value')

Number 3 is the one that I think would allow plug-ins to do quite a lot, they could render the progress indicator or node marker or whatever it is they want shown into a little image, and have Leo display it. That I think is more doable than having Leo supply a whole lot of drawing primitives for drawing in a GUI independent manner.

One thing that I wouldn't include would be support for arbitrary custom dialogs. I think that's too open ended. Simple Yes/No, Info./Warning/Error, and 'enter a value' dialogs wouldn't be hard though.

Another question: can a plug-in running in say a wxWidgets GUI cleanly open a tkinter dialog?

update --terry_n_brown, Wed, 17 Jan 2007 09:02:27 -0800 reply

EKR has responded that basically all of this is going to happen, it just needs some existing things to be made GUI independent and some docs. And no, you can't (or at least shouldn't) try opening a tkinter dialog from a wxWidgets GUI.