Saturday, May 27, 2006

a slight detour

My wife is a professional trombonist who also teaches private lessons in a variety of brass instruments. Her beginner students are especially in need of repeated drills on fingering / positions on their instruments. There are several training programs out there, and while each has useful features, my wife wasn't completely happy with any of them. Since she is married to a programmer :-) she figured she could acquire a program that had exactly the features she has been looking for.

So I've been working on this, and doing it in Common Lisp. I've been spending the majority of my time on it especially recently as a final push to get the first version out. While this has taken time away from direct work on Graphic-Forms, it has given me the chance to use GF as an application developer. That's a perspective that every library developer should take periodically; I believe "dogfooding" is a popular phrase these days :-) And this fingering training program has served as a good testcase.

So, this has been a slight detour in my work, but it's a worthy cause and a lot of fun, too.

Sunday, May 14, 2006

pre-0.4.0 status report

For those who are following progress on Graphic-Forms, here's another status report.

One of the major themes for 0.4.0 will be support for custom dialogs, and that is where most of my effort have been devoted since 0.3.0. One of the reasons why this feature has taken so long to appear in GF is that I put a lot of thought into whether to reuse the built-in dialog manager and dialog template mechanisms that Win32 provides.

A discussion of the tradeoffs could occupy a whole separate blog entry, which I think I will indeed write up and post sometime. I'll cut to chase for now and state that I'm using low-functionality to implement proper dialog behavior.

Some other miscellaneous development:

• implemented a layout manager called `heap-layout' whose behavior is to align all the children of a container in a single Z-order-wise column and allow the application to select which of the children are top-most at any given time. This kind of layout is useful when implementing windows with panels containing related functionality, where only one such panel should be visible at a time (think property sheets or wizard dialogs). The user can then flip between panels based on some gesture such as clicking on a tab control.

• implemented event-focus-gain/event-focus-loss for reacting to changes in focus

• fixed some bugs in key event processing that prevented repeated events for untranslateable keys (e.g., function keys F1-F12) from being delivered

• implemented background/foreground color and font customization for labels, with infrastructure put into place for other controls

• added a method to programmatically append separators to menus; this was already possible via DEFMENU but not yet supported for dynamic menu management

• rewrote timer event processing such that GF no longer uses the TimerProc callback technique, but instead each call to the Win32 SetTimer function is made with the handle to a non-visible utility window that the library creates

• fixed some problems with timer initial delays

That's it for now. Happy coding!