Monday, November 12, 2007

Version 0.6 Released

Version 0.6 has been released (slowly but surely making my way to version 1.0). This version is functionally complete and the APIs are relatively stable. The developer toolkit now contains a modified version of the Abeille Forms Designer. This version has a new file menu option that allows Abeille forms to be saved as SDF. Most of the property forms in the Widget Explorer were designed with this tool.

The Widget Explorer allows most of the widgets and their associated properties to be visually configured and explored in real-time. You can play around with multi-color gradients, semi-transparent background and overlay images as well as non-rectangular line borders, all of which can be combined to create some interesting visual effects. These features are supported for most widgets.

You can also check out the MS Outlook Demo again which highlights the support for gradient selection painters with custom borders and having the border (and focus rectangle) around the row instead of the column (when columns are not selectable)

A note on colors:

  • plus and minus (+- ) are used to adjusts luminance
  • when using hex, you can specify the alpha value for a color by adding it to the end of the normal 6 character hex string (e.g. #ffffff80 gives a 50% transparent white) or if you use a named color then you can say “white@50” to get 50% transparent white.
  • you can type any shorthand color value into any of the color fields and it will resolve to the correct hex color value

Sunday, August 12, 2007

Introducing Sage

Sage is the realization of an idea I had about 11 years ago after I had built my first Netscape plug-in to provide a table widget capable of doing things that table widgets do in typical desktop applications. I wanted to be able to build desktop caliber apps that are built the way web applications are built, using a markup language to describe the UI and scripting to control the interactions. I also wanted them to be URL centric, such that all resources and data are accessed via an URL.

Except for the quality of tools available for building JavaScript/DHTML (or AJAX) applications, not a lot has changed. Granted the technology has evolved enough such that the table widget plug-in can now be built using AJAX. However, the level of sophistication of desktop has also significantly increased in that span of time, and to match that level of sophistication using existing approaches requires a lot of effort to just get something that is close enough. Also, while the new Yahoo mail client is fairly impressive, I am not about to ditch my Microsoft Outlook client anytime soon.

MS Outlook happens to be one of the three most used applications on my desktop (the other two being FireFox, and NetBeans). One of the goals I had for Sage was to be able to build a UI that looks and functions just like Outlook by simply using markup and scripting. I also wanted the applications capable of being run standalone without the need for a web browser but to also able to be launched via a web browser. Another key requirement was the data model. While there are a number of existing tools out there that allow you to do some of these things, none that I know of, fully addresses the issue of easily populating widgets with data and providing the widgets with some understanding of how to render the data (fonts, colors, action links, icons, tooltips, drag and drop, etc). Basically, to be able to not just markup the UI but also markup data (similar to what you would do if the data was being presented via a web page), yet still able to do typical client-side data manipulations like sorting, filtering, drag and drop etc. It is not that some of these things are not possible with the current technologies, it is the effort required to do them is what I had an issue with.

Thus was Sage born, built on Java (because of the proliferation of the runtime and commercial and open source libraries available), and Swing (because it is written in Java so I could fix bugs and make changes as needed). I do hope to have a .Net version someday. Sage is still in its infancy but the functionality is comprehensive enough and it is stable enough to be officially unveiled to the public. As you might expect, documentation is sparse but there are a couple of full fledged examples (including a MS Outlook clone), and the source code for the engine is also available.

Sage was born out of my needs, wants, and experiences with other technology. If your wants, needs, or experiences differ from mine, then Sage may be of little interest to you. You can find the demos and downloads at


PS. Some of the icons in the MS Outlook clone may be copyright Microsoft. So if you feel the urge to take the demo and make it a real mail application, please change the icons. The icons for Outlook were used merely to demonstrate the ability to easily markup a UI that looks and functions like Outlook.