Tuesday, January 06, 2009

Another Year of WX

I wanted to write this summary of the work done on wx in 2008 before the end of the year but, as it unfortunately often happens, ran out of time and couldn't do it. Still, better late than never -- again this is a very familiar principle -- and so here is a brief summary of important things which happened to wx in 2008. It liberally reuses the material from Robert's Wonderful World of WX write up, read it for more details.

So, what have we done in the almost 7000 revisions checked in during 2008? Maybe surprisingly, the most important changes haven't been about writing code at all but rather about improving the project infrastructure. This may not seem like a big deal but the old SourceForge-based bug tracker was completely unusable and basically was unused because of this and literally hundreds of bugs could have been triaged and closed since the switch to using Trac. We also finally have a working BuildBot which allows to detect breaking the build (and assigning the blame) quickly and automatically and this is very useful for a project such as wx where it's not always possible to test the compilation of the new code in all configurations under all platforms. Finally, the documentation now is in a new Doxygen-based format which makes it easier to maintain and contribute to it, as well as producing nicer results.

By the way, you might have noticed that one of the goals of these changes was to make it easier to contribute to wxWidgets:

  • Trac not only allows us to process bugs more efficiently but will hopefully also encourage others to to help with weeding out the duplicates (something we really couldn't expect the others to do with the SourceForge tracker as we couldn't even do it ourselves). And it allows for better bug categorizations, for instance you can see all easy to fix bugs at a glance and hopefully this can encourage more people to try fixing them (the list is short right now but will probably become longer with time).

  • The BuildBot allows to verify that the svn trunk version at least builds which is supposed to encourage people trying it out. We also hope to get more volunteers setting up their own build slaves to help us test even more configurations.

  • And the new documentation format has already allowed many more people to submit contributions to the manual than before and we hope that this trend is going to continue. And using Doxygen further lowers the barrier to entry to wxWidgets development as no LaTeX knowledge is needed any more.



But while waiting for the success of our diabolic plans to make wxWidgets users work on improving the library themselves we still found time to do quite a few things ourselves. From the strategical perspective the most important change of 2008 was certainly the decision to start merging the old Carbon-based wxMac port and the alpha-quality wxCocoa into the new, one and only, wxOSX port which will run on both 32 and 64 bit platforms and also iPods and iPhones and not just the boring desktops. And as a side note, wxOSX can now also be built as a framework and not just as plain old Unix-style dynamic library.

Another strategic decision was to concentrate more on the quality of the library than on the quantity of the things it may do. This has led to dropping of ODBC library which was embarrassingly buggy and unmaintained since a very long time and spending a lot of effort on bug fixing, including the inconsistencies in behaviour between different ports (and while this post intentionally doesn't cite any names to avoid accidentally omitting somebody, I do have to thank once again Google for organizing, once again, the Summer of Code which allowed us to spend more resources than would have otherwise been possible on this task -- let's give credit where it is due). In the same category, we have finally cleaned up wxSocket and wxURL code which became an acute embarrassment to all of us after a decade of bit-rotting and also fixed some, although by far not all, problems with wxGrid which also suffered from chronic lack of attention.

Of course, all this doesn't mean that there were no new features added so let me list the most important ones:

  • The first among them was the long-awaited inclusion of wxPropertyGrid in wxWidgets itself.

  • wxDataViewCtrl and related classes continued to be significantly enhanced.

  • wxRichTextCtrl has benefited from many small but cumulatively important improvements as well.

  • As part of improving wxGrid/wxListCtrl columns display support, a new wxHeaderCtrl class was added and a handy wxRearrangeList and related classes were added and column reordering was implemented.

  • A convenient new sizer class, wxWrapSizer, was added.

  • wxCalendarCtrl now has a native implementation.

  • The humble wxMessageDialog got a much needed face lift as well, in particular you can finally use custom labels for its buttons

  • We even found something to improve in wxStaticText which now supports "ellipsization" of its contents.

  • wxGLCanvas gained anti-aliasing (multi-sampling) support.

  • The main -- but far from only -- change to AUI library was the addition of wxAuiToolBar.

  • Events (and hence timers and asynchronous sockets) support was finally added to wxBase, after years of planning to do it.


And I probably forget quite a few more.

But while things have progressed quite a lot, we didn't manage to do everything we'd have liked to, of course (otherwise what would be doing this year?). My main regret is that we didn't manage to release 2.9.0 development branch preview release as I'd really like to do this a.s.a.p. to get more feedback about the Unicode-related changes. Among the features we hoped to add this year but didn't one really stands out: a lot of people are asking for images support in wxButton and we really should support this as it's not even difficult to do so this will definitely be something to do in 2009.

The two other small things we hope to see in this new year are the wxOSX completion and hopefully the 3.0 release. Let's see if this happens...

That's all for 2008 and see you in a year time (unless people find this post really interesting, in which case I might try to write monthly summaries of wx development)!

P.S. Edited to correct the date on 2009-01-09.

16 comments:

Anonymous said...

The post is really good and overview of new features is also very helpful. At least now I'm going to take a look at wxWidgets SVN and see if everything is as good as described here ;)
And it would be really very nice to see monthly reviews of new features.
Thanks for this post.

Anonymous said...

Thanks for this great post. I will for sure try to contribute where I can.

kowey said...

Happy new WX year! I should point out perhaps that wxhaskell 0.11 has just been released early this year too.

Unknown said...

The time and date of the posting (says June 2009 although its January here) show that wx is always ahead of its time ;)

Anyway, this is a really interesting post and I'd _love_ to see a monthly report on wx's progress.

Anonymous said...

Excellent post, quite comprehensive and very informative.
I'm very interested in reading this sort of post in the future!

Anonymous said...

A really good post! i also hope to read monthly a report regarding wx

Anonymous said...

so, you've come back from the future, eh? take a look at the date of this post:Thursday, June 04, 2009

VZ said...

Unfortunately my time machine still needs some work, otherwise I'd have just taken the future version of wx with me... For now I'll just correct the typo in the date of the post (which needed to be manually updated as it had been originally started in December 2008 and not January 2009 at all).

Anonymous said...

1) Thanks - v.interesting.

2) The date/title is displaying here (UK) as:

Monday, June 01, 2009
Another Year of WX

Anonymous said...

A great summary of a lot of great work. Lots of new things added, better infrastructure, and easier to use. iPod and iPhone progress is a nice surprise. Unicode is very nice. Thanks to everyone who worked on the wide range of improvements in 2008.

- Tim

alind sharma said...

Thats a noce post and a good review. I would like to suggest that a community maintained and supported designer for wx will be a good decision. We could take wxformbuilder(coz I like it ;) for start up. Otherwise many a things like wxsmith is there. Having so many adds up to a confusion for a newcomer. Alos we can start writing a book at wiki or somwhere else(ofcourse one that can be downloaded free and paid for getting a printable version from the website itself). This will help in generating revenue. I am very much influenced by the QT designer and want something like that in wx which has the latest widget support.

Anonymous said...

Nice overview, I'd be really interested in a monthly feature update!

Anonymous said...

Great overview. I'm interested too in monthly development log if you the time for it.

Thanks for the post!

Anonymous said...

Very nice. So hopefully there will be wxwidgets 3.0 in 2009. Thanks for the work.

Unknown said...

Writing a monthly progress report is very good step. It is very useful for wxUser like me that doesn't subscribe wxblog or mailing list.

I also completely agree with alind sharma suggestion. wxCommunity must select and promote one default RAD tool, so Sw Dev executive or novice programmer like me will be not confused with a lot of RAD tool choices (wxFormBuilder, visualWx, wxDev-C++, wxWorkshop, wxHatch, CodeDragon, wxRapid)

Although this can introduce conflict of interest for or opposition from wxWidgets developers who develop non-free RAD tool (such as DialogBlock, wxDesigner, and uiVersalBuilder) or develop unselected RAD tool.
But I think it will be a strategic decision that attract conversion from MS Visual user hence increase popularity of wxWidgets.
And then it will give benefit for all of us, including above developers.

Anonymous said...

Syafrudin Abi-Dawira said :"a lot of RAD tool choices (wxFormBuilder, visualWx, wxDev-C++, wxWorkshop, wxHatch, CodeDragon, wxRapid)"

...and wxSmith, part of Code::Blocks. Probably the better RAD editor with wxFormBuilder