If you’ve ever used OS X, you know what an application launcher is. It’s a bar (or some other shape) containing application icons which allows you to start a program by clicking on the associated icon. There are of course many other features that make it more interesting. One of the obvious features is showing whether the application is running or not. On Apple’s Dock, this is indicated by a white glowing dot. On the Windows 7 taskbar, another application launcher, it’s indicated by a translucent white rounded rectangle behind the icon. These are the the minimal features, required for basic usability.
The interesting stuff starts when you allow special icons variously called widgets or docklets or plugins. These don’t necessarily map to a specific application but rather show other useful information. One widget might indicate your email inbox status with an indicator for newly received messages. Another widget useful in Windows would be a notification area (systray) replacement. Background applications often add a notification icon and this widget would provide access to these icons. Most application launchers have a widget which represents the recycle bin. It allows files to be dragged into its icon to be deleted and provides easy access to the directory and easy emptying.
As some people might know, I built just such a program in my sophomore year at college. It was a simple borderless window stuck to an edge of the screen with a set of icons written in Java. I had a working prototype within a few days of work and it seemed very promising. Unfortunately, it soon became apparent that I was in over my head. I had no experience with separation of concerns and the code became unmaintainable.
A few months ago I decided to use everything I learned in school and on my own to make a new version of WinDock using C#. My first iteration used MVC and WinForms. The second iteration used MVP and WinForms. After a few weeks of struggling with native calls and WinForms quirks, I finally decided to take the plunge into WPF and ported the MVP version to WPF. WPF provided an amazing amount of power and reduced my GUI rendering code down to effectively nil.
After working with WPF for some time, I came across Laurent Bugnion’s MVVM Light framework. I knew that MVVM was WPFs answer to MVP but it seemed intimidating. After watching his MIX video, I decided to give it a try. It made a lot of sense to me and I ended up switching everything to MVVM. I’m now happy with this design and I’m nearing feature completeness on WinDock.