About six months ago (or has it been longer? I dunno–time flies when you’re having fun!) I finally decided I’d had enough of Gtkmm and Gtk+. I had been working to port our D&D initiative tracking (and more!) application Turn Watcher to Mac OS/X. And I had been spending quite a lot of time on it too. But everything I did resulted in undefined behavior and crashes when it didn’t work, to ugly looking screens when it did. When I looked back on all the work it took us just to get Gtkmm compiled and working for Windows, let alone Mac, I realized that Alexis and I had been flatly wasting our time.
Now this is not to denigrate the extraordinary efforts of the Gtk+ and Gtkmm teams. Their library is top notch, and I’m glad it’s available for GNU/Linux-based applications. I also am a Gimp and Pidgin user, so I can’t complain too loudly. Their library is great for what it is. But it’s a real pain to port to platforms other than GNU/Linux.
Enter wxWidgets.
When I ran the wxWidgets example code provided with their 2.8 distribution I fell in love with the look and feel. These guys had managed to create a nice looking GUI interface on all three platforms (Mac OS/X, Windows and GNU/Linux) that looked consistent and native-based. I decided that it was time to retire version 1.2 of our sandbox and create version 1.3–based on wxWidgets instead of Gtk/Gtkmm. What does this mean? The sandbox is far easier to compile for one. Gtk+ alone has many dependencies that one must compile for each target system, and that is far from trivial (unless you’re running Linux). Gtkmm is not as hard to compile successfully under other OSes, but it does have a huge dependency footprint. Not to mention, but we had to make special tweaks to the configure scripts in many of the dependency projects. And as I mentioned above, Mac OS/X support just isn’t there yet (for example, it doesn’t even include native menu support–menus are attached to the main window like under KDE/Linux or Windows). Very experimental code indeed.
wxWidgets on the other hand compiles right out of the box on all three platforms. It is well documented and very stable. Now the hard part? Porting Turn Watcher from Gtkmm to wxWidgets. And that is what the holdup is all about!
The bad news is that for platforms that worked well, Gtk+ provided a slightly nicer look to images and the TreeView. However, wxWidget’s overall look is better in that it uses as much native platform-dependent code as possible. Therefore, Mac OS/X apps look like native applications. Win32 apps look like native Win32 apps. Likewise, Linux apps look like…”native” Gtk+ based apps! This is because each platform has its own backend created using the native facilities for each platform, and under Linux, it uses the Gtk+ backend. So for our Linux users, Turn Watcher version 2.0 won’t look that much different, but for our Windows users, you will notice a difference. And, we can open up the field for Mac OS/X users who have been wanting to run on their platform of choice!
wxWidgets opens up some new features frankly not possible under Gtk+: the addition of an “HTML” view:
Want to see more sneak-preview pictures?
Check out our page on Facebook.
In the image above you see a new view which is a departure away from the traditional grid-based way of showing the initiative order. Many of our customers asked for a way to store more information about a combatant, and here is a way to not only add new fields (like Condition Track, for example), but to allow the GM to enter a large body of notes, viewable by clicking on the combatant in the right hand field. I’m actually accomplishing this via a class available in wxWidgets called “wxHtmlView.” All you have to do is shove some HTML code in and it handles the rest! Also, notice the “TurnWatcher” image on the middle right side. A new feature available allows the GM to associate a custom image with the combatant. Once I’ve implemented the HUD (Heads Up Display), I will give a choice to the user–ClassicView, CustomView or maybe a little of both!
So now you maybe have a better idea of the hold-up. A complete overhaul of the GUI engine took a lot more work than I anticipated.
PS: I realize we promised a 1.4 release to our customers who bought the upgrade. We will be offering a discount to those customers as an incentive to upgrade to Turn Watcher Version 2.0. We will also change the way we handle upgrades in general. When you buy a copy of Turn Watcher Version 2.0, you will be able to upgrade freely (until the next major version change, which will be a long ways off, I can guarantee you ).